---
title: 原子 Shape 以及其属性
order: 2
---
G6 中的元素(节点/边)是由**一个或多个 [图形 Shape](/manual/element/shape/overview)** 组成,主要通过自定义节点或自定义边时在 `render` 方法中使用 `upsert` 添加,G6 中支持以下的图形 Shape:
1. [Circle - 圆形](#circlestyleprops)
2. [Ellipse - 椭圆](#ellipsestyleprops)
3. [Rect - 矩形](#rectstyleprops)
4. [HTML - HTML元素](#htmlstyleprops)
5. [Image - 图片](#imagestyleprops)
6. [Line - 线](#linestyleprops)
7. [Path - 路径](#pathstyleprops)
8. [Polygon - 多边形](#polygonstyleprops)
9. [Polyline - 折线](#polylinestyleprops)
10. [Text - 文本](#textstyleprops)
## 各图形 Shape 的通用属性
### BaseShapeStyle
| 属性 | 描述 | 类型 | 必选 |
| -------------- | --------------------------------------------------------------------------------------------- | ---------------------------------------- | ---- |
| x | x 坐标 | number | ✓ |
| y | y 坐标 | number | ✓ |
| width | 宽度 | number | ✓ |
| height | 高度 | number | ✓ |
| fill | 填充颜色 | string \| Pattern \| null | |
| stroke | 描边颜色 | string \| Pattern \| null | |
| opacity | 整体透明度 | number \| string | |
| fillOpacity | 填充透明度 | number \| string | |
| strokeOpacity | 描边透明度 | number \| string | |
| lineWidth | 线宽度 | number \| string | |
| lineCap | 线段端点样式 | `butt` \| `round` \| `square` | |
| lineJoin | 线段连接处样式 | `miter` \| `round` \| `bevel` | |
| lineDash | 虚线配置 | number \| string \| (string \| number)[] | |
| lineDashOffset | 虚线偏移量 | number | |
| shadowBlur | 阴影模糊程度 | number | |
| shadowColor | 阴影颜色 | string | |
| shadowOffsetX | 阴影 X 方向偏移 | number | |
| shadowOffsetY | 阴影 Y 方向偏移 | number | |
| cursor | 鼠标样式,[CSS 的 cursor](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor) 选项都支持 | string | |
| zIndex | 渲染层级 | number | |
| visibility | 可见性 | `visible` \| `hidden` | |
**示例:**
```js
const shape = BaseShape.upsert(
// 指定图形 key,需要保证在同一个自定义元素类型中保持唯一性
'shape',
'circle',
{
cx: 100,
cy: 100,
r: 50,
fill: 'blue',
},
container,
);
```
## 各图形 Shape 的通用方法
### attr()
设置或获取实例的绘图属性。
### attr(name)
获取实例的属性值。
```js
const width = shape.attr('width');
```
### attr(name, value)
更新实例的单个绘图属性。
### attr({...})
批量更新实例绘图属性。
```js
shape.attr({
fill: '#999',
stroke: '#666',
});
```
## 圆图形 Circle
### CircleStyleProps
| 属性 | 描述 | 类型 | 必选 |
| ----------------- | ---------------------------------- | ---------------- | ---- |
| cx | 圆心 x 坐标 | number \| string | ✓ |
| cy | 圆心 y 坐标 | number \| string | ✓ |
| cz | 圆心 z 坐标 | number \| string | |
| r | 圆的半径 | number \| string | ✓ |
| isBillboard | 是否启用公告牌模式(始终面向相机) | boolean | |
| isSizeAttenuation | 是否启用大小衰减(随视距变化大小) | boolean | |
**示例:**
```js
BaseShape.upsert(
// 指定图形 key,需要保证在同一个自定义元素类型中保持唯一性
'shape',
'circle',
{
cx: 100,
cy: 100,
r: 50,
fill: 'blue',
},
container,
);
```
## 矩形图形 Rect
### RectStyleProps
| 属性 | 描述 | 类型 | 必选 |
| ----------------- | ------------------ | ---------------------------- | ---- |
| x | 矩形 x 坐标 | number \| string | |
| y | 矩形 y 坐标 | number \| string | |
| z | 矩形 z 坐标 | number | |
| width | 矩形宽度 | number \| string | ✓ |
| height | 矩形高度 | number \| string | ✓ |
| isBillboard | 是否启用公告牌模式 | boolean | |
| isSizeAttenuation | 是否启用大小衰减 | boolean | |
| radius | 矩形圆角半径 | number \| string \| number[] | |
**示例:**
```js
BaseShape.upsert(
// 指定图形 key,需要保证在同一个自定义元素类型中保持唯一性
'shape',
'rect',
{
x: 100,
y: 100,
width: 100,
height: 100,
radius: 8,
fill: 'blue',
},
container,
);
```
## 椭圆图形 Ellipse
### EllipseStyleProps
| 属性 | 描述 | 类型 | 必选 |
| ----------------- | ------------------ | ---------------- | ---- |
| cx | 椭圆中心 x 坐标 | number \| string | ✓ |
| cy | 椭圆中心 y 坐标 | number \| string | ✓ |
| cz | 椭圆中心 z 坐标 | number \| string | |
| rx | 椭圆 x 轴半径 | number \| string | ✓ |
| ry | 椭圆 y 轴半径 | number \| string | ✓ |
| isBillboard | 是否启用公告牌模式 | boolean | |
| isSizeAttenuation | 是否启用大小衰减 | boolean | |
**示例:**
```js
BaseShape.upsert(
// 指定图形 key,需要保证在同一个自定义元素类型中保持唯一性
'shape',
'ellipse',
{
cx: 100,
cy: 100,
rx: 50,
ry: 80,
fill: 'blue',
},
container,
);
```
## HTML DOM
### HTMLStyleProps
| 属性 | 描述 | 类型 | 必选 |
| --------- | ---------------- | --------------------- | ---- |
| x | HTML 元素 x 坐标 | number \| string | |
| y | HTML 元素 y 坐标 | number \| string | |
| innerHTML | HTML 内容 | string \| HTMLElement | ✓ |
| width | HTML 元素宽度 | number \| string | |
| height | HTML 元素高度 | number \| string | |
**示例:**
```js
BaseShape.upsert(
// 指定图形 key,需要保证在同一个自定义元素类型中保持唯一性
'shape',
'html',
{
x: 100,
y: 100,
innerHTML:
content
,
},
container,
);
```
## 图片图形 Image
### ImageStyleProps
| 属性 | 描述 | 类型 | 必选 |
| ----------------- | ---------------------------- | -------------------------- | ---- |
| x | 图片 x 坐标 | number \| string | |
| y | 图片 y 坐标 | number \| string | |
| z | 图片 z 坐标 | number | |
| src | 图片资源路径或 HTML 图片元素 | string \| HTMLImageElement | ✓ |
| width | 图片宽度 | number \| string | |
| height | 图片高度 | number \| string | |
| isBillboard | 是否启用公告牌模式 | boolean | |
| isSizeAttenuation | 是否启用大小衰减 | boolean | |
| billboardRotation | 公告牌模式下的旋转角度 | number | |
| keepAspectRatio | 是否保持图片原有宽高比 | boolean | |
**示例:**
```js
BaseShape.upsert(
// 指定图形 key,需要保证在同一个自定义元素类型中保持唯一性
'shape',
'image',
{
x: 100,
y: 100,
src: 'http://',
},
container,
);
```
## 直线 Line
### LineStyleProps
| 属性 | 描述 | 类型 | 必选 |
| ----------------- | ------------------ | --------------------- | ---- |
| x1 | 线段起点 x 坐标 | number | ✓ |
| y1 | 线段起点 y 坐标 | number | ✓ |
| x2 | 线段终点 x 坐标 | number | ✓ |
| y2 | 线段终点 y 坐标 | number | ✓ |
| z1 | 线段起点 z 坐标 | number | |
| z2 | 线段终点 z 坐标 | number | |
| isBillboard | 是否启用公告牌模式 | boolean | |
| isSizeAttenuation | 是否启用大小衰减 | boolean | |
| markerStart | 线段起点的标记 | DisplayObject \| null | |
| markerEnd | 线段终点的标记 | DisplayObject \| null | |
| markerStartOffset | 起点标记的偏移量 | number | |
| markerEndOffset | 终点标记的偏移量 | number | |
**示例:**
```js
BaseShape.upsert(
// 指定图形 key,需要保证在同一个自定义元素类型中保持唯一性
'shape',
'line',
{
x1: 100,
y1: 100,
x2: 150,
y2: 150,
stroke: 'blue',
},
container,
);
```
## 路径 Path
### PathStyleProps
| 属性 | 描述 | 类型 | 必选 |
| ----------------- | -------------------- | ---------------------- | ---- |
| d | 路径定义字符串或数组 | string \| PathArray | ✓ |
| markerStart | 路径起点的标记 | DisplayObject \| null | |
| markerEnd | 路径终点的标记 | DisplayObject \| null | |
| markerMid | 路径中间点的标记 | DisplayObject \| null | |
| markerStartOffset | 起点标记的偏移量 | number | |
| markerEndOffset | 终点标记的偏移量 | number | |
| isBillboard | 是否启用公告牌模式 | boolean | |
| isSizeAttenuation | 是否启用大小衰减 | boolean | |
| fillRule | 填充规则 | `nonzero` \| `evenodd` | |
**示例:**
```js
BaseShape.upsert(
// 指定图形 key,需要保证在同一个自定义元素类型中保持唯一性
'shape',
'path',
{
d: 'M 0,0 L 20,10 L 20,-10 Z',
stroke: 'blue',
},
container,
);
```
## 多边形图形 Polygon
### PolygonStyleProps
| 属性 | 描述 | 类型 | 必选 |
| ----------------- | ------------------ | ------------------------------------------------ | ---- |
| points | 多边形的顶点数组 | ([number, number] \| [number, number, number])[] | ✓ |
| markerStart | 多边形起点的标记 | DisplayObject \| null | |
| markerEnd | 多边形终点的标记 | DisplayObject \| null | |
| markerMid | 多边形中间点的标记 | DisplayObject \| null | |
| markerStartOffset | 起点标记的偏移量 | number | |
| markerEndOffset | 终点标记的偏移量 | number | |
| isClosed | 是否闭合多边形 | boolean | |
| isBillboard | 是否启用公告牌模式 | boolean | |
| isSizeAttenuation | 是否启用大小衰减 | boolean | |
**示例:**
```js
BaseShape.upsert(
// 指定图形 key,需要保证在同一个自定义元素类型中保持唯一性
'shape',
'polygon',
{
points: [
[30, 30],
[40, 20],
[30, 50],
[60, 100],
],
fill: 'red',
},
container,
);
```
## 折线 Polyline
### PolylineStyleProps
| 属性 | 描述 | 类型 | 必选 |
| ----------------- | ------------------ | ------------------------------------------------ | ---- |
| points | 折线的顶点数组 | ([number, number] \| [number, number, number])[] | ✓ |
| markerStart | 折线起点的标记 | DisplayObject \| null | |
| markerEnd | 折线终点的标记 | DisplayObject \| null | |
| markerMid | 折线中间点的标记 | DisplayObject \| null | |
| markerStartOffset | 起点标记的偏移量 | number | |
| markerEndOffset | 终点标记的偏移量 | number | |
| isBillboard | 是否启用公告牌模式 | boolean | |
| isSizeAttenuation | 是否启用大小衰减 | boolean | |
**示例:**
```js
BaseShape.upsert(
// 指定图形 key,需要保证在同一个自定义元素类型中保持唯一性
'shape',
'polyline',
{
points: [
[30, 30],
[40, 20],
[30, 50],
[60, 100],
],
fill: 'red',
},
container,
);
```
## 文字 Text
### TextStyleProps
| 属性 | 描述 | 类型 | 必选 |
| ------------------- | ------------------ | --------------------------------------------------------------------------- | ---- |
| x | 文本 x 坐标 | number \| string | |
| y | 文本 y 坐标 | number \| string | |
| z | 文本 z 坐标 | number \| string | |
| text | 文本内容 | number \| string | ✓ |
| fontSize | 字体大小 | number \| string | |
| fontFamily | 字体族 | string | |
| fontStyle | 字体样式 | `normal` \| `italic` \| `oblique` | |
| fontWeight | 字体粗细 | `normal` \| `bold` \| `bolder` \| `lighter` \| number | |
| fontVariant | 字体变种 | `normal` \| `small-caps` \| string | |
| textAlign | 文本水平对齐方式 | `start` \| `center` \| `middle` \| `end` \| `left` \| `right` | |
| textBaseline | 文本基线 | `top` \| `hanging` \| `middle` \| `alphabetic` \| `ideographic` \| `bottom' | |
| textOverflow | 文本溢出处理方式 | `clip` \| `ellipsis` \| string | |
| lineHeight | 行高 | number \| string | |
| letterSpacing | 字间距 | number \| string | |
| maxLines | 最大行数 | number | |
| textPath | 文本路径 | Path | |
| textPathSide | 文本路径侧边 | `left` \| `right` | |
| textPathStartOffset | 文本路径起始偏移 | number \| string | |
| textDecorationLine | 文本装饰线 | string | |
| textDecorationColor | 文本装饰线颜色 | string | |
| textDecorationStyle | 文本装饰线样式 | `solid` \| `double` \| `dotted` \| `dashed` \| `wavy` | |
| isBillboard | 是否启用公告牌模式 | boolean | |
| billboardRotation | 公告牌旋转角度 | number | |
| isSizeAttenuation | 是否启用大小衰减 | boolean | |
| wordWrap | 是否自动换行 | boolean | |
| wordWrapWidth | 自动换行宽度 | number | |
| dx | X 方向偏移 | number \| string | |
| dy | Y 方向偏移 | number \| string | |
**示例:**
```js
BaseShape.upsert(
// 指定图形 key,需要保证在同一个自定义元素类型中保持唯一性
'shape',
'text',
{
x: 100,
y: 100,
text: 'text',
},
container,
);
```
多行文字显示:
```js
{
wordWrap: true,
wordWrapWidth: 100,
maxLines: 4,
textOverflow: 'ellipsis',
}
```