Oppure

Loading
23/03/19 0:07
tracciatura.net
Salve a tutti, è da 2 settimane che non riesco a risolvere questo problema
Ho scritto una VBA Macro in AutoCAD che funziona perfettamente, visto che AutoCAD è molto costoso e AutoCAD LT non permette di fare Macro ho trovato in rete nanoCAD che è molto buono e permette di eseguire vbs js e lisp.
A questo punto con un po di difficoltà ho iniziato a tradurre la macro in vbs e andando putno per punto credevo sarei arrivato alla fine senza problema ma mi sono bloccato in questo punto:
Partiamo dalla acadentity che è una qualsiasi entità nel disegno (che sia linea arco ellisse cerchio blocco quota etc.) ma in questo caso sono certo che ThisDrawing.ModelSpace.Item(0) sia un AcDbBlockReference cioè un insieme di entità raggruppate in un blocco che tra le altre informazioni ha un InsertionPoint che è un array da 0 a 2 di double contenete le coordinate x y e z. Ora questo codice:
dim Obj
Set Obj = ThisDrawing.ModelSpace.Item(0)
ThisDrawing.Utility.Prompt "Obj.ObjectName:              " & Obj.ObjectName
ThisDrawing.Utility.Prompt "isArray(Obj.InsertionPoint): " & isArray(Obj.InsertionPoint)
ThisDrawing.Utility.Prompt "lbound(Obj.InsertionPoint) : " & lbound(Obj.InsertionPoint)
ThisDrawing.Utility.Prompt "ubound(Obj.InsertionPoint) : " & ubound(Obj.InsertionPoint)

mi da questo risultato:
Obj.ObjectName: AcDbBlockReference
isArray(Obj.InsertionPoint): Vero
lbound(Obj.InsertionPoint) : 0
ubound(Obj.InsertionPoint) : 2
peccato che se tento
ThisDrawing.Utility.Prompt Obj.InsertionPoint(0)

mi da errore
err: "Errore di run-time di Microsoft VBScript" raised an exception "L'oggetto non è un insieme: 'InsertionPoint'" at line 36 pos 0
ThisDrawing.Utility.Prompt Obj.InsertionPoint(0)

stessa cosa se tento
pnt_x = Obj.InsertionPoint(0)

mi da errore
2err: "Errore di run-time di Microsoft VBScript" raised an exception "L'oggetto non è un insieme: 'InsertionPoint'" at line 37 pos 0
pnt_x = Obj.InsertionPoint(0)

:(
dopo di che ho tentato di tutto ed ho trovate che se creo un array da 0 a 2 di double gli assegno dei valori poi lo assegno a Obj.InsertionPoint l'entità AcDbBlockReference si posta dall'attuale posizione al nuovo punto x=400 e y=500 z=0
dim pnt(2)
pnt(0) = 400
pnt(1) = 500
pnt(2) = 0
Obj.InsertionPoint = pnt

:om:
Poi gira e gira su google h trovato questo codice in Javascript....
try {
	ThisDrawing.Utility.Prompt(ThisDrawing.ModelSpace(0).EntityName);
	ThisDrawing.Utility.Prompt(pt_toString(ThisDrawing.ModelSpace(0).insertionPoint));
}
catch (ex) {
	ThisDrawing.Utility.Prompt("oops");
}

function pt_toString(pt)
{
	var sp = new VBArray(ThisDrawing.Utility.CreateSafeArrayFromVector(pt))
	return sp.toArray().toString();
}

Risultato di questo js?
AcDbBlockReference
400,500,0
:grr::grr::grr: Esattamente quello che mi serve......:grr::grr::grr:
e come diavolo faccio ad avere lo stesso risultato che ho in js in Vscript????






aaa
23/03/19 13:52
nessuno
Prova a

Dim insP As Variant
insP = Obj.InsertionPoint

quindi

ThisDrawing.Utility.Prompt insP(0)
ThisDrawing.Utility.Prompt insP(1)
ThisDrawing.Utility.Prompt insP(2)

Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità;) chiamava il gioco del Lotto Tassa sulla stupidità.
23/03/19 21:50
tracciatura.net
Ma che l'ho già provata questa combinazione ...
risultato
err: "Errore di run-time di Microsoft VBScript" raised an exception "Tipo non corrispondente" at line 19 pos 0
ThisDrawing.Utility.Prompt insP(0)

ma ti ringrazio , dopo il tuo consiglio ho provato questa combinazione e ... funziona ....
Dim pnt
pnt = ThisDrawing.Utility.CreateSafeArrayFromVector(Obj1.InsertionPoint)

ThisDrawing.Utility.Prompt pnt(0) 
ThisDrawing.Utility.Prompt pnt(1) 
ThisDrawing.Utility.Prompt pnt(2) 

E' da 9 giorni che ci bisticcio ............
Ultima modifica effettuata da tracciatura.net 23/03/19 22:06
aaa