乐筑天下

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

[编程交流] 给那些无聊的人一个主意

[复制链接]

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 10:00:24 | 显示全部楼层 |阅读模式
大家好,
 
想象一下,我正在处理一个附着了外部参照的图形,我需要从实际图形中剪切/复制一些内容,并将其粘贴到外部参照中。
 
此时,我使用ctrl+shift+c,选择基点和项目,并打开外部参照,以便将对象粘贴为块或不粘贴为块。正如你所猜测的那样,这很好,但是制作一个lisp怎么样?
 
在此过程中,我想到了将对象发送到外部参照。相同的步骤:选择对象和基点。
然后“将其发送到外部参照,选择外部参照,点击enter并准备就绪。
 
这不是一个请求,只是我分享的一个想法。也许你喜欢这个主意,想试试。。。
回复

使用道具 举报

8

主题

159

帖子

153

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 10:07:12 | 显示全部楼层
好主意,马可。我不是一个Lisp程序的人,但也许有人。。。
克鲁格
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 10:09:45 | 显示全部楼层
这将大大减少编辑外部参照文件所花费的时间。这是一个挑战,我愿意参与(不是)
是的,为什么不呢,我打赌有人会。。。。。。我想现在我会坚持“观察和学习”模式
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:13:30 | 显示全部楼层
我非常认为这是可以做到的-我已经完成了一半-它只需要修改以删除图形提示,而不是提示输入外部参照,然后检索图形路径,最后可能删除原始对象。
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 10:17:29 | 显示全部楼层
 
哇,李代码不错!事实上,这几乎就是我的意思。你对我有什么看法吗?
对于那些可能有点“可疑”的人;我测试了代码,当然可以!
 
李,请不要修改代码(现在)。当我有时间的时候,也许我可以帮点忙。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:20:55 | 显示全部楼层
 
对不起,伙计,我忍不住了
 
http://lee-mac.com/copytoxref.html
 
其中涉及的内容比我最初描述的要多一些,以说明对象相对于外部参照插入的相对位置,并进一步说明外部参照的比例/旋转/法线。
 
 
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 10:25:57 | 显示全部楼层
李,
 
