关于在CAD2022中通过entmake插入属性块
现在这种方法是否有问题?记得之前在2012版本可以实现,现在却不行了,调试过程中有时会提示创建了无效的复杂对象,有时连基本的块都显示不出。(defun D-MakeAttInsert(name0 pt0 ang sc pt1 text1 font hei wid hori vert flag layer ltype colar / );制作插入属性块
(entmake (list '(0 . "INSERT") '(66 . 1);采用'(66 . 1),伴随属性
(cons 2 name0) (cons 10 pt0) (cons 50 ang);块名、插入点、角度
(cons 41 sc) (cons 42 sc) (cons 43 sc);x、y、z比例
(cons 8 layer) (cons 6 ltype) (cons 62 colar)));线型随层"BYLAYER";颜色随层256
(entmake (list '(0 . "ATTRIB") '(100 . "AcDbEntity") '(100 . "AcDbText")
(cons 10 pt1) (cons 11 pt1) (cons 1 text1) (cons 2 "标高") (cons 50 ang);第二对齐点;内容、角度
(if (tblsearch "style" font) (cons 7 font) (cons 7 "standard"));字体
(cons 40 (* hei sc)) (cons 41 wid);字高、字宽
(cons 72 hori) (cons 74 vert);水平竖直对正类型
'(100 . "AcDbAttribute") (cons 70 flag);属性标志;可见性、预设等
(cons 8 layer) (cons 6 ltype) (cons 62 colar)));线型随层"BYLAYER";颜色随层256
(entmake '((0 . "SEQEND")));结束标志
;(entlast);返回
);~defun
;(D-MakeAttInsert "zb-标高" (list 0 0 0) 0 1 (list 4 4 0) "45.123" "standard" 2.5 0.75 0 0 0 "0" "BYLAYER" 256)
除非DWG中没有"zb-标高"这个块定义,不然不应该出现这个情况 llsheng_73 发表于 2025-1-5 16:05
除非DWG中没有"zb-标高"这个块定义,不然不应该出现这个情况
我给CAD文件里有这个块,您可以试一下,插入函数已经附在结尾了。 创建块应该用block 不是insert(If (Not (TblSearch "BLOCK" "test123"))
(progn
(EntMake '((0 . "BLOCK")(2 . "test123")(8 . "0") (100 . "AcDbBlockReference")(70 . 0)(10 0.0 0.0 0.0)))
(EntMake
(list
'(0 . "CIRCLE")
'(8 . "0")
'(10 0.0 0.0 0.0)
(cons 40 100)
)
)
(EntMakex
(list
(cons 0 "attdef")
(cons 10 (list 0 0 0))
(cons 40300)
(cons 1 "1")
(cons 2 "1")
(cons 3 "1")
(cons 700)
)
)
(EntMake '((0 . "ENDBLK")))
)
)
黄翔 发表于 2025-1-6 00:25
创建块应该用block 不是insert
您误会我的意思了,我就是要插入属性块 插入属性块要这样做干什么?插入块,再修改属性值不就好了.(entmake '((0 . "SEQEND")));只有定义块的时候才会用的. 黄翔 发表于 2025-1-6 21:13
插入属性块要这样做干什么?插入块,再修改属性值不就好了.(entmake '((0 . "SEQEND")));只有定义块的时候 ...
好像不是吧······ 用测试.dwg里面运行
(setq *acad* (vlax-get-acad-object))
(setq *doc* (vla-get-activedocument *acad*))
(setq *ms* (vla-get-modelspace *doc*))
(setq _pt1 (getpoint))
(setq _obj (vla-InsertBlock *ms* (vlax-3d-point _pt1) "zb-标高" 1 1 1 0))
(mapcar
'(lambda (_Att)
(cond
((= (vla-get-TagString _Att) "标高") (vla-put-TextString _Att "新值"))
)
)
(vlax-invoke _Obj "GetAttributes")
)
页:
[1]