diff --git a/src/UI/Components/RightPanel/TemplateParam.less b/src/UI/Components/RightPanel/TemplateParam.less index 24c07b17a..1b1697621 100644 --- a/src/UI/Components/RightPanel/TemplateParam.less +++ b/src/UI/Components/RightPanel/TemplateParam.less @@ -5,8 +5,11 @@ .bp3-tree{ height: 100%; overflow: auto; - .bp3-tree-node-content{ - height: 20px; + .bp3-tree-node-list{ + width: fit-content; + .bp3-tree-node-content{ + height: 20px; + } } } } @@ -15,6 +18,22 @@ .bp3-input{ width: 5rem; } + .rotateExpress{ + display: flex; + justify-content: space-around; + } + .bp3-numeric-input{ + padding: 0; + height: unset; + line-height: unset; + .bp3-button-group.bp3-vertical>.bp3-button{ + width: 20px; + } + .bp3-input{ + padding-left: 10px; + width: 4rem; + } + } &>div { input { height: 30px; diff --git a/src/UI/Components/RightPanel/TemplateParamPanel.tsx b/src/UI/Components/RightPanel/TemplateParamPanel.tsx index 4334df0a5..abf577bef 100644 --- a/src/UI/Components/RightPanel/TemplateParamPanel.tsx +++ b/src/UI/Components/RightPanel/TemplateParamPanel.tsx @@ -1,4 +1,4 @@ -import { Button, Classes, ContextMenu, H5, Intent, ITreeNode, Menu, MenuItem, Tree } from "@blueprintjs/core"; +import { Button, Classes, ContextMenu, H5, Intent, ITreeNode, Menu, MenuItem, Tree, NumericInput } from "@blueprintjs/core"; import { observable } from "mobx"; import { observer } from "mobx-react"; import React from "react"; @@ -18,6 +18,8 @@ import { TemplateRecord } from "../../../DatabaseServices/Template/TemplateRecor import { TemplateSplitType } from "../../../DatabaseServices/Template/TemplateType"; import { CommandWrap } from "../../../Editor/CommandMachine"; import { INeedUpdateParams } from "../Template/TemplateComponent"; +import { SelectSetBase } from "../../../Editor/SelectBase"; +import { KeyBoard } from "../../../Common/KeyEnum"; interface TemplateParamState { @@ -28,6 +30,11 @@ interface TemplateParamProps { selectTemplateId: number; } +enum OutlineType +{ + This = 0, + Child = 1, +} @observer export class TemplateParamPanel extends React.Component @@ -41,6 +48,9 @@ export class TemplateParamPanel extends React.Component) { super(props); @@ -83,6 +93,7 @@ export class TemplateParamPanel extends React.Component @@ -167,9 +186,13 @@ export class TemplateParamPanel extends React.Component { <> + { this.OutlineSpace(node, OutlineType.This) }} + /> { this.OutlineSpaceChild(node) }} + onClick={() => { this.OutlineSpace(node, OutlineType.Child) }} /> + //亮显节点 + OutlineSpace = (node: ITreeNode, type: OutlineType) => { app.Editor.SelectCtrl.Cancel(); let tr = node.nodeData as TemplateRecord; - let treeNodes = this.GetAllChildFromThisTemplate(tr); let outlineObj3ds: Object3D[] = []; - for (let tn of treeNodes) + switch (type) { - for (let t of tn.Objects) - { - let obj3d = t.Object as Entity; - outlineObj3ds.push(obj3d.DrawObject); - } + case OutlineType.This: + for (let t of tr.Objects) + { + let obj3d = t.Object as Entity; + outlineObj3ds.push(obj3d.DrawObject); + } + break; + case OutlineType.Child: + let treeNodes = this.GetAllChildFromThisTemplate(tr); + for (let tn of treeNodes) + { + for (let t of tn.Objects) + { + let obj3d = t.Object as Entity; + outlineObj3ds.push(obj3d.DrawObject); + } + } + break; + default: + break; } - app.Viewer.OutlinePass.selectedObjects = outlineObj3ds; - app.Editor.UpdateScreen(); + let selectData = new SelectSetBase(app.Viewer); + selectData.m_SelectList = outlineObj3ds; + app.Editor.SelectCtrl.AddSelect(selectData); + app.Editor.SelectCtrl.UpdateView(); } //切割空间 待完善 @@ -307,6 +345,7 @@ export class TemplateParamPanel extends React.Component {/* 模板树 */}
this.scrollCard = el} className="template-tree" > { + @observable basePtVals = { PX: "0", PY: "0", PZ: "0" }; + @observable rotateVals = { RX: "0", RY: "0", RZ: "0" }; + private paramdef = this.props.currentShowTemplate.GetParameterDefinition();; + componentDidMount() + { + this.basePtVals = { PX: this.paramdef.PX, PY: this.paramdef.PY, PZ: this.paramdef.PZ }; + this.rotateVals = { RX: this.paramdef.RX, RY: this.paramdef.RY, RZ: this.paramdef.RZ }; + + } + componentDidUpdate(prevProps) + { + if (prevProps.currentShowTemplate !== this.props.currentShowTemplate) + if (this.props.currentShowTemplate instanceof TemplateRecord) + { + this.paramdef = this.props.currentShowTemplate.GetParameterDefinition(); + this.basePtVals = { PX: this.paramdef.PX, PY: this.paramdef.PY, PZ: this.paramdef.PZ }; + this.rotateVals = { RX: this.paramdef.RX, RY: this.paramdef.RY, RZ: this.paramdef.RZ }; + } + } + private onKeydown = async (e: React.KeyboardEvent, par: INeedUpdateParams) => + { + if (e.keyCode === KeyBoard.Enter) + { + let dt = new Date().getTime(); + if (dt - ot < 200 && dt - ot > 0) + { + if (this.handleOnBlur(par)) + await this.ApplyNewValue(); + } + ot = dt; + } + e.stopPropagation() + } ApplyNewValue = async () => { const { currentShowTemplate, callback } = this.props; @@ -347,7 +419,7 @@ export class TemplateParamDetail extends React.Component<{ updateParams: INeedUp { let param = currentShowTemplate.GetParam(par.name); param.expr = par.expr; - }); + }) await currentShowTemplate.UpdateTemplateTree(); }, "应用参数修改"); callback(); @@ -371,6 +443,25 @@ export class TemplateParamDetail extends React.Component<{ updateParams: INeedUp return "Z"; } } + handleOnBlur = (par: INeedUpdateParams) => + { + if (par.expr !== "") + { + let newVal = safeEval(par.expr as string, this.paramdef); + let param = this.props.currentShowTemplate.GetParam(par.name); + if (!isNaN(newVal)) + { + param.expr = par.expr; + return true; + } + else + { + app.Editor.Prompt(`表达式 ${par.name}: ${par.expr} 中存在未定义值`); + return false; + } + } + return true; + } public render() { const { currentShowTemplate } = this.props; @@ -393,9 +484,18 @@ export class TemplateParamDetail extends React.Component<{ updateParams: INeedUp {FixedNotZero(par.value, 2)} {par.description} { this.onKeydown(e, par) }} className={Classes.INPUT} value={par.expr as string} onChange={e => par.expr = e.target.value as string} + onBlur={(e) => + { + let res = this.handleOnBlur(par); + if (!res) + e.target.classList.add("bp3-intent-danger"); + else + e.target.classList.remove("bp3-intent-danger"); + }} /> ) @@ -415,9 +515,24 @@ export class TemplateParamDetail extends React.Component<{ updateParams: INeedUp ) @@ -425,7 +540,7 @@ export class TemplateParamDetail extends React.Component<{ updateParams: INeedUp }
旋转角度表达式
-
+
{ this.props.updateParams.map(par => { @@ -433,10 +548,29 @@ export class TemplateParamDetail extends React.Component<{ updateParams: INeedUp return ( )