8000 Roadmap · gumyr/build123d Wiki · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Roadmap

Roger Maitland edited this page Jun 7, 2025 · 20 revisions

build123d Roadmap – Planned Major Features

The primary objective for release 1.0.0 of build123d is to establish a stable and robust API that users can rely on for long-term projects. Once this milestone is reached, the core API will be considered frozen—meaning that any non–backward compatible changes must go through a formal deprecation cycle, with clear warnings and transitional support. This deprecation policy is already followed in practice for certain changes and will become standard for all breaking modifications post-1.0.0. New features introduced in future versions, including those outlined in this roadmap, will extend the existing API without altering existing functionality, ensuring that user code continues to run unchanged unless deprecated elements are explicitly involved.

The following roadmap items are in no particular order.

BuildAssembly: Assembly System

A dedicated builder for constructing and managing complex assemblies.

  • Supports hierarchical assemblies with a tree structure of components.
  • Provides intuitive syntax for defining mechanical relationships using joints.
  • Automatically propagates motion: when a component moves, all its dependent children follow.
  • Components are easily accessible and referable by name for scripting, modification, or introspection.
  • Designed to scale to complex mechanical systems, such as robotic arms or gearboxes.
  • Automatic BOM generation.
  • Tracking: Issue #231

BuildSurface: Non-Planar Surface Modeling

A new builder for the creation of freeform and non-planar surfaces.

  • Intended to complement BuildPart and BuildSketch with surface-based workflows.
  • Facilitates operations like surface modeling, wrapping, trimming, lofting, and patching.
  • Ideal for organic shapes, aerodynamic surfaces, and aesthetic industrial design components.

Gordon Surface

A Gordon Surface is a smooth 3D surface generated by blending two sets of profile curves: one set in one parametric direction (e.g., "u") and another in the perpendicular direction ("v"). It generalizes Coons and lofted surfaces by allowing networks of intersecting curves — producing surfaces that interpolate both sets smoothly. It supports better control and fairness than simple lofts or Coons patches which makes it especially useful in aerodynamic design, surface modeling, and freeform fairing.

  • OpenCascade provides GeomAPI_GordonSurface, which can interpolate a network of Geom_Curves into a B-spline surface.
  • The core challenge is ensuring that input curves intersect properly and lie on a common grid.
  • Tracking: Issue #831

Surface Patch Creation

A surface patch is a parametric surface bounded by a set of edges or wires, forming a possibly non-planar, non-rectangular boundary. This operation generates a smooth surface that interpolates or approximates the bounding geometry. The goal of this item is to introduce a make_surface_patch method that accepts an input as a closed Wire or a list of Edges, forming a boundary loop. Optional tangent or positional continuity constraints and interior control points or guide curves help describe the patch. OpenCascade’s GeomFill_BSplineCurves, BRepFill_Filling, or GeomAPI_PointsToBSplineSurface can be used in this application.

  • Creating curved panels for industrial design
  • Filling holes or gaps in freeform models
  • Generating caps for revolved or swept geometry
  • Tracking: Issue #654

Geometric Dimensioning and Tolerancing (GD&T) System

An intelligent dimensioning assistant for technical drawings.

  • Automatically analyzes 2D sketches or projections to determine a minimal, fully constrained set of dimension lines.
  • Supports placement of extension lines and chained or baseline dimensions using layout rules.
  • Forms the basis for generating manufacturing drawings or guiding constraint systems.
  • Intended to reduce user effort in manual dimension specification while ensuring full geometric clarity.
  • Tracking: Issue #278

Experta is a lightweight, Python-native rule engine based on the Rete algorithm, making it a strong candidate for implementing drafting and dimensioning standards in a CAD system like build123d. It allows you to define rules declaratively using @Rule decorators and encode best practices such as “dimension all visible edges,” “avoid crossing extension lines,” or “prefer inside dimensions when clear.” These rules operate over facts, which can represent geometry (e.g., edges, holes, dimensions) extracted from your 2D drawings.

Since Experta is pure Python, it integrates cleanly with build123d geometry logic. You can use facts to track geometry and computed properties, and rules can call methods like a.intersect(b) or perform custom layout logic. The Rete algorithm ensures efficient matching even as the number of facts and rules grows.

While it lacks extensive documentation and is no longer actively maintained, its simplicity, transparency, and direct compatibility with Python code make it well-suited to building a symbolic, extensible expert system for intelligent, standards-compliant dimensioning decisions.

Projection System

