!2564 新增:裤杆绘制功能支持按最小间距生成对应数量的裤杆

pull/2578/MERGE
黄诗津 8 months ago committed by ChenX
parent aa17bcd3b4
commit 62df610b24

@ -774,6 +774,8 @@ export const DefaultUpdateInfoOption: IUpdateBoardInfosOption = {
Object.freeze(DefaultUpdateInfoOption);
export const DefaultKuGanOption: IKuGangDrawOption = {
insertMode: "0",
minSpacing: 50,
count: 1,
isHor: false,
depth: 0,

@ -1,10 +1,10 @@
import { Checkbox, Classes, Label, Spinner } from '@blueprintjs/core';
import { Checkbox, Classes, Label, Radio, RadioGroup, Spinner } from '@blueprintjs/core';
import { observable } from 'mobx';
import { observer } from 'mobx-react';
import * as React from 'react';
import { CheckObjectType } from '../../../Common/CheckoutVaildValue';
import { KuGanStore } from '../../Store/KuGanStore';
import { ToasterInput } from '../Toaster';
import { observable } from 'mobx';
interface IKuGanDetailProps
{
@ -32,24 +32,52 @@ export class KuGanDetail extends React.Component<IKuGanDetailProps> {
return <Spinner />;
return (
<div className="kugan">
<div className="flex">
<Label className={Classes.INLINE}>
<span>:</span>
<ToasterInput
optKey="count"
option={option}
uiOption={store.UIOption}
type={CheckObjectType.BR}
<div className='insert-mode'>
<RadioGroup
inline={true}
selectedValue={option.insertMode}
className='flex-col'
onChange={(e) =>
{
option.insertMode = e.currentTarget.value;
}}
>
<Radio style={{ marginBottom: 23 }} value={"0"} />
<Radio value={"1"} />
</RadioGroup>
<div className="inlabel" style={{ width: 129 }}>
<Label className={Classes.INLINE}>
<span>:</span>
<ToasterInput
optKey="count"
option={option}
isDisabled={option.insertMode !== "0"}
uiOption={store.UIOption}
type={CheckObjectType.BR}
/>
</Label>
<Label className={Classes.INLINE}>
<span>:</span>
<ToasterInput
optKey="minSpacing"
option={option}
isDisabled={option.insertMode !== "1"}
uiOption={store.UIOption}
type={CheckObjectType.GT0Num}
/>
</Label>
</div>
<div>
<Checkbox
checked={option.isHor}
style={{ margin: 0 }}
inline
label="横插"
onChange={() => option.isHor = !option.isHor}
/>
</Label>
<Checkbox
checked={option.isHor}
inline
label="横插"
onChange={() => option.isHor = !option.isHor}
/>
</div>
</div>
<div className="flex">
<div className="flex inlabel">
<Label className={Classes.INLINE}>
<span>:</span>
<ToasterInput
@ -62,12 +90,13 @@ export class KuGanDetail extends React.Component<IKuGanDetailProps> {
</Label>
<Checkbox
checked={option.isDefault}
style={{ marginLeft: 25 }}
inline
label="默认(板厚一半)"
onChange={() => option.isDefault = !option.isDefault}
/>
</div>
<div className="flex">
<div className="flex inlabel">
<Label className={Classes.INLINE}>
<span>{option.isHor ? "前距:" : "左距:"}</span>
<ToasterInput
@ -87,7 +116,7 @@ export class KuGanDetail extends React.Component<IKuGanDetailProps> {
/>
</Label>
</div>
<div className="flex">
<div className="flex inlabel">
<Label className={Classes.INLINE}>
<span></span>
<ToasterInput

@ -185,26 +185,52 @@
.kugan {
margin-top: 20px;
&>div {
.inlabel {
&>label {
display: flex;
align-items: center;
text-align: left;
flex: 1;
}
&>label:first-child {
span {
&>:nth-child(1) {
width: 60px;
margin-right: 10px;
}
margin-right: 10px;
}
.bp3-checkbox {
margin: 0;
}
}
.insert-mode{
display: flex;
align-items: center;
.bp3-radio {
margin: 0;
}
label {
display: flex;
align-items: center;
text-align: left;
flex: 1;
&>:nth-child(1) {
width: 55px;
margin-right: 0;
}
}
.bp3-popover-wrapper {
margin: 0;
input {
margin: 0;
}
}
}
}
.delete-selete {

@ -370,7 +370,7 @@ export class TemplateManage extends React.Component<ITemplateManage, {}> {
{
kuGanStore.Upload();
const option = kuGanStore.option;
const { isHor, isDefault, leftDist, rightDist, depth, upDist, downDist } = option;
const { isHor, isDefault, leftDist, rightDist, depth, upDist, downDist, insertMode } = option;
const kuGanSpace = new TemplateRecord().InitBaseParams();
kuGanSpace.Name = "裤杆空间";
app.Database.TemplateTable.Append(kuGanSpace);
@ -396,12 +396,45 @@ export class TemplateManage extends React.Component<ITemplateManage, {}> {
kugan.HParam.expr = "";
kugan.PZParam.expr = "_H*0.5";
let count = option.count + 1;
if (leftDist && rightDist)
count = option.count - 1;
else if (leftDist || rightDist)
let drawCount: number; //绘制数量
let spacingCount: number; //相同间隔数量
if (insertMode === "0")
{
drawCount = option.count;
spacingCount = option.count + 1;
if (leftDist && rightDist)
spacingCount = option.count - 1;
else if (leftDist || rightDist)
{
spacingCount = option.count;
}
}
else if (insertMode === "1")
{
count = option.count;
const minSpacing = option.minSpacing;
if (minSpacing <= 0)
{
AppToaster.show({
message: "最小间隔值要大于零",
timeout: 5000,
intent: Intent.WARNING,
});
return;
}
let L = isHor ? space.Size.y : space.Size.x;
drawCount = Math.floor(L / minSpacing) - 1;
spacingCount = drawCount + 1;
if (leftDist && rightDist)
{
drawCount = Math.ceil((L - leftDist - rightDist) / minSpacing) + ((L - leftDist - rightDist) % minSpacing === 0 ? 1 : 0);
spacingCount = drawCount - 1;
}
else if (leftDist || rightDist)
{
drawCount = Math.floor((L - (leftDist ? leftDist : rightDist)) / minSpacing);
spacingCount = drawCount;
}
}
this.SetRootCabName(kugan, space);
@ -413,7 +446,7 @@ export class TemplateManage extends React.Component<ITemplateManage, {}> {
else if (downDist)
udExpr = downDist.toString();
}
for (let i = 0; i < option.count; i++)
for (let i = 0; i < drawCount; i++)
{
let kg = app.Database.WblockCloneObejcts([kugan], app.Database.TemplateTable, new Map(), DuplicateRecordCloning.Ignore)[0] as TemplateRecord;
kg.PYParam.expr = isDefault ? "-_BH*0.5" : -depth;
@ -425,7 +458,7 @@ export class TemplateManage extends React.Component<ITemplateManage, {}> {
{
let expr = leftDist ? `${leftDist}+` : "";
expr += (leftDist || rightDist) ? (`(_L${leftDist ? ("-(" + leftDist + ")") : ""}${rightDist ? ("-(" + rightDist + ")") : ""})`) : "_L";
expr += `/${count}*${leftDist ? i : (i + 1)}`;
expr += `/${spacingCount}*${leftDist ? i : (i + 1)}`;
kg.PXParam.expr = expr;
}
if (udExpr)

@ -1,6 +1,8 @@
export interface IKuGangDrawOption
{
insertMode: string;
minSpacing: number;
count: number;
isHor: boolean;
depth: number;

Loading…
Cancel
Save