Extract scheduling information from IFC models

This post is related to the following question by at linkedin.com

Is there any IFC program/viewer that can read(like notepad in windows can) and visualise the:

  • IfcRelAssignTasks
  • IfcTask,
  • IfcScheduletimecontrol,
  • IfcCalenderdate
  • IfcLocactime

When this is possible we can synchronise the (4d) information direct to the IFC model without using other filetypes than IFC, for example to our suppliers: the delivery calenderdates and -time of components on the building site for managing logistics. For Example in this screenshot below we’ve scheduled this wall on 8-3-2017 9:00. After giving this object its date of delivery on construction site we’ve enriched back to the IFC model.

ext

We will use this IFC file: IFC_Schependomlaan_inc_planningsdata.ifc from the open source BIM project at :https://github.com/openBIMstandards/DataSetSchependomlaan

Get a list of IFC classes with basic attributes:

  1. Login into IFCWebServer.org demo account ( username: user1 , password: 123)
  2. select the IFC model Synchro4D.nl-IfcTask-test.ifc
  3. select the IFC classes (IfcRelAssignTasks, IfcTask, etc.) & click “GO” button

IfcRelAssignsTasks:

http://bimviewer.com//ifc.rb?q=IFCRELASSIGNSTASKS&ifc_file=IFC_Schependomlaan_inc_planningsdata.ifc

IfcTask

http://bimviewer.com//ifc.rb?q=IFCTASK&ifc_file=IFC_Schependomlaan_inc_planningsdata.ifc

IfcRelAssignsToProcess:

http://bimviewer.com//ifc.rb?q=IFCRELASSIGNSTOPROCESS&ifc_file=IFC_Schependomlaan_inc_planningsdata.ifc

Write a server script (with 2 simple extensions) for customisation the output format and automate the process:

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
load_schema_and_extensions
use "IFC_Schependomlaan_inc_planningsdata.ifc"</code>
 
class IFCDATEANDTIME
def date_time
dateComponent= self.dateComponent.to_obj
timeComponent = self.timeComponent.to_obj
"#{dateComponent.dayComponent}/#{dateComponent.monthComponent}/#{dateComponent.yearComponent} #{timeComponent.hourComponent}:#{timeComponent.minuteComponent}"
end
end
 
class IFCSCHEDULETIMECONTROL
def detail
res= {}
res["ActualStart"] = self.actualStart if self.actualStart != "$"
res["EarlyStart"] = self.earlyStart.to_obj.date_time if self.earlyStart != "$"
res["LateStart"] = self.lateStart.to_obj.date_time if self.lateStart != "$"
res["ScheduleStart"] = self.scheduleStart.to_obj.date_time if self.scheduleStart != "$"
res["ActualFinish"] = sef.actualFinish.to_obj.date_time if self.actualFinish != "$"
res["EarlyFinish"] = self.earlyFinish.to_obj.date_time if self.earlyFinish != "$"
res["LateFinish"] =self.lateFinish.to_obj.date_time if self.lateFinish != "$"
res["ScheduleFinish"] =self.scheduleFinish.to_obj.date_time if self.scheduleFinish != "$"
res["ScheduleDuration"] =self.scheduleDuration if self.scheduleDuration != "$"
res["ActualDuration"] =self.actualDuration if self.actualDuration != "$"
res["RemainingTime"] =self.remainingTime if self.remainingTime != "$"
res["FreeFloat"] =self.freeFloat if self.freeFloat != "$"
res["TotalFloat"] =self.totalFloat if self.totalFloat != "$"
res["IsCritical"] =self.isCritical if self.isCritical != "$"
res["StatusTime"] = self.statusTime if self.statusTime != "$"
res["StartFloat"] = self.startFloat.to_s if self.startFloat != "$"
res["FinishFloat"] =self.finishFloat.to_s if self.finishFloat != "$"
res["Completion"] =self.completion.to_s if self.completion != "$"
res
end
 
end
 
class IFCRELASSIGNSTASKS
def saveTimeForTask
self.relatedObjects.toIfcObject.each { |o,id|
$timeForTask[o] = self.timeForTask.to_obj.detail
}
 
end
end
 
$timeForTask={}
#IFCRELASSIGNSTASKS.list
IFCRELASSIGNSTASKS.where("all","o.saveTimeForTask")
IFCWORKSCHEDULE.list "name|Ceation Date:creationDate.to_obj.date_time|Start time:startTime.to_obj.date_time"
IFCRELASSIGNSTOPROCESS.list "BIM Element ID:relatedObjects.gsub('#','').split(',').join('')|Task:relatingProcess.to_obj.name|Time For Task:$timeForTask[relatingProcess.to_obj.line_id]
"
IFCRELSEQUENCE.list "sequenceType|relatingProcess.to_obj.name|relatedProcess.to_obj.name"
IFCTASK.list "description|isMilestone|name|objectType|priority|status|taskId|workMethod"
IFCRELASSIGNSTASKS.list "Task:relatedObjects.to_obj.name|Time for task:timeForTask.to_obj.detail"

The result can be seen at:

http://bimviewer.com//scripts/user1/results/Extact_scheduling_information.html

 

This script is just to demonstrate how to extract the information in a simple way.

It can be enhanced to save the information in other formats (XML, CSV, SQL)in order to integrate them with 4D Viewers or Planning Software.
IFCWebServer.org can already visualise the construction progress of IFC models exported by Synchro Pro.

http://bimviewer.com//bim-annotator/?url=/dae/user1/IFC_Schependomlaan_inc_planningsdata.dae&user_id=user1&model=IFC_Schependomlaan_inc_planningsdata

What is IFCWebServer

IFC WebServer is a data model server and online viewer for Building Information Models (BIM) based on IFC standards.

It aims to simplify sharing and exchanging of information from BIM models using open and standard formats like (IFC, HTML, XML, CSV, JSON) and check the quality of BIM models (Level of Details, Level of Development).

BIM managers and designers can query, filter and make reports about any information inside IFC models easily.

The project consists mainly of two parts:

(1) Data model server IFCWebServer:

IFCWebServer supports natively any IFC official release starting with IFC2X_Final issued on 2001 to the latest release IFC4 issued on 2013. Moreover, it supports any valid IFC sub schema or extended schema so it can be used by IFC researchers and developer .

start_page

(2) Online viewer IFCWebViewer.

Despite of having easy access to the information in BIM models as the main interest (through queries, filters, reports), the online 3D visualization offered by IFCWebViewer provide an handy way to view and share BIM models and visualize the results of data queries online.

The IFCWebServer has an open structure and can be extended  through adding new extensions ( class methods or modules written in Ruby) to add extra functionality. The extensions can be as simple as one line to calculate the area of a circle profile, or very sophisticated like a plug-in to export the data inside the IFC models into other formats like COBie spreadsheets or to extract 2D plans automatically from 3D models.scripts