A robust, general-purpose projection operator for 2D and 3D geometry.

  • Supports projection of edges, wires, or faces onto arbitrary target surfaces or planes.
  • Handles complex and curved projection targets without failure.
  • Designed to support use cases such as etching, engraving, trace geometry, and drafting views.
  • Tracking: Issue #149
  • Tracking: Issue #563

Integrated Constraint Solver

Adds symbolic and constraint-based modeling capabilities.

  • Enhances builders like BuildLine and BuildSketch to accept symbolic variables (sympy.Symbol) for dimensions and geometry.
  • Constraints such as lengths, angles, and alignments are resolved automatically when the builder finishes.
  • Enables parametric models that are adjustable after creation without needing manual recomputation.
  • Lays groundwork for constraint-based sketching and intelligent placement.
  • Tracking: Issue #169

Sheet Metal Tools

Dedicated tools and operators for sheet metal design and unfolding.

  • Adds support for common operations such as bends, hems, flanges, tabs, and reliefs.
  • Includes unfolding logic to generate flat patterns for laser cutting or CNC bending.
  • Incorporates a customizable K-factor or bend allowance model for realistic fabrication simulation.
  • Can export DXF or SVG flat patterns for CAM workflows.
  • Tracking: Issue #305

Intelligent Mirroring

Feature-aware mirroring system.

  • Goes beyond simple geometric mirroring by analyzing feature intent (e.g., fastener holes, fillets).
  • Ensures symmetry by replicating functional equivalents rather than just mirrored shapes.
  • Facilitates robust duplication of complex features like assemblies, cutouts, and patterns.
  • Integrates with metadata or naming to maintain mirrored relationships during updates.
  • Tracking: Issue #965

Material System

Provides a structured way to assign and track material properties.

  • Associates density, mechanical properties, and appearance with geometry.
  • Enables computation of mass properties (volume, weight, center of gravity, moments of inertia).
  • Supports custom material libraries and standardization.
  • May integrate with part metadata for BOM generation and simulation.
  • Tracking: Issue #598

Extended Proposal: Shared Material Data Package

To support reuse and standardization of material data across CAD and simulation tools, we propose the creation of a separate, open-source PyPI package dedicated to storing common material properties in a structured format.

Key Features:

  • Python package (e.g., material-data) that includes:

    • Physical properties: density, tensile strength, Young’s modulus, thermal conductivity, etc.
    • Visual appearance properties: base color, metallic, roughness — suitable for PBR rendering.
  • JSON-based format with a well-defined schema:

    • Lightweight, readable, and compatible with any Python application.
    • Easily extensible to include additional fields like emissive color, opacity, or index of refraction.
  • PBR values derived from the Three.js MeshStandardMaterial model, ensuring compatibility with glTF export and real-time renderers.

  • Physical properties potentially sourced from:

    • Curated values from engineering material databases (e.g., MatWeb, Matmatch).
    • Linked identifiers (where available) from the Materials Project, enabling traceability and scientific alignment.
  • Alias support for common names, UNS numbers, and trade designations (e.g., "6061-T6", "A96061", "Aluminum 6061").

  • Optional utility API for:

    • Querying by name or category.
    • Exporting data to other formats (e.g., .FCMat for FreeCAD, glTF-compatible material blocks, or tabular BOMs).

This package will support build123d's material system and enable consistent, high-quality material metadata for visualization, simulation, and documentation workflows across the open-source CAD ecosystem.

