From f86c9a4d0ceb49a0c4b7b8f9de214408382c4436 Mon Sep 17 00:00:00 2001 From: ChenX Date: Fri, 20 Dec 2019 10:37:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E4=BD=93=E5=AF=BC=E5=87=BA=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=B8=80=E4=BA=9B=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Add-on/Export2View.ts | 2 ++ src/Add-on/ExportData.ts | 44 +++++++++++++++++++++++++-- src/DatabaseServices/Entity/Entity.ts | 5 +++ 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/src/Add-on/Export2View.ts b/src/Add-on/Export2View.ts index 2edd5a1b9..425b6ebd9 100644 --- a/src/Add-on/Export2View.ts +++ b/src/Add-on/Export2View.ts @@ -5,6 +5,7 @@ import { PromptStatus } from "../Editor/PromptResult"; import { Entitys2Data } from "./ExportData"; import pako from "pako"; import { HotCMD } from "../Hot/HotCommand"; +import { CURRENT_HOST } from "../Common/HostUrl"; @HotCMD export class Command_ExportView implements Command @@ -16,6 +17,7 @@ export class Command_ExportView implements Command let ents = ssRes.SelectSet.SelectEntityList; let d = Entitys2Data(ents); + d.Url = CURRENT_HOST; let bd = pako.deflate(JSON.stringify(d)); const formData = new FormData(); diff --git a/src/Add-on/ExportData.ts b/src/Add-on/ExportData.ts index e8e64697b..2901b7b2a 100644 --- a/src/Add-on/ExportData.ts +++ b/src/Add-on/ExportData.ts @@ -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 = 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; +} diff --git a/src/DatabaseServices/Entity/Entity.ts b/src/DatabaseServices/Entity/Entity.ts index d59679108..1a51c5c43 100644 --- a/src/DatabaseServices/Entity/Entity.ts +++ b/src/DatabaseServices/Entity/Entity.ts @@ -53,6 +53,11 @@ export class Entity extends CADObject this.Update(); } + get Material() + { + return this.materialId; + } + set ColorIndex(color: number) { if (color !== this._Color)