Developing a parametric wardrobe generator using AutoLISP — looking for feedback Body:

Hello fellow developers,

I’m working on a project to automate custom wardrobe and cabinetry design in BricsCAD, built primarily using AutoLISP. The goal is to create a robust, parametric tool that generates customizable furniture assemblies, handles internal partitioning, and outputs precise geometry for manufacturing.

Since the LISP community here has incredible experience with CAD automation, I’d love to ask a few technical questions or spark a discussion:

  • For those handling complex parametric generation via LISP, do you lean more towards standard DCL for UI, or have you found better ways to handle highly dynamic inputs within BricsCAD?
  • How do you best manage performance when regenerating multiple complex blocks or 3D solids/regions dynamically?

I would appreciate any tips, architectural advice, or thoughts from anyone who has built similar parametric tools in the past.

Thanks in advance for sharing your experience!

Comments

  • ALANH
    edited June 16

    For me I use DCL's. Give these a try they are free to use just ask that you leave my name in code, can be used in any code. There is sample code in each lisp. Just make sure you svae them in a support path location. I have more like 2 column radio buttons.

    You can convert a dcl into lisp code, using the RLX program.

    Obviously can take advantage of dcl with child dcl's.

    Another

    Did make a write dcl code from a dwg using blocks to represent the dcl objects.

    I should have mentioned I insert a dynamic block and then populate a dcl with the variables you can change, this way your not using question after question or properties to set values.

  • As someone who has been down this path before, I would choose another language besides lisp. Eventually, you’re going to want Palettes with Drag and Drop, Jigs, better access to 3D solids, Regions with BRep, external databases etc. C# / .NET is a good choice.

    If you insist on Lisp, then OpenDCL is the GOTO for a great looking UI

  • Thanks AlanH, this is very useful.

    I am currently building a parametric wardrobe/cabinet engine in AutoLISP. At this stage I want to keep the calculation/build logic inside my own central engine, but I can definitely see DCL being useful as an input layer, especially to avoid asking the user question after question in the command line.

    I will test your multi radio buttons / toggles / getvals approach as a UI adapter for entering parameters, while keeping the actual geometry rules, validation gates and build logic separate.

    Of course, if I use your code or adapt parts of it, I will keep your name in the code as requested.

    Do you know if these DCL examples work cleanly in BricsCAD as well, or have you mainly tested them in AutoCAD?

  • ALANH
    edited June 17

    I run 99% Bricscad so yes they work. I use a trick of writing the dcl to a file remove the (vla-delete fname) then use the RLX make lisp code, it takes a little bit of thinking but that is how I make complex dcl's like image above that has getval, radio and toggle. All code in the lisp. Using Sliders can be useful, as shown in the child Dcl.

    Using Opendcl is way more powerful and the only reason I don't use for my clients is they have to install the run time, sometimes the end user struggles, biggest problem is their IT, then can be barely able to install lisps.

    I have an install method can help with that its based around a lisp and a ZIP file, yes lisp can extract a zip file.

    I am not going to go into it but in the house program above all objects are drawn on end user layers, where I worked we had a simple text file with proglayer clientlayer color linetype and some smarts but that will cost you.

    If it takes off then a higher level language is worth looking into, the house program is like 130 lisps.

    I know using VBA forms is way smarter than dcl's but be wary of VBA.

    This cleans your temp directory say of junk dcl's.

  • Thanks for sharing these insights and the cleanuptemp.lsp routine! You hit the nail on the head regarding the real-world deployment of CAD tools.

    Your point about avoiding OpenDCL and VBA due to user-end IT restrictions is spot on. While OpenDCL is powerful, forcing a runtime installation on a locked-down corporate machine can kill a project before it even starts. Pure LISP/DCL generated on the fly is absolutely bulletproof for deployment.

    The UI examples you posted look fantastic. The table dialog in image_48003f.png shows how clean a native DCL can look with proper image integration, and the grid library in image_480096.png is a great reminder of how powerful slide menus can be when handling multiple component variations.

    The ZIP extraction trick natively via LISP sounds like a brilliant way to package custom toolkits without relying on complex installers. Also, handling client layer mapping through an external text file is the gold standard for professional workflows—it makes total sense that it's a proprietary part of your system.

    Really appreciate you showing these examples and sharing your workflow philosophy!

    Best regards,

    zen

  • I agree with Daniels comments. Most developments in this area are done in a way that they aren't tied to any particular CAD platform.

    If you're looking to create a LISP solution, then you could look to SOZ-LIVE for inspiration. It takes an object orientated approach to LISP programming, which lends itself to what you're looking to do.

    Jason Bourhill

    CAD Concepts Ltd

    cadconcepts.co.nz

  • zen
    zen
    edited June 17

    Hi Jason,

    Thank you for your feedback.

    I agree with your point about not tying the core development too closely to one CAD platform. In my case, the current implementation is being developed and tested in BricsCAD with AutoLISP, because that is the environment I use in production, but I am trying to keep the furniture logic separate from the CAD-specific drawing layer.

    The idea is to keep the wardrobe/joinery rules — modules, drawers, shelves, rods, clearances, variants and validation — as structured data and logic, while the CAD layer only creates, updates and checks the geometry.

    Thank you also for pointing me toward SOZ-LIVE. I will study that more carefully, especially the object-oriented approach in LISP. That sounds very relevant to avoiding a large procedural script that becomes difficult to maintain as the system grows.

    Best regards,
    Zenon

  • Hi Jason,

    Thank you for the recommendation! I actually had a great smile reading your comment because I am the creator and developer behind SOZ-LIVE.

    Hearing an industry expert suggest my own framework as a solid example of an object-oriented approach to LISP is the ultimate compliment. It perfectly validates that the architectural philosophy I’ve been building into it is hitting the right notes in the CAD community.

    You and Daniel make an excellent point about platform independence. That is exactly why I designed SOZ-LIVE this way—to ensure the core parametric logic can scale and adapt smoothly without being hard-coded to a single environment.

    Thanks again for the support and the shout-out to my project!

    Best regards,
    Zenon

  • zen
    zen
    edited June 18
    EN V2B34 — Parametric CAD/CAM Furniture Engine — open to custom AutoLISP work

    We are building a central parametric CAD/CAM engine for wardrobes, walk-in closets and built-in furniture. Instead of drawing every wardrobe manually, the user changes parameters and the engine rebuilds the 3D model: cabinet body, shelves, drawers, hanging rods, filler panels, plinths and, later, automatic dimensions on layout sheets, plans and sections.

    The project is developed in BricsCAD / AutoLISP. The current focus is correct geometry, construction rules, variants, safe rebuilds and a stable central engine. CNC, BOM and cutting lists are planned later.

    What the system can control

    The model supports wardrobes with or without an internal partition. It can work as an M1 / M2 layout with a P1 partition, or as a full wardrobe without a partition.

    The system can change:

    • width, height and depth,
    • partition on / off,
    • single or double shelves,
    • automatic or manual shelf positions,
    • automatic or manual drawer fronts,
    • drawer box depth adjusted to cabinet depth and runners,
    • hanging rods under a shelf or positioned manually,
    • filler panels and plinths,
    • thicknesses of sides, shelves, backs, fronts and other elements.

    A key locked rule is:

    SHELF_ABOVE_Z1 = highest drawer front Z2 + 30 mm

    This rule works for both M1 and M2.

    Current stable checkpoint

    Current PASS file:

    SZ01_MASTER_V2B34_V8_V12_MASTER_V26E_FIXB_REKA_AUTO_MIX_POLKA_ZAWSZE_30_PASS.dwg

    This file has DBMOD = 0 and is the current rollback point.

    Confirmed in this checkpoint:

    • M1 shelf above drawers: highest drawer Z2 = 472, shelf Z1 = 502, gap = 30 mm,
    • M2 shelf above drawers: highest drawer Z2 = 732, shelf Z1 = 762, gap = 30 mm,
    • 6 drawer fronts,
    • 12 drawer box sides,
    • 6 drawer bottoms,
    • 6 drawer backs,
    • 2 shelves above drawers,
    • 8 ordinary shelves,
    • 2 hanging rods,
    • 4 drawer-side filler panels,
    • 4 support bases,
    • 4 internal side panels,
    • P1, BCT, SZ02 and SZ03 protected.

    Project demonstration

    The system can show three wardrobes standing next to each other in one built-in wall. After changing parameters, the same wall can rebuild with different widths, heights and internal layouts.

    Example:

    • before: height about 2300 mm, widths 1200 / 1000 / 800 mm,
    • after: height about 2600 mm, widths 800 / 1200 / 1000 mm.

    The transformation can change lower shelves into a hanging rod, replace single shelves with double shelves, change drawer quantity, use different drawer front heights, and add rods in different modes.

    This is not manual redrawing. The goal is: change parameters, rebuild the model.

    Single wardrobe parameter table

    Area

    Change

    Mode

    Result

    Cabinet body

    width, height, depth

    manual / preset

    new overall size

    Partition

    on / off

    switch

    M1/M2 or full wardrobe

    Shelves

    quantity, height, type

    automatic / manual

    rebuilt shelf layout

    Double shelves

    on / off

    automatic / manual

    double shelf system

    Drawers

    quantity, front heights

    automatic / manual

    rebuilt drawer package

    Shelf above drawers

    position

    rule-based

    always 30 mm above top drawer

    Rods

    position

    under shelf / manual

    hanging zone

    Filler panels

    on / off, width

    switch / value

    side package update

    Plinth

    on / off, height

    switch / value

    base update

    Thicknesses

    boards, backs, fronts

    mm values

    geometry rebuild

    Runners

    nominal standard

    automatic

    drawer depth adjustment

    Planned global changes

    Global scope

    Change

    Project-wide effect

    Materials and thicknesses

    board and element parameters

    update all wardrobes

    Fronts

    material, thickness, type

    consistent design

    Runners

    nominal standard

    drawer depths recalculated

    Fillers and plinths

    global on / off

    consistent built-in layout

    Shelves

    single / double

    shelf systems rebuilt

    Drawers

    quantity and front heights

    drawer packages rebuilt

    Rods

    under shelf / manual

    hanging zones rebuilt

    Layout sheets

    automatic dimensions

    old dimensions removed, new ones created

    Whole project

    multiple wardrobes at once

    global control, not one wardrobe only

    Next plans

    Next we will run operator-input tests: the LSP asks for values, the user enters real parameters, and the engine validates the result. This will test manual drawer heights, manual shelf positions, automatic shelves, rods, dimension changes and the locked 30 mm shelf-above-drawers rule.

    After M1/M2 tests, we plan to transfer the same logic to a fresh FULL wardrobe without a partition. Later we want global changes for the whole project and automatic dimensions in layouts, plans and sections.

    Future expansion

    The engine may later support:

    • kitchen furniture,
    • internal doors,
    • decorative wall panels,
    • wall panels with mirrors,
    • wardrobe fronts with aluminium frame + glass,
    • wardrobe fronts with aluminium frame + mirror,
    • routed fronts and other front systems.

    The goal is one central parametric engine, not separate scripts for every product type.

    Final direction

    We are building a V8–V12 central engine for parametric wardrobes and furniture built-ins. A parameter change should rebuild the model, not require manual drawing repair. This is the foundation for wardrobes, walk-in closets, full wardrobes, partitioned wardrobes, corner wardrobes, kitchens, doors, wall panels and front systems.