Merge pull request !384 from ZoeLeeFZ/modifySealAndDrill
pull/384/MERGE
ZoeLeeFZ 5 years ago committed by ChenX
parent baea27dbc4
commit 22089da618

@ -0,0 +1,45 @@
import { Command } from "../../Editor/CommandMachine";
import { app } from "../../ApplicationServices/Application";
import { Board } from "../../DatabaseServices/Entity/Board";
import { PromptStatus } from "../../Editor/PromptResult";
import { RightPanelStore } from "../../UI/Store/RightPanelStore/RightPanelStore";
import { RightTabId } from "../../UI/Components/RightPanel/RightPanel";
export class BatchModify implements Command
{
async exec()
{
let brRes = await app.Editor.GetSelection({
Msg: "选择板件",
Filter: { filterTypes: [Board] }
});
if (brRes.Status !== PromptStatus.OK) return;
let brs = brRes.SelectSet.SelectEntityList as Board[];
let keyRes = await app.Editor.GetKeyWords({
Msg: "编辑封边还是排钻?",
KeyWordList: [{ msg: "封边", key: "S" }, { msg: "排钻", key: "D" }]
})
if (keyRes.Status !== PromptStatus.Keyword) return;
const store = RightPanelStore.GetInstance() as RightPanelStore;
store.m_IsShow = true;
if (keyRes.StringResult === "S")
{
store.m_TabId = RightTabId.Seal;
store.sealingStore.StartEditor(brs);
}
else
{
store.m_TabId = RightTabId.Drill;
//当前命令结束后在批量编辑排钻
setTimeout(() =>
{
store.drillingStore.StartEditor(brs);
}, 0);
}
}
}

@ -18,7 +18,6 @@ export function serializeBoardData(file: CADFiler, processData: BoardProcessOpti
for (let n of processData[EBoardKeyList.HighSealed])
{
file.Write(n.size);
file.Write(n.color);
}
file.Write(processData[EBoardKeyList.UpSealed]);
file.Write(processData[EBoardKeyList.DownSealed]);
@ -54,8 +53,11 @@ export function deserializationBoardData(file: CADFiler, processData: BoardProce
for (let i = 0; i < count; i++)
{
let size = file.Read();
let color = file.Read();
processData[EBoardKeyList.HighSealed].push({ size, color });
if (ver < 4)
{
file.Read();
}
processData[EBoardKeyList.HighSealed].push({ size });
}
processData[EBoardKeyList.UpSealed] = file.Read();

@ -7,6 +7,6 @@ export class Open implements Command
{
let fid = localStorage.getItem('lastfid');
if (fid)
await (FileServer.GetInstance() as FileServer).OpenFile(fid);
(FileServer.GetInstance() as FileServer).OpenFile(fid);
}
}

@ -680,7 +680,7 @@ export class Board extends ExtureSolid
WriteFile(file: CADFiler)
{
super.WriteFile(file);
file.Write(3);
file.Write(4);
file.Write(this.m_SpecOCS.toArray())
file.Write(this.m_BoardType);
file.Write(this.m_Name);

@ -119,6 +119,7 @@ import { CommandServer } from '../DatabaseServices/CommandServer';
import { AutoTempateSizeAction } from '../DatabaseServices/Template/TemplateTest';
import { ICommand } from '../UI/Components/CommandPanel/CommandList';
import { commandMachine } from './CommandMachine';
import { BatchModify } from '../Add-on/Batch/BatchModifySealOrDrill';
export function registerCommand()
@ -327,11 +328,16 @@ export function registerCommand()
commandMachine.RegisterCommand("Conceptual", new CMD_Conceptual());
commandMachine.RegisterCommand("Physical", new CMD_Physical());
//导入导出排钻配置
//导入导出配置
commandMachine.RegisterCommand("downloadconfig", new DownLoadDConfig());
commandMachine.RegisterCommand("uploadconfig", new UpLoadConfig());
commandMachine.RegisterCommand("cd", new ErpParseData());
//批量修改封边排钻
commandMachine.RegisterCommand("batchmodify", new BatchModify());
RegistCustomCommand();
}

@ -135,11 +135,11 @@ export function getBoardHighSeal(br: Board, sealcus: Curve[])
let sealUp = parseFloat(br.BoardProcessOption[EBoardKeyList.UpSealed]);
let sealLeft = parseFloat(br.BoardProcessOption[EBoardKeyList.LeftSealed]);
let sealRight = parseFloat(br.BoardProcessOption[EBoardKeyList.RightSealed]);
if (!br.IsSpecialShape)
if (!br.IsSpecialShape && highSeals.length !== 4)
{
highSeals.length = 0;
let seals = [...new Set([sealDown, sealRight, sealUp, sealLeft])];
[sealDown, sealRight, sealUp, sealLeft].forEach(size => highSeals.push({ size, color: seals.indexOf(size) + 1 }));//color看上去毫无意义
[sealDown, sealRight, sealUp, sealLeft].forEach(size => highSeals.push({ size }));
}
//若未设置高级封边,把上下左右封边存入高级封边
@ -151,13 +151,13 @@ export function getBoardHighSeal(br: Board, sealcus: Curve[])
let derv = c.GetFistDeriv(0);
let an = angle(derv);
if (an >= 0 && an < Math.PI / 2)
highSeals.push({ size: sealDown, color: 1 });
highSeals.push({ size: sealDown });
else if (an >= Math.PI / 2 && an < Math.PI)
highSeals.push({ size: sealRight, color: 2 });
highSeals.push({ size: sealRight });
else if (an >= Math.PI && an < Math.PI * 3 / 4)
highSeals.push({ size: sealUp, color: 3 });
highSeals.push({ size: sealUp });
else
highSeals.push({ size: sealLeft, color: 4 });
highSeals.push({ size: sealLeft });
}
}

