diff --git a/src/Add-on/KJL/Import/KJLImport.ts b/src/Add-on/KJL/Import/KJLImport.ts index 2bbfdeb25..2118fbe9b 100644 --- a/src/Add-on/KJL/Import/KJLImport.ts +++ b/src/Add-on/KJL/Import/KJLImport.ts @@ -32,7 +32,7 @@ import { CuttingBoardByBoard } from "../../BoardCutting/CuttingUtils2"; import { KJL_DrillData, KJL_JsonFile, KJL_ModelType, KJL_Parameter, KJL_ParamModel, KJL_ParamModel_Board, KJL_ParamModel_Hardware } from "./KJLInterface"; import { KJLMaterialLoader } from "./KJLMaterialLoader"; import { ParseBCBZ, ParseBT, ParseCabNameMap, ParseDrilling, ParseEdgeBanding, ParseEdges, ParseKMFX, ParsePathOutlineAndHole, ParseRoomNameMap, ParseTopline } from "./KJLParse"; -import { ApplyMaterial, CreateHardware } from "./KJLUtils"; +import { ApplyMaterial, CreateHardware, ParseHardwareParam } from "./KJLUtils"; export class Command_KJLImport implements Command @@ -199,7 +199,7 @@ async function ParseModel(model: KJL_ParamModel, if (model.profileSegments) { - let toplines = await ParseTopline(model, mtlLoader); + let toplines = await ParseTopline(model, mtlLoader, roomName, gName); if (toplines) { for (const topline of toplines) @@ -227,10 +227,12 @@ async function ParseModel(model: KJL_ParamModel, en.BoardProcessOption[EBoardKeyList.RoomName] = roomName; en.BoardProcessOption[EBoardKeyList.CabinetName] = gName; } - else if (en instanceof HardwareCompositeEntity || en instanceof HardwareTopline) + else if (en instanceof HardwareCompositeEntity) { en.HardwareOption[EBoardKeyList.RoomName] = roomName; en.HardwareOption[EBoardKeyList.CabinetName] = gName; + let hmodel = model as KJL_ParamModel_Hardware; + ParseHardwareParam(en, hmodel); } en.ApplyMatrix(new Matrix4().premultiply(mtx)); } @@ -262,6 +264,7 @@ async function ParseModel(model: KJL_ParamModel, en.HardwareOption[EBoardKeyList.RoomName] = roomName; en.HardwareOption[EBoardKeyList.CabinetName] = gName; en.HardwareOption.comments = hmodel.modelProductNumber ?? ""; + ParseHardwareParam(en, hmodel); } en.ApplyMatrix(new Matrix4().premultiply(mtx)); } diff --git a/src/Add-on/KJL/Import/KJLParse.ts b/src/Add-on/KJL/Import/KJLParse.ts index c5b763d95..6006e99ea 100644 --- a/src/Add-on/KJL/Import/KJLParse.ts +++ b/src/Add-on/KJL/Import/KJLParse.ts @@ -1,5 +1,6 @@ import { Vec2, Vector2 } from "three"; import { arrayLast, ArrayRemoveDupSavePre } from "../../../Common/ArrayExt"; +import { EBoardKeyList } from "../../../Common/BoardKeyList"; import { safeEval } from "../../../Common/eval"; import { FixIndex, ToFixed } from "../../../Common/Utils"; import { Polyline, PolylineProps } from "../../../DatabaseServices/Entity/Polyline"; @@ -83,7 +84,7 @@ export function ParseEdgeBanding(model: KJL_ParamModel): number[] | undefined return edgeBandings; } -export async function ParseTopline(model: KJL_ParamModel, mtlLoader: KJLMaterialLoader) +export async function ParseTopline(model: KJL_ParamModel, mtlLoader: KJLMaterialLoader, roomName: string, gName: string) { let profileSegments: KJL_Topline[] = model.profileSegments; let toplines: HardwareTopline[] = []; @@ -93,9 +94,10 @@ export async function ParseTopline(model: KJL_ParamModel, mtlLoader: KJLMaterial let path = new Polyline([{ pt: new Vector2(0, 0), bul: 0 }, { pt: new Vector2(0, p.lengthWithAllowance), bul: 0 }]); let topline = new HardwareTopline(shape, path); topline.HardwareOption.name = model.modelName ?? ""; - topline.HardwareOption.comments = - `左切类型:${p.startCornerCutTyp === 0 ? "平切" : p.startCornerCutTyp === 1 ? "阳角" : "阴角"}${p.startCornerCutDegree}°; - 右切类型:${p.endCornerCutType === 0 ? "平切" : p.endCornerCutType === 1 ? "阳角" : "阴角"}${p.endCornerCutDegree}°;`; + topline.HardwareOption[EBoardKeyList.RoomName] = roomName; + topline.HardwareOption[EBoardKeyList.CabinetName] = gName; + topline.HardwareOption.spec = + `左切类型:${p.startCornerCutTyp === 0 ? "平切" : p.startCornerCutTyp === 1 ? "阳角" : "阴角"}${p.startCornerCutDegree}°;右切类型:${p.endCornerCutType === 0 ? "平切" : p.endCornerCutType === 1 ? "阳角" : "阴角"}${p.endCornerCutDegree}°;`; let mtl = await mtlLoader.LoadMaterialFromName(model.textureName); if (mtl) ApplyMaterial(topline, mtl); toplines.push(topline); diff --git a/src/Add-on/KJL/Import/KJLUtils.ts b/src/Add-on/KJL/Import/KJLUtils.ts index acfbf5b21..ab15f6c40 100644 --- a/src/Add-on/KJL/Import/KJLUtils.ts +++ b/src/Add-on/KJL/Import/KJLUtils.ts @@ -23,6 +23,14 @@ export function CreateHardware(hmodel: KJL_ParamModel_Hardware, roomName: string hw.HardwareOption.comments = hmodel.modelProductNumber ?? ""; hw.HardwareOption.unit = "个"; + ParseHardwareParam(hw, hmodel); + + hw.DataList.push(["酷家乐", "虚拟五金"]); + return hw; +} + +export function ParseHardwareParam(hw: HardwareCompositeEntity, hmodel: KJL_ParamModel_Hardware) +{ let parsMap = new Map([["CFDW", "unit"], ["CFJG", "actualExpr"], ["CFXH", "model"], ["CFCJ", "factory"], ["CFPP", "brand"], ["CFGG", "spec"], ["count", "count"], ["CFCZ", "material"], ["CFYS", "color"]]); @@ -33,7 +41,9 @@ export function CreateHardware(hmodel: KJL_ParamModel_Hardware, roomName: string { if (parsMap.has(p.name)) { - hw.HardwareOption[parsMap.get(p.name)] = p.value; + let key = parsMap.get(p.name); + if (key) + hw.HardwareOption[key] = p.value; } } }; @@ -41,9 +51,6 @@ export function CreateHardware(hmodel: KJL_ParamModel_Hardware, roomName: string ParseParam(hmodel.constParameters); ParseParam(hmodel.ignoreParameters); ParseParam(hmodel.parameters); - - hw.DataList.push(["酷家乐", "虚拟五金"]); - return hw; } export function ApplyMaterial(ent: Entity, mtl: PhysicalMaterialRecord)