乐筑天下

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

[编程交流] 插入类似项

[复制链接]

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 18:25:09 | 显示全部楼层 |阅读模式
你好
我正在尝试选择一个特定的块并重新插入它。有点像复制命令,但使用块的基点。
问题是我不知道如何获得特定的块:
 
  1. (defun c:InsertSimilar (/ en inspt1 )
  2.   (setq en(car (entsel "\n Select a block :")))
  3.   (setq enlist(entget en))
  4.   (setq inspt1 (getpoint "\nPick Insertion point: "))
  5.   (command "_insert" en inspt1 "" "" "")
  6. (princ)
  7. )

 
我试着把它和李的代码中的这一部分混合在一起:
  1.   ;;---------------------------------------------;;
  2. ;; Example © Lee Mac 2011  -  www.lee-mac.com  ;;
  3. ;;---------------------------------------------;;
  4. (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))
  5.        acblk (vla-get-Blocks acdoc)
  6. )
  7. (if (ssget '((0 . "INSERT")))
  8.    (progn
  9.      (vlax-for block (setq acsel (vla-get-ActiveSelectionSet acdoc))
  10.        (if
  11.          (not
  12.            (member
  13.              (setq name
  14.                (vlax-get-property block
  15.                  (if (vlax-property-available-p block 'effectivename)
  16.                    'effectivename
  17.                    'name
  18.                  )
  19.                )
  20.              )
  21.              done
  22.            )
  23.          )

但是,没有任何成功-因为我对lisp了解很少,对vlisp一无所知。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:38:29 | 显示全部楼层
也许是这样?
  1. (defun c:cb ( / blk )
  2.    (if (setq blk (ssget "_+.:E:S" '((0 . "INSERT"))))
  3.        (progn
  4.            (setq blk (ssname blk 0))
  5.            (command "_.copy" blk "" "_non" (trans (cdr (assoc 10 (entget blk))) blk 1))
  6.            (while (= 1 (logand 1 (getvar 'cmdactive))) (command "\"))
  7.        )
  8.    )
  9.    (princ)
  10. )

[未经测试]
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:41:39 | 显示全部楼层
你说的是动态块吗?
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 18:53:28 | 显示全部楼层
李,成功了!但我有一个简单的问题:
如何更改插入方法(而不是手动输入)我得到了以下点列表:
 
  1.   (foreach PT PTS ;;Loop through list of points

 
编辑:Tharwat,只是一个简单的块,但我正在尝试将其插入特定位置。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:56:30 | 显示全部楼层
 
假设“pts”是一个有效的点列表,一个非常简单的方法是:
  1. (defun c:cb ( / blk ins )
  2.    (if (setq blk (ssget "_+.:E:S" '((0 . "INSERT"))))
  3.        (progn
  4.            (setq blk (ssname blk 0)
  5.                  ins (trans (cdr (assoc 10 (entget blk))) blk 1)
  6.            )
  7.            (foreach x pts (command "_.copy" blk "" "_non" ins "_non" x))
  8.        )
  9.    )
  10.    (princ)
  11. )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 19:05:03 | 显示全部楼层
谢谢你,李!
回复

使用道具 举报

12

主题

152

帖子

140

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 19:16:40 | 显示全部楼层
看看这个。
 
http://www.cadtutor.net/forum/showthread.php?t=92703
回复

使用道具 举报

10

主题

895

帖子

887

银币

初来乍到

Rank: 1

铜币
49
发表于 2022-7-5 19:23:46 | 显示全部楼层
ADDSELECTED现在不是内置命令吗?这也会起作用。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 19:27:40 | 显示全部楼层
谢谢,iconeo-我已经找到了我正在搜索的内容。
rkent,我只是想看看如何按名称选择一个块,并在lisp函数中使用它,以便稍后可以将其插入点列表中。
 
我发现了一系列不同的插入点LISP,它们将点放置在直线的顶点、端点、中点、交点的选择上(选择不同的实体(直线/柱脚线/连接线/圆…)
但他们都没有在这些参考点上插入块(手动放置块很耗时)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 20:17 , Processed in 0.454283 second(s), 70 queries .

© 2020-2025 乐筑天下

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