A slider can keep one value inside a range, but a product is safe only when the relationships between its inputs remain valid. A narrow organizer may support two compartments but fail with six. A scraper can keep every control-point (CP) variable inside its individual range while the combined profile becomes too thin or unusable.

A safe parameter space is the set of combinations that preserve geometry, printability, fit, strength, cost assumptions, and the product promise.

This article continues Parametric Goods: From Customer Choice to Printable Product with a general method for controlling a product family. Text-specific rules remain in Text as Geometry.

A range is not a design rule

If a project exposes three independent variables, their minimum and maximum values define a box of possible inputs. For width (w), count (n), and wall thickness (t), that unconstrained box is

Pbox=[wmin,wmax]×[nmin,nmax]×[tmin,tmax].P_{box}=[w_{min},w_{max}]\times[n_{min},n_{max}]\times[t_{min},t_{max}].

Only part of that box may represent products worth manufacturing. The safe region is the subset whose design conditions all remain true:

Psafe={pPboxC1(p),C2(p),,Ck(p) are satisfied}.P_{safe}=\{p\in P_{box}\mid C_1(p),C_2(p),\ldots,C_k(p)\text{ are satisfied}\}.

The conditions might preserve a minimum compartment width, keep a support over the base, retain enough material around a hole, or hold estimated print time below the option sold in the listing. Some conditions are geometric, while others come from the printer, material, hardware, or business process.

This is why moving every slider through its range is an incomplete test. The important failures often live at intersections: maximum count with minimum width, maximum device size with minimum footprint, or minimum thickness with the largest unsupported span.

Separate order inputs from construction variables

A product generator becomes easier to reason about when its variables have distinct jobs.

Variable class Purpose Organizer example Seller interaction
Order input Represents a customer choice or listing variation tray width, tray depth, compartment count Entered for each order
Production setting Represents a tested manufacturing decision wall thickness, corner radius Usually left at a validated preset
Derived variable Calculates construction geometry from other values divider count, divider spacing, usable width Visible for diagnosis but not edited routinely
Validation signal Reports whether a requirement is satisfied minimum compartment width passed Checked before export

The seller should enter the order, not reconstruct the model. If a three-compartment tray needs two dividers, the project should derive dividerCount = compartmentCount - 1. If changing wall thickness reduces usable space, divider spacing should update from the remaining interior width.

Derived variables make the model explainable. They turn hidden geometric consequences into quantities the maker can inspect when a result looks wrong.

Custom-Fit Organizer: Inputs and Derived Structure
Project

Custom-Fit Organizer: Inputs and Derived Structure

@p12/Custom-Fit Organizer Tray
Custom-Fit Organizer: Inputs and Derived Structure
Custom-Fit Organizer: Inputs and Derived Structure

Change the organizer dimensions, wall thickness, and compartment count; verify that usable space and divider structure update together.

@p12/Custom-Fit Organizer Tray
Change the organizer dimensions, wall thickness, and compartment count; verify that usable space and divider structure update together.

Local, relational, and state-dependent constraints

Not every rule has the same shape. Treating constraints by type makes them easier to encode and test.

Local constraints apply to one value. A wall may never be thinner than the tested process minimum, a compartment count must be an integer, and a CP variable may stay within a documented range. These rules map naturally to slider bounds, steps, and select options.

Relational constraints compare values. For an organizer,

wusable=wtray2twall,wcompartment=wusable(n1)tdividern.w_{usable}=w_{tray}-2t_{wall},\qquad w_{compartment}=\frac{w_{usable}-(n-1)t_{divider}}{n}.

If the product promise requires a minimum usable compartment width wminw_{min}, then the important rule is not simply compartmentCount <= 6. It is wcompartmentwminw_{compartment}\geq w_{min}. The maximum safe count changes with tray width and wall thickness. Scraper CP variables have the same dependency problem: each value may be locally valid while the combined result violates minimum thickness, overall bounds, or another production limit.

State-dependent constraints become active only for a mode or option. A key-ring clearance matters when the attachment option includes a ring. A reinforced scraper spine matters only when that construction mode is selected. A second line of text activates spacing and total-height rules that a one-line product does not need.

Local limits shape individual controls. Relational and state-dependent rules define the real product family.

Prevent, adapt, or flag

When a combination approaches a failure, the model needs an intentional response.

Response Use it when Example Risk
Prevent The invalid region is known and should never be ordered Limit compartment count when cells would become too narrow Can hide why an option disappeared
Adapt A derived feature can change without violating the product promise Derive scraper control points from a requested tip rise while preserving the minimum neck Adaptation may change material, dimensions, or appearance
Flag The rule is uncertain or requires human judgment Warn when control points approach a reversal or minimum-thickness limit Production must actually stop until reviewed

Prevention is strongest when the boundary is unambiguous. Adaptation is useful when the seller has already promised the adapted result—for example, a product whose body grows with the requested content. Flagging is honest when automatic validation cannot guarantee a decision.

Silent correction is often the worst response. If the seller enters six compartments and the project quietly produces five, the geometry may be printable while the order is wrong. A changed value should be visible, explained, or rejected.

Build a dependency graph, not a pile of controls

Each exposed input should have a traceable path to the geometry it controls:

order input → derived dimensions → constructed features → validation → export decision

Keep that path directional. User variables represent approved choices; node expressions connect them to geometry; hidden helpers calculate dependent dimensions. A validation result should never feed back silently and change the order into something else.

Clear names make the dependency readable. Use names based on purpose when possible, and expose only values that represent real choices.

A controlled parameter dependency chain
  1. Order input
  2. Derived dimensions
  3. Constructed features
  4. Validation checks
  5. Export decision

