mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-25 09:02:29 +00:00
New styles on sequencing gantt chart to show dependency arrows, critical path, task groups, and milestones
This commit is contained in:
@@ -3,6 +3,19 @@
|
|||||||
<div style="position:relative" class="gantt" id="GanttChartDIV"></div>
|
<div style="position:relative" class="gantt" id="GanttChartDIV"></div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var g = new JSGantt.GanttChart(document.getElementById('GanttChartDIV'), 'day');
|
var g = new JSGantt.GanttChart(document.getElementById('GanttChartDIV'), 'day');
|
||||||
|
g.setOptions({
|
||||||
|
vCaptionType: 'Complete', // Set to Show Caption : None,Caption,Resource,Duration,Complete,
|
||||||
|
vQuarterColWidth: 36,
|
||||||
|
vDateTaskDisplayFormat: 'day dd month yyyy', // Shown in tool tip box
|
||||||
|
vDayMajorDateDisplayFormat: 'mon yyyy - Week ww',// Set format to dates in the "Major" header of the "Day" view
|
||||||
|
vWeekMinorDateDisplayFormat: 'dd mon', // Set format to display dates in the "Minor" header of the "Week" view
|
||||||
|
vLang: 'en',
|
||||||
|
vShowTaskInfoLink: 1, // Show link in tool tip (0/1)
|
||||||
|
vShowEndWeekDate: 0, // Show/Hide the date for the last day of the week in header for daily
|
||||||
|
vUseSingleCell: 10000, // Set the threshold cell per table row (Helps performance for large data.
|
||||||
|
vFormatArr: ['Day', 'Week', 'Month', 'Quarter'], // Even with setUseSingleCell using Hour format on such a large chart can cause issues in some browsers,
|
||||||
|
vTotalHeight: 1000,
|
||||||
|
});
|
||||||
var json_data = `
|
var json_data = `
|
||||||
{{{json_data}}}
|
{{{json_data}}}
|
||||||
`;
|
`;
|
||||||
|
|||||||
@@ -661,6 +661,15 @@ class GenerateGanttChart(bpy.types.Operator):
|
|||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
self.file = IfcStore.get_file()
|
self.file = IfcStore.get_file()
|
||||||
self.json = []
|
self.json = []
|
||||||
|
self.sequence_type_map = {
|
||||||
|
None: "FS",
|
||||||
|
"START_START": "SS",
|
||||||
|
"START_FINISH": "SF",
|
||||||
|
"FINISH_START": "FS",
|
||||||
|
"FINISH_FINISH": "FF",
|
||||||
|
"USERDEFINED": "FS",
|
||||||
|
"NOTDEFINED": "FS",
|
||||||
|
}
|
||||||
for task_id in Data.work_schedules[self.work_schedule]["RelatedObjects"]:
|
for task_id in Data.work_schedules[self.work_schedule]["RelatedObjects"]:
|
||||||
self.create_new_task_json(task_id)
|
self.create_new_task_json(task_id)
|
||||||
with open(os.path.join(bpy.context.scene.BIMProperties.data_dir, "gantt", "index.html"), "w") as f:
|
with open(os.path.join(bpy.context.scene.BIMProperties.data_dir, "gantt", "index.html"), "w") as f:
|
||||||
@@ -671,23 +680,35 @@ class GenerateGanttChart(bpy.types.Operator):
|
|||||||
|
|
||||||
def create_new_task_json(self, task_id):
|
def create_new_task_json(self, task_id):
|
||||||
task = self.file.by_id(task_id)
|
task = self.file.by_id(task_id)
|
||||||
self.json.append(
|
data = {
|
||||||
{
|
"pID": task.id(),
|
||||||
"pID": task.id(),
|
"pName": task.Name,
|
||||||
"pName": task.Name,
|
"pStart": task.TaskTime.ScheduleStart if task.TaskTime else "",
|
||||||
"pStart": task.TaskTime.ScheduleStart if task.TaskTime else "",
|
"pEnd": task.TaskTime.ScheduleFinish if task.TaskTime else "",
|
||||||
"pEnd": task.TaskTime.ScheduleFinish if task.TaskTime else "",
|
"pPlanStart": task.TaskTime.ScheduleStart if task.TaskTime else "",
|
||||||
"pPlanStart": task.TaskTime.ScheduleStart if task.TaskTime else "",
|
"pPlanEnd": task.TaskTime.ScheduleFinish if task.TaskTime else "",
|
||||||
"pPlanEnd": task.TaskTime.ScheduleFinish if task.TaskTime else "",
|
"pMile": 1 if task.IsMilestone else 0,
|
||||||
"pClass": "ggroupblack",
|
"pComp": 0,
|
||||||
"pMile": 1 if task.IsMilestone else 0,
|
"pGroup": 1 if task.IsNestedBy else 0,
|
||||||
"pComp": 0,
|
"pParent": task.Nests[0].RelatingObject.id() if task.Nests else 0,
|
||||||
"pGroup": 1,
|
"pOpen": 1,
|
||||||
"pParent": task.Nests[0].RelatingObject.id() if task.Nests else 0,
|
"pCost": 1,
|
||||||
"pOpen": 1,
|
}
|
||||||
"pCost": 1,
|
if task.TaskTime and task.TaskTime.IsCritical:
|
||||||
}
|
data["pClass"] = "gtaskred"
|
||||||
|
elif data["pGroup"]:
|
||||||
|
data["pClass"] = "ggroupblack"
|
||||||
|
elif data["pMile"]:
|
||||||
|
data["pClass"] = "gmilestone"
|
||||||
|
else:
|
||||||
|
data["pClass"] = "gtaskblue"
|
||||||
|
data["pDepend"] = ",".join(
|
||||||
|
[
|
||||||
|
"{}{}".format(rel.RelatingProcess.id(), self.sequence_type_map[rel.SequenceType])
|
||||||
|
for rel in task.IsSuccessorFrom or []
|
||||||
|
]
|
||||||
)
|
)
|
||||||
|
self.json.append(data)
|
||||||
for task_id in Data.tasks[task_id]["RelatedObjects"]:
|
for task_id in Data.tasks[task_id]["RelatedObjects"]:
|
||||||
self.create_new_task_json(task_id)
|
self.create_new_task_json(task_id)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user