|
|
@ -95,7 +95,10 @@ export function ConverBoard2Part(board: Board, knifRadius = 3.5): Part
|
|
|
|
c.ApplyMatrix(new Matrix4().setPosition(box.min.negate()));
|
|
|
|
c.ApplyMatrix(new Matrix4().setPosition(box.min.negate()));
|
|
|
|
part.UserData = [c];
|
|
|
|
part.UserData = [c];
|
|
|
|
if (!board.IsSpecialShape)
|
|
|
|
if (!board.IsSpecialShape)
|
|
|
|
|
|
|
|
{
|
|
|
|
path = NestCache.CreatePath(board.Width, board.Height, knifRadius);
|
|
|
|
path = NestCache.CreatePath(board.Width, board.Height, knifRadius);
|
|
|
|
|
|
|
|
part.Init2(path, DefaultBin, Rotations[board.BoardProcessOption.lines]);
|
|
|
|
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let contour = board.ContourCurve;
|
|
|
|
let contour = board.ContourCurve;
|
|
|
@ -120,14 +123,24 @@ export function ConverBoard2Part(board: Board, knifRadius = 3.5): Part
|
|
|
|
arrayRemoveDuplicateBySort(pts, (p1, p2) => equalv2(p1, p2, 1e-2));
|
|
|
|
arrayRemoveDuplicateBySort(pts, (p1, p2) => equalv2(p1, p2, 1e-2));
|
|
|
|
path = new Path(pts);
|
|
|
|
path = new Path(pts);
|
|
|
|
|
|
|
|
|
|
|
|
if (!(board.ContourCurve instanceof Circle))//如果是圆则不用优化成矩形
|
|
|
|
if (!(contour instanceof Circle))//如果是圆则不用优化成矩形
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let area = path.BoundingBox.area - path.Area;
|
|
|
|
let area = path.BoundingBox.area - path.Area;
|
|
|
|
if (area < 15000 && pts.length > 6)
|
|
|
|
if (area < 15000 && pts.length > 6)
|
|
|
|
path = NestCache.CreatePath(board.Width, board.Height, knifRadius);
|
|
|
|
path = NestCache.CreatePath(board.Width, board.Height, knifRadius);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
part.Init2(path, DefaultBin, Rotations[board.BoardProcessOption.lines]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//如果不能放下,那么尝试不简化路径(避免轮廓变大)
|
|
|
|
|
|
|
|
if (!path.IsRect && !(contour instanceof Circle) && part.RotatedStates.length === 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
pts = Polylin2Points(contour, true, knifRadius)[1];
|
|
|
|
|
|
|
|
arrayRemoveDuplicateBySort(pts, (p1, p2) => equalv2(p1, p2, 1e-2));
|
|
|
|
|
|
|
|
path = new Path(pts);
|
|
|
|
part.Init2(path, DefaultBin, Rotations[board.BoardProcessOption.lines]);
|
|
|
|
part.Init2(path, DefaultBin, Rotations[board.BoardProcessOption.lines]);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
for (let m of board.BoardModeling)
|
|
|
|
for (let m of board.BoardModeling)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (equaln(m.thickness, board.Thickness))
|
|
|
|
if (equaln(m.thickness, board.Thickness))
|
|
|
|