satishrajdev 发表于 2022-7-5 16:17:14

复制块定义

大家好,
 
我需要在两个活动图形之间复制块定义(两个图形都在AutoCAD中打开)。我知道objectdbx可以做到这一点,但我不知道如何将其用于两个活动图形,这就是为什么我需要您的帮助。
 
当做
萨提什语

satishrajdev 发表于 2022-7-5 16:27:32

你好,有人能帮我吗?

Roy_043 发表于 2022-7-5 16:30:23

技术是一样的。如何通过odbx或文档集合访问这两个文档(源和目标)无关紧要。

rlx 发表于 2022-7-5 16:39:00

最近(昨天晚上)我在网上找到了这个,它看起来很有趣
 
 




;___________________________________________________________________________________________________________|
;
; 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)


tombu 发表于 2022-7-5 16:42:24

如果你看看李大师的odbxwraper:http://www.lee-mac.com/lisp/html/ObjectDBXWrapperV1-2.html
 
 
(对不起,复制/粘贴错误)
 
 
无论如何,在开始时,您可以看到变量dwl(图纸列表)的构建。如果图纸在此列表中,请在那里获取,否则请使用vla open
 
 
gr.Rlx

satishrajdev 发表于 2022-7-5 16:52:20

您可能感兴趣(或不感兴趣)的链接:https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/processing-between-2-drawings/td-p/1276502
 
 
gr.Rlx

rlx 发表于 2022-7-5 16:59:39

我用它处理了两个活动文档
2

rlx 发表于 2022-7-5 17:03:07

[缩进]
在我的功能区中有两个下拉菜单粘贴一个有粘贴到原始坐标,&粘贴Ctrl+V,粘贴为Bloc&k Ctrl+Shift+V,粘贴为组,粘贴为特殊,粘贴为超链接。所有宏和“仅粘贴为组”都有任何代码。
[/缩进]

satishrajdev 发表于 2022-7-5 17:08:50

你会成功的!https://www.cadtutor.net/forum/images/editor/smilie.png
 
 
快到周末了(但妻子没有休息…)
 
 
gr.Rlx

tombu 发表于 2022-7-5 17:16:45

页: [1] 2
查看完整版本: 复制块定义