Test to create SVG Gantt Chart

A forum dedicated to the Draft, Arch and BIM workbenches development.
Forum rules
Be nice to others! Respect the FreeCAD code of conduct!
Post Reply
User avatar
chakkree
Posts: 327
Joined: Tue Jun 30, 2015 12:58 am
Location: Bangkok Thailand

Test to create SVG Gantt Chart

Post by chakkree »

Test to create gantt chart in svg file format by using 2 package, python-gantt and svgwrite. :D
(May be used for 4D BIM)

Package:
python-gantt 0.6.0 https://pypi.python.org/pypi/python-gantt/
svgwrite 1.1.7https://pypi.python.org/pypi/svgwrite/

Test_create_SVG_grantt_chart.py :

Code: Select all

"""
 Test_create_SVG_grantt_chart.py
"""
import sys , os
import datetime

sys.path.append(u'D:\\DownLoads\\2016\\Softwares\\Python\\python-gantt\\svgwrite-1.1.7')
sys.path.append(u'D:\\DownLoads\\2016\\Softwares\\Python\\python-gantt\\python-gantt-0.6.0')

import svgwrite
import gantt

#
# Change font default
gantt.define_font_attributes(fill='black', stroke='black', stroke_width=0, font_family="Verdana")

# Add vacations for everyone
gantt.add_vacations(datetime.date(2014, 12, 25))
gantt.add_vacations(datetime.date(2015, 1, 1))
gantt.add_vacations(datetime.date(2015, 1, 13))

# Create two resources
rANO = gantt.Resource('ANO')
rJLS = gantt.Resource('JLS')

# Add vacations for one lucky resource
rANO.add_vacations(
    dfrom=datetime.date(2014, 12, 29),
    dto=datetime.date(2015, 1, 4)
    )
rANO.add_vacations(
    dfrom=datetime.date(2015, 1, 6),
    dto=datetime.date(2015, 1, 8)
    )

# Test if this resource is  avalaible for some dates
print(rANO.is_available(datetime.date(2015, 1, 5)))
print(rANO.is_available(datetime.date(2015, 1, 8)))
print(rANO.is_available(datetime.date(2015, 1, 6)))
print(rANO.is_available(datetime.date(2015, 1, 2)))
print(rANO.is_available(datetime.date(2015, 1, 1)))


# Create some tasks
t1 = gantt.Task(name='tache1', start=datetime.date(2014, 12, 25), duration=4, percent_done=44, resources=[rANO], color="#FF8080")
t2 = gantt.Task(name='tache2', start=datetime.date(2014, 12, 28), duration=6, resources=[rJLS])
t7 = gantt.Task(name='tache7', start=datetime.date(2014, 12, 28), duration=5, percent_done=50)
t3 = gantt.Task(name='tache3', start=datetime.date(2014, 12, 25), duration=4, depends_of=[t1, t7, t2], resources=[rJLS])
t4 = gantt.Task(name='tache4', start=datetime.date(2015, 01, 01), duration=4, depends_of=t1, resources=[rJLS])
t5 = gantt.Task(name='tache5', start=datetime.date(2014, 12, 23), duration=3)
t6 = gantt.Task(name='tache6', start=datetime.date(2014, 12, 25), duration=4, depends_of=t7, resources=[rANO])
t8 = gantt.Task(name='tache8', start=datetime.date(2014, 12, 25), duration=4, depends_of=t7, resources=[rANO, rJLS])


# Create a project
p1 = gantt.Project(name='Projet 1')

# Add tasks to this project
p1.add_task(t1)
p1.add_task(t7)
p1.add_task(t2)
p1.add_task(t3)
p1.add_task(t5)
p1.add_task(t8)



# Create another project
p2 = gantt.Project(name='Projet 2', color='#FFFF40')

# Add tasks to this project
p2.add_task(t2)
p2.add_task(t4)


