|
|
|
@ -4,6 +4,7 @@ import { observer } from "mobx-react";
|
|
|
|
|
import React from "react";
|
|
|
|
|
import { Object3D } from "three";
|
|
|
|
|
import { end } from "xaop";
|
|
|
|
|
import { RotateTemplateSpace } from "../../../Add-on/Template/RotateTemplateSpace";
|
|
|
|
|
import { app } from "../../../ApplicationServices/Application";
|
|
|
|
|
import { arrayRemoveOnce } from "../../../Common/ArrayExt";
|
|
|
|
|
import { EBoardKeyList } from "../../../Common/BoardKeyList";
|
|
|
|
@ -15,6 +16,7 @@ import { CreateObjectData } from "../../../DatabaseServices/CreateObjectData";
|
|
|
|
|
import { Board } from "../../../DatabaseServices/Entity/Board";
|
|
|
|
|
import { Entity } from "../../../DatabaseServices/Entity/Entity";
|
|
|
|
|
import { PositioningClampSpace } from "../../../DatabaseServices/Template/Positioning/PositioningClampSpace";
|
|
|
|
|
import { TemplateVisualSpace } from "../../../DatabaseServices/Template/ProgramTempate/TemplateVisualSpace";
|
|
|
|
|
import { DeleteTempate } from "../../../DatabaseServices/Template/TempateUtils";
|
|
|
|
|
import { TemplateRecord } from "../../../DatabaseServices/Template/TemplateRecord";
|
|
|
|
|
import { TemplateSplitType } from "../../../DatabaseServices/Template/TemplateType";
|
|
|
|
@ -126,6 +128,7 @@ export class TemplateParamPanel extends React.Component<TemplateParamProps, Temp
|
|
|
|
|
end(app.Database, app.Database.FileRead, () =>
|
|
|
|
|
{
|
|
|
|
|
this.InitData();
|
|
|
|
|
this.displayTemplateRootId = undefined;
|
|
|
|
|
}),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
@ -165,12 +168,19 @@ export class TemplateParamPanel extends React.Component<TemplateParamProps, Temp
|
|
|
|
|
//当前选中的模块记录
|
|
|
|
|
GetCurrentTemplate(): TemplateRecord | undefined
|
|
|
|
|
{
|
|
|
|
|
let record: TemplateRecord;
|
|
|
|
|
let curId = app.Database.GetObjectId(this.currentTemplateId);
|
|
|
|
|
if (curId === undefined || curId.IsErase)
|
|
|
|
|
curId = app.Database.GetObjectId(this.displayTemplateRootId);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
record = curId.Object as TemplateRecord;
|
|
|
|
|
if (this.displayTemplateRootId === undefined)
|
|
|
|
|
this.displayTemplateRootId = record.Root ? record.Root.Id.Index : record.Id.Index;
|
|
|
|
|
}
|
|
|
|
|
if (!curId || curId.IsErase)
|
|
|
|
|
return;
|
|
|
|
|
let record = curId.Object as TemplateRecord;
|
|
|
|
|
record = curId.Object as TemplateRecord;
|
|
|
|
|
|
|
|
|
|
if (record instanceof TemplateRecord)
|
|
|
|
|
return record;
|
|
|
|
@ -246,6 +256,8 @@ export class TemplateParamPanel extends React.Component<TemplateParamProps, Temp
|
|
|
|
|
{
|
|
|
|
|
//亮显节点
|
|
|
|
|
this.HandleNodeSelect(node);
|
|
|
|
|
let curTemp = this.GetCurrentTemplate();
|
|
|
|
|
let curParent = (curTemp.Parent?.Object) as TemplateRecord;
|
|
|
|
|
|
|
|
|
|
ContextMenu.show(
|
|
|
|
|
<Menu>
|
|
|
|
@ -268,13 +280,35 @@ export class TemplateParamPanel extends React.Component<TemplateParamProps, Temp
|
|
|
|
|
onClick={() => { this.SeparateSpace(node); }}
|
|
|
|
|
/>
|
|
|
|
|
<MenuItem
|
|
|
|
|
text="批量修改当前层的柜体名为节点名称"
|
|
|
|
|
onClick={() => { this.BatchModifyCurrentLayerCabinetName(node); }}
|
|
|
|
|
/>
|
|
|
|
|
<MenuItem
|
|
|
|
|
text="批量修改当前层及下的柜体名为节点名称"
|
|
|
|
|
onClick={() => { this.BatchModifyCurrentChildrenCabinetName(node); }}
|
|
|
|
|
text="旋转空间"
|
|
|
|
|
onClick={() => { this.RotateSpace(curTemp); }}
|
|
|
|
|
/>
|
|
|
|
|
{
|
|
|
|
|
curTemp instanceof TemplateVisualSpace ?
|
|
|
|
|
|
|
|
|
|
(curParent && curParent.SplitType !== -1) ?
|
|
|
|
|
[["左", "右"], ["前", "后"], ["上", "下"]][curParent.SplitType].map((char, i) =>
|
|
|
|
|
{
|
|
|
|
|
return (
|
|
|
|
|
<MenuItem
|
|
|
|
|
text={`${char}边添加空间`}
|
|
|
|
|
onClick={async () => { await this.AddSpace(i, curParent, curTemp as TemplateVisualSpace); }}
|
|
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
})
|
|
|
|
|
: null
|
|
|
|
|
:
|
|
|
|
|
<>
|
|
|
|
|
<MenuItem
|
|
|
|
|
text="批量修改当前层的柜体名为节点名称"
|
|
|
|
|
onClick={() => { this.BatchModifyCurrentLayerCabinetName(node); }}
|
|
|
|
|
/>
|
|
|
|
|
<MenuItem
|
|
|
|
|
text="批量修改当前层及下的柜体名为节点名称"
|
|
|
|
|
onClick={() => { this.BatchModifyCurrentChildrenCabinetName(node); }}
|
|
|
|
|
/>
|
|
|
|
|
</>
|
|
|
|
|
}
|
|
|
|
|
</>
|
|
|
|
|
}
|
|
|
|
|
</Menu>,
|
|
|
|
@ -285,6 +319,34 @@ export class TemplateParamPanel extends React.Component<TemplateParamProps, Temp
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//添加空间
|
|
|
|
|
//0: 左 前 上
|
|
|
|
|
//1: 右 后 下
|
|
|
|
|
private AddSpace = async (type: number, tParent: TemplateRecord, tThis: TemplateVisualSpace) =>
|
|
|
|
|
{
|
|
|
|
|
let tc = new TemplateVisualSpace().InitBaseParams();
|
|
|
|
|
tc.LParam.expr = "_L";
|
|
|
|
|
tc.WParam.expr = "_W";
|
|
|
|
|
tc.HParam.expr = "_H";
|
|
|
|
|
|
|
|
|
|
tc.Params[tParent.SplitType].expr = "_DIV";
|
|
|
|
|
tc.Params[3 + tParent.SplitType].expr = "_POS";
|
|
|
|
|
|
|
|
|
|
app.Database.TemplateTable.Append(tc);
|
|
|
|
|
let index = tParent.Children.findIndex((t) => t.Index === tThis.Id.Index);
|
|
|
|
|
type ? tParent.Children.splice(index + 1, 0, tc.Id) : tParent.Children.splice(index, 0, tc.Id);
|
|
|
|
|
await tParent.UpdateTemplateTree();
|
|
|
|
|
this.InitData();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
private RotateSpace = async (t: TemplateRecord) =>
|
|
|
|
|
{
|
|
|
|
|
CommandWrap(async () =>
|
|
|
|
|
{
|
|
|
|
|
await RotateTemplateSpace(t);
|
|
|
|
|
}, "旋转空间");
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//批量修改当前层的柜体名为节点名称
|
|
|
|
|
private BatchModifyCurrentLayerCabinetName = (node: ITreeNode) =>
|
|
|
|
|
{
|
|
|
|
@ -355,6 +417,8 @@ export class TemplateParamPanel extends React.Component<TemplateParamProps, Temp
|
|
|
|
|
CommandWrap(() =>
|
|
|
|
|
{
|
|
|
|
|
DeleteTempate(tr);
|
|
|
|
|
if (tr.Parent)
|
|
|
|
|
(tr.Parent.Object as TemplateRecord).UpdateTemplateTree();
|
|
|
|
|
this.InitData();
|
|
|
|
|
}, "删除模板节点");
|
|
|
|
|
app.Editor.UpdateScreen();
|
|
|
|
@ -370,8 +434,12 @@ export class TemplateParamPanel extends React.Component<TemplateParamProps, Temp
|
|
|
|
|
case OutlineType.This:
|
|
|
|
|
for (let t of tr.Objects)
|
|
|
|
|
{
|
|
|
|
|
let obj3d = t.Object as Entity;
|
|
|
|
|
outlineObj3ds.push(obj3d.DrawObject);
|
|
|
|
|
if (t && !t.IsErase)
|
|
|
|
|
{
|
|
|
|
|
let en = t.Object as Entity;
|
|
|
|
|
if (en.Visible)
|
|
|
|
|
outlineObj3ds.push(en.DrawObject);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case OutlineType.Child:
|
|
|
|
@ -686,7 +754,9 @@ export class TemplateParamDetail extends React.Component<{ updateParams: INeedUp
|
|
|
|
|
stepSize={90}
|
|
|
|
|
onKeyDown={(e) => { this.onKeydown(e, par); }}
|
|
|
|
|
className={Classes.INPUT}
|
|
|
|
|
value={par.name === "RX" ? this.rotateParam.RX.expr : (par.name === "RY" ? this.rotateParam.RY.expr : this.rotateParam.RZ.expr) as string}
|
|
|
|
|
value={par.name === "RX" ? (this.rotateParam.RX.expr ? this.rotateParam.RX.expr : this.rotateParam.RX.val)
|
|
|
|
|
: (par.name === "RY" ? (this.rotateParam.RY.expr ? this.rotateParam.RY.expr : this.rotateParam.RY.val)
|
|
|
|
|
: this.rotateParam.RZ.expr ? this.rotateParam.RZ.expr : this.rotateParam.RZ.val) as string}
|
|
|
|
|
selectAllOnFocus={true}
|
|
|
|
|
onValueChange={(valueAsNumber: number, valueAsString: string) =>
|
|
|
|
|
{
|
|
|
|
|