|
|
|
@ -11,6 +11,8 @@ import { Box3Ext } from "../Geometry/Box";
|
|
|
|
|
import { ColorMaterial } from "./ColorPalette";
|
|
|
|
|
import { TemplateWineRackRecord } from "../DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord";
|
|
|
|
|
import { TemplateLatticeRecord } from "../DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord";
|
|
|
|
|
import { Board } from "../DatabaseServices/Entity/Board";
|
|
|
|
|
import { HardwareCompositeEntity } from "../DatabaseServices/Hardware/HardwareCompositeEntity";
|
|
|
|
|
|
|
|
|
|
export type Solid3D = ExtrudeSolid | SweepSolid | ExtrudeHole;
|
|
|
|
|
|
|
|
|
@ -18,8 +20,25 @@ export class CheckInterfereTool
|
|
|
|
|
{
|
|
|
|
|
entitySet: Set<Solid3D> = new Set();
|
|
|
|
|
objMap: Map<Mesh, [Solid3D, Solid3D]> = new Map();
|
|
|
|
|
Check(ens: Solid3D[])
|
|
|
|
|
GetEntitys(selectEnts: (HardwareCompositeEntity | ExtrudeSolid | SweepSolid)[])
|
|
|
|
|
{
|
|
|
|
|
let ens: Solid3D[] = [];
|
|
|
|
|
for (let en of selectEnts)
|
|
|
|
|
{
|
|
|
|
|
if (en instanceof HardwareCompositeEntity)
|
|
|
|
|
{
|
|
|
|
|
let es = en.GetAllEntity(false, e => e instanceof ExtrudeHole || e instanceof ExtrudeSolid || e instanceof SweepSolid) as Solid3D[];
|
|
|
|
|
es.forEach(e => e.TempData = { Id: en.Id });
|
|
|
|
|
ens.push(...es);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
ens.push(en);
|
|
|
|
|
}
|
|
|
|
|
return ens;
|
|
|
|
|
}
|
|
|
|
|
Check(selectEnts: (HardwareCompositeEntity | ExtrudeSolid | SweepSolid)[])
|
|
|
|
|
{
|
|
|
|
|
let ens = this.GetEntitys(selectEnts);
|
|
|
|
|
let entitySet = this.entitySet;
|
|
|
|
|
let objMap = this.objMap;
|
|
|
|
|
entitySet.clear();
|
|
|
|
@ -43,6 +62,23 @@ export class CheckInterfereTool
|
|
|
|
|
for (let j = i + 1; j < ens.length; j++)
|
|
|
|
|
{
|
|
|
|
|
let e2 = ens[j];
|
|
|
|
|
|
|
|
|
|
if (e2.TempData && e2.TempData.Id === e1.TempData?.Id) continue;
|
|
|
|
|
|
|
|
|
|
if (e1 instanceof Board)
|
|
|
|
|
{
|
|
|
|
|
let id = e2.Id ?? e2.TempData.Id;
|
|
|
|
|
if (e1.RelevanceMeats.includes(id) || e1.RelevanceKnifs.includes(id) || e1.RelativeHardware.includes(id)) continue;
|
|
|
|
|
}
|
|
|
|
|
if (!e1.Id && e1.TempData?.Id)
|
|
|
|
|
{
|
|
|
|
|
let orgEn = e1.TempData.Id.Object;
|
|
|
|
|
if (orgEn instanceof HardwareCompositeEntity)
|
|
|
|
|
{
|
|
|
|
|
if (orgEn.RelevanceBoards.includes(e2.Id)) continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (e2.Template && (e2.Template.Object instanceof TemplateWineRackRecord || e2.Template.Object instanceof TemplateLatticeRecord))
|
|
|
|
|
continue;
|
|
|
|
|
if (!obb1.intersectsOBB(e2.OBB))
|
|
|
|
@ -148,6 +184,8 @@ export class CheckInterfereTool
|
|
|
|
|
{
|
|
|
|
|
if (en instanceof ExtrudeSolid)
|
|
|
|
|
{
|
|
|
|
|
if (!en.Id)
|
|
|
|
|
en.CheckContourCurve();
|
|
|
|
|
return en.CSG;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|