From Ruby API, use Entities#weld_edges
sorry, I didn’t express the problem clearly.
Layout::Entities not exist the function.
sorry, I didn’t express the problem clearly.
Since they are “arc type” paths, I am not sure if this will work …
if arc1.end_point == arc2.start_point
arc2.points.each { |pt| arc1.append_point(pt) }
doc.remove_entity(arc2)
elsif arc1.end_point == arc2.end_point
arc2.points.reverse.each { |pt| arc1.append_point(pt) }
doc.remove_entity(arc2)
elsif arc2.end_point == arc1.start_point
arc1.points.each { |pt| arc2.append_point(pt) }
doc.remove_entity(arc1)
elsif arc2.end_point == arc1.end_point
arc1.points.reverse.each { |pt| arc2.append_point(pt) }
doc.remove_entity(arc1)
end
… because the winding and point types may become confused.
You may need to just use the points from both arc1
and arc2
to build a new non-arc path.
Then afterward delete arc1
and arc2
.
def weld_arcs(arc1, arc2)
if arc1.end_point == arc2.start_point
points = arc1.points + arc2.points
elsif arc1.end_point == arc2.end_point
points = arc1.points + arc2.points.reverse
elsif arc2.end_point == arc1.start_point
points = arc2.points + arc1.points
end
path = Layout::Path.new(points.shift, points.shift)
points.each { |pt| path.append_point(pt) }
layer = arc1.layer_instance
page = arc1.page
style = arc1.style
doc = arc1.document
doc.remove_entity(arc1)
doc.remove_entity(arc2)
if page # might be nil
doc.add_entity(path, layer, page)
else
doc.add_entity(path, layer)
end
# Set the style for the new path after adding it to the document !
path.style = style
end ### weld_arcs()
Method is weld
, not weld_edges
. Note that it wouldn’tpreserve ArcCurves
. It would explode them and reassemble as a simple Curve
.
The result of the function path.points
includes the center point.
new_path = Layout::Path.new_arc(Geom::Point2d.new, 10, 0.degrees, 180.degrees)
new_path.points.each_with_index do |pt, index|
p1 = Geom::Point3d.new(pt.x, pt.y, 0)
Sketchup.active_model.entities.add_cpoint p1
end
That must be a bug.
Also the Path::new_arc
method produces points that are not actually on an arc.
Please report these in the API issue tracker.
For now you’ll have to delete the center from the points array.
path.points.delete(path.arc[0])
For now, I use the polyline to draw multi-arc in one path.