[ArchWall_Draft-OffsetWires] Bug-fix Ellipse Support (#16038)

* [ArchWall_Draft-OffsetWires] Bug-fix Ellipse Support

Fixed bug/regression in ArchWall/Draft-OffsetWires ellipse support.

FC Forum Discussion
- https://forum.freecad.org/viewtopic.php?p=777965#p777897

* Update offsets.py

Typo

* L347 - trailing whitespace after comma
This commit is contained in:
paul
2024-08-27 00:03:21 +08:00
committed by GitHub
parent 0d4b04deb3
commit 664f4d5655
2 changed files with 7 additions and 5 deletions

View File

@@ -803,8 +803,8 @@ class _Wall(ArchComponent.Component):
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)):
# support Line, Arc, Circle, Ellipse for Sketch as Base at the moment
if isinstance(i.Geometry, (Part.LineSegment, Part.Circle, Part.ArcOfCircle, Part.Ellipse)):
skGeomEdgesI = i.Geometry.toShape()
skGeomEdges.append(skGeomEdgesI)
for cluster in Part.getSortedClusters(skGeomEdges):

View File

@@ -343,7 +343,9 @@ def offsetWire(wire, dvec, bind=False, occ=False,
# record current edge's Orientation, and set Delta
if i != 0: # else:
# TODO Should also calculate 1st edge direction above
if isinstance(curredge.Curve, Part.Circle):
if isinstance(curredge.Curve, (Part.Circle,Part.Ellipse)):
# Seems Circle/Ellipse (1 geometry) would be sorted in 1 list,
# so i=0; should not happen here in fact (i != 0). 2024.8.25.
delta = curredge.tangentAt(curredge.FirstParameter).cross(norm)
else:
delta = vec(curredge).cross(norm)
@@ -441,7 +443,7 @@ def offsetWire(wire, dvec, bind=False, occ=False,
# TODO arc always in counter-clockwise directinon
# ... ( not necessarily 'reversed')
if curOrientation == "Reversed":
if not isinstance(curredge.Curve, Part.Circle):
if not isinstance(curredge.Curve, (Part.Circle,Part.Ellipse)):
# assume straight line, reverse it
nedge = Part.Edge(nedge.Vertexes[1], nedge.Vertexes[0])
elif nedge.isClosed():
@@ -482,7 +484,7 @@ def offsetWire(wire, dvec, bind=False, occ=False,
elif curAlign == 'Center':
nedge = offset(curredge, delta, trim=True)
if curOrientation == "Reversed":
if not isinstance(curredge.Curve, Part.Circle):
if not isinstance(curredge.Curve, (Part.Circle,Part.Ellipse)):
# assume straight line, reverse it
nedge = Part.Edge(nedge.Vertexes[1], nedge.Vertexes[0])
elif nedge.isClosed():