明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1151|回复: 30

[提问] 尾数.00字串去除(已解决多谢飞雪神光大大帮忙及各位大大的解答)

[复制链接]
发表于 2023-12-28 21:42 | 显示全部楼层 |阅读模式
本帖最后由 wuwubaibai 于 2024-1-15 21:20 编辑

请问大大们~如果要达到以下的功能~该如何修改以下代码呢?感谢大大们
尾数.00字串去除~不是.00则不去除

(defun c:de3 ()
(setvar "cmdecho" 0)
(CClay "bend" 211 "2_正折")  
  (setq a (ssget "X" '((8 . "2_正折"))))
  (if (and (/= nil a) (/= 0 (sslength a)))
   (command "chprop" a "" "c" "bylayer" "La" "bend" "lt" "bylayer" "s" "1" "")   
  )

(command "ERASE"(ssget '((0 . "TEXT,MTEXT")(-4 . "<NOT")(1 . "*上*UP*,*上*up*,*下*down*,*下*DOWN*")(-4 . "NOT>")))  "" )

(setvar "CmdEcho" 1)
  (princ)
)

(defun CClay (layname cc sObjTyp) ;;;  layname
(if (= nil (tblsearch "layer" layname))
(command "-layer" "n" layname "c" cc layname "")
)
(setq SS  (ssget "x" (list (cons 0 sObjTyp) (cons 410 "Model"))))
(if (and (/= nil ss) (/= 0 (sslength SS)))
(command "chprop" SS "" "la" layname "")
)

(princ)
)








本帖子中包含更多资源

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

x
发表于 2024-1-1 10:03 | 显示全部楼层
  1. (defun c:de3 (/ a lm-entmake-layer ss ss-enlst str wz wz0 wz1 wz2 wz3)
  2.         (defun lm-entmake-layer(datalst)
  3.                 (mapcar'set '(tc co) datalst)
  4.                 (or co (setq co 256))
  5.                 (or tc (setq tc (getvar "clayer")))
  6.                 (entmake (list '(0 . "LAYER")'(100 . "AcDbSymbolTableRecord")'(100 . "AcDbLayerTableRecord")(cons 2 tc)(cons 62 co)'(70 . 0)'(6 . "CONTINUOUS")))
  7.         )
  8.         (defun ss-enlst (ss / enlst)
  9.                 (cond
  10.                         ((= (type ss) 'PICKSET)
  11.                                 (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex SS)))
  12.                         )
  13.                         ((= (type ss) 'LIST)
  14.                                 (setq enlst (ssadd))
  15.                                 (last (mapcar '(lambda (x) (ssadd x enlst)) ss))
  16.                         )
  17.                 )
  18.         )
  19.         (if (null (tblsearch "layer" "2_正折"))
  20.                 (lm-entmake-layer (list "2_正折" 211))
  21.         )
  22.         (setq a (ssget "X" '((8 . "2_正折"))))
  23.         (foreach ty (ss-enlst a)
  24.                 (vla-put-Layer (vlax-ename->vla-object ty) "bend")
  25.         )
  26.   (setq ss (ssget '((0 . "*TEXT") (1 . "上DOWN*,下DOWN*"))))
  27.   (foreach ty (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex ss)))
  28.     (setq str (vla-get-TextString (vlax-ename->vla-object ty)))
  29.     (setq wz (vl-string-search "." str))
  30.     (if wz
  31.       (progn
  32.         (setq wz0 (substr str (+ wz 1) 3))
  33.         (if (= wz0 ".00")
  34.           (progn
  35.             (setq wz1 (substr str 1 wz))
  36.             (setq wz2 (substr str (+ wz 4)))
  37.             (setq wz3 (strcat wz1 wz2))
  38.             (vla-put-TextString (vlax-ename->vla-object ty) wz3)
  39.           )
  40.         )
  41.       )
  42.     )
  43.   )
  44.   (princ)
  45. )
回复 支持 1 反对 0

使用道具 举报

发表于 2023-12-30 13:47 | 显示全部楼层
本帖最后由 llsheng_73 于 2023-12-31 09:13 编辑
wuwubaibai 发表于 2023-12-30 02:33
请问这个过滤出来后还是得去0呀!前面的数字我还要

  1. (defun delstr(str chars)
  2.   (while(vl-string-search chars str)
  3.     (setq str(VL-STRING-SUBST""chars str)))
  4.   str)
  5. (defun c:tt(/ e s)
  6.   (if(setq s(ssget'((0 . "text")(1 . "*.00*"))))
  7.     (while(setq e(ssname s 0))
  8.       (ssdel e s)
  9.       (entmod(list(cons -1 e)(cons 1(delstr(cdr(assoc 1(entget e)))".00"))(cons 8 "bend"))))
  10.     ))
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-12-30 02:38 | 显示全部楼层
飞雪神光 发表于 2023-12-29 10:23
"(ssget  "X" '((0 . "TEXT,MTEXT")(-4 . "")))

加了以后完全选不到东西了~还在研究中
defun c:de3 (/ ss str wz wz0 wz1 wz2 wz3)
(setvar "cmdecho" 0)
(CClay "bend" 211 "2_正折")  
  (setq a (ssget "X" '((8 . "2_正折"))))
  (if (and (/= nil a) (/= 0 (sslength a)))
   (command "chprop" a "" "c" "bylayer" "La" "bend" "lt" "bylayer" "s" "1" "")   
  )
        (setq ss (ssget '((0 . "*TEXT") (1 . "上DOWN*,下DOWN*"))))
        (foreach ty (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex ss)))
                (setq str (vla-get-TextString (vlax-ename->vla-object ty)))
                (vl-string-right-trim ".00" str)
                (vl-string-right-trim "." (vl-string-right-trim "0" str))
                (setq wz (vl-string-search "." str))
                (if wz
                        (progn
                                (setq wz0 (substr str (+ wz 1) 3))
                                (if (= wz0 ".00")
                                        (progn
                                                (setq wz1 (substr str 1 wz))
                                                (setq wz2 (substr str (+ wz 4)))
                                                (setq wz3 (strcat wz1 wz2))
                                                (vla-put-TextString (vlax-ename->vla-object ty) wz3)
                                        )
                                )
                        )
                )
        )

command "ERASE"(ssget  "X" '((0 . "TEXT,MTEXT")(-4 . "<NOT")(1 . "*上*UP*,*上*up*,*下*down*,*下*DOWN*")(-4 . "NOT>")))
(setvar "CmdEcho" 1)
        (princ)
)

(defun CClay (layname cc sObjTyp) ;;;  layname
(if (= nil (tblsearch "layer" layname))
(command "-layer" "n" layname "c" cc layname "")
)
(setq SS  (ssget "x" (list (cons 0 sObjTyp) (cons 410 "Model"))))
(if (and (/= nil ss) (/= 0 (sslength SS)))
(command "chprop" SS "" "la" layname "")
)

(princ)
)
发表于 2023-12-28 22:27 | 显示全部楼层
一看就是AI写的  这用find命令替换不就行了
 楼主| 发表于 2023-12-28 22:40 | 显示全部楼层
飞雪神光 发表于 2023-12-28 22:27
一看就是AI写的  这用find命令替换不就行了

不是AI写的
是不才的我找资料东拼西凑出来的
因为不懂LISP只能找寻大量资料
但也只能拼凑到这样了
发表于 2023-12-28 22:48 | 显示全部楼层
本帖最后由 飞雪神光 于 2023-12-31 16:06 编辑

好吧 能凑成这样也是不容易
  1. (defun c:de3 (/ ss str wz wz0 wz1 wz2 wz3)
  2.   (setq ss (ssget '((0 . "*TEXT") (1 . "上DOWN*,下DOWN*"))))
  3.   (foreach ty (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex ss)))
  4.     (setq str (vla-get-TextString (vlax-ename->vla-object ty)))
  5.     (setq wz (vl-string-search "." str))
  6.     (if wz
  7.       (progn
  8.         (setq wz0 (substr str (+ wz 1) 3))
  9.         (if (= wz0 ".00")
  10.           (progn
  11.             (setq wz1 (substr str 1 wz))
  12.             (setq wz2 (substr str (+ wz 4)))
  13.             (setq wz3 (strcat wz1 wz2))
  14.             (vla-put-TextString (vlax-ename->vla-object ty) wz3)
  15.           )
  16.         )
  17.       )
  18.     )
  19.   )
  20.   (princ)
  21. )
发表于 2023-12-28 22:48 | 显示全部楼层
取出末尾数字(自己搜)---然后atof---判断(= (fix a) a)--再转字符串连接
 楼主| 发表于 2023-12-28 22:53 | 显示全部楼层
飞雪神光 发表于 2023-12-28 22:48
好吧 能凑成这样也是不容易

非常感谢大大~可以实现~~剩下我应该凑一凑就能把图层搞定了~~感谢您
 楼主| 发表于 2023-12-28 23:02 | 显示全部楼层
wzg356 发表于 2023-12-28 22:48
取出末尾数字(自己搜)---然后atof---判断(= (fix a) a)--再转字符串连接

谢谢大大的提示~但其实已经搜很久了~对一个门外汉来说已经到极限了~只能求助了
 楼主| 发表于 2023-12-29 02:03 | 显示全部楼层
飞雪神光 发表于 2023-12-28 22:48
好吧 能凑成这样也是不容易

大大抱歉再请问一下~.00解决了~图层我也改好了~
不过在
(princ)
)
前加上这句
(command "ERASE"(ssget '((0 . "TEXT,MTEXT")(-4 . "<NOT")(1 . "*上*UP*,*上*up*,*下*down*,*下*DOWN*")(-4 . "NOT>")))  "" )
~那我得再重选一次才能把其他的注释去除~能否只选一次就完成了呢?感谢您
发表于 2023-12-29 09:57 | 显示全部楼层
wuwubaibai 发表于 2023-12-29 02:03
大大抱歉再请问一下~.00解决了~图层我也改好了~
不过在
(princ)

论坛上有选择集相减这个函数,选择后过滤一次就可以了吧
发表于 2023-12-29 10:23 | 显示全部楼层
wuwubaibai 发表于 2023-12-29 02:03
大大抱歉再请问一下~.00解决了~图层我也改好了~
不过在
(princ)

"(ssget  "X" '((0 . "TEXT,MTEXT")(-4 . "<NOT")(1 . "*上*UP*,*上*up*,*下*down*,*下*DOWN*")(-4 . "NOT>")))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-9 18:13 , Processed in 0.154167 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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