def draw_elliptic_arc_entity(self, entity: DXFGraphic, properties: Properties) -> None: dxftype = entity.dxftype() if NULLVEC.isclose(entity.dxf.extrusion): self.skip_entity( f'Invalid extrusion (0, 0, 0) in entity: {str(entity)}') return if dxftype == 'CIRCLE': if entity.dxf.radius <= 0: self.skip_entity(f'Invalid radius in entity: {str(entity)}') return path = Path.from_circle(cast('Circle', entity)) elif dxftype == 'ARC': if entity.dxf.radius <= 0: self.skip_entity(f'Invalid radius in entity: {str(entity)}') return path = Path.from_arc(cast('Arc', entity)) elif dxftype == 'ELLIPSE': if NULLVEC.isclose(entity.dxf.major_axis): self.skip_entity( f'Invalid major axis (0, 0, 0) in entity: {str(entity)}') return path = Path.from_ellipse(cast('Ellipse', entity)) else: # API usage error raise TypeError(dxftype) self.out.draw_path(path, properties)
def test_end_points(ellipse): p = Path.from_ellipse(ellipse) assert ellipse.start_point.isclose(p.start) assert ellipse.end_point.isclose(p.end) # end point locations measured in BricsCAD: assert ellipse.start_point.isclose((2191.3054, -1300.8375), abs_tol=1e-4) assert ellipse.end_point.isclose((2609.7870, -1520.6677), abs_tol=1e-4)
def draw_elliptic_arc_entity(self, entity: DXFGraphic, properties: Properties) -> None: dxftype = entity.dxftype() if dxftype == 'CIRCLE': path = Path.from_circle(cast('Circle', entity)) elif dxftype == 'ARC': path = Path.from_arc(cast('Arc', entity)) elif dxftype == 'ELLIPSE': path = Path.from_ellipse(cast('Ellipse', entity)) else: # API usage error raise TypeError(dxftype) self.out.draw_path(path, properties)
# Copyright (c) 2020, Manfred Moitzi # License: MIT License import ezdxf from ezdxf.render import Path doc = ezdxf.new() msp = doc.modelspace() ellipse = msp.add_ellipse( center=(1999.488177113287, -1598.02265357955, 0.0), major_axis=(629.968069297, 0.0, 0.0), ratio=0.495263197, start_param=-1.261396328799999, end_param=-0.2505454928, dxfattribs={ 'layer': "0", 'linetype': "Continuous", 'color': 3, 'extrusion': (0.0, 0.0, -1.0), }, ) p = Path.from_ellipse(ellipse) msp.add_lwpolyline(p.approximate(), dxfattribs={ 'layer': 'PathRendering', 'color': 1, }) doc.set_modelspace_vport(500, (2400, -1400)) doc.saveas('path_rendering.dxf')