Forgot password?

Create an account!

Forum

« back

RhinoScript – add Layer name for each solid

Messages

Please log in to write a message.

  • 6. andry19899 (Aug 04, 2014 16.43):

    Thanks a lot!!! Very helpful! It works...maybe a distraction.

  • 5. Johannes (Aug 04, 2014 16.16):

    The Layer functions gives you a number of objects because you ask for all objects at one time.

    change

    arrLayer = Rhino.ObjectLayer(arrObjectID)

    to

    arrLayer = Rhino.ObjectLayer(strObjectID)

    that will return the current layer of a single object.

    Please check the rhinoscript help file and take a look at "SurfaceVolumeMoments". There is a list of results. Actually you get the elements 0,2,4,6,8,10,15,16,17,12 ... I have no idea why there is a difference. i suggest to check it in a tiny script. just take a look what the command and the script function is doing...

    johannes

  • 4. andry19899 (Aug 04, 2014 13.30):

    another thing... do you know why the information about the volume finded by my script are different by those calculate by the command _VolumeMoments?

  • 3. andry19899 (Aug 04, 2014 13.28):

    hi johannes, the problem is the layer where the solid is located. I need the layer name in the second line of the txt file. for each solid i need this layer name.

  • 2. Johannes (Aug 04, 2014 13.18):

    Hi andry,

    where is the problem? I can run the script with a simple box in the 3d model.
    I just changed the method to get the filename.

    'filename = "C:\Users\......\Desktop\ " & Rhino.EditBox("Inserisci il nome del file")

    to

    filename = Rhino.GetString("filename: ", "d:\test.txt")

    Johannes

    add Layer name for  each solid
  • 1. andry19899 (Aug 04, 2014 12.36):

    Hi everybody. Hope smeone can help me. I need to create a text file where are written all the Volume information like Inertia, volume, radii of giration etc. baut also i need to know the layer (child layer too) that it belongs.

    Sub Main()
            Dim strObjectID
            strObjectID = Rhino.GetObjects("selezionare gli oggetti", 16, True, False, True)
           
            If IsNull(strObjectID) Then Exit Sub
           
            If Not isNull(strObjectID) Then
                   
                    Dim arrObjects, strObjectIDs
           
                    Dim filename
                    Dim arrBSol,arrnomeLayer
                    Dim strdotsol,strPtsol,strPoint
                    Dim i
                    Dim arrMP,arrSVM,arrVol
                    Dim strName,strText
           
                    'crea il file
                    filename = "C:\Users\......\Desktop\ " & Rhino.EditBox("Inserisci il nome del file")
                    ' dopo il nome del file, inserire ".txt" prer renderlo file di testo.
           
                    ' accedi al file
                    Set objStream = CreateObject("Scripting.filesystemobject")
                    Set objFile = objStream.CreateTextFile(filename, True) ' apre il file
           
                    ' seleziona ed elimina tutti i dot text già presenti nel file
                    strText = Rhino.ObjectsByType(8192) ' seleziona tutti i dot text presenti nel file
                    If IsArray(strText) Then
                            Rhino.DeleteObjects strText   ' elimina i dot text
                    End If
           
                    strPoint = Rhino.ObjectsByType(1)'seleziona tutti i punti presenti nel file
                    If IsArray(strPoint) Then
                            Rhino.DeleteObjects strPoint   ' elimina i punti
                    End If 
           
                    Dim arrObjectID :arrObjectID = strObjectID
                    i = 0
                    For Each strObjectID In arrObjectID                    
                            arrBSol = Rhino.SurfaceVolumeCentroid(strObjectID) 'baricentro solido
                            If IsArray(arrBSol) Then
                                    strdotsol = "Solido" & CStr(i) 'assegna una casella di testo con "solido+numero"
                                    strName = Rhino.DocumentName                           
                                    Rhino.AddTextDot strdotsol, arrBSol(0)
                                    i = i + 1
                            End If
                           
                            Dim arrLayer, strLayer,j' per il nome dei layer dei solidi
                           
                            arrLayer = Rhino.ObjectLayer(arrObjectID)
                           
                            If isarray(arrLayer) Then
                                    j = 0   
                                    For Each strLayer In arrLayer
                                            rhino.LayerName(strLayer)
                                            j = i
                                    Next                                   
                            End If         
                           
                            If Rhino.IsPolysurfaceClosed(strObjectID)       Then'se è una polisuperficie chiusa
                                    arrMP = Rhino.SurfaceVolumeCentroid(strObjectID)'ne individua il baricentro
                                    If isarray(arrMP)Then' se ci sono dei baricentri
                                            Rhino.AddPoint arrMP(0)' ne inserisce il punto
                                    End If
                                   
                                    If IsArray(arrObjects)Then 'mette il colore da layer per evidenziare i solidi già processati
                                            For Each strObjectIDs In arrObjects
                                                    Rhino.ObjectColorSource strObjectID, 0
                                            Next
                                    End If                         
                           
                                    arrSVM = Rhino.SurfaceVolumeMoments(strObjectID) ' leggi le proprietà (area, baricentro, inerzia...)
                                    arrVol = Rhino.SurfaceVolume(strObjectID)'calcola il volume degli oggetti selezionati
                                   
                                   
                                   
                                                   
                                           
                                   
                                           
                                    If IsArray(arrSVM) Then ' scrive sul file tutte le informazioni sul volume
                                            Dim objStream,objFile   
                                            objFile.WriteLine("*** " & strName & " ***") ' nome del file così da poterlo riconoscere in seguito
                                            objFile.WriteLine("*** " & strdotsol & "***" & arrLayer & "***") 'identificativo del solido e del layer di appartenenza.
                                            objFile.WriteLine("Volume:")
                                            objFile.WriteLine(CStr(arrVol(0)))
                                            objFile.WriteLine("Centroide del Volume:")
                                            objFile.WriteLine(CStr(arrBsol(0)(0)) & "; " & CStr(arrBSol(0)(1)) & "; " & CStr(arrBSol(0)(2)))
                                            objFile.WriteLine("Momenti Statici:")
                                            objFile.WriteLine(CStr(arrSVM(0)(0)) & "; " & CStr(arrSVM(0)(1)) & "; " & CStr(arrSVM(0)(2)))
                                            objFile.WriteLine("Momenti d' Inerzia:")
                                            objFile.WriteLine(CStr(arrSVM(2)(0)) & "; " & CStr(arrSVM(2)(1)) & "; " & CStr(arrSVM(2)(2)))
                                            objFile.WriteLine("Prodotto dei Momenti:")
                                            objFile.WriteLine(CStr(arrSVM(4)(0)) & "; " & CStr(arrSVM(4)(1)) & "; " & CStr(arrSVM(4)(2)))
                                            objFile.WriteLine("Momenti d' Inerzia del volume rispetto al WCA:")
                                            objFile.WriteLine(CStr(arrSVM(6)(0)) & "; " & CStr(arrSVM(6)(1)) & "; " & CStr(arrSVM(6)(2)))
                                            objFile.WriteLine("Raggi Giratori del volume rispetto al WCA:")
                                            objFile.WriteLine(CStr(arrSVM(8)(0)) & "; " & CStr(arrSVM(8)(1)) & "; " & CStr(arrSVM(8)(2)))
                                            objFile.WriteLine("Momenti d' Inerzia rispetto al Centroide:")
                                            objFile.WriteLine(CStr(arrSVM(10)(0)) & "; " & CStr(arrSVM(10)(1)) & "; " & CStr(arrSVM(10)(2)))
                                   
                                            'pezzo aggiunto in data 23 Luglio
                                            objFile.WriteLine("Momento principale di inerzia del volume rispetto al Centroide:")
                                            objFile.WriteLine(CStr(arrSVM(14)(0)) & "; " & CStr(arrSVM(14)(1)) & "; " & CStr(arrSVM(14)(2)))
                                           
                                            'pezzo aggiunto in data 23 Luglio
                                            objFile.WriteLine("Coseno direttore X:")
                                            objFile.WriteLine(CStr(arrSVM(15)(0)) & "; " & CStr(arrSVM(15)(1)) & "; " & CStr(arrSVM(15)(2)))
                                            objFile.WriteLine("Coseno direttore Y:")
                                            objFile.WriteLine(CStr(arrSVM(16)(0)) & "; " & CStr(arrSVM(16)(1)) & "; " & CStr(arrSVM(16)(2)))
                                            objFile.WriteLine("Coseno direttore Z:")
                                            objFile.WriteLine(CStr(arrSVM(17)(0)) & "; " & CStr(arrSVM(17)(1)) & "; " & CStr(arrSVM(17)(2)))
                                           
                                           
                                            'Pezzo aggiunto in data 23 Luglio
                                            objFile.WriteLine("Raggi di rotazione del volume calcolato rispetto al Centroide:")
                                            objFile.WriteLine(CStr(arrSVM(12)(0)) & "; " & CStr(arrSVM(12)(1)) & "; " & CStr(arrSVM(12)(2)))
                                                                   
                                    End If
                            End If 
                           
                    Next
            End If
            objFile.close ' chiude il file
    End Sub
    [\rvb]

    thanks anybody!!!
Recommend

Why are these buttons gray?