|
|
@ -16,6 +16,8 @@ import { HotCMD } from "../Hot/HotCommand";
|
|
|
|
import { FaceDirection, LinesType, IHighSealedItem } from "../UI/Store/BoardInterface";
|
|
|
|
import { FaceDirection, LinesType, IHighSealedItem } from "../UI/Store/BoardInterface";
|
|
|
|
import { ParagraphSealinglist, HandleRectBoardSealingData } from "../GraphicsSystem/CalcEdgeSealing";
|
|
|
|
import { ParagraphSealinglist, HandleRectBoardSealingData } from "../GraphicsSystem/CalcEdgeSealing";
|
|
|
|
import { arrayLast } from "../Common/ArrayExt";
|
|
|
|
import { arrayLast } from "../Common/ArrayExt";
|
|
|
|
|
|
|
|
import { userConfig } from "../Editor/UserConfig";
|
|
|
|
|
|
|
|
import { safeEval } from "../Common/eval";
|
|
|
|
|
|
|
|
|
|
|
|
/** 模型类型 */
|
|
|
|
/** 模型类型 */
|
|
|
|
enum KJL_ModelType
|
|
|
|
enum KJL_ModelType
|
|
|
@ -98,6 +100,12 @@ interface KJL_JsonFile
|
|
|
|
designData: KJL_DesignData;
|
|
|
|
designData: KJL_DesignData;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface KJL_DrillData//排钻信息
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
bigHole: number;//0-正, 1-反
|
|
|
|
|
|
|
|
drillSides: number[];//0-不排, 1...n-排n型
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class FuzzPoint
|
|
|
|
class FuzzPoint
|
|
|
|
{
|
|
|
|
{
|
|
|
|
private map: { [key: string]: Vec2; } = {};
|
|
|
|
private map: { [key: string]: Vec2; } = {};
|
|
|
@ -173,7 +181,7 @@ function ParseRoomNameMap(d: KJL_DesignData): Map<string, string>
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function ParseModel(model: KJL_ParamModel, roomName: string, gName: string, parentMatrix?: Matrix4, edgeBandingAll?: number[]): Board | TemplateRecord
|
|
|
|
function ParseModel(model: KJL_ParamModel, roomName: string, gName: string, parentMatrix?: Matrix4, edgeBandingAll?: number[], drillData?: KJL_DrillData): Board | TemplateRecord
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let mtx = new Matrix4().makeRotationFromEuler(new Euler(model.rotate.x, model.rotate.y, model.rotate.z, "ZYX"))
|
|
|
|
let mtx = new Matrix4().makeRotationFromEuler(new Euler(model.rotate.x, model.rotate.y, model.rotate.z, "ZYX"))
|
|
|
|
.setPosition(model.position.x, model.position.y, model.position.z);
|
|
|
|
.setPosition(model.position.x, model.position.y, model.position.z);
|
|
|
@ -217,6 +225,23 @@ function ParseModel(model: KJL_ParamModel, roomName: string, gName: string, pare
|
|
|
|
}
|
|
|
|
}
|
|
|
|
br.GrooveCheckAll([]);
|
|
|
|
br.GrooveCheckAll([]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//设置排钻边
|
|
|
|
|
|
|
|
if (drillData?.drillSides.length > 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let curvesNum = br.ContourCurve.CurveCount;
|
|
|
|
|
|
|
|
let types = ["不排", ...userConfig.DrillConfigs.keys()];
|
|
|
|
|
|
|
|
let last = types[arrayLast(drillData.drillSides)];
|
|
|
|
|
|
|
|
let drills: string[] = Array(curvesNum);
|
|
|
|
|
|
|
|
for (let i = 0; i < curvesNum; i++)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (i < drillData.drillSides.length)
|
|
|
|
|
|
|
|
drills[i] = types[drillData.drillSides[i]];
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
drills[i] = last;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
br.BoardProcessOption.highDrill = drills;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let n = new Vector3().setFromMatrixColumn(mtx, 2).toArray();
|
|
|
|
let n = new Vector3().setFromMatrixColumn(mtx, 2).toArray();
|
|
|
|
for (let i = 0; i < n.length; i++)
|
|
|
|
for (let i = 0; i < n.length; i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -254,6 +279,10 @@ function ParseModel(model: KJL_ParamModel, roomName: string, gName: string, pare
|
|
|
|
else
|
|
|
|
else
|
|
|
|
br.BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Back;
|
|
|
|
br.BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Back;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//根据kjl数据设置大孔面
|
|
|
|
|
|
|
|
br.BoardProcessOption[EBoardKeyList.BigHole] = drillData?.bigHole === 0 ? FaceDirection.Front : FaceDirection.Back;
|
|
|
|
|
|
|
|
|
|
|
|
if (model.textureAngle === 0)
|
|
|
|
if (model.textureAngle === 0)
|
|
|
|
br.BoardProcessOption[EBoardKeyList.Lines] = LinesType.Reverse;
|
|
|
|
br.BoardProcessOption[EBoardKeyList.Lines] = LinesType.Reverse;
|
|
|
|
else
|
|
|
|
else
|
|
|
@ -287,7 +316,8 @@ function ParseModel(model: KJL_ParamModel, roomName: string, gName: string, pare
|
|
|
|
for (let m of model.subModels)
|
|
|
|
for (let m of model.subModels)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let edgeBandings = ParseEdgeBanding(model.parameters) || ParseEdgeBanding(model.ignoreParameters) || ParseEdgeBanding(model.constParameters);
|
|
|
|
let edgeBandings = ParseEdgeBanding(model.parameters) || ParseEdgeBanding(model.ignoreParameters) || ParseEdgeBanding(model.constParameters);
|
|
|
|
let obj = ParseModel(m, roomName, gName, mtx, edgeBandings);
|
|
|
|
let drillData = ParseDrilling(model.parameters) || ParseDrilling(model.ignoreParameters) || ParseDrilling(model.constParameters);
|
|
|
|
|
|
|
|
let obj = ParseModel(m, roomName, gName, mtx, edgeBandings, drillData);
|
|
|
|
if (obj)
|
|
|
|
if (obj)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (obj instanceof Board)
|
|
|
|
if (obj instanceof Board)
|
|
|
@ -350,6 +380,40 @@ function ParseEdgeBanding(params: KJL_Parameter[]): number[] | undefined
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function ParseDrilling(params: KJL_Parameter[]): KJL_DrillData | undefined
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (!params) return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let data: KJL_DrillData = { bigHole: null, drillSides: [] };
|
|
|
|
|
|
|
|
//大孔面 0-正, 1-反
|
|
|
|
|
|
|
|
let sbIndex = params.findIndex(p => p.name === "SBFX");
|
|
|
|
|
|
|
|
if (sbIndex !== -1)
|
|
|
|
|
|
|
|
data.bigHole = parseFloat(params[sbIndex].value);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//排钻边 0-不排, 1...n-排n型
|
|
|
|
|
|
|
|
let ecIndex = params.findIndex(p => p.name === "EC");//EC: 全边统一配置
|
|
|
|
|
|
|
|
if (ecIndex !== -1)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
data.drillSides = [parseFloat(params[ecIndex].value)];
|
|
|
|
|
|
|
|
return data;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let index = params.findIndex(p => p.name === "EC1");//ECx: 按边分别配置
|
|
|
|
|
|
|
|
if (index !== -1)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
for (let i = index; i < params.length; i++)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let p = params[i];
|
|
|
|
|
|
|
|
if (!p.name.startsWith("EC"))
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
let num = safeEval(p.name.slice(2));
|
|
|
|
|
|
|
|
if (!isNaN(num))
|
|
|
|
|
|
|
|
data.drillSides[num - 1] = (parseFloat(p.value));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return data;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 分析Path的外轮廓和内网洞
|
|
|
|
* 分析Path的外轮廓和内网洞
|
|
|
|
* @param path
|
|
|
|
* @param path
|
|
|
|