明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 495|回复: 5

[提问] 请教高手选中多个对象操作后,再部分操作的问题?

[复制链接]
发表于 2021-11-26 21:52:32 | 显示全部楼层 |阅读模式
本帖最后由 ★飞飛★ 于 2021-11-26 21:56 编辑

举例:
步骤1、已选中包含标注和文字两种对象,并对两种对象图层等操作完成;
步骤2、第一步完成后,在已选中的两种对象中,我还需要再对文字颜色进行操作,但标注的颜色不变,请问这用哪种lisp句子可以实现,谢谢高手指教!
说明:第二步不需要再用ssget等手工再选择一次,我自己在第一步完成后,用条件判断(过滤出文本对象)没有实现,可能句子没有写对。
发表于 2021-11-26 22:37:24 | 显示全部楼层
(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)
)
发表于 2021-11-26 22:39:24 | 显示全部楼层
不用操作完图层,再返回来操作颜色,独立处理每个图元的时候,直接把需要改的属性直接一次性都赋予了就行了呗
发表于 2021-11-27 15:00:13 | 显示全部楼层
用IF判断每个图元的群码0是不是“TEXT”,是的话改群码62颜色
发表于 2021-11-27 17:15:12 | 显示全部楼层
如果非要按照你自己的思路来:
第一步创建选择集时,增加一句话(setq ss2 (ssget "_p" '((0 . "TEXT")))
就能把第一步选择的对象中的所有文字作为选择集ss2

但这样编写代码就繁琐了,可以按照楼上几位的建议来做。


 楼主| 发表于 2021-12-4 12:59:34 | 显示全部楼层
本帖最后由 ★飞飛★ 于 2021-12-4 13:05 编辑

首先感谢@xj6019的思路和代码,感谢其他热心的朋友,大家互帮互助,所以这里我把我要实现的完整功能程序发出来,希望有能用到的朋友一些帮助。我这个速度还是有点慢,因为其中有几行command,如有高手有更简洁的建议或思路,希望不吝指教。
我要实现的功能:按标注样式的全局比例筛选出其它标注、引线及引线文字刷格式,即在画节点图的时候,对于不同的比例的节点图,可以点选前面已完成的节点图的相同比例标注,直接刷本节点图中的所有标注、引线及引线文字,引线文字高度自动更改为标准的标注全局比例的3.5倍(也可以自己修改倍数)。

  1. (defun c:Nb()  ;按标注样式的全局比例筛选出其它标注、引线及引线文字刷格式★飞飛★2021.11.26
  2.   (setvar "cmdecho" 0)
  3.   (princ "\n刷标注、引线及文字,请点选-->源标注:")
  4.   (setq s1 (ssget ":E:S" (list '(0 . "DIMENSION,LEADER"))))
  5.    (setq z0 (ssname s1 0 ))
  6.    (setq z1 (vla-get-ScaleFactor (vlax-ename->vla-object z0 )));标注全局比例
  7.    (setq zg (* 3.5 z1 ));引线文字高度
  8. ;  (princ "\n标注全局比例:" ) (princ z1 )
  9. ;  (princ "\n引线文字高度:" ) (princ zg )
  10.   (princ "\n请选择范围:")
  11. (setq fil (ssget (list '(0 . "DIMENSION,LEADER,*TEXT"))))
  12.    (command "MATCHPROP" s1 fil "" )
  13.   (repeat (setq i (sslength fil ))
  14.    (setq ss1 (ssname fil (setq i (1- i))))            
  15.    (setq ed (entget ss1 ))
  16.     (progn (setq ed (subst (cons 40 zg )
  17.                                (assoc 40 ed) ed))
  18.                  (entmod ed))
  19.     (cond
  20.                ((and(= 'ENAME (type ss1))(member (cdr(assoc 0 (entget ss1))) '("DIMENSION" "LEADER" ))) ;从选择集中过滤标注类图元
  21.                (vla-put-layer (vlax-ename->vla-object ss1) "BZ")
  22.                (COMMAND "CHPROP" ss1 "" "C" "BYLAYER" ""))
  23.                ((and(= 'ENAME (type ss1))(member (cdr(assoc 0 (entget ss1))) '("TEXT" "MTEXT" ))) ;从选择集中过滤文字类图元
  24.                (vla-put-layer (vlax-ename->vla-object ss1) "BZ") ;更改的文字的图层
  25.                (vla-put-color (vlax-ename->vla-object ss1) 2)) ;更改的文字的颜色
  26.     ) ;;cond
  27.     ) ;;repeat
  28.   (vl-exit-with-error ())
  29.   (setvar "cmdecho" 1)
  30.   (princ)
  31. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 06:45 , Processed in 0.164929 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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