Script python in vbscript

ciao grazie Emilio per le risposte

il codice che hai postato per il pulsante funziona ma quello che intendevo fare era eseguire la macro del pulsante usando il comando “RunPythonScript” all’interno di VBS

questa è la macro PY funzionante, che mi interessa eseguire all’interno dell’editor VBS:

_-RunPythonScript (
import Rhino as rh
import rhinoscriptsyntax as rs
lineTypeName="Z"
lineType=rh.DocObjects.Linetype()
lineType.Default()
lineType.Name=lineTypeName
rh.RhinoDoc.ActiveDoc.Linetypes.Add(lineType)
lineTypeIndex=rh.RhinoDoc.ActiveDoc.Linetypes.Find(lineTypeName, True)
lineType=rh.RhinoDoc.ActiveDoc.Linetypes[lineTypeIndex]
lineType.AppendSegment(10.0, True)
lineType.AppendSegment(15.0, False)
lineType.AppendSegment(10.0, True)
lineType.CommitChanges()
)

sono obbligato a passarlo nell’editor essendo che gli AppendSegment li dovrò poi inserire tramite un ciclo FOR essendo che tutto il resto del codice è fatto nell’editor VBS non mi è utile come macro nel pulsante.

quindi ciò che mi interessa è prendere pari pari la macro e riuscirla a farla eseguire tramite il comando Rhino.Command all’interno dell’editor di RhinoScript VBS (anzi dopo si deve aggiungere il ciclo FOR)

ho aggiunto i vbnewline ma nell’editor non li accetta fa lo stesso identico errore della sintassi che avevo postato ieri cioè: mi dice comando sconosciuto alla seconda riga

Rhino.Command "_-RunPythonScript " & _
	vbnewline & "lineTypeName='Z' " & _
	vbnewline & "lineType=Rhino.DocObjects.Linetype() " & _
	vbnewline & "lineType.Default() " & _
	vbnewline & "lineType.Name=lineTypeName " & _
	vbnewline & "Rhino.RhinoDoc.ActiveDoc.Linetypes.Add(lineType) " & _
	vbnewline & "lineTypeIndex=Rhino.RhinoDoc.ActiveDoc.Linetypes.Find(lineTypeName, True) " & _
	vbnewline & "lineType=Rhino.RhinoDoc.ActiveDoc.Linetypes[lineTypeIndex] " & _
	vbnewline & "lineType.AppendSegment(10.0, True) " & _
	vbnewline & "lineType.AppendSegment(15.0, False) " & _
	vbnewline & "lineType.AppendSegment(10.0, True) " & _
	vbnewline & "lineType.CommitChanges()"

in questo caso non ho inserito le parentesi come sopra per la macro essendo che ho letto nella guida che non dovrebbe essere necessario ma ho provato anche inserendole ma il risultato non cambia.

Hmmm … adesso non ho Rhino qui … non posso provare.

Se posso chiedere, per curiosita’ …
Come mai devi usare l’editor di VBS ? :slight_smile:

( Questi editor di Rhino potrebbero avere qualche problemino … )

mi correggo il secondo script aggiungendo le parentesi adesso mi funziona

il fatto e che ho un file rvb con tante sub già scritte quindi sono obbligato
solo che il codice postato può essere usato solo tramite python
ed essendo che le misure dovranno essere ricavate tramite
pointoncurve adesso dovrò aggiungere anche il ciclo for

lo so lo so: se avessi iniziato a programmare direttamente in Py questo problemino lo avrei evitato :slight_smile:

grazie come sempre Emilio e tieniti pronto che sicuramente mi servirà ancora aiuto
comunque qualche cosa che non torna c’è questo comando mi è molto ambiguo

beh che dire se la McNeel mi vuole ingaggiare per scovare piccole scocciature accetterei subito :slight_smile:

Non mi sono spiegato … sorry.

Non volevo sapere perche’ usi il VBS … lui e’ li’ belle che pronto, si puo’ usare finche’ si vuole. :wink:

