Vertex Counting plugin?
-
I've been looking into using the Cryengine 3 (Crysis 2 engine) for some arch. viz. work -- it's a free download, works well with sketchup, and has nice visuals for walkthroughs (that you can shoot at, if you're so inclined).
Anyway, it has a strict limit to the number of vertices that can be exported in any given model (requiring multiple models to be combined in the editor) and it would be really useful to know how many meshes can be combined for each export to limit the combining later on.
Does anyone know if a plugin exists that can give you a quick count of how many vertices are in a given selection? If not, would that be an easy script to write?
-
If the vertices belong to faces [rather than edges that don't necessarily have a face]...
You can get the vertices in a selection thus:
vs=[];Sketchup.active_model.selection.each{|e|vs<<e.vertices if e.class==Sketchup::Face};vs.flatten!;vs.uniq!;p vs.length
Copy+paste into the Ruby Console - it puts the number of vertices in the Select into the Console...
If the Selection is a Group/Instance either edit it first and Select-All OR recast the code the dig down into group.entities etc... -
@dsarchs said:
Does anyone know if a plugin exists that can give you a quick count of how many vertices are in a given selection? If not, would that be an easy script to write?
Here is one that will. It looks at whole model if nothing is selected.
require 'sketchup' module SDM_PtCnt def self.point_counter mod=Sketchup.active_model ent=mod.active_entities sel=mod.selection sel=ent if sel.empty? @f_cnt=0;@e_cnt=0;@verts=[] recurse(sel) @verts.flatten!.uniq! UI.messagebox "This model contains\n\n#{@f_cnt} faces\n#{@e_cnt} edges\nand #{@verts.length-1} vertices" end def self.recurse(ents) ents.each do |e| if e.is_a? Sketchup;;Group recurse(e.entities) elsif e.is_a? Sketchup;;ComponentInstance recurse(e.definition.entities) elsif e.is_a? Sketchup;;Face @f_cnt += 1;@verts<<e.vertices elsif e.is_a? Sketchup;;Edge @e_cnt += 1;@verts<<e.vertices end end end end if not file_loaded?(File.basename(__FILE__)) UI.menu("Plugins").add_item("Point Counter") { SDM_PtCnt.point_counter } file_loaded(File.basename(__FILE__)) end
-
@verts.flatten!.uniq!
Beware of the bang methods.
.flatten!
and.uniq!
- while faster and preferred, will returnnil
upon no change.
One has to use them on separate lines to avoid potential, and likely, errors.@verts.flatten! @verts.uniq!
-
Thanks for the responses. I'll have to try this out when I get home tonight.
-
@thomthom said:
@verts.flatten!.uniq!
Beware of the bang methods.
.flatten!
and.uniq!
- while faster and preferred, will returnnil
upon no change.
One has to use them on separate lines to avoid potential, and likely, errors.@verts.flatten! @verts.uniq!
But combined as
@verts.flatten.uniq!
so there's only an end 'bang!' it will work.
Without the!
it returns the changed array, with it it returns either the changed array ORnil
if there's no change !! -
I finally had a chance to try this out and it works (almost) perfectly!
Almost because for some reason it always returns 1 less vertex than is actually present. For example, a square plane shows 3, a cube shows 7, etc.
This is a complete non-issue, though, since I'm just trying to make sure the number is less than (I think) 25,000.Thanks again!
-
In my code you compile an array of arrays of vertices from faces... [vs]
The vs.flatten! explodes the arrays into one giant array.
The vs.uniq! ensures that there are no duplicates [two abutting faces share 2 vertices].
The vs.length returns the total number of vertices - it should not be 'short' -
I actually used the code offered by sdmitch (after having separated the command as thomthom suggested), and saved it as a plugin rather than having to cut+paste whenever I wanted to check.
-
Fredo has vertex marking tools and count sides tool maybe ask to report the vert numbers?
A small donation goes along way
-
@dsarchs said:
I actually used the code offered by sdmitch (after having separated the command as thomthom suggested), and saved it as a plugin rather than having to cut+paste whenever I wanted to check.
You are correct. The count was one less than it should be. Out of habit, because Ruby array index always starts at 0, subtracting 1 from the array length is so common that it is a reflex action. The correct message statement would be
UI.messagebox "This model contains\n\n#{@f_cnt} faces\n#{@e_cnt} edges\nand #{@verts.length} vertices"
-
Thanks, although I'm not really worried that it lists 1 less than actual. I just checked and the limit is 64,000 vertices -- so being off by 1 is irrelevant. I mostly wanted a tool to see how many object groups I could combine for single export.
If I think about it I'll change the code when I get home tonight -- but either way it's working for what I need it to do. -
@unknownuser said:
Fredo has vertex marking tools and count sides tool maybe ask to report the vert numbers?
The new version of CountFacesBySides, part of FredoTools, now provide the count of vertices in the selection or the whole model.
Fredo
-
Hey, I've just wanted to say thanks for all your answers here!
I'm working with CE3 too, and your code is really helpful to me.
Advertisement