CompareAssemblyInstances Method


Compares two assembly instances and returns a result with details about the differences

Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 17.0.0.0 (17.0.484.0)
Since: 2012

Syntax

C#
public static AssemblyDifference CompareAssemblyInstances(
	AssemblyInstance instance1,
	AssemblyInstance instance2
)
Visual Basic
Public Shared Function CompareAssemblyInstances ( _
	instance1 As AssemblyInstance, _
	instance2 As AssemblyInstance _
) As AssemblyDifference
Visual C++
public:
static AssemblyDifference^ CompareAssemblyInstances(
	AssemblyInstance^ instance1, 
	AssemblyInstance^ instance2
)

Parameters

instance1
Type: Autodesk.Revit.DB AssemblyInstance
The first assembly instance to compare
instance2
Type: Autodesk.Revit.DB AssemblyInstance
the second assembly instance to compare

Return Value

An object describing the difference between the two instances

Remarks

Only the first found difference is returned. If the instances are identical, AssemblyDifferenceNone will be returned.

Examples

Copy C#
// Identify the difference, if any, between two assembly instances
void FindAssemblyDifferences(AssemblyInstance instance1, AssemblyInstance instance2)
{
    Autodesk.Revit.DB.Document doc = instance1.Document;
        AssemblyDifference difference = AssemblyInstance.CompareAssemblyInstances(instance1, instance2);

        AssemblyDifferenceNone diffNone = difference as AssemblyDifferenceNone;
        if (diffNone != null)
        {
            TaskDialog.Show("Revit", "Assemblies are identical");
            return;
        }

        AssemblyDifferenceConfiguration diffConfig = difference as AssemblyDifferenceConfiguration;
        if (diffConfig != null)
        {
            TaskDialog.Show("Revit", "Elements are not arranged in space relative to each other in the same way");
            return;
        }

        AssemblyDifferenceMemberCount diffMemberCount = difference as AssemblyDifferenceMemberCount;
        if (diffMemberCount != null)
        {
            TaskDialog.Show("Revit", "Elements counts differ: " + diffMemberCount.Count1 + " & " + diffMemberCount.Count2);
            return;
        }

        AssemblyDifferenceNamingCategory diffNameCat = difference as AssemblyDifferenceNamingCategory;
        if (diffNameCat != null)
        {
            int catInt1 = diffNameCat.NamingCategoryId1.IntegerValue;
            int catInt2 = diffNameCat.NamingCategoryId2.IntegerValue;
            TaskDialog.Show("Revit", "Naming categories differ: " + 
                doc.Settings.Categories.get_Item((BuiltInCategory)catInt1).Name + " & " +
                doc.Settings.Categories.get_Item((BuiltInCategory)catInt2).Name);
            return;
        }

        AssemblyDifferenceMemberDifference memberDifference = difference as AssemblyDifferenceMemberDifference;
        if (memberDifference != null)
        {
            AssemblyMemberDifference assemblyMemberDifference = memberDifference.MemberDifference as AssemblyMemberDifference;

            AssemblyMemberDifferentCategory differentCategory = assemblyMemberDifference as AssemblyMemberDifferentCategory;
            if (differentCategory != null)
            {
                int int1 = differentCategory.CategoryId1.IntegerValue;
                int int2 = differentCategory.CategoryId2.IntegerValue;
                TaskDialog.Show("Revit", "Element categories differ: " +
                    doc.Settings.Categories.get_Item((BuiltInCategory)int1).Name + " & " +
                    doc.Settings.Categories.get_Item((BuiltInCategory)int2).Name);
                return;
            }
            AssemblyMemberDifferentGeometry differentGeometry = assemblyMemberDifference as AssemblyMemberDifferentGeometry;
            if (differentGeometry != null)
            {
                TaskDialog.Show("Revit", "Member geometry differs");
                return;
            }
            AssemblyMemberDifferentParameters differentParameters = assemblyMemberDifference as AssemblyMemberDifferentParameters;
            if (differentParameters != null)
            {
                TaskDialog.Show("Revit", "Member parameters differs");
                return;
            }
            AssemblyMemberDifferentType differentType = assemblyMemberDifference as AssemblyMemberDifferentType;
            if (differentType != null)
            {
                TaskDialog.Show("Revit", "Element types differ: " + doc.GetElement(differentType.TypeId1).Name + " & " + doc.GetElement(differentType.TypeId2).Name);
                return;
            }
        }
        return;
}
Copy VB.NET
' Identify the difference, if any, between two assembly instances
Private Sub FindAssemblyDifferences(instance1 As AssemblyInstance, instance2 As AssemblyInstance)
   Dim doc As Autodesk.Revit.DB.Document = instance1.Document
   Dim difference As AssemblyDifference = AssemblyInstance.CompareAssemblyInstances(instance1, instance2)

   Dim diffNone As AssemblyDifferenceNone = TryCast(difference, AssemblyDifferenceNone)
   If diffNone IsNot Nothing Then
      TaskDialog.Show("Revit", "Assemblies are identical")
      Return
   End If

   Dim diffConfig As AssemblyDifferenceConfiguration = TryCast(difference, AssemblyDifferenceConfiguration)
   If diffConfig IsNot Nothing Then
      TaskDialog.Show("Revit", "Elements are not arranged in space relative to each other in the same way")
      Return
   End If

   Dim diffMemberCount As AssemblyDifferenceMemberCount = TryCast(difference, AssemblyDifferenceMemberCount)
   If diffMemberCount IsNot Nothing Then
      TaskDialog.Show("Revit", ("Elements counts differ: " + diffMemberCount.Count1 & " & ") + diffMemberCount.Count2)
      Return
   End If

   Dim diffNameCat As AssemblyDifferenceNamingCategory = TryCast(difference, AssemblyDifferenceNamingCategory)
   If diffNameCat IsNot Nothing Then
      Dim catInt1 As Integer = diffNameCat.NamingCategoryId1.IntegerValue
      Dim catInt2 As Integer = diffNameCat.NamingCategoryId2.IntegerValue
      TaskDialog.Show("Revit", ("Naming categories differ: " + doc.Settings.Categories.Item(DirectCast(catInt1, BuiltInCategory)).Name & " & ") + doc.Settings.Categories.Item(DirectCast(catInt2, BuiltInCategory)).Name)
      Return
   End If

   Dim memberDifference As AssemblyDifferenceMemberDifference = TryCast(difference, AssemblyDifferenceMemberDifference)
   If memberDifference IsNot Nothing Then
      Dim assemblyMemberDifference As AssemblyMemberDifference = TryCast(memberDifference.MemberDifference, AssemblyMemberDifference)

      Dim differentCategory As AssemblyMemberDifferentCategory = TryCast(assemblyMemberDifference, AssemblyMemberDifferentCategory)
      If differentCategory IsNot Nothing Then
         Dim int1 As Integer = differentCategory.CategoryId1.IntegerValue
         Dim int2 As Integer = differentCategory.CategoryId2.IntegerValue
         TaskDialog.Show("Revit", ("Element categories differ: " + doc.Settings.Categories.Item(DirectCast(int1, BuiltInCategory)).Name & " & ") + doc.Settings.Categories.Item(DirectCast(int2, BuiltInCategory)).Name)
         Return
      End If
      Dim differentGeometry As AssemblyMemberDifferentGeometry = TryCast(assemblyMemberDifference, AssemblyMemberDifferentGeometry)
      If differentGeometry IsNot Nothing Then
         TaskDialog.Show("Revit", "Member geometry differs")
         Return
      End If
      Dim differentParameters As AssemblyMemberDifferentParameters = TryCast(assemblyMemberDifference, AssemblyMemberDifferentParameters)
      If differentParameters IsNot Nothing Then
         TaskDialog.Show("Revit", "Member parameters differs")
         Return
      End If
      Dim differentType As AssemblyMemberDifferentType = TryCast(assemblyMemberDifference, AssemblyMemberDifferentType)
      If differentType IsNot Nothing Then
         TaskDialog.Show("Revit", ("Element types differ: " + doc.GetElement(differentType.TypeId1).Name & " & ") + doc.GetElement(differentType.TypeId2).Name)
         Return
      End If
   End If
   Return
End Sub

Exceptions

Exception Condition
Autodesk.Revit.Exceptions ArgumentNullException A non-optional argument was NULL

See Also