Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - Traduzione VBA Macro da AutoCAD a VBscript in nanoCAD
Forum - Altri Linguaggi - Traduzione VBA Macro da AutoCAD a VBscript in nanoCAD

Avatar
tracciatura.net (Normal User)
Newbie


Messaggi: 2
Iscritto: 23/03/2019

Segnala al moderatore
Postato alle 1:07
Sabato, 23/03/2019
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:
Codice sorgente - presumibilmente Altri Linguaggi

  1. dim Obj
  2. Set Obj = ThisDrawing.ModelSpace.Item(0)
  3. ThisDrawing.Utility.Prompt "Obj.ObjectName:              " & Obj.ObjectName
  4. ThisDrawing.Utility.Prompt "isArray(Obj.InsertionPoint): " & isArray(Obj.InsertionPoint)
  5. ThisDrawing.Utility.Prompt "lbound(Obj.InsertionPoint) : " & lbound(Obj.InsertionPoint)
  6. 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
Codice sorgente - presumibilmente Plain Text

  1. 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
Codice sorgente - presumibilmente Plain Text

  1. 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
Codice sorgente - presumibilmente Altri Linguaggi

  1. dim pnt(2)
  2. pnt(0) = 400
  3. pnt(1) = 500
  4. pnt(2) = 0
  5. Obj.InsertionPoint = pnt


:om:
Poi gira e gira su google h trovato questo codice in Javascript....
Codice sorgente - presumibilmente VB.NET

  1. try {
  2.         ThisDrawing.Utility.Prompt(ThisDrawing.ModelSpace(0).EntityName);
  3.         ThisDrawing.Utility.Prompt(pt_toString(ThisDrawing.ModelSpace(0).insertionPoint));
  4. }
  5. catch (ex) {
  6.         ThisDrawing.Utility.Prompt("oops");
  7. }
  8.  
  9. function pt_toString(pt)
  10. {
  11.         var sp = new VBArray(ThisDrawing.Utility.CreateSafeArrayFromVector(pt))
  12.         return sp.toArray().toString();
  13. }


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????







PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:52
Sabato, 23/03/2019
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à.
PM Quote
Avatar
tracciatura.net (Normal User)
Newbie


Messaggi: 2
Iscritto: 23/03/2019

Segnala al moderatore
Postato alle 22:50
Sabato, 23/03/2019
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 ....
Codice sorgente - presumibilmente Altri Linguaggi

  1. Dim pnt
  2. pnt = ThisDrawing.Utility.CreateSafeArrayFromVector(Obj1.InsertionPoint)
  3.  
  4. ThisDrawing.Utility.Prompt pnt(0)
  5. ThisDrawing.Utility.Prompt pnt(1)
  6. ThisDrawing.Utility.Prompt pnt(2)


E' da 9 giorni che ci bisticcio ............

Ultima modifica effettuata da tracciatura.net il 23/03/2019 alle 23:06
PM Quote