Draft: better method for DraftGeomUtils.isPtOnEdge
This commit is contained in:
parent
57999cb78d
commit
b0c157a5ea
|
@ -85,39 +85,11 @@ def isNull(something):
|
||||||
|
|
||||||
def isPtOnEdge(pt,edge) :
|
def isPtOnEdge(pt,edge) :
|
||||||
'''isPtOnEdge(Vector,edge): Tests if a point is on an edge'''
|
'''isPtOnEdge(Vector,edge): Tests if a point is on an edge'''
|
||||||
if isinstance(edge.Curve,Part.Line) :
|
v = Part.Vertex(pt)
|
||||||
orig = edge.Vertexes[0].Point
|
d = v.distToShape(edge)
|
||||||
#if DraftVecUtils.isNull(pt.sub(orig).cross(vec(edge))) : <== can give unprecise results
|
if d:
|
||||||
if round(pt.sub(orig).getAngle(vec(edge)),precision()) == 0:
|
if round(d[0],precision()) == 0:
|
||||||
return pt.sub(orig).Length <= vec(edge).Length and pt.sub(orig).dot(vec(edge)) >= 0
|
return True
|
||||||
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
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def hasCurves(shape):
|
def hasCurves(shape):
|
||||||
|
@ -174,7 +146,6 @@ def areColinear(e1,e2):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def hasOnlyWires(shape):
|
def hasOnlyWires(shape):
|
||||||
"hasOnlyWires(shape): returns True if all the edges are inside a wire"
|
"hasOnlyWires(shape): returns True if all the edges are inside a wire"
|
||||||
ne = 0
|
ne = 0
|
||||||
|
|
Loading…
Reference in New Issue
Block a user