乐筑天下

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

[编程交流] 需要Lisp:粘贴任何对象

[复制链接]

2

主题

11

帖子

9

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 15:15:37 | 显示全部楼层 |阅读模式
您好,我不是很有经验的lisp,可以做一些简单的脚本,但这一个将是一个困难的我,我相信一些很容易为你们。
我得到了一个建筑一层的蓝图,其中有许多门,由一个具有附加动态属性(非标准)的命名块表示。
我需要用没有任何附加属性的其他命名块(保持另一半完整)替换这些门中的一半。
这些门具有不同的大小(通过附加块属性设置)和不同的方向。我现在可以选择(使用定制QSELECT)我感兴趣的每一扇门,用新的替换。所以我有一个选择集。
我需要一个脚本,它只是粘贴任何对象从剪贴板(任何)在选择集中的任何门的地方。其余的-删除旧的,设置正确的方向-我会手动做。关于粘贴点-让我们从剪贴板粘贴到选择集中现有块的基点。
或者ACAD2010中可能有这样的内置功能?
回复

使用道具 举报

0

主题

34

帖子

18

银币

初来乍到

Rank: 1

铜币
18
发表于 2022-7-5 15:29:22 | 显示全部楼层
您能否更好地识别/缩小需要更换的现有各种尺寸/方向门的选择参数?或者您是否计划手动选择每个需要更换的门?或者它们都在一个唯一的层上,还是有另一个唯一的标识符?
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:44:31 | 显示全部楼层
您可以选择一个块和一个属性,从一次拾取中检索名称和属性值,然后将其用于创建选择集。然后可以添加一个新块来擦除旧块。您提到的一个问题是,如果新块没有公共插入点,则会产生一些问题。您需要结合使用ssget和nentselp,以便获得块名和属性值。
 
这花了几秒钟的时间才发现,我还没有看发布的内容,但可能是一个很好的起点。
http://www.cadtutor.net/forum/showthread.php?48458-用另一个块替换选定的一个或多个块
 
块名称和属性值1拾取
  1. (defun BIGAL ( / oldsnap pt pt1 pt2 att attobj obj blkname ss1)
  2. (setq oldsnap (getvar 'osmaode))
  3. (setvar 'osmode 0)
  4. (setq pt (Getpoint "Pick block attribute"))
  5. (setq pt1 (polar pt (/ pi 4.0) 3))
  6. (setq pt2 (polar pt (- 0 (/ pi 4.0)) 3))
  7. (setq ss1 (ssget "C" pt1 pt2 (list (cons 0 "Insert"))))
  8. (setq obj (vlax-ename->vla-object (ssname ss1 0)))
  9. (setq att (nentselp pt))
  10. (setq attobj (vlax-ename->vla-object (car att)))
  11. (setq attstring (vla-get-textstring attobj))
  12. (setq blkname (vla-get-name obj))
  13. (alert (strcat "You picked block " blkname "\n\nand the attribute value was " attstring))
  14. (setvar 'osmode oldsnap)
  15. (princ)
  16. )
  17. (BIGAL)
回复

使用道具 举报

2

主题

11

帖子

9

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 15:50:33 | 显示全部楼层
 
各种选定对象可能位于不同的层、可见物和可访问物上。
除了在每个选定对象的本地化中粘贴剪贴板内容外,我不需要脚本做任何事情。蓝图很复杂,很大,有很多不同的细节。所有门由一个块表示,其中门的大小由块本身定义的特殊属性确定。
但最后,我需要用更简单的块替换这些复杂的块,其中门的大小不由任何属性决定,而是在块定义中固定。所以我不能用一个块替换另一个块,因为它会替换所有类型的块。
我已经创建了如此简单的块,但手动将这些新块放置在旧块的位置是一项非常累人的工作。
这就是为什么我需要一个脚本,使它更容易工作。
任何其他操作,如准确的位置,方向,粘贴块层,我会手动做。
回复

使用道具 举报

2

主题

11

帖子

9

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 16:00:29 | 显示全部楼层
 
我不想用另一个块替换所选块,然后删除旧块。
我只需要一个脚本,将把从剪贴板(在我的情况下是块,但它将是线,文本,圆,任何东西)在选定的块(或基本对象或任何东西)的地方。
没什么了。问题是确定粘贴点,所以我考虑了块的基点。这是我第一次听说方块不能有基点。
我不知道你的脚本到底做了什么,因为它停止时出现错误“ssget模式的坏字符串”。这可能是由于ssget“C”在非英语版本的Autocad中无法识别(这就是为什么我讨厌翻译的命令和选项,它们可能看起来很好,可读性更强,但对于任何脚本来说,这都是一种痛苦)。它可能应该是ssget“\u C”或“\u C:”或任何真正的语法。
在你提供的URL中,这个家伙想用其他块替换选定的块。我不需要它。这可能是创建我想要的东西的一个很好的起点,但以我对lisp的了解,我不知道我是否能够自己解决其余的问题。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 16:11:03 | 显示全部楼层
试试这个,然后使用VLIDE或APPLOAD命令加载lisp,以便保留剪贴板内存中的内容。。。
 
尊敬的M.R。
回复

使用道具 举报

2

主题

11

帖子

9

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 16:17:03 | 显示全部楼层
谢谢,我稍后再查。现在我做的一切都是手动的,但下一个蓝图是改变。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 13:04 , Processed in 0.914873 second(s), 67 queries .

© 2020-2025 乐筑天下

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