明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3296|回复: 31

[提问] 固定的几个前缀字符,该如何实现自动切换呢

[复制链接]
发表于 2020-3-8 22:39:17 | 显示全部楼层 |阅读模式
请教下大侠们,如果想有个列表DN*  dn*  De*  Dw*  D*  等几个固定的的前缀字符(*号代表数值),想通过一个命令自动切换,比如点击DN15自动变成dn15,再点击自动变成De15,再点击自动变成Dw15,这样的可以实现吗
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2020-3-15 00:05:44 | 显示全部楼层
tryhi 发表于 2020-3-9 17:51
(defun c:tt (/ dat en i lst str str1 x x0 x1)
        (setq lst '("DN*"  "dn*"  "De*"  "Dw*"  "D*"))        
        (w ...
大侠,我想中间想加一组"JS*"  "JZ*"  "JG*",需要用什么来隔断下呢
(defun c:TT7 (/ dat en i lst str str1 x x0 x1)
        (setq lst '( "DN*"  "dn*"  "De*" "JS*"  "JZ*"  "JG*" ))        
        (while (setq en(car(entsel "\n请选择对象:")))
                (setq dat(entget en)
                        str1(assoc 1 dat)
                        str(cdr str1)
                        i -1
                )
                (if(vl-some '(lambda(x)(setq i(1+ i))(wcmatch str x))lst)
                        (progn
                                (setq
                                        x0(substr(nth i lst)1(1-(strlen (nth i lst))))
                                        i(if(= (1+ i) (length lst))0(1+ i))
                                        x(substr(nth i lst)1(1-(strlen (nth i lst))))
                                        x1(substr str (1+(strlen x0)))
                                )
                                (entmod(subst (cons 1(strcat x x1))str1 dat))
                        )
                )
        )
)
发表于 2020-10-6 14:35:58 | 显示全部楼层
本帖最后由 masterlong 于 2020-10-6 14:42 编辑

为啥要一定要纠结于“轮换”?
借助doslib搞个弹出式菜单
不是很简单的事吗?
用GETINT在命令行做选择题
或者GETSTRING直接输入要换的字符
也没多复杂

需要的doslib函数库
在这里下
http://bbs.mjtd.com/thread-173225-1-1.html



(defun c:tt()
(command "undo" "g")
(setq xxlist '("dn" "de" "" "jg" "pc" "sc"))   ;;字符串列表随意增减,区分大小写,""表示分割线
(setq yylist (vl-remove "" xxlist))
(setq zzlist (mapcar ''((z) (strcat z "*")) yylist))
(setq zzstr (list2str zzlist ","))

(if (and
    (setq ss (ssget (list '(0 . "text")(cons 1 zzstr))))
    (setq id (dos_popupmenu xxlist))
    (setq xx (nth id yylist))
  )
  (foreach tt (ss2list ss)
   (setq str (cdr (assoc 1 (entget tt))))
   (setq tmp (vl-remove-if-not  ''((z) (wcmatch str z)) zzlist))
   (setq tmp (car tmp))
   (setq tmp (substr tmp 1 (1- (strlen tmp))))
   (setq newstr (dos_strreplace str tmp xx))
   (entmod (list (cons -1 tt) (cons 1 newstr)))
  )
)
(command "undo" "e")
(princ)
)
;999公共函数
;;字符串列表采用分隔符连接成字符串——————本函数未加入错误判别 a.strlist是否表 b.表中元素是否都为字符串 c.ken是否字符串
(defun list2str( strlist ken / str )
(setq str (car strlist))
(foreach x (cdr strlist)
  (setq str (strcat str ken x))
)
str
)
;999公共函数
;;选择集转为图元列表
(defun ss2list ( ss / n i elist )
(cond
  ((null ss) NIL)
  ((= (type ss) 'Pickset)
   (setq n  (sslength ss)
     i n
     elist '()
   )
   (repeat n
    (setq i (1- i))
    ;;如果没有这个if,那么选择集中被删除的图元,也会被加入到列表之中————但是极其偶尔也有可能,图元不存在但是能entget(遇到过一次,原因不明,或许是CAD的BUG)
    (if (entget (ssname ss i))
     (setq elist (cons (ssname ss i) elist))
    )
   )
   elist
  )
  ((= (type ss) 'ename)
   (list ss)
  )
  ((= (type ss) 'list)
   (vl-remove-if-not ''((x) (and (= (type x) 'ename) (entget x))) ss)
  )
  ( T NIL )
)
)











本帖子中包含更多资源

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

x
发表于 2020-3-9 17:51:53 | 显示全部楼层
(defun c:tt (/ dat en i lst str str1 x x0 x1)
        (setq lst '("DN*"  "dn*"  "De*"  "Dw*"  "D*"))       
        (while (setq en(car(entsel "\n请选择对象:")))
                (setq dat(entget en)
                        str1(assoc 1 dat)
                        str(cdr str1)
                        i -1
                )
                (if(vl-some '(lambda(x)(setq i(1+ i))(wcmatch str x))lst)
                        (progn
                                (setq
                                        x0(substr(nth i lst)1(1-(strlen (nth i lst))))
                                        i(if(= (1+ i) (length lst))0(1+ i))
                                        x(substr(nth i lst)1(1-(strlen (nth i lst))))
                                        x1(substr str (1+(strlen x0)))
                                )
                                (entmod(subst (cons 1(strcat x x1))str1 dat))
                        )
                )
        )
)

评分

参与人数 1明经币 +1 收起 理由
mingjing9971 + 1

查看全部评分

发表于 2020-3-9 11:19:07 | 显示全部楼层
(defun C:tt5(/ entname i lst new_str)
(setq lst (list "DN15"  "dn15"  "De15"  "Dw15"  "D15") i -1)
(while         (setq entname (car (entsel "\n请选择对象:")))
        (setq  new_str (nth (setq i (1+ i)) lst))
                     (entmod (subst (cons 1 new_str ) (assoc 1 (entget entname)) (entget entname)))
              (if (= (1+ i) (length lst)) (setq i -1))       
        );while       
(princ)
)
 楼主| 发表于 2020-3-9 11:42:31 | 显示全部楼层
本帖最后由 magicheno 于 2020-3-9 11:43 编辑
start4444 发表于 2020-3-9 11:19
(defun C:tt5(/ entname i lst new_str)
(setq lst (list "DN15"  "dn15"  "De15"  "Dw15"  "D15") i -1) ...

感谢大侠,这个貌似只针队15尾数的吧,如果是DN25 40 50  这样尾数的就不行了吧,想法是不管是DN15 25 32 等都变成dn25 32 40,De15 32 40 等等这样的如果吧数字改成*号,后续可行吗

点评

(list "DN15" "dn15" "De15" "Dw15" "D15") 表里面你想要什么自己修改 排进去就是了  发表于 2020-3-9 11:46
 楼主| 发表于 2020-3-9 12:08:17 | 显示全部楼层
magicheno 发表于 2020-3-9 11:42
感谢大侠,这个貌似只针队15尾数的吧,如果是DN25 40 50  这样尾数的就不行了吧,想法是不管是DN15 25 32 ...

感谢感谢哈,就是排的相对多点哈, "DN15"  "dn15"  "De15"  "Dw15"  "D15" nil "DN20"  "dn20"  "De20"  "Dw20"  "D20" nil "DN25"  "dn25"  "De25"  "Dw25"  "D25" nil "DN32"  "dn32"  "De32"  "Dw32"  "D32" nil "DN40"  "dn40"  "De40"  "Dw40"  "D40" nil 后续一直到300,有点长
发表于 2020-3-9 12:14:34 | 显示全部楼层
这个有点难,先要判断对象后面第几位是数字,然后才能替换前面的文字(前缀)。
发表于 2020-3-9 12:18:38 | 显示全部楼层
magicheno 发表于 2020-3-9 12:08
感谢感谢哈,就是排的相对多点哈, "DN15"  "dn15"  "De15"  "Dw15"  "D15" nil "DN20"  "dn20"  "De20"  ...

感觉你的思路都不对,那么多你说点一下换一个,后面的要换到啥时候
 楼主| 发表于 2020-3-9 12:24:58 | 显示全部楼层
start4444 发表于 2020-3-9 12:18
感觉你的思路都不对,那么多你说点一下换一个,后面的要换到啥时候

是的,就是前缀是字母字符,后面是数值,不管后面数值是多少可能是15 20 25 32,通过命令只改变前缀字符的DN到dn到De等等的
发表于 2020-3-9 16:14:02 | 显示全部楼层
帮你顶一下,很想知道怎么替换前缀。请大神出手!
发表于 2020-3-9 16:51:40 | 显示全部楼层
楼主是想复用图纸么?不如直接替换到。否则就算能点,要点到何时才能换到自己需要的?
 楼主| 发表于 2020-3-9 17:41:12 | 显示全部楼层
mikewolf2k 发表于 2020-3-9 16:51
楼主是想复用图纸么?不如直接替换到。否则就算能点,要点到何时才能换到自己需要的?

不会很慢啊,只要想要替换的,替换掉前缀就好了,可以提高很多效率的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-18 14:00 , Processed in 0.213285 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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