[Code] (Iterating) Finding Definitions
-
[ Code ] (Iterating) Finding Definitions
# # An example prepared by Dan Rathbun. (2012) # # Version ; 0.3.0 # module Author ### <-- replace with your top level namespace module Util ### <-- change sub-module name to suit class << self # proxy class public def find_defintions(ents_array) defns = [] ents_array = ents_array.to_a unless ents_array.empty? for e in ents_array if e.is_a?(Sketchup;;ComponentInstance) defns << e.definition elsif e.is_a?(Sketchup;;Group) defns << e.entities.parent end end # for end # defns.uniq! return defns # end def find_nested_defintions(ents_array) defns_all = [] # the array to return ents_array = ents_array.to_a return defns_all if ents_array.empty? defns_chk = find_defintions(ents_array) until defns_chk.empty? defn = defns_chk.pop defns_all.include?(defn) ? next ; defns_all << defn defns_new = find_defintions(defn.entities.to_a) next if defns_new.empty? for d in defns_new unless defns_all.include?(d) || defns_chk.include?(d) defns_chk << d end end # for end # until # return defns_all # end def find_defintions_from_selection( all = false, sel = Sketchup.active_model.selection ) defns_all = [] # the array to return sel = sel.to_a return defns_all if sel.empty? if all find_nested_defintions(sel) else find_defintions(sel) end # return defns_all # end end # proxy class end # submodule end # toplevel moduleUntested as of: 2012-08-25 : Use at own risk. No warranty.

-
REVISED: (v0.2.0)
-
condensed
find_nested_defintions()a bit. -
replaced all
.eachiterators withfor...inloops for speed.
-
-
Shouldn't it be
return defns.uniqwhich would always return a unique array of defns; whereasreturn defns.uniq**!**returns a unique array of defns only IF there were duplicates in the original, BUT 'nil' if there were no duplicates in the original... -
Yes it should, and now is. Updated the code.
(I was
uniq!'ing in the calling methods, and at the last moment replaced several in those methods, by adding the.uniq!to thereturnstatement. I did think about which uniq to use, for a split-second, and didn't want to create a new array object, so I added!to the end. That's what happens when ya' rush.)Thanx for the check TIG!
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better π
Register LoginAdvertisement