|
|
@ -81,37 +81,37 @@ export class Part<T = any, Matrix = any>
|
|
|
|
//初始化零件的各个状态,按旋转角度表
|
|
|
|
//初始化零件的各个状态,按旋转角度表
|
|
|
|
Init2(path: Path, bin: Path, rotations: number[] = []): this
|
|
|
|
Init2(path: Path, bin: Path, rotations: number[] = []): this
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let pathP = path.OrigionMinPoint;
|
|
|
|
let path_OMP = path.OrigionMinPoint;
|
|
|
|
let path_0 = PathGeneratorSingle.Allocate(path);
|
|
|
|
let path_0 = PathGeneratorSingle.Allocate(path);
|
|
|
|
let pathSet = new Set<Path>();
|
|
|
|
let pathSet = new Set<Path>();
|
|
|
|
|
|
|
|
|
|
|
|
//初始化零件的状态集合
|
|
|
|
//初始化零件的状态集合
|
|
|
|
for (let pa of rotations)
|
|
|
|
for (let ro of rotations)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let partState = new PartState();
|
|
|
|
let partState = new PartState();
|
|
|
|
partState.Rotation = pa;
|
|
|
|
partState.Rotation = ro;
|
|
|
|
if (pa === 0)
|
|
|
|
if (ro === 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
partState.Contour = path_0;
|
|
|
|
partState.Contour = path_0;
|
|
|
|
partState.OrigionMinPoint = pathP;
|
|
|
|
partState.OrigionMinPoint = path_OMP;
|
|
|
|
partState.MinPoint = path.OrigionMinPoint;
|
|
|
|
partState.MinPoint = path_OMP;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let path_r = new Path(path.Points, pa);
|
|
|
|
let path_r = new Path(path.Points, ro);
|
|
|
|
partState.Contour = PathGeneratorSingle.Allocate(path_r);
|
|
|
|
partState.Contour = PathGeneratorSingle.Allocate(path_r);
|
|
|
|
partState.Contour.Area = path_0.Area;
|
|
|
|
partState.Contour.Area = path_0.Area;
|
|
|
|
//避免重复的Path进入State
|
|
|
|
//避免重复的Path进入State
|
|
|
|
if (pathSet.has(partState.Contour)) continue;
|
|
|
|
if (pathSet.has(partState.Contour)) continue;
|
|
|
|
let p0 = path_r.OrigionMinPoint;
|
|
|
|
let p0 = path_r.OrigionMinPoint;
|
|
|
|
let c = Math.cos(-pa);
|
|
|
|
let c = Math.cos(-ro);
|
|
|
|
let s = Math.sin(-pa);
|
|
|
|
let s = Math.sin(-ro);
|
|
|
|
let x1 = p0.x * c - p0.y * s;
|
|
|
|
let x1 = p0.x * c - p0.y * s;
|
|
|
|
let y1 = p0.x * s + p0.y * c;
|
|
|
|
let y1 = p0.x * s + p0.y * c;
|
|
|
|
partState.OrigionMinPoint = new Vector2(pathP.x + x1, pathP.y + y1);
|
|
|
|
partState.OrigionMinPoint = new Vector2(path_OMP.x + x1, path_OMP.y + y1);
|
|
|
|
|
|
|
|
|
|
|
|
//计算正确的最小点
|
|
|
|
//计算正确的最小点
|
|
|
|
let tempPath = new Path(path.OrigionPoints, pa);
|
|
|
|
let tempPath = new Path(path.OrigionPoints, ro);
|
|
|
|
partState.MinPoint = tempPath.OrigionMinPoint;
|
|
|
|
partState.MinPoint = tempPath.OrigionMinPoint;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//记录已有Path
|
|
|
|
//记录已有Path
|
|
|
|