[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'
|
tuple: (1, 2) -> '1.2'
|
||||||
str: '1.2' -> '1.2' (no change)
|
str: '1.2' -> '1.2' (no change)
|
||||||
|
|
||||||
DXF does not support shape repetition (only block repetition). Please call
|
Shape repetitions are expanded into individual DXF entities.
|
||||||
library.wrap_repeated_shapes() before writing to file.
|
|
||||||
|
|
||||||
Other functions you may want to call:
|
Other functions you may want to call:
|
||||||
- `masque.file.oasis.check_valid_names(library.keys())` to check for invalid names
|
- `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():
|
for layer, sseq in shapes.items():
|
||||||
attribs = dict(layer=_mlayer2dxf(layer))
|
attribs = dict(layer=_mlayer2dxf(layer))
|
||||||
for shape in sseq:
|
for shape in sseq:
|
||||||
|
displacements = [numpy.zeros(2)]
|
||||||
if shape.repetition is not None:
|
if shape.repetition is not None:
|
||||||
raise PatternError(
|
displacements = shape.repetition.displacements
|
||||||
'Shape repetitions are not supported by DXF.'
|
|
||||||
' Please call library.wrap_repeated_shapes() before writing to file.'
|
|
||||||
)
|
|
||||||
|
|
||||||
for polygon in shape.to_polygons():
|
for dd in displacements:
|
||||||
xy_open = polygon.vertices
|
for polygon in shape.to_polygons():
|
||||||
xy_closed = numpy.vstack((xy_open, xy_open[0, :]))
|
xy_open = polygon.vertices + dd
|
||||||
block.add_lwpolyline(xy_closed, dxfattribs=attribs)
|
xy_closed = numpy.vstack((xy_open, xy_open[0, :]))
|
||||||
|
block.add_lwpolyline(xy_closed, dxfattribs=attribs)
|
||||||
|
|
||||||
|
|
||||||
def _labels_to_texts(
|
def _labels_to_texts(
|
||||||
|
|
@ -363,11 +361,17 @@ def _labels_to_texts(
|
||||||
for layer, lseq in labels.items():
|
for layer, lseq in labels.items():
|
||||||
attribs = dict(layer=_mlayer2dxf(layer))
|
attribs = dict(layer=_mlayer2dxf(layer))
|
||||||
for label in lseq:
|
for label in lseq:
|
||||||
xy = label.offset
|
if label.repetition is None:
|
||||||
block.add_text(
|
block.add_text(
|
||||||
label.string,
|
label.string,
|
||||||
dxfattribs=attribs
|
dxfattribs=attribs
|
||||||
).set_placement(xy, align=TextEntityAlignment.BOTTOM_LEFT)
|
).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:
|
def _mlayer2dxf(layer: layer_t) -> str:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue