复制块定义
大家好,我需要在两个活动图形之间复制块定义(两个图形都在AutoCAD中打开)。我知道objectdbx可以做到这一点,但我不知道如何将其用于两个活动图形,这就是为什么我需要您的帮助。
当做
萨提什语 你好,有人能帮我吗? 技术是一样的。如何通过odbx或文档集合访问这两个文档(源和目标)无关紧要。 最近(昨天晚上)我在网上找到了这个,它看起来很有趣
;___________________________________________________________________________________________________________|
;
; Written By: Peter Jamtgaard copyright 2017 All Rights Reserved
;___________________________________________________________________________________________________________|
;
; Any use by unauthorized person or business is strictly prohibited.
; Include Shorthand.lsp
;___________________________________________________________________________________________________________|
;___________________________________________________________________________________________________________|
;
; General Functions
;___________________________________________________________________________________________________________|
;* (BlockFromFile strFullName strBlockName)
;* Function to duplicate a block definition from an outside drawing
;* (CopyObjects2 objOwner lstObjects objCOllection)
;* Function to create a safearray of objects and run the copyobjects method
;* (DBXDocument strFullName)
;* Function to open a DBX Document
;* (DBXBlockDefinition objDBXDocument strBlockName)
;* Function to read a DBX document and return a specified block definition
;* (ErrorTrap symFunction)
;* Function to trap an error
;* (ListToSafeArray lstObjects symObjectType)
;* Function to create a safearray
;$ Header End
; Function Headers
;___________________________________________________________________________________________________________|
;
; Function to duplicate a block definition from an outside drawing
;___________________________________________________________________________________________________________|
(defun BlockFromFile (strFullName strBlockName / lstGlobalToRelease objBlocks objDBXDocument objDBXBlockDefinition)
(if (and (setq objDBXDocument (DBXDocument strFullName))
(setq objDBXBlockDefinition(DBXBlockDefinition objDBXDocument strBlockName))
(setq objBlocks (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))
(not (errortrap '(vla-item objBlocks strBlockName)))
(CopyObjects2 objDBXDocument (list objDBXBlockDefinition) objBlocks)
)
(setq objBlockDefinition (errortrap '(vla-item objDBXBlockDefinition strBlockName)))
(princ (strcat "\nError copying block: " strBlockName " from drawing " strFullName "..."))
)
(mapcar '(lambda (X)(errortrap (quote (vlax-release-object X)))) lstGlobalToRelease);<- Must release objects in reverse order
objDBXBlockDefinition
)
;___________________________________________________________________________________________________________|
;
; Function to create a safearray of objects and run the copyobjects method
;___________________________________________________________________________________________________________|
(defun CopyObjects2 (objOwner lstObjects objCOllection / lstObjects2 safObjects)
(if (setq safObjects (ListToSafeArray vlax-vbobject lstObjects))
(or (errortrap '(vla-CopyObjects objOwner
safObjects
objCollection
)
)
(princ "\nError using copyobjects: ")
)
)
)
;___________________________________________________________________________________________________________|
;
; Function to open a DBX Document
;___________________________________________________________________________________________________________|
(defun DBXDocument (strFullName / objDBXDocument strACADVersion strObjectDBX)
(if (and (= (type strFullName) 'STR)
(= (strcase (vl-filename-extension strFullName)) ".DWG")
(setq strFullName (findfile strFullName))
(setq strACADVersion (getvar "acadver"))
(setq strObjectDBX (strcat "ObjectDBX.AxDbDocument." (substr strACADVersion 1 2)))
(setq objDBXDocument (vla-GetInterfaceObject (vlax-get-acad-object) strObjectDBX ))
(setq lstGlobalToRelease(list objDBXDocument))
(errortrap '(vla-open objDBXDocument strFullName))
)
objDBXDocument
(princ "\nError creating DBX File Object!: ")
)
)
;___________________________________________________________________________________________________________|
;
; Function to read a DBX document and return a specified block definition
;___________________________________________________________________________________________________________|
(defun DBXBlockDefinition (objDBXDocument strBlockName / objDBXBlockDefinition objDBXBlocks)
(if (and
(= (type strBlockName) 'STR)
(setq objDBXBlocks (vla-get-blocks objDBXDocument))
(setq lstGlobalToRelease (cons objDBXBlocks lstGlobalToRelease))
(setq objDBXBlockDefinition(errortrap '(vla-item objDBXBlocks strBlockName)))
(setq lstGlobalToRelease (cons objDBXBlockDefinition lstGlobalToRelease))
)
objDBXBlockDefinition
(progn (princ "\nError reading DBX block definition object: ") nil)
)
)
;___________________________________________________________________________________________________________|
;
; Function to trap an error
;___________________________________________________________________________________________________________|
(defun ErrorTrap (symFunction / objError result)
(if (vl-catch-all-error-p
(setq objError (vl-catch-all-apply
'(lambda (XYZ)(set XYZ (eval symFunction)))
(list 'result))))
nil
(or result
'T
)
)
)
symVariableType lstValues
;___________________________________________________________________________________________________________|
;
; Function to create a safearray
;___________________________________________________________________________________________________________|
(defun ListToSafeArray (symVariableType lstValues / safObjects)
(if (and (setq safValues (vlax-make-safearray symVariableType (cons 0 (1- (length lstValues)))))
(errortrap '(vlax-safearray-fill safValues lstValues))
)
safValues
)
)
(princ "!")
(vl-load-com)
如果你看看李大师的odbxwraper:http://www.lee-mac.com/lisp/html/ObjectDBXWrapperV1-2.html
(对不起,复制/粘贴错误)
无论如何,在开始时,您可以看到变量dwl(图纸列表)的构建。如果图纸在此列表中,请在那里获取,否则请使用vla open
gr.Rlx 您可能感兴趣(或不感兴趣)的链接:https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/processing-between-2-drawings/td-p/1276502
gr.Rlx 我用它处理了两个活动文档
2 [缩进]
在我的功能区中有两个下拉菜单粘贴一个有粘贴到原始坐标,&粘贴Ctrl+V,粘贴为Bloc&k Ctrl+Shift+V,粘贴为组,粘贴为特殊,粘贴为超链接。所有宏和“仅粘贴为组”都有任何代码。
[/缩进] 你会成功的!https://www.cadtutor.net/forum/images/editor/smilie.png
快到周末了(但妻子没有休息…)
gr.Rlx
页:
[1]
2