乐筑天下

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

[编程交流] 插入块时开始行

[复制链接]

6

主题

249

帖子

247

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 10:49:19 | 显示全部楼层 |阅读模式
问候语:
在Acad的早期,可以重命名某些未使用的F键。在那些年里,我给F键分配了一个短lisp命令。
例如,在命令行输入行时,可以点击相应的F键(其中包含短lisp的命令),如果在块或其各自属性上的任何位置拾取,则该行将从块插入点开始。现在,我想知道如何重命名一个无用的F键,或者将我的小lisp合并到另一个lisp中,使其从拾取的块或其各自属性的插入点开始。
干杯
S
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:55:30 | 显示全部楼层
您可以这样透明地调用LISP:
 
  1. (defun c:AtInsertion ( / obj )
  2. (if
  3.    (setq obj
  4.       (SelectifFoo
  5.         (lambda ( x / o )
  6.           (setq o
  7.             (vlax-ename->vla-object
  8.               (cond
  9.                 (
  10.                   (= (length x) 4) (car (last x))
  11.                 )
  12.                 (
  13.                   (car x)
  14.                 )
  15.               )
  16.             )
  17.           )
  18.           (if (vlax-property-available-p o 'InsertionPoint)
  19.             o
  20.           )
  21.         )
  22.         "\nSelect Object: "
  23.       )
  24.     )
  25.    (vlax-get obj 'InsertionPoint)
  26. )
  27. )
  28. (defun SelectifFoo ( foo str / sel x )
  29. (while
  30.    (progn
  31.      (setq sel (nentsel str))
  32.      
  33.      (cond
  34.        (
  35.          (vl-consp sel)
  36.          (if (not (setq x (foo sel)))
  37.            (princ "\n** Invalid Object Selected **")
  38.          )
  39.        )
  40.      )
  41.    )
  42. )
  43. x
  44. )
  1. _non 'AtInsertion
回复

使用道具 举报

6

主题

249

帖子

247

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 10:55:51 | 显示全部楼层
 
李,这就是这里发生的事情:
如果拾取了块,则线从块插入点开始。如果拾取了块的属性,则线从拾取点开始。
 
以下是我使用的lisp:
 
  1. ;get insertion point of BLOCK by picking any attribute !
  2. ;
  3. (DEFUN VV (/ PT1 PT2 PT5 PT6)
  4.    (SETQ PT1 (ENTSEL "\nPick on BLOCK or ATTRIBUTE: "))
  5.    (SETQ ENT(ENTGET (CAR PT1)))
  6.    (SETQ PT5 (CDR (ASSOC 10 ENT)))
  7. )

 
如果加载此lisp,并在输入line命令后,输入(VV)并拾取相应的属性,则线条将从块插入点开始。这是查找块插入点的非常方便的方法,其中有许多点块与点#、desc和高程等属性聚集在一起。
希望这对你更有帮助。
干杯
S
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:59:12 | 显示全部楼层
根据您给出的描述,我的印象是,如果选择了属性,您希望使用属性插入。。。
回复

使用道具 举报

6

主题

249

帖子

247

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 11:03:08 | 显示全部楼层
 
李:你的解释是对的。我的错。最后一句应该是。。。无论是否拾取块或其属性,直线都从块的插入点开始。
对不起大家!
S
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:06:24 | 显示全部楼层
不用担心-您已经有了代码,但这可能更好:
 
  1. (defun c:AtInsertion ( / obj )
  2. (if
  3.    (setq obj
  4.      (SelectifFoo
  5.        (lambda ( x )
  6.          (if
  7.            (vlax-property-available-p
  8.              (setq x (vlax-ename->vla-object x)) 'InsertionPoint
  9.            )
  10.            x
  11.          )
  12.        )
  13.        "\nSelect Object: "
  14.      )
  15.    )
  16.    (trans (vlax-get obj 'InsertionPoint) (vlax-get obj 'Normal) 1)
  17. )
  18. )
  19. (defun SelectifFoo ( foo str / sel x )
  20. (while
  21.    (progn
  22.      (setq sel (entsel str))
  23.      
  24.      (cond
  25.        (
  26.          (vl-consp sel)
  27.          (if (not (setq x (foo (car sel))))
  28.            (princ "\n** Invalid Object Selected **")
  29.          )
  30.        )
  31.      )
  32.    )
  33. )
  34. x
  35. )
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:09:56 | 显示全部楼层
不要忘记将您的点转换为UCS。李代码很好。
 
还有别的玩法。。。
 
  1. (defun c:AI (/ ss)
  2. (if (setq ss (ssget "_+.:E:S" '((0 . "INSERT"))))
  3.    ((lambda (ins)
  4.       (if (eq 1 (logand 1 (getvar 'cmdactive)))
  5.         ins
  6.         (command "_.line" "_non" ins)
  7.       )
  8.     )
  9.      (trans (cdr (assoc 10 (entget (ssname ss 0)))) 0 1)
  10.    )
  11. )
  12. )
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:13:49 | 显示全部楼层
哦,是的,您可以在CUI编辑器中编辑F键(称为加速键),但最简单的方法是创建MNU文件并从那里加载它们。此外,如果使用与MNU同名的MNL启动文件,它将在每次启动时自动加载。
 
这是我的艾伦·汤普森的剪辑。mnu文件:
  1. ***MENUGROUP=[color=Red]AlanThompson[/color]
  2. ***TOOLBARS
  3. ***ACCELERATORS
  4. ["F1"]^C^CEXCHPROP
  5. ["F4"]^C^CIMPORTLAYERS
  6. ["F5"]^C^CPEDIT _M
  7. ["F6"]^C^CM2P
  8. ["F7"]^C^C'MATH
  9. [CONTROL+"Z"]'_zoom _p

 
我通过一个名为AlanThompson的文件加载我所有的lisp例程和设置。mnl公司
 
当我买了一台新电脑,我所要做的就是输入MenuLoad,加载我的AlanThompson。mnu文件,我可以走了。
 
仅供参考,请务必更改MENUGROUP名称(红色)。
回复

使用道具 举报

6

主题

249

帖子

247

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 11:15:26 | 显示全部楼层
 
 
谢谢艾伦和李,我要开始思考。。。。什么是最好的。。
我曾想过以某种方式使用USERS5中保存的东西,然后在LINE命令后以某种方式调用它,以在触摸块或块属性时找到块插入点。但是
干杯
S
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:18:32 | 显示全部楼层
享受
 
请记住,如果使用Lee的,则需要将点转换为UCS,因为如果您不是WCS,则会产生不希望的结果。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 17:02 , Processed in 0.370297 second(s), 72 queries .

© 2020-2025 乐筑天下

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