!2010 优化:移除夹层空间拾取对空间分析无帮助的单板

pull/1997/MERGE
ChenX 2 years ago
parent c2e74c5bf2
commit 90553f959c

@ -33,19 +33,6 @@ import { Entity } from './Entity';
import { ExtrudeContourCurve, ExtrudeSolid } from './Extrude';
import { Polyline } from './Polyline';
//转换板件类型成为空间类型. 0x 1y 2z
export function ConverBoardTypeToSpaceType(type: BoardType): number
{
switch (type)
{
case BoardType.Layer:
return 2;
case BoardType.Vertical:
return 0;
case BoardType.Behind:
return 1;
}
}
//排钻配置名是合法的
function IsValidDriName(name: string): boolean

@ -1,11 +1,23 @@
import { Ray, Vector3 } from "three";
import { arrayLast } from "../../Common/ArrayExt";
import { ConverBoardTypeToSpaceType } from "../../DatabaseServices/Entity/Board";
import { arrayLast, arrayRemoveIf } from "../../Common/ArrayExt";
import { PromptDistendResult, PromptStatus } from "../../Editor/PromptResult";
import { BoardType } from "../../UI/Store/BoardInterface";
import { Box3Ext, SplitType } from "../Box";
import { ISpaceParse } from "./ISpaceParse";
const BoardType2SplitType = [2, 0, 1];
const SplitType2BoardType = [1, 2, 0];
//转换板件类型成为空间类型. 0x 1y 2z
function ConverBoardTypeToSplitType(type: BoardType): SplitType
{
return BoardType2SplitType[type];
}
function ConverSplitType2BoardType(type: SplitType): BoardType
{
return SplitType2BoardType[type];
}
/**
*
*/
@ -25,7 +37,7 @@ export class ClampSpaceParse extends ISpaceParse
let spliteBoxs = new Map<SplitType, Box3Ext>();
for (let [boardType, boards] of this.BoardMap)
{
let splitType: SplitType = ConverBoardTypeToSpaceType(boardType);
let splitType: SplitType = ConverBoardTypeToSplitType(boardType);
let boardBoxCol = this.ParseBoardBox(boards, splitType);
//#IWFYY
@ -104,7 +116,7 @@ export class ClampSpaceParse extends ISpaceParse
return;
}
let splitType: SplitType = ConverBoardTypeToSpaceType(type);
let splitType: SplitType = ConverBoardTypeToSplitType(type);
let p1 = box.min.clone().setComponent(splitType, box.min.getComponent(splitType) - dist);
let p2 = box.max.clone().setComponent(splitType, box.min.getComponent(splitType));
@ -114,7 +126,7 @@ export class ClampSpaceParse extends ISpaceParse
let boxs = [new Box3Ext().setFromPoints([p1, p2]), new Box3Ext().setFromPoints([p3, p4])];
this.SpaceBox = await this.WrapSelectBox(boxs, ConverBoardTypeToSpaceType(br.BoardType));
this.SpaceBox = await this.WrapSelectBox(boxs, splitType);
if (this.SpaceBox)
this.ParseOK = true;
@ -170,6 +182,14 @@ export class ClampSpaceParse extends ISpaceParse
for (let [splitType, spBox] of spliteBoxes)
{
let remBoxs: Box3Ext[] = orgBox.substract(spBox, splitType);
if (remBoxs[0] === orgBox)//如果切割失败,证明这个板没办法影响空间分析,所以移除它.
{
let brs = new Set(this.BoardMap.get(ConverSplitType2BoardType(splitType)));
arrayRemoveIf(this.Boards, br => brs.has(br));
continue;
}
if (remBoxs.length === 0)
return undefined;
else if (remBoxs.length === 1)

Loading…
Cancel
Save