乐筑天下

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

[编程交流] 选择ob的LISP语言

[复制链接]

2

主题

6

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:47:56 | 显示全部楼层 |阅读模式
大家好,
 
这是我第一次在这个论坛上,所以请原谅我,如果这已经张贴了。我正在尝试编写一个lisp例程,im noob as on lisps,我正在尝试执行以下操作:
 
;;=============================================
;;
;;  描述:围绕选定的多重引线实体放置光晕效果。
;;
;;  注意:这适用于AutoCAD形状文件和非True Type字体。
;;
;;=============================================
(定义c:halo()
(setq FLTR’(-4)。(0。“多重引线”)
(-4.“或>”)
)
)
(Princ“\n选择多重引线到光环(不能是true type字体)……”)
(princ“\n选择要处理的实体后按ENTER…”
(setq SS(ssget FLTR))
(命令“_.copy”ss”““0,0”“0,0”)
(命令“_.layer”“m”“halotext255”“c”“255”“”“lw”“2”“”“”)
(命令“_.chprop”ss“_la”“halotext255”“p”“c”“bylayer”)
;(命令“_.draworder”ss”“a”“p”)
)
 
 
现在,我想做的是,我使用quickselect,我想选择层“halotext255”上的所有多重引线,分解它们,然后选择分解的leaeder(层“halotext255”上的1 x实心线、1 x多段线和1 x直线)并删除它们,只在多重引线的文本下面留下多行文字。
 
非常感谢您的任何建议/帮助。
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

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

铜币
262
发表于 2022-7-6 08:00:58 | 显示全部楼层
-在创建对象方面,First Entmake优于command
而不是
  1. (command "_.layer" "m" "halotext255" "c" "255" "" "lw" "2" "" "")

使用
  1.   (entmake (list (cons 0 "LAYER")
  2.                 (cons 100 "AcDbSymbolTableRecord")
  3.                 (cons 100 "AcDbLayerTableRecord")
  4.                 (cons 2  Nme)
  5.                 (cons 70 0)
  6.                 (cons 62 Col)
  7.                 (cons 6 Ltyp)
  8.                 (cons 290 Plt)
  9.                 (cons 370 LWgt)))

DXF代码使用AutoCAD 2011 DXF参考
 
