按 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是文本插入点(如果DXF7273都为零则使用)
  • DXF 组 11 是文本对齐点(如果 DXF 7273 非零则使用)
  • 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