|
|
|
@ -0,0 +1,112 @@
|
|
|
|
|
import { Matrix4, Vector3 } from "three";
|
|
|
|
|
import { TestDraw } from "../../Add-on/test/TestUtil";
|
|
|
|
|
import { app } from "../../ApplicationServices/Application";
|
|
|
|
|
import { Log } from "../../Common/Log";
|
|
|
|
|
import { FixIndex } from "../../Common/Utils";
|
|
|
|
|
import { Curve } from "../../DatabaseServices/Entity/Curve";
|
|
|
|
|
import { Command } from "../../Editor/CommandMachine";
|
|
|
|
|
import { PromptStatus } from "../../Editor/PromptResult";
|
|
|
|
|
import { HotCMD } from "../../Hot/HotCommand";
|
|
|
|
|
import { NestFiler } from "../Common/Filer";
|
|
|
|
|
import { Path2Polyline } from "../Converter/Path2Polyline";
|
|
|
|
|
import { Individual } from "../Core/Individual";
|
|
|
|
|
import { NestDatabase } from "../Core/NestDatabase";
|
|
|
|
|
import { Place } from "./PlaceUtil";
|
|
|
|
|
import { NestVariant } from "./TestVariant";
|
|
|
|
|
import { CacheYHData, CacheYHDatabase } from "./TestYHWorker";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 如果有优化结果,则调试最后一次的优化结果(并且不绘制新的曲线
|
|
|
|
|
* 如果没有优化结果,则调试localStore保存的优化结果(绘制新的曲线)
|
|
|
|
|
*/
|
|
|
|
|
@HotCMD
|
|
|
|
|
export class Command_TestDrawYHData implements Command
|
|
|
|
|
{
|
|
|
|
|
async exec()
|
|
|
|
|
{
|
|
|
|
|
let nestDb = CacheYHDatabase.Db as NestDatabase;
|
|
|
|
|
let dstr = localStorage.getItem("yhdata");
|
|
|
|
|
let d: typeof CacheYHData = JSON.parse(dstr);
|
|
|
|
|
// d = require("./test.json");
|
|
|
|
|
if (!nestDb && true)
|
|
|
|
|
{
|
|
|
|
|
NestVariant.curveMap.clear();
|
|
|
|
|
|
|
|
|
|
let origin = new NestFiler(d.OriginalData);
|
|
|
|
|
nestDb = new NestDatabase().ReadFile(origin);
|
|
|
|
|
|
|
|
|
|
//初始化零件
|
|
|
|
|
for (let part of nestDb.Parts)
|
|
|
|
|
{
|
|
|
|
|
let cus: Curve[] = [];
|
|
|
|
|
part.UserData = cus;
|
|
|
|
|
let state = part.RotatedStates[0];
|
|
|
|
|
let pts = state.Contour.Points.map(p => new Vector3(p.x * 1, p.y * 1));
|
|
|
|
|
let pl = Path2Polyline(pts);
|
|
|
|
|
cus.push(pl);
|
|
|
|
|
let ocs = new Matrix4;
|
|
|
|
|
if (state.Rotation !== 0)
|
|
|
|
|
ocs.makeRotationZ(-state.Rotation);
|
|
|
|
|
ocs.setPosition(state.OrigionMinPoint.x, state.OrigionMinPoint.y, 0);
|
|
|
|
|
|
|
|
|
|
TestDraw(pl);
|
|
|
|
|
NestVariant.curveMap.set(pl, ocs);
|
|
|
|
|
|
|
|
|
|
for (let h of part.Holes)
|
|
|
|
|
{
|
|
|
|
|
let pl = Path2Polyline(h.Contour.Points);
|
|
|
|
|
TestDraw(pl);
|
|
|
|
|
cus.push(pl);
|
|
|
|
|
NestVariant.curveMap.set(pl, new Matrix4().setPosition(h.OrigionMinPoint.x, h.OrigionMinPoint.y, 0));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let placeType = 1;//1 正常的 2弃用的
|
|
|
|
|
let placeIndex = -1;//当前绘制的索引
|
|
|
|
|
|
|
|
|
|
//绘制零件放置状态
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
let keyRes = await app.Editor.GetKeyWords({
|
|
|
|
|
KeyWordList: [
|
|
|
|
|
{ key: "1", msg: "正常的" },
|
|
|
|
|
{ key: "2", msg: "弃用的" },
|
|
|
|
|
|
|
|
|
|
{ key: "3", msg: "上一个" },
|
|
|
|
|
{ key: "4", msg: "下一个" },
|
|
|
|
|
],
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (keyRes.Status === PromptStatus.Cancel)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (keyRes.StringResult === "1")
|
|
|
|
|
placeType = 1;
|
|
|
|
|
else if (keyRes.StringResult === "2")
|
|
|
|
|
placeType = 2;
|
|
|
|
|
else if (keyRes.StringResult === "3")
|
|
|
|
|
placeIndex--;
|
|
|
|
|
else if (keyRes.StringResult === "4")
|
|
|
|
|
placeIndex++;
|
|
|
|
|
|
|
|
|
|
let datas: any[];
|
|
|
|
|
if (placeType === 1)
|
|
|
|
|
{
|
|
|
|
|
datas = d.PlaceData;
|
|
|
|
|
placeIndex = FixIndex(placeIndex, d.PlaceData);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
datas = d.DiscardPlaceData;
|
|
|
|
|
placeIndex = FixIndex(placeIndex, d.DiscardPlaceData);
|
|
|
|
|
}
|
|
|
|
|
Log(`当前:${placeType === 1 ? "正常" : "弃用"},索引:${placeIndex}`);
|
|
|
|
|
|
|
|
|
|
let f = new NestFiler(datas[placeIndex]);
|
|
|
|
|
let inv = new Individual(nestDb.Parts);
|
|
|
|
|
inv.ReadFile(f);
|
|
|
|
|
Place(inv, nestDb.Parts, nestDb.Bin);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|