def _dxf_spline(el): try: degree = el.dxf.degree periodic = el.closed rational = False knots_unique = OrderedDict() for k in el.knots: if k in knots_unique: knots_unique[k] += 1 else: knots_unique[k] = 1 # assmble knots knots = TColStd_Array1OfReal(1, len(knots_unique)) multiplicities = TColStd_Array1OfInteger(1, len(knots_unique)) for i, (k, m) in enumerate(knots_unique.items()): knots.SetValue(i + 1, k) multiplicities.SetValue(i + 1, m) # assemble weights if present: if el.weights: rational = True weights = TColStd_Array1OfReal(1, len(el.weights)) for i, w in enumerate(el.weights): weights.SetValue(i + 1, w) # assemble control points pts = TColgp_Array1OfPnt(1, len(el.control_points)) for i, p in enumerate(el.control_points): pts.SetValue(i + 1, gp_Pnt(*p)) if rational: spline = Geom_BSplineCurve(pts, weights, knots, multiplicities, degree, periodic) else: spline = Geom_BSplineCurve(pts, knots, multiplicities, degree, periodic) return (Edge(BRepBuilderAPI_MakeEdge(spline).Edge()), ) except Exception: return ()
def testVertices(self): e = Shape.cast( BRepBuilderAPI_MakeEdge(gp_Pnt(0, 0, 0), gp_Pnt(1, 1, 0)).Edge()) self.assertEqual(2, len(e.Vertices()))
def _make_circle(self): circle = gp_Circ(gp_Ax2(gp_Pnt(1, 2, 3), gp.DZ_s()), 2.0) return Shape.cast(BRepBuilderAPI_MakeEdge(circle).Edge())
def _make_ellipse(self): ellipse = gp_Elips(gp_Ax2(gp_Pnt(1, 2, 3), gp.DZ_s()), 4.0, 2.0) return Shape.cast(BRepBuilderAPI_MakeEdge(ellipse).Edge())
def testDXF(self): exporters.export(self._box().section(), "out.dxf") with self.assertRaises(ValueError): exporters.export(self._box().val(), "out.dxf") s1 = (Workplane("XZ").polygon(10, 10).ellipse( 1, 2).extrude(1).edges("|Y").fillet(1).section()) exporters.dxf.exportDXF(s1, "res1.dxf") s1_i = importers.importDXF("res1.dxf") self.assertAlmostEqual(s1.val().Area(), s1_i.val().Area(), 6) self.assertAlmostEqual(s1.edges().size(), s1_i.edges().size()) pts = [(0, 0), (0, 0.5), (1, 1)] s2 = (Workplane().spline(pts).close().extrude(1).edges("|Z").fillet( 0.1).section()) exporters.dxf.exportDXF(s2, "res2.dxf") s2_i = importers.importDXF("res2.dxf") self.assertAlmostEqual(s2.val().Area(), s2_i.val().Area(), 6) self.assertAlmostEqual(s2.edges().size(), s2_i.edges().size()) s3 = (Workplane("XY").ellipseArc( 1, 2, 0, 180).close().extrude(1).edges("|Z").fillet(0.1).section()) exporters.dxf.exportDXF(s3, "res3.dxf") s3_i = importers.importDXF("res3.dxf") self.assertAlmostEqual(s3.val().Area(), s3_i.val().Area(), 6) self.assertAlmostEqual(s3.edges().size(), s3_i.edges().size()) cyl = Workplane("XY").circle(22).extrude(10, both=True).translate( (-50, 0, 0)) s4 = Workplane("XY").box(80, 60, 5).cut(cyl).section() exporters.dxf.exportDXF(s4, "res4.dxf") s4_i = importers.importDXF("res4.dxf") self.assertAlmostEqual(s4.val().Area(), s4_i.val().Area(), 6) self.assertAlmostEqual(s4.edges().size(), s4_i.edges().size()) # test periodic spline w = Workplane().spline([(1, 1), (2, 2), (3, 2), (3, 1)], periodic=True) exporters.dxf.exportDXF(w, "res5.dxf") w_i = importers.importDXF("res5.dxf") self.assertAlmostEqual(w.val().Length(), w_i.wires().val().Length(), 6) # test rational spline c = Edge.makeCircle(1) adaptor = c._geomAdaptor() curve = GeomConvert.CurveToBSplineCurve_s(adaptor.Curve().Curve()) e = Workplane().add(Edge(BRepBuilderAPI_MakeEdge(curve).Shape())) exporters.dxf.exportDXF(e, "res6.dxf") e_i = importers.importDXF("res6.dxf") self.assertAlmostEqual(e.val().Length(), e_i.wires().val().Length(), 6) # test non-planar section s5 = (Workplane().spline([ (0, 0), (1, 0), (1, 1), (0, 1) ]).close().extrude(1, both=True).translate((-3, -4, 0))) s5.plane = Plane(origin=(0, 0.1, 0.5), normal=(0.05, 0.05, 1)) s5 = s5.section() exporters.dxf.exportDXF(s5, "res7.dxf") s5_i = importers.importDXF("res7.dxf") self.assertAlmostEqual(s5.val().Area(), s5_i.val().Area(), 4)