lisa-marie mueller

lisa-marie mueller

bullet pont

BIM management

Tracking ROI


When putting time into the development of custom tools for your firm, it's critical to track usage and ROI. This week, take a look at how to incorporate traking this data into your plug-in.

Strategic Planning Part 2


Following up on my January Post, I discuss some lessons learned through the next stage of our process. I present my thoughts from two points of view: as a leader of the Automation team and as a team member of the Innovation and Maintenance teams.

Strategic Planning Part 1


While we set goals in our personal lives, we participate in Strategic Planning in our professional lives. This week I discuss some lessons learned from our first team-wide Design Technology group strategic planning session.

bullet pont

Curtain Wall Randomizer

WPF Sliders Part 2


This week, we look at some additional features you can add to the sliders in your UI with WPF including the option to lock and reset slider values.

WPF Sliders Part 1


This week, I discuss the use of sliders when creating your UI with WPF. We look at using multiple connected sliders and discuss setting slider values by moving the sliders and entering the quantity in a text box.

Input Validation for WPF User Interfaces


When you allow for users to select inputs to use in your plug-in it's important to confirm that elements are of the type that your program expects so you do not throw errors.

Delete Mullions


The method to delete the mullions is fairly simple but allows us to allow flexibility for a variety of uses.

Randomize Curtain Wall Panel Types


Now that we have all the valid types of panels, we can randomly select a type for each panel to change the material, color, or profile.

Get Valid Curtain Wall Panel Types


We're back to randomizing curtain walls. This week, we gather all the valid curtain wall panel types.

Randomly Delete Curtain Wall Grid Line Segments


This week create a random number generator and we randomly delete grid lines based on used entered probabilities.

Create Curtain Wall Panel Grid Lines


This week we look at how we can adjust the position of the curtain wall grids based on the minimum curtain wall panel width and height to create our horizontal and vertical grids.

Curtain Wall Panel Min and Max


After removing all the grids, we need to place new ones. This week, we take a look at which coordinates to use for placing the grids.

Delete Curtain Grid Lines


This week I start the next series looking at curtain walls. We start by figuring out how to delete all the grid lines in a CurtainGrid.

bullet pont

Material Tags

Place Material Tag


The last step is to place our material tags. We do run into one challange which is that the tags show with '?' until you nudge them in the view.

Tag Location Part 2


To make sure the tag falls within our interior elevation view, we check to see if the wall's endpoints are inside or outside of our view and adjust accordingly.

Tag Location Part 1


A simple way to find the center of the wall is to add the two endpoints of the wall's location curve and divide them by two.

Collect Elements In View


The first step to tagging our elements is collecting all the elements we need. This week we filter for interior elevation views and collect all the walls in those views.

bullet pont


Export OBJ Using C#


Guest writer Andreas Brake summarizes how to export an OBJ in C# based on the process we used in our hackathon project, StreamVR

Async Operations for Revit Plug-ins


Guest writer Andreas Brake discusses asynchronous operations in Revit plug-ins.

bullet pont

Python For Dynamo

Managing Data Types (python for Dynamo)


This week, I discuss one type of python node I use to manage data types more easily when working on Dynamo graphs.

bullet pont

Python for Dynamo

Filtering with Revit Parameters (python for Dynamo)


One task that can be challenging in Dynamo is filtering lists. This post covers how to filter lists based on parameter names and values. Copy and paste the code into a Python node and use it in your graphs.

bullet pont


Streaming information between the RevitAPI and a VR application (StreamVR)


I'm excited to welcome guest writer Andreas Brake to discuss the technical details of our VR application and Revit plug-in and share how we set up communication between the RevitAPI and StreamVR

Lessons Learned Developing a VR app in Unity in 7 Days (StreamVR)


This week I am discussing 3 lessons I learned from making a VR application in only 7 days for the ENGworks hackathon.

bullet pont


Format Selector - Read and Re-assign Properties


The final step to wrap up the series is to read the saved properties and re-assign these properties to a different TextNote.

Format Selector - Container to Save Properties


In order to allow us to save the text properties for future use, even after a user closes the Revit session, we can save out the data to a seperate file.

Format Selector - Text Properties


We take the first step to creating our format selector and painter by determining which text format items to save.

Change Text Case


I start looking at text formatting with the Revit API by putting together a plug-in that allows you to select TextNotes and make the text to all upper case.

bullet pont

Zero Touch Nodes

Webhook Node (to track ROI)


This week, review how to use a webhook in a Zero Touch Node to track script usage and ROI.

Custom Dropdown Menu (Part 2)


This week, we complete our custom dropdown menu Zero Touch Nodes by using filtered element collectors.

Custom Dropdown Menu (Part 1)


This week, I cover Zero Touch Nodes for the first time as we start the process to make a custom dropdown menu node.

bullet pont

