Compares two assembly instances and returns a result with details about the differences
Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 26.1.0.0 (26.1.0.34)
Syntax
C#
public static AssemblyDifference CompareAssemblyInstances( AssemblyInstance instance1, AssemblyInstance instance2 )
Parameters
- instance1 AssemblyInstance
- The first assembly instance to compare
- instance2 AssemblyInstance
- the second assembly instance to compare
Return Value
AssemblyDifferenceAn object describing the difference between the two instances
Exceptions
Exception | Condition |
---|---|
ArgumentNullException | A non-optional argument was null |
Remarks
Only the first found difference is returned. If the instances are identical, AssemblyDifferenceNone will be returned.Example
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) { TaskDialog.Show("Revit", "Naming categories differ: " + Category.GetCategory(doc, diffNameCat.NamingCategoryId1).Name + " & " + Category.GetCategory(doc, diffNameCat.NamingCategoryId2).Name); return; } AssemblyDifferenceMemberDifference memberDifference = difference as AssemblyDifferenceMemberDifference; if (memberDifference != null) { AssemblyMemberDifference assemblyMemberDifference = memberDifference.MemberDifference as AssemblyMemberDifference; AssemblyMemberDifferentCategory differentCategory = assemblyMemberDifference as AssemblyMemberDifferentCategory; if (differentCategory != null) { TaskDialog.Show("Revit", "Element categories differ: " + Category.GetCategory(doc, diffNameCat.NamingCategoryId1).Name + " & " + Category.GetCategory(doc, diffNameCat.NamingCategoryId2).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; }
VB
' 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 Long = diffNameCat.NamingCategoryId1.Value Dim catInt2 As Long = diffNameCat.NamingCategoryId2.Value 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 Long = differentCategory.CategoryId1.Value Dim int2 As Long = differentCategory.CategoryId2.Value 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