autocad中lisp程序,图形中框选之后如何采集插入块的信息?用selection函数吗?如何用?求代码!谢谢
已知assoc0llisting1(定义参数llisting1为块属性信息list,0位对应值为insert)。...
已知assoc 0 llisting1(定义参数llisting1为块属性信息list,0位对应值为insert)。
展开
1个回答
展开全部
块属性需要用entnext不断的往后取得到,下面给你一个例子
;;;把两个属性快的属性执行一致
(defun C:bpp() ;;;复制属性
(setq ent1 nil ent2 nil)
(while (= nil ent1)(setq ent1 (car (entsel "\n数据源块:")))) ;;;;;;;;;取其中 一个块
(while (= nil ent2)(setq ent2 (car (entsel "\n需要被一致的块:")))) ;;;;;;;;;取其中另一个块
(setq n
(length (vlax-safearray->list (vlax-variant-value
(vlax-invoke-method
(vlax-ename->vla-object ent1)
'GetAttributes)
)))
)
(repeat n
(setq ent1 (entnext ent1))
(setq ent2 (entnext ent2))
(setq entlist1 (entget ent1))
(setq entlist2 (entget ent2))
(setq entlist2 (subst (assoc 1 entlist1) (assoc 1 entlist2) entlist2))
(entMOD entlist2)
(entUPD ent2)
)
)
;;;把两个属性快的属性执行一致
(defun C:bpp() ;;;复制属性
(setq ent1 nil ent2 nil)
(while (= nil ent1)(setq ent1 (car (entsel "\n数据源块:")))) ;;;;;;;;;取其中 一个块
(while (= nil ent2)(setq ent2 (car (entsel "\n需要被一致的块:")))) ;;;;;;;;;取其中另一个块
(setq n
(length (vlax-safearray->list (vlax-variant-value
(vlax-invoke-method
(vlax-ename->vla-object ent1)
'GetAttributes)
)))
)
(repeat n
(setq ent1 (entnext ent1))
(setq ent2 (entnext ent2))
(setq entlist1 (entget ent1))
(setq entlist2 (entget ent2))
(setq entlist2 (subst (assoc 1 entlist1) (assoc 1 entlist2) entlist2))
(entMOD entlist2)
(entUPD ent2)
)
)
更多追问追答
追问
谢谢你的回答,目前可以做到读取整张图形中的元素读取需要的属性,但是如果是选择集就不行,总是提示参数列表不对。(通过SSGET获取选择集,通过ssname来提取元素,用repeat循环。通过while循环及entnext来读取元素块里的多个属性块的属性。)VLISP不懂。。。谢谢你的回答!
追答
得看到代码才知道哪里不对.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询