实现编组功能 #IWZFZ

pull/349/MERGE
ChenX 5 years ago
parent 9b8eee239a
commit 2427b6eb0b

@ -0,0 +1,18 @@
import { app } from "../ApplicationServices/Application";
import { GroupRecord } from "../DatabaseServices/GroupTableRecord";
import { PromptStatus } from "../Editor/PromptResult";
export class Command_Group
{
async exec()
{
let ssRes = await app.Editor.GetSelection({ UseSelect: true });
if (ssRes.Status !== PromptStatus.OK)
return;
let g = new GroupRecord();
app.Database.GroupTable.Append(g);
for (let e of ssRes.SelectSet.SelectEntityList)
g.Entitys.push(e.Id);
}
}

@ -151,11 +151,15 @@ export abstract class CADObject
return this._db.hm.UndoData;
}
//写入所有的对象数据 以便还原对象
WriteAllObjectRecord()
WriteAllObjectRecord(): boolean
{
let undoData = this.UndoRecord();
if (undoData)
{
undoData.CreateObjectHistory(this);
return true;
}
return false;
}
//复制出一个实体,所有的关联引用全部失效,如有需要,请重新关联.

@ -8,6 +8,7 @@ import { CADFiler } from './CADFiler';
import { CADObject } from './CADObject';
import { DeepCloneFiler } from './DeepCloneFiler';
import { Entity } from './Entity/Entity';
import { GroupTable } from './GroupTable';
import { HistoricManage } from './HistoricManage';
import { IdMaping } from './IdMaping';
import { MaterialTable } from './MaterialTable';
@ -31,6 +32,7 @@ export class Database
MaterialTable: MaterialTable;
TextureTable: TextureTable;
TemplateTable: TemplateTable;
GroupTable: GroupTable;
ModelSpace: BlockTableRecord;
DefaultMaterial: PhysicalMaterialRecord;
@ -43,6 +45,7 @@ export class Database
this.MaterialTable = new MaterialTable().SetOwnerDatabase(this);
this.TextureTable = new TextureTable().SetOwnerDatabase(this);
this.TemplateTable = new TemplateTable().SetOwnerDatabase(this);
this.GroupTable = new GroupTable().SetOwnerDatabase(this);
this.hm = new HistoricManage().SetDefaultDb(this);
@ -89,6 +92,7 @@ export class Database
this.MaterialTable.Destroy();
this.TextureTable.Destroy();
this.TemplateTable.Destroy();
this.GroupTable.Destroy();
this.hm.Destroy();
this.hm.historyRecord.length = 0;
@ -97,6 +101,7 @@ export class Database
this.MaterialTable.SetOwnerDatabase(this);
this.TextureTable.SetOwnerDatabase(this);
this.TemplateTable.SetOwnerDatabase(this);
this.GroupTable.SetOwnerDatabase(this);
this.hm.SetOwnerDatabase(this);
this.idIndex = 100;
}
@ -106,13 +111,14 @@ export class Database
FileWrite(): CADFiler
{
let file = new CADFiler();
file.Write(2);//ver;
file.Write(3);//ver;
file.Write(this.idIndex);
this.ModelSpace.WriteFile(file);
this.TextureTable.WriteFile(file);
this.MaterialTable.WriteFile(file);
this.hm.WriteFile(file);
this.TemplateTable.WriteFile(file);
this.GroupTable.WriteFile(file);
return file;
}
@ -128,6 +134,8 @@ export class Database
this.hm.ReadFile(file);
if (ver > 1)
this.TemplateTable.ReadFile(file);
if (ver > 2)
this.GroupTable.ReadFile(file);
this.SettingDefaultMaterial();

