Draft: better method for DraftGeomUtils.isPtOnEdge

This commit is contained in:
Yorik van Havre 2014-06-11 10:37:48 -03:00
parent 57999cb78d
commit b0c157a5ea

View File

@ -85,39 +85,11 @@ def isNull(something):
def isPtOnEdge(pt,edge) :
'''isPtOnEdge(Vector,edge): Tests if a point is on an edge'''
if isinstance(edge.Curve,Part.Line) :
orig = edge.Vertexes[0].Point
#if DraftVecUtils.isNull(pt.sub(orig).cross(vec(edge))) : <== can give unprecise results
if round(pt.sub(orig).getAngle(vec(edge)),precision()) == 0:
return pt.sub(orig).Length <= vec(edge).Length and pt.sub(orig).dot(vec(edge)) >= 0
else :
return False
elif isinstance(edge.Curve,Part.Circle) :
center = edge.Curve.Center
axis = edge.Curve.Axis ; axis.normalize()
radius = edge.Curve.Radius
if round(pt.sub(center).dot(axis),precision()) == 0 \
and round(pt.sub(center).Length - radius,precision()) == 0 :
if len(edge.Vertexes) == 1 :
return True # edge is a complete circle
else :
begin = edge.Vertexes[0].Point
end = edge.Vertexes[-1].Point
if DraftVecUtils.isNull(pt.sub(begin)) or DraftVecUtils.isNull(pt.sub(end)) :
return True
else :
# newArc = Part.Arc(begin,pt,end)
# return DraftVecUtils.isNull(newArc.Center.sub(center)) \
# and DraftVecUtils.isNull(newArc.Axis-axis) \
# and round(newArc.Radius-radius,precision()) == 0
angle1 = -DraftVecUtils.angle(begin.sub(center))
angle2 = -DraftVecUtils.angle(end.sub(center))
anglept = -DraftVecUtils.angle(pt.sub(center))
if angle2 < angle1:
angle2 = angle2 + math.pi*2
if (angle1 < anglept) and (anglept < angle2):
return True
v = Part.Vertex(pt)
d = v.distToShape(edge)
if d:
if round(d[0],precision()) == 0:
return True
return False
def hasCurves(shape):
@ -174,7 +146,6 @@ def areColinear(e1,e2):
return True
return False
def hasOnlyWires(shape):
"hasOnlyWires(shape): returns True if all the edges are inside a wire"
ne = 0