(api) 模版参数继承

pull/351/head
ChenX 5 years ago
parent 51f588fe25
commit a3b675d490

@ -78,6 +78,7 @@
"dxf-parser": "^1.0.0-alpha.1",
"expr-eval": "^1.2.2",
"golden-layout": "^1.5.9",
"meriyah": "^0.4.1",
"mobx": "^5.10.0",
"mobx-react": "^6.0.3",
"react": "^16.8.2",

@ -19,7 +19,7 @@ export class TemplateRecord extends SymbolTableRecord
{
@AutoRecord Type: TemplateType;
@AutoRecord Parent: ObjectId;
@AutoRecord Children: ObjectId[] = [];
@AutoRecord Children: ObjectId[];
@AutoRecord Params: TemplateParam[];
@AutoRecord Objects: ObjectId[];
private positioning: Positioning;
@ -67,6 +67,29 @@ export class TemplateRecord extends SymbolTableRecord
return Reflect.get(target, key, receiver);
}
});
this.Children = new Proxy([], {
set: (target, key, value, receiver) =>
{
if (Reflect.get(target, key, receiver) !== value)
{
this.WriteAllObjectRecord();
if (value instanceof ObjectId && value.Object instanceof TemplateRecord)
{
if (!this.Id)
console.warn("请先加模版添加到Database后在进行操作!");
value.Object.Parent = this.Id;
}
}
return Reflect.set(target, key, value, receiver);
},
get: (target, key, receiver) =>
{
if (key === ISPROXYKEY)
return true;
return Reflect.get(target, key, receiver);
}
});
}
/**
@ -112,6 +135,20 @@ export class TemplateRecord extends SymbolTableRecord
}
return this;
}
get LParam()
{
return this.GetParam("L");
}
get WParam()
{
return this.GetParam("W");
}
get HParam()
{
return this.GetParam("H");
}
UpdateAllTemplate(newParams: [])
{
for (let i = 0; i < this.Params.length; i++)
@ -138,8 +175,26 @@ export class TemplateRecord extends SymbolTableRecord
}
}
async UpdateTemplate(params?: any, recursion = false)
/**
*
*/
async UpdateTemplate(params?: {}, recursion = false)
{
if (!params)
params = this.GetParentParams();
else
{
let newParams = {};
for (let key in params)
{
if (key[0] !== "@")
newParams["_" + key] = params[key];
else
newParams[key] = params[key];
}
params = newParams;
}
let objs = this.Objects.filter(id => !id.IsErase).map(id => id.Object as Board);
if (this.positioning)
{
@ -158,14 +213,9 @@ export class TemplateRecord extends SymbolTableRecord
if (this.positioning.SpaceSize)
{
let l = this.GetParam("L");
l.UpdateParam(this.positioning.SpaceSize.x);
let w = this.GetParam("W");
w.UpdateParam(this.positioning.SpaceSize.y);
let h = this.GetParam("H");
h.UpdateParam(this.positioning.SpaceSize.z);
this.LParam.UpdateParam(this.positioning.SpaceSize.x);
this.WParam.UpdateParam(this.positioning.SpaceSize.y);
this.HParam.UpdateParam(this.positioning.SpaceSize.z);
}
//保持SpaceCS
@ -179,16 +229,56 @@ export class TemplateRecord extends SymbolTableRecord
{
//广度优先
let updateStack = [...this.Children];
let childrenCount = this.Children.length;
let index = 0;
while (updateStack.length > 0)
{
if (index < childrenCount)
{
params["index"] = index;
params["childrenCount"] = childrenCount;
}
else
{
delete params["index"];
delete params["childrenCount"];
}
let id = updateStack.shift();
let template = id.Object as TemplateRecord;
await template.UpdateTemplate();
await template.UpdateTemplate(params);
updateStack.push(...template.Children);
index++;
}
}
}
private GetParentParams()
{
let params = {};
let parent = this.Parent;
let index = 1;
while (parent)
{
let parentTemplate = parent.Object as TemplateRecord;
let frontStr = new Array(index).fill("_").join();
for (let param of parentTemplate.Params)
params[frontStr + param.name] = param.value;
if (index === 1)
{
let recordIndex = parentTemplate.Children.indexOf(this.Id);
}
parent = parentTemplate.Parent;
if (!parent)
{
for (let param of parentTemplate.Params)
params["@" + param.name] = param.value;
}
index++;
}
return params;
}
//#region -------------------------File-------------------------
//对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化

Loading…
Cancel
Save