!2406 功能:矩形画板件收口条模板分上左右模板

pull/2435/MERGE
黄诗津 12 months ago committed by ChenX
parent bb437e4b35
commit e352d67bd7

@ -39,6 +39,7 @@ export class Rec2BrModal extends React.Component<{ store: Rec2BrStore; }, {}>
if (e.keyCode === KeyBoard.Enter || e.keyCode === KeyBoard.Space)
this._CheckTemp().then(() =>
{
const { m_Option } = this.props.store;
if (this.props.store.m_Option.drillType === "")
{
let selectOptions = userConfig.DrillConfigs.size > 0 ? [...userConfig.DrillConfigs.keys(), "不排"] : [];
@ -47,7 +48,16 @@ export class Rec2BrModal extends React.Component<{ store: Rec2BrStore; }, {}>
if (this.props.store.m_Option.backBrUseTemplate && !this.props.store.m_Option.backBrTemplateId)
{
AppToaster.show({
message: "请选择模板!",
message: "请选择背板模板!",
timeout: 5000,
intent: Intent.WARNING
});
return;
}
if (m_Option.useSktTemplate && !m_Option.sktTemplateId && !m_Option.rightSktTemplateId && !m_Option.topSktTemplateId)
{
AppToaster.show({
message: "请选择收口条模板!",
timeout: 5000,
intent: Intent.WARNING
});
@ -120,6 +130,7 @@ export class Rec2BrModal extends React.Component<{ store: Rec2BrStore; }, {}>
render()
{
const store = this.props.store;
const { m_Option } = store;
const selectOptions = userConfig.DrillConfigs.size > 0 ? [...userConfig.DrillConfigs.keys(), "不排"] : [];
return (
<div
@ -164,7 +175,7 @@ export class Rec2BrModal extends React.Component<{ store: Rec2BrStore; }, {}>
});
return;
}
if (this.props.store.m_Option.useSktTemplate && !this.props.store.m_Option.sktTemplateId)
if (m_Option.useSktTemplate && !m_Option.sktTemplateId && !m_Option.rightSktTemplateId && !m_Option.topSktTemplateId)
{
AppToaster.show({
message: "请选择收口条模板!",
@ -200,7 +211,7 @@ export class Rec2BrModal extends React.Component<{ store: Rec2BrStore; }, {}>
{
if (this.props.store.m_Option.backBrUseTemplate && this.props.store.m_Option.backBrTemplateId && this.props.store.m_Option.backBrTemplate === null)
{
let backBrTemp = await GetOnlineTemplate(this.props.store.m_Option.backBrTemplateId);
let backBrTemp = await GetOnlineTemplate(this.props.store.m_Option.backBrTemplateId, [], false);
if (!backBrTemp)
{
AppToaster.show({
@ -214,20 +225,33 @@ export class Rec2BrModal extends React.Component<{ store: Rec2BrStore; }, {}>
this.props.store.m_Option.backBrTemplate = backBrTemp;
}
if (this.props.store.m_Option.useSktTemplate && this.props.store.m_Option.sktTemplateId && this.props.store.m_Option.sktTemplate === null)
const { m_Option: option, SktTemplates } = this.props.store;
if (option.useSktTemplate)
{
let sktTemp = await GetOnlineTemplate(this.props.store.m_Option.sktTemplateId);
if (!sktTemp)
const CheckSkt = async (direction: string, templateId: string, template: string) =>
{
AppToaster.show({
message: "你保存的收口条模板已丢失,请重新选择模板后保存配置!",
timeout: 5000,
intent: Intent.DANGER
});
this.props.store.m_Option.sktTemplateId = "";
if (option[templateId])
{
let sktTemp = await GetOnlineTemplate(option[templateId], [], false);
if (!sktTemp)
{
AppToaster.show({
message: "你保存的" + direction + "收口条模板已丢失,请重新选择模板后保存配置!",
timeout: 5000,
intent: Intent.DANGER
});
option[templateId] = "";
}
else
SktTemplates[template] = sktTemp;
}
};
const sktTemplate = [["左", "sktTemplateId", "sktTemplate"], ["右", "rightSktTemplateId", "rightSktTemplate"], ["上", "topSktTemplateId", "topSktTemplate"]];
for (const [direction, templateId, template] of sktTemplate)
{
await CheckSkt(direction, templateId, template);
}
else
this.props.store.m_Option.sktTemplate = sktTemp;
}
}
}

@ -38,6 +38,8 @@ export class ParseBoardName extends Component<IParseBoardProps>
["knifeRadius", "刀半径"],
["grooveAddLength", "槽加长"], ["grooveAddWidth", "槽加宽"], ["grooveAddDepth", "槽加深"]
];
private sktTemplate = [["左", "sktTemplateId", "sktTemplate"], ["右", "rightSktTemplateId", "rightSktTemplate"], ["上", "topSktTemplateId", "topSktTemplate"]];
rec2BrStore = Rec2BrStore.GetInstance();
render()
{
@ -307,38 +309,63 @@ export class ParseBoardName extends Component<IParseBoardProps>
store.UIOption.isAloneStripName = store.m_Option.isAloneStripName;
}}
/>
</div>
</div >
{
isR2B && <div style={{ display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
isR2B && (store instanceof Rec2BrStore) &&
<div style={{ display: "flex", flexDirection: "column", justifyContent: "space-between" }}>
<Checkbox
checked={(store as Rec2BrStore).m_Option.useSktTemplate}
checked={store.m_Option.useSktTemplate}
style={{ marginBottom: 0 }}
label={"使用收口条模板"}
onChange={() =>
{
let option = (store as Rec2BrStore).m_Option;
let uiOption = (store as Rec2BrStore).UIOption;
let option = store.m_Option;
let uiOption = store.UIOption;
option.useSktTemplate = !option.useSktTemplate;
uiOption.useSktTemplate = uiOption.useSktTemplate;
}}
/>
<Button
text={(store as Rec2BrStore).m_Option.sktTemplateId ? "已选择模板" : "未选择模板"}
intent={(store as Rec2BrStore).m_Option.sktTemplateId ? Intent.PRIMARY : Intent.NONE}
style={{ marginLeft: 135, marginTop: -6, position: "absolute" }}
onClick={async () =>
<div style={{ margin: "5px 0" }}>
{
let modal = app.Editor.ModalManage.CurrentModal;
let tempalteStore = TempalteEditorStore.GetInstance();
app.Editor.ModalManage.RenderModeless(TemplateManage, { tempalteStore, R2bReplace: { isR2bReplace: true } });
this.sktTemplate.map(([direction, templateId, template]) =>
{
return (
<div
key={templateId}
style={{ margin: 1 }}
>
<Button
text={store.m_Option[templateId] ? `已选择${direction}收口模板` : `未选择${direction}收口模板`}
intent={store.m_Option[templateId] ? Intent.PRIMARY : Intent.NONE}
onClick={async () =>
{
let modal = app.Editor.ModalManage.CurrentModal;
let tempalteStore = TempalteEditorStore.GetInstance();
app.Editor.ModalManage.RenderModeless(TemplateManage, { tempalteStore, R2bReplace: { isR2bReplace: true } });
let state = await app.Editor.ModalManage.Wait();
modal.Focus();
if (state.Status !== ModalState.Ok)
return;
(store as Rec2BrStore).m_Option.sktTemplateId = state.Data.tempId;
(store as Rec2BrStore).m_Option.sktTemplate = state.Data.temp;
}}
/>
let state = await app.Editor.ModalManage.Wait();
modal.Focus();
if (state.Status !== ModalState.Ok)
return;
store.m_Option[templateId] = state.Data.tempId;
store.SktTemplates[template] = state.Data.temp;
}}
/>
<Button
text={'清除'}
intent={Intent.DANGER}
style={{ marginLeft: 2 }}
onClick={() =>
{
store.m_Option[templateId] = "";
store.SktTemplates[template] = null;
}}
/>
</div>);
})
}
</div>
</div>
}
</div>

@ -105,11 +105,12 @@ export class Polyline2Board implements Command
footThickness: number;
stripThickness: number;
useSktTemplate: boolean;
sktTemplate: TemplateRecord;
leftSktTemplate: TemplateRecord;
rightSktTemplate: TemplateRecord;
topSktTemplate: TemplateRecord;
InitData(store: Rec2BrStore)
{
let option = store.m_Option;
const { m_Option: option, SktTemplates } = store;
this.boardThick = option.cabinetBrThick;//18;
this.boardDepth = option.cabinetDeep;//300;
this.fontDis = option.cabinetCurtail;//0;
@ -126,7 +127,9 @@ export class Polyline2Board implements Command
this.backDownExtend = option.backBrDownExtend;//0;
this.isMultiBackCab = option.isMultiBackBr;
this.useSktTemplate = option.useSktTemplate;//false;
this.sktTemplate = option.sktTemplate;
this.leftSktTemplate = SktTemplates.sktTemplate;
this.rightSktTemplate = SktTemplates.rightSktTemplate;
this.topSktTemplate = SktTemplates.topSktTemplate;
//材料信息
this.knifeRadius = safeEval(store.UiGrooveOption.knifeRadius);
this.grooveDepth = safeEval(store.UiGrooveOption.grooveAddDepth);
@ -194,6 +197,7 @@ export class Polyline2Board implements Command
let allBoards: Board[] = [];
let layerVerBoards: Board[] = this.DrawBoard(otherPls, false);
let skts: Board[] = [];//收口条
let sktDris = [];//收口条方向
let tzdj = this.DrawBoard(facePls, false, 4);//条子或地脚板
allBoards.push(...tzdj);
@ -472,7 +476,7 @@ export class Polyline2Board implements Command
}
}
//收口条
//收口条和地脚线
skts.push(...backs.filter(br => br.ColorIndex === 4));
let down = Infinity;
for (let br of skts)
@ -480,12 +484,35 @@ export class Polyline2Board implements Command
let p = br.MinPoint.applyMatrix4(spaceInv);
if (p.z < down) down = p.z;
}
//地脚线
//提取地脚线和收口条方向信息
arrayRemoveIf(skts, br =>
{
let isdjx = br.Width > br.Height && (br.MinPoint.applyMatrix4(spaceInv).z < bigBox.min.y + 6);
if (isdjx)
djxs.push(br);
const base = br.MinPoint.applyMatrix4(spaceInv);
let isdjx = false;
if (br.Width > br.Height)
{
if ((base.z < bigBox.min.y + 6))
{
djxs.push(br);
isdjx = true;
}
else
{
sktDris.push(["topSktTemplate", br]);
}
}
else
{
if (base.x < bigBox.min.x + 6)
{
sktDris.push(["leftSktTemplate", br]);
}
else
{
sktDris.push(["rightSktTemplate", br]);
}
}
return isdjx;
});
@ -701,14 +728,14 @@ export class Polyline2Board implements Command
}
}
if (this.useSktTemplate && this.sktTemplate)
if (this.useSktTemplate)
{
let newSktBoards: Board[] = [];
for (let i = 0; i < skts.length; i++)
for (const [tempName, en] of sktDris)
{
let en = skts[i];
let template = app.Database.WblockCloneObejcts([this.sktTemplate], app.Database.TemplateTable, new Map(), DuplicateRecordCloning.Ignore)[0] as TemplateRecord;
const temp = this[tempName];
if (!temp) continue;
let template = app.Database.WblockCloneObejcts([temp], app.Database.TemplateTable, new Map(), DuplicateRecordCloning.Ignore)[0] as TemplateRecord;
let pos = new PositioningBoardSpace();
pos.ObjectId = en.Id;

@ -83,7 +83,9 @@ export interface IRec2BrOption extends IParseBoardNameOption
footerThickness: number;
closeStripThickness: number;
useSktTemplate: boolean;
sktTemplateId: string;
sktTemplateId: string; //左收口条模板
rightSktTemplateId: string; //右收口条模板
topSktTemplateId: string; //上收口条模板
sktTemplate: TemplateRecord;
}

@ -26,6 +26,12 @@ export class Rec2BrStore extends BoardStore<IRec2BrOption>
return this.m_UiGrooveOption;
}
SktTemplates = {
sktTemplate: null,
rightSktTemplate: null,
topSktTemplate: null,
};
@action
InitOption()
{
@ -120,6 +126,12 @@ export class Rec2BrStore extends BoardStore<IRec2BrOption>
cof.option.sktTemplateId = "";
cof.option.sktTemplate = null;
}
if (cof.option.version < 8)
{
cof.option.version = 8;
cof.option.rightSktTemplateId = "";
cof.option.topSktTemplateId = "";
}
delete cof.option.grooveOption;
Object.assign(this.m_Option, cof.option);

@ -1108,9 +1108,9 @@ export function CheckTempalteParamName(name: string, nameSet: Set<string>)
return true;
}
export async function GetOnlineTemplate(tid: string, props?: ITemplateParam[]): Promise<TemplateRecord>
export async function GetOnlineTemplate(tid: string, props?: ITemplateParam[], isShowErrMsg = true): Promise<TemplateRecord>
{
let data = await PostJson(TemplateUrls.detail, { module_id: tid });
let data = await PostJson(TemplateUrls.detail, { module_id: tid }, isShowErrMsg);
if (data.err_code === RequestStatus.Ok)
{

@ -816,7 +816,7 @@ export const DefaultParseBoardNameOPtion: IParseBoardNameOption = {
Object.freeze(DefaultParseBoardNameOPtion);
export const DefaultR2bOption: IRec2BrOption = {
version: 7,
version: 8,
cabinetDeep: 400,
cabinetBrThick: 18,
cabinetCurtail: 0,
@ -857,7 +857,9 @@ export const DefaultR2bOption: IRec2BrOption = {
closeStripThickness: 18,
useSktTemplate: false,
sktTemplate: null,
sktTemplateId: ""
sktTemplateId: "",
rightSktTemplateId: "",
topSktTemplateId: "",
};
Object.freeze(DefaultR2bOption);
export const DefaultR2b2Option: IRect2Br2Option = {

Loading…
Cancel
Save