importDXF: provide polygon fallback for splines

with invalid multiplicities
This commit is contained in:
Sebastian Hoogen 2015-01-16 17:14:22 +01:00 committed by Yorik van Havre
parent ad54783016
commit c90c2441d2

View File

@ -563,16 +563,17 @@ def drawSolid(solid):
warn(solid) warn(solid)
return None return None
def drawSplineIterpolation(verts,closed=False,forceShape=False): def drawSplineIterpolation(verts,closed=False,forceShape=False,\
alwaysDiscretize=False):
if (dxfCreateDraft or dxfCreateSketch) and (not forceShape): if (dxfCreateDraft or dxfCreateSketch) and (not forceShape):
if dxfDiscretizeCurves: if dxfDiscretizeCurves or alwaysDiscretize:
ob = Draft.makeWire(verts) ob = Draft.makeWire(verts)
else: else:
ob = Draft.makeBSpline(verts) ob = Draft.makeBSpline(verts)
ob.Closed = closed ob.Closed = closed
return ob return ob
else: else:
if dxfDiscretizeCurves: if dxfDiscretizeCurves or alwaysDiscretize:
sh = Part.makePolygon(verts+[verts[0]]) sh = Part.makePolygon(verts+[verts[0]])
else: else:
sp = Part.BSplineCurve() sp = Part.BSplineCurve()
@ -693,6 +694,12 @@ non-parametric curve"""
previousknot = knotvalue previousknot = knotvalue
knotvector.append(knotvalue) knotvector.append(knotvalue)
multvector.append(mult) multvector.append(mult)
innermults = multvector[:] if periodic else multvector[1:-1]
if any(m>degree for m in innermults):
#raise ValueError('Invalid multiplicities')
#warn('polygon fallback on %s' %spline)
return drawSplineIterpolation(controlpoints,closed=closed,\
forceShape=forceShape,alwaysDiscretize=True)
try: try:
bspline=Part.BSplineCurve() bspline=Part.BSplineCurve()
bspline.buildFromPolesMultsKnots(poles=controlpoints,mults=multvector,\ bspline.buildFromPolesMultsKnots(poles=controlpoints,mults=multvector,\