本帖最后由 _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. )
复制代码


网友答: 用这个
  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. )


网友答:
_rocky 发表于 2025-11-4 15:55
(tblsearch "block" name) 是存在的
entmake插入实现不了时因为块丢失了属性,原因在于遍历BLOCK实体的 ...

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

网友答:
_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,值,对象,可以自行通过对象获取它的坐标以及属性文字的字体样式,大小,对齐方式等格式相关数据

网友答: 其中定义图块正常,插入图块不显示,同样方法定义,其他图块能正常定义和插入,问题出在哪?

网友答: (cons 66 1)是属性块吧?
可以参考一下http://bbs.xdcad.net/forum.php?m ... E%E6%80%A7%E5%9D%97

网友答: 本帖最后由 _rocky 于 2025-11-4 13:49 编辑
自贡黄明儒 发表于 2025-11-4 11:51
(cons 66 1)是属性块吧?
可以参考一下http://bbs.xdcad.net/forum.php?mod=viewthread&tid=678178&highli ...

明白了  丢属性数据了  感谢



网友答:
自贡黄明儒 发表于 2025-11-4 11:51
(cons 66 1)是属性块吧?
可以参考一下http://bbs.xdcad.net/forum.php?mod=viewthread&tid=678178&highli ...

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

网友答: 参见    entnext e

网友答: 本帖最后由 _rocky 于 2025-11-4 14:01 编辑
自贡黄明儒 发表于 2025-11-4 13:47
参见    entnext e

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

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

上面帖子5楼有把块的cad文件附上,请参照

网友答: 你先用(tblsearch "block" name) 看这个块是否存在,假如不存在insert假装插入导入属性,再用entmake插入,插入完之后 attsync一下,或者insert直接插入

网友答:
菜卷鱼 发表于 2025-11-4 15:32
你先用(tblsearch "block" name) 看这个块是否存在,假如不存在insert假装插入导入属性,再用entmake插入, ...

(tblsearch "block" name) 是存在的
entmake插入实现不了时因为块丢失了属性,原因在于遍历BLOCK实体的时候,找不到属性
attsync解决的是属性成功创建,更新属性,没有属性attsync就没有效果
  • 上一篇:关于风之影Lisp大挑战的一个建议:图形填充
  • 下一篇:没有了