请教高手选中多个对象操作后,再部分操作的问题?
本帖最后由 ★飞飛★ 于 2021-11-26 21:56 编辑举例:
步骤1、已选中包含标注和文字两种对象,并对两种对象图层等操作完成;
步骤2、第一步完成后,在已选中的两种对象中,我还需要再对文字颜色进行操作,但标注的颜色不变,请问这用哪种lisp句子可以实现,谢谢高手指教!
说明:第二步不需要再用ssget等手工再选择一次,我自己在第一步完成后,用条件判断(过滤出文本对象)没有实现,可能句子没有写对。
(defun C:NM (/ i s1 ss)
(setq ss (ssget '((0 . "TEXT,DIMENSION"))))
(repeat (setq i (sslength ss))
(setq s1 (ssname ss (setq i (1- i))))
(cond
((and(= 'ENAME (type s1))(= (cdr(assoc 0 (entget s1))) "DIMENSION" )) ;从选择集中过滤标注类图元
(vla-put-layer (vlax-ename->vla-object s1) "标注类你的图层名字"))
((and(= 'ENAME (type s1))(member (cdr(assoc 0 (entget s1))) '("TEXT" "MTEXT"))) ;从选择集中过滤文字类图元
(vla-put-layer (vlax-ename->vla-object s1) "文字类你的图层名字")
(vla-put-color (vlax-ename->vla-object s1) 1)) ;这里是你要改的文字的颜色
)
;其他类似的自己可以参照上面两个例子自由扩展
)
(princ)
) 不用操作完图层,再返回来操作颜色,独立处理每个图元的时候,直接把需要改的属性直接一次性都赋予了就行了呗 用IF判断每个图元的群码0是不是“TEXT”,是的话改群码62颜色 如果非要按照你自己的思路来:
第一步创建选择集时,增加一句话(setq ss2 (ssget "_p" '((0 . "TEXT")))
就能把第一步选择的对象中的所有文字作为选择集ss2
但这样编写代码就繁琐了,可以按照楼上几位的建议来做。
本帖最后由 ★飞飛★ 于 2021-12-4 13:05 编辑
首先感谢@xj6019的思路和代码,感谢其他热心的朋友,大家互帮互助,所以这里我把我要实现的完整功能程序发出来,希望有能用到的朋友一些帮助。我这个速度还是有点慢,因为其中有几行command,如有高手有更简洁的建议或思路,希望不吝指教。
我要实现的功能:按标注样式的全局比例筛选出其它标注、引线及引线文字刷格式,即在画节点图的时候,对于不同的比例的节点图,可以点选前面已完成的节点图的相同比例标注,直接刷本节点图中的所有标注、引线及引线文字,引线文字高度自动更改为标准的标注全局比例的3.5倍(也可以自己修改倍数)。
(defun c:Nb();按标注样式的全局比例筛选出其它标注、引线及引线文字刷格式★飞飛★2021.11.26
(setvar "cmdecho" 0)
(princ "\n刷标注、引线及文字,请点选-->源标注:")
(setq s1 (ssget ":E:S" (list '(0 . "DIMENSION,LEADER"))))
(setq z0 (ssname s1 0 ))
(setq z1 (vla-get-ScaleFactor (vlax-ename->vla-object z0 )));标注全局比例
(setq zg (* 3.5 z1 ));引线文字高度
;(princ "\n标注全局比例:" ) (princ z1 )
;(princ "\n引线文字高度:" ) (princ zg )
(princ "\n请选择范围:")
(setq fil (ssget (list '(0 . "DIMENSION,LEADER,*TEXT"))))
(command "MATCHPROP" s1 fil "" )
(repeat (setq i (sslength fil ))
(setq ss1 (ssname fil (setq i (1- i))))
(setq ed (entget ss1 ))
(progn (setq ed (subst (cons 40 zg )
(assoc 40 ed) ed))
(entmod ed))
(cond
((and(= 'ENAME (type ss1))(member (cdr(assoc 0 (entget ss1))) '("DIMENSION" "LEADER" ))) ;从选择集中过滤标注类图元
(vla-put-layer (vlax-ename->vla-object ss1) "BZ")
(COMMAND "CHPROP" ss1 "" "C" "BYLAYER" ""))
((and(= 'ENAME (type ss1))(member (cdr(assoc 0 (entget ss1))) '("TEXT" "MTEXT" ))) ;从选择集中过滤文字类图元
(vla-put-layer (vlax-ename->vla-object ss1) "BZ") ;更改的文字的图层
(vla-put-color (vlax-ename->vla-object ss1) 2)) ;更改的文字的颜色
) ;;cond
) ;;repeat
(vl-exit-with-error ())
(setvar "cmdecho" 1)
(princ)
)
页:
[1]