Difficolta nell'uso di rs.command in uno script Pyton

buongiorno e buon anno , visto che scrivo per la prima volta nel 2016.

devo proiettare alcune curve su una superficie sviluppabile e poi sviluppare il tutto in piano:
dopo aver fatto la proiezione di ogni singola curva e creato le nuove curve proiettate
da tastiera e’ semplice fare lo sviluppo :

-premi il tasto “unroll”
-seleziona la superficie
-seleziona le curve
-enter
e va tutto a posto

Allora ho fatto uno script in python.Nella prima parte seleziono le curve da proiettare e la superficie, e le proietto una alla volta mettendo i nuovi Guid in un lista.
Nella seconda parte tento di sviluppare in piano la superficie e le nuove curve su di essa proiettate .
ecco lo script:

################################
import rhinoscriptsyntax as rs
import scriptcontext
import math
import Rhino
import Rhino.Geometry as rg
import System
import time

n=0
listac=[]

curvids = rs.GetObjects(“seleziona le curve” , 4)
surfid = rs.GetObject(“seleziona una superficie”,8)

########## qui sotto proietto ogni curva sulla superficie
for c in curvids:
cmd1 = "_Pull " + "_Selid " + str© + "L=No D=No O=Current " + “_Enter” + " _Selid " + str(surfid) + " _Enter"
rs.Command(cmd1)
listac.append(rs.FirstObject())
rs.UnselectAllObjects()
rs.ClearCommandHistory()
n=n+1
print "proiettata “+ str(n) +” di " + str(len(curvids))

##### qui sotto sviluppo la superficie e le curve proiettate i cui guid sono elencati in “listac”

cmd2="~_UnrollSrf “+”_Selid " + str(surfid) + " _Selid" + str(listac) + " _Enter"
rs.Command(cmd2)

############ fine

Risultato : riesco ad eseguire solo la prima parte del "cmd2 " ( penultima ed ultima riga), cioe’ sviluppo in piano la superficie, ma non ho notizia delle curve . Tutte le variazioni sul tema non hanno dato frutti.

Si tratta di scoprire come scrivere la frase cmd2 affiche vengano prese in considerazione le curve della “listac”.
Avete qualche idea su come uscirne ?

un fiducioso saluto
franco

Ciao Franco

… Sono di fretta, scusa, dico solo una cosa …

Se non prendo abbagli …
Se i Guid sono in listac non pui dire Selid str( listac )
Devi selezionare con Selid ognuna delle curve comprese nella lista
Con un ciclo dovrebbe essere semplice costruire la stringa voluta da passare a rs.Command()

Ciao

ciao Emilio,
ho fatto un piccolo ciclo ed ora funziona . eccolo:

import rhinoscriptsyntax as rs
import scriptcontext
import math
import Rhino
import Rhino.Geometry as rg
import System
import time

n=0
listac=[]
cmd3=""
curvids = rs.GetObjects(“seleziona le curve” , 4)
surfid = rs.GetObject(“seleziona una superficie”,8)

qui sotto proietto ogni curva sulla superficie

for c in curvids:
cmd1 = "_Pull " + "_Selid " + str© + "L=No D=No O=Current " + “_Enter” + " _Selid " + str(surfid) + " _Enter"
rs.Command(cmd1)
listac.append(rs.FirstObject())
rs.UnselectAllObjects()
rs.ClearCommandHistory()
n=n+1
print "proiettata “+ str(n) +” di " + str(len(curvids))

qui sotto sviluppo la superficie e le curve proiettate i cui guid sono elencati in “listac”

for e in listac:
cmd3 = cmd3 + " _Selid " + str(e)
print cmd3

cmd2="~_UnrollSrf “+”_Selid " + str(surfid) + cmd3 + " _Enter"
rs.Command(cmd2)

Grazie Ciao
franco

Ciao Franco!
…solo per mandarti un saluto!!!

Ciao Franco
Ti consiglio di non usare rs.Command ma usa le funzioni rs…
Qui sotto lo script in sole 11 righe . Molto semplice e più chiaro


import rhinoscriptsyntax as rs.
def a():
    curve=rs.GetObjects("seleziona curve da proiettare",4)
    surf=rs.GetObject("seleziona superficie",8)
    newcrv=[]
    for crv in curve:
       crvpull= rs.PullCurve(surf,crv)
       newcrv.append(crvpull)
    rs.UnrollSurface(surf,False,newcrv)
a()

Vittorio

Grazie Vittorio,
molto semplice ed elegante.
A forza di incaponirsi su una soluzione ci si complica la vita da soli.
ne approfitto per salutare Giuseppe: Ciao
franco