明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 430|回复: 7

[提问] 关于在CAD2022中通过entmake插入属性块

[复制链接]
发表于 2025-1-5 10:18:13 | 显示全部楼层 |阅读模式
现在这种方法是否有问题?记得之前在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)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 2025-1-5 16:05:49 | 显示全部楼层
除非DWG中没有"zb-标高"这个块定义,不然不应该出现这个情况
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-5 20:58:57 | 显示全部楼层
llsheng_73 发表于 2025-1-5 16:05
除非DWG中没有"zb-标高"这个块定义,不然不应该出现这个情况

我给CAD文件里有这个块,您可以试一下,插入函数已经附在结尾了。
回复 支持 反对

使用道具 举报

发表于 2025-1-6 00:25:56 | 显示全部楼层
创建块应该用block 不是insert
  1. (If (Not (TblSearch "BLOCK" "test123"))
  2.     (progn
  3.          (EntMake '((0 . "BLOCK")(2 . "test123")(8 . "0") (100 . "AcDbBlockReference")(70 . 0)(10 0.0 0.0 0.0)))   
  4.      (EntMake
  5.         (list
  6.             '(0 . "CIRCLE")
  7.             '(8 . "0")
  8.             '(10 0.0 0.0 0.0)
  9.             (cons 40 100)            
  10.           )
  11.       )      
  12. (EntMakex
  13.     (list
  14.       (cons 0 "attdef")
  15.       (cons 10   (list 0 0 0))
  16.       (cons 40  300)
  17.       (cons 1   "1")      
  18.       (cons 2   "1")
  19.       (cons 3   "1")
  20.       (cons 70  0)
  21.     )
  22.   )
  23.       (EntMake '((0 . "ENDBLK")))
  24.      
  25.     )
  26. )


回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-6 16:19:01 | 显示全部楼层
黄翔 发表于 2025-1-6 00:25
创建块应该用block 不是insert

您误会我的意思了,我就是要插入属性块
回复 支持 反对

使用道具 举报

发表于 2025-1-6 21:13:50 | 显示全部楼层
插入属性块要这样做干什么?插入块,再修改属性值不就好了.  (entmake '((0 . "SEQEND")));只有定义块的时候才会用的.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-6 21:28:48 | 显示全部楼层
黄翔 发表于 2025-1-6 21:13
插入属性块要这样做干什么?插入块,再修改属性值不就好了.  (entmake '((0 . "SEQEND")));只有定义块的时候 ...

好像不是吧······
回复 支持 反对

使用道具 举报

发表于 2025-1-6 21:30:52 | 显示全部楼层
用测试.dwg里面运行
  1. (setq *acad* (vlax-get-acad-object))
  2. (setq *doc* (vla-get-activedocument *acad*))
  3. (setq *ms* (vla-get-modelspace *doc*))
  4. (setq _pt1 (getpoint))
  5. (setq _obj (vla-InsertBlock *ms* (vlax-3d-point _pt1) "zb-标高" 1 1 1 0))
  6. (mapcar
  7. '(lambda (_Att)   
  8.    (cond
  9.      ((= (vla-get-TagString _Att) "标高") (vla-put-TextString _Att "新值"))
  10.    )      
  11. )
  12. (vlax-invoke _Obj "GetAttributes")
  13. )
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-1-22 17:43 , Processed in 0.192790 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表