Example #1
0
class TestHatchPatternCreate(unittest.TestCase):
    def setUp(self):
        tags = ClassifiedTags.from_text(_HATCH_TPL)
        self.hatch = Hatch(tags)

    def test_create_new_hatch(self):
        pattern = [
            [45, (0, 0), (0, 1), []],  # 1. Line: continuous
            [45, (0, 0.5), (0, 1), [0.2, -0.1]]  # 2. Line: dashed
        ]
        self.hatch.set_pattern_fill("MOZMAN", definition=pattern)

        self.assertEqual("MOZMAN", self.hatch.dxf.pattern_name)
        with self.hatch.edit_pattern() as p:
            line0 = p.lines[0]
            self.assertEqual(45, line0.angle)
            self.assertEqual((0, 0), line0.base_point)
            self.assertEqual((0, 1), line0.offset)
            self.assertEqual(0, len(line0.dash_length_items))

            line1 = p.lines[1]
            self.assertEqual(45, line1.angle)
            self.assertEqual((0, 0.5), line1.base_point)
            self.assertEqual((0, 1), line1.offset)
            self.assertEqual(2, len(line1.dash_length_items))
            self.assertEqual([0.2, -0.1], line1.dash_length_items)
Example #2
0
class TestEdgeHatchWithSpline(unittest.TestCase):
    def setUp(self):
        tags = ClassifiedTags.from_text(EDGE_HATCH_WITH_SPLINE)
        self.hatch = Hatch(tags)

    def test_get_params(self):
        with self.hatch.edit_boundary() as editor:
            path = editor.paths[0]
            spline = None
            for edge in path.edges:
                if edge.EDGE_TYPE == "SplineEdge":
                    spline = edge
                    break
            self.assertIsNotNone(spline, "Spline edge not found.")
            self.assertEqual(3, spline.degree)
            self.assertEqual(0, spline.rational)
            self.assertEqual(0, spline.periodic)
            self.assertEqual((0, 0), spline.start_tangent)
            self.assertEqual((0, 0), spline.end_tangent)
            self.assertEqual(10, len(spline.knot_values))
            self.assertEqual(11.86874452602773, spline.knot_values[-1])
            self.assertEqual(6, len(spline.control_points))
            self.assertEqual((0, 10), spline.control_points[0], "Unexpected start control point.")
            self.assertEqual((0, 0), spline.control_points[-1], "Unexpected end control point.")
            self.assertEqual(0, len(spline.weights))
            self.assertEqual(4, len(spline.fit_points))
            self.assertEqual((0, 10), spline.fit_points[0], "Unexpected start fit point.")
            self.assertEqual((0, 0), spline.fit_points[-1], "Unexpected end fit point.")

    def test_create_spline_edge(self):
        # create the spline
        with self.hatch.edit_boundary() as editor:
            path = editor.paths[0]
            spline = path.add_spline([(1, 1), (2, 2), (3, 3), (4, 4)], 3, 1, 1)
            # the following values do not represent a mathematically valid spline
            spline.control_points = [(1, 1), (2, 2), (3, 3), (4, 4)]
            spline.knot_values = [1, 2, 3, 4, 5, 6]
            spline.weights = [4, 3, 2, 1]
            spline.start_tangent = (10, 1)
            spline.end_tangent = (2, 20)

        # test the spline
        with self.hatch.edit_boundary() as editor:
            path = editor.paths[0]
            spline = path.edges[-1]
            self.assertEqual(3, spline.degree)
            self.assertEqual(1, spline.rational)
            self.assertEqual(1, spline.periodic)
            self.assertEqual((10, 1), spline.start_tangent)
            self.assertEqual((2, 20), spline.end_tangent)
            self.assertEqual([(1, 1), (2, 2), (3, 3), (4, 4)], spline.control_points)
            self.assertEqual([(1, 1), (2, 2), (3, 3), (4, 4)], spline.fit_points)
            self.assertEqual([1, 2, 3, 4, 5, 6], spline.knot_values)
            self.assertEqual([4, 3, 2, 1], spline.weights)
