乐筑天下

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

[编程交流] 选择复制的对象

[复制链接]
dhl

10

主题

36

帖子

26

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
52
发表于 2022-7-6 12:13:36 | 显示全部楼层 |阅读模式
正如标题所示,我正在尝试选择多个对象的副本,这可能是一项简单的任务。。。
 

 
我将许多对象从位置a复制到位置B。现在我想选择这些对象。
 
当我使用(ssget“L”)时,它只选择一个对象,我想与(entlast)相同
使用(ssget“P”)选择我从中复制的对象,而不是复制对象本身
回复

使用道具 举报

NBC

4

主题

182

帖子

178

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 12:25:30 | 显示全部楼层
复制对象之前,将其放入组或块中
回复

使用道具 举报

5

主题

194

帖子

193

银币

初来乍到

Rank: 1

铜币
24
发表于 2022-7-6 12:27:42 | 显示全部楼层
也许从这样开始
 
  1. ;Store the last database entity before copying objects
  2. (setq Marker (entlast))
  3. ;Create a temporary selection set
  4. (setq TempSelectionSet (ssadd))
  5. ;Preform commands
  6. (command "copy" ...)
  7. ;Add all entities created after copy to the TempSelectionSet
  8. (while
  9. (setq Marker (entnext Marker))
  10. (ssadd  Marker TempSelectionSet ))
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:39:19 | 显示全部楼层
尝试以下操作:
 
  1. ;;; Copy Command and return selectionset
  2. ;;; Requires Express Tools' ACET-SS-Drag-Move subroutine
  3. ;;; Alan J. Thompson, 11.09.09
  4. (defun AT:Copy (/ #SS #Pnt1 #Pnt2 #Pnts #SSAdd #Copy)
  5. (vl-load-com)
  6. (cond
  7.    ((and (setq #SS (ssget "_:L"))
  8.          (setq #Pnt1 (getpoint "\nSpecify base point: "))
  9.          (setq #Pnt2 (acet-ss-drag-move #SS #Pnt1 "\nSpecify placement point: " T))
  10.     ) ;_ and
  11.     (or *AcadDoc* (setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
  12.     (setq #Pnts (mapcar '(lambda (x) (vlax-3d-point (trans x 1 0)))
  13.                         (list #Pnt1 #Pnt2)
  14.                 ) ;_ mapcar
  15.     ) ;_ setq
  16.     (setq #SSAdd (ssadd))
  17.     (vlax-for x (setq #SS (vla-get-activeselectionset *AcadDoc*))
  18.       (ssadd (vlax-vla-object->ename (setq #Copy (vla-copy x))) #SSAdd)
  19.       (vla-move #Copy (car #Pnts) (cadr #Pnts))
  20.     ) ;_ vlax-for
  21.     (vl-catch-all-apply 'vla-delete (list #SS))
  22.    ) ;_ cond
  23. ) ;_ cond
  24. #SSAdd
  25. ) ;_ defun

 
它将模拟复制,但返回一个选择集。你可以做一些简单的事情,比如:
  1. (defun c:Test (/ ss)
  2. (and (setq ss (AT:Copy))
  3.       (command "_.change" ss "" "_p" "_c" 3 "")
  4. ) ;_ and
  5. ) ;_ defun

 
这不是最好的例子,但我相信你会明白的。
回复

使用道具 举报

VVA

1

主题

308

帖子

308

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-6 12:43:51 | 显示全部楼层
几乎如jammie所示
  1. (defun C:TEST ( / ss )
  2. (setvar "CMDECHO" 1)
  3. ;;;Creat Marker
  4. (mip:mark)
  5. ;;;Preform commands
  6. (princ "\nSelect objects for copying... ")
  7. (setq ss (ssget "_:L"))
  8. (command "_COPY" ss "" "_M")
  9. (while (> (getvar "CMDACTIVE") 0)(command pause))
  10. ;;; Select all entities created after copy
  11. (setq ss (mip:get-last-ss))
  12. ;;; Change color new objects to red
  13. (if ss
  14.    (command "_CHPROP" ss "" "_Color" 1 "")
  15.    )
  16. (setq ss nil)
  17. (princ)
  18. )
  19. (defun mip:mark ( )
  20. ;;;* Mark data base to allow KB:catch.
  21. ;;;* http://www.theswamp.org/index.php?topic=15863.0
  22. (if (setq *mip:mark (entlast)) nil
  23.    (progn (entmake '((0 . "point") (10 0.0 0.0 0.0)))
  24.       (setq *mip:mark (entlast))(entdel *mip:mark)))(princ))
  25. ;;;* returns selection set of entities since last mip:mark.
  26. (defun mip:get-last-ss (/ ss tmp val)
  27. (setq val (getvar "cmdecho"))(setvar "cmdecho" 0)
  28. (if *mip:mark (progn (setq ss (ssadd))
  29. (while (setq *mip:mark (entnext *mip:mark))(ssadd *mip:mark ss))
  30. (command "._select" ss "")(setq tmp ss ss nil));_progn
  31. (alert "*mip:mark not set. \n run (mip:mark) before mip:get-last-ss."));_if
  32. (setvar "cmdecho" val) tmp)
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:50:39 | 显示全部楼层
 
现在这很有创意!很不错的。
回复

使用道具 举报

dhl

10

主题

36

帖子

26

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
52
发表于 2022-7-6 12:59:22 | 显示全部楼层
谢谢大家!
 
我本以为这是一项简单的任务,但显然并非如此。。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 13:05:08 | 显示全部楼层
 
 
Psh!唯一简单的事情,就是拿出一些东西来编程。
 
很高兴这有帮助。
回复

使用道具 举报

29

主题

196

帖子

168

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
145
发表于 2022-7-6 13:07:55 | 显示全部楼层
 
我要做的是检查复制时选择了多少对象。。。然后我用这个lisp选择最后创建的“n”个对象,
 
因此,我键入lisp,然后我需要写下以前选择的对象的数量(以前用于复制)并完成,我可以将它们与“previous”选项一起使用。
鲁。lsp
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 13:14:51 | 显示全部楼层
我的方式。
  1. ;;  CAB 09.17.08 - get last entity of a type in datatbase
  2. ;;  An entity name, or nil, if there are no entities in the current drawing.
  3. (defun GetLastEnt ( / ename result )
  4. (if (setq result (entlast))
  5.    (while (setq ename (entnext result))
  6.      (setq result ename)
  7.    )
  8. )
  9. result
  10. )
  11. ;;  CAB 09.17.08 - return a list of new enames
  12. ;;  if ename is nil then return all objects in DWG
  13. (defun GetNewEntities (ename / new)
  14. (cond
  15.    ((or (null ename) (null (setq new (list (entnext))))))
  16.    ((eq 'ENAME (type ename))
  17.      (while (setq ename (entnext ename))
  18.        (if (entget ename) (setq new (cons ename new)))
  19.      )
  20.    )
  21.    ;((alert "Ename wrong type."))
  22. )
  23. new
  24. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 06:02 , Processed in 0.380152 second(s), 72 queries .

© 2020-2025 乐筑天下

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