唯杰地图 logo唯杰地图
VJMAP
EN

set-defaults

vjcad/references/property/set-defaults.md 3.3 KB83 行
原文

本文回答:entity.setDefaults() 把 Engine.CECOLOR / CELTYPE / CELTSCALE 与 Engine.currentDoc.CLAYER(系统当前默认绘图属性)应用到实体,同时把透明度重置为 ByLayer(transpMgr.setValue(-1));不设线宽(lineWeight 保持原值,构造默认 -1=ByLayer)。调用顺序:先 new XxxEnt(...) → setDefaults() → 再写自定义颜色 / 图层 / 线型,最后 Engine.addEntities(...)。

一、最小用法

Engine.CECOLOR   = 1;          // 当前颜色
Engine.CELTYPE   = 'HIDDEN';   // 当前线型
Engine.CELTSCALE = 1.5;        // 当前线型比例

const line1 = new LineEnt([0, 0], [100, 0]);
line1.setDefaults();           // 应用默认值(color=1, lineType='HIDDEN')
Engine.addEntities(line1);

console.log(line1.color, line1.lineType, line1.lineTypeScale);
// 1 HIDDEN 1.5

// 修改默认后再创建
Engine.CECOLOR = 3;
Engine.CELTYPE = 'CENTER';

const line2 = new LineEnt([0, 30], [100, 30]);
line2.setDefaults();
Engine.addEntities(line2);

console.log(line2.color, line2.lineType);   // 3 'CENTER'

MCP 参考:vjcad/example/property/06setdefaults.js。

二、不调用 setDefaults()

const line3 = new LineEnt([0, 60], [100, 60]);
// 没 setDefaults()
Engine.addEntities(line3);

console.log(line3.color, line3.lineType, line3.lineTypeScale, line3.lineWeight, line3.layer);
// 256 'ByLayer' 1 -1 '0' —— EntityBase 构造默认(全部随层、图层 '0'),不会反映 Engine.CE* / CLAYER 的当前值

MCP 参考:vjcad/example/property/06setdefaults.js。

不 setDefaults 的实体一般"按图层显示"。如果业务希望"用户用 Ribbon 改了颜色,再画的图就是新颜色",必须 setDefaults。

三、自定义属性的正确顺序

const c = new CircleEnt([0, 0], 30);
c.setDefaults();          // ① 先吸纳系统默认
c.color = 5;              // ② 再覆盖(不会被默认值再覆盖)
c.layer = '辅助';          // 图层须已存在(Engine.createLayer),否则静默落到 '0'
c.lineType = 'CONTINUOUS';
Engine.addEntities(c);

MCP 参考:vjcad/example/property/01color.js(注释显式说"必须先 setDefaults(),再设置颜色,否则颜色会被默认值覆盖")。

四、Engine 系统变量速查

变量 含义
Engine.CECOLOR 当前绘图颜色(ACI / RGB)
Engine.CELTYPE 当前线型
Engine.CELTSCALE 当前线型比例
Engine.currentDoc.CLAYER 当前图层名(字符串)。⚠️ Engine.CLAYER 不存在
Engine.OSMODE 对象捕捉模式
Engine.ORTHOMODE 正交模式(0/1)
Engine.GRIDMODE 栅格
Engine.OFFSETDIST 偏移距离

详见 core/engine。

反例

  • 顺序写反:new Xxx → color = 1 → setDefaults() —— setDefaults 把颜色又改回 CECOLOR。
  • 在不同子线程 / 异步 callback 里穿插改 Engine.CECOLOR 又 new 实体:默认值串味,导致颜色错乱。
  • 完全不 setDefaults:图层切换后的实体没法继承图层属性。

参考(官方文档 MCP)

  • 文档:vjcad/doc/property/index.md、vjcad/doc/command/api-reference.md
  • 示例:vjcad/example/property/06setdefaults.js、vjcad/example/property/01color.js