Draft/Arch: Support for Y situations in sketches - issue #3163
This commit is contained in:
@@ -625,10 +625,11 @@ class _Wall(ArchComponent.Component):
|
||||
return None
|
||||
else:
|
||||
base,placement = self.rebase(obj.Base.Shape)
|
||||
elif obj.Base.Shape.Wires:
|
||||
basewires = obj.Base.Shape.Wires
|
||||
elif len(obj.Base.Shape.Edges) == 1:
|
||||
basewires = [Part.Wire(obj.Base.Shape.Edges)]
|
||||
else:
|
||||
# basewires = obj.Base.Shape.Wires
|
||||
basewires = [Part.Wire(cluster) for cluster in Part.getSortedClusters(obj.Base.Shape.Edges)]
|
||||
if basewires and width:
|
||||
if (len(basewires) == 1) and layers:
|
||||
basewires = [basewires[0] for l in layers]
|
||||
@@ -695,6 +696,10 @@ class _Wall(ArchComponent.Component):
|
||||
baseface.append(f)
|
||||
else:
|
||||
baseface = baseface.fuse(f)
|
||||
# baseface = baseface.removeSplitter()
|
||||
s = DraftGeomUtils.removeSplitter(baseface)
|
||||
if s:
|
||||
baseface = s
|
||||
else:
|
||||
if layers:
|
||||
baseface = [f]
|
||||
|
||||
@@ -1727,7 +1727,8 @@ def draftify(objectslist,makeblock=False,delete=True):
|
||||
newobjlist = []
|
||||
for obj in objectslist:
|
||||
if obj.isDerivedFrom('Part::Feature'):
|
||||
for w in obj.Shape.Wires:
|
||||
for cluster in Part.getSortedClusters(obj.Shape.Edges):
|
||||
w = Part.Wire(cluster)
|
||||
if DraftGeomUtils.hasCurves(w):
|
||||
if (len(w.Edges) == 1) and (DraftGeomUtils.geomType(w.Edges[0]) == "Circle"):
|
||||
nobj = makeCircle(w.Edges[0])
|
||||
|
||||
@@ -2129,6 +2129,29 @@ def rebaseWire(wire,vidx):
|
||||
return Part.Wire(wire.Edges[vidx-1:] + wire.Edges[:vidx-1])
|
||||
|
||||
|
||||
def removeSplitter(shape):
|
||||
"""an alternative, shared edge-based version of Part.removeSplitter. Returns a
|
||||
face or None if the operation failed"""
|
||||
lut = {}
|
||||
for f in shape.Faces:
|
||||
for e in f.Edges:
|
||||
h = e.hashCode()
|
||||
if h in lut:
|
||||
lut[h].append(e)
|
||||
else:
|
||||
lut[h] = [e]
|
||||
edges = [e[0] for e in lut.values() if len(e) == 1]
|
||||
try:
|
||||
face = Part.Face(Part.Wire(edges))
|
||||
except:
|
||||
# operation failed
|
||||
return None
|
||||
else:
|
||||
if face.isValid():
|
||||
return face
|
||||
return None
|
||||
|
||||
|
||||
# circle functions *********************************************************
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user