乐筑天下

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

[编程交流] 自动选择上一个对象a

[复制链接]

56

主题

256

帖子

230

银币

后起之秀

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

铜币
253
发表于 2022-7-5 15:00:42 | 显示全部楼层 |阅读模式
你好
 
我希望加载一个lsp文件,然后在另一个例程中通过(c:runthislispfile)调用它,将它们结合在一起。
 
问题是,它们会提示选择,所以我认为这会起作用:
  1. (command "_P")
  2. (while (eq 1 (logand 1 (getvar 'CMDACTIVE))) (command ""))

 
这可能吗?我很确定cmdactive技巧就是这样。
 
请参阅下面的代码和问题所在的注释:
  1. (defun c:---BB (/) (progn (LOAD "3dwannab_ByBlock_Change_Entities") (C:BB)))
  2. ; Change all selected entities to ByBlock and layer 0 & more.
  3. (defun c:BB ( / ss_1 )
  4. (setq *error* SS:error)
  5. (SS:startundo)
  6. (setq cmde (getvar "cmdecho"))
  7. (setq os (getvar "osmode"))
  8. (setq orthom (getvar "orthomode"))
  9. (setvar 'cmdecho 0)
  10. (setvar 'osmode 83)
  11. (setvar 'orthomode 1)
  12. (progn
  13.         (setq ss_1 (last (ssgetfirst)))
  14.         (if (not ss_1)
  15.                 (setq ss_1 (ssget '((0 . "~HATCH"))))
  16.                 )
  17.         (if ss_1
  18.                 (progn
  19.                         (command "._chprop" "_non" ss_1 "" "_LA" "0" "")
  20.                         (command "._chprop" "_non" ss_1 "" "_LT" "BYBLOCK" "")
  21.                         (command "._chprop" "_non" ss_1 "" "_LTS" "1" "")
  22.                         (command "._chprop" "_non" ss_1 "" "_LW" "BYBLOCK" "")
  23.                         (command "._chprop" "_non" ss_1 "" "_TR" "BYBLOCK" "")
  24.                         (command "._chprop" "_non" ss_1 "" "_C" "BYBLOCK" "")
  25.                         ;; How do I run the command for this lisp then select previous and run it automatically.
  26.                         ;; Below doesn't work.
  27.                         ;; This routine is for rounding off entities to the nearest 0.5mm.
  28.                         (prompt "\nRUN the F5 command also to round off to 0.5mm ?\n")
  29.                         (load "FX_Round_Numbers_0Point5")
  30.                         (progn
  31.                                 (c:F5)
  32.                                 (command "_P")
  33.                                 (while (eq 1 (logand 1 (getvar 'CMDACTIVE))) (command ""))
  34.                                 )
  35.                         ;; How do I run the command for this lisp then select previous and run it automatically.
  36.                         ;; Below doesn't work.
  37.                         ;; This is the PSIMPLE command to fix polylines. Again it prompts for a selection here.
  38.                         (prompt "\nRUN the PSIMPLE command also ?\n")
  39.                         (load "PSimple")
  40.                         (progn
  41.                                 (c:PSIMPLEV)
  42.                                 (command "_P")
  43.                                 (while (eq 1 (logand 1 (getvar 'CMDACTIVE))) (command ""))
  44.                                 )
  45.                         (setq ss_1 nil)
  46.                         )
  47.                 (princ "\nUser Cancelled Command\n")
  48.                 )
  49.         )
  50. (*error* nil)
  51. (princ)
  52. )
  53. (defun SS:error (errmsg)
  54. (and acDoc (vla-EndUndoMark acDoc))
  55. (and errmsg
  56.         (not (wcmatch (strcase errmsg) "*CANCEL*,*EXIT*"))
  57.         (princ (strcat "\n<< Error: " errmsg " >>\n"))
  58.         )
  59. (setvar 'cmdecho cmde)
  60. (setvar 'osmode os)
  61. (setvar 'orthomode orthom)
  62. )
  63. (defun SS:startundo ()
  64. (setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
  65. (or (vla-EndUndoMark acDoc) (vla-StartUndoMark acDoc))
  66. )
  67. (vl-load-com)
  68. (princ
  69. (strcat
  70.         "\n3dwannab_ByBlock_Change_Entities.lsp Loaded\n"
  71.         "\nInvoke by typing 'BB'\n"
  72.         )
  73. )
  74. (princ)
  75. ;;----------------------------------------------------------------------;;
  76. ;;                             End of File                              ;;
  77. ;;----------------------------------------------------------------------;;
回复

使用道具 举报

17

主题

1274

帖子

25

银币

后起之秀

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

铜币
260
发表于 2022-7-5 15:23:41 | 显示全部楼层
你有PSIMPLE的代码吗?它对预选的多段线有效吗?如果是这样
  1. (sssetfirst nil (ssget "P"))
应该有效。
 
另一种选择:http://forums.augi.com/showthread.php?81175-选择结果lisp修改#5
回复

使用道具 举报

56

主题

256

帖子

230

银币

后起之秀

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

铜币
253
发表于 2022-7-5 15:57:12 | 显示全部楼层
 
含糖的我在别处需要这个。非常感谢。
 
PSIMPLE是一个惊人的惯例。去掉那些讨厌的非闭合多段线。正如你所见,我调用了输出结果的详细方法。
http://www.theswamp.org/index.php?topic=19865.msg244786#msg244786
 
工作代码:
  1. (defun c:---BB (/) (progn (LOAD "3dwannab_ByBlock_Change_Entities") (C:BB)))
  2. ; Change all selected entities to ByBlock and layer 0 & more.
  3. (defun c:BB ( / ss_1 e i )
  4. (setq *error* SS:error)
  5. (SS:startundo)
  6. (setq cmde (getvar "cmdecho"))
  7. (setq os (getvar "osmode"))
  8. (setq orthom (getvar "orthomode"))
  9. (setvar 'cmdecho 0)
  10. (setvar 'osmode 83)
  11. (setvar 'orthomode 1)
  12. (progn
  13.         (setq ss_1 (last (ssgetfirst)))
  14.         (if (not ss_1)
  15.                 (setq ss_1 (ssget '((0 . "~HATCH"))))
  16.                 )
  17.         (if ss_1
  18.                 (progn
  19.                         (repeat (setq i (sslength ss_1))
  20.                                 (setq i (1- i))
  21.                                 (if (= "HATCH" (cdr(assoc 0 (ENTGET (setq e (ssname ss_1 i))))))
  22.                                         (SSDEL e SS_1 ))
  23.                                 )
  24.                         (command "._chprop" "_non" ss_1 "" "_LA" "0" "")
  25.                         (command "._chprop" "_non" ss_1 "" "_LT" "BYBLOCK" "")
  26.                         (command "._chprop" "_non" ss_1 "" "_LTS" "1" "")
  27.                         (command "._chprop" "_non" ss_1 "" "_LW" "BYBLOCK" "")
  28.                         (command "._chprop" "_non" ss_1 "" "_TR" "BYBLOCK" "")
  29.                         (command "._chprop" "_non" ss_1 "" "_C" "BYBLOCK" "")
  30.                         ;; initget from LeeMac help pages
  31.                         (initget "Yes No")
  32.                         (setq ans
  33.                                 (cond
  34.                                         (
  35.                                                 (getkword
  36.                                                         (strcat "\nLoad FX_Round_Numbers_0Point5 and run ?\n: --------------------------------------------------------- :\nWill round off everything to the nearest 0.5\n: --------------------------------------------------------- :\n[Yes/No] <"
  37.                                                                 (setq ans
  38.                                                                         (cond ( ans ) ( "Yes" ))
  39.                                                                         )
  40.                                                                 ">: "
  41.                                                                 )
  42.                                                         )
  43.                                                 )
  44.                                         ( ans )
  45.                                         )
  46.                                 )
  47.                         (cond
  48.                                 ((=  "Yes" ans)
  49.                                         (progn
  50.                                                 (prompt "\nNow running the 0.5mm round off command also...\n-------------------------------------\n")
  51.                                                 (load "FX_Round_Numbers_0Point5")
  52.                                                 (sssetfirst nil (ssget "_P"))
  53.                                                 (c:F5)
  54.                                                 )
  55.                                         )
  56.                                 ((= "No" ans)
  57.                                         (princ (strcat "\n: --------------------------------------------------------- :\nFX_Round_Numbers_0Point5.lsp not performed.\n: --------------------------------------------------------- :\n"))(princ)
  58.                                         )
  59.                                 )
  60.                         (repeat (setq i (sslength ss_1))
  61.                                 (setq i (1- i))
  62.                                 (if (/= "LWPOLYLINE" (cdr(assoc 0 (ENTGET (setq e (ssname ss_1 i))))))
  63.                                         (SSDEL e SS_1 ))
  64.                                 )
  65.                         (if (> (sslength SS_1) 0)
  66.                                 (progn
  67.                                         (prompt "\nNow running the PSIMPLEV command also...\n-------------------------------------\n")
  68.                                         (load "PSimple")
  69.                                         (sssetfirst nil (ssget "_P"))
  70.                                         (c:PSIMPLEV)
  71.                                         )
  72.                                 (progn
  73.                                         (princ (strcat "\nNo LWPOLYLINEs' found.\n: --------------------------------------------------------- :\n"))(princ)
  74.                                         )
  75.                                 )
  76.                         (setq ss_1 nil)
  77.                         (command "._regenall")
  78.                         )
  79.                 (princ "\nUser Cancelled Command\n")
  80.                 )
  81.         )
  82. (*error* nil)
  83. (princ)
  84. )
  85. (defun SS:error (errmsg)
  86. (and acDoc (vla-EndUndoMark acDoc))
  87. (and errmsg
  88.         (not (wcmatch (strcase errmsg) "*CANCEL*,*EXIT*"))
  89.         (princ (strcat "\n<< Error: " errmsg " >>\n"))
  90.         )
  91. (setvar 'cmdecho cmde)
  92. (setvar 'osmode os)
  93. (setvar 'orthomode orthom)
  94. )
  95. (defun SS:startundo ()
  96. (setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
  97. (or (vla-EndUndoMark acDoc) (vla-StartUndoMark acDoc))
  98. )
  99. (vl-load-com)
  100. (princ
  101. (strcat
  102.         "\n3dwannab_ByBlock_Change_Entities.lsp Loaded\n"
  103.         "\nInvoke by typing 'BB'\n"
  104.         )
  105. )
  106. (princ)
  107. ;;----------------------------------------------------------------------;;
  108. ;;                             End of File                              ;;
  109. ;;----------------------------------------------------------------------;;
回复

使用道具 举报

56

主题

256

帖子

230

银币

后起之秀

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

铜币
253
发表于 2022-7-5 16:14:25 | 显示全部楼层
更新了上述代码。这将是编辑块时的救命稻草。我似乎把所有的时间都花在了区块编辑器上。。!!!
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-15 00:52 , Processed in 1.866673 second(s), 61 queries .

© 2020-2025 乐筑天下

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