Adding geometry to model - speed issues
-
How about
entities.fill_from_mesh(...)
rather thanadd_faces_from_mesh(..)
http://code.google.com/apis/sketchup/docs/ourdoc/entities.html#fill_from_mesh
is that quicker ? -
I had a mad hope that
Sketchup.break_edges = false
might change something...` Sketchup.break_edges=false
falseaddfaces
Same tris took 3.58
different tris took 5.62
more different tris took 7.56
nilSketchup.break_edges=true
true`nope!
@tig said:
How about
entities.fill_from_mesh(...)
rather thanadd_faces_from_mesh(..)
http://code.google.com/apis/sketchup/docs/ourdoc/entities.html#fill_from_mesh
is that quicker ?oooh. I've missed that method. Will give it a wirl when I get home. That even has a number of features which saves me some work when it comes to smooth vs faceted.
-
@whaat said:
I wasn't aware of this method! Has it really been available since SU6??
Me either. I thought I knew the API up and down (I act like, sometimes!) Makes me wonder what else is in there.
edit - maybe it was always "there", just not documented until the new automatic document system started?
-
@tig said:
How about
entities.fill_from_mesh(...)
rather thanadd_faces_from_mesh(..)
http://code.google.com/apis/sketchup/docs/ourdoc/entities.html#fill_from_mesh
is that quicker ?I wasn't aware of this method! Has it really been available since SU6??
Someone, please do a performance test of this method now! (I would if I could.... ) -
@whaat said:
@tig said:
How about
entities.fill_from_mesh(...)
rather thanadd_faces_from_mesh(..)
http://code.google.com/apis/sketchup/docs/ourdoc/entities.html#fill_from_mesh
is that quicker ?I wasn't aware of this method! Has it really been available since SU6??
Someone, please do a performance test of this method now! (I would if I could.... )I tried it in SU6 - it's there al'right. I will try in SU5 later today.
I think I've overlooked it because I've never used PolygonMeshes before.
-
The old documentation doesn't seem to mention it: http://download.sketchup.com/OnlineDoc/gsu6_ruby/Docs/ruby-entities.html
Maybe it was added in the November update of the docs.
-
@thomthom said:
The old documentation doesn't seem to mention it: http://download.sketchup.com/OnlineDoc/gsu6_ruby/Docs/ruby-entities.html
Maybe it was added in the November update of the docs.
Sometimes I just want to slap whoever was responsible for the API docs...however, right now, I want to kick them in the junk.
-
Come to think of it - I do remember reading somewhere about PolygonMesh'es being added without error control and being somewhat quicker. But since I previously had no interests in PolygonMeshes I didn't pay much attention. Assumed there was only one method to add a mesh.
-
fill_from_mesh
exists in SU5 as well. -
fill_from_mesh
seems to be twice as fast asadd_faces_from_mesh
.
But its default values doesn't match with the manual. The manual claims that the default for smooth is 0. But when I omit that value I get a soft and smooth mesh. I have to explicitly set it to 0 for no smoothing.And I can't make out what the weld vertices do. I don't see any difference in what it produces.
-
I might have been a bit quick to judge the speed difference...
-
@thomthom said:
And I can't make out what the weld vertices do. I don't see any difference in what it produces.
Any performance increase when welding vertices?
-
hm.. haven't tried too much with that right now. But I'm profiling a plugins right now. Might touch upon it later.
add_faces_from_mesh(polygonmesh)
` TT_Teapot.create_teapot(16)Mesh generated in 11.35 seconds
Teapot with 16 segments generated in 13.201 seconds
#Sketchup::Group:0xe9c9268`fill_from_mesh(polygonmesh)
` TT_Teapot.create_teapot(16)Mesh generated in 0.157 seconds
Teapot with 16 segments generated in 2.02 seconds
#Sketchup::Group:0xe792a48` -
I find no noticeable difference in speed when I change smoothing and/or welding.
And I still have no idea what welding vs not welding really do. -
polygonmesh.point_index(point)
is slowFound it faster to build a separate Hash to keep track of it as I added the points for the mesh.
While adding points
point_index = {} p.each { |i| point_index[i] = pm.add_point(i) }
When collecting points to build polygon:
indexes = points.collect { |point| point_index[point] }
-
I ran into the speed issue with realy large models and opted to write the geometry definition to a file format and then importing via a script - which gave me faster results, - but this may not suit your needs.
-
I guess that 'welding' ensures that a vertex that shares a common position with another vertex is combined [welded] into just one vertex and you don't get the weirdness of two triangular faces leaking into each other as their actually common-vertex is taken as two separate vertices ?
The API is so rubbish on this that it could mean anything... but ifI had designed this Method that's what it'd do !
-
That's what I expected before I tested it. I thought each polygon would become a separated disconnected entity. But everything seems to merge regardless. The PolygonMesh class is a peculiar one.
But that fill method really helped me TIG. Thanks for pointing that one out!
-
I suspect that each triangular mesh is actually made as a separate shape BUT since the vertices and edges merge as the mesh is completed with more triangles they too disappear and the mesh 'meshes'... however, perhaps with very small [or large] dimensions perhaps the triangles are sufficiently separated and the vertices don't coincide within tolerances and the vertices aren't welded ? So perhaps the welded option takes a little more time but ensures a proper mesh ?
Someone went to the trouble to write this method but then decided not to explain what it does too well !!!
-
I hope Mr. Someone comes back and finished the job...
Advertisement