Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JointJS creating custom Shapes, Diamond, Hexagon

Tags:

jointjs

I m new to jointJS, I need to create custom shapes using JointJS, I have tried creating the diamond shape using the Rectangle, making its height and width same, and then rotate by 45 degrees as follows,

var diamond =  new joint.shapes.basic.Rect({
        position: { x: 100, y: 100 },
        size: { width: 100, height: 100 },
        attrs: { diamond: { width: 100, height: 30 } }
    }); 
    diamond.attr({

        rect: { fill: '#cccccc', 'stroke-width': 2, stroke: 'black' },
        text: {
            text: 'Diamond', fill: '#3498DB',
            'font-size': 18, 'font-weight': 'bold', 
            'font-variant': 'small-caps', 
            'text-transform': 'capitalize'
        }
    });
  diamond.rotate(45);

However, the text present inside the rectangle also gets rotated, Any Ideas how can i proceed.... Also I need to create hexagon with a label... Any help will be much appreciated ....

Thanks In Advance,

Mayuri

like image 419
Mayuri Ruparel Avatar asked Jan 21 '14 16:01

Mayuri Ruparel


1 Answers

There is no need to rotate the whole element. Try to add a transform attribute to joint.dia.basic.Rect model.

rect: { transform: 'rotate(45)' }

The other option would be to use joint.dia.basic.Path model.

var diamond = new joint.shapes.basic.Path({
    size: { width: 100, height: 100 },
    attrs: {
        path: { d: 'M 30 0 L 60 30 30 60 0 30 z' },
        text: {
            text: 'Diamond',
            'ref-y': .5 // basic.Path text is originally positioned under the element
        }
    }
});

In order to achieve a hexagon shape, use the joint.dia.basic.Path model again, but this time use the following path data.

path: { d: 'M 50 0 L 0 20 0 80 50 100 100 80 100 20 z'}

Last but least you can create a custom shape with SVG Polygon in its markup.

like image 56
Roman Avatar answered Sep 19 '22 18:09

Roman