One of the most exciting projects I’ve worked on at Onshape has been our Feature Studio, a development environment for building custom CAD features using FeatureScript – Onshape’s open-source programming language built from scratch for modeling in 3D. After watching my teammates build creative new features using FeatureScript, I became fascinated with the idea of using custom features for modeling more than just mechanical parts and systems. Custom features provide an opportunity to create any context-specific design language for creating 3D models, and with the Feature Studio environment we built, this opportunity is available to any Onshape user.

I was inspired to create my own custom CAD features after my recent move to Hawaii to be closer to my aging parents. I will be building a house near my mom and dad, and I’m currently designing my floor plan. I’m aiming to optimize the usability of the interior living space, while minimizing my building costs. And as I explore the design space, I want to be able to visualize some of the optimizations I’m considering. Creating features to build my floor plan in 3D has helped me explore and answer some of my design layout thoughts and questions.

My first approach to visualizing the floor plan was to model the building and then split the building into rooms. This design language contains “Start building,” “Room,” and “Finish building” features in the feature list (see below). This is in contrast to standard mechanical CAD design language features like “Extrude” and “Shell.” One of my goals was to have the feature list represent the conceptual design specific to designing a house. Even though the underlying geometry uses the same functionality as our standard Extrude and Shell features to create this 3D model, there are no Extrude or Shell features in the feature list. These implementation details are hidden within the custom features in the Feature Studio, so I can focus on the floor plan design when I’m working in the Part Studio.

Screenshot of home layout that starts with determining the size of the rooms first. The design was created with FeatureScript, Onshape's open-source programming language that lets you easily create custom CAD features.

The initial “building-first” approach with “Start building,” “Room,” and “Finish building” features.

This approach seemed to work initially, but after using it, I realized it did not allow me to optimize what I really cared about or help me answer some of my most pressing design questions.

So I went back to the drawing board and created a whole new set of features to enable a “furniture and walk space first” design approach (versus a “building-first” design approach). Rather than starting with a building and rooms, I started by modeling the furniture and walk spaces around them, using “Furniture” features and “Walk Space” features (notice the “walk spaces” below in translucent blue). This gave me the opportunity to be intentional about designing the workflow of a space. Of all the spaces in my floor plan, the most challenging were the ones with more requirements and constraints. Let’s take a look at some of those challenges...

The Kitchen

My significant other and I enjoy cooking together. I am the “prep-chef,” so I interact mostly with the refrigerator, sink, and a counter with a cutting board and mixing bowls. My significant other is the “cook-chef,” so he takes the ingredients I’ve prepared and interacts mostly with the cooktop, oven, and to a smaller degree, the dishwasher and sink. The usual rules of thumb for an efficient “working triangle” in kitchen design – where the sink, refrigerator, and stove form a triangle – don’t quite fit our 2-person workflow. Our vision is more of an assembly line:

  1. Prep-chef starts with ingredients from the refrigerator
  2. Prep-chef processes ingredients using the sink and prep island
  3. Cook-chef takes ingredients from the prep island and processes them using the oven or cooktop
  4. Cook-chef serves the hungry mouths sitting hibachi-style around the cooktop island (this includes the prep-chef who always starts and finishes her tasks before the cook-chef)

So what is our ideal kitchen layout?

Screenshot of a kitchen layout that is built around the designer's love for cooking side by side with her significant other. The design was created with FeatureScript, Onshape's open-source programming language that lets you easily create custom CAD features.

An “assembly line” kitchen layout for 2 chefs, each with their own “working triangle.”

Activity Space

I enjoy sewing and crafts. I have three sewing machines, a large table-sized cutting mat, a host of other sewing/craft tools, and a collection of supplies. In our last house, these items were stuffed in closets or under other furniture, making it difficult and inconvenient to work on projects. I prefer to do these activities socially rather than alone, and this lack of space was even more apparent when I had friends or family visit for sewing time. My significant other had a dedicated garage for his woodshop, but I didn’t have a dedicated creative space of my own. One of our goals going forward is to make sure that we both have the creative spaces that we need to flourish.

