!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 { ModalPosition } from '../UI/Components/Modal/ModalInterface';
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; }, {}>{
private removeFuncs: Function[] = []; //移除注入
private Close()
@ -73,11 +80,10 @@ export class Command_ExportData implements Command
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;
let ents = ssRes.SelectSet.SelectEntityList;
let d = Entitys2Data(ents);
let dstr = JSON.stringify(d);
if (await app.WebSocket.Connect())
{
@ -108,6 +114,10 @@ export function Entitys2Data(ents: Entity[])
d.Entitys.push(ConverSweep2Data(e));
else if (e instanceof Region)
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
continue;
arrayLast(d.Entitys).Visible = e.Visible;
@ -158,6 +168,7 @@ function ConvertBoard2Data(br: ExtrudeSolid): Object
ed.Type = "Board";
ed.CabinetName = br.BoardProcessOption.cabinetName;
ed.RoomName = br.BoardProcessOption.roomName;
ed.CabinetName = ed.RoomName;
ed.UVType = br.BoardProcessOption.lines;
ed.MaterialId = br.Material?.Index || 0;
}
@ -174,6 +185,10 @@ function ConverSweep2Data(e: SweepSolid)
ed.OCS = e.OCS.toArray();
ed.Contour = Curve2Data(e.Contour);
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;
}
@ -219,3 +234,34 @@ function ConverMaterial(material: PhysicalMaterialRecord)
d.useRoughnessMap = material.useRoughnessMap;
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()
{
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()
{
@ -54,13 +59,27 @@ export class CompositeEntity extends Entity
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)
{
for (let e of this.Entitys)
e.UpdateRenderType(renderType);
this.DrawObject.updateMatrixWorld(true);
}
UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)
{
for (let e of this.Entitys)
e.UpdateDrawObjectMaterial(renderType, obj);
}
//#endregion

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

@ -66,10 +66,11 @@ export class MaterialExplorer extends React.Component<{ materialTable: MaterialT
if (en instanceof Board)
{
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();
for (let e of ents)
{
ent.Entitys.push(e.Clone());
let cloneE = e.Clone();
cloneE.Material = e.Material;
ent.Entitys.push(cloneE);
e.Erase();
}
ent.HardwareOption = toJS(option);

Loading…
Cancel
Save