!797 优化:导出复合实体

pull/797/MERGE
ZoeLeeFZ 5 years ago committed by ChenX
parent e66b6d1c14
commit 207a9767a5

@ -25,6 +25,13 @@ import { PromptStatus } from "../Editor/PromptResult";
import { ModalFooter, ModalHeader } from '../UI/Components/Modal/ModalContainer'; import { ModalFooter, ModalHeader } from '../UI/Components/Modal/ModalContainer';
import { ModalPosition } from '../UI/Components/Modal/ModalInterface'; import { ModalPosition } from '../UI/Components/Modal/ModalInterface';
import { TopPanelStore } from '../UI/Store/TopPanelStore'; import { TopPanelStore } from '../UI/Store/TopPanelStore';
import { CompositeEntity } from './../DatabaseServices/Entity/CompositeEntity';
import { Hole } from './../DatabaseServices/3DSolid/Hole';
import { Vector3 } from 'three';
import { ExtrudeHole } from '../DatabaseServices/3DSolid/ExtrudeHole';
import { CylinderHole } from '../DatabaseServices/3DSolid/CylinderHole';
import { HardwareTopline } from '../DatabaseServices/Hardware/HardwareTopline';
import { HardwareCompositeEntity } from '../DatabaseServices/Hardware/HardwareCompositeEntity';
export class ExportDataModal extends React.Component<{ msg: string; }, {}>{ export class ExportDataModal extends React.Component<{ msg: string; }, {}>{
private removeFuncs: Function[] = []; //移除注入 private removeFuncs: Function[] = []; //移除注入
private Close() private Close()
@ -73,11 +80,10 @@ export class Command_ExportData implements Command
return; return;
} }
let ssRes = await app.Editor.GetSelection({ Filter: { filterTypes: [Board, SweepSolid] } }); let ssRes = await app.Editor.GetSelection({ Filter: { filterTypes: [Board, SweepSolid, CompositeEntity] } });
if (ssRes.Status !== PromptStatus.OK) return; if (ssRes.Status !== PromptStatus.OK) return;
let ents = ssRes.SelectSet.SelectEntityList; let ents = ssRes.SelectSet.SelectEntityList;
let d = Entitys2Data(ents); let d = Entitys2Data(ents);
let dstr = JSON.stringify(d); let dstr = JSON.stringify(d);
if (await app.WebSocket.Connect()) if (await app.WebSocket.Connect())
{ {
@ -108,6 +114,10 @@ export function Entitys2Data(ents: Entity[])
d.Entitys.push(ConverSweep2Data(e)); d.Entitys.push(ConverSweep2Data(e));
else if (e instanceof Region) else if (e instanceof Region)
d.Entitys.push(ConveRegion2Data(e)); d.Entitys.push(ConveRegion2Data(e));
else if (e instanceof Hole)
d.Entitys.push(ConvertHole2Data(e));
else if (e instanceof CompositeEntity)
d.Entitys.push(...CompositeEntity2Data(e));
else else
continue; continue;
arrayLast(d.Entitys).Visible = e.Visible; arrayLast(d.Entitys).Visible = e.Visible;
@ -158,6 +168,7 @@ function ConvertBoard2Data(br: ExtrudeSolid): Object
ed.Type = "Board"; ed.Type = "Board";
ed.CabinetName = br.BoardProcessOption.cabinetName; ed.CabinetName = br.BoardProcessOption.cabinetName;
ed.RoomName = br.BoardProcessOption.roomName; ed.RoomName = br.BoardProcessOption.roomName;
ed.CabinetName = ed.RoomName;
ed.UVType = br.BoardProcessOption.lines; ed.UVType = br.BoardProcessOption.lines;
ed.MaterialId = br.Material?.Index || 0; ed.MaterialId = br.Material?.Index || 0;
} }
@ -174,6 +185,10 @@ function ConverSweep2Data(e: SweepSolid)
ed.OCS = e.OCS.toArray(); ed.OCS = e.OCS.toArray();
ed.Contour = Curve2Data(e.Contour); ed.Contour = Curve2Data(e.Contour);
ed.Path = Curve2Data(e.Path); ed.Path = Curve2Data(e.Path);
ed.MaterialId = e.Material?.Index || 0;
let roomName = e instanceof HardwareTopline ? e.HardwareOption.roomName : "未命名";
ed.RoomName = roomName;
ed.CabinetName = ed.RoomName;
return ed; return ed;
} }
@ -219,3 +234,34 @@ function ConverMaterial(material: PhysicalMaterialRecord)
d.useRoughnessMap = material.useRoughnessMap; d.useRoughnessMap = material.useRoughnessMap;
return d; return d;
} }
function ConvertHole2Data(h: Hole)
{
let ed: any = {};
ed.Id = h.Id?.Index ?? 0;
ed.OCS = h.OCS.toArray();
ed.Thickness = h.Height;
if (h instanceof ExtrudeHole)
ed.Contour = Curve2Data(h.ContourCurve);
else
{
let rad = (h as CylinderHole).Radius;
ed.Contour = Curve2Data(new Circle(new Vector3(rad, rad), rad));
}
ed.Type = "Extrude";
ed.MaterialId = h.Material?.Index || 0;
return ed;
}
function CompositeEntity2Data(comp: CompositeEntity)
{
let data = Entitys2Data(comp.Explode()).Entitys;
let roomName = comp instanceof HardwareCompositeEntity ? comp.HardwareOption.roomName : "未命名";
if (comp.Id)
for (let i = 0; i < data.length; i++)
{
data[i].Id = comp.Id.Index * -100 - i;
data[i].RoomName = roomName;
data[i].CabinetName = data[i].RoomName;
}
return data;
}

