!1100 优化:自定义排钻干涉问题

pull/1100/MERGE
ZoeLeeFZ 4 years ago committed by ChenX
parent aa5ae62ab6
commit 3dd9d3aef7

File diff suppressed because one or more lines are too long

@ -238,7 +238,7 @@ export class DrawDrillingTool extends Singleton
}
else
{
console.error(key + "没缓存");
console.error(key + "没缓存,可能已经被删除");
return false;
}
if (!ens || ens.length === 0) return false;

@ -8,19 +8,18 @@ import { PromptStatus } from '../Editor/PromptResult';
import { userConfig } from '../Editor/UserConfig';
import { RenderType } from '../GraphicsSystem/RenderType';
import { InterfereModal } from '../UI/Components/Modal/InterfereModal';
import { ExtrudeHole } from './../DatabaseServices/3DSolid/ExtrudeHole';
import { SweepSolid } from './../DatabaseServices/3DSolid/SweepSolid';
import { Command } from './../Editor/CommandMachine';
import { AppToaster } from './../UI/Components/Toaster';
//| CylinderHole | ExtrudeHole
import { HardwareCompositeEntity } from '../DatabaseServices/Hardware/HardwareCompositeEntity';
import { ExtrudeHole } from '../DatabaseServices/3DSolid/ExtrudeHole';
export class Interfere implements Command
{
async exec()
{
const Filter = {
filterTypes: [ExtrudeHole, ExtrudeSolid, SweepSolid]
filterTypes: [HardwareCompositeEntity, ExtrudeSolid, SweepSolid]
};
let enRes = await app.Editor.GetSelection({
@ -30,8 +29,9 @@ export class Interfere implements Command
if (enRes.Status === PromptStatus.Cancel) return;
let ens = enRes.SelectSet.SelectEntityList as Solid3D[];
checkInterfereTool.Check(ens);
let selectEnts = enRes.SelectSet.SelectEntityList as (HardwareCompositeEntity | ExtrudeSolid | SweepSolid)[];
checkInterfereTool.Check(selectEnts);
let objMap = checkInterfereTool.objMap;
if (objMap.size === 0)

@ -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

@ -173,6 +173,7 @@ export class ExtrudeHole extends Hole
private GeneralMeshGeometry()
{
let extrudeSettings: ExtrudeGeometryOptions = {
curveSegments: 4, //保持和板件圆孔的段数一样
steps: 1,
bevelEnabled: false,
depth: this.Height,

Loading…
Cancel
Save