Example #3
0
class TestHatch(unittest.TestCase):
    def setUp(self):
        tags = ClassifiedTags.from_text(_HATCH_TPL)
        self.hatch = Hatch(tags)

    def test_default_settings(self):
        hatch = self.hatch
        self.assertEqual('0', hatch.dxf.layer)
        self.assertEqual(1, hatch.dxf.color)
        self.assertEqual('BYLAYER', hatch.dxf.linetype)
        self.assertEqual(1.0, hatch.dxf.ltscale)
        self.assertEqual(0, hatch.dxf.invisible)
        self.assertEqual((0.0, 0.0, 1.0), hatch.dxf.extrusion)
        self.assertEqual((0.0, 0.0, 0.0), hatch.dxf.elevation)

    def test_default_hatch_settings(self):
        hatch = self.hatch
        self.assertEqual(1, hatch.dxf.solid_fill)
        self.assertEqual(1, hatch.dxf.hatch_style)
        self.assertEqual(1, hatch.dxf.pattern_type)
        self.assertEqual(0.0, hatch.dxf.pattern_angle)
        self.assertEqual(1.0, hatch.dxf.pattern_scale)
        self.assertEqual(0, hatch.dxf.pattern_double)
        self.assertEqual(1, hatch.dxf.n_seed_points)

    def test_get_seed_points(self):
        hatch = self.hatch
        seed_points = hatch.get_seed_points()
        self.assertEqual(1, len(seed_points))
        self.assertEqual((0., 0.), seed_points[0])

    def test_set_seed_points(self):
        hatch = self.hatch
        seed_points = [(1.0, 1.0), (2.0, 2.0)]
        hatch.set_seed_points(seed_points)
        self.assertEqual(2, hatch.dxf.n_seed_points)
        new_seed_points = hatch.get_seed_points()
        self.assertEqual(seed_points, new_seed_points)
        # low level test
        tags = hatch.AcDbHatch
        index = tags.tag_index(98)  # pos of 'Number of seed points'
        self.assertEqual((1.0, 1.0), tags[index+1].value)
        self.assertEqual((2.0, 2.0), tags[index+2].value)

    def test_set_seed_points_low_level(self):
        tags = self.hatch.AcDbHatch
        tags.append(DXFTag(999, 'MARKER'))  # add marker at the end
        self.hatch.set_seed_points([(1.0, 1.0), (2.0, 2.0)])
        index = tags.tag_index(98)  # pos of 'Number of seed points'
        self.assertEqual((10, (1.0, 1.0)), tags[index+1])
        self.assertEqual((10, (2.0, 2.0)), tags[index+2])
        self.assertEqual((999, 'MARKER'), tags[-1])  # marker still there?
Example #4
0
class TestBoundaryPathData(unittest.TestCase):
    def setUp(self):
        tags = ClassifiedTags.from_text(PATH_HATCH)
        self.hatch = Hatch(tags)

    def test_path_count(self):
        with self.hatch.edit_boundary() as editor:
            self.assertEqual(1, len(editor.paths), "invalid boundary path count")

    def test_remove_all_paths(self):
        with self.hatch.edit_boundary() as editor:
            editor.clear()
            self.assertEqual(0, len(editor.paths), "invalid boundary path count")
Example #5
0
class TestPolylinePath(unittest.TestCase):
    def setUp(self):
        tags = ClassifiedTags.from_text(PATH_HATCH)
        self.hatch = Hatch(tags)

    def testPolylinePathAttribs(self):
        with self.hatch.edit_boundary() as editor:
            path = editor.paths[0]  # test first boundary path
            self.assertEqual('PolylinePath', path.PATH_TYPE, "invalid path type")
            self.assertEqual(4, len(path.vertices))
            self.assertFalse(path.has_bulge)
            self.assertTrue(path.is_closed)
            self.assertEqual(7, path.path_type_flags, "unexpected path type flags")

    def testPolylinePathVertices(self):
        with self.hatch.edit_boundary() as editor:
            path = editor.paths[0]  # test first boundary path
            self.assertEqual('PolylinePath', path.PATH_TYPE, "invalid path type")
            self.assertEqual(4, len(path.vertices))
            # vertex format: x, y, bulge_value
            self.assertEqual((10, 10, 0), path.vertices[0], "invalid first vertex")
            self.assertEqual((10, 0, 0), path.vertices[3], "invalid last vertex")
Example #6
0
class TestCreateBoundaryPathData(unittest.TestCase):
    def setUp(self):
        tags = ClassifiedTags.from_text(_HATCH_TPL)
        self.hatch = Hatch(tags)

    def test_add_polyline_path(self):
        with self.hatch.edit_boundary() as editor:
            new_path = editor.add_polyline_path([(0, 0), (0, 1), (1, 1), (1, 0)])
            self.assertEqual('PolylinePath', new_path.PATH_TYPE, "invalid path type")
            self.assertEqual(4, len(new_path.vertices), "invalid vertex count")

        # now check the created entity
        with self.hatch.edit_boundary() as editor:
            self.assertEqual(1, len(editor.paths))
            path = editor.paths[0]
            self.assertEqual('PolylinePath', path.PATH_TYPE, "invalid path type")
            self.assertEqual(4, len(path.vertices), "invalid vertex count")
            # vertex format: x, y, bulge_value
            self.assertEqual((0, 0, 0), path.vertices[0], "invalid first vertex")
            self.assertEqual((1, 0, 0), path.vertices[3], "invalid last vertex")
            self.assertTrue(path.is_closed)

    def test_add_edge_path(self):  # TODO
        pass
