开发:重构代码保证api导出正确

pull/2662/MERGE
ChenX 6 months ago
parent c07318cec0
commit 3af6db9845

@ -9,11 +9,11 @@ import { Polyline } from "../../DatabaseServices/Entity/Polyline";
import { Command } from "../../Editor/CommandMachine"; import { Command } from "../../Editor/CommandMachine";
import { PromptStatus } from "../../Editor/PromptResult"; import { PromptStatus } from "../../Editor/PromptResult";
import { CreateContour2 } from "../../Geometry/CreateContour2"; import { CreateContour2 } from "../../Geometry/CreateContour2";
import { AsVector2, ComparePointFnGenerate, equaln, isParallelTo } from "../../Geometry/GeUtils"; import { AsVector2, equaln, isParallelTo } from "../../Geometry/GeUtils";
import { PlaneExt } from "../../Geometry/Plane"; import { PlaneExt } from "../../Geometry/Plane";
import { RegionParse } from "../../Geometry/RegionParse";
import { IntersectOption } from "../../GraphicsSystem/IntersectWith"; import { IntersectOption } from "../../GraphicsSystem/IntersectWith";
import { AppToaster } from "../../UI/Components/Toaster"; import { AppToaster } from "../../UI/Components/Toaster";
import { SplitPolyline } from "./SplitPolyline";
export class LinearCutting implements Command export class LinearCutting implements Command
{ {
@ -294,72 +294,3 @@ class FixBoard2dPath
}, "split_2dpath"); }, "split_2dpath");
} }
} }
/**
* 线线
*
* @export
* @param {Polyline} meatPl 线
* @param {Polyline[]} knifePls 线
* @return {*}
*/
export function SplitPolyline(meatPl: Polyline, knifePls: Polyline[]): Polyline[]
{
let allSplitPls: Polyline[] = [];
let allIntersePts: Vector3[] = [];
for (let pl of knifePls)
{
let ipts = pl.IntersectWith(meatPl, IntersectOption.ExtendThis);
allIntersePts.push(...ipts);
if (pl.LineData.length === 2 && ipts.length > 1) //直线切割,且有2个已经的顶点
{
if (ipts.length === 2)
{
pl.StartPoint = ipts[0];
pl.EndPoint = ipts[1];
}
else
{
ipts.sort(ComparePointFnGenerate("xy"));
pl.StartPoint = ipts[0];
pl.EndPoint = arrayLast(ipts);
}
}
else
{
let iptsNotExt = ipts.filter(p => pl.PtOnCurve(p));
if (iptsNotExt.length < 2 && ipts.length === 2)
{
let params = ipts.map(p => pl.GetParamAtPoint(p));
pl.Extend(params[0]);
pl.Extend(params[1]);
}
}
let splitPls = pl.GetSplitCurvesByPts(ipts) as Polyline[];
allSplitPls.push(...splitPls);
}
let brSplitCus = meatPl.GetSplitCurvesByPts(allIntersePts) as Polyline[];
allSplitPls = allSplitPls.filter(pl =>
{
return meatPl.PtInCurve(pl.GetPointAtParam(pl.EndParam / 2)); //切割线必须在板内才有用
});
let regionParse = new RegionParse(brSplitCus.concat(allSplitPls));
let cus = regionParse.RegionsInternal.map(r =>
{
let pl = new Polyline();
for (let route of r)
pl.Join(route.curve);
if (pl.Area2 < 0)
pl.Reverse();
return pl;
});
return cus;
}

@ -0,0 +1,78 @@
import { Vector3 } from "three";
import { arrayLast } from "../../Common/ArrayExt";
import { Polyline } from "../../DatabaseServices/Entity/Polyline";
import { ComparePointFnGenerate } from "../../Geometry/GeUtils";
import { RegionParse } from "../../Geometry/RegionParse";
import { IntersectOption } from "../../GraphicsSystem/IntersectWith";
/**
* 线线
*
* @export
* @param {Polyline} meatPl 线
* @param {Polyline[]} knifePls 线
* @return {*}
*/
export function SplitPolyline(meatPl: Polyline, knifePls: Polyline[]): Polyline[]
{
let allSplitPls: Polyline[] = [];
let allIntersePts: Vector3[] = [];
for (let pl of knifePls)
{
let ipts = pl.IntersectWith(meatPl, IntersectOption.ExtendThis);
allIntersePts.push(...ipts);
if (pl.LineData.length === 2 && ipts.length > 1) //直线切割,且有2个已经的顶点
{
if (ipts.length === 2)
{
pl.StartPoint = ipts[0];
pl.EndPoint = ipts[1];
}
else
{
ipts.sort(ComparePointFnGenerate("xy"));
pl.StartPoint = ipts[0];
pl.EndPoint = arrayLast(ipts);
}
}
else
{
let iptsNotExt = ipts.filter(p => pl.PtOnCurve(p));
if (iptsNotExt.length < 2 && ipts.length === 2)
{
let params = ipts.map(p => pl.GetParamAtPoint(p));
pl.Extend(params[0]);
pl.Extend(params[1]);
}
}
let splitPls = pl.GetSplitCurvesByPts(ipts) as Polyline[];
allSplitPls.push(...splitPls);
}
let brSplitCus = meatPl.GetSplitCurvesByPts(allIntersePts) as Polyline[];
allSplitPls = allSplitPls.filter(pl =>
{
return meatPl.PtInCurve(pl.GetPointAtParam(pl.EndParam / 2)); //切割线必须在板内才有用
});
let regionParse = new RegionParse(brSplitCus.concat(allSplitPls));
let cus = regionParse.RegionsInternal.map(r =>
{
let pl = new Polyline();
for (let route of r)
pl.Join(route.curve);
if (pl.Area2 < 0)
pl.Reverse();
return pl;
});
return cus;
}

