|
|
|
@ -8,6 +8,9 @@ import { Curve } from "../DatabaseServices/Entity/Curve";
|
|
|
|
|
import { Entity } from "../DatabaseServices/Entity/Entity";
|
|
|
|
|
import { ExtrudeSolid } from "../DatabaseServices/Entity/Extrude";
|
|
|
|
|
import { Polyline } from "../DatabaseServices/Entity/Polyline";
|
|
|
|
|
import { ObjectId } from "../DatabaseServices/ObjectId";
|
|
|
|
|
import { PhysicalMaterialRecord } from "../DatabaseServices/PhysicalMaterialRecord";
|
|
|
|
|
import { TextureTableRecord } from "../DatabaseServices/Texture";
|
|
|
|
|
import { Command } from "../Editor/CommandMachine";
|
|
|
|
|
import { PromptStatus } from "../Editor/PromptResult";
|
|
|
|
|
|
|
|
|
@ -26,15 +29,26 @@ export class Command_ExportData implements Command
|
|
|
|
|
|
|
|
|
|
export function Entitys2Data(ents: Entity[])
|
|
|
|
|
{
|
|
|
|
|
let d: { Entitys: Object[]; } = { Entitys: [] };
|
|
|
|
|
|
|
|
|
|
let d: { Entitys: Object[]; Materials: Object[]; Url?: string; } = { Entitys: [], Materials: [] };
|
|
|
|
|
let materials: Set<ObjectId> = new Set();
|
|
|
|
|
for (let e of ents)
|
|
|
|
|
{
|
|
|
|
|
if (e instanceof Board)
|
|
|
|
|
{
|
|
|
|
|
d.Entitys.push(ConvertBoard2Data(e));
|
|
|
|
|
if (e.Material?.Object)
|
|
|
|
|
materials.add(e.Material);
|
|
|
|
|
}
|
|
|
|
|
else if (e instanceof SweepSolid)
|
|
|
|
|
d.Entitys.push(ConverSweep2Data(e));
|
|
|
|
|
}
|
|
|
|
|
if (materials.size > 0)
|
|
|
|
|
{
|
|
|
|
|
for (let m of materials)
|
|
|
|
|
{
|
|
|
|
|
d.Materials.push(ConverMaterial(m.Object as PhysicalMaterialRecord));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return d;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -65,16 +79,20 @@ function ConvertBoard2Data(br: ExtrudeSolid): Object
|
|
|
|
|
{
|
|
|
|
|
let ed: any = {};
|
|
|
|
|
ed.Id = br.Id?.Index ?? 0;
|
|
|
|
|
ed.Type = "Extrude";
|
|
|
|
|
ed.OCS = br.OCS.toArray();
|
|
|
|
|
ed.Thickness = br.Thickness;
|
|
|
|
|
ed.Contour = Curve2Data(br.ContourCurve);
|
|
|
|
|
ed.Holes = br.Grooves.map(ConvertBoard2Data);
|
|
|
|
|
if (br instanceof Board)
|
|
|
|
|
{
|
|
|
|
|
ed.Type = "Board";
|
|
|
|
|
ed.CabinetName = br.BoardProcessOption.cabinetName;
|
|
|
|
|
ed.RoomName = br.BoardProcessOption.roomName;
|
|
|
|
|
ed.UVType = br.BoardProcessOption.lines;
|
|
|
|
|
ed.MaterialId = br.Material?.Index || 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
ed.Type = "Extrude";
|
|
|
|
|
return ed;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -88,3 +106,23 @@ function ConverSweep2Data(e: SweepSolid)
|
|
|
|
|
ed.Path = Curve2Data(e.Path);
|
|
|
|
|
return ed;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function ConverMaterial(material: PhysicalMaterialRecord)
|
|
|
|
|
{
|
|
|
|
|
let d: any = {};
|
|
|
|
|
d.Id = material.Id?.Index ?? 0;
|
|
|
|
|
d.color = material.color;
|
|
|
|
|
d.transparent = material.transparent;
|
|
|
|
|
d.matalness = material.matalness;
|
|
|
|
|
d.opacity = material.opacity;
|
|
|
|
|
d.depthTest = material.depthTest;
|
|
|
|
|
d.map = (material.map?.Object as TextureTableRecord)?.imageUrl;
|
|
|
|
|
d.bumpMap = (material.bumpMap?.Object as TextureTableRecord)?.imageUrl;
|
|
|
|
|
d.bumpScale = material.bumpScale;
|
|
|
|
|
d.roughnessMap = (material.roughnessMap?.Object as TextureTableRecord)?.imageUrl;
|
|
|
|
|
d.roughness = material.roughness;
|
|
|
|
|
d.useMap = material.useMap;
|
|
|
|
|
d.useBumpMap = material.useBumpMap;
|
|
|
|
|
d.useRoughnessMap = material.useRoughnessMap;
|
|
|
|
|
return d;
|
|
|
|
|
}
|
|
|
|
|