Example #1
0
        /// <summary>
        /// set up IfcRelSequence for the task
        /// </summary>
        /// <param name="row">COBieJobRow holding the data</param>
        private void SetPriors(COBieJobRow row)
        {
            IEnumerable <IfcTask> ifcTaskFound = IfcTasks.Where(task => task.Name == row.Name && task.TaskId == row.TaskNumber);

            if (ifcTaskFound.Count() == 1) //should equal one
            {
                IfcTask ifcTask = ifcTaskFound.First();
                if (ValidateString(row.Priors))
                {
                    string   priors      = row.Priors.ToString();
                    char     splitKey    = GetSplitChar(priors);
                    string[] priorsArray = row.Priors.ToString().Split(splitKey);
                    foreach (string prior in priorsArray)
                    {
                        string name     = row.Name.ToLower().Trim();
                        string testName = prior.ToLower().Trim();
                        IEnumerable <IfcTask> ifcTaskRelating      = IfcTasks.Where(task => (ifcTask.EntityLabel != task.EntityLabel) && (task.TaskId.ToString().ToLower().Trim() == testName) && (task.Name.ToString().ToLower().Trim() == name));
                        List <IfcTask>        ifcTaskRelatingTasks = ifcTaskRelating.ToList(); //avoids crash of foreach loop, Steve to fix then this can be removed
                        foreach (IfcTask ifcTaskitem in ifcTaskRelatingTasks)
                        {
                            IfcRelSequence relSequence = Model.Instances.New <IfcRelSequence>();
                            relSequence.RelatedProcess  = ifcTask;
                            relSequence.RelatingProcess = ifcTaskitem;
                        }
                    }
                }
            }
            //throw new Exception("COBieXBimJob.SetPriors(): did not find a single task matching name and task number");
        }
