You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
WebCAD/src/Editor/Jig.ts

77 lines
2.1 KiB

import { app } from "../ApplicationServices/Application";
import { CADFiler } from "../DatabaseServices/CADFiler";
import { Entity } from "../DatabaseServices/Entity/Entity";
export class Jig
{
//临时图形,如果需要,将被销毁.
private m_JigEnts: Entity[] = [];
//图纸数据缓存,用于还原
EntityCacheData: { Ent: Entity; File: CADFiler; }[] = [];
private m_OrgEntitys: Entity[] = [];
End()
{
this.Destroy();
this.RestoreOriginEntity();
}
/**
* 还原源对象的材质
*/
RestoreOriginEntity()
{
this.m_OrgEntitys.forEach(e => e.RestoreJigMaterial());
this.EntityCacheData.length = 0;
}
/**
* 将在视图中绘制该对象.
* 如果该对象已经存在图纸:那么将被拷贝,并且暂时暗显示,并且缓存原始数据,以便还原.
* @param {Entity} enOrg 源实体
*/
Draw<T extends Entity>(enOrg: T, fast = false): T
{
let enNew: T;
if (enOrg.Id)
{
enNew = enOrg.Clone();
if (fast)
enNew.ClearDrawOfJig();
this.m_OrgEntitys.push(enOrg);
enOrg.UpdateJigMaterial();
let f = new CADFiler();
enNew.WriteFile(f);
this.EntityCacheData.push({ Ent: enNew, File: f });
}
else
enNew = enOrg;
this.m_JigEnts.push(enNew);
let obj = (fast && enNew.JigObject) || enNew.DrawObject;
app.Viewer.Scene.add(obj);
return enNew;
}
/**
* 还原拽拖的实体到初始化状态.
* @memberof Jig
*/
Restore()
{
for (let d of this.EntityCacheData)
{
d.File.Reset();
d.Ent.ReadFile(d.File);
}
}
/**
* 销毁临时对象,如果临时对象被加入到图纸,那么将不会被销毁.
*/
Destroy()
{
for (let ent of this.m_JigEnts)
{
ent.DestroyJigObject();
if (!ent.Id)
ent.GoodBye();
}
this.m_JigEnts.length = 0;
app.Editor.UpdateScreen();
}
}