!627 酷家乐排钻解析

pull/627/MERGE
肖诗雅 5 years ago committed by ChenX
parent 9595881d9b
commit deb3a8132d

@ -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

Loading…
Cancel
Save