Wish : Faster Partitioning Brep(or mesh)


#1

To make simulation program, mostly we use mesh for fast result.
but so many times we also need partitioning the mesh or original brep.
I tried and made brep split, and made mesh from the splitted brep. and made mesh from the splitted breps
then I can find the bounding box of the splitted breps or meshes,
and then search the mesh what i need from the choosed boundingbox(of the mesh or brep).
It can save much time but splitting brep and make mesh and bounding box takes seconds.
sometimes 10 or more for multiple complex brep.
So it is very hard to make realtime simulation.
I tried to find if there are partitioning mesh, but there was no define help document. and I think it is very obsolete.

If rhino common API supports faster partitioning brep(or mesh)(4 or 8 or16 partition for each brep (or mesh,but split multiple brep is much faster) will be enough I think) , it will be very helpful. There is brep slit or mesh split but it only use single core, and not so fast that I have to split brep and make mesh again.
and I hope the new API to use parallel for or parallel forEach inside.
Thank you.


#2

Hi, by witch criterion you would like to partition the mesh (or the brep) ?

RhinoCommon does have a Mesh.CreatePartitions method. Using the Mesh.PartitionCount and Mesh.GetPartition method it would be possible to create multiple mesh parts from a single mesh. But i´m unsure this is what you´re trying to do as the partitioning, once done, is based on vertex or face order. You can define the max vertex and triangle count and get as many partitions as possible. You might look into the RhinoCommon SDK, see the Mesh Class and MeshPart Class if this is what you´re trying to do.

Alternatively, if your mesh is derived from a brep containing multiple surfaces, have you considered to “partition” the mesh by using Mesh.ExplodeAtUnweldedEdges ? I guess this would give you one mesh for every surface in the brep.

Does that help ?

c.


(Steve Baer) #3

I’m sorry but I’m having a very hard time understanding what it is you are asking for. Do you want a new function in RhinoCommon or is there an existing function that you are using that you need sped up? If it is an existing function, what specific function are you referring to?


#4

finally I have to use mesh, but I found brep split is faster than mesh split,
So I hope and prefer brep.spit enhancement.(There is no such function yet, so I made myself in vb.net but not so fast as I need)
I hope ‘Brep.split’ use multi core(multi thread), and more function.
for example :

  1. brep.spit(split count, brep)
    => if count is 2 then split 2 times=> usually 4 splitted brep.(find longest direction->split, find longest direction->split, etc)
  2. brep.spit(minimum size, brep)
    => if the brep size(of x, or y or z) is bigger than minimum size split it, if the brep size is 4 times bigger, for x direction, divide into 4 pieces for x direction.
  3. brep.split(count, minsize, brep)
    =>the same as 2.brep.spit(minimum size, brep) but split count limits times of split for each direction(x,or y, or z)

Thank you.
(sorry for late reply, I catched cold so many days)