-不要使用不需要的变量
而不是
  1. (setq FLTR '((-4 . "<OR") (0 . "MULTILEADER") (-4 . "OR>")))
  2. (setq SS (ssget FLTR))

使用
  1. (setq SS (ssget '((-4 . "<OR") (0 . "MULTILEADER") (-4 . "OR>"))))

 
PS:参考代码发布指南
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:01:33 | 显示全部楼层
使用EXPLODE命令打断多重引线实体,并记住此操作的结果存储为以前的选择集;接下来,解析它以仅保留所需的实体。
只要您只查找一种类型,就不需要逻辑过滤器:
  1. (setq FLTR '([s][color=red](-4 . "<OR")[/color][/s]
  2.             (0 . "MULTILEADER")
  3.             [s][color=red](-4 . "OR>")[/color][/s]
  4.            )
  5. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:13:29 | 显示全部楼层
这个例子可以帮助您:
  1. (if (setq ssetMLeaders (ssget "_:S" '((0 . "MULTILEADER"))))
  2. (progn
  3. (command "_EXPLODE" (ssname ssetMLeaders 0))
  4. (setq ssetItems (ssget "_P"))
  5. (repeat (setq index (sslength ssetItems))
  6.   (setq assocItem (entget (ssname ssetItems (setq index (1- index)))))
  7.   (if (/= (cdr (assoc 0 assocItem))
  8.           "MTEXT")
  9.    (entdel (cdr (assoc -1 assocItem)))
  10.   )
  11. )
  12. )
  13. )
回复

使用道具 举报

2

主题

6

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 08:15:42 | 显示全部楼层
 
MSasu,
 
该代码可以工作,但有没有一种方法可以设置代码,这样我就不必手动选择它,我可以为该代码“选择上一个”吗,这就是我如何将其输入到我的代码中的方法:
 
  1. ;;  Description: Place a HALO effect around selected multileader entities.
  2. ;;
  3. ;;  Note: This works for AutoCAD shape files and not True Type Fonts.
  4. ;;
  5. ;;=============================================
  6. (defun c:halo ()
  7. (setq FLTR '( (-4 . "<OR")
  8.               (0 . "MULTILEADER")
  9.              (-4 . "OR>")
  10.            )
  11. )
  12. (Princ "\nSelect Multileader to HALO (CAN NOT be a true type font)...")
  13. (princ "\nPress ENTER after selecting entities to process them...")
  14. (setq SS (ssget FLTR))
  15. (command "_.copy" ss "" "0,0" "0,0")
  16. (command "_.layer" "m" "halotext255" "c" "255" "" "lw" "2" "" "")
  17. (command "_.chprop" ss "" "_la" "halotext255" "p" "c" "bylayer" "")
  18. (if (setq ssetMLeaders (ssget "_:S" '((0 . "MULTILEADER"))))
  19. (progn
  20. (command "_EXPLODE" (ssname ssetMLeaders 0))
  21. (setq ssetItems (ssget "_P"))
  22. (repeat (setq index (sslength ssetItems))
  23.   (setq assocItem (entget (ssname ssetItems (setq index (1- index)))))
  24.   (if (/= (cdr (assoc 0 assocItem))
  25.           "MTEXT")
  26.    (entdel (cdr (assoc -1 assocItem)))
  27.   )
  28. )
  29. )
  30. )
  31. ;(command "_.draworder" ss "" "a" "p")
  32. )

 
我认为我的代码和你的代码是两种不同的语言。当谈到lisps时,我仍然是noob,我的这段代码是类似的东西的修改版本。。。你能告诉我代码应该是什么样子吗?
 
有没有一个地方可以解释什么是“setq”以及所有括号的理由??我真的很想学习如何写Lisp程序。。。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:22:42 | 显示全部楼层
如果我不理解您的井,您希望解析第一个选择集以保留标签:
  1. (princ "\nPress ENTER after selecting entities to process them...")
  2. (if (setq SS (ssget  '((0 . "MULTILEADER"))))
  3. (progn
  4. (command "_.copy" ss "" "0,0" "0,0")
  5. (command "_.layer" "m" "halotext255" "c" "255" "" "lw" "2" "" "")
  6. (command "_.chprop" ss "" "_la" "halotext255" "p" "c" "bylayer" "")
  7. (repeat (setq index1st (sslength ss))
  8.   (command "_EXPLODE" (setq tempItem (ssname ss (setq index1st (1- index1st)))))
  9.   (setq ssetItems (ssget "_P"))
  10.   (repeat (setq index2nd (sslength ssetItems))
  11.    (setq assocItem (entget (ssname ssetItems (setq index2nd (1- index2nd)))))
  12.    (if (/= (cdr (assoc 0 assocItem))
  13.            "MTEXT")
  14.     (entdel (cdr (assoc -1 assocItem)))
  15.    )
  16.   )
  17. )
  18. )
  19. )

请再次检查我对选择过滤器的评论。
 
完全没有,只是普通的AutoLISP。
回复

使用道具 举报

2

主题

6

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 08:29:41 | 显示全部楼层
先生,你是一位大师!才华横溢,完美无瑕。
 
但还有一个问题,对不起,我如何将命令“HALO”合并到其中?
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:36:09 | 显示全部楼层
您只需要将例程中的代码替换为我修改的代码;还指示将变量本地化,并添加最终PRINC语句以安静退出(提示器上没有nil)。
  1. (defun c:halo( / associtem index1st index2nd ss ssetitems tempitem )
  2. (princ "\nPress ENTER after selecting entities to process them...")
  3. (if (setq SS (ssget  '((0 . "MULTILEADER"))))
  4. (progn
  5.   (command "_.copy" ss "" "0,0" "0,0")
  6.   (command "_.layer" "_m" "halotext255" "_c" "255" "" "_lw" "2" "" "")
  7.   (command "_.chprop" ss "" "_la" "halotext255" "_p" "_c" "bylayer" "")
  8.   (repeat (setq index1st (sslength ss))
  9.    (command "_EXPLODE" (setq tempItem (ssname ss (setq index1st (1- index1st)))))
  10.    (setq ssetItems (ssget "_P"))
  11.    (repeat (setq index2nd (sslength ssetItems))
  12.     (setq assocItem (entget (ssname ssetItems (setq index2nd (1- index2nd)))))
  13.     (if (/= (cdr (assoc 0 assocItem))
  14.             "MTEXT")
  15.      (entdel (cdr (assoc -1 assocItem)))
  16.     )
  17.    )
  18.   )
  19. )
  20. )
  21. (princ)
  22. )
回复

使用道具 举报

2

主题

6

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 08:46:50 | 显示全部楼层
这很有效!非常感谢你。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:53:53 | 显示全部楼层
不客气!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 21:54 , Processed in 0.345499 second(s), 72 queries .

© 2020-2025 乐筑天下

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