import ezdxf import random # needed for random placing points from ezdxf.enums import TextEntityAlignment def get_random_point(): """Returns random x, y coordinates.""" x = random.randint(-100, 100) y = random.randint(-100, 100) return x, y # # Create a block with the name 'FLAG' def create_block(doc): flag = doc.blocks.new(name='FLAG') # Add DXF entities to the block 'FLAG'. # The default base point (= insertion point) of the block is (0, 0). flag.add_lwpolyline([(0, 0), (0, 5), (4, 3), (0, 3)]) # the flag symbol as 2D polyline flag.add_circle((0, 0), .4, dxfattribs={'color': 2}) # mark the base point with a circle return flag def create_points(msp): # Get 50 random placing points. placing_points = [get_random_point() for _ in range(50)] for point in placing_points: # Every flag has a different scaling and a rotation of -15 deg. random_scale = 0.5 + random.random() * 2.0 # Add a block reference to the block named 'FLAG' at the coordinates 'point'. msp.add_blockref('FLAG', point, dxfattribs={ 'xscale': random_scale, 'yscale': random_scale, 'rotation': -15 }) def add_text(msp): # Use method set_placement() to define the TEXT alignment, because the # relations between the DXF attributes 'halign', 'valign', 'insert' and # 'align_point' are tricky. msp.add_text("A Simple Text").set_placement( (2, 3), align=TextEntityAlignment.MIDDLE_RIGHT ) # Using a predefined text style: msp.add_text( "Text Style Example: Liberation Serif", height=0.35, dxfattribs={"style": "LiberationSerif"} ).set_placement((2, 6), align=TextEntityAlignment.LEFT) def add_polyline(msp): # add a LINE entity msp.add_line((0, 0), (50, 0)) points = [(0, 0), (3, 0), (6, 3), (6, 6)] msp.add_lwpolyline(points) # Create a new drawing in the DXF format of AutoCAD 2010 doc = ezdxf.new('R2018', setup=True) # add new entities to the modelspace msp = doc.modelspace() # # Beispiel für Text und Polyline # add_text(msp) # add_polyline(msp) # Beispiel für Block create_block(doc) create_points(msp) doc.saveas("lwpolyline.dxf")