--- title: Shape Style Properties order: 8 --- Shape is the basic element on an item (node/edge). The `style` of a node or an edge corresponds to the shape properties of its keyShape (key shape). The `style` in `labelCfg` of a label on a node or an edge corresponds to the properties of text shape. ```javascript group.addShape('rect', { attrs: { fill: 'red', shadowOffsetX: 10, shadowOffsetY: 10, shadowColor: 'blue', shadowBlur: 10, opacity: 0.8, }, // must be assigned in G6 3.3 and later versions. it can be any value you want name: 'rect-shape', }); ``` G6 has these shapes: - [circle](#circle); - [rect](#rect); - [ellipse](#ellipse); - [polygon](#polygon); - [fan](#fan); - [image](#image); - [marker](#marker); - [path](#path); - [text](#text); - [dom(svg)](#dom-svg): DOM (available only when the `renderer` of Graph instance is `'svg'`). ## Common Property ### name _String_ **required** Must be assigned in G6 3.3 and later versions. It can be any value you want ### fill _String_ **optional** The color(RGB or Hex) or [gradient](/en/docs/manual/middle/elements/advanced-style/gradient) color for filling. The corresponding property in canvas is `fillStyle`. Examples: `rgb(18, 150, 231)`,`#c193af`,`l(0) 0:#ffffff 0.5:#7ec2f3 1:#1890ff`, `r(0.5, 0.5, 0.1) 0:#ffffff 1:#1890ff`. ### stroke _String_ **optional** The color(RGB or Hex) or [gradient](/en/docs/manual/middle/elements/advanced-style/gradient) color for stroke. The corresponding property in canvas is `strokeStyle`. Examples: `rgb(18, 150, 231)`,`#c193af`,`l(0) 0:#ffffff 0.5:#7ec2f3 1:#1890ff`, `r(0.5, 0.5, 0.1) 0:#ffffff 1:#1890ff`. ### lineWidth _Number_ **optional** The width of the stroke. ### lineDash _Number | Number[]_ **optional** The lineDash of the stroke. If its type is `Number[]`, the elements in the array are the lengths of the lineDash. ### shadowColor _String_ **optional** The color of the shadow. ### shadowBlur _Number_ **optional** The blur level for shadow. Larger the value, more blur. ### shadowOffsetX _Number_ **optional** The horizontal offset of the shadow. ### shadowOffsetY _Number_ **optional** The vertical offset of the shadow. ### opacity _Number_ **optional** The opacity (alpha value) of the shape. The corresponding property in canvas is `globalAlpha`. ### fillOpacity _Number_ **optional** The filling opacity (alpha value) of the shape. The priority is higher than `opacity`. Range [0, 1]. ### strokeOpacity _Number_ **optional** The stroke opacity (alpha value) of the shape. The priority is higher than `opacity`. Range [0, 1]. ### cursor _String_ **optional** The type of the mouse when hovering the node. The options are the same as [cursor in CSS](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor). ## Circle ```javascript group.addShape('circle', { attrs: { x: 100, y: 100, r: 50, fill: 'blue', }, // must be assigned in G6 3.3 and later versions. it can be any value you want name: 'circle-shape', }); ``` ### x _Number_ **optional** The x of the center of the circle. ### y _Number_ **optional** The y of the center of the circle. ### r _Number_ **optional** The radius of the circle. ## Ellipse ```javascript group.addShape('ellipse', { attrs: { x: 100, y: 100, rx: 50, ry: 50, fill: 'blue', }, // must be assigned in G6 3.3 and later versions. it can be any value you want name: 'ellipse-shape', }); ``` ### x _Number_ **optional** The x of the center of the ellipse. ### y _Number_ **optional** The y of the center of the ellipse. ### rx _Number_ **optional** The horizontal raidus of the ellipse. ### ry _Number_ **optional** The vertical raidus of the ellipse. ## Image ```javascript group.addShape('image', { attrs: { x: 0, y: 0, img: 'https://g.alicdn.com/cm-design/arms-trace/1.0.155/styles/armsTrace/images/TAIR.png', }, // must be assigned in G6 3.3 and later versions. it can be any value you want name: 'image-shape', }); ``` ### x _Number_ **optional** The x of the left top of the image. ### y _Number_ **optional** The y of the left top of the image. ### width _Number_ **optional** The width of the image. ### height _Number_ **optional** The height of the image. ### img _String_ **optional** The source of the image.G6 supports multiple image formats:
- url
- ImageData
- Image
- canvas
. ## Marker ```javascript // use the built-in symbol group.addShape('marker', { attrs: { x: 10, y: 10, r: 10, symbol: 'triangle-down', }, // must be assigned in G6 3.3 and later versions. it can be any value you want name: 'marker-shape', }); // custom the symbol with path group.addShape('marker', { attrs: { x: 10, y: 10, r: 10, symbol: function (x, y, r) { return [['M', x, y], ['L', x + r, y + r], ['L', x + r * 2, y], ['Z']]; }, }, // must be assigned in G6 3.3 and later versions. it can be any value you want name: 'marker-shape', }); ``` ### x _Number_ **optional** The x of the center of the marker. ### y _Number_ **optional** The y of the center of the marker. ### r _Number_ **optional** The radius of the marker. ### symbol _String | Function_ **optional** The shape name.There are several built-in shapes: `'circle'`, `'square'`, `'diamond'`, `'triangle'`, `'triangle-down'`, you can use them with the String names. And user could customize a shape as marker. ## Polygon ```javascript group.addShape('polygon', { attrs: { points: [ [30, 30], [40, 20], [30, 50], [60, 100], ], fill: 'red', }, // must be assigned in G6 3.3 and later versions. it can be any value you want name: 'polygon-shape', }); ``` ### points _Array_ **optional** The coordinates of the points on the polygon. ## Rect ```javascript group.addShape('rect', { attrs: { x: 150, y: 150, width: 150, height: 150, stroke: 'black', radius: [2, 4], }, // must be assigned in G6 3.3 and later versions. it can be any value you want name: 'rect-shape', }); ``` ### x _Number_ **optional** The x of left top of the rect. ### y _Number_ **optional** The y of left top of the rect. ### width _Number_ **optional** The width of the rect. ### height _Number_ **optional** The height of the rect. ### radius _Number | Number[]_ **optional** The border radius. It can be an integer or an array, representing the border radii of lefttop, righttop, rightbottom, leftbotton respectively.
- `radius = 1` or `radius = [ 1 ]` is equal to `radius = [ 1, 1, 1, 1 ]`
- `radius = [ 1, 2 ]` is equal to `radius = [ 1, 2, 1, 2 ]`
- `radius: [ 1, 2, 3 ]` is equal to `radius: [ 1, 2, 3, 2 ]`
## Path ⚠️Attention: When the edge is too thin to be hitted by mouse, set **lineAppendWidth** to enlarge the hitting area. ```javascript group.addShape('path', { attrs: { startArrow: { // The custom arrow is a path points at (0, 0), and its tail points to the positive direction of x-axis path: 'M 0,0 L 20,10 L 20,-10 Z', // the offset of the arrow, nagtive value means the arrow is moved alone the positive direction of x-axis // d: -10 }, endArrow: { // The custom arrow is a path points at (0, 0), and its tail points to the positive direction of x-axis path: 'M 0,0 L 20,10 L 20,-10 Z', // the offset of the arrow, nagtive value means the arrow is moved alone the positive direction of x-axis // d: -10 }, path: [ ['M', 100, 100], ['L', 200, 200], ], stroke: '#000', lineWidth: 8, lineAppendWidth: 5, }, // must be assigned in G6 3.3 and later versions. it can be any value you want name: 'path-shape', }); ``` ### path _String | Array_ **optional** The path. Refer to [SVG path](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths). ### startArrow _Boolean | Object_ **optional** The arrow on the start of the path. When `startArrow` is `true`, show a default arrow on the start of the path. User can custom an arrow by path. ### endArrow _Boolean | Object_ **optional** The arrow on the end of the path. When `startArrow` is `true`, show a default arrow on the end of the path. User can custom an arrow by path. ### lineAppendWidth _Number_ **optional** The hitting area of the path. Enlarge the hitting area by enlarging its value. ### lineCap _String_ **optional** _default:_ `'miter'` The style of two ends of the path. Options:
- `'bevel'`
- `'round'`
- `'miter'`(default) ### lineJoin _String_ **optional** _default:_ `'miter'` The style of the intersection of two path. Options:
- `'bevel'`
- `'round'`
- `'miter'`(default) ### lineWidth _Number_ **optional** The line width of the current path. ### miterLimit _Number_ **optional** The maximum miter length. ### lineDash _Number | Number[]_ **optional** The style of the dash line. It is an array that describes the length of gaps and line segments. If the number of the elements in the array is odd, the elements will be dulplicated. Such as [5, 15, 25] will be regarded as [5, 15, 25, 5, 15, 25]. ## Text ```javascript group.addShape('text', { attrs: { text: 'test text', fill: 'red', fontWeight: 400, shadowOffsetX: 10, shadowOffsetY: 10, shadowColor: 'blue', shadowBlur: 10, }, // must be assigned in G6 3.3 and later versions. it can be any value you want name: 'text-shape', }); ``` ### textAlign _String_ **optional** The align way of the text. Options: `'center'` / `'end'` / `'left'` / `'right'` / `'start'`. `'start'` by default. ### textBaseline _String_ **optional** The base line of the text. Options:
`'top'` / `'middle'` / `'bottom'` / `'alphabetic'` / `'hanging'`. `'bottom'` by default. ### fontStyle _String_ **optional** The font style of the text. The corresponding property in CSS is `font-style`. ### fontVariant _String_ **optional** The font variant of the text. The corresponding property in CSS is `font-variant`. ### fontWeight _Number_ **optional** The font weight of the text. The corresponding property in CSS is `font-weight`. ### fontSize _Number_ **optional** The font size of the text. The corresponding property in CSS is `font-size`. ### fontFamily _String_ **optional** The font family of the text. The corresponding property in CSS is `font-family`. ### lineHeight _Number_ **optional** Line height of the text. The corresponding property in CSS is `line-height`. ## DOM (svg) > This shape is available only when the `renderer` is assgined to `'svg'` for graph instance. ⚠️ Attention: ```javascript group.addShape('dom', { attrs: { width: cfg.size[0], height: cfg.size[1], // DOM's html html: `
img
${cfg.label}
`, }, // must be assigned in G6 3.3 and later versions. it can be any value you want name: 'dom-shape', draggable: true, }); ``` - Only support native HTML DOM, but not react or other components; - If you custom a Node type or an Edge type with dom shape, please use the original DOM events instead of events of G6. ### html _String_ **optional** The HTML value for DOM shape.