Hello
I want to change some points of my edges.
It seems to work , but when the functiion ends, the points have the former coordinates.
I use transform! which is supposed to modify the point, as I understand.
Where is my mistake ?
UI.messagebox to_change.length
to_change.each do |edge|
vertex = edge.end
point = vertex.position
puts "before #{point.x} , #{point.y} , #{point.z}"
vector = point.vector_to [point.x,point.y,0]
tr = Geom::Transformation.translation vector
point.transform! tr
puts "after #{point.x} , #{point.y} , #{point.z}"
end
before 171,8422mm , 290,5582mm , 0,1044mm
after 171,8422mm , 290,5582mm , 0,0000mm
before -55,5479mm , 607,8201mm , 0,1043mm
after -55,5479mm , 607,8201mm , 0,0000mm
You construct your vector to go from the point to its projection onto the x,y plane: it has values [0,0,-point.z]. Apply this as a transformation, and it leaves the x and y coordinates unchanged while moving the z value to 0.
You need to transform the vertices themselves. The points retrieved from their position
are not associated with the edges.
1 Like
You are right! I may have focused too much on the code snippet and missed the actual goal!
Thanks slbaumgartner, jim_foltz
I’m not used to all these concepts, I will train;)
I take advantage of your help, to ask how to use the transformation to modify the two points of a vertex… The transformation for a vertice will make a translation, which is not what I want.
To move a single vertex. Assume the model consists of a single Edge.
model = Sketchup.active_model
entities = model.entities
edge = entities[0]
a = edge.start
b = edge.end
tr = Geom::Transformation.translation([0, 0, 1])
entities.transform_entities(tr, [b])
Use Entities#transform_entities(Transformation, array_of_entities)
to transform a list of entities by the same Transformation.
Use Entities#transform_by_vectors(array_of_entities, array_of_vectors)
to transform a list of entities each by a different vector. array_of_entities
and array_of_vectors
must be the same length.
1 Like