明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 695|回复: 21

[提问] 这段entmake指令为什么不能把图块$DorLib2D$00000009插入到新的cad文件?

[复制链接]
发表于 2025-11-4 11:41:26 | 显示全部楼层 |阅读模式
本帖最后由 _rocky 于 2025-11-5 17:34 编辑

  1. (entmake
  2.   (list
  3.     (cons 0 "LAYER")
  4.     (cons 100 "AcDbSymbolTableRecord")
  5.     (cons 100 "AcDbLayerTableRecord")
  6.     '(2 . "WINDOW")
  7.     '(70 . 0)
  8.     '(62 . 4)
  9.     '(6 . "Continuous")
  10.   )
  11. )
  12. (entmake (list (cons 0 "BLOCK") '(2 . "$DorLib2D$00000009") '(70 . 0) '(4 . "") '(10 0.0 0.0 0.0)))
  13. (entmake
  14.   (list
  15.     (cons 0 "ARC")
  16.     (cons 100 "AcDbEntity")
  17.     (cons 67 0)
  18.     (cons 8 "0")
  19.     (cons 370 13)
  20.     (cons 100 "AcDbCircle")
  21.     (cons 10 '(0.37165 0.0817319 0.0))
  22.     (cons 40 0.824561)
  23.     (cons 210 '(0.0 0.0 1.0))
  24.     (cons 100 "AcDbArc")
  25.     (cons 50 1.52077)
  26.     (cons 51 3.14284)
  27.   )
  28. )
  29. (entmake
  30.   (list
  31.     (cons 0 "LINE")
  32.     (cons 100 "AcDbEntity")
  33.     (cons 67 0)
  34.     (cons 8 "0")
  35.     (cons 100 "AcDbLine")
  36.     (cons 10 '(0.454107 0.0807006 0.0))
  37.     (cons 11 '(0.454107 0.905262 0.0))
  38.     (cons 210 '(0.0 0.0 1.0))
  39.   )
  40. )
  41. (entmake
  42.   (list
  43.     (cons 0 "LINE")
  44.     (cons 100 "AcDbEntity")
  45.     (cons 67 0)
  46.     (cons 8 "0")
  47.     (cons 100 "AcDbLine")
  48.     (cons 10 '(0.412878 0.905262 0.0))
  49.     (cons 11 '(0.412878 0.0807006 0.0))
  50.     (cons 210 '(0.0 0.0 1.0))
  51.   )
  52. )
  53. (entmake
  54.   (list
  55.     (cons 0 "LINE")
  56.     (cons 100 "AcDbEntity")
  57.     (cons 67 0)
  58.     (cons 8 "0")
  59.     (cons 100 "AcDbLine")
  60.     (cons 10 '(0.412878 0.0807006 0.0))
  61.     (cons 11 '(0.454107 0.0807006 0.0))
  62.     (cons 210 '(0.0 0.0 1.0))
  63.   )
  64. )
  65. (entmake
  66.   (list
  67.     (cons 0 "LINE")
  68.     (cons 100 "AcDbEntity")
  69.     (cons 67 0)
  70.     (cons 8 "0")
  71.     (cons 100 "AcDbLine")
  72.     (cons 10 '(0.495335 -0.00175559 0.0))
  73.     (cons 11 '(0.495335 0.0807006 0.0))
  74.     (cons 210 '(0.0 0.0 1.0))
  75.   )
  76. )
  77. (entmake
  78.   (list
  79.     (cons 0 "LINE")
  80.     (cons 100 "AcDbEntity")
  81.     (cons 67 0)
  82.     (cons 8 "0")
  83.     (cons 100 "AcDbLine")
  84.     (cons 10 '(0.495335 0.0807006 0.0))
  85.     (cons 11 '(0.454107 0.0807006 0.0))
  86.     (cons 210 '(0.0 0.0 1.0))
  87.   )
  88. )
  89. (entmake
  90.   (list
  91.     (cons 0 "LINE")
  92.     (cons 100 "AcDbEntity")
  93.     (cons 67 0)
  94.     (cons 8 "0")
  95.     (cons 100 "AcDbLine")
  96.     (cons 10 '(0.454107 0.0807006 0.0))
  97.     (cons 11 '(0.454107 0.0394725 0.0))
  98.     (cons 210 '(0.0 0.0 1.0))
  99.   )
  100. )
  101. (entmake
  102.   (list
  103.     (cons 0 "LINE")
  104.     (cons 100 "AcDbEntity")
  105.     (cons 67 0)
  106.     (cons 8 "0")
  107.     (cons 100 "AcDbLine")
  108.     (cons 10 '(0.454107 0.0394725 0.0))
  109.     (cons 11 '(0.412878 0.0394725 0.0))
  110.     (cons 210 '(0.0 0.0 1.0))
  111.   )
  112. )
  113. (entmake
  114.   (list
  115.     (cons 0 "LINE")
  116.     (cons 100 "AcDbEntity")
  117.     (cons 67 0)
  118.     (cons 8 "0")
  119.     (cons 100 "AcDbLine")
  120.     (cons 10 '(0.412878 -0.00175559 0.0))
  121.     (cons 11 '(0.495335 -0.00175559 0.0))
  122.     (cons 210 '(0.0 0.0 1.0))
  123.   )
  124. )
  125. (entmake
  126.   (list
  127.     (cons 0 "LINE")
  128.     (cons 100 "AcDbEntity")
  129.     (cons 67 0)
  130.     (cons 8 "0")
  131.     (cons 100 "AcDbLine")
  132.     (cons 10 '(0.495335 -0.00175559 0.0))
  133.     (cons 11 '(0.495335 -0.00175559 0.0))
  134.     (cons 210 '(0.0 0.0 1.0))
  135.   )
  136. )
  137. (entmake
  138.   (list
  139.     (cons 0 "LINE")
  140.     (cons 100 "AcDbEntity")
  141.     (cons 67 0)
  142.     (cons 8 "0")
  143.     (cons 100 "AcDbLine")
  144.     (cons 10 '(0.412878 0.0394725 0.0))
  145.     (cons 11 '(0.412878 -0.00175559 0.0))
  146.     (cons 210 '(0.0 0.0 1.0))
  147.   )
  148. )
  149. (entmake
  150.   (list
  151.     (cons 0 "LINE")
  152.     (cons 100 "AcDbEntity")
  153.     (cons 67 0)
  154.     (cons 8 "0")
  155.     (cons 370 13)
  156.     (cons 100 "AcDbLine")
  157.     (cons 10 '(0.378004 0.782157 0.0))
  158.     (cons 11 '(0.378004 0.623508 0.0))
  159.     (cons 210 '(0.0 0.0 1.0))
  160.   )
  161. )
  162. (entmake
  163.   (list
  164.     (cons 0 "LINE")
  165.     (cons 100 "AcDbEntity")
  166.     (cons 67 0)
  167.     (cons 8 "0")
  168.     (cons 370 13)
  169.     (cons 100 "AcDbLine")
  170.     (cons 10 '(0.488981 0.782157 0.0))
  171.     (cons 11 '(0.488981 0.623508 0.0))
  172.     (cons 210 '(0.0 0.0 1.0))
  173.   )
  174. )
  175. (entmake
  176.   (list
  177.     (cons 0 "LINE")
  178.     (cons 100 "AcDbEntity")
  179.     (cons 67 0)
  180.     (cons 8 "0")
  181.     (cons 100 "AcDbLine")
  182.     (cons 10 '(0.454107 0.905262 0.0))
  183.     (cons 11 '(0.412878 0.905262 0.0))
  184.     (cons 210 '(0.0 0.0 1.0))
  185.   )
  186. )
  187. (entmake
  188.   (list
  189.     (cons 0 "LINE")
  190.     (cons 100 "AcDbEntity")
  191.     (cons 67 0)
  192.     (cons 8 "0")
  193.     (cons 100 "AcDbLine")
  194.     (cons 10 '(-0.494139 -0.00175559 0.0))
  195.     (cons 11 '(-0.494139 -0.00175559 0.0))
  196.     (cons 210 '(0.0 0.0 1.0))
  197.   )
  198. )
  199. (entmake
  200.   (list
  201.     (cons 0 "LINE")
  202.     (cons 100 "AcDbEntity")
  203.     (cons 67 0)
  204.     (cons 8 "0")
  205.     (cons 100 "AcDbLine")
  206.     (cons 10 '(-0.411683 -0.00175559 0.0))
  207.     (cons 11 '(-0.494139 -0.00175559 0.0))
  208.     (cons 210 '(0.0 0.0 1.0))
  209.   )
  210. )
  211. (entmake
  212.   (list
  213.     (cons 0 "LINE")
  214.     (cons 100 "AcDbEntity")
  215.     (cons 67 0)
  216.     (cons 8 "0")
  217.     (cons 100 "AcDbLine")
  218.     (cons 10 '(-0.411683 0.0394725 0.0))
  219.     (cons 11 '(-0.411683 -0.00175559 0.0))
  220.     (cons 210 '(0.0 0.0 1.0))
  221.   )
  222. )
  223. (entmake
  224.   (list
  225.     (cons 0 "LINE")
  226.     (cons 100 "AcDbEntity")
  227.     (cons 67 0)
  228.     (cons 8 "0")
  229.     (cons 100 "AcDbLine")
  230.     (cons 10 '(-0.452911 0.0394725 0.0))
  231.     (cons 11 '(-0.411683 0.0394725 0.0))
  232.     (cons 210 '(0.0 0.0 1.0))
  233.   )
  234. )
  235. (entmake
  236.   (list
  237.     (cons 0 "LINE")
  238.     (cons 100 "AcDbEntity")
  239.     (cons 67 0)
  240.     (cons 8 "0")
  241.     (cons 100 "AcDbLine")
  242.     (cons 10 '(-0.452911 0.0807006 0.0))
  243.     (cons 11 '(-0.452911 0.0394725 0.0))
  244.     (cons 210 '(0.0 0.0 1.0))
  245.   )
  246. )
  247. (entmake
  248.   (list
  249.     (cons 0 "LINE")
  250.     (cons 100 "AcDbEntity")
  251.     (cons 67 0)
  252.     (cons 8 "0")
  253.     (cons 100 "AcDbLine")
  254.     (cons 10 '(-0.494139 0.0807006 0.0))
  255.     (cons 11 '(-0.452911 0.0807006 0.0))
  256.     (cons 210 '(0.0 0.0 1.0))
  257.   )
  258. )
  259. (entmake
  260.   (list
  261.     (cons 0 "LINE")
  262.     (cons 100 "AcDbEntity")
  263.     (cons 67 0)
  264.     (cons 8 "0")
  265.     (cons 100 "AcDbLine")
  266.     (cons 10 '(-0.494139 -0.00175559 0.0))
  267.     (cons 11 '(-0.494139 0.0807006 0.0))
  268.     (cons 210 '(0.0 0.0 1.0))
  269.   )
  270. )
  271. (entmake
  272.   (list
  273.     (cons 0 "LINE")
  274.     (cons 100 "AcDbEntity")
  275.     (cons 67 0)
  276.     (cons 8 "0")
  277.     (cons 100 "AcDbLine")
  278.     (cons 10 '(0.488981 0.782157 0.0))
  279.     (cons 11 '(0.454107 0.782157 0.0))
  280.     (cons 210 '(0.0 0.0 1.0))
  281.   )
  282. )
  283. (entmake
  284.   (list
  285.     (cons 0 "LINE")
  286.     (cons 100 "AcDbEntity")
  287.     (cons 67 0)
  288.     (cons 8 "0")
  289.     (cons 100 "AcDbLine")
  290.     (cons 10 '(0.488981 0.623508 0.0))
  291.     (cons 11 '(0.454107 0.623508 0.0))
  292.     (cons 210 '(0.0 0.0 1.0))
  293.   )
  294. )
  295. (entmake
  296.   (list
  297.     (cons 0 "LINE")
  298.     (cons 100 "AcDbEntity")
  299.     (cons 67 0)
  300.     (cons 8 "0")
  301.     (cons 100 "AcDbLine")
  302.     (cons 10 '(0.412878 0.782157 0.0))
  303.     (cons 11 '(0.378004 0.782157 0.0))
  304.     (cons 210 '(0.0 0.0 1.0))
  305.   )
  306. )
  307. (entmake
  308.   (list
  309.     (cons 0 "LINE")
  310.     (cons 100 "AcDbEntity")
  311.     (cons 67 0)
  312.     (cons 8 "0")
  313.     (cons 100 "AcDbLine")
  314.     (cons 10 '(0.412878 0.623508 0.0))
  315.     (cons 11 '(0.378004 0.623508 0.0))
  316.     (cons 210 '(0.0 0.0 1.0))
  317.   )
  318. )
  319. (entmake '((0 . "ENDBLK")))
  320. (entmake
  321.   (list
  322.     (cons 0 "INSERT")
  323.     (cons 100 "AcDbEntity")
  324.     (cons 67 0)
  325.     (cons 410 "Model")
  326.     (cons 8 "WINDOW")
  327.     (cons 100 "AcDbBlockReference")
  328.     (cons 66 1)
  329.     (cons 2 "$DorLib2D$00000009")
  330.     (cons 10 '(37101.6 265828.0 0.0))
  331.     (cons 41 900.0)
  332.     (cons 42 -900.0)
  333.     (cons 43 900.0)
  334.     (cons 50 1.5708)
  335.     (cons 70 0)
  336.     (cons 71 0)
  337.     (cons 44 0.0)
  338.     (cons 45 0.0)
  339.     (cons 210 '(0.0 0.0 1.0))
  340.   )
  341. )

  342. )
复制代码

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2025-11-4 17:35:32 | 显示全部楼层
用这个
  1. ;;;插入块
  2. (defun imblk (name pt sc ang / mspace 3dp blk ename)
  3.   (setq        mspace (vla-get-modelspace
  4.                  (vla-get-activedocument (vlax-get-acad-object))
  5.                )
  6.   )
  7.   (setq 3dp (vlax-3D-point pt))
  8.   (and
  9.     (or        (tblsearch "block" name)
  10.         (if (findfile (strcat name ".dwg"))
  11.           (progn
  12.             (setvar 'cmdecho 0)
  13.             (command "-insert" name ^e)
  14.             (setvar 'cmdecho 1)
  15.           )
  16.         )
  17.     )
  18.     (and
  19.       (tblsearch "block" name)
  20.       (setq vlblk (vla-InsertBlock mspace 3dp name sc sc sc ang))
  21.       (setq ename (vlax-vla-object->ename vlblk))
  22.     )
  23.   )
  24.   ename
  25. )
回复 支持 反对

使用道具 举报

发表于 2025-11-5 16:17:53 | 显示全部楼层
_rocky 发表于 2025-11-4 15:55
(tblsearch "block" name) 是存在的
entmake插入实现不了时因为块丢失了属性,原因在于遍历BLOCK实体的 ...

块的属性有两种情况,一种情况块本身是没有属性的,通过(66 . 1)方式插入块参照后继续追加属性直到(entmake '((0 . "SEQEND")))结束,这种情况通过tbl相关的函数是获取不到关于属性的任何信息;另一种是定认块主体的时候,和在块内添加一般图元对象一样,通过AddAttribute方法增加属性对象,或者使用相应的entmake也是一样的效果,这样的属性是能通过tbl相关函数获取属性的定义数据的,注意是定义数据,因为插入块参照后,它的属性一般情况下是可以修改的,有可能每个参照的同一属性,值各不相同,比如cass的高程点的高程注记属性(它是通过插入普通的GC200后继续追加的属性)
对于插入参照后追加的属性,需要对块参照图元通过entnext来查询它的后续图元是否为该参照的子图元(属性)来获取,
回复 支持 反对

使用道具 举报

发表于 2025-11-5 16:07:00 | 显示全部楼层
_rocky 发表于 2025-11-4 13:35
这个块通过快编辑器打开后找不到属性定义,
请问 ,怎么找到通过代码找到它的属性定义?

  1. (defun getatts(blk)
  2.   (if(equal(VL-CATCH-ALL-APPLY'vlax-get-property(list(setq blk(if(=(type blk)'ename)(vlax-ename->vla-object blk)blk))'HasAttributes)):vlax-true)
  3.     (mapcar(function(lambda(x)(list(vla-get-TagString x)(vla-get-TextString x)x)))(vlax-safearray->list(vlax-variant-value(vlax-invoke-method blk'GetAttributes))))))

GETATTS
_$ (GETATTS(car(entsel)))
(("A" "GM-0921" #<VLA-OBJECT IAcadAttributeReference2 04f74b24>))
函数返回属性的TAG,值,对象,可以自行通过对象获取它的坐标以及属性文字的字体样式,大小,对齐方式等格式相关数据
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-11-4 11:48:12 | 显示全部楼层
其中定义图块正常,插入图块不显示,同样方法定义,其他图块能正常定义和插入,问题出在哪?
回复 支持 反对

使用道具 举报

发表于 2025-11-4 11:51:30 | 显示全部楼层
(cons 66 1)是属性块吧?
可以参考一下http://bbs.xdcad.net/forum.php?m ... E%E6%80%A7%E5%9D%97
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-11-4 13:14:25 | 显示全部楼层
本帖最后由 _rocky 于 2025-11-4 13:49 编辑

明白了  丢属性数据了  感谢

回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-11-4 13:35:07 | 显示全部楼层
自贡黄明儒 发表于 2025-11-4 11:51
(cons 66 1)是属性块吧?
可以参考一下http://bbs.xdcad.net/forum.php?mod=viewthread&tid=678178&highli ...

这个块通过快编辑器打开后找不到属性定义,
请问 ,怎么找到通过代码找到它的属性定义?

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2025-11-4 13:47:49 | 显示全部楼层
参见    entnext e
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-11-4 13:49:47 | 显示全部楼层
本帖最后由 _rocky 于 2025-11-4 14:01 编辑

http://bbs.xdcad.net/forum.php?m ... E%E6%80%A7%E5%9D%97

拿这个函数试过了,也同样丢失属性

上面帖子5楼有把块的cad文件附上,请参照
回复 支持 反对

使用道具 举报

发表于 2025-11-4 15:32:15 | 显示全部楼层
你先用(tblsearch "block" name) 看这个块是否存在,假如不存在insert假装插入导入属性,再用entmake插入,插入完之后 attsync一下,或者insert直接插入
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-11-4 15:55:27 | 显示全部楼层
菜卷鱼 发表于 2025-11-4 15:32
你先用(tblsearch "block" name) 看这个块是否存在,假如不存在insert假装插入导入属性,再用entmake插入, ...

(tblsearch "block" name) 是存在的
entmake插入实现不了时因为块丢失了属性,原因在于遍历BLOCK实体的时候,找不到属性
attsync解决的是属性成功创建,更新属性,没有属性attsync就没有效果
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-13 22:57 , Processed in 0.196164 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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