Revit plugins updates and new features

As usual during this time of the year, I published the new version of my plugins for Revit.

Align

The big improvement this year is the ability to align any type of elements, annotations or tags. I must thank Deyan Nenov and his large contribution to the source code for this new feature.

From now on, you can select any kind of element and align or distribute them evenly. This feature use the bounding box of the element in the view as a reference.

Align or distribute all elements

The Align command is still view-dependent, so using it in section view or in a plan view will not have the same effect on the overall position of a given element. A word of caution however, the align function can be unreliable in a 3D view.

View-dependent align functions

Of course, you can still use it to align or distribute your tags and annotations, and it even works with viewports:

Align viewports

Along with these improvement, Align now fully support Area tags, and a few bugs have been eliminated. You can now use Align even if on tag without a leader, and multi-leader text are now fully supported, and some selection subtlety have been introduced.

Align tags and texts

I haven’t tested it with all categories, if you find something weird, please let me know, I would be happy to fix it.

You can find this new version on the Autodesk App Store.

Room Finishing

Along with the support for Revit 2018, I corrected an issue where a skirting board was created even if the room was not bound by a wall. From now on, Room Finishing will not create a skirting board along room bounding lines.

Support room with room boundary lines

Room Finishing is also available on the App Store.

Time Stamper

The Time Stamper plugin got a few improvements this year along with the usual bug smashing.

You can now choose between applying your time stamp to every element, or just the one visible in the view. This will give you the ability to filter on which element you want to apply a stamp.

You can also choose to keep or override an existing value, this should help you keep the history of a given element.

A few bugs where corrected, making the creation of the four shared parameters far more reliable. Groups are now supported.

Support for groups

Time Stamper is now available here.

These new versions are now available on the Autodesk App Store. Don’t hesitate to report any issue you might find in them or ask for improvement.

These plugins are open source, you can find the source code here, here and here. Feel free to use it on your own project or contribute to these projects.

LazJS for Revit

I recently receive a beta version of LazJS, a Javascript editor embedded within Revit.

Even if I more fluent with .NET and C#, I find the initiative quite interesting, especially when you have to quickly develop some small routine within Revit.

After installing it, I click on the ParamJS button to start their embedded editor.

LazJS

As an example, I concatenate various parameters of a sheet in the sheet name in order to have them when I print or export it.

I start by selecting a category in the Categories list. Here, you can select multiple categories, but I will only select “Sheets” here. When I click on “Customize”, LazJS displays every editable parameters of our sheets in the “Parameters” list. Since I want to edit the name of my sheet, I select “Sheet Name” and save.

ParamJS

I can now drag and drop parameters from the “Formulas” list to the “Editor” panel. This creates automatically the correct line of code for calling this parameter. I drag some of my sheet parameters, add some “+” to concatenate them, and hit Run. We can see the result of my concatenation just below. I hit save, and my modification are added to my model.

Run

If this is the quickest way to edit parameters, LazJS have also a fully functional editor, which allows us to create more elaborate routines.

I use it to create the same concatenation tool than in my previous example, everything came pretty easily with the auto-completion.

ScreenClip [1]

LazJS also provide a set of already existing scripts for inspiration.

Last but not least, LazJS provides functions for exporting and importing data to Excel. These functions are very easy to use, and can replace any plug-in dedicated to exporting and importing data from Excel.

Even if I will keep my habit with C#, the LazJS plug-in seems quite powerful, and far more easy to use than the Revit macro editor, since you don’t have to handle all the tedious document retrieval and the transaction handling.

The only problem I have to report is an error when I attempt to debug a Revit macro in SharpDevelop after installing LazJS. It is kind of annoying, but I am sure this problem will be addressed when they launch their final version.

Revit Tracking

My previous post about Revit performance highlighted the need for precise feedback from user about starting and synchronizing time. This is important when dealing with many users, with potentially different configuration and performance. In this case, these loading times can alert you soon enough of a problem with a model.

Having feedback from every user is also important, since you need to detect quickly if any user is having more difficulty to open a file than the average.

You can also compare file size progression with loading time to establish and check your set of good practices for keeping Revit models powerful.

To be more accurate and systematic with these measures, I create a small piece of code to log every opening, synchronizing and closing of Revit model for multiples users.

