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:
mi da questo risultato:
Obj.ObjectName: AcDbBlockReference
isArray(Obj.InsertionPoint): Vero
lbound(Obj.InsertionPoint) : 0
ubound(Obj.InsertionPoint) : 2
peccato che se tento
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
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
Poi gira e gira su google h trovato questo codice in Javascript....
Risultato di questo js?
AcDbBlockReference
400,500,0
Esattamente quello che mi serve......
e come diavolo faccio ad avere lo stesso risultato che ho in js in Vscript????
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
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
Esattamente quello che mi serve......
e come diavolo faccio ad avere lo stesso risultato che ho in js in Vscript????
aaa