public CompareResult Compare(Mate refMate, Mate modMate) { CompareResultStatus status = CompareResultStatus.Identical; string details = ""; List <SldWorks.IMateEntity2> refMateEntities = GetMateEntities(refMate); List <SldWorks.IMateEntity2> modMateEntities = GetMateEntities(modMate); bool isDifferent = refMate.SwMate.Type != modMate.SwMate.Type || refMate.SwMate.Alignment != modMate.SwMate.Alignment || refMate.SwMate.CanBeFlipped != modMate.SwMate.CanBeFlipped || refMate.SwMate.Flipped != modMate.SwMate.Flipped; /* * System.Console.WriteLine("++++++++++" + refMate.SwMate.Type + " ++ " + modMate.SwMate.Type); * System.Console.WriteLine("++++++++++" + refMate.SwMate.Alignment + " ++ " + modMate.SwMate.Alignment); * System.Console.WriteLine("++++++++++" + refMate.SwMate.CanBeFlipped + " ++ " + modMate.SwMate.CanBeFlipped); * System.Console.WriteLine("++++++++++" + refMate.SwMate.Flipped + " ++ " + modMate.SwMate.Flipped); */ CompareResultStatus mateEntitiesStatus = CompareMateEntities(refMateEntities, modMateEntities); if (isDifferent || CompareResultStatus.Different == mateEntitiesStatus) { status = CompareResultStatus.Different; details = "Mate Type properties and/or Mate Entities Changed"; } return(new CompareResult(refMate.GetID(), status) { Details = details }); }
// Ameliorations : Creer une entite MateEntity pour utiliser le ListComparator private CompareResultStatus CompareMateEntities(List <SldWorks.IMateEntity2> refMateEntities, List <SldWorks.IMateEntity2> modMateEntities) { CompareResultStatus result = CompareResultStatus.Identical; bool isDifferent = false; List <SldWorks.IMateEntity2> removed = new List <SldWorks.IMateEntity2>(refMateEntities); List <SldWorks.IMateEntity2> added = new List <SldWorks.IMateEntity2>(modMateEntities); foreach (SldWorks.IMateEntity2 refMateEntity in refMateEntities) { SldWorks.IMateEntity2 modMateEntity = modMateEntities.Find(x => x.ReferenceComponent.GetID() == refMateEntity.ReferenceComponent.GetID()); if (null != modMateEntity) { isDifferent = refMateEntity.ReferenceComponent.Name2 != modMateEntity.ReferenceComponent.Name2 || refMateEntity.ReferenceType2 != modMateEntity.ReferenceType2; // SolidWorks API doesnt provide Name property for all IMateReferences // || refMateEntity.Reference.Name != modMateEntity.Reference.Name; removed.Remove(refMateEntity); added.Remove(modMateEntity); } } if (added.Count > 0 || removed.Count > 0 || isDifferent) { result = CompareResultStatus.Different; } return(result); }
public CompareResult(List <Object> added, List <Object> removed, List <Object> changed, List <Object> unchanged, CompareResultStatus status) { this.added = added; this.removed = removed; this.changed = changed; this.unchanged = unchanged; this.status = status; }
public CompareResult Merge(CompareResult newResult) { added.AddRange(newResult.Added); changed.AddRange(newResult.Changed); removed.AddRange(newResult.Removed); unchanged.AddRange(newResult.Unchanged); status = (CompareResultStatus)Math.Max((int)status, (int)newResult.Status); return(this); }
// Return all parts without suppressed /*public List<Object> GetComponents() * { * return new List<Object>((Object[])swAssembly.GetComponents(false)); * } */ public override CompareResult CompareTo(AbstractEntity target) { List <Object> added = new List <Object>(); List <Object> removed = new List <Object>(); List <Object> modified = new List <Object>(); List <Object> unchanged = new List <Object>(); CompareResultStatus status = CompareResultStatus.NotPerformed; CompareResult partsComparison = ListComparator.Instance.Compare(parts.Cast <AbstractEntity>().ToList(), ((Assembly)target).GetParts().Cast <AbstractEntity>().ToList()); CompareResult matesComparison = ListComparator.Instance.Compare(mates.Cast <AbstractEntity>().ToList(), ((Assembly)target).GetMates().Cast <AbstractEntity>().ToList()); CompareResult bodyFeaturesComparison = ListComparator.Instance.Compare(bodyFeatures.Cast <AbstractEntity>().ToList(), ((Assembly)target).GetBodyFeatures().Cast <AbstractEntity>().ToList()); CompareResult subAssembliesComparison = ListComparator.Instance.Compare(subAssemblies.Cast <AbstractEntity>().ToList(), ((Assembly)target).GetSubAssemblies().Cast <AbstractEntity>().ToList()); CompareResult geometricComparison = new VolumeComparator().Compare((ModelDoc2)this.swAssembly, (ModelDoc2)((Assembly)target).swAssembly); status = (CompareResultStatus)Math.Max((int)status, (int)partsComparison.Status); return(partsComparison.Merge(matesComparison).Merge(bodyFeaturesComparison).Merge(subAssembliesComparison).Merge(geometricComparison)); }
public CompareResult Compare(List <AbstractEntity> referenceList, List <AbstractEntity> modifiedList) { List <Object> removed = new List <AbstractEntity>(referenceList).Cast <Object>().ToList(); List <Object> added = new List <AbstractEntity>(modifiedList).Cast <Object>().ToList(); List <Object> changed = new List <CompareResult>().Cast <Object>().ToList(); List <Object> unchanged = new List <CompareResult>().Cast <Object>().ToList(); CompareResultStatus status = CompareResultStatus.NotPerformed; foreach (AbstractEntity referenceEntityToCompare in referenceList) { AbstractEntity modifiedEntityToCompare = modifiedList.Find(x => x.GetID() == referenceEntityToCompare.GetID()); if (null != modifiedEntityToCompare) { CompareResult result = referenceEntityToCompare.CompareTo(modifiedEntityToCompare); if (CompareResultStatus.Different == result.Status || CompareResultStatus.Similar == result.Status) { // changed.Add(referenceEntityToCompare); // Add CompareResult with a displayName if changed result.DisplayName = referenceEntityToCompare.GetName(); changed.Add(result); } else { unchanged.Add(referenceEntityToCompare); } removed.Remove(referenceEntityToCompare); added.Remove(modifiedEntityToCompare); status = (CompareResultStatus)Math.Max((int)status, (int)result.Status); } } if (added.Count > 0 || removed.Count > 0) { status = CompareResultStatus.Different; } return(new CompareResult(added, removed, changed, unchanged, status)); }
public CompareResult(CompareResultStatus status) { this.status = status; }
public CompareResult(int comparedId, CompareResultStatus status) { this.comparedId = comparedId; this.status = status; }