@ -30,7 +30,7 @@ import { FindInWall } from "../../Editor/TranstrolControl/ParseWalls";
import { FindClosestInterval, Segment1d, Segment1dSubtraction2, operInterval } from "../../Editor/TranstrolControl/Segment1dUtil"; import { FindClosestInterval, Segment1d, Segment1dSubtraction2, operInterval } from "../../Editor/TranstrolControl/Segment1dUtil";
import { userConfig } from "../../Editor/UserConfig"; import { userConfig } from "../../Editor/UserConfig";
import { Box3Ext } from "../../Geometry/Box"; import { Box3Ext } from "../../Geometry/Box";
import { CanDrawHoleFuzz } from "../../Geometry/DrillParse/BoardGetFace"; import { CanDrawHoleFuzz } from "../../Geometry/DrillParse/CanDrawHoleFuzz";
import { CollisionDetection } from "../../Geometry/DrillParse/CollisionDetection"; import { CollisionDetection } from "../../Geometry/DrillParse/CollisionDetection";
import { Face } from "../../Geometry/DrillParse/Face"; import { Face } from "../../Geometry/DrillParse/Face";
import { MoveMatrix, YAxis, ZAxis, equaln, isIntersect, isParallelTo } from "../../Geometry/GeUtils"; import { MoveMatrix, YAxis, ZAxis, equaln, isIntersect, isParallelTo } from "../../Geometry/GeUtils";

@ -5,7 +5,7 @@ import { Board } from "../../DatabaseServices/Entity/Board";
import { HardwareCompositeEntity } from "../../DatabaseServices/Hardware/HardwareCompositeEntity"; import { HardwareCompositeEntity } from "../../DatabaseServices/Hardware/HardwareCompositeEntity";
import { userConfig } from "../../Editor/UserConfig"; import { userConfig } from "../../Editor/UserConfig";
import { Box3Ext } from "../../Geometry/Box"; import { Box3Ext } from "../../Geometry/Box";
import { CanDrawHoleFuzz } from "../../Geometry/DrillParse/BoardGetFace"; import { CanDrawHoleFuzz } from "../../Geometry/DrillParse/CanDrawHoleFuzz";
import { AppToaster } from "../../UI/Components/Toaster"; import { AppToaster } from "../../UI/Components/Toaster";
import { DrawDrillingTool } from "./DrawDrillingTool"; import { DrawDrillingTool } from "./DrawDrillingTool";

