複数のオブジェクトを複製します(ディープ クローニング)。
サポートされているプラットフォーム: Windows のみ
VBA:
RetVal = object.CopyObjects(Objects [, Owner] [, IDPairs])
このメソッドが適用されるオブジェクト。
アクセス: 入力のみ
タイプ: バリアント型(Objects の配列)
複写される基本オブジェクトの配列。オブジェクトの所有者はすべて同じでなければならず、また所有者はこのメソッドを呼び出すデータベースまたはドキュメントに属していなければなりません。
アクセス: 入力のみ(オプション)
タイプ: バリアント型(単一のオブジェクト)
複写されたオブジェクトの新しい所有者。所有者が指定されていない場合は、Objects の配列内のオブジェクトと同じ所有者でオブジェクトが作成されます。
アクセス: 入力と出力(オプション)
タイプ: バリアント型(IDPair オブジェクトの配列)
複写および変換処理中に発生したことに関する情報
タイプ: バリアント型(倍精度実数の配列)
新しく作成される複製オブジェクトの配列。この配列では、基本オブジェクトだけが返されます。CopyObjects の処理中に発生したこと、または基本オブジェクトが持つオブジェクトのリストに関する情報は、IDpairs のパラメータを参照してください。
オブジェクトを他の開かれている図面にコピーするには、他の図面のモデル空間に Owner パラメータを設定します。
CopyObjects の処理中は、Objects パラメータ内の基本オブジェクトに所有または参照されているオブジェクトも複写されます。
VBA:
Sub Example_CopyObjects() ' This example creates a Circle object and uses the CopyObjects ' method to make a copy of the new Circle. Dim DOC1 As AcadDocument Dim circleObj1 As AcadCircle, circleObj2 As AcadCircle Dim circleObj1Copy As AcadCircle, circleObj2Copy As AcadCircle Dim centerPoint(0 To 2) As Double Dim radius1 As Double, radius2 As Double Dim radius1Copy As Double, radius2Copy As Double Dim objCollection(0 To 1) As Object Dim retObjects As Variant ' Define the Circle object centerPoint(0) = 0: centerPoint(1) = 0: centerPoint(2) = 0 radius1 = 5#: radius2 = 7# radius1Copy = 1#: radius2Copy = 2# ' Create a new drawing Set DOC1 = Documents.Add ' Add two circles to the drawing Set circleObj1 = DOC1.ModelSpace.AddCircle(centerPoint, radius1) Set circleObj2 = DOC1.ModelSpace.AddCircle(centerPoint, radius2) ThisDrawing.Application.ZoomAll ' Copy objects ' ' First put the objects to be copied into a form compatible with CopyObjects Set objCollection(0) = circleObj1 Set objCollection(1) = circleObj2 ' Copy object and get back a collection of the new objects (copies) retObjects = DOC1.CopyObjects(objCollection) ' Get newly created object and apply new properties to the copies Set circleObj1Copy = retObjects(0) Set circleObj2Copy = retObjects(1) circleObj1Copy.radius = radius1Copy circleObj2Copy.radius = radius2Copy ThisDrawing.Application.ZoomAll MsgBox "Circles copied." End Sub
Visual LISP:
(vl-load-com) (defun c:Example_CopyObjects() ;; This example creates a Circle object and uses the CopyObjects ;; method to make a copy of the new Circle. (setq acadObj (vlax-get-acad-object)) (setq doc (vla-get-ActiveDocument acadObj)) ;; Load the ObjectDBX library (if (= acLibImport nil) (progn (vlax-import-type-library :tlb-filename "C:\\Program Files\\Common Files\\Autodesk Shared\\axdb19enu.tlb" :methods-prefix "acdbm-" :properties-prefix "acdbp-" :constants-prefix "acdbc-" ) (setq acLibImport T) ) ) ;; Create a reference to the ObjectDBX object (setq acdbObj (vlax-create-object "ObjectDBX.AxDbDocument.20")) ;; Open an external drawing file (acdbm-open acdbObj (findfile ".\\Sample\\VBA\\Tower.dwg")) ;; Add two circles to the drawing (setq objCollection (vlax-make-safearray vlax-vbObject (cons 0 (- (vla-get-Count (vla-get-ModelSpace acdbObj)) 1))) count 0) ;; Copy objects (vlax-for eachObj (vla-get-ModelSpace acdbObj) (vlax-safearray-put-element objCollection count eachObj) (setq count (1+ count)) ) ;; Copy object and get back a collection of the new objects (copies) (setq retObjects (vla-CopyObjects acdbObj objCollection (vla-get-ModelSpace (vla-get-Database doc)))) (vla-ZoomAll acadObj) (alert "Model space objects copied.") ;; Close the in memory drawing (vlax-release-object acdbObj) )