@ -31,6 +31,7 @@ export class Entity extends CADObject
protected m_Matrix = new Matrix4();
protected _Visible = true;
@AutoRecord GourpId: ObjectId;
@AutoRecord Template: ObjectId;
/**
@ -449,16 +450,20 @@ export class Entity extends CADObject
if (ver > 3)
this.Template = file.ReadObjectId();
if (ver > 4)
this.GourpId = file.ReadObjectId();
}
//对象将自身数据写入到文件.
WriteFile(file: CADFiler)
{
file.Write(4);
file.Write(5);
super.WriteFile(file);
file.Write(this.m_Color);
file.WriteHardObjectId(this.materialId);
file.Write(this.m_Matrix.toArray());
file.WriteObjectId(this.Template);
file.WriteObjectId(this.GourpId);
}
//局部撤销
ApplyPartialUndo(undoData: CADObject)

@ -0,0 +1,23 @@
import { Factory } from "./CADFactory";
import { GroupRecord } from "./GroupTableRecord";
import { ObjectCollection } from "./ObjectCollection";
import { CADFiler } from "./CADFiler";
@Factory
export class GroupTable extends ObjectCollection<GroupRecord>
{
//对象从文件中读取数据,初始化自身
ReadFile(file: CADFiler)
{
let ver = file.Read();
super.ReadFile(file);
}
//对象将自身数据写入到文件.
WriteFile(file: CADFiler)
{
file.Write(1);
super.WriteFile(file);
}
//#endregion
}

@ -0,0 +1,68 @@
import { Factory } from "./CADFactory";
import { SymbolTableRecord } from "./SymbolTableRecord";
import { AutoRecord, ISPROXYKEY } from "./AutoRecord";
import { ObjectId } from "./ObjectId";
import { Entity } from "./Entity/Entity";
import { CADFiler } from "./CADFiler";
@Factory
export class GroupRecord extends SymbolTableRecord
{
@AutoRecord Entitys: ObjectId[];
constructor()
{
super();
this.Entitys = new Proxy([], {
set: (target, key, value, receiver) =>
{
if (Reflect.get(target, key, receiver) !== value)
{
if (this.WriteAllObjectRecord())
{
if (value instanceof ObjectId && value.Object instanceof Entity)
{
if (!this.Id)
console.warn("请先添加到Database后在进行操作!");
else
value.Object.GourpId = this.Id;
}
}
}
return Reflect.set(target, key, value, receiver);
},
get: (target, key, receiver) =>
{
if (key === ISPROXYKEY)
return true;
return Reflect.get(target, key, receiver);
}
});
}
//对象从文件中读取数据,初始化自身
ReadFile(file: CADFiler)
{
let ver = file.Read();
super.ReadFile(file);
let count = file.Read() as number;
this.Entitys.length = 0;
for (let i = 0; i < count; i++)
{
this.Entitys.push(file.ReadObjectId());
}
}
//对象将自身数据写入到文件.
WriteFile(file: CADFiler)
{
file.Write(1);
super.WriteFile(file);
file.Write(this.Entitys.length);
for (let id of this.Entitys)
file.WriteObjectId(id);
}
}

@ -1,6 +1,7 @@
import { Vector3 } from 'three';
import { AddPtOnBoard, DeletePtOnBoard } from '../Add-on/AddPtOnBoard';
import { Command_Array } from '../Add-on/Array';
import { BoardBatchCurtail } from '../Add-on/BoardBatchCurtail';
import { LinearCutting } from '../Add-on/BoardCutting/LinearCutting';
import { NonAssociativeCutting } from '../Add-on/BoardCutting/NonAssociativeCutting';
import { ReferenceCutting } from '../Add-on/BoardCutting/ReferenceCutting';
@ -67,6 +68,7 @@ import { Command_Explode } from '../Add-on/Explode';
import { Command_ExplosionMap } from '../Add-on/ExplosionMap';
import { Command_Extend } from '../Add-on/Extends';
import { CommandFillet } from '../Add-on/Fillet';
import { Command_Group } from '../Add-on/Group';
import { Command_HideSelected, Command_HideUnselected, Command_ShowAll } from '../Add-on/HideSelected';
import { Command_Insert } from '../Add-on/Insert';
import { Command_INsTest } from '../Add-on/instest';
@ -114,11 +116,11 @@ import { CommandServer } from '../DatabaseServices/CommandServer';
import { AutoTempateSizeAction } from '../DatabaseServices/Template/TemplateTest';
import { ICommand } from '../UI/Components/CommandPanel/CommandList';
import { commandMachine } from './CommandMachine';
import { BoardBatchCurtail } from '../Add-on/BoardBatchCurtail';
export function registerCommand()
{
commandMachine.RegisterCommand("group", new Command_Group);
commandMachine.RegisterCommand("dxf", new Command_DXFImport);
commandMachine.RegisterCommand("tt", new Test())

@ -3,6 +3,7 @@ import { GetEntity, IsEntity, log } from '../Common/Utils';
import { Entity } from '../DatabaseServices/Entity/Entity';
import { SelectSetBase } from './SelectBase';
import { CheckFilter, Filter } from './SelectFilter';
import { GroupRecord } from '../DatabaseServices/GroupTableRecord';
//选择集.
export class SelectSet
@ -18,13 +19,9 @@ export class SelectSet
{
let selectCount = selectData.m_SelectList.length;
//1.校验重复
selectData.m_SelectList = selectData.m_SelectList.filter(obj => !this.m_IdSelect.has(obj.id))
selectData.m_SelectList = selectData.m_SelectList.filter(obj => !this.m_IdSelect.has(obj.id));
let dupCount = selectCount - selectData.m_SelectList.length;
if (this.showLog)
log(`选择${selectCount}个,重复${dupCount}个.`);
//加入集合
this.m_SelectSetList.push(selectData);
@ -32,6 +29,40 @@ export class SelectSet
{
this.m_IdSelect.set(obj.id, selectData);
}
//Group 操作
let groupCount = 0;
for (let selEnt of selectData.SelectEntityList)
{
if (selEnt.GourpId)
{
let group = selEnt.GourpId.Object as GroupRecord;
for (let entId of group.Entitys)
{
let ent = entId.Object as Entity;
let obj = ent.DrawObject;
if (!this.m_IdSelect.has(obj.id))
{
selectData.m_SelectList.push(obj);
this.m_IdSelect.set(obj.id, selectData);
groupCount++;
}
}
}
}
if (this.showLog)
{
let msg = `选择${selectCount + groupCount}`;
if (dupCount > 0)
msg += `,重复${dupCount}`;
if (groupCount > 0)
msg += `,编组${groupCount}`;
msg += '.';
log(msg);
}
}
RemoveSelect(selectData: SelectSetBase)
{

Loading…
Cancel
Save