Grasshopper

algorithmic modeling for Rhino

Hi all,

 

I am doing a project which involves generating a large group of surfaces (often more than 800 units). It has become very memory consuming. I am wondering between brep and mesh, which one would be better in terms of memory efficiency?

 

Another question is, does anyone know what's the right way to convert a brep into a mesh in VB.net?

 

Thanks guys!

Views: 2503

Replies to This Discussion

Btw, this is what I have tried:

 

Private Sub RunScript(ByVal outerhex As List(Of Curve), ByVal innerhex As List(Of Curve), ByRef units As Object)
    'your code goes here…

    Dim num As int32 = outerhex.Count()
    Dim i As int32
    Dim surface_list As New List(Of mesh)
    For i = 0 To num - 1

      Dim outercurve As Curve = outerhex(i)
      Dim innercurve As Curve = innerhex(i)
      Dim curves As New list(Of Curve)
      curves.add(outercurve)
      curves.add(innercurve)

      Dim startpt As point3d = outercurve.PointAtEnd
      Dim endpt As point3d = innercurve.PointAtEnd

      Dim surface_array() As brep = rhino.Geometry.Brep.CreateFromLoft(curves, startpt, endpt, LoftType.Straight, False)

      Dim newbrep As brep = surface_array(0).DuplicateBrep
      Dim newmesh As mesh
      newmesh = mesh.CreateFromBrep(newbrep)



      surface_list.Add(newmesh)

    Next

    units = surface_list

  End Sub

 

 

 

 

The error message is:

 

Error: Value of type '1-dimensional array of Rhino.Geometry.Mesh' cannot be converted to 'Rhino.Geometry.Mesh'

When you mesh a Brep, you actually get an array of meshes. So this:

 

newmesh = mesh.CreateFromBrep(newbrep)

 

is illegal. You cannot assign an array of Meshes to a single Mesh. Try the following:

 

Private Sub RunScript(ByVal outerhex As List(Of Curve), _

                               ByVal innerhex As List(Of Curve), _

                               ByRef units As Object) 

    
  Dim meshes As New List(Of Mesh)
  For i As Int32 = 0 To outerhex.Count - 1
    Dim curves As New List(Of Curve)
    curves.Add(outerhex(i))
    curves.Add(innerhex(i))

    Dim loft() As Brep = Brep.CreateFromLoft(curves, Point3d.Unset, Point3d.Unset, LoftType.Straight, False)

    If (loft Is Nothing) Then Continue For

    If (loft.Length = 0) Then Continue For

    Dim loftMeshes As Mesh() = Mesh.CreateFromBrep(loft(0))
    If (loftMeshes Is Nothing) Then Continue For

    If (loftMeshes.Length = 0) Then Continue For


    'Now merge all partial meshes into a single mesh

    Dim loftMesh As New Mesh

    For Each partialMesh As Mesh in loftMeshes

      loftMesh.Append(partialMesh)

    Next

    meshes.Add(loftMesh)
  Next

  units = meshes
End Sub

 

--

David Rutten

david@mcneel.com

Poprad, Slovakia

Typically meshes take less memory than breps, especially since breps use a secondary mesh to draw themselves in shaded modes. Though if you switch to wireframe preview this won't happen.

 

If memory is really a problem, and if you have a 64-bit OS, you can try Rhino5 64-bit. It can handle enormous files.

 

--

David Rutten

david@mcneel.com

Poprad, Slovakia

 

WOW, it is hundreds of times faster now! Thanks so much David, You are amazing!!!

 

For the same project, I have another question. Right now the loft gives me a surface without thickness. If I want to make it into hexes with thickness, would I need to extrude each of the six surface, trim them and join? Or is there any better way to do this?

 

Thanks again for your help!

RSS

About

Translate

Search

Photos

  • Add Photos
  • View All

© 2024   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service