@ -517,11 +517,7 @@ export class DrillTypeSelectCom extends React.Component<IDrillTypeSelect, { isDa
let store = RightPanelStore.GetInstance() as RightPanelStore;
store.m_IsShow = true;
store.m_TabId = RightTabId.Drill;
store.drillingStore.StartEditor(br);
AppToaster.show({
message: <div>,<br />&lt;&gt;,<br />&lt;&gt;,<br />&lt;退&gt;退</div>,
timeout: 0
});
store.drillingStore.StartEditor([br]);
}
private handleChange = (e) =>
{

@ -34,11 +34,7 @@ export class BoardProcessModal extends React.Component<BoardProcessProps, {}>{
let store = RightPanelStore.GetInstance() as RightPanelStore;
store.m_IsShow = true;
store.m_TabId = RightTabId.Seal;
store.sealingStore.StartEditor(br);
AppToaster.show({
message: <div>,<br />&lt;&gt;,<br />&lt;&gt;,<br />&lt;退&gt;退</div>,
timeout: 0
});
store.sealingStore.StartEditor([br]);
}
private renderEl = () =>
{

@ -384,6 +384,15 @@ export const CommandList: ICommand[] = observable([
chName: "格子抽",
chDes: "绘制格子抽",
},
{
typeId: "hb",
link: "#",
defaultCustom: "BATCHMODIFY",
command: "BATCHMODIFY",
type: "画板",
chName: "批量修改",
chDes: "批量修改排钻封边",
},
//灯光命令
{
typeId: "dg",

@ -71,7 +71,6 @@ export enum BrRelativePos
export interface IHighSealedItem
{
size: number;
color: number;
}
export interface BoardProcessOption extends BoardOption

@ -18,11 +18,11 @@ export function ZoomToEntity(en: Entity)
export class BoardEdgesEditor
{
Board: Board;
CurveList: Curve[] = [];
Editoring = false;
protected _brMap: Map<Board, Curve[]> = new Map();
protected _boardList: Board[];
private _editoring = false;
CameraFiler: CADFiler;
private _cameraFiler: CADFiler;
//@重载
protected async InitData()
@ -34,45 +34,46 @@ export class BoardEdgesEditor
{
}
protected ShowToaster()
{
}
//@重载
protected ParseData()
{
}
//@重载
protected WriteData()
{
}
async StartEditor(br: Board)
async StartEditor(brs: Board[])
{
if (this.Editoring)
if (this._editoring)
throw "重复进入编辑模式!";
this.Board = br;
this._boardList = brs;
await this.InitData();
this.InitCurve();
this.ShowToaster();
this.Start();
this.Editoring = true;
this._editoring = true;
}
EndEditor(cancel = false)
{
if (!this.Editoring)
if (!this._editoring)
return;
app.Viewer.CameraCtrl.ReadFile(this.CameraFiler);
app.Viewer.CameraCtrl.ReadFile(this._cameraFiler);
this.ParseData();
TempEditor.End();
if (!cancel)
this.WriteData();
AppToaster.clear();
this.CurveList.length = 0;
this.Editoring = false;
this.Board = undefined;
this.CameraFiler = undefined;
this._brMap.clear();
this._editoring = false;
this._cameraFiler = undefined;
app.Editor.MaskManage.Clear();
}
@ -81,17 +82,21 @@ export class BoardEdgesEditor
{
TempEditor.Start();
commandMachine.CommandStart("");
for (let i = 0; i < this.CurveList.length; i++)
for (let [b, cus] of this._brMap)
{
let cu = this.CurveList[i];
cu.ApplyMatrix(this.Board.OCS);
for (let cu of cus)
{
cu.ApplyMatrix(b.OCS);
app.Database.ModelSpace.Append(cu);
}
}
commandMachine.CommandEnd();
app.Database.hm.lockIndex++;//禁止初始化动作被撤销
this.CameraFiler = new CADFiler;
app.Viewer.CameraCtrl.WriteFile(this.CameraFiler);
ZoomToEntity(this.Board);
this._cameraFiler = new CADFiler;
app.Viewer.CameraCtrl.WriteFile(this._cameraFiler);
if (this._boardList.length === 1)
ZoomToEntity(this._boardList[0]);
}
}

@ -5,10 +5,12 @@ import { userConfig } from "../../../Editor/UserConfig";
import { AppToaster } from "../../Components/Toaster";
import { DrillType } from "../BoardInterface";
import { BoardEdgesEditor } from "./BoardEdgesEditor";
import { Board } from "../../../DatabaseServices/Entity/Board";
import * as React from 'react';
import { log } from "util";
export class DrillingStore extends BoardEdgesEditor
{
@observable drillDataList: string[] = []; //前2个为正反面排钻类型
@observable drillDataList: string[] = [];
@observable upDownIsdrill: [boolean, boolean] = [true, true]; //正反面
protected async InitData()
@ -21,45 +23,58 @@ export class DrillingStore extends BoardEdgesEditor
protected async InitCurve()
{
this.CurveList = this.Board.ContourCurve.Explode() as Curve[];
let highDrillData = this.Board.BoardProcessOption.highDrill;
if (highDrillData.length === this.CurveList.length)
for (let br of this._boardList)
{
this.upDownIsdrill[0] = this.Board.BoardProcessOption.frontDrill;
this.upDownIsdrill[1] = this.Board.BoardProcessOption.backDrill;
let drills = [...new Set(highDrillData)];
for (let i = 0; i < drills.length; i++)
let cus = br.ContourCurve.Explode() as Curve[];
let highDrillData = br.BoardProcessOption.highDrill;
if (highDrillData.length === cus.length)
{
this.drillDataList[i] = drills[i];
}
this.upDownIsdrill[0] = br.BoardProcessOption.frontDrill;
this.upDownIsdrill[1] = br.BoardProcessOption.backDrill;
for (let i = 0; i < highDrillData.length; i++)
{
this.CurveList[i].ColorIndex = drills.indexOf(highDrillData[i]) + 1;
cus[i].ColorIndex = this.drillDataList.indexOf(highDrillData[i]) + 1;
}
}
else
{
this.CurveList.forEach(c => c.ColorIndex = 1);
cus.forEach(c => c.ColorIndex = 1);
}
this._brMap.set(br, cus);
}
private highDrill: string[];
}
protected ShowToaster()
{
AppToaster.show({
message: React.createElement('div', {}, [
"正在编辑排钻,", React.createElement('br'), "点击<写入>写入排钻数据到板件,",
React.createElement('br'), "点击<保存>保存当前排钻设置,",
React.createElement('br'), "点击<退出>退出编辑状态",
]),
timeout: 0,
});
}
private _highDrillMap: WeakMap<Board, string[]> = new Map();
protected async ParseData()
{
this.highDrill = [];
let types = [...userConfig.DrillConfigs.keys(), DrillType.None];
let defaultType = types[0];
for (let cu of this.CurveList)
for (let [b, cus] of this._brMap)
{
let highDrill = [];
for (let cu of cus)
{
let type = this.drillDataList[cu.ColorIndex - 1];
if (!type)
{
AppToaster.show({ message: "未知色号,默认" + defaultType, timeout: 1000 });
log("未知色号,默认" + defaultType);
type = defaultType;
}
this.highDrill.push(type);
highDrill.push(type);
}
this._highDrillMap.set(b, highDrill);
}
}
@ -67,17 +82,24 @@ export class DrillingStore extends BoardEdgesEditor
{
if (!commandMachine.CommandStart("排钻属性编辑"))
return;
let typeSet = new Set(this.highDrill);
let boardData = this.Board.BoardProcessOption;
for (let [b,] of this._brMap)
{
let data = this._highDrillMap.get(b);
let typeSet = new Set(data);
let boardData = b.BoardProcessOption;
//批量编辑排钻时不改变正反面是否排钻
if (this._boardList.length == 1)
{
boardData.frontDrill = this.upDownIsdrill[0];
boardData.backDrill = this.upDownIsdrill[1];
boardData.highDrill = this.highDrill;
}
boardData.highDrill = data;
if (typeSet.size > 1)
boardData.drillType = DrillType.More;
else
boardData.drillType = this.highDrill[0];
this.highDrill = undefined;
boardData.drillType = data[0];
}
this._highDrillMap = new WeakMap();
commandMachine.CommandEnd();
}
}

@ -8,12 +8,16 @@ import { RightTabId } from "../../Components/RightPanel/RightPanel";
import { AppToaster } from "../../Components/Toaster";
import { IHighSealedItem } from "../BoardInterface";
import { BoardEdgesEditor } from "./BoardEdgesEditor";
import * as React from 'react';
import { Board } from "../../../DatabaseServices/Entity/Board";
import { EBoardKeyList } from "../../../Common/BoardKeyList";
import { log } from "util";
export class SealingStore extends BoardEdgesEditor
{
@observable highSizes: string[] = [];
protected async InitData()
async InitData()
{
let data = await PostJson(ConfigUrls.Get, { key: RightTabId.Seal }, false);
if (data.err_code === RequestStatus.Ok && data.value)
@ -29,49 +33,70 @@ export class SealingStore extends BoardEdgesEditor
protected InitCurve()
{
let cus = this.Board.ContourCurve.Explode() as Curve[];
let totalHighSeals: Set<number> = new Set();
for (let br of this._boardList)
{
let cus = br.ContourCurve.Explode() as Curve[];
//曲线分段
paragraphCulist(cus);
//替换曲线列表
this.CurveList = cus;
let highseals = this.Board.BoardProcessOption.highSealed;
let highseals = br.BoardProcessOption.highSealed;
if (highseals.length === cus.length)
{
for (let i = 0; i < highseals.length; i++)
{
let s = highseals[i];
let color = s.color;
this.CurveList[i].ColorIndex = color;
totalHighSeals.add(s.size);
let color = [...totalHighSeals].indexOf(s.size) + 1;
cus[i].ColorIndex = color;
this.highSizes[color - 1] = s.size.toString();
}
}
else
{
this.CurveList.forEach(cu => cu.ColorIndex = 1);
totalHighSeals.add(1);
let color = [...totalHighSeals].indexOf(1) + 1;
cus.forEach(cu => cu.ColorIndex = color);
}
this._brMap.set(br, cus);
}
}
protected ShowToaster()
{
AppToaster.show({
message: React.createElement('div', {}, [
"正在编辑封边,", React.createElement('br'), "点击<写入>写入封边数据到板件,",
React.createElement('br'), "点击<保存>保存当前封边数据,",
React.createElement('br'), "点击<退出>退出编辑状态",
]),
timeout: 0,
});
}
async SaveHighSizes()
{
await PostJson(ConfigUrls.Edit, { key: RightTabId.Seal, value: JSON.stringify(this.highSizes) });
}
private data: IHighSealedItem[];
private _dataMap: WeakMap<Board, IHighSealedItem[]> = new WeakMap();
protected ParseData()
{
this.data = [];
for (let cu of this.CurveList)
for (let [b, cus] of this._brMap)
{
let data: IHighSealedItem[] = [];
for (let cu of cus)
{
const color = cu.ColorIndex;
if (color > this.highSizes.length)
{
AppToaster.show({
message: color + "号色未设置数据",
timeout: 1500
})
this.data = null;
break;
log(color + "号色未设置数据,默认为1");
data.push({ size: 1 });
}
else
{
const size = this.highSizes[color - 1];
this.data.push({ size: parseFloat(size), color });
data.push({ size: parseFloat(size) });
}
}
this._dataMap.set(b, data);
}
}
@ -79,8 +104,19 @@ export class SealingStore extends BoardEdgesEditor
{
if (!commandMachine.CommandStart("封边属性编辑"))
return;
this.Board.BoardProcessOption.highSealed = this.data;
this.data = undefined;
for (let [b,] of this._brMap)
{
let data = this._dataMap.get(b);
b.BoardProcessOption.highSealed = data;
if (!b.IsSpecialShape)
{
b.BoardProcessOption[EBoardKeyList.DownSealed] = data[0].size.toString();
b.BoardProcessOption[EBoardKeyList.LeftSealed] = data[1].size.toString();
b.BoardProcessOption[EBoardKeyList.UpSealed] = data[2].size.toString();
b.BoardProcessOption[EBoardKeyList.RightSealed] = data[3].size.toString();
}
}
this._dataMap = new WeakMap();
commandMachine.CommandEnd();
}

Loading…
Cancel
Save