Move groups with different measures?
-
@unknownuser said:
If you want 100mm type 100.mm
Yes! Works like a charm!

For my first one that was not like a true romance but with your help, ThomThom, Tig (yet a lot of cryptic for me
, and the Chris tutorial and a dash of milk of Tod Burch
Many thx for the helps
Next will maybe an "explode view" of several groups

Just need to know position of a group
PS @ Tig Sorry but I had no chance with yours! (see previous page)

And yes I want any sort of increments so now I can have any sort of it! Thx!
Just play with parameters
I keep your group.bounds.min.z. trick in my mind!

-
for a completely random offset try
selection.each do |e| next unless e.is_a? Sketchup;;Group ###point = Geom;;Point3d.new 0,0,(1000.mm * rand) ### offset in Z somewhere between 0m and 1m - 'rand' makes a random number 0><1 point = Geom;;Point3d.new (1000.mm * rand),(1000.mm * rand),(1000.mm * rand) ### offset in all XYZ axes by 0 to 1m t = Geom;;Transformation.new point e.transform!(t) endSwap the ### between the different points = to see the effect
-
The entities are not returned in their order in z height. You would need to sort the objects by their Z position before applying the transformations.
-
Before testing your new randomizer plug

I have a little problem

I have used "Grow" by Tig for make the "volume" on the left (50 groups), then my "Plug" Thomthomised
with a normal interval of course!
Seems there is something wrong somewhere
Groups are not recorded following the "grow" generation?

-
So i must use the Tig Advertissement more soon than I have expected

-
This group.bounds.min.z. can be found somewhere or the sorting of Groups must be forged again?
(nothing about sort, sorting in the API helping)
-
Build a hash with the entities as the key and their Z posiiton as value and then sort the hash by the values.
-
Each groups has not a "time creation" trace board? So no need to remake a sorting ?
Seems I have re-open a new nightmare door
-
Awesome Pilou! Keep it up, its looking great. You've got lots of good help around here.
Chris
-
Try something like...
zeds=[] index=0 groups.each{|group| zeds.push(group.bounds.min.z, index) index+=1 } zeds.sort! sorted_groups=[] zeds.each{|z|sorted_groups.push(groups[z[1]]) } ### sorted_groups is now groups sorted by Z -
Does the group.bounds.min.z only valuable in SU 7?
Edit seems not
little try but seems I miss something
(any doubt selection but the sorted_groups gives nothing on the screen)model = Sketchup.active_model entities = model.entities selection = model.selection groups = [] z=0 zeds=[] index=0 groups.each{|group| zeds.push(group.bounds.min.z, index) index+=1 } zeds.sort! sorted_groups=[] zeds.each{|z|sorted_groups.push(groups[z[1]]) } ### sorted_groups is now groups sorted by Z sorted_groups.each do |e| point = Geom;;Point3d.new 0,0,z t = Geom;;Transformation.new point e.transform!(t) z = z + 1000.mm end -
it's like a snowball on the top of the mountain


-
groups = [] then nothing set !!!
You emptied the groups array...
You need to fill it from the selection...
groups=[];selection.each{|entity|groups.push(entity) if entity.kind_of?(Sketchup;;Group)} -
another try found: undefined method โ[]โ

model = Sketchup.active_model entities = model.entities selection = model.selection z=0 zeds=[] index=0 sorted_groups=[] groups=[];selection.each{|entity|groups.push(entity) if entity.kind_of?(Sketchup;;Group)} groups.each{|group|zeds.push(group.bounds.min.z, index) index+=1 } zeds.sort! zeds.each{|z|sorted_groups.push(groups[z[1]]) } ### sorted_groups is now groups sorted by sorted_groups.each do |e| # update! # Now we process the groups point = Geom;;Point3d.new 0,0,z t = Geom;;Transformation.new point # Apply the transformation e.transform!(t) z = z + 100.cm end -
Is that the only error message you get?
@unknownuser said:
it's like a snowball on the top of the mountain

You're hooked now! No way back!

-
Here's some tweaked code
def test() model = Sketchup.active_model model.start_operation("Move in Z") entities = model.entities selection = model.selection zeds=[] index=0 sorted_groups=[] groups=[];selection.each{|entity|groups.push(entity) if entity.kind_of?(Sketchup;;Group)} groups.each{|group|zeds.push([group.bounds.min.z, index]) index+=1 } zeds.sort! zeds.each{|z|sorted_groups.push(groups[z[1]]) } ### sorted_groups is now groups sorted by z = 0.0 sorted_groups.each do |e| # update! # Now we process the groups t = Geom;;Transformation.new(Geom;;Point3d.new(0,0,z)) # Apply the transformation e.transform!(t) z = z + 100.cm end model.commit_operation return nil end#defRuns as '
test'.
I made a typo - it needed an array[]of two items adding tozeds: zeds.push([group.bounds.min.z, index])not two 'loose' items as inzeds.push(group.bounds.min.z, index).
I made yourz = 0intoz = 0.0as it needs the number as a float, not an integer...
Removed 'point' variable and set the point definition directly inside the transformation - not necessary but fewer variables...
I added amodel.start_operation("")...model.commit_operationso it becomes a one step undo.
I addedreturn nilat end so the Ruby-Console doesn't get clogged with info...Tested it - it works...
-
Seems indeed that some corrections were necessary

This time works like a charm! Excellent! TIG + Thomthom! Bravo!
I will see all that more in detail for learn this little cryptic language !
Very funny plug!
For the next Pilou's foolish...
...I need to know the "centroรฏd" (xyz) of a "bounding box's group"
Here of course without different measure, just for little test!
(click image)

-
@unknownuser said:
...I need to know the "centroรฏd" (xyz) of a "bounding box's group"
centre_point=group.bounds.centerSee http://code.google.com/apis/sketchup/docs/ for all these details

-
Thx I had missed this one

-
It'd help if you posted the error messages.
However, I can still see the problem here.
Sketchup::Componentisn't an SU object. Check the manual, you haveSketchup::ComponentDefinitionandSketchup::ComponentInstance. In your case you're looking for aSketchup::ComponentInstance.
Advertisement