Skip to content

Commit

Permalink
Revit_Engine: fix the copy of the DiffingConfig properties
Browse files Browse the repository at this point in the history
  • Loading branch information
alelom authored and pawelbaran committed Apr 13, 2023
1 parent e849c36 commit de5a524
Showing 1 changed file with 22 additions and 10 deletions.
32 changes: 22 additions & 10 deletions Revit_Engine/Compute/RevitDiffing.cs
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ private static Diff Diffing(IEnumerable<object> pastObjects, IEnumerable<object>
}

// Checks and setup of DiffingConfig/ComparisonConfig.
diffConfig = diffConfig ?? new DiffingConfig();
RevitComparisonConfig rcc = diffConfig?.ComparisonConfig as RevitComparisonConfig;
if (rcc == null)
{
Expand All @@ -152,11 +153,6 @@ private static Diff Diffing(IEnumerable<object> pastObjects, IEnumerable<object>
if (diffConfig != null)
BH.Engine.Reflection.Modify.CopyPropertiesFromParent(rcc, diffConfig?.ComparisonConfig);
}
DiffingConfig diffConfigClone = GetRevitDiffingConfig(rcc);

//Add any custom object difference compares on the provided diff config
if (diffConfig.CustomObjectDifferencesComparers != null && diffConfig.CustomObjectDifferencesComparers.Any())
diffConfigClone.CustomObjectDifferencesComparers.AddRange(diffConfig.CustomObjectDifferencesComparers);

// Get the past and following RevitIdentifiers fragments.
IEnumerable<RevitIdentifiers> pastIdFragments = pastObjects.OfType<IBHoMObject>().Select(obj => obj.GetRevitIdentifiers()).Where(x => x != null);
Expand Down Expand Up @@ -206,20 +202,23 @@ private static Diff Diffing(IEnumerable<object> pastObjects, IEnumerable<object>
return null;
}

// Get a Revit-customised instance of DiffingConfig.
DiffingConfig diffConfigClone = GetRevitDiffingConfig(rcc, diffConfig);

//Compute the diffing through DiffWithCustomIds making use of the ids extracted from the objects
Diff revitDiff = BH.Engine.Diffing.Compute.DiffWithCustomIds(pastObjects.ToList(), pastIds, followingObjects.ToList(), followingIds, diffConfigClone);
return revitDiff;
}

private static DiffingConfig GetRevitDiffingConfig(RevitComparisonConfig rcc)
private static DiffingConfig GetRevitDiffingConfig(RevitComparisonConfig rcc, DiffingConfig originalDiffConfig = null)
{
rcc = rcc ?? new RevitComparisonConfig();

rcc.TypeExceptions.Add(typeof(RevitParameter));
rcc.TypeExceptions.Add(typeof(RevitPulledParameters));
rcc.TypeExceptions.Add(typeof(RevitParametersToPush));

return new DiffingConfig()
DiffingConfig result = new DiffingConfig()
{
ComparisonConfig = rcc,
CustomObjectDifferencesComparers = new List<Func<object, object, BaseComparisonConfig, List<IPropertyDifference>>>()
Expand All @@ -228,8 +227,21 @@ private static DiffingConfig GetRevitDiffingConfig(RevitComparisonConfig rcc)
(obj1, obj2, baseComparisonConfig) => { return Query.RevitRevitParametersToPushDifferences(obj1, obj2, baseComparisonConfig); }
}
};
}
}
}

// If an instance of a diffingConfig was provided, copy its properties.
if (originalDiffConfig != null)
{
//Add any custom object difference compares provided via the original diff config.
if (originalDiffConfig.CustomObjectDifferencesComparers != null && originalDiffConfig.CustomObjectDifferencesComparers.Any())
result.CustomObjectDifferencesComparers.AddRange(originalDiffConfig.CustomObjectDifferencesComparers.Except(result.CustomObjectDifferencesComparers));

result.AllowDuplicateIds = originalDiffConfig.AllowDuplicateIds;
result.EnablePropertyDiffing = originalDiffConfig.EnablePropertyDiffing;
result.IncludeUnchangedObjects = originalDiffConfig.IncludeUnchangedObjects;
result.ComparisonConfig = originalDiffConfig.ComparisonConfig;
}

return result;
}
}
}

0 comments on commit de5a524

Please sign in to comment.