本帖最后由 ★飞飛★ 于 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)
- )
|