Example JSON Material Entry
{
  "6061": {
    "T6": {
      "den": {
        "val": 0.098,
        "unit": {
          "numerator": ["pound"],
          "denominator": ["inches_cubed"]
        },
        "source": "MatWeb",
        "notes": "Density at room temperature"
      },
      "yield_str": {
        "val": 35000,
        "unit": {
          "numerator": ["pound"],
          "denominator": ["inches_squared"]
        },
        "source": "MatWeb",
        "notes": "Typical for extruded shapes"
      },
      "ult_str": {
        "val": 38000,
        "unit": {
          "numerator": ["pound"],
          "denominator": ["inches_squared"]
        },
        "source": "MatWeb"
      },
      "elongation": {
        "val": 0.08,
        "unit": null,
        "notes": "8% elongation before fracture"
      },
      "moe": {
        "val": 10300000,
        "unit": {
          "numerator": ["pound"],
          "denominator": ["inches_squared"]
        },
        "source": "MatWeb",
        "notes": "Modulus of Elasticity"
      },
      "pr": {
        "val": 0.33,
        "unit": null,
        "source": "Matmatch"
      },
      "thermal_cond": {
        "val": 167,
        "unit": {
          "numerator": ["Watt"],
          "denominator": ["meter", "Kelvin"]
        },
        "source": "Matmatch"
      },
      "cte": {
        "val": 2.4e-5,
        "unit": {
          "numerator": ["1"],
          "denominator": ["Kelvin"]
        },
        "source": "ASM Handbook",
        "notes": "Coefficient of thermal expansion"
      },
      "appearance": {
        "base_color": [0.913, 0.921, 0.925],
        "metallic": 1.0,
        "roughness": 0.2
      },
      "meta": {
        "source": "KittyCAD, MatWeb, ASM",
        "license": "CC-BY-4.0",
        "notes": "Popular aerospace aluminum alloy"
      }
    }
  }
}
JSON Schema Definition
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/material.schema.json",
  "title": "Material Database Schema",
  "type": "object",
  "description": "Top-level dictionary of materials keyed by alloy name.",
  "patternProperties": {
    "^[a-zA-Z0-9 _\\-]+$": {
      "type": "object",
      "description": "Dictionary of tempers for the material",
      "patternProperties": {
        "^[a-zA-Z0-9 _\\-]+$": {
          "type": "object",
          "description": "Material properties for this alloy-temper",
          "properties": {
            "den": { "$ref": "#/$defs/scalarProperty" },
            "yield_str": { "$ref": "#/$defs/scalarProperty" },
            "ult_str": { "$ref": "#/$defs/scalarProperty" },
            "elongation": { "$ref": "#/$defs/scalarProperty" },
            "moe": { "$ref": "#/$defs/scalarProperty" },
            "pr": { "$ref": "#/$defs/scalarProperty" },
            "cte": { "$ref": "#/$defs/scalarProperty" },
            "thermal_cond": { "$ref": "#/$defs/scalarProperty" },
            "specific_heat": { "$ref": "#/$defs/scalarProperty" },
            "electrical_cond": { "$ref": "#/$defs/scalarProperty" },
            "hardness": { "$ref": "#/$defs/scalarProperty" },
            "fatigue_str": { "$ref": "#/$defs/scalarProperty" },
            "machinability": { "$ref": "#/$defs/scalarProperty" },
            "cost_index": { "$ref": "#/$defs/scalarProperty" },
            "corrosion": { "type": "string" },
            "appearance": {
              "type": "object",
              "properties": {
                "base_color": {
                  "type": "array",
                  "items": { "type": "number", "minimum": 0.0, "maximum": 1.0 },
                  "minItems": 3,
                  "maxItems": 4
                },
                "metallic": { "type": "number", "minimum": 0.0, "maximum": 1.0 },
                "roughness": { "type": "number", "minimum": 0.0, "maximum": 1.0 }
              },
              "required": ["base_color", "metallic", "roughness"]
            },
            "meta": {
              "type": "object",
              "properties": {
                "source": { "type": "string" },
                "license": { "type": "string" },
                "notes": { "type": "string" }
              }
            }
          }
        }
      }
    }
  },
  "$defs": {
    "scalarProperty": {
      "type": "object",
      "required": ["val"],
      "properties": {
        "val": { "type": "number" },
        "unit": {
          "type": "object",
          "properties": {
            "numerator": {
              "type": "array",
              "items": { "type": "string" }
            },
            "denominator": {
              "type": "array",
              "items": { "type": "string" }
            }
          },
          "required": ["numerator", "denominator"]
        },
        "source": { "type": "string" },
        "notes": { "type": "string" }
      }
    }
  }
}

BREP Convex Hull Operation

Adds a solid-level operation to compute the convex hull of BREP shapes.

  • Bridges computational geometry (point cloud convex hull) with CAD modeling (BRep solids).
  • Facilitates simplification, collision detection, or bounding geometry creation.
  • Implementation combines scipy.spatial.ConvexHull with OpenCascade’s face stitching tools.

Feature Recognition from Mesh Files

This feature enables the conversion of mesh-based geometry (e.g., STL or OBJ files) into high-level BREP representations by recognizing and reconstructing analytical surfaces—such as planes, cylinders, spheres, and cones—from tessellated input data. By analyzing the mesh for contiguous patches of triangles with similar curvature or orientation, the system can fit best-matching analytic surfaces to those regions using geometric fitting techniques. The resulting solid should remain watertight and suitable for downstream modeling as a fully editable, parametric BREP.

Implementation tools and techniques may include:

  • Geometric clustering and surface fitting algorithms (e.g., RANSAC, least squares).
  • Mesh segmentation using libraries such as Open3D, trimesh, or pymeshlab.
  • Surface reconstruction via OpenCascade tools (e.g., GeomAPI_PointsToSurface) or custom fitting.
  • Support for full round-tripping workflows: BREP → mesh export → recognition → BREP.
  • Tracking: Issue #103
0