明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1482|回复: 5

[提问] entmake生成块怎样包含属性块

[复制链接]
发表于 2020-1-15 10:28:08 来自手机 | 显示全部楼层 |阅读模式
用entmake做块,当嵌套包含属性块时会提示无效复杂对象。有没有方法解决呢?
 楼主| 发表于 2020-1-15 10:29:52 来自手机 | 显示全部楼层
用的代码是lisp分类学习手册的函数
 楼主| 发表于 2020-1-15 10:32:54 | 显示全部楼层
  1. 函数:
  2. mc-make-unname-block
  3. 功能:
  4. 生成无名图块
  5. 函数代码:
  6. (defun mc-make-unname-block(ss / count entlist ent blk)
  7.   (entmake '((0 . "BLOCK")   (2 . "*U")    (70 . 1)    (10 0 0 0)     ))
  8.   (setq count 0)
  9.   (repeat (sslength ss)
  10.     (setq entlist(entget(setq ent(ssname ss  count))))
  11.     (setq count (1+ count))
  12.     (entmake entlist)
  13.     )
  14.   (setq count 0)
  15.   (repeat(sslength ss)
  16.     (setq ent(ssname ss count))
  17.     (setq count (1+ count))
  18.     (entdel ent)
  19.     )
  20.   (setq blk(entmake '((0 . "ENDBLK"))))
  21.   (if (princ blk)
  22.   (entmake (list (cons 0  "INSERT")
  23.   (cons 2 blk)
  24.      (cons 10 '(0 0 0))    ))
  25.     )
  26.   blk
  27.   )语法:
  28. (mc-make-unname-block ss)
  29. 参数:
  30. ss:选择集
  31. 返回值:
  32. 无名块
  33. 示例:
  34. (mc-make-unname-block (ssget))
  35. 说明:
  36. 函数对选择集中存在具有属性的图块及复杂多义线无效
发表于 2020-1-15 14:16:33 | 显示全部楼层
属性块不能做成匿名块,但可以做成多重引用匿名块
(defun MIntoBlock ( / ss adoc blk obj objs pts ptc i )
  (while (null (setq ss (ssget))))
  (setq pts (get-outbox ss))
  (setq ptc (get-midpt (car pts) (cadr pts)))
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (setq blk (vla-add (vla-get-blocks adoc) (vlax-3d-point ptc) "*U" ))
  (repeat (setq i (sslength ss))
    (setq obj (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
    (setq objs (cons obj objs))
   )
  (vlax-invoke adoc 'copyobjects objs blk)
  (mapcar 'vla-delete objs)
  (vla-AddMInsertBlock (vla-get-modelspace adoc) (vlax-3d-point ptc) (vla-get-name blk) 1 1 1 0 2 2 0 0)
  (princ)
)
发表于 2020-3-18 00:43:35 | 显示全部楼层
wang_cn10 发表于 2020-1-15 14:16
属性块不能做成匿名块,但可以做成多重引用匿名块
(defun MIntoBlock ( / ss adoc blk obj objs pts ptc i ...

这个代码不错,但是做成了咋炸开呢?
发表于 2020-3-19 10:56:55 | 显示全部楼层
尘缘一生 发表于 2020-3-18 00:43
这个代码不错,但是做成了咋炸开呢?

(defun MIntoBlockExplode ( / ss enf ent n x y )
  (while (null (setq ss (ssget ":s" (list (cons 0 "INSERT"))))))
  (repeat (setq n (sslength ss))
    (setq ent (entget (ssname ss (setq n (1- n)))))
    (mapcar '(lambda ( x y ) (setq ent (subst x y ent)))
            (list (cons 44 0) (cons 45 0) (cons 70 0) (cons 71 0))
            (list (assoc 44 ent) (assoc 45 ent) (assoc 70 ent) (assoc 71 ent))
        )
    (entmod ent)
    (setq ent (entget (ssname ss n)))
    (entdel (ssname ss n))
    (entmake (subst (cons 100 "AcDbBlockReference") (cons 100 "AcDbMInsertBlock") ent))
    (setq enf (entlast))
    (vla-explode (vlax-ename->vla-object enf))
    (entdel enf)
   )
  (princ)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 07:12 , Processed in 0.157217 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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