[Draft]support BSplineCurve in getNormal

This commit is contained in:
wandererfan
2020-04-08 21:03:16 -04:00
committed by WandererFan
parent 19744a9f83
commit 093b6d9901

View File

@@ -1178,6 +1178,17 @@ def isReallyClosed(wire):
if DraftVecUtils.equals(v1,v2): return True
return False
def getSplineNormal(edge):
"""Find the normal of a BSpline edge"""
startPoint = edge.valueAt(edge.FirstParameter)
endPoint = edge.valueAt(edge.LastParameter)
midParameter = edge.FirstParameter + (edge.LastParameter - edge.FirstParameter)/2
midPoint = edge.valueAt(midParameter)
v1 = midPoint - startPoint
v2 = midPoint - endPoint
n = v1.cross(v2)
n.normalize()
return n
def getNormal(shape):
"""Find the normal of a shape, if possible."""
@@ -1189,11 +1200,18 @@ def getNormal(shape):
elif shape.ShapeType == "Edge":
if geomType(shape.Edges[0]) in ["Circle","Ellipse"]:
n = shape.Edges[0].Curve.Axis
elif geomType(edge) == "BSplineCurve" or \
geomType(edge) == "BezierCurve":
n = getSplineNormal(edge)
else:
for e in shape.Edges:
if geomType(e) in ["Circle","Ellipse"]:
n = e.Curve.Axis
break
elif geomType(e) == "BSplineCurve" or \
geomType(e) == "BezierCurve":
n = getSplineNormal(e)
break
e1 = vec(shape.Edges[0])
for i in range(1,len(shape.Edges)):
e2 = vec(shape.Edges[i])