# Create another project
p = gantt.Project(name='Gantt')
# wich contains the first two projects
# and a single task
p.add_task(p1)
p.add_task(p2)
p.add_task(t6)


# Test cases for milestones
# Create another project
ptcm = gantt.Project(name='Test case for milestones')

tcm11 = gantt.Task(name='tcm11', start=datetime.date(2014, 12, 25), duration=4)
tcm12 = gantt.Task(name='tcm12', start=datetime.date(2014, 12, 26), duration=5)
ms1 = gantt.Milestone(name=' ', depends_of=[tcm11, tcm12])
tcm21 = gantt.Task(name='tcm21', start=datetime.date(2014, 12, 30), duration=4, depends_of=[ms1])
tcm22 = gantt.Task(name='tcm22', start=datetime.date(2014, 12, 30), duration=6, depends_of=[ms1])
ms2 = gantt.Milestone(name='MS2', depends_of=[ms1, tcm21, tcm22])
tcm31 = gantt.Task(name='tcm31', start=datetime.date(2014, 12, 30), duration=6, depends_of=[ms2])
ms3 = gantt.Milestone(name='MS3', depends_of=[ms1])


ptcm.add_task(tcm11)
ptcm.add_task(tcm12)
ptcm.add_task(ms1)
ptcm.add_task(tcm21)
ptcm.add_task(tcm22)
ptcm.add_task(ms2)
ptcm.add_task(tcm31)
ptcm.add_task(ms3)


p.add_task(ptcm)

filePath = os.path.dirname(os.path.abspath(__file__))
filePath+= os.sep+'output'+os.sep
##########################$ MAKE DRAW ###############
p.make_svg_for_tasks(filename=filePath+'test_full.svg', today=datetime.date(2014, 12, 31), start=datetime.date(2014,8, 22), end=datetime.date(2015, 01, 14))
p.make_svg_for_tasks(filename=filePath+'test_full2.svg', today=datetime.date(2014, 12, 31))
p.make_svg_for_tasks(filename=filePath+'test.svg', today=datetime.date(2014, 12, 31), start=datetime.date(2015, 01, 3), end=datetime.date(2015, 01, 06))
p1.make_svg_for_tasks(filename=filePath+'test_p1.svg', today=datetime.date(2014, 12, 31))
p2.make_svg_for_tasks(filename=filePath+'test_p2.svg', today=datetime.date(2014, 12, 31))
p.make_svg_for_resources(filename=filePath+'test_resources.svg', today=datetime.date(2014, 12, 31), resources=[rANO, rJLS])
p.make_svg_for_tasks(filename=filePath+'test_weekly.svg', today=datetime.date(2014, 12, 31), scale=gantt.DRAW_WITH_WEEKLY_SCALE)
##########################$ /MAKE DRAW ###############
Result in SVG file format
test_full2.png
test_full2.png (112.72 KiB) Viewed 1819 times
insert SVG to FreeCAD Drawing
insert_svg_gantt.png
insert_svg_gantt.png (162.1 KiB) Viewed 1819 times
User avatar
yorik
Founder
Posts: 13664
Joined: Tue Feb 17, 2009 9:16 pm
Location: Brussels
Contact:

Re: Test to create SVG Gantt Chart

Post by yorik »

Great!
Indeed once we have a better ability to "group" Arch things in more custom ways (Body?), we could think of groups that have specific construction timeframes... Which could indeed become schedules like this
Renato Rebelo
Posts: 255
Joined: Mon May 19, 2014 1:14 pm
Location: Vouzela - Portugal

Re: Test to create SVG Gantt Chart

Post by Renato Rebelo »

"Great!
Indeed once we have a better ability to "group" Arch things in more custom ways (Body?), we could think of groups that have specific construction timeframes... Which could indeed become schedules like this"


Something like phases in Revit?
that will allow to make drawings with changes between phases?
That would be awesome
Renato
my native language is not English, please excuse me any incorrectness, I apologize for any inconvenience caused, thank you
Post Reply