Example #7
0
class TestHatchPatternRead(unittest.TestCase):
    def setUp(self):
        tags = ClassifiedTags.from_text(HATCH_PATTERN)
        self.hatch = Hatch(tags)

    def test_edit_pattern(self):
        with self.hatch.edit_pattern() as pattern_editor:
            self.assertEqual(2, len(pattern_editor.lines))

            line0 = pattern_editor.lines[0]
            self.assertEqual(45, line0.angle)
            self.assertEqual((0, 0), line0.base_point)
            self.assertEqual((-0.1767766952966369, 0.1767766952966369), line0.offset)
            self.assertEqual(0, len(line0.dash_length_items))

            line1 = pattern_editor.lines[1]
            self.assertEqual(45, line1.angle)
            self.assertEqual((0.176776695, 0), line1.base_point)
            self.assertEqual((-0.1767766952966369, 0.1767766952966369), line1.offset)
            self.assertEqual(2, len(line1.dash_length_items))
            self.assertEqual([0.125, -0.0625], line1.dash_length_items)
Example #8
0
 def setUp(self):
     tags = ClassifiedTags.from_text(EDGE_HATCH_WITH_SPLINE)
     self.hatch = Hatch(tags)
Example #9
0
class TestEdgeHatch(unittest.TestCase):
    def setUp(self):
        tags = ClassifiedTags.from_text(EDGE_HATCH)
        self.hatch = Hatch(tags)

    def test_path_count(self):
        with self.hatch.edit_boundary() as editor:
            self.assertEqual(1, len(editor.paths),
                             "invalid boundary path count")

    def test_path_type(self):
        with self.hatch.edit_boundary() as editor:
            path = editor.paths[0]
            self.assertEqual('EdgePath', path.PATH_TYPE, "invalid path type")

    def test_path_edges(self):
        with self.hatch.edit_boundary() as editor:
            path = editor.paths[0]
            edge = path.edges[0]
            self.assertEqual('EllipseEdge', edge.EDGE_TYPE,
                             "invalid edge type for 1. edge")
            self.assertEqual((10, 5), edge.center)
            self.assertEqual((3, 0), edge.major_axis_vector)
            self.assertEqual(1. / 3., edge.minor_axis_length)
            self.assertEqual(270, edge.start_angle)
            self.assertEqual(
                450, edge.end_angle
            )  # this value was created by AutoCAD == 90 degree
            self.assertEqual(1, edge.is_counter_clockwise)

            edge = path.edges[1]
            self.assertEqual('LineEdge', edge.EDGE_TYPE,
                             "invalid edge type for 2. edge")
            self.assertEqual((10, 6), edge.start)
            self.assertEqual((10, 10), edge.end)

            edge = path.edges[2]
            self.assertEqual('LineEdge', edge.EDGE_TYPE,
                             "invalid edge type for 3. edge")
            self.assertEqual((10, 10), edge.start)
            self.assertEqual((6, 10), edge.end)

            edge = path.edges[3]
            self.assertEqual('ArcEdge', edge.EDGE_TYPE,
                             "invalid edge type for 4. edge")
            self.assertEqual((5, 10), edge.center)
            self.assertEqual(1, edge.radius)
            self.assertEqual(360, edge.start_angle
                             )  # this value was created by AutoCAD == 0 degree
            self.assertEqual(
                540, edge.end_angle
            )  # this value was created by AutoCAD == 180 degree
            self.assertEqual(0, edge.is_counter_clockwise)

            edge = path.edges[4]
            self.assertEqual('LineEdge', edge.EDGE_TYPE,
                             "invalid edge type for 5. edge")
            self.assertEqual((4, 10), edge.start)
            self.assertEqual((0, 10), edge.end)

            edge = path.edges[5]
            self.assertEqual('LineEdge', edge.EDGE_TYPE,
                             "invalid edge type for 6. edge")
            self.assertEqual((0, 10), edge.start)
            self.assertEqual((0, 0), edge.end)

            edge = path.edges[6]
            self.assertEqual('LineEdge', edge.EDGE_TYPE,
                             "invalid edge type for 7. edge")
            self.assertEqual((0, 0), edge.start)
            self.assertEqual((10, 0), edge.end)

            edge = path.edges[7]
            self.assertEqual('LineEdge', edge.EDGE_TYPE,
                             "invalid edge type for 8. edge")
            self.assertEqual((10, 0), edge.start)
            self.assertEqual((10, 4), edge.end)

    def test_add_edge_path(self):
        with self.hatch.edit_boundary() as editor:
            path = editor.add_edge_path()
            self.assertEqual('EdgePath', path.PATH_TYPE,
                             "created wrong path type")
            path.add_line((0, 0), (10, 0))
            path.add_arc((10, 5),
                         radius=5,
                         start_angle=270,
                         end_angle=450,
                         is_counter_clockwise=1)
            path.add_ellipse((5, 10),
                             major_axis_vector=(5, 0),
                             minor_axis_length=0.2,
                             start_angle=0,
                             end_angle=180)
            path.add_line((10, 0), (0, 0))
        # exit with statement and create DXF tags

        with self.hatch.edit_boundary() as editor:
            path = editor.paths[-1]
            edge = path.edges[0]
            self.assertEqual('LineEdge', edge.EDGE_TYPE,
                             "invalid edge type for 1. edge")
            self.assertEqual((0, 0), edge.start)
            self.assertEqual((10, 0), edge.end)

            edge = path.edges[1]
            self.assertEqual('ArcEdge', edge.EDGE_TYPE,
                             "invalid edge type for 2. edge")
            self.assertEqual((10, 5), edge.center)
            self.assertEqual(5, edge.radius)
            self.assertEqual(270, edge.start_angle)
            self.assertEqual(450, edge.end_angle)
            self.assertTrue(edge.is_counter_clockwise)

            edge = path.edges[2]
            self.assertEqual('EllipseEdge', edge.EDGE_TYPE,
                             "invalid edge type for 3. edge")
            self.assertEqual((5, 10), edge.center)
            self.assertEqual((5, 0), edge.major_axis_vector)
            self.assertEqual(.2, edge.minor_axis_length)
            self.assertEqual(0, edge.start_angle)
            self.assertEqual(180, edge.end_angle)
            self.assertFalse(edge.is_counter_clockwise)

            edge = path.edges[3]
            self.assertEqual('LineEdge', edge.EDGE_TYPE,
                             "invalid edge type for 4. edge")
            self.assertEqual((10, 0), edge.start)
            self.assertEqual((0, 0), edge.end)
