Duplicate Method


Duplicates the appearance asset element.

Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 23.0.0.0 (23.1.0.0)
Since: 2018.1

Syntax

C#
public AppearanceAssetElement Duplicate(
	string name
)
Visual Basic
Public Function Duplicate ( _
	name As String _
) As AppearanceAssetElement
Visual C++
public:
AppearanceAssetElement^ Duplicate(
	String^ name
)

Parameters

name
Type: System String
Name of the new appearance asset element - this name must be correctly structured for Revit use and not duplicate the name of another appearance asset in the document.

Return Value

The new AppearanceAssetElement.

Remarks

The asset contained by this element will be duplicated as well. Changes to the duplicated element or its asset do not affect the original element and asset.

Examples

Copy C#
public void DuplicateAndModifyMaterial(Material material)
{
   ElementId appearanceAssetId = material.AppearanceAssetId;

   AppearanceAssetElement assetElem = material.Document.GetElement(appearanceAssetId) as AppearanceAssetElement;

   ElementId duplicateAssetElementId = ElementId.InvalidElementId;

   using (Transaction t = new Transaction(material.Document, "Duplicate Red Carpet Material"))
   {
      t.Start();

      // Duplicate the material
      Material duplicateMaterial = material.Duplicate("Blue Carpet");

      // Duplicate the appearance asset and the asset in it
      AppearanceAssetElement duplicateAssetElement = assetElem.Duplicate("Blue Carpet");

      // Assign the asset element to the material
      duplicateMaterial.AppearanceAssetId = duplicateAssetElement.Id;

      duplicateAssetElementId = duplicateAssetElement.Id;

      t.Commit();
   }

   // Make changes to the duplicate asset
   using (Transaction t2 = new Transaction(material.Document, "Change blue carpet material"))
   {
      t2.Start();

      using (AppearanceAssetEditScope editScope = new AppearanceAssetEditScope(assetElem.Document))
      {
         Asset editableAsset = editScope.Start(duplicateAssetElementId);   // returns an editable copy of the appearance asset

         // Description
         AssetPropertyString descriptionProperty =
            editableAsset.FindByName("description") as AssetPropertyString;
         descriptionProperty.Value = "blue carpet";

         // Diffuse image
         AssetPropertyDoubleArray4d genericDiffuseProperty = editableAsset.FindByName("generic_diffuse") as AssetPropertyDoubleArray4d;

         genericDiffuseProperty.SetValueAsColor(new Color(0x00, 0x00, 0xFF));

         Asset connectedAsset = genericDiffuseProperty.GetSingleConnectedAsset();

         AssetPropertyString bitmapProperty = connectedAsset.FindByName("unifiedbitmap_Bitmap") as AssetPropertyString;

         bitmapProperty.Value = "Finishes.Flooring.Carpet.4.png";

         editScope.Commit(true);
      }

      t2.Commit();
   }
}
Copy VB.NET
Public Sub DuplicateAndModifyMaterial(material As Material)
    Dim appearanceAssetId As ElementId = material.AppearanceAssetId

    Dim assetElem As AppearanceAssetElement = TryCast(material.Document.GetElement(appearanceAssetId), AppearanceAssetElement)

    Dim duplicateAssetElementId As ElementId = ElementId.InvalidElementId

    Using t As New Transaction(material.Document, "Duplicate Red Carpet Material")
        t.Start()

        ' Duplicate the material
        Dim duplicateMaterial As Material = material.Duplicate("Blue Carpet")

        ' Duplicate the appearance asset and the asset in it
        Dim duplicateAssetElement As AppearanceAssetElement = assetElem.Duplicate("Blue Carpet")

        ' Assign the asset element to the material
        duplicateMaterial.AppearanceAssetId = duplicateAssetElement.Id

        duplicateAssetElementId = duplicateAssetElement.Id

        t.Commit()
    End Using

    ' Make changes to the duplicate asset
    Using t2 As New Transaction(material.Document, "Change blue carpet material")
        t2.Start()

        Using editScope As New AppearanceAssetEditScope(assetElem.Document)
            Dim editableAsset As Asset = editScope.Start(duplicateAssetElementId)
       ' returns an editable copy of the appearance asset
       Dim descriptionProperty As AssetPropertyString = TryCast(editableAsset.FindByName("description"), AssetPropertyString)
       descriptionProperty.Value = "blue carpet"

       ' Diffuse image
       Dim genericDiffuseProperty As AssetPropertyDoubleArray4d = TryCast(editableAsset.FindByName("generic_diffuse"), AssetPropertyDoubleArray4d)

       genericDiffuseProperty.SetValueAsColor(New Color(&H0, &H0, &HFF))

            Dim connectedAsset As Asset = genericDiffuseProperty.GetSingleConnectedAsset()

       Dim bitmapProperty As AssetPropertyString = TryCast(connectedAsset.FindByName("unifiedbitmap_Bitmap"), AssetPropertyString)

       bitmapProperty.Value = "Finishes.Flooring.Carpet.4.png"

            editScope.Commit(True)
        End Using

        t2.Commit()
    End Using
End Sub

Exceptions

Exception Condition
Autodesk.Revit.Exceptions ArgumentException name cannot include prohibited characters, such as "{, }, [, ], |, ;, less-than sign, greater-than sign, ?, `, ~". -or- The given value for name is already in use as an appearance asset name.
Autodesk.Revit.Exceptions ArgumentNullException A non-optional argument was null

See Also