[Draft]support BSplineCurve in getNormal
This commit is contained in:
@@ -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])
|
||||
|
||||
Reference in New Issue
Block a user