Example #10
0
 def setUp(self):
     tags = ClassifiedTags.from_text(PATH_HATCH)
     self.hatch = Hatch(tags)
Example #11
0
def hatch_pattern():
    return Hatch(ExtendedTags.from_text(HATCH_PATTERN))
Example #12
0
def spline_edge_hatch():
    return Hatch(ExtendedTags.from_text(EDGE_HATCH_WITH_SPLINE))
Example #13
0
def edge_hatch():
    return Hatch(ExtendedTags.from_text(EDGE_HATCH))
Example #14
0
def path_hatch():
    return Hatch(ExtendedTags.from_text(PATH_HATCH))
Example #15
0
def hatch():
    return Hatch(ExtendedTags.from_text(_HATCH_TPL))
Example #16
0
class TestEdgeHatch(unittest.TestCase):
    def setUp(self):
        tags = ClassifiedTags.from_text(EDGE_HATCH)
        self.hatch = Hatch(tags)

    def test_path_count(self):
        with self.hatch.edit_boundary() as editor:
            self.assertEqual(1, len(editor.paths), "invalid boundary path count")

    def test_path_type(self):
        with self.hatch.edit_boundary() as editor:
            path = editor.paths[0]
            self.assertEqual('EdgePath', path.PATH_TYPE, "invalid path type")

    def test_path_edges(self):
        with self.hatch.edit_boundary() as editor:
            path = editor.paths[0]
            edge = path.edges[0]
            self.assertEqual('EllipseEdge', edge.EDGE_TYPE, "invalid edge type for 1. edge")
            self.assertEqual((10, 5), edge.center)
            self.assertEqual((3, 0), edge.major_axis_vector)
            self.assertEqual(1./3., edge.minor_axis_length)
            self.assertEqual(270, edge.start_angle)
            self.assertEqual(450, edge.end_angle)  # this value was created by AutoCAD == 90 degree
            self.assertEqual(1, edge.is_counter_clockwise)

            edge = path.edges[1]
            self.assertEqual('LineEdge', edge.EDGE_TYPE, "invalid edge type for 2. edge")
            self.assertEqual((10, 6), edge.start)
            self.assertEqual((10, 10), edge.end)

            edge = path.edges[2]
            self.assertEqual('LineEdge', edge.EDGE_TYPE, "invalid edge type for 3. edge")
            self.assertEqual((10, 10), edge.start)
            self.assertEqual((6, 10), edge.end)

            edge = path.edges[3]
            self.assertEqual('ArcEdge', edge.EDGE_TYPE, "invalid edge type for 4. edge")
            self.assertEqual((5, 10), edge.center)
            self.assertEqual(1, edge.radius)
            self.assertEqual(360, edge.start_angle)  # this value was created by AutoCAD == 0 degree
            self.assertEqual(540, edge.end_angle)  # this value was created by AutoCAD == 180 degree
            self.assertEqual(0, edge.is_counter_clockwise)

            edge = path.edges[4]
            self.assertEqual('LineEdge', edge.EDGE_TYPE, "invalid edge type for 5. edge")
            self.assertEqual((4, 10), edge.start)
            self.assertEqual((0, 10), edge.end)

            edge = path.edges[5]
            self.assertEqual('LineEdge', edge.EDGE_TYPE, "invalid edge type for 6. edge")
            self.assertEqual((0, 10), edge.start)
            self.assertEqual((0, 0), edge.end)

            edge = path.edges[6]
            self.assertEqual('LineEdge', edge.EDGE_TYPE, "invalid edge type for 7. edge")
            self.assertEqual((0, 0), edge.start)
            self.assertEqual((10, 0), edge.end)

            edge = path.edges[7]
            self.assertEqual('LineEdge', edge.EDGE_TYPE, "invalid edge type for 8. edge")
            self.assertEqual((10, 0), edge.start)
            self.assertEqual((10, 4), edge.end)

    def test_add_edge_path(self):
        with self.hatch.edit_boundary() as editor:
            path = editor.add_edge_path()
            self.assertEqual('EdgePath', path.PATH_TYPE, "created wrong path type")
            path.add_line((0, 0), (10, 0))
            path.add_arc((10, 5), radius=5, start_angle=270, end_angle=450, is_counter_clockwise=1)
            path.add_ellipse((5, 10), major_axis_vector=(5, 0), minor_axis_length=0.2, start_angle=0, end_angle=180)
            path.add_line((10, 0), (0, 0))
        # exit with statement and create DXF tags

        with self.hatch.edit_boundary() as editor:
            path = editor.paths[-1]
            edge = path.edges[0]
            self.assertEqual('LineEdge', edge.EDGE_TYPE, "invalid edge type for 1. edge")
            self.assertEqual((0, 0), edge.start)
            self.assertEqual((10, 0), edge.end)

            edge = path.edges[1]
            self.assertEqual('ArcEdge', edge.EDGE_TYPE, "invalid edge type for 2. edge")
            self.assertEqual((10, 5), edge.center)
            self.assertEqual(5, edge.radius)
            self.assertEqual(270, edge.start_angle)
            self.assertEqual(450, edge.end_angle)
            self.assertTrue(edge.is_counter_clockwise)

            edge = path.edges[2]
            self.assertEqual('EllipseEdge', edge.EDGE_TYPE, "invalid edge type for 3. edge")
            self.assertEqual((5, 10), edge.center)
            self.assertEqual((5, 0), edge.major_axis_vector)
            self.assertEqual(.2, edge.minor_axis_length)
            self.assertEqual(0, edge.start_angle)
            self.assertEqual(180, edge.end_angle)
            self.assertFalse(edge.is_counter_clockwise)

            edge = path.edges[3]
            self.assertEqual('LineEdge', edge.EDGE_TYPE, "invalid edge type for 4. edge")
            self.assertEqual((10, 0), edge.start)
            self.assertEqual((0, 0), edge.end)
Example #17
0
 def setUp(self):
     tags = ClassifiedTags.from_text(HATCH_PATTERN)
     self.hatch = Hatch(tags)
Example #18
0
 def setUp(self):
     tags = ClassifiedTags.from_text(PATH_HATCH)
     self.hatch = Hatch(tags)
Example #19
0
 def setUp(self):
     tags = ClassifiedTags.from_text(EDGE_HATCH_WITH_SPLINE)
     self.hatch = Hatch(tags)
Example #20
0
 def setUp(self):
     tags = ClassifiedTags.from_text(HATCH_PATTERN)
     self.hatch = Hatch(tags)
Example #21
0
 def setUp(self):
     tags = ClassifiedTags.from_text(_HATCH_TPL)
     self.hatch = Hatch(tags)
Example #22
0
 def setUp(self):
     tags = ClassifiedTags.from_text(_HATCH_TPL)
     self.hatch = Hatch(tags)