def test_face(self): face = Vertex(flags=192) face[0] = 1 face[1] = 2 face[2] = 3 face[3] = 4 expected = " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n" \ " 70\n192\n 71\n1\n 72\n2\n 73\n3\n 74\n4\n" self.assertEqual(dxfstr(face), expected)
def test_full_vertex(self): vertex = Vertex(startwidth=0.1, endwidth=0.2, bulge=0.3, flags=0, curve_fit_tangent_direction=30.0) expected = " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n" \ " 40\n0.1\n 41\n0.2\n 42\n0.3\n 70\n0\n 50\n30.0\n" self.assertEqual(dxfstr(vertex), expected)
def test_polyline(self): polyline = Polyline() polyline.add_vertex( (0, 0) ) vt1 = " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n" polyline.add_vertex( (1, 1) ) vt2 = " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n1.0\n 30\n0.0\n" expected = " 0\nPOLYLINE\n 8\n0\n 66\n1\n 10\n0.0\n 20\n0.0\n 30\n0.0\n" \ " 70\n8\n" + vt1 + vt2 + " 0\nSEQEND\n" self.assertEqual(dxfstr(polyline), expected)
def test_full_vertex(self): vertex = Vertex( startwidth=0.1, endwidth=0.2, bulge=0.3, flags=0, curve_fit_tangent_direction=30.0 ) expected = " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n" \ " 40\n0.1\n 41\n0.2\n 42\n0.3\n 70\n0\n 50\n30.0\n" self.assertEqual(dxfstr(vertex), expected)
def test_stable_order(self): pface = Polyface() pface.add_face([(0,0), (1,1), (1,0)]) vt1 = " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 70\n192\n" vt2 = " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n1.0\n 30\n0.0\n 70\n192\n" vt3 = " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n0.0\n 30\n0.0\n 70\n192\n" vtface = " 0\nVERTEX\n 62\n0\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 70\n128\n" \ " 71\n1\n 72\n2\n 73\n3\n" expected = " 0\nPOLYLINE\n 8\n0\n 66\n1\n" \ " 70\n64\n 71\n3\n 72\n1\n" + vt1 + vt2 + vt3 + vtface + " 0\nSEQEND\n" self.assertEqual(dxfstr(pface), expected)
def test_optimize_simple_4points_polyface(self): pface = Polyface() pface.add_face([(0,0), (1,0), (1,1), (0,0)]) # 1 == 4 -> use vt1 instead of vt4 vt1 = " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 70\n192\n" vt2 = " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n0.0\n 30\n0.0\n 70\n192\n" vt3 = " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n1.0\n 30\n0.0\n 70\n192\n" vtface = " 0\nVERTEX\n 62\n0\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 70\n128\n" \ " 71\n1\n 72\n2\n 73\n3\n 74\n1\n" expected = " 0\nPOLYLINE\n 8\n0\n 66\n1\n" \ " 70\n64\n 71\n3\n 72\n1\n" + vt1 + vt2 + vt3 + vtface + " 0\nSEQEND\n" self.assertEqual(dxfstr(pface), expected)
def test_stable_order(self): pface = Polyface() pface.add_face([(0, 0), (1, 1), (1, 0)]) vt1 = " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 70\n192\n" vt2 = " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n1.0\n 30\n0.0\n 70\n192\n" vt3 = " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n0.0\n 30\n0.0\n 70\n192\n" vtface = " 0\nVERTEX\n 62\n0\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 70\n128\n" \ " 71\n1\n 72\n2\n 73\n3\n" expected = " 0\nPOLYLINE\n 8\n0\n 66\n1\n" \ " 70\n64\n 71\n3\n 72\n1\n" + vt1 + vt2 + vt3 + vtface + " 0\nSEQEND\n" self.assertEqual(dxfstr(pface), expected)
def test_polymesh(self): mesh = Polymesh(2, 2) mesh.set_vertex(0, 0, (1, 1, 0)) vt1 = " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n1.0\n 30\n0.0\n 70\n64\n" mesh.set_vertex(0, 1, (2, 1, 0)) vt2 = " 0\nVERTEX\n 8\n0\n 10\n2.0\n 20\n1.0\n 30\n0.0\n 70\n64\n" mesh.set_vertex(1, 0, (1, 2, 0)) vt3 = " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n2.0\n 30\n0.0\n 70\n64\n" mesh.set_vertex(1, 1, (2, 2, 0)) vt4 = " 0\nVERTEX\n 8\n0\n 10\n2.0\n 20\n2.0\n 30\n0.0\n 70\n64\n" expected = " 0\nPOLYLINE\n 8\n0\n 66\n1\n" \ " 70\n16\n 71\n2\n 72\n2\n" + vt1 + vt2 + vt3 + vt4 + " 0\nSEQEND\n" self.assertEqual(dxfstr(mesh), expected)
def test_cube_of_polyfaces(self): pface = Polyface() # cube corner points p1 = pface.add_vertex((0, 0, 0)) p2 = pface.add_vertex((0, 0, 1)) p3 = pface.add_vertex((0, 1, 0)) p4 = pface.add_vertex((0, 1, 1)) p5 = pface.add_vertex((1, 0, 0)) p6 = pface.add_vertex((1, 0, 1)) p7 = pface.add_vertex((1, 1, 0)) p8 = pface.add_vertex((1, 1, 1)) # define the 6 cube faces # look into -x direction pface.add_face_by_indices([p1, p5, p7, p3]) # base pface.add_face_by_indices([p1, p5, p6, p2]) # left pface.add_face_by_indices([p5, p7, p8, p6]) # front pface.add_face_by_indices([p7, p8, p4, p3]) # right pface.add_face_by_indices([p1, p3, p4, p2]) # back pface.add_face_by_indices([p2, p6, p8, p4]) # top vt = " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 70\n192\n" + \ " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n1.0\n 70\n192\n" + \ " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n1.0\n 30\n0.0\n 70\n192\n" + \ " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n1.0\n 30\n1.0\n 70\n192\n" + \ " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n0.0\n 30\n0.0\n 70\n192\n" + \ " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n0.0\n 30\n1.0\n 70\n192\n" + \ " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n1.0\n 30\n0.0\n 70\n192\n" + \ " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n1.0\n 30\n1.0\n 70\n192\n" vtf_prefix = " 0\nVERTEX\n 62\n0\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 70\n128\n" vtf = vtf_prefix + " 71\n1\n 72\n5\n 73\n7\n 74\n3\n" + \ vtf_prefix + " 71\n1\n 72\n5\n 73\n6\n 74\n2\n" + \ vtf_prefix + " 71\n5\n 72\n7\n 73\n8\n 74\n6\n" + \ vtf_prefix + " 71\n7\n 72\n8\n 73\n4\n 74\n3\n" + \ vtf_prefix + " 71\n1\n 72\n3\n 73\n4\n 74\n2\n" + \ vtf_prefix + " 71\n2\n 72\n6\n 73\n8\n 74\n4\n" expected = " 0\nPOLYLINE\n 8\n0\n 66\n1\n" \ " 70\n64\n 71\n8\n 72\n6\n" + vt + vtf + " 0\nSEQEND\n" self.assertEqual(dxfstr(pface), expected)
def test_cube_of_polyfaces(self): pface = Polyface() # cube corner points p1 = pface.add_vertex( (0,0,0) ) p2 = pface.add_vertex( (0,0,1) ) p3 = pface.add_vertex( (0,1,0) ) p4 = pface.add_vertex( (0,1,1) ) p5 = pface.add_vertex( (1,0,0) ) p6 = pface.add_vertex( (1,0,1) ) p7 = pface.add_vertex( (1,1,0) ) p8 = pface.add_vertex( (1,1,1) ) # define the 6 cube faces # look into -x direction pface.add_face_by_indices([p1, p5, p7, p3]) # base pface.add_face_by_indices([p1, p5, p6, p2]) # left pface.add_face_by_indices([p5, p7, p8, p6]) # front pface.add_face_by_indices([p7, p8, p4, p3]) # right pface.add_face_by_indices([p1, p3, p4, p2]) # back pface.add_face_by_indices([p2, p6, p8, p4]) # top vt = " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 70\n192\n" + \ " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n1.0\n 70\n192\n" + \ " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n1.0\n 30\n0.0\n 70\n192\n" + \ " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n1.0\n 30\n1.0\n 70\n192\n" + \ " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n0.0\n 30\n0.0\n 70\n192\n" + \ " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n0.0\n 30\n1.0\n 70\n192\n" + \ " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n1.0\n 30\n0.0\n 70\n192\n" + \ " 0\nVERTEX\n 8\n0\n 10\n1.0\n 20\n1.0\n 30\n1.0\n 70\n192\n" vtf_prefix = " 0\nVERTEX\n 62\n0\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 70\n128\n" vtf = vtf_prefix + " 71\n1\n 72\n5\n 73\n7\n 74\n3\n" + \ vtf_prefix + " 71\n1\n 72\n5\n 73\n6\n 74\n2\n" + \ vtf_prefix + " 71\n5\n 72\n7\n 73\n8\n 74\n6\n" + \ vtf_prefix + " 71\n7\n 72\n8\n 73\n4\n 74\n3\n" + \ vtf_prefix + " 71\n1\n 72\n3\n 73\n4\n 74\n2\n" + \ vtf_prefix + " 71\n2\n 72\n6\n 73\n8\n 74\n4\n" expected = " 0\nPOLYLINE\n 8\n0\n 66\n1\n" \ " 70\n64\n 71\n8\n 72\n6\n" + vt + vtf + " 0\nSEQEND\n" self.assertEqual(dxfstr(pface), expected)
class TestLinetypeTableEntry(unittest.TestCase): pattern = Linetype.make_line_pattern_definition([0.6, 0.5, -0.1]) expected = " 0\nLTYPE\n 2\nDASHED\n 70\n0\n 3\nstrichliert\n%s" % dxfstr( pattern) def test_linepattern(self): expected = " 72\n65\n 73\n2\n 40\n0.6\n" \ " 49\n0.5\n 49\n-0.1\n" self.assertEqual(dxfstr(self.pattern), expected) def test_create_table_entry(self): ltype = Linetype('DASHED', description="strichliert", pattern=self.pattern) self.assertEqual(dxfstr(ltype), self.expected) def test_create_table_entry_by_factory(self): ltype = DXFEngine.linetype('DASHED', description="strichliert", pattern=self.pattern) self.assertEqual(dxfstr(ltype), self.expected)
def test_create_table_entry_by_factory(self): ltype = DXFEngine.linetype('DASHED', description="strichliert", pattern=self.pattern) self.assertEqual(dxfstr(ltype), self.expected)
def test_empty_ucs_table(self): table = create_table('UCS') dxf = dxfstr(table) self.assertEqual(dxf, " 0\nTABLE\n 2\nUCS\n 70\n0\n 0\nENDTAB\n")
def test_empty_styles_table(self): table = create_table('STYLE') dxf = dxfstr(table) self.assertEqual(dxf, " 0\nTABLE\n 2\nSTYLE\n 70\n0\n 0\nENDTAB\n")
def test_empty_linetypes_table(self): table = create_table('LTYPE') dxf = dxfstr(table) self.assertEqual(dxf, " 0\nTABLE\n 2\nLTYPE\n 70\n0\n 0\nENDTAB\n")
def test_create_table_entry(self): ucs = UCS('Test') self.assertEqual(dxfstr(ucs), self.expected)
def test_style_by_factory(self): style = DXFEngine.style("ARIAL", font='Arial.ttf') self.set_params(style) self.assertEqual(dxfstr(style), self.expected)
def test_empty_viewports_table(self): table = create_table('VPORT') dxf = dxfstr(table) self.assertEqual(dxf, " 0\nTABLE\n 2\nVPORT\n 70\n0\n 0\nENDTAB\n")
def test_empty_layers_table(self): table = create_table('LAYER') dxf = dxfstr(table) self.assertEqual(dxf, " 0\nTABLE\n 2\nLAYER\n 70\n0\n 0\nENDTAB\n")
def test_layer_by_factory(self): layer = DXFEngine.layer('Standard', linetype='CONTINUOUS') self.assertEqual(dxfstr(layer), self.expected)
def test_vport_by_factory(self): viewport = DXFEngine.vport('Test') self.assertEqual(dxfstr(viewport), self.expected)
def test_create_viewport_entity(self): viewport = Viewport((0, 0, 0), 3, 2, id=1) self.assertEqual(dxfstr(viewport), self.expected)
def test_create_table_entry(self): view = View('Test') self.assertEqual(dxfstr(view), self.expected)
def test_create_table_entry(self): viewport = VPort('Test') self.assertEqual(dxfstr(viewport), self.expected)
def test_view_by_factory(self): view = DXFEngine.view('Test') self.assertEqual(dxfstr(view), self.expected)
def test_create_table_entry(self): layer = Layer('Standard', linetype='CONTINUOUS') self.assertEqual(dxfstr(layer), self.expected)
def test_viewport_by_factory(self): viewport = DXFEngine.viewport((0,0,0), 3, 2, id=1) self.assertEqual(dxfstr(viewport), self.expected)
def main(): print("Sizeof DXF string: %d" % len(dxfwrite.dxfstr(drawing))) t = Timer("profile_dxfstr()", setup_dxfstr) print_result(t.timeit(COUNT), 'using the dxfstr()') t = Timer("profile_save_to_fileobj()", setup_write_dxf) print_result(t.timeit(COUNT), 'using the save_to_fileobj()')
def profile_dxfstr(): dxf_string = dxfwrite.dxfstr(drawing)
def test_linepattern(self): expected = " 72\n65\n 73\n2\n 40\n0.6\n" \ " 49\n0.5\n 49\n-0.1\n" self.assertEqual(dxfstr(self.pattern), expected)
def main(): print("Sizeof DXF string: %d" % len(dxfwrite.dxfstr(drawing)) ) t = Timer("profile_dxfstr()", setup_dxfstr) print_result(t.timeit(COUNT), 'using the dxfstr()') t = Timer("profile_save_to_fileobj()", setup_write_dxf) print_result(t.timeit(COUNT), 'using the save_to_fileobj()')
def test_simple_vertex(self): vertex = Vertex() expected = " 0\nVERTEX\n 8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n" self.assertEqual(dxfstr(vertex), expected)
def __dxf__(self): """ Get the dxf string. """ return dxfstr(self.__dxftags__())
def test_viewport_by_factory(self): viewport = DXFEngine.viewport((0, 0, 0), 3, 2, id=1) self.assertEqual(dxfstr(viewport), self.expected)
def test_create_viewport_entity(self): viewport = Viewport((0,0,0), 3, 2, id=1) self.assertEqual(dxfstr(viewport), self.expected)
def test_ucs_by_factory(self): ucs = DXFEngine.ucs('Test') self.assertEqual(dxfstr(ucs), self.expected)
def test_create_table_entry(self): style = Style("ARIAL", font='Arial.ttf') self.set_params(style) self.assertEqual(dxfstr(style), self.expected)