CAD新军 发表于 2020-1-15 10:28:08

entmake生成块怎样包含属性块

用entmake做块,当嵌套包含属性块时会提示无效复杂对象。有没有方法解决呢?

CAD新军 发表于 2020-1-15 10:29:52

用的代码是lisp分类学习手册的函数

CAD新军 发表于 2020-1-15 10:32:54

函数:
mc-make-unname-block
功能:
生成无名图块
函数代码:
(defun mc-make-unname-block(ss / count entlist ent blk)
(entmake '((0 . "BLOCK")   (2 . "*U")    (70 . 1)    (10 0 0 0)   ))
(setq count 0)
(repeat (sslength ss)
    (setq entlist(entget(setq ent(ssname sscount))))
    (setq count (1+ count))
    (entmake entlist)
    )
(setq count 0)
(repeat(sslength ss)
    (setq ent(ssname ss count))
    (setq count (1+ count))
    (entdel ent)
    )
(setq blk(entmake '((0 . "ENDBLK"))))
(if (princ blk)
(entmake (list (cons 0"INSERT")
(cons 2 blk)
   (cons 10 '(0 0 0))    ))
    )
blk
)语法:
(mc-make-unname-block ss)
参数:
ss:选择集
返回值:
无名块
示例:
(mc-make-unname-block (ssget))
说明:
函数对选择集中存在具有属性的图块及复杂多义线无效

wang_cn10 发表于 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 ...

这个代码不错,但是做成了咋炸开呢?

wang_cn10 发表于 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)
)
页: [1]
查看完整版本: entmake生成块怎样包含属性块