|
|
|
@ -1,169 +1,152 @@
|
|
|
|
|
import { Vector3 } from "three";
|
|
|
|
|
import { app } from "../../../ApplicationServices/Application";
|
|
|
|
|
import { EBoardKeyList } from "../../../Common/BoardKeyList";
|
|
|
|
|
import { Entity } from "../../../DatabaseServices/Entity/Entity";
|
|
|
|
|
import { HardwareCompositeEntity } from "../../../DatabaseServices/Hardware/HardwareCompositeEntity";
|
|
|
|
|
import { TemplateVisualSpace } from "../../../DatabaseServices/Template/ProgramTempate/TemplateVisualSpace";
|
|
|
|
|
import { PositioningHandleSpace } from "../../../DatabaseServices/Template/Positioning/PositioningHandleSpace";
|
|
|
|
|
import { TemplateRecord } from "../../../DatabaseServices/Template/TemplateRecord";
|
|
|
|
|
import { Board, DuplicateRecordCloning } from "../../../ueapi";
|
|
|
|
|
import { BoardOpenDir } from "../../Store/BoardInterface";
|
|
|
|
|
import { DoorStore } from "../../Store/DoorDrawerStore/DoorStore";
|
|
|
|
|
import { HandleHorPos, HandleVePos } from "../../Store/DoorInterface";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* handleDoorSpaceTr 拉手根空间(用于定位 设置PX PY PZ的值)
|
|
|
|
|
* -handleRotateSpace 拉手空间 (用于旋转 设置RY的值)
|
|
|
|
|
* --handleTemp 拉手模块
|
|
|
|
|
*/
|
|
|
|
|
export class TemplateDrawHandleTool
|
|
|
|
|
{
|
|
|
|
|
AddHandleToDoor = async (door: Board | HardwareCompositeEntity, handleTemp: TemplateRecord) =>
|
|
|
|
|
{
|
|
|
|
|
const store = DoorStore.GetInstance() as DoorStore;
|
|
|
|
|
const isAuto = store.byOpenDir;
|
|
|
|
|
const doorStore = DoorStore.GetInstance() as DoorStore;
|
|
|
|
|
const isAuto = doorStore.byOpenDir;
|
|
|
|
|
|
|
|
|
|
const option = store.m_Option;
|
|
|
|
|
let doorTr = door.Template?.Object as TemplateRecord;
|
|
|
|
|
|
|
|
|
|
let handleSpaceTr = new TemplateVisualSpace().InitBaseParams();
|
|
|
|
|
(handleSpaceTr as TemplateVisualSpace).IsVisible = false;
|
|
|
|
|
handleSpaceTr.Name = "拉手根空间";
|
|
|
|
|
let thickness: number;
|
|
|
|
|
let openDir = BoardOpenDir.None;
|
|
|
|
|
let parentTem = door.Template;
|
|
|
|
|
//创建拉手根空间(用于门板定位)
|
|
|
|
|
let handleDoorSpaceTr = new TemplateRecord().InitBaseParams();
|
|
|
|
|
handleDoorSpaceTr.Name = "拉手根空间";//"拉手定位"
|
|
|
|
|
handleDoorSpaceTr.Positioning = new PositioningHandleSpace(door.Id);
|
|
|
|
|
|
|
|
|
|
app.Database.TemplateTable.Append(handleDoorSpaceTr);//加入图纸
|
|
|
|
|
|
|
|
|
|
if (doorTr) doorTr.Children.push(handleDoorSpaceTr.Id); //拉手根空间加入该板件家谱树
|
|
|
|
|
|
|
|
|
|
//#region 解析开门方向
|
|
|
|
|
let openDir = BoardOpenDir.None;
|
|
|
|
|
if (door instanceof Board)
|
|
|
|
|
{
|
|
|
|
|
handleSpaceTr.HParam.expr = door.Height;
|
|
|
|
|
handleSpaceTr.LParam.expr = door.Width;
|
|
|
|
|
handleSpaceTr.GetParam("BH").expr = parentTem ? "_BH" : "";
|
|
|
|
|
thickness = door.Thickness;
|
|
|
|
|
if (doorTr)
|
|
|
|
|
handleDoorSpaceTr.GetParam("BH").expr = "_BH";
|
|
|
|
|
openDir = door.OpenDir;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (door.Template)
|
|
|
|
|
if (doorTr)
|
|
|
|
|
{
|
|
|
|
|
let temp = door.Template.Object as TemplateRecord;
|
|
|
|
|
if (temp.Parent)
|
|
|
|
|
if (doorTr.Parent)
|
|
|
|
|
{
|
|
|
|
|
const tempSpace = temp.Parent.Object as TemplateRecord;
|
|
|
|
|
if (tempSpace.Name === "门板空间")
|
|
|
|
|
const doorParentTr = doorTr.Parent.Object as TemplateRecord;
|
|
|
|
|
if (doorParentTr.Name === "门板空间")
|
|
|
|
|
{
|
|
|
|
|
handleSpaceTr.HParam.expr = temp.HParam.value;
|
|
|
|
|
handleSpaceTr.LParam.expr = temp.LParam.value;
|
|
|
|
|
thickness = Number(temp.WParam.value) || 0;
|
|
|
|
|
let doorGroup = tempSpace.Parent.Object as TemplateRecord;
|
|
|
|
|
let zkmPar = doorGroup.GetParam("ZKM");
|
|
|
|
|
let doorGroup = doorParentTr.Parent.Object as TemplateRecord;
|
|
|
|
|
let zkmPar = doorGroup.GetParam("ZKM");//左开门
|
|
|
|
|
if (zkmPar)
|
|
|
|
|
{
|
|
|
|
|
openDir = zkmPar.value === 1 ? BoardOpenDir.Left : BoardOpenDir.Right;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
let skmPar = doorGroup.GetParam("SKM");
|
|
|
|
|
let skmPar = doorGroup.GetParam("SKM");//上开门
|
|
|
|
|
if (skmPar)
|
|
|
|
|
openDir = skmPar.value === 1 ? BoardOpenDir.Up : BoardOpenDir.Down;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (thickness === undefined)
|
|
|
|
|
{
|
|
|
|
|
let size = door.BoundingBoxInOCS.getSize(new Vector3);
|
|
|
|
|
handleSpaceTr.HParam.expr = size.z;
|
|
|
|
|
handleSpaceTr.LParam.expr = size.x;
|
|
|
|
|
thickness = size.y;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
handleSpaceTr.WParam.expr = 1;
|
|
|
|
|
app.Database.TemplateTable.Append(handleSpaceTr);
|
|
|
|
|
if (parentTem?.Object) (parentTem.Object as TemplateRecord).Children.push(handleSpaceTr.Id); //拉手根空间加入该板件家谱树
|
|
|
|
|
|
|
|
|
|
await handleSpaceTr.UpdateTemplateTree();
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
let box = door.GetBoundingBoxInMtx(door.SpaceOCSInv);
|
|
|
|
|
let min = box.min;
|
|
|
|
|
min.y = box.max.y;
|
|
|
|
|
min.applyMatrix4(door.SpaceOCS);
|
|
|
|
|
//#region 定位表达式
|
|
|
|
|
|
|
|
|
|
for (let id of handleSpaceTr.Objects)
|
|
|
|
|
{
|
|
|
|
|
let en = (id.Object as Entity);
|
|
|
|
|
en.ApplyMatrix(door.SpaceOCS);
|
|
|
|
|
en.Position = min;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let handleSpace = new TemplateRecord().InitBaseParams();
|
|
|
|
|
handleSpace.Name = "拉手空间";
|
|
|
|
|
handleSpace.HParam.expr = "0";
|
|
|
|
|
handleSpace.LParam.expr = "0";
|
|
|
|
|
handleSpace.WParam.expr = "0";
|
|
|
|
|
handleSpace.PYParam.expr = - thickness;
|
|
|
|
|
handleSpace.Params[9].expr = parentTem ? "_BH" : "";
|
|
|
|
|
let handleRotateSpace = new TemplateRecord().InitBaseParams();
|
|
|
|
|
handleRotateSpace.Name = "拉手空间";//中间旋转层 ->"拉手旋转"
|
|
|
|
|
handleRotateSpace.HParam.expr = "0";
|
|
|
|
|
handleRotateSpace.LParam.expr = "0";
|
|
|
|
|
handleRotateSpace.WParam.expr = "0";
|
|
|
|
|
handleRotateSpace.Params[9].expr = doorTr ? "_BH" : "";
|
|
|
|
|
|
|
|
|
|
app.Database.TemplateTable.Append(handleSpace);
|
|
|
|
|
app.Database.TemplateTable.Append(handleRotateSpace);
|
|
|
|
|
handleDoorSpaceTr.Children.push(handleRotateSpace.Id);
|
|
|
|
|
|
|
|
|
|
handleSpaceTr.Children.push(handleSpace.Id);
|
|
|
|
|
let handleHorPos = doorStore.m_Option.handleHorPos;//X轴定位方式(左右中)
|
|
|
|
|
let handleVerPos = doorStore.m_Option.handleVePos;//Z轴定位方式 (上下中)
|
|
|
|
|
|
|
|
|
|
let xExpr = "";
|
|
|
|
|
|
|
|
|
|
const doorStore = DoorStore.GetInstance() as DoorStore;
|
|
|
|
|
|
|
|
|
|
let handleHorPos = doorStore.m_Option.handleHorPos;
|
|
|
|
|
let handleVerPos = doorStore.m_Option.handleVePos;
|
|
|
|
|
|
|
|
|
|
let zjExpr = option.horSpacing.toString();
|
|
|
|
|
let yjExpr = option.horSpacing.toString();
|
|
|
|
|
let zjExpr = doorStore.m_Option.horSpacing.toString();//左距
|
|
|
|
|
let yjExpr = doorStore.m_Option.horSpacing.toString();//右距
|
|
|
|
|
|
|
|
|
|
switch (handleHorPos)
|
|
|
|
|
{
|
|
|
|
|
case HandleHorPos.Left:
|
|
|
|
|
xExpr = zjExpr;
|
|
|
|
|
if (isAuto && openDir === BoardOpenDir.Left)
|
|
|
|
|
xExpr = `_L-${yjExpr}`;
|
|
|
|
|
xExpr = `L-${yjExpr}`;
|
|
|
|
|
break;
|
|
|
|
|
case HandleHorPos.Right:
|
|
|
|
|
xExpr = `_L-${yjExpr}`;
|
|
|
|
|
xExpr = `L-${yjExpr}`;
|
|
|
|
|
if (isAuto && openDir === BoardOpenDir.Right)
|
|
|
|
|
xExpr = zjExpr;
|
|
|
|
|
break;
|
|
|
|
|
case HandleHorPos.Mid:
|
|
|
|
|
xExpr = `_L*0.5`;
|
|
|
|
|
xExpr = `L*0.5`;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let zExpr = "";
|
|
|
|
|
|
|
|
|
|
let sjExpr = option.veSpacing.toString();
|
|
|
|
|
let xjExpr = option.veSpacing.toString();
|
|
|
|
|
let sjExpr = doorStore.m_Option.veSpacing.toString();//上距
|
|
|
|
|
let xjExpr = doorStore.m_Option.veSpacing.toString();//下距
|
|
|
|
|
|
|
|
|
|
switch (handleVerPos)
|
|
|
|
|
{
|
|
|
|
|
case HandleVePos.Top:
|
|
|
|
|
zExpr = "_H-" + sjExpr;
|
|
|
|
|
zExpr = "H-" + sjExpr;
|
|
|
|
|
if (isAuto && openDir === BoardOpenDir.Up)
|
|
|
|
|
zExpr = xjExpr;
|
|
|
|
|
break;
|
|
|
|
|
case HandleVePos.Bottom:
|
|
|
|
|
zExpr = xjExpr;
|
|
|
|
|
if (isAuto && openDir === BoardOpenDir.Down)
|
|
|
|
|
zExpr = "_H-" + sjExpr;
|
|
|
|
|
zExpr = "H-" + sjExpr;
|
|
|
|
|
break;
|
|
|
|
|
case HandleVePos.Mid:
|
|
|
|
|
zExpr = `_H*0.5`;
|
|
|
|
|
zExpr = `H*0.5`;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
handleSpace.PXParam.expr = xExpr;
|
|
|
|
|
handleSpace.PZParam.expr = zExpr;
|
|
|
|
|
handleDoorSpaceTr.PXParam.expr = xExpr;
|
|
|
|
|
handleDoorSpaceTr.PZParam.expr = zExpr;
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
//插入拉手模块
|
|
|
|
|
handleTemp = app.Database.WblockCloneObejcts([handleTemp], app.Database.TemplateTable, new Map(), DuplicateRecordCloning.Ignore)[0] as TemplateRecord;
|
|
|
|
|
handleSpace.Children.push(handleTemp.Id);
|
|
|
|
|
handleRotateSpace.Children.push(handleTemp.Id);
|
|
|
|
|
|
|
|
|
|
//保持这个代码 保证这个层旋转可以生效(注释这个代码后 拉手模块的空间将不能旋转,但是能保持正确的尺寸)
|
|
|
|
|
handleTemp.HParam.expr = "0";
|
|
|
|
|
handleTemp.LParam.expr = "0";
|
|
|
|
|
handleTemp.WParam.expr = "0";
|
|
|
|
|
handleTemp.RYParam.expr = doorStore.m_Option.handleAngle;
|
|
|
|
|
|
|
|
|
|
let rName: string;
|
|
|
|
|
let cName: string;
|
|
|
|
|
let bName: string;
|
|
|
|
|
handleRotateSpace.RYParam.expr = doorStore.m_Option.handleAngle;//旋转
|
|
|
|
|
|
|
|
|
|
//#region 房名 柜名
|
|
|
|
|
let rName: string;//房名
|
|
|
|
|
let cName: string;//柜名
|
|
|
|
|
let bName: string;//板名
|
|
|
|
|
|
|
|
|
|
if (door instanceof Board)
|
|
|
|
|
{
|
|
|
|
@ -187,6 +170,8 @@ export class TemplateDrawHandleTool
|
|
|
|
|
objId.Object.HardwareOption[EBoardKeyList.CabinetName] = cName;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
await handleSpaceTr.UpdateTemplateTree();
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
await handleDoorSpaceTr.UpdateTemplateTree();
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|