|  Element  | 
 Copies a set of elements from source document to destination document. 
 Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 25.0.0.0 (25.0.0.0)
 Syntax
 Syntax  public static ICollection<ElementId> CopyElements(
	Document sourceDocument,
	ICollection<ElementId> elementsToCopy,
	Document destinationDocument,
	Transform transform,
	CopyPasteOptions options
)Parameters
- sourceDocument Document
- The document that contains the elements to copy.
- elementsToCopy ICollection ElementId
- The set of elements to copy.
- destinationDocument Document
- The destination document to paste the elements into.
- transform Transform
- The transform for the new elements. Can be if no transform is required.
- options CopyPasteOptions
- Optional settings. Can be if default settings should be used.
Return Value
ICollection ElementIdThe ids of the newly created copied elements.
 Exceptions
 Exceptions  | Exception | Condition | 
|---|---|
| ArgumentException | The given element id set is empty. -or- One or more elements in elementsToCopy do not exist in the document. -or- Some of the elements cannot be copied, because they are view-specific. -or- The input set of elements contains Sketch members along with other elements or there is no active Sketch edit mode. | 
| ArgumentNullException | A non-optional argument was null | 
| InvalidOperationException | It is not allowed to copy Sketch members between non-parallel sketches. -or- The elements cannot be copied. | 
| OperationCanceledException | User cancelled the operation. | 
 Remarks
 Remarks  Copies are placed at their respective original locations or locations specified by the optional transformation.
This method can be used for copying non-view specific elements only. For copying view-specific elements, use the view-specific form of the CopyElements method.
The destination document can be the same as the source document.
This method performs rehosting of elements where applicable.
 Example
 Example  // Copy wall element.
public void CopyWall(Autodesk.Revit.DB.Document sourceDocument, Autodesk.Revit.DB.Document destinationDocument, Autodesk.Revit.DB.Wall wall)
{
   Transform transform = Transform.CreateTranslation(new XYZ(150, 150, 0));
   CopyPasteOptions options = new CopyPasteOptions();
   ElementTransformUtils.CopyElements(sourceDocument, new List<ElementId> { wall.Id }, destinationDocument, transform, options);
}
// The method copies existing Sketch curves inside of the Floor sketch.
public void CopySketchMembersInsideOfSketch(Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.Floor floor)
{
   var floorSketch = document.GetElement(floor.SketchId) as Sketch;
   // Start Sketch edit mode to copy Sketch members inside of the Sketch
   SketchEditScope sketchScope = new SketchEditScope(document, "Edit floor sketch");
   sketchScope.Start(floor.SketchId);
   // Start transaction to be able to modify the document
   using (Transaction tr = new Transaction(document, "Copy sketch members"))
   {
      tr.Start();
      var transform = Transform.CreateTranslation(new XYZ(150, 150, 0));
      var copiedIds = ElementTransformUtils.CopyElements(
         document, floorSketch.GetAllElements(), document, transform, new CopyPasteOptions());
      tr.Commit();
   }
   sketchScope.Commit(new CustomFailuresPreprocessor());
}
// The method copies Sketch members from the Floor to the Ceiling Sketch.
public void CopySketchMembersBetweenSketch(Autodesk.Revit.DB.Floor floor, Autodesk.Revit.DB.Ceiling ceiling)
{
   var ceilingSketch = ceiling.Document.GetElement(ceiling.SketchId) as Sketch;
   var floorSketch = floor.Document.GetElement(floor.SketchId) as Sketch;
   // Sketch members can be copied only between parallel Sketches.
   if (!MathComparisonUtils.IsAlmostEqual(
      Math.Abs(floorSketch.SketchPlane.GetPlane().Normal.DotProduct(ceilingSketch.SketchPlane.GetPlane().Normal)), 1.0))
   {
      return;
   }
   // Start Sketch edit mode, for the ceiling sketch, to copy and paste floor Sketch members to the ceiling
   SketchEditScope sketchScope = new SketchEditScope(ceiling.Document, "Edit ceiling sketch");
   sketchScope.Start(ceiling.SketchId);
   // Start transaction to be able to modify the document
   using (Transaction tr = new Transaction(ceiling.Document, "Copy sketch members"))
   {
      tr.Start();
      var transform = Transform.CreateTranslation(new XYZ(150, 150, 0));
      var copiedIds = ElementTransformUtils.CopyElements(
         floor.Document, floorSketch.GetAllElements(), ceiling.Document, transform, new CopyPasteOptions());
      tr.Commit();
   }
   sketchScope.Commit(new CustomFailuresPreprocessor());
}
// The method copies ModelCurves from the document to the Sketch.
public void CopyModelCurvesFromDocumentToSketch(Autodesk.Revit.DB.Sketch sketch, List<ElementId> modelCurveIds)
{
   // Start Sketch edit mode to insert ModelCurves into the Floor Sketch.
   SketchEditScope sketchScope = new SketchEditScope(sketch.Document, "Edit floor sketch");
   sketchScope.Start(sketch.Id);
   // Start transaction to be able to modify the document
   using (Transaction tr = new Transaction(sketch.Document, "Copy sketch members"))
   {
      tr.Start();
      var transform = Transform.CreateTranslation(new XYZ(150, 150, 0));
      var copiedIds = ElementTransformUtils.CopyElements(
         sketch.Document, modelCurveIds, sketch.Document, transform, new CopyPasteOptions());
      tr.Commit();
   }
   // Sketch curves should not have open loops or intersections to be successfully committed.
   sketchScope.Commit(new CustomFailuresPreprocessor());
} See Also
 See Also