乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 56|回复: 12

[编程交流] 需要Lisp程序的帮助吗

[复制链接]

9

主题

24

帖子

15

银币

初来乍到

Rank: 1

铜币
45
发表于 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未选择文本对象。”);否则没有选择有效的对象
)                                            ;如果结束
(普林斯)
)
回复

使用道具 举报

14

主题

719

帖子

706

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 08:19:08 | 显示全部楼层
啊哼。代码发布指南。
回复

使用道具 举报

9

主题

24

帖子

15

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 08:24:27 | 显示全部楼层
新来的网站吗?
回复

使用道具 举报

14

主题

719

帖子

706

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 08:29:06 | 显示全部楼层
是的,我注意到了,这就是为什么我在没有棍子威胁的情况下为你指出了正确的方向
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:30:20 | 显示全部楼层
请检查这是否是您想要的(红色变化):
 
  1. (defun c:deldup1_txt  (/ ss ssdup ct len e eb pt lay ang sty hgt str obj obj_list)
  2. (princ "\nSelect text objects.")       ;Select objects and filter all but block insert objects.
  3. (setq ss (ssget (list (cons 0 "TEXT"))))
  4. (if ss                                 ;If any valid objects were selected.
  5. (progn
  6.   (princ "\nBuilding list of objects.")
  7.   (setq ssdup (ssadd))                 ;Initialize new selection set to hold objects to delete
  8.   (setq len (sslength ss))             ;Find out how many objects were selected.
  9.   (setq ct 0)
  10.   (while (< ct len)                    ;Loop through selected objects
  11.    (setq e (ssname ss ct))             ;Get an object name
  12.    (setq eb (entget e))                ;Get the entity list from the object name
  13.    (setq ct (+ ct 1))                  ;Increment index into selection set
  14.    (setq str (cdr (assoc 1 eb)))       ;Access object's text string
  15.                                        ;Make list of object properties
  16.    (setq obj (list pt lay ang sty hgt str))
  17.    (if (not (member obj obj_list))     ;If these properties are not already in list
  18.     (setq obj_list (cons obj obj_list)) ;Add them to the list
  19.     (ssadd e ssdup)                    ;Else add object to selection set to delete
  20.     )                                  ;End if
  21.    )                                   ;End of while loop
  22.   (if (> (sslength ssdup) 0)           ;If there are any objects in the selection set to delete
  23.    (progn
  24.     [color=red](princ "\n[color=red]Marking [/color]duplicate objects.")
  25. [/color]    (setq len (sslength ssdup))        ;Find out how many many objects to delete.
  26.     (setq ct 0)
  27.     (while (< ct len)                  ;Loop through objects and delete.
  28.      (setq e (ssname ssdup ct))        ;Get object name
  29.      (setq ct (+ ct 1))                ;Increment index into selection set
  30. [color=red];      (entdel e)                        ;Delete duplicate object[/color]
  31. [color=red]     (command "_CHPROP" e "" "_C" 1 "")[/color]
  32.      )                                 ;End of while loop
  33.     (princ                             ;Print the number of objects deleted to command line
  34. [color=red]     (strcat "\n"[/color]
  35. [color=red]             (itoa len)[/color]
  36. [color=red]             " duplicate objects colored in RED."[/color]
  37. [color=red]             ))[/color]
  38.     )                                  ;End progn
  39.    (princ "\nNo duplicates found.")    ;Else no there were no duplicates to delete.
  40.    )                                   ;End if
  41.   )                                    ;End progn
  42. (princ "\nNo text objects selected.") ;Else there were no valid objects selected
  43. )                                     ;End if
  44. (princ)
  45. )

 
当做
米尔恰
回复

使用道具 举报

9

主题

24

帖子

15

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 08:37:30 | 显示全部楼层
很好吃谢谢
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:44:14 | 显示全部楼层
欢迎你!
 
此外,请编辑您的第一篇文章,添加这些代码括号,它会看起来更好。
 
当做
米尔恰
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 08:49:17 | 显示全部楼层
不管好坏
 
  1. (defun C:dupsamestr  (/ ss e lst str)
  2.      (vl-load-com)
  3.      (if (setq lst nil
  4.                ss  (ssget ":L" '((0 . "TEXT"))))
  5.            (repeat (setq i (sslength ss))
  6.                  (setq e (ssname ss 0))
  7.                  (if (setq f (member (setq str  (cdr (assoc
  8.                                                            1
  9.                                                            (entget e))))
  10.                                      lst))
  11.                        (vla-put-color (vlax-ename->vla-object e) 1)
  12.                        (setq lst (cons str lst))
  13.                        )
  14.                  (ssdel e ss)
  15.                  )
  16.            )
  17.      (princ (strcat "\nFound "
  18.                     (itoa (- i (length lst) ))
  19.                     " Duplicate String"))
  20.      (princ)
  21.      )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:50:42 | 显示全部楼层
很好的解决方案pBe。
如果你不介意的话,请发表一条评论;恐怕您的复制件柜台有问题:
 
  1. (itoa (- i (length lst) [color=red](length lst)[/color]))

 
当做
米尔恰
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 08:59:27 | 显示全部楼层
 
[代码更新]
抓得好Mircea。我复制粘贴过多。
 
干杯
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-9 08:49 , Processed in 0.722189 second(s), 83 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表