@ -1,8 +1,8 @@
import { Object3D, Raycaster, Vector2, Vector3 } from 'three'; import { Object3D, Raycaster, Vector2, Vector3 } from 'three';
import { Viewer } from '../GraphicsSystem/Viewer';
import { SelectBox, SelectType } from './SelectBox';
import { GenerateRaycaster, Raycast } from './PointPick';
import { AsVector2 } from '../Geometry/GeUtils'; import { AsVector2 } from '../Geometry/GeUtils';
import { IViewer } from '../GraphicsSystem/IView';
import { GenerateRaycaster, Raycast } from './PointPick';
import { SelectBox, SelectType } from './SelectBox';
/** /**
* *
@ -12,7 +12,7 @@ export class SelectPick extends SelectBox
//用户点击选择时,点击的鼠标点(屏幕坐标系) //用户点击选择时,点击的鼠标点(屏幕坐标系)
_PickPointVcs: Vector3; _PickPointVcs: Vector3;
_Raycaster: Raycaster = new Raycaster(); _Raycaster: Raycaster = new Raycaster();
constructor(view: Viewer, ptVcs: Vector3, size = 10.1) constructor(view: IViewer, ptVcs: Vector3, size = 10.1)
{ {
super(view, super(view,
AsVector2(ptVcs).add(new Vector2(-size, -size)), AsVector2(ptVcs).add(new Vector2(-size, -size)),

@ -1,6 +1,6 @@
import { Matrix4, Vector2, Vector3 } from "three"; import { Matrix4, Vector2, Vector3 } from "three";
import { ArcBoardBuild } from "../../Add-on/ArcBoard/ArcBoardBuild"; import { ArcBoardBuild } from "../../Add-on/ArcBoard/ArcBoardBuild";
import { SplitPolyline } from "../../Add-on/BoardCutting/LinearCutting"; import { SplitPolyline } from "../../Add-on/BoardCutting/SplitPolyline";
import { DrillType, FaceDirection } from "../../Add-on/DrawDrilling/DrillType"; import { DrillType, FaceDirection } from "../../Add-on/DrawDrilling/DrillType";
import { MergeCurvelist } from "../../Common/CurveUtils"; import { MergeCurvelist } from "../../Common/CurveUtils";
import { MakeMirrorMtx } from "../../Common/Matrix4Utils"; import { MakeMirrorMtx } from "../../Common/Matrix4Utils";
@ -10,11 +10,10 @@ import { Curve } from "../../DatabaseServices/Entity/Curve";
import { Polyline } from "../../DatabaseServices/Entity/Polyline"; import { Polyline } from "../../DatabaseServices/Entity/Polyline";
import { Region } from "../../DatabaseServices/Entity/Region"; import { Region } from "../../DatabaseServices/Entity/Region";
import { AsVector2, ZAxis, angle, equaln, equalv3 } from "../GeUtils"; import { AsVector2, ZAxis, angle, equaln, equalv3 } from "../GeUtils";
import { CanDrawHoleFuzz } from "./CanDrawHoleFuzz";
import { Face } from "./Face"; import { Face } from "./Face";
export const CanDrawHoleFuzz = 0.1;
export enum BoardFaceType export enum BoardFaceType
{ {
Side = 0, Side = 0,

@ -0,0 +1,3 @@
export const CanDrawHoleFuzz = 0.1;

@ -1,7 +1,8 @@
import { DrillType } from "../../Add-on/DrawDrilling/DrillType"; import { DrillType } from "../../Add-on/DrawDrilling/DrillType";
import { Board } from "../../DatabaseServices/Entity/Board"; import { Board } from "../../DatabaseServices/Entity/Board";
import { Box3Ext } from "../Box"; import { Box3Ext } from "../Box";
import { BoardGetFace, CanDrawHoleFuzz } from "./BoardGetFace"; import { BoardGetFace } from "./BoardGetFace";
import { CanDrawHoleFuzz } from "./CanDrawHoleFuzz";
import { Face } from "./Face"; import { Face } from "./Face";
export class CollisionDetection export class CollisionDetection

@ -17,7 +17,8 @@ import { Shape } from "../../DatabaseServices/Shape";
import { ShapeManager } from "../../DatabaseServices/ShapeManager"; import { ShapeManager } from "../../DatabaseServices/ShapeManager";
import { Box3Ext } from "../../Geometry/Box"; import { Box3Ext } from "../../Geometry/Box";
import { Route } from "../../Geometry/CurveMap"; import { Route } from "../../Geometry/CurveMap";
import { CanDrawHoleFuzz, GetSideFaceMtx } from "../../Geometry/DrillParse/BoardGetFace"; import { GetSideFaceMtx } from "../../Geometry/DrillParse/BoardGetFace";
import { CanDrawHoleFuzz } from "../../Geometry/DrillParse/CanDrawHoleFuzz";
import { AsVector2, equaln, isParallelTo } from "../../Geometry/GeUtils"; import { AsVector2, equaln, isParallelTo } from "../../Geometry/GeUtils";
import { RegionParse } from "../../Geometry/RegionParse"; import { RegionParse } from "../../Geometry/RegionParse";
import { FixIndex } from "../../Nest/Common/Util"; import { FixIndex } from "../../Nest/Common/Util";

@ -23,7 +23,7 @@ import { GroupRecord } from "../DatabaseServices/GroupTableRecord";
import { HardwareCompositeEntity } from "../DatabaseServices/Hardware/HardwareCompositeEntity"; import { HardwareCompositeEntity } from "../DatabaseServices/Hardware/HardwareCompositeEntity";
import { HardwareTopline } from "../DatabaseServices/Hardware/HardwareTopline"; import { HardwareTopline } from "../DatabaseServices/Hardware/HardwareTopline";
import { Shape } from "../DatabaseServices/Shape"; import { Shape } from "../DatabaseServices/Shape";
import { CanDrawHoleFuzz } from "../Geometry/DrillParse/BoardGetFace"; import { CanDrawHoleFuzz } from "../Geometry/DrillParse/CanDrawHoleFuzz";
import { IsBetweenA2B, MoveMatrix, XAxis, angle, angleTo, equaln, equalv2, equalv3, isIntersect2, isParallelTo, isPerpendicularityTo } from "../Geometry/GeUtils"; import { IsBetweenA2B, MoveMatrix, XAxis, angle, angleTo, equaln, equalv2, equalv3, isIntersect2, isParallelTo, isPerpendicularityTo } from "../Geometry/GeUtils";
import { BrSealedData, GetSealedBoardContour } from "../GraphicsSystem/CalcEdgeSealing"; import { BrSealedData, GetSealedBoardContour } from "../GraphicsSystem/CalcEdgeSealing";
import { FeedingToolPath, GetModelingFromCustomDrill } from "../GraphicsSystem/ToolPath/FeedingToolPath"; import { FeedingToolPath, GetModelingFromCustomDrill } from "../GraphicsSystem/ToolPath/FeedingToolPath";

Loading…
Cancel
Save