CopyObjects メソッド(ActiveX)

複数のオブジェクトを複製します(ディープ クローニング)。

サポートされているプラットフォーム: Windows のみ

構文と要素

VBA:

RetVal = object.CopyObjects(Objects [, Owner] [, IDPairs])
object

タイプ: DatabaseDocument

このメソッドが適用されるオブジェクト。

Objects

アクセス: 入力のみ

タイプ: バリアント型(Objects の配列)

複写される基本オブジェクトの配列。オブジェクトの所有者はすべて同じでなければならず、また所有者はこのメソッドを呼び出すデータベースまたはドキュメントに属していなければなりません。

Owner

アクセス: 入力のみ(オプション)

タイプ: バリアント型(単一のオブジェクト)

複写されたオブジェクトの新しい所有者。所有者が指定されていない場合は、Objects の配列内のオブジェクトと同じ所有者でオブジェクトが作成されます。

IDPairs

アクセス: 入力と出力(オプション)

タイプ: バリアント型(IDPair オブジェクトの配列)

複写および変換処理中に発生したことに関する情報

  • 入力: 空のバリアント
  • 出力: IDPair オブジェクトの配列。

戻り値(RetVal)

タイプ: バリアント型(倍精度実数の配列)

新しく作成される複製オブジェクトの配列。この配列では、基本オブジェクトだけが返されます。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)
)