shakey230 发表于 2022-7-6 08:09:49

需要口齿不清的帮助吗

嗨,peeps。
 
有一个来自autodesk的lisp我已经稍微修改过了,现在做的是删除重复的文本字符串。
我需要你们中的一个好人做的是,不要删除重复的文本字符串,我想把它变成红色。
提前谢谢,非常感谢。
 
(定义c:deldup1\u txt(/ss ssdup ct len e eb)
pt lay ang sty hgt str obj obj_列表)
(princ“\n选择文本对象。”);选择对象并过滤除块插入对象之外的所有对象。
(setq ss(ssget(列表(cons 0“TEXT”)))
(如果ss;如果选择了任何有效对象。
(程序
(princ“\n构建对象列表。”)
(setq ssdup(ssadd));初始化新选择集以保留要删除的对象
(setq len(sslength ss));找出选择了多少个对象。
(setq ct 0)
(虽然(
(setq e(ssname ss ct));获取对象名称
(setq eb(entget e));从对象名称获取实体列表
(setq ct(+ct 1));将索引增加到选择集中
(setq str(cdr(assoc 1 eb));访问对象的文本字符串
;列出对象属性
(setq obj(列表pt lay ang sty hgt str))
(如果(不是(成员obj obj_列表));如果这些属性不在列表中
(setq obj_列表(cons obj obj_列表));将其添加到列表中
(ssadd e ssdup);否则,将对象添加到选择集以删除
)                                    ;如果结束
)                                       ;while循环结束
(如果(>(sslength ssdup)0);如果选择集中有任何要删除的对象
(程序
(原理“\n删除重复对象。”)
(setq len(sslength ssdup));找出要删除多少个对象。
(setq ct 0)
(虽然(
(setq e(ssname ssdup ct));获取对象名称
(setq ct(+ct 1));将索引增加到选择集中
(entdel e);删除重复对象
)                                    ;while循环结束
(princ;打印删除到命令行的对象数
(strcat“\n已删除”
(itoa len)
“复制对象。”
))
)                                       ;结束程序
(princ“\n未找到重复项。”);否则没有要删除的重复项。
)                                       ;如果结束
)                                          ;结束程序
(princ“\n未选择文本对象。”);否则没有选择有效的对象
)                                          ;如果结束
(普林斯)
)

Tiger 发表于 2022-7-6 08:19:08

啊哼。代码发布指南。

shakey230 发表于 2022-7-6 08:24:27

新来的网站吗?

Tiger 发表于 2022-7-6 08:29:06

是的,我注意到了,这就是为什么我在没有棍子威胁的情况下为你指出了正确的方向

MSasu 发表于 2022-7-6 08:30:20

请检查这是否是您想要的(红色变化):
 
(defun c:deldup1_txt(/ ss ssdup ct len e eb pt lay ang sty hgt str obj obj_list)
(princ "\nSelect text objects.")       ;Select objects and filter all but block insert objects.
(setq ss (ssget (list (cons 0 "TEXT"))))
(if ss                                 ;If any valid objects were selected.
(progn
(princ "\nBuilding list of objects.")
(setq ssdup (ssadd))               ;Initialize new selection set to hold objects to delete
(setq len (sslength ss))             ;Find out how many objects were selected.
(setq ct 0)
(while (< ct len)                  ;Loop through selected objects
   (setq e (ssname ss ct))             ;Get an object name
   (setq eb (entget e))                ;Get the entity list from the object name
   (setq ct (+ ct 1))                  ;Increment index into selection set
   (setq str (cdr (assoc 1 eb)))       ;Access object's text string
                                       ;Make list of object properties
   (setq obj (list pt lay ang sty hgt str))
   (if (not (member obj obj_list))   ;If these properties are not already in list
    (setq obj_list (cons obj obj_list)) ;Add them to the list
    (ssadd e ssdup)                  ;Else add object to selection set to delete
    )                                  ;End if
   )                                 ;End of while loop
(if (> (sslength ssdup) 0)         ;If there are any objects in the selection set to delete
   (progn
    (princ "\nMarking duplicate objects.")
    (setq len (sslength ssdup))      ;Find out how many many objects to delete.
    (setq ct 0)
    (while (< ct len)                  ;Loop through objects and delete.
   (setq e (ssname ssdup ct))      ;Get object name
   (setq ct (+ ct 1))                ;Increment index into selection set
;      (entdel e)                        ;Delete duplicate object
   (command "_CHPROP" e "" "_C" 1 "")
   )                                 ;End of while loop
    (princ                           ;Print the number of objects deleted to command line
   (strcat "\n"
             (itoa len)
             " duplicate objects colored in RED."
             ))
    )                                  ;End progn
   (princ "\nNo duplicates found.")    ;Else no there were no duplicates to delete.
   )                                 ;End if
)                                    ;End progn
(princ "\nNo text objects selected.") ;Else there were no valid objects selected
)                                     ;End if
(princ)
)
 
当做
米尔恰

shakey230 发表于 2022-7-6 08:37:30

很好吃谢谢

MSasu 发表于 2022-7-6 08:44:14

欢迎你!
 
此外,请编辑您的第一篇文章,添加这些代码括号,它会看起来更好。
 
当做
米尔恰

pBe 发表于 2022-7-6 08:49:17

不管好坏
 

(defun C:dupsamestr(/ ss e lst str)
   (vl-load-com)
   (if (setq lst nil
               ss(ssget ":L" '((0 . "TEXT"))))
         (repeat (setq i (sslength ss))
               (setq e (ssname ss 0))
               (if (setq f (member (setq str(cdr (assoc
                                                         1
                                                         (entget e))))
                                     lst))
                     (vla-put-color (vlax-ename->vla-object e) 1)
                     (setq lst (cons str lst))
                     )
               (ssdel e ss)
               )
         )
   (princ (strcat "\nFound "
                  (itoa (- i (length lst) ))
                  " Duplicate String"))
   (princ)
   )

MSasu 发表于 2022-7-6 08:50:42

很好的解决方案pBe。
如果你不介意的话,请发表一条评论;恐怕您的复制件柜台有问题:
 
(itoa (- i (length lst) (length lst)))
 
当做
米尔恰

pBe 发表于 2022-7-6 08:59:27

 
[代码更新]
抓得好Mircea。我复制粘贴过多。
 
干杯
页: [1] 2
查看完整版本: 需要Lisp程序的帮助吗