private void validateWorker(List <IConceptRoot> conceptRoots, List <IfcPropertySetTemplate> propertySetTemplates, ref Dictionary <IfcRoot, List <ValidationResult> > results) { List <ValidationResult> validationResults = new List <ValidationResult>(); foreach (var propertySetTemplate in propertySetTemplates) { List <ValidationResult> templateResults = validatePropertySetTemplate(propertySetTemplate); if (templateResults != null) { validationResults.AddRange(templateResults); } } foreach (var conceptRoot in conceptRoots) { List <ValidationResult> rootResults = conceptRoot.Validate(this); if (rootResults != null) { validationResults.AddRange(rootResults); } } if (validationResults.Count > 0) { results[this] = validationResults; } foreach (var od in IsDecomposedBy.SelectMany(x => x.RelatedObjects)) { od.validateWorker(conceptRoots, propertySetTemplates, ref results); } foreach (var od in IsNestedBy.SelectMany(x => x.RelatedObjects)) { od.validateWorker(conceptRoots, propertySetTemplates, ref results); } IfcSpatialElement spatialElement = this as IfcSpatialElement; if (spatialElement != null) { foreach (var relatedElement in spatialElement.ContainsElements.SelectMany(x => x.RelatedElements)) { relatedElement.validateWorker(conceptRoots, propertySetTemplates, ref results); } foreach (var relatingSystem in spatialElement.ServicedBySystems.Select(x => x.RelatingSystem)) { relatingSystem.validateWorker(conceptRoots, propertySetTemplates, ref results); } } }
public Tuple <DateTime, DateTime> ComputeAndSetScheduledStartFinishTimes() { DateTime scheduledStart = DateTime.MaxValue, scheduledFinish = DateTime.MinValue; List <IfcWorkControl> subControls = IsDecomposedBy.SelectMany(x => x.RelatedObjects).OfType <IfcWorkControl>().ToList(); subControls.AddRange(IsNestedBy.SelectMany(x => x.RelatedObjects).OfType <IfcWorkControl>()); foreach (IfcWorkControl workControl in subControls) { Tuple <DateTime, DateTime> startFinish = workControl.ComputeAndSetScheduledStartFinishTimes(); if (startFinish.Item1 != DateTime.MinValue && startFinish.Item1 < scheduledStart) { scheduledStart = startFinish.Item1; } if (startFinish.Item2 > scheduledFinish) { scheduledFinish = startFinish.Item2; } } foreach (IfcTask task in Controls.SelectMany(x => x.RelatedObjects).OfType <IfcTask>()) { Tuple <DateTime, DateTime> startFinish = task.computeScheduleStartFinish(); if (startFinish.Item1 != DateTime.MinValue && startFinish.Item1 < scheduledStart) { scheduledStart = startFinish.Item1; } if (startFinish.Item2 > scheduledFinish) { scheduledFinish = startFinish.Item2; } } if (mDatabase.Release > ReleaseVersion.IFC2x3) { mStartTime = scheduledStart; mFinishTime = scheduledFinish; } else { if (scheduledStart > DateTime.MinValue) { mSSStartTime = new IfcDateAndTime(mDatabase, scheduledStart); } if (scheduledFinish > DateTime.MinValue) { mSSFinishTime = new IfcDateAndTime(mDatabase, scheduledFinish); } } return(new Tuple <DateTime, DateTime>(scheduledStart, scheduledFinish)); }