You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JointJS绘制自定义图形与圆角矩形?

JointJS绘制圆角矩形与自定义图形方法

一、绘制圆角矩形

在你现有代码的基础上,只需给rect元素添加rx(水平圆角半径)和ry(垂直圆角半径)属性即可实现圆角效果,示例代码:

joint.V(MyPaper.viewport).append(joint.V("rect", { 
  x: 145, 
  y: 70, 
  width: 260, 
  height: 70,
  rx: 10, // 水平方向圆角半径
  ry: 10  // 垂直方向圆角半径
}));

若水平和垂直圆角半径相同,可只设置其中一个属性,浏览器会自动同步两个值。

二、绘制自定义图形

1. 直接用SVG Path绘制临时图形

JointJS的V方法支持创建SVG的path元素,通过d属性传入SVG路径指令即可绘制任意形状,比如绘制三角形:

joint.V(MyPaper.viewport).append(joint.V("path", {
  d: "M 200 100 L 300 200 L 100 200 Z", // 路径指令:移动到(200,100),连线到(300,200),连线到(100,200),闭合路径
  fill: "#eee",
  stroke: "#333",
  "stroke-width": 2
}));

路径指令遵循标准SVG规则,可组合M(移动)、L(直线)、C(贝塞尔曲线)、A(圆弧)等指令绘制复杂图形。

2. 自定义可复用图形类(支持交互)

如果需要重复使用自定义图形并支持拖拽、缩放等交互,推荐继承JointJS的基础图形类创建自定义元素:

// 定义自定义图形类
joint.shapes.custom.MyShape = joint.shapes.basic.Generic.extend({
  markup: '<g class="rotatable"><g class="scalable"><path d="M 50 0 L 100 100 L 0 100 Z"/></g></g>',
  defaults: joint.util.deepSupplement({
    type: 'custom.MyShape',
    attrs: {
      path: {
        fill: '#2ECC71',
        stroke: '#27AE60',
        'stroke-width': 2
      }
    }
  }, joint.shapes.basic.Generic.prototype.defaults)
});

// 实例化并添加到画布
const myCustomShape = new joint.shapes.custom.MyShape({
  position: { x: 100, y: 100 },
  size: { width: 100, height: 100 }
});
MyPaper.addCell(myCustomShape);

内容的提问来源于stack exchange,提问作者Megestic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:35:17