|
|
|
@ -16,8 +16,6 @@ export class CheckHoles implements Command
|
|
|
|
|
{
|
|
|
|
|
async exec()
|
|
|
|
|
{
|
|
|
|
|
const drillTool = DrawDrillingTool.GetInstance();
|
|
|
|
|
|
|
|
|
|
let brRes = await app.Editor.GetSelection({
|
|
|
|
|
Msg: "选择要检查排钻碰撞的板件",
|
|
|
|
|
Filter: { filterTypes: [Board] }
|
|
|
|
@ -26,7 +24,24 @@ export class CheckHoles implements Command
|
|
|
|
|
if (brRes.Status === PromptStatus.OK)
|
|
|
|
|
{
|
|
|
|
|
let brs = brRes.SelectSet.SelectEntityList as Board[];
|
|
|
|
|
let res = InterferenceCheck(brs);
|
|
|
|
|
|
|
|
|
|
if (res.length)
|
|
|
|
|
app.Editor.ModalManage.RenderModeless(CollsionModal, { faces: res }, { position: ModalPosition.Right, canMinimize: false });
|
|
|
|
|
else
|
|
|
|
|
AppToaster.show({
|
|
|
|
|
message: "排钻没有干涉!",
|
|
|
|
|
timeout: 5000,
|
|
|
|
|
intent: Intent.SUCCESS,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//干涉检查
|
|
|
|
|
export function InterferenceCheck(brs: Board[])
|
|
|
|
|
{
|
|
|
|
|
const drillTool = DrawDrillingTool.GetInstance();
|
|
|
|
|
let b2boxMap = new Map<Board, ObjectId[][]>();
|
|
|
|
|
|
|
|
|
|
for (let b of brs)
|
|
|
|
@ -74,12 +89,12 @@ export class CheckHoles implements Command
|
|
|
|
|
{
|
|
|
|
|
let ds2 = dss[j];
|
|
|
|
|
if ((ds1[0].Object as Hole).MId.Object !== (ds2[0].Object as Hole).MId.Object //如果是同一个板上的排钻(就不可能是通孔了)
|
|
|
|
|
&& this.IsThough(ds1)
|
|
|
|
|
&& this.IsThough(ds2))
|
|
|
|
|
&& IsThough(ds1)
|
|
|
|
|
&& IsThough(ds2))
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
let boxes2 = drillTool.GetDrillsBox(ds2, ocsInv);
|
|
|
|
|
if (this.IsCollsion([boxes1], [boxes2]))
|
|
|
|
|
if (IsCollsion([boxes1], [boxes2]))
|
|
|
|
|
{
|
|
|
|
|
let h = ds1[0].Object as Hole;
|
|
|
|
|
if (h.FId.Object && h.MId.Object)
|
|
|
|
@ -109,7 +124,7 @@ export class CheckHoles implements Command
|
|
|
|
|
for (let ds of drills)
|
|
|
|
|
{
|
|
|
|
|
boxlist.push(drillTool.GetDrillsBox(ds, ocsInv));
|
|
|
|
|
if (this.IsThough(ds))
|
|
|
|
|
if (IsThough(ds))
|
|
|
|
|
tkHoleFidSet.add((ds[0].Object as CylinderHole).FId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -125,12 +140,12 @@ export class CheckHoles implements Command
|
|
|
|
|
{
|
|
|
|
|
let h1 = ds[0].Object as CylinderHole;
|
|
|
|
|
//同一穿孔板件的通孔不参与碰撞计算
|
|
|
|
|
if (this.IsThough(ds) && tkHoleFidSet.has(h1.FId))
|
|
|
|
|
if (IsThough(ds) && tkHoleFidSet.has(h1.FId))
|
|
|
|
|
continue;
|
|
|
|
|
boxlist2.push(drillTool.GetDrillsBox(ds, ocsInv));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (this.IsCollsion(boxlist, boxlist2))
|
|
|
|
|
if (IsCollsion(boxlist, boxlist2))
|
|
|
|
|
{
|
|
|
|
|
res.push({
|
|
|
|
|
InterBoard: b1,
|
|
|
|
@ -139,27 +154,18 @@ export class CheckHoles implements Command
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (res.length)
|
|
|
|
|
app.Editor.ModalManage.RenderModeless(CollsionModal, { faces: res }, { position: ModalPosition.Right, canMinimize: false });
|
|
|
|
|
else
|
|
|
|
|
AppToaster.show({
|
|
|
|
|
message: "排钻没有干涉!",
|
|
|
|
|
timeout: 5000,
|
|
|
|
|
intent: Intent.SUCCESS,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
/**
|
|
|
|
|
* 存在通孔
|
|
|
|
|
*/
|
|
|
|
|
private IsThough(ds: ObjectId[]): boolean
|
|
|
|
|
{
|
|
|
|
|
function IsThough(ds: ObjectId[]): boolean
|
|
|
|
|
{
|
|
|
|
|
return ds.some(d => (d.Object as CylinderHole).Type === GangDrillType.TK);
|
|
|
|
|
}
|
|
|
|
|
private IsCollsion(boxlist: Box3Ext[][], boxlist2: Box3Ext[][])
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
function IsCollsion(boxlist: Box3Ext[][], boxlist2: Box3Ext[][])
|
|
|
|
|
{
|
|
|
|
|
const drillTool = DrawDrillingTool.GetInstance();
|
|
|
|
|
|
|
|
|
|
for (let boxs of boxlist)
|
|
|
|
@ -173,5 +179,4 @@ export class CheckHoles implements Command
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|