Connect control points to user variables

The scraper’s control points become configurator controls when selected coordinate fields are driven by user variables.

  1. Create a user variable for each coordinate that should be adjustable, such as cp1X, cp1Y, cp2X, and cp2Y.
  2. Give each variable a tested type, range, and step.
  3. In the profile properties, switch the corresponding control-point fields to expressions.
  4. Reference the variables directly:
Control Point 1 X = cp1X
Control Point 1 Y = cp1Y
Control Point 2 X = cp2X
Control Point 2 Y = cp2Y
  1. Test minimum, default, maximum, and opposing-extreme combinations.

Derive a coordinate instead of exposing it when it should follow another dimension—for example, cp2X = scraperLength * 0.65. The user variables define approved controls; the node expressions connect those controls to the actual fields.

Parametric Scraper: CP User Variables
Project

Parametric Scraper: CP User Variables

@p12/parametric-scraper
Parametric Scraper: CP User Variables
Parametric Scraper: CP User Variables

Adjust the exposed CP variables and observe how the bound control-point fields update the scraper. Test one variable at a time before trying boundary combinations.

@p12/parametric-scraper
Adjust the exposed CP variables and observe how the bound control-point fields update the scraper. Test one variable at a time before trying boundary combinations.

Test the corners of the parameter space

A good default proves very little. Validation should target the combinations most likely to expose relationships.

Start with single-variable boundaries: set each input to its minimum and maximum while holding the others at a normal value. Then test interaction boundaries, especially pairs known to compete for the same space or strength.

Product Stress combination Question
Organizer minimum tray width + maximum compartment count + maximum wall thickness Do all compartments retain their minimum usable width?
Organizer minimum height + maximum corner radius Does the cavity and rim remain coherent?
Scraper every CP variable at its minimum, then every CP variable at its maximum Does the profile remain valid and inside the approved product range?
Scraper opposing CP variables at opposite extremes Does the part retain the required thickness and working shape?

Exhaustively testing three states for ten variables would require 310=59,0493^{10}=59{,}049 combinations. Most sellers do not need to print that many parts. Prioritize boundary values, pairwise interactions, known worst cases, and any combination created by a sold listing variation.

Automated checks can examine expressions, solver errors, connected components, watertightness, dimensions, volume, and minimum thickness. Representative physical prints must still verify stiffness, edge quality, surface finish, warping, and functional use.

Geometrically valid is not production valid

Validation happens in layers.

  1. Expression validity: every dependency evaluates without missing names, division by zero, or an impossible dimension.
  2. Geometry validity: the result is nonempty, closed where required, connected as intended, and free of non-manifold or degenerate output.
  3. Manufacturing validity: walls, clearances, overhangs, spans, radii, and orientation fit the selected process and material.
  4. Functional validity: the product scrapes, holds, fits, labels, organizes, or attaches as promised.
  5. Order validity: the generated result matches the customer’s actual selections.

Passing an earlier layer does not imply passing the later ones. A watertight scraper can still have a blunt, weak, or backward working edge. A printable tray can contain compartments too small for the advertised objects. A correct generator can still receive the wrong order values.

A production decision should consider all five layers.

Expose fewer inputs than the model knows

A well-structured project may contain many variables, but the routine fulfillment interface should remain small.

Expose values that correspond to an order or a deliberate production choice. Keep helper dimensions derived. Show diagnostic expressions in the editor when they help the maker understand the result, but do not require them to be re-entered for every sale.

Presets can separate product variants that need different manufacturing assumptions. A small organizer and a large organizer may share a construction while using different validated wall, radius, and count limits. Material-specific presets can preserve different clearances without asking the seller to remember them.

The goal is not the greatest possible flexibility. It is the smallest set of controls that reliably produces the catalog being sold.

A practical Rig Cad pattern

Use this sequence for a seller-facing project:

  1. List the order inputs and production assumptions.
  2. Create primary variables with clear types, units, steps, and conservative bounds.
  3. Derive construction dimensions and write relational checks.
  4. Decide whether each failure should be prevented, adapted, or flagged.
  5. Test boundary combinations and save useful regression cases.
  6. Before export, compare the regenerated product with the order and record the project revision.

The scene tree constructs the product. The dependency and validation rules determine whether that construction belongs to the released family.

Know when the generator should stop production

Some failures should block export until the maker intervenes:

  • a required expression cannot be evaluated;
  • a dimension becomes zero or negative;
  • intended solids become disconnected;
  • a clearance or material web falls below its tested minimum;
  • the result exceeds the dimensions or option purchased;
  • a dependent feature moves outside its supporting body;
  • the geometry differs from the order preview; or
  • the combination has not been validated for the selected process.

A warning that everyone routinely ignores is not a safeguard. Make the stop condition specific, explain which values caused it, and suggest the permitted correction. If the combination can be produced only through custom engineering, treat it as a different service rather than forcing it through the routine product generator.

From a parameter space to a reliable catalog

Sliders are only the interface. The product system consists of user variables, node expressions, derived geometry, manufacturing assumptions, validation checks, and explicit failure policies.

The organizer demonstrates dependent repeated structure; the scraper demonstrates user variables bound to control-point fields. In both cases, the goal is a controlled family rather than the largest possible range of meshes.

Next, Fits, Clearances, and Tolerances for Customized 3D Prints attaches measured production limits to that safe region.

Continue the Parametric Goods series

The previous deep dive, Text as Geometry: Building Reliable Personalized Products, shows how one difficult input becomes controlled geometry. Next, Fits, Clearances, and Tolerances for Customized 3D Prints carries the safe parameter space into physical production. Return to Parametric Goods: From Customer Choice to Printable Product for the complete series path.