乐筑天下

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

[编程交流] lisp帮助-添加(ssget)

[复制链接]

12

主题

152

帖子

140

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 17:48:27 | 显示全部楼层 |阅读模式
lisp只需获取一个对象并将其发送到“现有”层。
 
我希望能够通过选择单个对象或一组对象来运行此lisp,但我不确定一旦有了对象,如何浏览对象列表。感谢您的帮助。
 
附加:我想如果可以通过选择对象然后运行lisp或运行lisp然后选择对象来运行lisp,那将是一件好事。。。这有意义吗?
 
  1. ;;load the visual lisp extensions
  2. (vl-load-com)
  3. (defun c:sendtoexisting        (/ object)
  4. ;;check for selection
  5. (while
  6.    (setq
  7.      sset
  8.       (car (entsel "\nSelect object to move to existing layer:")
  9.       )
  10.    )
  11.     ;;convert to vl object
  12.     (setq sset (vlax-ename->vla-object sset))
  13.     ;;get current layer of object
  14.     (setq clayer (vla-get-layer sset))
  15.     (if (= nil (vl-string-search "EXST" clayer))
  16.       (progn
  17. ;;set existing layer
  18. (setq elayer (strcat "S-EXST" (substr clayer 2)))
  19. ;;create the existing layer
  20. (_createlayer
  21.    elayer
  22.    155
  23.    (cdr (assoc 6 (tblsearch "LAYER" clayer)))
  24. )
  25. ;;move the object to the existing layer      
  26. (vla-put-layer sset elayer)
  27. ;;set the object's color to ByLayer
  28. (vla-put-color sset 256)
  29.       )
  30.       (princ "\nObject is already on an EXISTING layer.")
  31.     )
  32. )
  33. )
  34. (defun _createlayer (name colour linetype)
  35. (if (null (tblsearch "LAYER" name))
  36.    (entmake
  37.      (list
  38. '(0 . "LAYER")
  39. '(100 . "AcDbSymbolTableRecord")
  40. '(100 . "AcDbLayerTableRecord")
  41. '(70 . 0)
  42. (cons 2 name)
  43. (cons 6 linetype)
  44. (cons 62 colour)
  45.      )
  46.    )
  47. )
  48. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:03:35 | 显示全部楼层
你好
 
试试这个未经测试的快速mods。
  1. (vl-load-com)
  2. (defun c:sendtoexisting  (/ ss i obj clay nlay)
  3. (princ "\nSelect objects to move to existing layer:")
  4. (if (setq ss (ssget "_:L"))
  5.   (repeat (setq i (sslength ss))
  6.     (setq obj (vlax-ename->vla-object (ssname ss (setq i (1- i))))
  7.           clayer (vla-get-layer obj)
  8.           )
  9.     (if (not (vl-string-search "EXST" clay))
  10.       (progn
  11.         (setq nlay (strcat "S-EXST" (substr clay 2)))
  12.         (_createlayer nelayer 155 (cdr (assoc 6 (tblsearch "LAYER" clay))))
  13.         (vla-put-layer obj nlay)
  14.         (vla-put-color obj 256)
  15.         )
  16.       (princ "\nObject is already on an EXISTING layer.")
  17.       )
  18.     )
  19. )
  20. (princ)
  21. )
  22. (defun _createlayer  (name colour linetype)
  23. (if (null (tblsearch "LAYER" name))
  24.    (entmake
  25.      (list
  26.        '(0 . "LAYER")
  27.        '(100 . "AcDbSymbolTableRecord")
  28.        '(100 . "AcDbLayerTableRecord")
  29.        '(70 . 0)
  30.        (cons 2 name)
  31.        (cons 6 linetype)
  32.        (cons 62 colour)
  33.        )
  34.      )
  35.    )
  36. )
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 18:19:38 | 显示全部楼层
或者在vanilla AutoLisp中使用更强大的力量:
 
  1. [b][color=BLACK]([/color][/b]defun c:exlayer [b][color=FUCHSIA]([/color][/b]/ ln ss i en ed vn vd[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]setq ln [color=#2f4f4f]"EXISTING"[/color][b][color=FUCHSIA])[/color][/b]
  3. [b][color=FUCHSIA]([/color][/b]if [b][color=NAVY]([/color][/b]not [b][color=MAROON]([/color][/b]tblsearch [color=#2f4f4f]"LAYER"[/color] ln[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  4.      [b][color=NAVY]([/color][/b]command [color=#2f4f4f]"_.LAYER"[/color] [color=#2f4f4f]"_N"[/color] ln [color=#2f4f4f]""[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  5. [b][color=FUCHSIA]([/color][/b]princ [b][color=NAVY]([/color][/b]strcat [color=#2f4f4f]"\nSelect Entities To Change To Layer "[/color] ln[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  6. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]not ss[b][color=NAVY])[/color][/b]
  7.         [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  8. [b][color=FUCHSIA]([/color][/b]setq i 0[b][color=FUCHSIA])[/color][/b]
  9. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]setq en [b][color=MAROON]([/color][/b]ssname ss i[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  10.         [b][color=NAVY]([/color][/b]setq ed [b][color=MAROON]([/color][/b]entget en[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  11.         [b][color=NAVY]([/color][/b]if [b][color=MAROON]([/color][/b]= 1 [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 66 ed[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  12.             [b][color=MAROON]([/color][/b]progn
  13.               [b][color=GREEN]([/color][/b]setq vn [b][color=BLUE]([/color][/b]entnext en[b][color=BLUE])[/color][/b]
  14.                     vd [b][color=BLUE]([/color][/b]entget vn[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  15.               [b][color=GREEN]([/color][/b]while [b][color=BLUE]([/color][/b]/= [color=#2f4f4f]"SEQEND"[/color] [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 0 vd[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  16.                      [b][color=BLUE]([/color][/b]entmod [b][color=RED]([/color][/b]subst [b][color=PURPLE]([/color][/b]cons 8 ln[b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]assoc 8 vd[b][color=PURPLE])[/color][/b] vd[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  17.                      [b][color=BLUE]([/color][/b]setq vn [b][color=RED]([/color][/b]entnext vn[b][color=RED])[/color][/b]
  18.                            vd [b][color=RED]([/color][/b]entget vn[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  19.               [b][color=GREEN]([/color][/b]entupd en[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  20.            [b][color=MAROON]([/color][/b]entmod [b][color=GREEN]([/color][/b]subst [b][color=BLUE]([/color][/b]cons 8 ln[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]assoc 8 ed[b][color=BLUE])[/color][/b] ed[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  21.         [b][color=NAVY]([/color][/b]setq i [b][color=MAROON]([/color][/b]1+ i[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  22. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
-大卫
回复

使用道具 举报

12

主题

152

帖子

140

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 18:35:59 | 显示全部楼层
谢谢你们俩的帮助。最后一个问题。
 
我添加了只选择一个对象或整个层的选项,但是在我处理对象的情况下,如何将初始entsel从initget添加到ss选择集。基本上,我必须双击我现在想要选择的第一个项目,这是我想要避免的。
 
谢谢
 
  1. ;; by Chau Huh 2015-10-21
  2. ;;load the visual lisp extensions
  3. (vl-load-com)
  4. (defun c:sendtoexisting
  5.       (/ ss i obj clayer nlayer ans TargEnt TargLayer)
  6. ;;;  (princ "\nSelect objects to move to existing layer:")
  7. (initget 1 "Object lAyer")
  8. (setq ans (entsel (strcat "Select by [Object/lAyer] <Object>: ")))
  9. (if (= ans "lAyer")
  10.    (progn
  11.      (princ "\nSelect layer to move to existing: ")
  12.      (setq TargEnt (car (entsel "\nSelect object on layer: ")))
  13.      (setq TargLayer (assoc 8 (entget TargEnt)))
  14.      (sssetfirst nil (ssget "_X" (list TargLayer)))
  15.      (princ)
  16.    )
  17. )
  18. (if (setq ss (ssget "_:L"))
  19.    (repeat (setq i (sslength ss))
  20.      (setq obj           (vlax-ename->vla-object (ssname ss (setq i (1- i))))
  21.     clayer (vla-get-layer obj)
  22.      )
  23.      (if (not (vl-string-search "EXST" clayer))
  24. (progn
  25.   (setq nlayer (strcat "S-EXST" (substr clayer 2)))
  26.   (_createlayer
  27.     nlayer
  28.     155
  29.     (cdr (assoc 6 (tblsearch "LAYER" clayer)))
  30.   )
  31.   (vla-put-layer obj nlayer)
  32.   (vla-put-color obj 256)
  33. )
  34. (princ "\nObject is already on an EXISTING layer.")
  35.      )
  36.    )
  37. )
  38. (princ)
  39. )
  40. (defun _createlayer (name colour linetype)
  41. (if (null (tblsearch "LAYER" name))
  42.    (entmake
  43.      (list
  44. '(0 . "LAYER")
  45. '(100 . "AcDbSymbolTableRecord")
  46. '(100 . "AcDbLayerTableRecord")
  47. '(70 . 0)
  48. (cons 2 name)
  49. (cons 6 linetype)
  50. (cons 62 colour)
  51.      )
  52.    )
  53. )
  54. )
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 18:46:40 | 显示全部楼层
利用ssadd功能。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 18:59:29 | 显示全部楼层
您要更改的图层上是否已经选择了实体?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 00:03 , Processed in 0.543422 second(s), 64 queries .

© 2020-2025 乐筑天下

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