唯杰地图 logo唯杰地图
VJMAP
EN

CAD 实体主题 (vjmapext)

vjmapext/references/entity/overview.md 4.4 KB119 行
原文

本文回答:vjmapext CAD 实体总览 —— 16+ 实体类型、公共生命周期、基础样式。

vjmapext 在 vjmap 之上提供面向 CAD 的实体系统:点、线、多段线、圆、弧、椭圆、样条、填充、文字、块、标注、引线、云线,以及用户自定义实体。所有实体均继承 EntityBase,拥有统一的样式、变换、图层、自定义属性和序列化能力。

子项索引

文件 主题
lifecycle addEntity / deleteEntity / getEntities / 选中
style-props color / lineWidth / layer / lineType / visible 等公共样式
transform move / rotate / scale / mirror
line-polyline LineEnt / PolylineEnt(含 bulge 弧段、双线 dline)
circle-arc-ellipse CircleEnt / ArcEnt / EllipseEnt
spline SplineEnt 样条
point PointEnt
hatch HatchEnt 填充(内环挖洞 / 图案)
text TextEnt / MTextEnt
font-text opentype 字体文字加载
block-reference BlockDef + BlockRefEnt
svg-import svgToEntities / createBlockRefFromSvg
dimensions LinearDim / AlignedDim / AngleDim / RadialDim
leader MLeaderEnt 多重引线
revcloud REVCLOUD 修订云线
custom-entity 继承 EntityBase 自定义实体

实体类型一览

基础几何

类名 注册名 说明
PointEnt POINT 单个坐标点
LineEnt LINE 直线段(起点 + 终点)
PolylineEnt PLINE 多段线 / 多边形,支持 bulge 弧段
CircleEnt CIRCLE 圆
ArcEnt ARC 圆弧
EllipseEnt ELLIPSE 椭圆 / 椭圆弧
SplineEnt SPLINE 样条曲线

填充与文字

类名 注册名 说明
HatchEnt HATCH 填充区域(内外环 / 图案)
TextEnt TEXT 单行文字
MTextEnt MTEXT 多行文字

块与引用

类名 注册名 说明
BlockDef — 块定义(实体集合)
BlockRefEnt INSERT 块引用

标注与引线

类名 注册名 说明
LinearDimEnt DIMLINEAR 水平 / 垂直线性标注
AlignedDimEnt DIMALIGNED 对齐标注
AngleDimEnt DIMANGLE 角度标注
RadialDimEnt DIMRADIUS 半径标注
MLeaderEnt MLEADER 多重引线标注

所有内置实体通过 MapCadLayer.registerBuiltins() 自动注册。

实体生命周期

new LineEnt(...)
    ↓ 设置属性
addEntity(entity)
    ↓ 渲染
interact (move / rotate / gripEdit)
    ↓ changed() / styleChanged()
deleteEntity(id) 或 store.delete(id)
  1. 创建:new LineEnt([0,0], [100,0])
  2. 配置:entity.color = 0xff0000; entity.lineWidth = 2;
  3. 添加:mapcadLayer.addEntity(entity)
  4. 编辑:拖夹点 / 变换 → 回调里调 entity.changed()
  5. 删除:mapcadLayer.deleteEntity(entity.id)

最小代码

const { MapCadLayer, LineEnt, CircleEnt } = vjmapext;

const mapcadLayer = new MapCadLayer();
map.addControl(mapcadLayer);   // addControl 即 onAdd

const line = new LineEnt([0, 0], [500, 500]);
line.color = 0xff4444;
line.lineWidth = 2;
mapcadLayer.addEntity(line);

const circle = new CircleEnt([250, 250], 200);
circle.color = 0x4488ff;
circle.fillColor = 0x4488ff;
circle.fillOpacity = 0.3;
mapcadLayer.addEntity(circle);

主题级 Top 3 陷阱

  1. 颜色是 0x 十六进制整数:0xff0000,不是 CSS 字符串。
  2. 角度单位不一致:ArcEnt/EllipseEnt.startAngle、rotate() 变换方法用弧度;TextEnt.rotation 属性存的是度(内部 rotation += rad*180/π)。
  3. 修改属性后要调 changed() / styleChanged():不然不重绘;改几何用 changed(),只改颜色用 styleChanged() 更快。

相关主题

  • 实体批量处理 → batch/
  • 命令系统(LINE/CIRCLE/PLINE/...)→ drawing/
  • 实体事件(增删改选)→ event/
  • 性能优化 → perf/