[dxf] improve repetition handling
This commit is contained in:
parent
042941c838
commit
e5a6aab940
1 changed files with 19 additions and 15 deletions
|
|
@ -55,8 +55,7 @@ def write(
|
|||
tuple: (1, 2) -> '1.2'
|
||||
str: '1.2' -> '1.2' (no change)
|
||||
|
||||
DXF does not support shape repetition (only block repetition). Please call
|
||||
library.wrap_repeated_shapes() before writing to file.
|
||||
Shape repetitions are expanded into individual DXF entities.
|
||||
|
||||
Other functions you may want to call:
|
||||
- `masque.file.oasis.check_valid_names(library.keys())` to check for invalid names
|
||||
|
|
@ -344,16 +343,15 @@ def _shapes_to_elements(
|
|||
for layer, sseq in shapes.items():
|
||||
attribs = dict(layer=_mlayer2dxf(layer))
|
||||
for shape in sseq:
|
||||
displacements = [numpy.zeros(2)]
|
||||
if shape.repetition is not None:
|
||||
raise PatternError(
|
||||
'Shape repetitions are not supported by DXF.'
|
||||
' Please call library.wrap_repeated_shapes() before writing to file.'
|
||||
)
|
||||
displacements = shape.repetition.displacements
|
||||
|
||||
for polygon in shape.to_polygons():
|
||||
xy_open = polygon.vertices
|
||||
xy_closed = numpy.vstack((xy_open, xy_open[0, :]))
|
||||
block.add_lwpolyline(xy_closed, dxfattribs=attribs)
|
||||
for dd in displacements:
|
||||
for polygon in shape.to_polygons():
|
||||
xy_open = polygon.vertices + dd
|
||||
xy_closed = numpy.vstack((xy_open, xy_open[0, :]))
|
||||
block.add_lwpolyline(xy_closed, dxfattribs=attribs)
|
||||
|
||||
|
||||
def _labels_to_texts(
|
||||
|
|
@ -363,11 +361,17 @@ def _labels_to_texts(
|
|||
for layer, lseq in labels.items():
|
||||
attribs = dict(layer=_mlayer2dxf(layer))
|
||||
for label in lseq:
|
||||
xy = label.offset
|
||||
block.add_text(
|
||||
label.string,
|
||||
dxfattribs=attribs
|
||||
).set_placement(xy, align=TextEntityAlignment.BOTTOM_LEFT)
|
||||
if label.repetition is None:
|
||||
block.add_text(
|
||||
label.string,
|
||||
dxfattribs=attribs
|
||||
).set_placement(label.offset, align=TextEntityAlignment.BOTTOM_LEFT)
|
||||
else:
|
||||
for dd in label.repetition.displacements:
|
||||
block.add_text(
|
||||
label.string,
|
||||
dxfattribs=attribs
|
||||
).set_placement(label.offset + dd, align=TextEntityAlignment.BOTTOM_LEFT)
|
||||
|
||||
|
||||
def _mlayer2dxf(layer: layer_t) -> str:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue