Transformation (copy) by vector and distance ?
-
hi experts,
i did not really find an answer in the api, sowhen i draw a 3d line (any direction) ,
can i take it's vector and then transfom an object from its origin (= startpoint of my vector)
ALONG this vector with a defined (@distance_z) distance ?instead of calculation the target 3d-point ? this would make placing object along a line much easier.
thanx stan
-
If
@drawnis an edge, then:from = @drawn.start.position move_vec = from.vector_to(@drawn.end.position)
-
hi dan,
ok, this one moves any object along the vector , but for this i have again to calculate the start and end point of the edge first.the question is, when i already have a calulated and drawn line of any length,
how can i move along this line (=vector) by defining a DISTANCE (in the 3d-direction of this line?so the endpoint would be calculated automatically by the ruby ?
like:
vector = edge xxx
object = whatever
distance = float-value
object.move (vector, distance)stan
-
startp = edge.line[0] ### edge.line is [start_point, vector_to_end_point]
vector = edge.line[1]
object = reference_to_a_group_or_instance
distnc = a_length ### 1.234.m etc, remember that a float is always taken as 'inches'
vector.length = distncthen
object.move!(vector)
or
object.transform!(vector)

-
IF moving a
Group:vector = edge.start.position.vector_to(edge.end.position) group = whatever distance = edge.length vector.length = distance group.move!(vector)P.S: use
transform!instead ofmove!, if you want the operations on the undo stack. -
IF moving an primitive object:
vector = edge.start.position.vector_to(edge.end.position) group = whatever distance = edge.length vector.length = distance object.parent.entities.transform_entities( vector, object )
-
hi dan,
i came now back to this part of the ruby.
is it possible to COPY instead of MOVE somehow? i tried several things, but ther is nogroup.copy!
obviously in the ruby syntax.
the trial of mine:
#within a bigger loop >>> FL #..... new_line1 = @entities2.add_line @rl1a, @rl2a # define line for vector length = new_line1.length # rasterarray_h = length.divmod(5.0/@faktor/@teiler_cm ) # gaps shall be near 5 cm raster = length / rasterarray_h[0] # calculate gap between verticals ( == true length) # @stab = @entities2.add_group @stab.name = "stab_senkrecht" entities_stab = @stab.entities # the group to be copied along new_line1 @rl1a = [(fl)* const1+var2*var3 , (fl)* const2+var4 , 0 + (fl)*(@pmod * @rise)+@railsgapunten] @rl2a = [(fl)* const1+var2*var3 , (fl)* const2+var4 , 0 + (fl)*(@pmod * @rise) + var6+@railsgapunten] # edge = entities_stab.add_line @rl1a, @rl2a # create 1st vertical in the group # puts "#{__LINE__} ; edge created" puts "#{__LINE__} ; raster ; #{raster}" puts "#{__LINE__} ; length ; #{length}" puts "#{__LINE__} ; rasterarray_h[0] ; #{rasterarray_h[0]}" # for v_line in 1..rasterarray_h[0] # copy group along new_line1 in distance raster #puts v_line vector = new_line1.start.position.vector_to(new_line1.end.position) vector.length = v_line*raster # every step 1 raster more #@stab.move!(vector) # TRIAL 1 ??????? #@stab.parent.entities.transform_entities( vector, @stab ) # TRIAL 2 ??????? end # v_line loopthanx for helping again. copying in 3d by distance would be a great step further......
stan
-
http://www.sketchup.com/intl/en/developer/docs/ourdoc/group.php#copy

group2 = group.copyThis makes a copy of the group exactly on the top of original group, AND in the same context as the original group***.
You can then transform that copy.group2.transform!(some_transformation)Be aware that this group2 copy is a 'second instance' of the original group, so any changes you make to one will appear in the other [just like with a component] - you can use
group2.make_uniqueto resolve this; it will generate a warning about deprecated methods BUT this is a known error in the API code and should be removed one day when the API is upgraded...Also be aware that group.copyt can fall foul of some entities-observers from other tools, and cause them to splat - it's a known bug in the API and should get fixed one day...
***Another way to add a 'copy' of a group, BUT put it into another context uses this:
group2 = another_entities.add_instance(group.entities.parent, group.transformation)Then transform the group2 as desired...
You can of course apply the new group's transformation as you add its instance...
Here's an example including the make_unique...group2 = another_entities.add_instance(group.entities.parent, another_transformation) group2.make_uniqueTo do it in the same context use:
group2 = group.parent.entities.add_instance(group.entities.parent, another_transformation) group2.make_unique
-
hi tig,
thanx so much, but this one really makes me crazy.....what ever i do , the move! - instructions MOVES but does not copy, it's magical...( i tried all your codes, the code from the api....)
my code so far ( i am on the level of @entities2 (coming from a method above this one)
new_line1 = @entities2.add_line @rl1a, @rl2a # define line for vector length = new_line1.length # rasterarray_h = length.divmod(5.0/@faktor/@teiler_cm ) raster = length / rasterarray_h[0] # calculate gap between verticals ( == true length) # # so the raster is the 3d-distance on the vector from new_line1 # group = @entities2.add_group entities_stab = group.entities @rl1a = [(fl)* const1+var2*var3 , (fl)* const2+var4 , 0 + (fl)*(@pmod * @rise)+@railsgapunten] @rl2a = [(fl)* const1+var2*var3 , (fl)* const2+var4 , 0 + (fl)*(@pmod * @rise) + var6+@railsgapunten] # edge = entities_stab.add_line @rl1a, @rl2a # create 1st vertical # #entities = @entities2 # tried this, too.. # for v_line in 1..rasterarray_h[0] # vector = new_line1.start.position.vector_to(new_line1.end.position) distance = v_line*raster vector.length = v_line*raster/2 # group2 = group.copy group2 = group.move!(vector) # and the line is moved, not copied....or the original group disappears? there shold be lots of vertical lines in distance of "raster"..... # end #grrrrhhh....
i make a break now, the brain is just about to explode.......
stan
-

group2 = group.copy group2 = group.move!(vector)
group2 = group.copy group2.move!(vector)Should leave group where it was ???
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