Fix handling of infinite line

Fixes #222
This commit is contained in:
Zheng, Lei 2019-04-09 13:00:16 +08:00
parent e73ad4cc87
commit 1a96bb2805
2 changed files with 21 additions and 9 deletions

View File

@ -180,8 +180,8 @@ def _l(solver,partInfo,subname,shape,retAll=False):
system.log('cache {}: {}',key,h)
else:
nameTag = partInfo.PartName + '.' + key
v = utils.getVertexes(shape)
if utils.isDraftWire(part):
v = shape.Edge1.Vertexes
vname1,vname2 = utils.edge2VertexIndex(part,subname)
if not vname1:
raise RuntimeError('Invalid draft subname {} or {}'.format(
@ -189,9 +189,12 @@ def _l(solver,partInfo,subname,shape,retAll=False):
tp0 = _p(solver,partInfo,vname1,v[0])
tp1 = _p(solver,partInfo,vname2,v[1])
else:
v = shape.Edge1.Vertexes
system.NameTag = nameTag + 'p0'
p0 = system.addPoint3dV(*v[0].Point)
try:
p0 = system.addPoint3dV(*v[0].Point)
except Exception:
logger.info(system.NameTag)
raise
system.NameTag = nameTag + 'p0t'
tp0 = system.addTransform(p0,*partInfo.Params,group=partInfo.Group)
system.NameTag = nameTag + 'p1'
@ -873,7 +876,7 @@ class Locked(Base):
nameTag = partInfo.PartName + '.' + info.Subname
for i,v in enumerate(info.Shape.Vertexes):
for i,v in enumerate(utils.getVertexes(info.Shape)):
surfix = '.fp{}'.format(i)
system.NameTag = nameTag + surfix

View File

@ -62,10 +62,7 @@ def objName(obj):
return '?'
def isLine(param):
if hasattr(Part,"LineSegment"):
return isinstance(param,(Part.Line,Part.LineSegment))
else:
return isinstance(param,Part.Line)
return isinstance(param,(Part.Line,Part.LineSegment))
def deduceSelectedElement(obj,subname):
shape = obj.getSubObject(subname)
@ -278,6 +275,16 @@ def isSphericalSurface(obj):
return False
return str( face.Surface ).startswith('Sphere ')
def getVertexes(shape):
v = shape.Vertexes
if v or shape.countElement('Edge')!=1:
return v
curve = shape.Edge1.Curve
if isinstance(curve,Part.Line):
return [Part.Vertex(curve.Location),
Part.Vertex(curve.Location+curve.Direction)]
return []
def getElementPos(obj):
vertex = getElementShape(obj,Part.Vertex)
if vertex:
@ -308,7 +315,9 @@ def getElementPos(obj):
edge = getElementShape(obj,Part.Edge)
if not edge:
return FreeCAD.Vector()
if isLine(edge.Curve):
if isinstance(edge.Curve,Part.Line):
return edge.Curve.Location
elif isinstance(edge.Curve,Part.LineSegment):
# pos = edge.Vertexes[-1].Point
return (edge.Vertex1.Point+edge.Vertex2.Point)*0.5
elif hasattr( edge.Curve, 'Center'): #circular curve