So we need:
- A good wire_from_edges function (optimized for Arch_Wall).
- An improved wire_is_closed function (with a self_intersect_is_allowed argument, or a separate function to check that).
Thanks again. The 2nd one seems more urgent as it current provide 'false positive' and create weird shape.
It is not that simple.
Code: Select all
elif obj.Base.isDerivedFrom("Sketcher::SketchObject"):
self.basewires = []
skGeom = obj.Base.GeometryFacadeList
skGeomEdges = []
skPlacement = obj.Base.Placement # Get Sketch's placement to restore later
for i in skGeom:
if not i.Construction:
# support Line, Arc, Circle for Sketch as Base at the moment
if isinstance(i.Geometry, (Part.LineSegment, Part.Circle, Part.ArcOfCircle)):
skGeomEdgesI = i.Geometry.toShape()
skGeomEdges.append(skGeomEdgesI)
for cluster in Part.getSortedClusters(skGeomEdges):
clusterTransformed = []
for edge in cluster:
edge.Placement = edge.Placement.multiply(skPlacement) ## TODO add attribute to skip Transform...
clusterTransformed.append(edge)
# Only use cluster of edges rather than turning into wire
self.basewires.append(clusterTransformed)
Code: Select all
#wire = Part.Wire(Part.__sortEdges__(edges))
wire = Part.Wire(edges)
Code: Select all
#closed = isReallyClosed(wire)
closed = wire.isClosed()
Code: Select all
def isReallyClosed(wire):
if isinstance(wire, (Part.Wire, Part.Edge)):
return wire.isClosed()
return isinstance(wire, Part.Face)