BLOCK

Type: Basic DXF R12 entity.

A block is a collection of objects grouped together to form a single object. You can insert this collection more than once in the same drawing, and when you do, all instances of the block remain identical. You can add fill-in-the-blank text fields, called attributes, to blocks.

A block definition lives in an invisible area of your drawing file called the block table. The block table is like a book of graphical recipes for making different kinds of blocks. Each block definition is like a recipe for making one kind of block. To insert a block into a drawing you have to create a block reference by INSERT.

You have to add the block definition to the blocks section of the actual drawing:

drawing.blocks.add(blockdef)

The base point is the point on the block by which you insert it later.

Find a block definition:

drawing.blocks.find(blockname)

Add entities to a block definition:

block.add(entity)
DXFEngine.block(name, basepoint=(0., 0.), **kwargs)
Parameters:
  • name (str) – blockname
  • basepoint – block base point (xy- or xyz-tuple), z-axis is 0. by default
  • flags (int) – block type flags
  • xref (str) – xref pathname

where entity can be every drawing entity like circle, line, polyline, attribute, text, …

Flags

Flags Description
BLK_ANONYMOUS This is an anonymous block generated by hatching, associative dimensioning, other internal operations, or an application
BLK_NON_CONSTANT_ATTRIBUTES This block has non-constant attribute definitions (this bit is not set if the block has any attribute definitions that are constant, or has no attribute definitions at all)
BLK_XREF This block is an external reference (xref)
BLK_XREF_OVERLAY This block is an xref overlay
BLK_EXTERNAL This block is externally dependent
BLK_RESOLVED This is a resolved external reference, or dependent of an external reference (ignored on input)
BLK_REFERENCED This definition is a referenced external reference (ignored on input)

Common Keyword Arguments for all Basic DXF R12 Entities

keyword description
layer Layer name as string
linetype Linetype name as string, if not defined = BYLAYER
color as integer in range [1..255], 0 = BYBLOCK, 256 = BYLAYER
thickness Thickness as float
paper_space 0 = entity is in model_space, 1 = entity is in paper_space
extrusion_direction 3D Point as tuple(x, y, z) if extrusion direction is not parallel to the World Z axis

usage:

from dxfwrite import DXFEngine as dxf

drawing = dxf.drawing('test.dxf')

# create a block-definition
block = dxf.block(name='BLOCK1')

# add block-definition to drawing
drawing.blocks.add(block)

# create a block-reference
blockref = dxf.insert(blockname='BLOCK1', insert=(10, 10))

# add block-reference to drawing
drawing.add(blockref)

drawing.save()