Another consideration for the activity space is that we both enjoy board games, often the kind we want to leave set up for a while. So we would like to have a dedicated activity table (i.e., not the dining room table) to reduce conflicts between eating and games/projects. So what is our ideal activity space layout?

Screenshot of an activity room that the designer created to accommodate her sewing machines and craft supplies. The design was created with FeatureScript, Onshape's open-source programming language that lets you easily create custom CAD features.

Activity space with easy access to sewing machines and enough space for social activities (sewing, crafts, games, etc.)

The Bedrooms

We are hoping to start a family, so we need our floor plan to be flexible enough to accomodate us as our needs change over the years. We also both work remotely, so we need an effective office space. What are the minimum dimensions and overall size for a room that would be comfortable for any of the purposes we may need: an office, a child’s bedroom, or a guest bedroom? Based on some different layouts I’ve tried, it seems like a 12’ x 11’ room with a 28-inch closet added along one wall would be both flexible and comfortable:

Screenshot of the layout for a child's bedroom that the designer wants to build around her favorite furniture. The design was created with FeatureScript, Onshape's open-source programming language that lets you easily create custom CAD features.

One possible layout of a child’s bedroom.

Screenshot of layout for a 2-person office using a

One possible layout for a 2-person office.

Screenshot of layout for a guest bedroom using a

One possible layout for a guest bedroom.

The Closets

We like to buy our food and supplies in bulk, so we have a lot of “stuff.” But we also have a strong aversion to clutter, so we need a lot of closet space. I like walk-in closets for their extra storage, but I don’t like the extra floor space they consume. Not only is it more expensive to build the extra square footage, but it is more space I have to vacuum or sweep.

How can I maximize storage space while minimizing floor space (i.e. reduce “wasted” space in the floor plan)? This is a tricky task. One idea I explored is repurposing the existing “wasted space” from a hallway that emerged from joining the four bedrooms together. I couldn’t seem to avoid this hallway in my single-story-living-space layout, where I wanted to keep the bedrooms somewhat private from the common spaces (so the bedroom doors don’t open directly into a common space). So I made this hallway wider and lined it with cabinets designed for specific purposes: pantry, linens, and cleaning supplies. On one side, I added deep cabinets, deep enough to accommodate large items (like cereal boxes and vacuum cleaners). On the other side, I added shallow closets, so small items are easy to see and access (like canned goods and washcloths).

Screenshot of the home designer's layout for maximizing storage space in the hallway between bedrooms. The design was created with FeatureScript, Onshape's open-source programming language that lets you easily create custom CAD features.

A hallway that doubles as a walk-in pantry, linen closet and cleaning supply closet.

After combining the groups of furniture together and placing walls using the “Wall” features, the building’s shape and dimensions finally emerged. I had a much better sense of how much space is ideal and how it can best all fit together in a master layout.

Screenshot of importing the kitchen design into the overall home layout. The design was created with FeatureScript, Onshape's open-source programming language that lets you easily create custom CAD features.

Combining the “furniture and walkspace first” spaces into an emergent floor plan: Here the kitchen is being imported.

Screenshot of a proposed home layout using a

The completed floor plan using the “furniture and walkspace first” approach with “Furniture,” “Walk space,” and “Wall” features.

Using these custom features to create a full layout has given me a chance to really think through and visualize the spaces and how I want to use them. It has also given me the confidence that I’m building spaces that will be very comfortable and functional while also being cost effective. This is the biggest investment of my life, and it can be overwhelming to think about. Using these custom features as part of my design process has made a big difference toward making sure I can get all the details right, especially for considering what features are the most important and meaningful to me.

After many years of working to build up the Onshape platform as an employee, it has been really satisfying to be able to use the platform as a user to design the ideal house for my family. I’m excited to see these models turn into reality as I start building my dream home!