Added ellipse handling and reworked spline

This commit is contained in:
adam-urbanczyk
2020-07-16 18:40:43 +02:00
parent 69ddc698d8
commit 32a6c5f54f

View File

@ -1,8 +1,9 @@
from collections import OrderedDict from collections import OrderedDict
from math import pi
from .. import cq from .. import cq
from .geom import Vector from .geom import Vector
from .shapes import Shape, Edge, Face, sortWiresByBuildOrder from .shapes import Shape, Edge, Face, sortWiresByBuildOrder, DEG2RAD
import ezdxf import ezdxf
@ -18,6 +19,7 @@ from OCP.BRepBuilderAPI import BRepBuilderAPI_MakeEdge
import OCP.IFSelect import OCP.IFSelect
RAD2DEG = 360.0 / (2 * pi)
class ImportTypes: class ImportTypes:
STEP = "STEP" STEP = "STEP"
@ -147,16 +149,32 @@ def _dxf_spline(el):
pts.SetValue(i + 1, gp_Pnt(*p)) pts.SetValue(i + 1, gp_Pnt(*p))
if rational: if rational:
spline = Geom_BSplineCurve(pts, knots, multiplicities, degree, periodic)
else:
spline = Geom_BSplineCurve( spline = Geom_BSplineCurve(
pts, knots, weights, multiplicities, degree, periodic pts, knots, weights, multiplicities, degree, periodic
) )
else:
spline = Geom_BSplineCurve(pts, knots, multiplicities, degree, periodic)
return (Edge(BRepBuilderAPI_MakeEdge(spline).Edge()),) return (Edge(BRepBuilderAPI_MakeEdge(spline).Edge()),)
except Exception: except Exception:
return () return ()
def _dxf_ellipse(el):
try:
return (
Edge.makeEllipse(
el.dxf.major_axis.magnitude,
el.minor_axis.magnitude,
pnt=Vector(el.dxf.center.xyz),
xdir=Vector(el.dxf.major_axis.xyz),
angle1=el.dxf.start_param * RAD2DEG,
angle2=el.dxf.end_param * RAD2DEG,
),
)
except Exception:
return ()
DXF_CONVERTERS = { DXF_CONVERTERS = {
"LINE": _dxf_line, "LINE": _dxf_line,
@ -165,6 +183,7 @@ DXF_CONVERTERS = {
"POLYLINE": _dxf_polyline, "POLYLINE": _dxf_polyline,
"LWPOLYLINE": _dxf_polyline, "LWPOLYLINE": _dxf_polyline,
"SPLINE": _dxf_spline, "SPLINE": _dxf_spline,
"ELLIPSE": _dxf_ellipse
} }