Пример #1
0
 def test_to_lwpolylines(self, path):
     polylines = list(to_lwpolylines(path))
     assert len(polylines) == 1
     p0 = polylines[0]
     assert p0.dxftype() == "LWPOLYLINE"
     assert p0[0] == (0, 0, 0, 0, 0)  # x, y, swidth, ewidth, bulge
     assert p0[-1] == (0, 0, 0, 0, 0)
Пример #2
0
def virtual_entities(entity: AnyText, kind: int = Kind.HATCHES) -> EntityQuery:
    """Convert the text content of DXF entities TEXT and ATTRIB into virtual
    SPLINE and 3D POLYLINE entities or approximated LWPOLYLINE entities
    as outlines, or as HATCH entities as fillings.

    Returns the virtual DXF entities as an :class:`~ezdxf.query.EntityQuery`
    object.

    Args:
        entity: TEXT or ATTRIB entity
        kind: kind of entities to create as bit flags, see enum :class:`Kind`

    """
    check_entity_type(entity)
    extrusion = entity.dxf.extrusion
    attribs = entity.graphic_properties()
    entities: List[DXFGraphic] = []

    if kind & Kind.HATCHES:
        entities.extend(make_hatches_from_entity(entity))
    if kind & (Kind.SPLINES + Kind.LWPOLYLINES):
        paths = make_paths_from_entity(entity)
        if kind & Kind.SPLINES:
            entities.extend(
                path.to_splines_and_polylines(paths, dxfattribs=attribs))
        if kind & Kind.LWPOLYLINES:
            entities.extend(
                path.to_lwpolylines(paths,
                                    extrusion=extrusion,
                                    dxfattribs=attribs))

    return EntityQuery(entities)
Пример #3
0
 def test_multi_path_to_lwpolylines(self):
     path = Path()
     path.line_to((1, 0, 0))
     path.move_to((2, 0, 0))
     path.line_to((3, 0, 0))
     polylines = list(to_lwpolylines(path))
     assert len(polylines) == 2
     assert len(polylines[0]) == 2
     assert len(polylines[1]) == 2
Пример #4
0
 def test_to_lwpolylines_with_ocs(self, path1):
     m = Matrix44.x_rotate(math.pi / 4)
     path = path1.transform(m)
     extrusion = m.transform((0, 0, 1))
     polylines = list(to_lwpolylines(path, extrusion=extrusion))
     p0 = polylines[0]
     assert p0.dxf.elevation == pytest.approx(1)
     assert p0.dxf.extrusion.isclose(extrusion)
     assert p0[0] == (0, 0, 0, 0, 0)
     assert p0[-1] == (4, 0, 0, 0, 0)
Пример #5
0
 def test_to_lwpolylines_with_ocs(self, path1):
     m = Matrix44.x_rotate(math.pi / 4)
     path = path1.transform(m)
     extrusion = m.transform((0, 0, 1))
     polylines = list(to_lwpolylines(path, extrusion=extrusion))
     p0 = polylines[0]
     assert p0.dxf.elevation == pytest.approx(1)
     assert p0.dxf.extrusion.isclose(extrusion)
     assert (all(
         math.isclose(a, b, abs_tol=1e-12)
         for a, b in zip(p0[0], (0, 0, 0, 0, 0))) is True)
     assert (all(
         math.isclose(a, b, abs_tol=1e-12)
         for a, b in zip(p0[-1], (4, 0, 0, 0, 0))) is True)
Пример #6
0
 def test_to_lwpolylines_with_wcs_elevation(self, path1):
     polylines = list(to_lwpolylines(path1))
     p0 = polylines[0]
     assert p0.dxf.elevation == 1
Пример #7
0
 def test_empty_path_to_lwpolyline(self):
     assert list(to_lwpolylines([Path()])) == []
Пример #8
0
 def test_empty_to_lwpolyline(self):
     assert list(to_lwpolylines([])) == []