!3023 优化:排钻智能偏移的通孔偏移距离

pull/3029/head
林三 1 month ago committed by ChenX
parent bf51ef69c3
commit 88d059d70f

@ -970,6 +970,7 @@ export class DrawDrillingTool extends Singleton
const intersectBox = new Box3(new Vector3(0, 0, -dirllHeight), new Vector3(this.m_Face.Length, locaBoard.Thickness, intBoard.Thickness));
//localDrills放置的位置加入不可释放区间
//容差为预埋件的半径 + 2
if (this._AutoDeviation)
{
for (let drillent of refDrillList)
@ -977,9 +978,9 @@ export class DrawDrillingTool extends Singleton
for (let dirll of drillent)
{
let box = (dirll.Object as Entity).GetBoundingBoxInMtx(this.m_Face.OCSInv);
if (box.intersectsBox(intersectBox))
if (box.intersect(intersectBox).isSolid())
{
let posSegment1D = [box.min.x - MinDrillDist, box.max.x + MinDrillDist] as Segment1d;
let posSegment1D = [box.min.x + this.m_Option.ymjRad - 2, box.max.x + this.m_Option.ymjRad + 2] as Segment1d;
this.m_Face.FixedInterval.push(posSegment1D);
//计算剩余可放置位置
this.m_Face.Segment1D = Segment1dSubtraction2(this.m_Face.Segment1D, [posSegment1D]);
@ -1000,7 +1001,8 @@ export class DrawDrillingTool extends Singleton
refDrillList.push(...v.filter(ds => ds.length > 0 && ds[0].Object && !ds[0].IsErase));
}
//intDrills放置的位置加入不可释放区间 这边偷懒直接分析refDrillList
//intDrills放置的位置加入不可释放区间
//容差未连接杆的半径或偏心轮的半径最大值 + 2
if (this._AutoDeviation)
{
for (let drillent of refDrillList)
@ -1008,9 +1010,9 @@ export class DrawDrillingTool extends Singleton
for (let dirll of drillent)
{
let box = (dirll.Object as Entity).GetBoundingBoxInMtx(this.m_Face.OCSInv);
if (box.intersectsBox(intersectBox))
if (box.intersect(intersectBox).isSolid())
{
let posSegment1D = [box.min.x - MinDrillDist, box.max.x + MinDrillDist] as Segment1d;
let posSegment1D = [box.min.x - MinDrillDist - 2, box.max.x + MinDrillDist + 2] as Segment1d;
this.m_Face.FixedInterval.push(posSegment1D);
//计算剩余可放置位置
this.m_Face.Segment1D = Segment1dSubtraction2(this.m_Face.Segment1D, [posSegment1D]);
@ -1800,6 +1802,10 @@ export class DrawDrillingTool extends Singleton
offsetDist = index === 0 ? 32 : -32;
}
//释放自身区间
let selfSegment1d: Segment1d = [posX - minDrillSegment, posX + minDrillSegment];
this.m_Face.Segment1D = OperInterval(this.m_Face.Segment1D, [selfSegment1d], this.m_Face.FixedInterval);
let oldSegment1D: Segment1d[] = [];
for (let [start, end] of this.m_Face.Segment1D)
oldSegment1D.push([start, end]);

Loading…
Cancel
Save