@ -30,7 +30,12 @@ export class CompositeEntity extends Entity
*/ */
Explode() Explode()
{ {
return this.Entitys.map(e => e.Clone().ApplyMatrix(this.OCS)); return this.Entitys.map(e =>
{
let cloneE = e.Clone();
cloneE.Material = e.Material;
return cloneE.ApplyMatrix(this.OCS);
});
} }
get BoundingBox() get BoundingBox()
{ {
@ -54,13 +59,27 @@ export class CompositeEntity extends Entity
obj.add(e.DrawObject); obj.add(e.DrawObject);
} }
} }
get Material()
{
return super.Material;
}
set Material(id)
{
super.Material = id;
for (let e of this.Entitys)
e.Material = id;
}
UpdateRenderType(renderType: RenderType) UpdateRenderType(renderType: RenderType)
{ {
for (let e of this.Entitys) for (let e of this.Entitys)
e.UpdateRenderType(renderType); e.UpdateRenderType(renderType);
this.DrawObject.updateMatrixWorld(true); this.DrawObject.updateMatrixWorld(true);
} }
UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)
{
for (let e of this.Entitys)
e.UpdateDrawObjectMaterial(renderType, obj);
}
//#endregion //#endregion

@ -115,15 +115,11 @@ export class Asset extends React.Component<{ material: PhysicalMaterialRecord; }
let material = this.props.material as PhysicalMaterialRecord; let material = this.props.material as PhysicalMaterialRecord;
for (let en of app.Editor.SelectCtrl.SelectSet.SelectEntityList) for (let en of app.Editor.SelectCtrl.SelectSet.SelectEntityList)
{ {
en.Material = material.Id;
if (en instanceof Board) if (en instanceof Board)
{ {
en.Material = material.Id;
ApplyGoodInfo(en, material); ApplyGoodInfo(en, material);
} }
else if (en instanceof Region)
{
en.Material = material.Id;
}
} }
app.Viewer.UpdateRender(); app.Viewer.UpdateRender();

@ -66,10 +66,11 @@ export class MaterialExplorer extends React.Component<{ materialTable: MaterialT
if (en instanceof Board) if (en instanceof Board)
{ {
en.Material = material.Id; en.Material = material.Id;
ApplyGoodInfo(en, material); if (en instanceof Board)
{
ApplyGoodInfo(en, material);
}
} }
else if (en instanceof Region)
en.Material = material.Id;
} }
}, "拽拖材质应用"); }, "拽拖材质应用");
} }

@ -86,7 +86,9 @@ export class CompositeMatalPanel extends React.Component<ICompositeMatalPanelPan
let ent = new HardwareCompositeEntity(); let ent = new HardwareCompositeEntity();
for (let e of ents) for (let e of ents)
{ {
ent.Entitys.push(e.Clone()); let cloneE = e.Clone();
cloneE.Material = e.Material;
ent.Entitys.push(cloneE);
e.Erase(); e.Erase();
} }
ent.HardwareOption = toJS(option); ent.HardwareOption = toJS(option);

Loading…
Cancel
Save