Chiedevo perche’ devi usare l’EDITOR anziche’ lanciare il file VBS da un pulsante.

Perche’ il piccolo test che ho postato di pulsante che esegue delle istruzioni VBS …
che a loro volta usano Rhino.Command es eseguono istruzioni Python, sembra che funzioni. :slight_smile:

come avevo sottolineato tutti gli “AppendSegment” dovranno essere eseguiti tramite un ciclo for

ps è questa mi sa che è la parte più difficile e complicata

Vuoi dire che devi provare lo script mentre lo modifichi ?

Se e’ cosi’ …
Non c’e’ nessun bisogno di eseguire lo script dall’editor di Rhino.
Puoi benissimo usare un editor qualsiasi e salvare il file, poi testi lo script da pulsante.
Secondo me lo puoi fare anche dall’editor Rhino, se ti trovi bene a scrivere con quello.
Invece di eseguire il file dall’editor, salvi il file e clicchi il pulsante.
Cosi’ sei sicuro che l’editor non c’entra.
E se ci sono ancora errori … sono errori veri :smile: e vediamo come risolverli.

Ad esempio, io non uso mai gli editor di Rhino. scrivo sempre (e testo) gli script da un editor esterno ed eseguo lo script da pulsante in una toolbar.
L’unica cosa ‘piu’ scomoda’, se proprio vogliamo, e’ che devi salvare prima di testare lo script.
Ma e’ solo un click. :slight_smile:

ma è solo un mio problema? a me sembra che più imparo e meno cose conosco!
ma cosè il paradosso del scriptomane? capita anche ai programmatori sta cosa?
ahahahah per la serie più si è consapevoli delle cose e più si sa di non sapere . . . .

1 Mi Piace

Esatto.
E’ quello che capita quando si impara qualcosa (a tutti, non solo scriptomani) … :slight_smile:

credo che un problemino sia che con questo comando Rhino.command e RunPythonScript
rimangono informazioni in memoria e quindi succede che anche quando si cambia la sintassi
viene prelevata parti del codice precedente e quindi ci si perde la testa a fare mille combinazioni

comunque detto questo, appunto stavo provando due strade:

la prima come già detto il ciclo for in combinazione con Rhino.Command “_-RunPythonScript”
e dalle prove fatte stamani sembra che funzioni

la seconda invece avevo pensato di usare l’esempio che hai suggerito “imp.load_source”
richiamando la def dal file aggiungendo un parametro variabile (il risultato del ciclo for)

da ieri sera ci stavo sbattendo la testa e adesso anche questa sembra essere sia andata a buon fine
bisogna armarsi di tanta pazienza ed essere equipaggiato di una bella testa dura ahahahah :+1:

Emilio mi sa che è stata fatta una faticaccia per nulla purtroppo
quando si imposta la lunghezza dei segmenti di una linea si deve avere una “linea intera”
in pratica le linee non debbono essere unite, quindi non vanno bene nemmeno le polilinee.

in sostanza se ho una polilinea fatta con tre segmenti da 10mm per un totale di 30mm e realizzo un tipo di linea dove un primo tratto deve essere di 15mm visibile ed il secondo tratto di altri 15mm invisibile la lunghezza del Tratteggio di 15mm supera quello del segmento che è di 10mm e quindi non viene applicato
oppure anche se viene applicato non vedi il risultato essendo che il tratteggio non corrisponde ai segmenti.

edit: per la serie qui non si butta via nulla, ho trovato un altro ambito dove usare lo script :wink:

per caso esiste un altro modo alternativo al comando “ImpostaTipoLinea” per impostare un tipo di linea?
sia usando rhino.command che nella riga di comando mi interrompe il registra storia
mentre se la cambio con il mouse nel pannello delle proprietà questo non accade :confounded:

ma come mai succede una cosa simile? usando il comando ImpostaTipoLinea cambia altri parametri?