明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 827|回复: 4

[提问] 小弟是新手,百思不得其解请大神帮下忙写个lisp代码

[复制链接]
发表于 2016-10-27 21:50:53 | 显示全部楼层 |阅读模式
问题如图:在众多文字对象中,怎么把KL1所在的四排文字+旁边的直线选中,变成黄色文字,并且不能误选其他对象KL2,KL3,KL4        小弟我用的是很笨的方法:先识别KL1,然后选择角度相等的文字

(setq ss1 (ssget "x" '((8 . "梁集中标注") (0 . "TEXT") (1 . "KL1*")))  ;提取 图层梁集中标注+文字+内容L开头
         n1  (sslength ss1)
         index1 0
  );setq end
  (repeat n1
    (setq ent1 (entget (ssname ss1 index1))    ;返回ent1为组码信息表
          index1 (1+ index1)
          jd  (cdr(assoc 50 ent1))                ;L字符角度
          zb1 (cdr(assoc 10 ent1))                ;L字符起点坐标点A
          zb2 (polar zb1 (+ jd (/ pi 4)) (* 50 (sqrt 2)))
          zb3 (polar zb2 (+ jd (/ pi 2)) -1200)
          zb4 (polar zb2 jd -150)
          zb5 (polar zb3 jd -150)
          ss2 (ssget "cp" (list zb2 zb3 zb5 zb4) (list (cons 8 "梁集中标注") (cons 0 "TEXT")
                                                 (cons -4  ">") (cons 50  (- jd 0.001))
                                                 (cons -4  "<") (cons 50  (+ jd 0.001))));提取L附近角度误差0.001的文字
         ss2a (ssget "cp" (list zb2 zb3 zb5 zb4) (list (cons 8 "梁集中标注") (cons 0 "TEXT")
                                                       (cons 50 jd)))                     ;提取L附近角度相同的文字
    );setq end
              (command "change" ss2 "" "P" "la" "次梁-集中标注" "")
              (command "change" ss2a "" "P" "la" "次梁-集中标注" "")
          
        ==========================================================================
        (setq ss3 (ssget "cp" (list zb2 zb3 zb5 zb4) '((8 . "梁集中标注") (0 . "LINE")));提取L字符附近直线
              n3  (sslength ss3)
              index3 0
        );setq end
        (repeat n3    ;处理角度垂直的直线
          (setq ent3 (entget (ssname ss3 index3))
                entname3 (ssname ss3 index3)
                index3 (1+ index3)
                zb6 (cdr(assoc 10 ent3))   ;直线起点坐标
                zb7 (cdr(assoc 11 ent3))   ;直线终点坐标
                jd3 (angle zb6 zb7)        ;直线角度
          );setq end
          (if (or (equal jd3 (+ jd (/ pi 2)) 0.001) (equal jd3 (- jd (* pi 1.5)) 0.001)
                  (equal jd3 (- jd (/ pi 2)) 0.001) (equal jd3 (+ jd (* pi 1.5)) 0.001))
              (command "change" entname3 "" "P" "la" "次梁-集中标注" "")   
          );if end
        );repead3 end  处理角度垂直的直线完毕
  );repead1 end
)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2016-10-28 00:07:16 | 显示全部楼层
用萝卜大神的随心移就行啦,已经免费了,何必自己花时间去写呢,除非你时间多。
 楼主| 发表于 2016-10-28 14:38:54 | 显示全部楼层
evayleung 发表于 2016-10-28 00:07
用萝卜大神的随心移就行啦,已经免费了,何必自己花时间去写呢,除非你时间多。

在不移动的前提下,变换对象属性,好像要用到编组的功能,是不?
发表于 2016-10-30 09:58:25 | 显示全部楼层
根据逻辑关系很难选择的(主要是容易误操作)
最好的处理方法在标注的时候在各个元素上附加拓展属性
再根据拓展属性去获取选择集
个人想法仅供参考
发表于 2016-11-4 09:56:12 | 显示全部楼层
llsheng_73 发表于 2016-10-30 10:44
根据直线来选那些文字应该要容易一些,因为那些文字的方西看起来都和直线的方向垂直,其实是那些文字应该都 ...

这个思路不错的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-20 01:06 , Processed in 0.180797 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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