|
|
@ -10,9 +10,9 @@ import { HardwareCompositeEntity } from "../DatabaseServices/Hardware/HardwareCo
|
|
|
|
import { ObjectId } from "../DatabaseServices/ObjectId";
|
|
|
|
import { ObjectId } from "../DatabaseServices/ObjectId";
|
|
|
|
import { TemplateLatticeRecord } from "../DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord";
|
|
|
|
import { TemplateLatticeRecord } from "../DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord";
|
|
|
|
import { TemplateWineRackRecord } from "../DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord";
|
|
|
|
import { TemplateWineRackRecord } from "../DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord";
|
|
|
|
import { Box3Ext } from "../Geometry/Box";
|
|
|
|
import { equaln, equalv3 } from "../Geometry/GeUtils";
|
|
|
|
import { equalv3 } from "../Geometry/GeUtils";
|
|
|
|
|
|
|
|
import { OBB } from "../Geometry/OBB/obb";
|
|
|
|
import { OBB } from "../Geometry/OBB/obb";
|
|
|
|
|
|
|
|
import { PlaneExt } from "../Geometry/Plane";
|
|
|
|
import { ColorMaterial } from "./ColorPalette";
|
|
|
|
import { ColorMaterial } from "./ColorPalette";
|
|
|
|
import { Log } from "./Log";
|
|
|
|
import { Log } from "./Log";
|
|
|
|
import { Sleep } from "./Sleep";
|
|
|
|
import { Sleep } from "./Sleep";
|
|
|
@ -54,8 +54,7 @@ export class CheckInterfereTool
|
|
|
|
for (let i = 0; i < ens.length; i++)
|
|
|
|
for (let i = 0; i < ens.length; i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let e1 = ens[i];
|
|
|
|
let e1 = ens[i];
|
|
|
|
if (e1.Template && (e1.Template.Object instanceof TemplateWineRackRecord || e1.Template.Object instanceof TemplateLatticeRecord))
|
|
|
|
let IsSkipEntity = e1.Template && (e1.Template.Object instanceof TemplateWineRackRecord || e1.Template.Object instanceof TemplateLatticeRecord);
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (i % 50 === 0)
|
|
|
|
if (i % 50 === 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -101,7 +100,7 @@ export class CheckInterfereTool
|
|
|
|
if (RelevanceBoards && RelevanceBoards.has(e2.Id))
|
|
|
|
if (RelevanceBoards && RelevanceBoards.has(e2.Id))
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
|
|
if (e2.Template && (e2.Template.Object instanceof TemplateWineRackRecord || e2.Template.Object instanceof TemplateLatticeRecord))
|
|
|
|
if (IsSkipEntity && e2.Template && (e2.Template.Object instanceof TemplateWineRackRecord || e2.Template.Object instanceof TemplateLatticeRecord))
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
|
|
if (!box1.intersectsBox(this.GetBox(e2)))
|
|
|
|
if (!box1.intersectsBox(this.GetBox(e2)))
|
|
|
@ -177,14 +176,27 @@ export class CheckInterfereTool
|
|
|
|
}
|
|
|
|
}
|
|
|
|
let hasSolid = false;
|
|
|
|
let hasSolid = false;
|
|
|
|
let count = 0;
|
|
|
|
let count = 0;
|
|
|
|
|
|
|
|
let plane = new PlaneExt();
|
|
|
|
for (let [k, pts] of ptsMap)
|
|
|
|
for (let [k, pts] of ptsMap)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let box = new Box3Ext().setFromPoints(pts);
|
|
|
|
let nor = new Vector3().fromArray(k.split(",").map(s => parseFloat(s)));
|
|
|
|
if (box.isSolid(1e-3))
|
|
|
|
plane.setFromNormalAndCoplanarPoint(nor, pts[0]);
|
|
|
|
|
|
|
|
//超过3点不在一个面上,一般可以围城实体
|
|
|
|
|
|
|
|
let outCount = 0;
|
|
|
|
|
|
|
|
for (let p of pts)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
count++;
|
|
|
|
let dist = plane.distanceToPoint(p);
|
|
|
|
hasSolid = true;
|
|
|
|
if (!equaln(dist, 0, 1e-3))
|
|
|
|
ptsMap.delete(k);
|
|
|
|
{
|
|
|
|
|
|
|
|
outCount++;
|
|
|
|
|
|
|
|
if (outCount >= 3)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
count++;
|
|
|
|
|
|
|
|
hasSolid = true;
|
|
|
|
|
|
|
|
ptsMap.delete(k);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (hasSolid)
|
|
|
|
if (hasSolid)
|
|
|
|