On startup, the application subscribe to the events triggered on opening, synchronizing or closing a model.

         public RevitLogger( UIControlledApplication a)
        {
            ControlledApplication app = a.ControlledApplication;

            //Subscribe to the opening event
            app.DocumentOpening += 
                 DocumentOpeningEventHandler;
            app.DocumentOpened += 
                 DocumentOpenedEventHandler;

            //Subscribe to the synchronizing event
            app.DocumentSynchronizingWithCentral += 
                 DocumentSynchronizingEventHandler;
            app.DocumentSynchronizedWithCentral += 
                 DocumentSynchronizedEventHandler;

            //Subscribe to the closing event
            app.DocumentClosing += 
                 DocumentClosingEventHandler;
            app.DocumentClosed += 
                 DocumentClosedEventHandler;
        }

Subscribing to the starting event and the ending event allow me to track down the time taken by each task.

Afterward, each event handler measure the time taken to perform the task, along with other properties related to the Revit file like its name, its path, if it is workshared, and so on.

For example, to log the opening of a model:

         private void DocumentOpeningEventHandler(
                 object sender,
                 Autodesk.Revit.DB.Events.DocumentOpeningEventArgs args)
        {
            //Retrive info about the file
            BasicFileInfo FileInfo = BasicFileInfo .Extract(args.PathName);

            _logReccord = new LogReccord(ReccordType .Open);
            _logReccord.ReccordStarting = DateTime.Now;
        }

         private void DocumentOpenedEventHandler(
                 object sender,
                 Autodesk.Revit.DB.Events.DocumentOpenedEventArgs args)
        {
            _logReccord.ReccordEnding = DateTime.Now;
        }

Here, the LogReccord class allow us to store the information retrieved in the event handler. Once these information are stored, it is pretty easy to collect them and write them down to a csv file.

It is now possible to quickly create very precise graph displaying opening time of different model, compare them and show their evolution along time

Image

The next step should be to send these information to a shared SQL database in order to retrive data from every users. We should have this way a company-wide tool for keeping track of Revit performance.

 

My version of the Living Cube

Designed by Till Ewert Koenneker, The Living Cube is an assembly of shelves, storage space and a bed. Tightly integrated in an ergonomic cube, its timeless design allows it to be used in any space and situation.
After encountering the work of Till Koenneker, I decided to use it as an inspiration to draw the same one for myself.
The main idea is to design a piece of furniture, producing drawings with a software usually used for steel detailing. My goal is to automatically produce shop drawings of every parts of the finished product, directly from the model. These drawings are then to be send to a joiner’s workshop for the production of parts that I can assemble myself, just like any ready-to-assemble Ikea-like funiture.
I’m not using Tekla Structure on a regular basis, but I know its power for producing shop drawing for timber or steel structure, and its caracteristics fit my needs for this project. It will be a good occasion to hone my Tekla skills.
I started with a first sketch on Tekla Structure, trying to find the best proportion for my needs. I came up with a first version, and used 3D Max to render it.

RenderingI then used the Tekla model to produce general drawings of my project, and submitted this first version to someone who is used to design and build pieces of wooden furniture to get some feedback. His very precious advice helped me to draw a second, more constructible version of my loft bed. These drawings are also available here.

VersionI was then able to create a detailed shop drawing for each part of my assembly.

PartSadly, this project is still in its development phase, mostly due to my lack of knowledge in furniture design and joinery work. I hope to be able to restart it someday, when I will have time to draw some new version.

Why a new blog about Building Information Modeling ?

First of all, welcome to the BIM 42 blog, dedicated to Building Information Modeling and some related subjects.

Following advices from WordPress, I try to answer a few questions about this new blog, just to be sure I may have something worth to say.

What am I going to do with this?

In this blog, I will talk about information technology in the AEC industry. BIM is the main topic, but some digressions about visualization, documents management, pure 3D modeling or anything else will be common.

Who is going to read this?

This blog aims to be accessible by anyone from the building industry, BIM expert or not. Most post will be technicaly oriented, but I will try to keep in mind all those who aren’t spend their days in modeling softwares.

What kinds of information will I be posting?

For the most part, I will post comment on BIM software like Revit, Digital Project, Navisworks, and probably many others. I will also share some more general thoughts about BIM concepts, information technology applied to construction, and evolutions in the process of designing buildings.

Why am I doing this?

It’s my job. I’m working in the BIM department of a French engineering office and as a part of my job, I have to keep myself up to date with all BIM related solution and implement them in my company.

Who am I doing this for?

For myself, and for anyone interested in Building Information Modeling and related subjects.

How often am I going to be posting and adding information?

I’ll try to write post on a weekly basis, but don’t expect to much of me…

If you have any suggestions for interesting topics to cover, as well as any remark about the blog itself, feel free to post a comment or send me a message through the “Contact Me” form.