
Pascal Editor 节点数字参数字段怎么设置 min/maxSliderControl 字段限制规范【免费下载链接】editorOpen-source 3D architectural editor with a local CLI, MCP tools, and practical workflows for humans and AI agents.项目地址: https://gitcode.com/GitHub_Trending/editor93/editor当你为 Pascal Editor 开发新的节点 kind、或给现有节点新增一个数字参数字段时每个字段都要决定写不写min/max、写什么值。这套约束写死在仓库的 wiki/architecture/inspector-field-limits.md 中适用于packages/nodes/src/**/parametrics.ts、packages/nodes/src/**/panel.tsx以及任何SliderControl用法。本文按这份规范说明字段边界的写法并用仓库中已存在的字段作为可对照的例子。min/max 在 SliderControl 里到底是什么先看组件行为再谈限制规范。SliderControl的定义在 slider-control.tsx它是一个 scrub 式数字输入不是 range slider。拖动标签应用的是步进增量每 4 px 一个 step即(dx / 4) × step见 slider-control.tsx#L187按住 Shift 步进 ×10Ctrl/Meta/Alt ×0.1滚轮和方向键同样按 step 步进。min/max不参与拖拽交互。组件内默认值为Number.NEGATIVE_INFINITY/Number.POSITIVE_INFINITYslider-control.tsx#L57-L58唯一的用途是 clampslider-control.tsx#L95输入的越界值在提交时被钳到边界上而且是静默的不会报任何错。这意味着 max 永远不能让交互更顺它只能挡住用户。规范由此给出结论max 要谨慎给min 只表达有效性。判定规则哪类字段给边界规范 Rules 一节给出的判定顺序物理尺寸永远不要用典型值封顶。墙长不是 20 m屋顶跨度不是 25 m。尺寸类字段width / height / depth / length / span / thickness / spacing / diameter单位米统一用max: 1000——一个没有人会合法输入到的值但能在粘贴错值或手滑的数字产生退化几何spatial grid、阴影、bake之前拦下来。如果连 typo 都无害直接省略max。位置和偏移不给静态边界。min/max整体省略。尤其不要把 scrub 窗口value ± N喂给min/max——那会把 UI 便利变成对输入值的隐藏钳制。min 只表达有效性。尺寸需要一个小的正值下限通常 0.01–0.1 m让零/负几何无法存在。min 绝不能编码典型值——规范点名了旧墙min: 1.5拦掉合法的女儿墙和花园墙的教训。动态几何边界是鼓励的。从节点本身或其宿主推导出来的边界表达真实有效性应当保留例如门宽使用按类型计算的maxDoorWidth、曲线矢高 ≤ 弦长、屋顶附件位置落在分段面上、橱柜柜体 ≥ 最高模块。非尺寸字段保留边界。数量rows、posts、steps、louvers——它们成倍增加生成的几何上限是性能护栏、百分比与 0–1 分数、角度范围pitch、tilt、opening、旋转 −180..180。写法一parametrics.ts 字段描述符节点的检查器字段可以在packages/nodes/src/kind/parametrics.ts中用描述符声明类型ParametricDescriptor定义在 types.ts#L2369。以 wall 节点为例wall/parametrics.ts 原文摘录export const wallParametrics: ParametricDescriptorWallNode { groups: [ { label: Dimensions, fields: [ { key: thickness, kind: number, unit: m, min: 0.05, max: 1000, step: 0.01 }, { key: height, kind: number, unit: m, min: 0.1, max: 1000, step: 0.05 }, { key: curveOffset, kind: number, unit: m, min: -3, max: 3, step: 0.05 }, ], }, ], customPanel: () import(./panel), }对照规则thickness和height是尺寸min 取小正值、max 取 1000curveOffset是曲线偏移而非尺寸因此给了对称的 ±3 边界。window 节点window/parametrics.ts同样是min: 0.3, max: 1000, step: 0.05。注意文件里保留了customPanel当字段是派生值由其他属性算出或需要条件可见时自动检查器表达不了该文件就退回自定义 panel。新加字段前先看同 kind 是否已有customPanel有则直接在 panel 里加。写法二panel.tsx 中直接使用 SliderControl自定义 panel 的节点直接渲染SliderControlmin、max、precision、step、unit都是 propprecision默认 0step默认 1。door 节点door/panel.tsx展示了三种典型写法// 动态边界按门类型计算[door/panel.tsx#L349](https://link.gitcode.com/i/d1965194d6a47e7d1abeb9ef930fdbee#L349) const maxDoorWidth isGarageDoor ? 6 : 3SliderControl labelWidth max{maxDoorWidth} min{0.5} onChange{(v) handleUpdate({ width: v })} precision{2} restoreOnCommit{false} step{0.05} unitm value{node.width} /同一个 panel 里其他字段与规则的对应关系高度尺寸min{1.0} max{1000}车库门开启百分比min{0} max{100} unit%属于百分比保留边界车库门板数量数量min{3} max{8} step{1}属于数量护栏。有意豁免不要顺手改掉的边界规范单独列了四类例外评审时不要按max: 1000去统一它们MEP 英寸字段duct、pipe、lineset、HVAC collars边界对应真实的商用规格有领域含义橱柜 run 宽度3 m宽度驱动自动生成的柜体模块上限是几何数量护栏不是口味问题Item 尺寸30 m 包络与 studio 的 item builder 和 bake 上限绑定要改去那边改不在字段上改Detail knobsbevel、inset、overhang、flange、rail、sill、trim可以有界——它们参数化的是形状极端值产生自相交几何而不是更大的合法物体。规范还说明生成周期性子物体的长度gutter hangers、fence posts、downspout straps会随数值放大实例数量这个开销用户可见且可撤销不构成重新引入上限的理由。验证与评审口径行为验证对设了边界的字段输入一个越界值再提交值会被静默钳到边界上。这是期望行为而不是 bug——规范明确指出 max 的唯一作用就是钳制输入 9999 后值没变正是 clamp 在工作。评审标准规范最后一条要求新 kind 和新字段都遵循这些规则PR review should reject static maxes on dimension fields。评审若要求你移除某个 max按上面的顺序判断该字段属于尺寸、位置/偏移还是豁免项尺寸保留max: 1000并检查 min 是否为小正值位置类字段直接删掉min/maxMEP 英寸、橱柜 run 宽度、item 尺寸、detail knobs 四类保留现状。【免费下载链接】editorOpen-source 3D architectural editor with a local CLI, MCP tools, and practical workflows for humans and AI agents.项目地址: https://gitcode.com/GitHub_Trending/editor93/editor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考