dynamo vs plug-ins

Dynamo vs. Plug-Ins (Part Four)


The final post in a four part series exploring automation in Revit through Dynamo vs Plug-Ins. Learn about some steps to implmenting plug-ins and the importance of testing.

Dynamo vs. Plug-Ins (Part Three)


The third post in a four part series exploring automation in Revit through Dynamo vs Plug-Ins. I discuss the learning curve and some key benefits to using plug-ins.

Dynamo vs. Plug-Ins (Part Two)


The second post in a four part series exploring automation in Revit through Dynamo vs Plug-Ins. Hear the story of our Dynamo Script Library launch.

Dynamo vs. Plug-Ins (Part One)


The first post in a four part series exploring automation in Revit through Dynamo vs Plug-Ins

bullet pont

elevation by wall plug-in

User Wall Selection


The final step for our exterior elevations plug-in is to allow users to select the walls they want to create elevations for by selecting the walls in Revit. This week we walk through the steps to collect user selected walls.

Align Elevation Markers to Curved Walls


Now that we have the wall normal of the curved wall, we can align the elevation marker.

Finding the Wall Normal for Curved Walls


To place and align an exterior elevation marker to curved walls we need to find the wall's normal. The Orientation property of a curved wall does not return the wall's normal so we must find it another way.

Align ViewSection CropBox to Wall CropBox


To save time, we want our program to adjust the ViewSection's CropBox so that it aligns with that of the wall. This week we go over the steps it takes to update the CropBox.

Rotating Elevation Markers


Since we placed the elevation ViewSection on the first available index of the Marker, we need to rotate the marker to face the wall. We use the wall normal and ViewSection direction to find the angle used to rotate the Marker.



There are lots of different parameters that store phases and it is different for Elements, ViewSections, and Rooms. This week, I discuss phases and when to remember setting them.

Elevation by Wall


Using exterior elevation views for drawings like storefront legends becomes faster when you can select a wall and get an elevation view cropped to the wall. Today we take the first step by placing our elevation at the center of the wall.

bullet pont


Finding a New Room


When someone makes you feel like the outsider in the room, it’s time to find a new room. At BILT North America, I found that new room. I found a community.



Let's build the next thing together. Discover tools for Revit and DynamoBIM that optimize your workflows.

bullet pont

interior elevation plug-in

WinForms ComboBox


Continuing on the topic of user interfaces, I discuss using a WinForms ComboBox to allow input for the Create Interior Elevation Tool I have been working on.

Rename Views


On our path to automating interior elevations, we want to rename the elevations to coorespond to the room and cardinal direction. This week we set up a couple methods in a Utility class so we can more easily rename the elevations next week.

Coordinate System Utilities


On our path to automating interior elevations, we want to rename the elevations to coorespond to the room and cardinal direction. This week we set up a couple methods in a Utility class so we can more easily rename the elevations next week.

Creating FilledRegions


On our path to automating interior elevations, we create a filled region to mask extents of our view. We use inverse matrices to adjust the coordinate system and create our marking region boundaries.

Resizing CropBoxes


On our path to automating interior elevations, we use linear algebra to adjust the coordinates of our CropBox between the project and view's coordinates. We also discover an InvalidArgumentException to accomidate.

View Templates


We look at changing the Revit parameters for our automated interior elevation process. This week we set the view template.

Phases & Goal 1 Complete


We complete Goal #1 on our path to automating the interior elevation process. This week we adjust the phase of our elevation markers and views and execute our program.

ViewPlanId & Levels


We continue on our path to automating the interior elevation process. This week we find the ViewPlanId, adjust for multiple levels, and place our elevation views.



We continue on our path to automating the interior elevation process. This week we find the ViewFamilyTypeId which is the last parameter we need to place the ElevationMarker.

Finding Centroids & Considering Exceptions


We continue on our path to automating the interior elevation process. This week we find the center of the rooms and look at which exceptions we need to consider to not crash our program.

Filtered Element Collector


Let's take the first step to automating the interior elevation process. This week we cover the Filtered Element Collector class.

bullet pont

learn coding

Steps to Learn to Code 2


There are many flexible options that teach you how to code. Explore three different options that you can consider

Steps to Learn to Code 1


Architects and designers need resources that allow them to learn to code while keeping their current responsibilities.

bullet pont

rename interior elevation plug-in

WinForms DataGrid


As you start developing plug-ins for Revit, you will likely find that you will want to add a user interface for inputs. This week, I discuss using a WinForms DataGrid for the rename interior elevation plug-in I started.

Is Point In Room


I wanted to create a stand-alone plug-in that renames interior elevation views after they have been created and updates their name based on the room name. The key feature is finding out what room the elevation is located in and this week we do just that.

bullet pont


Gone Painting


I am taking a few weeks off to focus on a watercolor class and some additional projects.