62 lines
1.8 KiB
TypeScript
62 lines
1.8 KiB
TypeScript
import type { Point } from '../Vector2'
|
||
import type { NestFiler } from '../Filer'
|
||
import { Path } from './Path'
|
||
import { PathGeneratorSingle } from './PathGenerator'
|
||
|
||
/**
|
||
* 用于存放零件旋转后的状态
|
||
* 记录了用于放置时的轮廓。该轮廓总是首点等于0,便于放置时的计算。
|
||
*/
|
||
export class PartState
|
||
{
|
||
Rotation: number
|
||
OrigionMinPoint: Point// 使用 Rotation(O - OrigionMinPoint) 将零件变换到和排料矩形状态相同的状态,然后使用PlacePoint(O)将零件设置到正确的状态
|
||
|
||
MinPoint: Point// 这个状态下的最小点
|
||
Contour: Path// 轮廓
|
||
|
||
IsMirror: boolean = false
|
||
MirrorOriginMinPoint: Point
|
||
|
||
Mirror(): PartState
|
||
{
|
||
if (this.Contour.IsRect)
|
||
return
|
||
|
||
let mpts = this.Contour.Points.map((p) => { return { x: -p.x, y: p.y } }).reverse()
|
||
let path = new Path(mpts, 0)
|
||
let partState = new PartState()
|
||
partState.Contour = PathGeneratorSingle.Allocate(path)
|
||
PathGeneratorSingle.RegisterId(partState.Contour)
|
||
partState.Rotation = this.Rotation
|
||
partState.OrigionMinPoint = this.OrigionMinPoint
|
||
partState.MinPoint = this.MinPoint
|
||
partState.IsMirror = true
|
||
partState.MirrorOriginMinPoint = path.OrigionMinPoint
|
||
return partState
|
||
}
|
||
|
||
// #region -------------------------File-------------------------
|
||
ReadFile(file: NestFiler)
|
||
{
|
||
this.Rotation = file.Read()
|
||
this.OrigionMinPoint = file.Read()
|
||
this.MinPoint = file.Read()
|
||
|
||
let index = file.Read() as number
|
||
this.Contour = PathGeneratorSingle.paths[index]
|
||
|
||
if (!this.Contour)
|
||
console.error('无法得到PartState的轮廓!')
|
||
}
|
||
|
||
WriteFile(file: NestFiler)
|
||
{
|
||
file.Write(this.Rotation)
|
||
file.Write(this.OrigionMinPoint)
|
||
file.Write(this.MinPoint)
|
||
file.Write(this.Contour.Id)
|
||
}
|
||
// #endregion
|
||
}
|