Custom Drawing
Overview
The GraphicsJS library allows replacing the default shapes of timeline elements with custom drawings.
To learn more, see:
- Graphics - GraphicsJS documentation
- Basic Charts: Custom Drawing - basic samples
- AnyGantt Gallery: Custom Drawing - an advanced sample
Project Chart
This section explains how to modify the shape of elements on a Project Gantt Chart.
You can access a particular element type or all elements at once, as shown in the following articles:
Then call the rendering() method - for example, the rendering() method of tasks.
Combine it with methods of the anychart.core.gantt.rendering.Settings class:
- drawer() to create custom drawings (accepts a function)
- shapes() to create custom shapes (accepts an array of settings)
In the sample below, the drawer() method is used to draw custom tasks and baselines:
// a function for drawing custom elements var drawingFunction = function () { // get the shapes of the element var shapes = this["shapes"]; // get the shape to be modified var path = shapes["path"]; // get the bounds of the element var bounds = this["predictedBounds"]; var h = bounds.height; var t = bounds.top; var l = bounds.left; var r = bounds.left + bounds.width; var h1 = bounds.top + bounds.height; var h4 = h / 4; var h2 = h / 2; // draw a rounded rectangle path.moveTo(l + h4, h1 - h4) path.arcTo(h4, h4, -270, 180) path.lineTo(r - h4, t + h4) path.arcTo(h4, h4, -90, 180) path.lineTo(l + h2, h1 - h4) path.close(); } // set the row and header height chart.defaultRowHeight(35); chart.headerHeight(105); // set the height of timeline elements chart.getTimeline().elements().height(20); // access tasks and baselines var tasks = chart.getTimeline().tasks(); var baselines = chart.getTimeline().baselines(); // draw custom tasks and baselines tasks.rendering().drawer(drawingFunction); baselines.rendering().drawer(drawingFunction); Resource Chart
The Resource Gantt Chart supports only one element type - the period. This section explains how to modify its shape.
The first step is accessing periods - see the Elements: Resource Chart article to learn how to do it.
Then call the rendering() method of periods.
Combine it with methods of the anychart.core.gantt.rendering.Settings class:
- drawer() to create custom drawings (accepts a function)
- shapes() to create custom shapes (accepts an array of settings)
In the sample below, custom periods are drawn with the help of the drawer() method:
// a function for drawing custom elements var drawingFunction = function () { // get the shapes of the element var shapes = this["shapes"]; // get the shape to be modified var path = shapes["path"]; // get the bounds of the element var bounds = this["predictedBounds"]; var h = bounds.height; var t = bounds.top; var l = bounds.left; var r = bounds.left + bounds.width; var h1 = bounds.top + bounds.height; var h4 = h / 4; var h2 = h / 2; // draw a rounded rectangle path.moveTo(l + h4, h1 - h4) path.arcTo(h4, h4, -270, 180) path.lineTo(r - h4, t + h4) path.arcTo(h4, h4, -90, 180) path.lineTo(l + h2, h1 - h4) path.close(); } // set the row and header height chart.defaultRowHeight(35); chart.headerHeight(105); // access periods var periods = chart.getTimeline().periods(); // set the height of periods periods.height(40); // draw custom periods periods.rendering().drawer(drawingFunction);