File: complex_line_type_example.py

package info (click to toggle)
ezdxf 1.4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 104,528 kB
  • sloc: python: 182,341; makefile: 116; lisp: 20; ansic: 4
file content (54 lines) | stat: -rw-r--r-- 2,051 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# Copyright (c) 2018-2023 Manfred Moitzi
# License: MIT License
import pathlib
import ezdxf
from ezdxf import zoom
from ezdxf.fonts import shapefile

CWD = pathlib.Path("~/Desktop/Outbox").expanduser()
if not CWD.exists():
    CWD = pathlib.Path(".")


# ------------------------------------------------------------------------------
# This example shows how to create complex linetypes.
#
# docs: https://ezdxf.mozman.at/docs/concepts/linetypes.html
# ------------------------------------------------------------------------------

doc = ezdxf.new("R2018")  # DXF R13 or later is required

# This linetype contains the text "GAS" with text-style "STANDARD"
doc.linetypes.add(
    "GASLEITUNG2",
    # linetype definition in acadlt.lin:
    pattern='A,.5,-.2,["GAS",STANDARD,S=.1,U=0.0,X=-0.1,Y=-.05],-.25',
    description="Gasleitung2 ----GAS----GAS----GAS----GAS----GAS----GAS--",
    length=1,  # required for complex linetypes
)

# This linetype contains a box shape from the ltypeshp.shx file.
#
# Shapes in linetypes require the referenced shape-file (ltypeshp.shx in this
# case) to be located in the search path of the CAD application or in the same
# folder as the DXF file.
doc.linetypes.add(
    "GRENZE2",
    # Get the linetype definition from acadlt.lin:
    # "A,.25,-.1,[BOX,ltypeshp.shx,x=-.1,s=.1],-.1,1" and replace "BOX" by
    # shape-number 132.
    # Find the shape-number by function find_shape_number(), the SHX file "ltypeshp.shx"
    # will be searched in the current directory and the directories stored in
    # `ezdxf.options.support_dirs`.
    pattern="A,.25,-.1,[132,ltypeshp.shx,x=-.1,s=.1],-.1,1",
    description="Grenze eckig -[]-----[]-----[]-----[]-----[]----",
    length=1.45,  # required for complex line types
)
print(shapefile.find_shape_number("ltypeshp.shx", b"BOX"))

msp = doc.modelspace()
msp.add_line((0, 0), (100, 0), dxfattribs={"linetype": "GASLEITUNG2"})
msp.add_line((0, 50), (100, 50), dxfattribs={"linetype": "GRENZE2"})

zoom.extents(msp, 1.1)
doc.saveas(CWD / "complex_linetype_example.dxf")