检查我对代码的添加。我在谷歌上找到了一些帮助:
 
  1. ;;-------------------=={ Copy to Drawing }==------------------;;
  2. ;;                                                            ;;
  3. ;;  Enables a user to copy a SelectionSet of objects to a     ;;
  4. ;;  selected drawing. Layout on which objects reside will be  ;;
  5. ;;  created if non-existent.                                  ;;
  6. ;;------------------------------------------------------------;;
  7. ;;  Author: Lee Mac, Copyright © 2010 - [url="http://www.lee-mac.com/"]www.lee-mac.com[/url]       ;;
  8. ;;------------------------------------------------------------;;
  9. (defun c:C2DWG nil (c:CopytoDrawing))
  10. (defun c:CopytoDrawing ( / *error* _StartUndo _EndUndo ac dbx doc dwgs dwg ss [b][color=sienna]XrPath[/color][/b])
  11. ;; © Lee Mac 2010
  12. (vl-load-com)
  13. (defun *error* ( msg )
  14.    (LM:ReleaseObject dbx) (if doc (_EndUndo doc))
  15.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  16.        (princ (strcat "\n** Error: " msg " **")))
  17.    (princ)
  18. )
  19. (defun _StartUndo ( doc ) (_EndUndo doc)
  20.    (vla-StartUndoMark doc)
  21. )
  22. (defun _EndUndo ( doc )
  23.    (if (= 8 (logand 8 (getvar 'UNDOCTL)))
  24.      (vla-EndUndoMark doc)
  25.    )
  26. )
  27. (setq doc (vla-get-ActiveDocument (setq ac (vlax-get-acad-object))))
  28. (vlax-map-collection (vla-get-Documents ac)
  29.   '(lambda ( d )
  30.      (setq dwgs (cons (cons (strcase (vla-get-fullname d)) d) dwgs))
  31.    )
  32. )
  33. (if (and (setq ss  (ssget (list (cons 410 (setq tab (getvar 'CTAB))))))
  34. [b][color=sienna]   ; Next, getfiled, will return the destination file including path.[/color][/b]
  35. [b][color=sienna]   ; I turn this part off first.[/color][/b]
  36. [b][color=sienna]          ; (setq dwg (getfiled "Select Drawing to Copy to" "" "dwg" 16))[/color][/b]
  37. [b][color=sienna]   ; Now, how to retrieve the xref's name and path?[/color][/b]
  38. [b][color=sienna]   ; See the SubFunction below, it returns the Xref name and path[/color][/b]
  39. [b][color=sienna]   (GetXrefPath)[/color][/b]
  40. [b][color=sienna]   ; Put the content of variable XrPath into the variable dwg[/color][/b]
  41. [b][color=sienna]   (setq dwg XrPath)[/color][/b]
  42. [b][color=sienna]   ; I remember: localise dwg and / or XrPath, see above in main function[/color][/b]
  43.    );_and
  44.    (progn
  45.      (_StartUndo doc)
  46.      (if (setq dbx (cond ( (cdr (assoc (strcase dwg) dwgs)) )
  47.                          ( (not (vl-catch-all-error-p
  48.                                   (vl-catch-all-apply 'vla-open
  49.                                     (list (setq dbx (LM:ObjectDBXDocument)) dwg)))) dbx)))
  50.        (progn
  51.          (LM:CopyObjects (LM:ss->vla ss) doc (vla-get-Block (cond ( (LM:Itemp (vla-get-layouts dbx) tab) )
  52.                                                                   ( (vla-add  (vla-get-layouts dbx) tab) ))))
  53.          (vla-saveas dbx dwg)
  54.        )
  55.      )
  56.      (_EndUndo doc)
  57.    )
  58. )
  59.    (LM:ReleaseObject dbx)
  60. [b][color=sienna] ; To make shure the right Xref is reloaded I use this, I have no better idea[/color][/b]
  61. [b][color=sienna] ; First what is NOT working, reload only the selected Xref:[/color][/b]
  62. [b][color=sienna] ; (vl-cmdf "_.xref" "_reload" dwg); WHY NOT ??[/color][/b]
  63. [b][color=sienna] ; This does work however:[/color][/b]
  64. [b][color=sienna] (vl-cmdf "_.xref" "_reload" "*")[/color][/b]
  65. [b][color=sienna] ; Takes a little more time, that shouldn't be[/color][/b]
  66. (princ)
  67. )
  68. ;;-----------------=={ ObjectDBX Document }==-----------------;;
  69. ;;                                                            ;;
  70. ;;  Retrieves a version specific ObjectDBX Document object    ;;
  71. ;;------------------------------------------------------------;;
  72. ;;  Author: Lee Mac, Copyright © 2010 - [url="http://www.lee-mac.com/"]www.lee-mac.com[/url]       ;;
  73. ;;------------------------------------------------------------;;
  74. ;;  Arguments: - None -                                       ;;
  75. ;;------------------------------------------------------------;;
  76. ;;  Returns:  VLA ObjectDBX Document object, else nil         ;;
  77. ;;------------------------------------------------------------;;
  78. (defun LM:ObjectDBXDocument ( / acVer )
  79. ;; © Lee Mac 2010
  80. (vla-GetInterfaceObject (vlax-get-acad-object)
  81.    (if (< (setq acVer (atoi (getvar "ACADVER"))) 16)
  82.      "ObjectDBX.AxDbDocument"
  83.      (strcat "ObjectDBX.AxDbDocument." (itoa acVer))
  84.    )
  85. )
  86. )
  87. ;;------------------=={ Release Object }==--------------------;;
  88. ;;                                                            ;;
  89. ;;  Releases a VLA Object from memory via plentiful error     ;;
  90. ;;  trapping                                                  ;;
  91. ;;------------------------------------------------------------;;
  92. ;;  Author: Lee Mac, Copyright © 2010 - [url="http://www.lee-mac.com/"]www.lee-mac.com[/url]       ;;
  93. ;;------------------------------------------------------------;;
  94. ;;  Arguments:                                                ;;
  95. ;;  obj - VLA Object to be released from memory               ;;
  96. ;;------------------------------------------------------------;;
  97. ;;  Returns:  T if Object Released, else nil                  ;;
  98. ;;------------------------------------------------------------;;
  99. (defun LM:ReleaseObject ( obj ) (vl-load-com)
  100. ;; © Lee Mac 2010
  101. (and obj (eq 'VLA-OBJECT (type obj)) (not (vlax-object-released-p obj))
  102.    (not
  103.      (vl-catch-all-error-p
  104.        (vl-catch-all-apply
  105.          (function vlax-release-object) (list obj)
  106.        )
  107.      )
  108.    )
  109. )
  110. )
  111. ;;--------------------=={ Copy Objects }==--------------------;;
  112. ;;                                                            ;;
  113. ;;  Applies a deep-clone copy to a list of objects            ;;
  114. ;;------------------------------------------------------------;;
  115. ;;  Author: Lee Mac, Copyright © 2010 - [url="http://www.lee-mac.com/"]www.lee-mac.com[/url]       ;;
  116. ;;------------------------------------------------------------;;
  117. ;;  Arguments:                                                ;;
  118. ;;  lst   - List of Objects to Copy                           ;;
  119. ;;  owner - Owner of Objects in List                          ;;
  120. ;;  dest  - Destination for Copied Objects                    ;;
  121. ;;------------------------------------------------------------;;
  122. ;;  Returns:  Array of Copied Objects                         ;;
  123. ;;------------------------------------------------------------;;
  124. (defun LM:CopyObjects ( lst owner dest )
  125. ;; © Lee Mac 2010
  126. (vla-CopyObjects owner (LM:ObjectVariant lst) dest)
  127. )
  128. ;;-------------------=={ Object Variant }==-------------------;;
  129. ;;                                                            ;;
  130. ;;  Creates a populated Object Variant                        ;;
  131. ;;------------------------------------------------------------;;
  132. ;;  Author: Lee Mac, Copyright © 2010 - [url="http://www.lee-mac.com/"]www.lee-mac.com[/url]       ;;
  133. ;;------------------------------------------------------------;;
  134. ;;  Arguments:                                                ;;
  135. ;;  lst - list of VLA Objects to populate the Variant.        ;;
  136. ;;------------------------------------------------------------;;
  137. ;;  Returns:  VLA Object Variant                              ;;
  138. ;;------------------------------------------------------------;;
  139. (defun LM:ObjectVariant ( lst )
  140. ;; © Lee Mac 2010
  141. (LM:SafearrayVariant vlax-vbobject lst)
  142. )
  143. ;;------------------=={ Safearray Variant }==-----------------;;
  144. ;;                                                            ;;
  145. ;;  Creates a populated Safearray Variant of a specified      ;;
  146. ;;  data type                                                 ;;
  147. ;;------------------------------------------------------------;;
  148. ;;  Author: Lee Mac, Copyright © 2010 - [url="http://www.lee-mac.com/"]www.lee-mac.com[/url]       ;;
  149. ;;------------------------------------------------------------;;
  150. ;;  Arguments:                                                ;;
  151. ;;  datatype - variant type enum (eg vlax-vbDouble)           ;;
  152. ;;  data     - list of static type data                       ;;
  153. ;;------------------------------------------------------------;;
  154. ;;  Returns:  VLA Variant Object of type specified            ;;
  155. ;;------------------------------------------------------------;;
  156. (defun LM:SafearrayVariant ( datatype data )
  157. ;; © Lee Mac 2010
  158. (vlax-make-variant
  159.    (vlax-safearray-fill
  160.      (vlax-make-safearray datatype
  161.        (cons 0 (1- (length data)))
  162.      )
  163.      data
  164.    )   
  165. )
  166. )
  167. ;;-----------------=={ SelectionSet -> VLA }==----------------;;
  168. ;;                                                            ;;
  169. ;;  Converts a SelectionSet to a list of VLA Objects          ;;
  170. ;;------------------------------------------------------------;;
  171. ;;  Author: Lee Mac, Copyright © 2010 - [url="http://www.lee-mac.com/"]www.lee-mac.com[/url]       ;;
  172. ;;------------------------------------------------------------;;
  173. ;;  Arguments:                                                ;;
  174. ;;  ss - Valid SelectionSet (Pickset)                         ;;
  175. ;;------------------------------------------------------------;;
  176. ;;  Returns:  List of VLA Objects                             ;;
  177. ;;------------------------------------------------------------;;
  178. (defun LM:ss->vla ( ss )
  179. ;; © Lee Mac 2010
  180. (if ss
  181.    (
  182.      (lambda ( i / e l )
  183.        (while (setq e (ssname ss (setq i (1+ i))))
  184.          (setq l (cons (vlax-ename->vla-object e) l))
  185.        )
  186.        l
  187.      )
  188.      -1
  189.    )
  190. )
  191. )
  192. ;;-----------------------=={ Itemp }==------------------------;;
  193. ;;                                                            ;;
  194. ;;  Retrieves the item with index 'item' if present in the    ;;
  195. ;;  specified collection, else nil                            ;;
  196. ;;------------------------------------------------------------;;
  197. ;;  Author: Lee Mac, Copyright © 2010 - [url="http://www.lee-mac.com/"]www.lee-mac.com[/url]       ;;
  198. ;;------------------------------------------------------------;;
  199. ;;  Arguments:                                                ;;
  200. ;;  coll - the VLA Collection Object                          ;;
  201. ;;  item - the index of the item to be retrieved              ;;
  202. ;;------------------------------------------------------------;;
  203. ;;  Returns:  the VLA Object at the specified index, else nil ;;
  204. ;;------------------------------------------------------------;;
  205. (defun LM:Itemp ( coll item )
  206. ;; © Lee Mac 2010
  207. (if
  208.    (not
  209.      (vl-catch-all-error-p
  210.        (setq item
  211.          (vl-catch-all-apply
  212.            (function vla-item) (list coll item)
  213.          )
  214.        )
  215.      )
  216.    )
  217.    item
  218. )
  219. )
  220. [color=sienna][b]; My addition to retrieve the xref's path and name[/b][/color]
  221. [color=sienna][b](defun GetXrefPath ( / XrFile );XrPath)[/b][/color]
  222. [color=sienna][b] (setq XrFile  (car (entsel "\nSelect external reference to copy the objects to: "))[/b][/color]
  223. [color=sienna][b]XrFile  (vlax-ename->vla-object XrFile)[/b][/color]
  224. [color=sienna][b]XrPath   (vla-get-path XrFile)[/b][/color]
  225. [color=sienna][b] );_setq[/b][/color]
  226. (princ)
  227. ) ;_defun
  228. ;|«Visual LISP© Format Options»
  229. (120 2 1 2 nil "Ende von " 100 9 0 0 0 T T nil T)
  230. ;*** DO NOT add text below the comment! ***|;

 
这是可行的,但有时UCS会出现问题。。。
我的意思是它复制了但没有达到正确的点。可能是因为外部参照插入到不同的插入点?
 
到目前为止你说什么?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:27:58 | 显示全部楼层
 
不错,马可!似乎您非常了解代码的整体工作原理,当前修改会将对象复制到外部参照,但对象将相对于当前图形的WCS原点而不是外部参照插入的原点进行复制。我还将所有用户输入放入主程序,并将外部参照子对象馈送到选定对象(使其更像一个通用子对象)。
回复

使用道具 举报

16

主题

104

帖子

88

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 10:33:31 | 显示全部楼层
请原谅我的模糊,但这是否已经是xref edit in place中的一个命令?在LT2010中,我可以在适当的位置打开x-ref,然后使用出现的图标,使x-ref的元素进入主图形或主图形的元素成为x-ref的一部分。
 
除非我误解了你想要什么,或者x-ref编辑在你的办公室是一个问题,否则我知道当项目开始时,你总会在你想要使用的图纸中找到一位同事。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:35:12 | 显示全部楼层
 
我正准备接受编码挑战
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 23:26 , Processed in 0.497908 second(s), 83 queries .

© 2020-2025 乐筑天下

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