From a31bb73faa49bdf0aa73655284590117f8a715ee Mon Sep 17 00:00:00 2001 From: MrKBear Date: Sat, 9 Apr 2022 16:04:46 +0800 Subject: [PATCH] Move the size parameter to the renderer control --- source/GLRender/ClassicRenderer.ts | 6 ++--- source/Input/Parameter/Parameter.tsx | 13 ++++++++--- source/Localization/EN-US.ts | 1 + source/Localization/ZH-CN.ts | 1 + source/Model/CtrlObject.ts | 7 +++++- source/Model/Group.ts | 14 ++++++++---- source/Model/Model.ts | 10 +++------ source/Model/Range.ts | 11 +++++++++ source/Panel/GroupDetails/GroupDetails.tsx | 26 +++++++++++++++------- source/Panel/RangeDetails/RangeDetails.tsx | 18 +++++++++++++++ 10 files changed, 81 insertions(+), 26 deletions(-) diff --git a/source/GLRender/ClassicRenderer.ts b/source/GLRender/ClassicRenderer.ts index 935fb1f..801236e 100644 --- a/source/GLRender/ClassicRenderer.ts +++ b/source/GLRender/ClassicRenderer.ts @@ -29,11 +29,11 @@ class ClassicRenderer extends BasicRenderer { public override rendererParameterOption = {}; public override pointsParameterOption = { - color: { type: "color", name: "" }, - size: { type: "number", name: "Common.Attr.Key.Size" } + color: { type: "color", name: "", defaultValue: [0, 0, 0] }, + size: { type: "number", name: "Common.Attr.Key.Size", defaultValue: 60, numberStep: 10, numberMin: 0 } }; public override cubeParameterOption = { - color: { type: "color", name: "" }, + color: { type: "color", name: "", defaultValue: [0, 0, 0] }, }; private basicShader: BasicsShader = undefined as any; diff --git a/source/Input/Parameter/Parameter.tsx b/source/Input/Parameter/Parameter.tsx index 9ae2368..23bd4ab 100644 --- a/source/Input/Parameter/Parameter.tsx +++ b/source/Input/Parameter/Parameter.tsx @@ -10,7 +10,7 @@ import { ColorInput } from "@Input/ColorInput/ColorInput"; import { ComboInput, IDisplayItem } from "@Input/ComboInput/ComboInput"; import { IParameter, IParameterOption, IParameterOptionItem, - IParameterValue, IParamValue, isObjectType, isVectorType + IParameterValue, IParamValue, isObjectType } from "@Model/Parameter"; import "./Parameter.scss"; @@ -20,6 +20,7 @@ interface IParameterProps

{ key: ObjectID; change: (key: K, val: IParamValue) => any; i18n?: (key: string, language: Language) => string; + renderKey?: Array; title?: AllI18nKeys; titleOption?: Record; isFirst?: boolean; @@ -249,12 +250,18 @@ class Parameter

extends Component & IMi } public render(): ReactNode { - const allOptionKeys: Array = Object.getOwnPropertyNames(this.props.option); + let allOptionKeys: Array; + if (this.props.renderKey) { + allOptionKeys = this.props.renderKey; + } else { + allOptionKeys = Object.getOwnPropertyNames(this.props.option); + } + return <> { - allOptionKeys.length <= 0 && this.props.title ? + allOptionKeys.length > 0 && this.props.title ? { // 渲染 for (let i = 0; i < this.objectPool.length; i++) { let object = this.objectPool[i]; + object.renderParameter.color = object.color; if (object.display && object instanceof Group) { - this.renderer.points(object.id, object.exportPositionData(), { - color: object.color, - size: object.size - } as any); + this.renderer.points(object.id, object.exportPositionData(), object.renderParameter); } if (object.display && object instanceof Range) { - this.renderer.cube(object.id, object.position, object.radius, { - color: object.color - } as any); + this.renderer.cube(object.id, object.position, object.radius, object.renderParameter); } } } diff --git a/source/Model/Range.ts b/source/Model/Range.ts index f6a0191..197b30c 100644 --- a/source/Model/Range.ts +++ b/source/Model/Range.ts @@ -1,4 +1,6 @@ import { CtrlObject } from "@Model/CtrlObject"; +import { Model, ObjectID } from "@Model/Model"; +import { getDefaultValue } from "@Model/Parameter"; /** * 范围 @@ -15,6 +17,15 @@ class Range extends CtrlObject { */ public radius: number[] = [1, 1, 1]; + public constructor(model: Model, id: ObjectID) { + + super(model, id); + + if (model.renderer) { + this.renderParameter = getDefaultValue(model.renderer.cubeParameterOption); + } + } + } export default Range; diff --git a/source/Panel/GroupDetails/GroupDetails.tsx b/source/Panel/GroupDetails/GroupDetails.tsx index 495daf2..299bc9e 100644 --- a/source/Panel/GroupDetails/GroupDetails.tsx +++ b/source/Panel/GroupDetails/GroupDetails.tsx @@ -13,6 +13,7 @@ import { AllI18nKeys } from "@Component/Localization/Localization"; import { ObjectPicker } from "@Input/ObjectPicker/ObjectPicker"; import { ConfirmPopup } from "@Component/ConfirmPopup/ConfirmPopup"; import { BehaviorPicker } from "@Input/BehaviorPicker/BehaviorPicker"; +import { Parameter } from "@Input/Parameter/Parameter"; import "./GroupDetails.scss"; interface IGroupDetailsProps {} @@ -54,14 +55,6 @@ class GroupDetails extends Component - { - this.props.status?.changeGroupAttrib(group.id, "size", (val as any) / 1); - }} - /> - + + key !== "color") + } + change={(key, value) => { + group.renderParameter[key as any] = value; + this.props.status?.changeGroupAttrib( + group.id, "renderParameter", group.renderParameter + ); + }} + /> diff --git a/source/Panel/RangeDetails/RangeDetails.tsx b/source/Panel/RangeDetails/RangeDetails.tsx index e2f0e2a..efe8eeb 100644 --- a/source/Panel/RangeDetails/RangeDetails.tsx +++ b/source/Panel/RangeDetails/RangeDetails.tsx @@ -8,6 +8,7 @@ import { ColorInput } from "@Input/ColorInput/ColorInput"; import { TogglesInput } from "@Input/TogglesInput/TogglesInput"; import { LabelPicker } from "@Input/LabelPicker/LabelPicker"; import { ConfirmPopup } from "@Component/ConfirmPopup/ConfirmPopup"; +import { Parameter } from "@Input/Parameter/Parameter"; import "./RangeDetails.scss"; @useStatusWithEvent("rangeAttrChange", "focusObjectChange", "rangeLabelChange") @@ -72,6 +73,23 @@ class RangeDetails extends Component { }} /> + key !== "color") + } + change={(key, value) => { + range.renderParameter[key as any] = value; + this.props.status?.changeRangeAttrib( + range.id, "renderParameter", range.renderParameter + ); + }} + /> +