Example #2
0
        /// <summary>
        /// Add the IfcTask to the Model object
        /// </summary>
        /// <param name="cOBieSheet">COBieSheet of COBieResourceRow to read data from</param>
        public void SerialiseJob(COBieSheet <COBieJobRow> cOBieSheet)
        {
            using (XbimReadWriteTransaction trans = Model.BeginTransaction("Add Job"))
            {
                try
                {
                    int count = 1;
                    IfcTypeObjects = Model.Instances.OfType <IfcTypeObject>();
                    IfcConstructionEquipmentResources = Model.Instances.OfType <IfcConstructionEquipmentResource>();

                    ProgressIndicator.ReportMessage("Starting Jobs...");
                    ProgressIndicator.Initialise("Creating Jobs", (cOBieSheet.RowCount * 2));
                    for (int i = 0; i < cOBieSheet.RowCount; i++)
                    {
                        BumpTransaction(trans, count);
                        count++;
                        ProgressIndicator.IncrementAndUpdate();
                        COBieJobRow row = cOBieSheet[i];
                        AddJob(row);
                    }
                    //we need to assign IfcRelSequence relationships, but we need all tasks implemented, so loop rows again
                    IfcTasks = Model.Instances.OfType <IfcTask>(); //get new tasks
                    for (int i = 0; i < cOBieSheet.RowCount; i++)
                    {
                        BumpTransaction(trans, count);
                        ProgressIndicator.IncrementAndUpdate();
                        COBieJobRow row = cOBieSheet[i];
                        SetPriors(row);
                        count++;
                    }
                    ProgressIndicator.Finalise();

                    trans.Commit();
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }
Example #3
0
        /// <summary>
        /// Add the data to the IfcTask object
        /// </summary>
        /// <param name="row">COBieJobRow holding the data</param>
        private void AddJob(COBieJobRow row)
        {
            IEnumerable <IfcTypeObject> ifcTypeObjects = Enumerable.Empty <IfcTypeObject>();
            IfcTask ifcTask = null;

            //get the objects in the typeName cell
            if (ValidateString(row.TypeName))
            {
                List <string> typeNames = SplitString(row.TypeName, ':');
                ifcTypeObjects = IfcTypeObjects.Where(to => typeNames.Contains(to.Name.ToString().Trim()));
            }

            //if merging check for existing task
            if (XBimContext.IsMerge)
            {
                string taskNo = string.Empty;
                //get the task ID
                if (ValidateString(row.TaskNumber))
                {
                    taskNo = row.TaskNumber;
                }
                //see if task matches name and task number
                ifcTask = CheckIfObjExistOnMerge <IfcTask>(row.Name).Where(task => task.TaskId == taskNo).FirstOrDefault();
                if (ifcTask != null)
                {
                    IfcRelAssignsToProcess processRel = Model.Instances.Where <IfcRelAssignsToProcess>(rd => rd.RelatingProcess == ifcTask).FirstOrDefault();
                    int matchCount = ifcTypeObjects.Count(to => processRel.RelatedObjects.Contains(to));
                    if (matchCount == ifcTypeObjects.Count()) //task IfcRelAssignsToProcess object hold the correct number of ifcTypeObjects objects so consider a match
                    {
                        return;                               //consider a match so return
                    }
                }
            }

            //no match on task
            ifcTask = Model.Instances.New <IfcTask>();

            //Add Created By, Created On and ExtSystem to Owner History.
            SetUserHistory(ifcTask, row.ExtSystem, row.CreatedBy, row.CreatedOn);

            //using statement will set the Model.OwnerHistoryAddObject to ifcConstructionEquipmentResource.OwnerHistory as OwnerHistoryAddObject is used upon any property changes,
            //then swaps the original OwnerHistoryAddObject back in the dispose, so set any properties within the using statement
            using (COBieXBimEditScope context = new COBieXBimEditScope(Model, ifcTask.OwnerHistory))
            {
                //Add Name
                if (ValidateString(row.Name))
                {
                    ifcTask.Name = row.Name;
                }

                //Add Category
                if (ValidateString(row.Category))
                {
                    ifcTask.ObjectType = row.Category;
                }

                //AddStatus
                if (ValidateString(row.Status))
                {
                    ifcTask.Status = row.Status;
                }

                //Add Type Relationship
                if (ifcTypeObjects.Any())
                {
                    SetRelAssignsToProcess(ifcTask, ifcTypeObjects);
                }
                //Add GlobalId
                AddGlobalId(row.ExtIdentifier, ifcTask);

                //add Description
                if (ValidateString(row.Description))
                {
                    ifcTask.Description = row.Description;
                }


                //Add Duration and duration Unit
                if (ValidateString(row.Duration))
                {
                    IfcPropertySingleValue ifcPropertySingleValue = AddPropertySingleValue(ifcTask, "Pset_Job_COBie", "Job Properties From COBie", "TaskDuration", "Task Duration", new IfcReal(row.Duration));
                    //DurationUnit
                    if (ValidateString(row.DurationUnit))
                    {
                        ifcPropertySingleValue.Unit = GetDurationUnit(row.DurationUnit);
                    }
                }

                //Add start time and start unit
                if (ValidateString(row.Start))
                {
                    IfcPropertySingleValue ifcPropertySingleValue = AddPropertySingleValue(ifcTask, "Pset_Job_COBie", null, "TaskStartDate", "Task Start Date", new IfcText(row.Start));
                    //TaskStartUnit
                    if (ValidateString(row.TaskStartUnit))
                    {
                        ifcPropertySingleValue.Unit = GetDurationUnit(row.TaskStartUnit);
                    }
                }

                //Add frequency and frequency unit
                if (ValidateString(row.Frequency))
                {
                    IfcPropertySingleValue ifcPropertySingleValue = AddPropertySingleValue(ifcTask, "Pset_Job_COBie", null, "TaskInterval", "Task Interval", new IfcReal(row.Frequency));
                    //TaskStartUnit
                    if (ValidateString(row.FrequencyUnit))
                    {
                        ifcPropertySingleValue.Unit = GetDurationUnit(row.FrequencyUnit);
                    }
                }

                //Add Task ID
                if (ValidateString(row.TaskNumber))
                {
                    ifcTask.TaskId = row.TaskNumber;
                }

                //Add Priors, done in another loop see above

                //Add Resource names
                if (ValidateString(row.ResourceNames))
                {
                    List <string> Resources = row.ResourceNames.Split(',').ToList <string>(); //did dangerous using , as ',' as user can easily place out of sequence.
                    for (int i = 0; i < Resources.Count; i++)
                    {
                        Resources[i] = Resources[i].ToLower().Trim().Replace(".", string.Empty); //remove full stop
                    }
                    IEnumerable <IfcConstructionEquipmentResource> ifcConstructionEquipmentResource = IfcConstructionEquipmentResources.Where(cer => Resources.Contains(cer.Name.ToString().ToLower().Trim().Replace(".", string.Empty)));
                    if (ifcConstructionEquipmentResource != null)
                    {
                        SetRelAssignsToProcess(ifcTask, ifcConstructionEquipmentResource);
                    }
                }
            }
        }