按 dxf 组对齐文本
text aligning by dxf groups
我有一堆文本行,我 drawing\showing 使用 entmake 程序每行一个。为此,我提供了一个插入点,我希望文本从左对齐,问题是线条长度不同,插入点似乎是文本的中心。
我正在考虑使用文本的长度和文本的 size\height 来计算我需要制作的垫,以便文本对齐。如果我在正确的道路上,我无法找到如何进行计算。
如果我不是,请帮忙。
这是我制作文本实体的方法:
(defun text(point text)
(list ( cons 0 "TEXT")
(cons 11 point)
(cons 10 point)
(cons 40 0.4)
(cons 1 text)
(cons 41 1.0)
(cons 72 4)
(cons 73 0)
) )
谢谢
您可以使用以下 entmakex
表达式创建左对齐的单行 TEXT
实体:
(defun mytext ( ins hgt str )
(entmakex
(list
'(000 . "TEXT")
(cons 010 ins)
(cons 040 hgt)
(cons 001 str)
)
)
)
例如可以这样称呼:
(mytext '(1.0 1.0 0.0) 0.4 "This is a test")
这里:
- DXF组
0
是实体类型
- DXF组
10
为文字插入点
- DXF组
40
为文字高度
- DXF组
1
为文字内容
这四个 DXF 组是创建单线 TEXT
实体所需的最少组。
对于左对齐单行文字,只需要DXF组10
指定位置即可;对于 所有其他理由 ,DXF 组 11
表示文本对齐点,如果提供 DXF 组 10
(插入点)的值将被忽略(尽管,该组必须在场)。
例如,对于居中对齐的单行文本,您可以使用以下内容:
(defun mytext ( ins hgt str )
(entmakex
(list
'(000 . "TEXT")
(cons 010 ins)
(cons 011 ins)
(cons 040 hgt)
(cons 001 str)
'(072 . 1)
'(073 . 2)
)
)
)
这里:
- DXF组
0
是实体类型
- DXF组
10
是文本插入点(如果DXF72
和73
都为零则使用)
- DXF 组
11
是文本对齐点(如果 DXF 72
或 73
非零则使用)
- DXF组
40
为文字高度
- DXF组
1
为文字内容
- DXF组
72
确定水平对齐方式
- DXF 组
73
确定垂直对齐方式
如果要创建符合活动 UCS 属性的单行文本(例如,在 UCS 构建平面中创建,旋转以与 UCS x 轴对齐),可以使用以下方法:
(defun mytext ( ins hgt str )
(
(lambda ( ocs )
(entmakex
(list
'(000 . "TEXT")
(cons 010 (trans ins 1 ocs))
(cons 050 (angle '(0.0 0.0) (trans (getvar 'ucsxdir) 0 ocs t)))
(cons 040 hgt)
(cons 001 str)
(cons 210 ocs)
)
)
)
(trans '(0.0 0.0 1.0) 1 0 t)
)
)
这假定插入点将相对于活动 UCS 提供,例如:
(defun c:test ( )
(mytext
(progn
(initget 1)
(getpoint "\nSpecify insertion point: ")
)
(progn
(initget 7)
(getdist "\nSpecify text height: ")
)
(getstring t "\nSpecify text content: ")
)
)
可以找到适用于 TEXT
实体的所有 DXF 组的参考 here。
我有一堆文本行,我 drawing\showing 使用 entmake 程序每行一个。为此,我提供了一个插入点,我希望文本从左对齐,问题是线条长度不同,插入点似乎是文本的中心。
我正在考虑使用文本的长度和文本的 size\height 来计算我需要制作的垫,以便文本对齐。如果我在正确的道路上,我无法找到如何进行计算。
如果我不是,请帮忙。 这是我制作文本实体的方法:
(defun text(point text)
(list ( cons 0 "TEXT")
(cons 11 point)
(cons 10 point)
(cons 40 0.4)
(cons 1 text)
(cons 41 1.0)
(cons 72 4)
(cons 73 0)
) )
谢谢
您可以使用以下 entmakex
表达式创建左对齐的单行 TEXT
实体:
(defun mytext ( ins hgt str )
(entmakex
(list
'(000 . "TEXT")
(cons 010 ins)
(cons 040 hgt)
(cons 001 str)
)
)
)
例如可以这样称呼:
(mytext '(1.0 1.0 0.0) 0.4 "This is a test")
这里:
- DXF组
0
是实体类型 - DXF组
10
为文字插入点 - DXF组
40
为文字高度 - DXF组
1
为文字内容
这四个 DXF 组是创建单线 TEXT
实体所需的最少组。
对于左对齐单行文字,只需要DXF组10
指定位置即可;对于 所有其他理由 ,DXF 组 11
表示文本对齐点,如果提供 DXF 组 10
(插入点)的值将被忽略(尽管,该组必须在场)。
例如,对于居中对齐的单行文本,您可以使用以下内容:
(defun mytext ( ins hgt str )
(entmakex
(list
'(000 . "TEXT")
(cons 010 ins)
(cons 011 ins)
(cons 040 hgt)
(cons 001 str)
'(072 . 1)
'(073 . 2)
)
)
)
这里:
- DXF组
0
是实体类型 - DXF组
10
是文本插入点(如果DXF72
和73
都为零则使用) - DXF 组
11
是文本对齐点(如果 DXF72
或73
非零则使用) - DXF组
40
为文字高度 - DXF组
1
为文字内容 - DXF组
72
确定水平对齐方式 - DXF 组
73
确定垂直对齐方式
如果要创建符合活动 UCS 属性的单行文本(例如,在 UCS 构建平面中创建,旋转以与 UCS x 轴对齐),可以使用以下方法:
(defun mytext ( ins hgt str )
(
(lambda ( ocs )
(entmakex
(list
'(000 . "TEXT")
(cons 010 (trans ins 1 ocs))
(cons 050 (angle '(0.0 0.0) (trans (getvar 'ucsxdir) 0 ocs t)))
(cons 040 hgt)
(cons 001 str)
(cons 210 ocs)
)
)
)
(trans '(0.0 0.0 1.0) 1 0 t)
)
)
这假定插入点将相对于活动 UCS 提供,例如:
(defun c:test ( )
(mytext
(progn
(initget 1)
(getpoint "\nSpecify insertion point: ")
)
(progn
(initget 7)
(getdist "\nSpecify text height: ")
)
(getstring t "\nSpecify text content: ")
)
)
可以找到适用于 TEXT
实体的所有 DXF 组的参考 here。