|
|
|
@ -2,6 +2,7 @@ import Geom3 from '@jscad/modeling/src/geometries/geom3/type';
|
|
|
|
|
import { BufferAttribute, BufferGeometry, Euler, FrontSide, Frustum, Geometry, LineSegments, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, Line as TLine, UVGenerator, Vector3 } from 'three';
|
|
|
|
|
import { ArcBoardBuild } from '../../Add-on/ArcBoard/ArcBoardBuild';
|
|
|
|
|
import { ArcBoardOptions, ParseBoardArcFeed, defultArcBoardOption } from '../../Add-on/ArcBoard/ArcBoardFeeding';
|
|
|
|
|
import { CurveManager } from '../../Add-on/BoardCutting/LinearCuttingForSweep';
|
|
|
|
|
import { SplitBoardSideModelUtil } from '../../Add-on/BoardCutting/SplitBoardSideModel';
|
|
|
|
|
import { Board2Regions } from '../../Add-on/BoardEditor/Board2Regions';
|
|
|
|
|
import { DeserializationBoard2DModeingData, DeserializationBoard3DModeingData, DeserializationBoardSideModeingData, SerializeBoard2DModeingData, SerializeBoard3DModeingData, SerializeBoardSideModeingData, deserializationBoardData, serializeBoardData } from '../../Add-on/BoardEditor/SerializeBoardData';
|
|
|
|
@ -490,6 +491,51 @@ export class Board extends ExtrudeSolid
|
|
|
|
|
this.Update();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override AdjustPath(br: Board, outline: Polyline | Circle)
|
|
|
|
|
{
|
|
|
|
|
if (this.IsArcBoard)
|
|
|
|
|
{
|
|
|
|
|
const path = this.GetSweepPath();
|
|
|
|
|
// 1.将放样路径展开
|
|
|
|
|
const pathWCS = this.GetSweepPathInWCS();
|
|
|
|
|
pathWCS.ApplyMatrix(pathWCS.OCSInv);
|
|
|
|
|
const expandPath = CurveManager.CreateExpandPl(pathWCS);
|
|
|
|
|
// 2.将轮廓进行旋转
|
|
|
|
|
outline.ApplyMatrix(new Matrix4().makeRotationZ(-this.SweepAngle));
|
|
|
|
|
// 3.根据轮廓的左右两侧,截取取对应的放样路径
|
|
|
|
|
const leftParam = expandPath.GetParamAtDist(outline.BoundingBox.min.x);
|
|
|
|
|
const rightParam = expandPath.GetParamAtDist(outline.BoundingBox.max.x);
|
|
|
|
|
const leftPt = path.GetPointAtParam(leftParam);
|
|
|
|
|
const rightPt = path.GetPointAtParam(rightParam);
|
|
|
|
|
const newPath = CurveManager.Get_Pl_InPtAtoPtB(path, leftPt, rightPt);
|
|
|
|
|
// 4.路径起点为原点
|
|
|
|
|
newPath.Move(newPath.StartPoint.negate());
|
|
|
|
|
br.SetSweepPath(newPath, this.SweepAngle);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override AdjustPosition(br: Board, basePoint: Vector3)
|
|
|
|
|
{
|
|
|
|
|
if (this.IsArcBoard)
|
|
|
|
|
{
|
|
|
|
|
// 映射shape上的基点
|
|
|
|
|
basePoint.applyMatrix4(this.ArcBuild.OCS2RotateMtx);
|
|
|
|
|
this.ArcBuild.ParseAllX_Map([basePoint.x]);
|
|
|
|
|
this.ArcBuild.PosMap2ArcPos(basePoint);
|
|
|
|
|
basePoint.applyMatrix4(this.ArcBuild.Rotate2OCSMtx);
|
|
|
|
|
basePoint.applyMatrix4(this.OCSNoClone);
|
|
|
|
|
// 映射board上的基点
|
|
|
|
|
const basePointInBoard = br.ContourCurve.StartPoint;
|
|
|
|
|
basePointInBoard.applyMatrix4(br.ArcBuild.OCS2RotateMtx);
|
|
|
|
|
br.ArcBuild.ParseAllX_Map([basePointInBoard.x]);
|
|
|
|
|
br.ArcBuild.PosMap2ArcPos(basePointInBoard);
|
|
|
|
|
basePointInBoard.applyMatrix4(br.ArcBuild.Rotate2OCSMtx);
|
|
|
|
|
basePointInBoard.applyMatrix4(br.OCSNoClone);
|
|
|
|
|
// 移动(boardBasePoint -> basePoint)
|
|
|
|
|
br.Move(basePoint.sub(basePointInBoard));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 创建一个代理数组,数组改变时被监听
|
|
|
|
|
*/
|
|
|
|
|