20060510412 发表于 2022-11-14 14:04:18

请教如何生成文字居中的属性块

目前有一个生成属性块的子函数,可以正常运行,但是只能生成左对齐的文字。
现在想增加一个文字对齐的参数,从而可以生成各种对齐方式。
目前对于文字对齐一头雾水,请高手帮忙指点一二。

;;说明:制作并插入属性块
;;参数:name_block:块对象名称
;;参数:list_tagstring:属性块标签文本,可以支持多个,如(list "tagstring1" "tagstring2")
;;参数:list_textstring:属性块标签值,可以支持多个,与tagstring相对应,如(list "textstring2" "textstring2"),默认显示的是最后一个string。
;;参数:list_coordinate:块引用坐标,例如(list 0 0 0)
;;参数:textHeight:字体高度,如2.5
;;参数:TextStyle:字体样式,如"FSDB"
;;参数:TextWidthScale:字体的宽度因子,如0.75
;;返回:生成的属性块引用图元名
;;示例:(block_att_make "name" (list "name" "name1") (list "构造图" "构造图2") (list 0 0 0) 2.5 "FSDB" 0.75)
(defun block_att_make(name_block list_tagstring list_textstring list_coordinate textHeight TextStyle TextWidthScale )
(entmake (list
             '(0 . "block")         
             (cons 2 name_block)       ;图块名
             '(70 . 2)               ;块具有非固定属性定义
             '(10 0.0 0.0 0.0))      ;基点
);block定义
(entmake '((0 . "ENDBLK")));结束标志

(entmake (list '(0 . "INSERT")            
             '(66 . 1)
             (cons 2 name_block)
             (append (list 10) list_coordinate);插入点
             '(41 . 500.0)
             '(42 . 500.0)
             '(43 . 500.0)
         )
)
(mapcar
    '(lambda(a b)
       (entmake
         (list
         '(0 . "ATTRIB")
         '(100 . "AcDbEntity")
         '(100 . "AcDbText")
         (append (list 10) list_coordinate)    ;插入点
         ;'(10 0.0 0.0 0.0)
         (cons 40 textHeight)      ;字体高度
         (cons 7 TextStyle)      ;字体样式
         (cons 41 TextWidthScale)      ;字体宽度因子
         (cons 1 b)    ;tagValue
         '(100 . "AcDbAttribute")
         (cons 2 a)    ;tagstring
         '(70 . 0);(70 . 1)属性字不可见(70 . 0)属性字可见

         )
       )
   )
    list_tagstring
    list_textstring
)

(entmake '((0 . "SEQEND")))
(entlast)
)

xtjd 发表于 2022-11-14 14:04:19

20060510412 发表于 2022-11-14 15:56
恕我愚钝,我根本就没用到组码73啊。
如何更改为74呢


xtjd 发表于 2022-11-14 15:15:46


20060510412 发表于 2022-11-14 15:18:15

xtjd 发表于 2022-11-14 15:15


这个资料我也看到了,但是摸索半天,发现生成的属性块一直都是左对齐……

xtjd 发表于 2022-11-14 15:52:50

20060510412 发表于 2022-11-14 15:18
这个资料我也看到了,但是摸索半天,发现生成的属性块一直都是左对齐……

在ATTRIB,组码73需更改为74

20060510412 发表于 2022-11-14 15:56:41

xtjd 发表于 2022-11-14 15:52
在ATTRIB,组码73需更改为74

恕我愚钝,我根本就没用到组码73啊。
如何更改为74呢

20060510412 发表于 2022-11-14 16:19:03

xtjd 发表于 2022-11-14 16:04


多谢指点,问题已经解决!{:1_1:}

关于文本的对齐方式,始终有点摸不着头脑,先这样用着,后期再慢慢琢磨吧。

其实vlisp关于这个对齐方式就很简单,直接一个vla-put-align就搞定了。

不明白alisp为什么要搞得这么繁琐。

菜卷鱼 发表于 2022-11-14 17:59:33

跟你这个类似的帖子找不到了,再回复一下。

属性块不要用代码去创建,而是先做好属性块,再去转换成代码,再下次用代码生成。

xyp1964 发表于 2022-11-14 19:43:35

;command方式多简单
(defun AttBlock        (name bj ts sxz th / s0 pt)
;; bj属性标记名 ts输入属性提示 sxz默认属性值 th文本高度
;; (AttBlock "$abc" "A" "标高值" "±0.000" 300)
(setq s0 (entlast)
        pt '(0 0)
)
(command "-attdef" "" bj ts sxz "j" "mc" "non" pt th 0)
(command "-block" name "non" pt (entlast) "")
)

20060510412 发表于 2022-11-14 21:38:22

菜卷鱼 发表于 2022-11-14 17:59
跟你这个类似的帖子找不到了,再回复一下。

属性块不要用代码去创建,而是先做好属性块,再去转换成代码 ...

谢谢分享,不过我是直接用来生成图框标题的属性块,文本内容都是不同的,只能通过代码去新建属性块了。
页: [1] 2
查看完整版本: 请教如何生成文字居中的属性块