Building a Forge Web Viewer

Web-based “BIM” solutions are the last big trend, and Autodesk is among the most advanced player in this area with their API offering called Forge.

Autodesk Forge is a product from Autodesk that don’t come with a user interface. Instead, it is designed to be used through other software, and especially web-based solutions. Autodesk Forge is also the technology behind most of the web-based product of Autodesk, like BIM 360 Team, Docs or the A360 Online File Viewer.

The community around these products is growing, and new resources and samples are published on an almost daily basis.

Among them, Augusto Gonzales recently wrote a comprehensive tutorial to build a small web viewer using Autodesk Forge and ASP.NET. Being more of a .NET programmer, I took on this opportunity to learn more about this new product and build my own web-based Forge viewer.

I start by creating an ASP.NET Core MVC Web Application with this tutorial. ASP.NET Core being a web framework developed by Microsoft, you can use your C# skills to “easily” build web application.

I follow the detailed explanations from Augusto Gonzales to send my model to the Autodesk server for conversion, get an GUID back and use it to display my model in the Forge viewer. The explication on the blog are straightforward, and I won’t delve into it. I just had to made some few changes since I am using a different version of the ASP.NET Core framework.

Using technologies from Microsoft, it is easy to publish my application on Azure, the Microsoft cloud hosting solution.

I called the end-result Termite, and it is available here.

The Termite Web Viewer

By default, you see a model of my neighborhood from my last post, but you can also upload your own files. A word of caution, uploading and translating a large model can take quite some time, do not close the windows until your model is displayed on the screen.

I also add some features to the viewer. You can lock the rotation of the view by clicking on the lock icon. I also put in place a very basic section tool. To use the section, click on “Add a section” and select a face in the model to create your section.

Viewer Extensions

These features are built as extension of the Autodesk Forge Viewer, are written in JavaScript and run in the browser of the end user.

The source code is available on GitHub. Seasoned web developer will probably find a lot to correct in my application, but I hope to improve with practice

I still have a lot to learn in this area, so you might expect some other web app in the next few weeks.

Why I am now a bimsync fanboy

Those of you who know me know that I recently changed my employer and I am know working for a real estate developer, with a different scope of work than in my previous position. This lead me to put aside Revit and Dynamo for a while, and think more about a project-wide collaboration platform.

Alongside with the ubiquitous BIM 360 platform from Autodesk, there is a lot of more confidential solutions from various developers. Every large BIM editor has its own, and many other companies propose one. Among them, bimsync is a rather discrete application from Catenda, a Norwegian company. Having eared about it at the French Revit User Group, I had to give it a test, and I was not disappointed.

What immediately caught my attention is the web viewer, which is the best I have ever tried. They develop their own IFC web-based viewer, and it is not far from perfect. The viewer is extremely easy to use with the left mouse button and the wheel, and include every needed feature. Sectioning the model is also quite well implemented and do a very good job. My only wish here is to have a filled pattern to highlight the difference between fill and void while sectioning.


The viewer is also quite powerful, I tried it with 1 Go worth of IFC files, it run “almost” smoothly on my iPad.


bimsync does a good job at uploading, viewing and managing versions of various models, and provides a thoughtful way of managing revisions.

You start by creating a “model” which on bimsync is a placeholder where you will upload the various versions of an IFC file. Once this file is processed by the platform, it will be available for review along with the other models. The processing part can be rather slow, it takes more than one hour for a 500 Mo IFC file, but happen entirely online, you don’t even have to keep your computer open.


A key feature of bimsync is the ability to easily extract Excel schedules from the uploaded models. Having the ability to show data from a model in a nice spreadsheet is priceless, and this is something that is generally overlooked by their competitors.

The issue tracking solution integrated in bimsync is also very efficient and well-thought-out, with a lot of nice features.

You start by creating an issue directly on the model, can assign someone responsible for solving this issue, add a due date and write a few lines of comment.


These issues are grouped by boards, and you can create as many board as you want. You can also keep track of the resolution of these issues with a few statistical tools and filters, and save reports in Excel.


You know that I am a big fan of the BCF concept, and bimsync doesn’t disappoint me in this regard, by providing a first-class BCF 1 and 2 support. You can export your issues in BCF to display them directly in your authoring platform of choice.

Catenda was kind enough to provide me with an access to their API, and after a few tests, I found them quite easy to use and powerful. I think this enable very interesting workflows, like automatically displaying key metrics in an easy to consume Power BI dashboard.

I yet have to explore all the features, especially the libraries, but bimsync is now my top choice among the web-based BIM collaboration platforms, and I am eager to explore more workflows with it.

Flux Dashboard

Since my last article, Flux has made a lot of progress. Along with their plugins for Excel, Grasshopper and Dynamo, the Flux team has recently released their connectors for Revit and SketchUp. They are also developing a series of tools that use the Flux platform for calculations or specific collaboration tasks.

Among these tools, Thomas points me to the Live Data Dashboard, a real-time visualization tool for your Flux data.

I have tried various solution for displaying data extracted from a Revit model, from Excel spreadsheet to Tableau, but these solutions generally fell short when it comes to real-time update. The Dashboard can be a solution, since its values always reflect the latest Flux values.

After login with my Flux account into the Flux Dashboard, I was able to select a Data Key from one of my project as a data source for a bar chart.


Using properties extracted from the Rooms of one of my project, I tried to display my 951 rooms all at one, and came up with a rather messy chart:

Image [1]

The problem here is that the Flux dashboard does not support values that are not in a tabular format, with mean you cannot yet use directly the value uploaded from the Revit plugin. Furthermore, the Dashboard does not process any of the data you are feeding in, so you have to prepare your visualization beforehand, in Dynamo or in the Flux Flow.

I go back to the Dynamo plugin, and use a rather simple definition to retrieve all rooms, and regroup key values in nested lists. I use the List.GroupByKey node to regroup rooms’ area per level, and create a list of levels, with the number of room and their area in each level.


I upload these values in a new Flux Data Key, and use this Data Key as a source for a new, and way more interesting Chart Bar.

Image [2]

Once the values are properly sorted in Dynamo, they fit nicely on the graph, and are automatically updated as the values evolve in our Revit model.

Using the same principle, I add a few node to my Dynamo definition, and upload the resulting values to the Dashboard.

Image [3]

I also try to display geometry in the Flux Viewport, but for some reason, I wasn’t able to see anything on the dashboard. I will have to keep trying on this one.

After having built this great dashboard, it is pretty easy to share it, using a Flux Data Key to store it. You just have to make sure everyone has access to all the projects linked to the dashboard.

The Flux Dashboard is a great idea. As long as you use Flux as the main data repository, the Flux Dashboard can display is fair share of information to everyone without having to dig into the models. However, the Flux dashboard is not (yet) an Excel spreadsheet, and won’t regroup or sort your data directly, and you still have some work upfront to prepare this data for visualization.

Log spatial coordination

Finding and solving issues is at the heart of the spatial coordination process. But since we don’t know in advance how many issues we will have to find and solve, it is difficult to measure the result of our efforts.

Case recently presented a very interesting solution for this problem. Using Jira, an issue tracking product used in the software industry, they were able to keep track of every problems found during the design phase, and display them thought nice visualizations.

Inspired by this idea, I displayed over time the results of a general clash detection in a graph. Like so, we can see the evolution of the number of clashes in our model, and the progress of the spatial coordination.

To do so, we have to set up a general clash matrix, something like this:


  • A: Architecture
  • S: Structure
  • H: HVAC
  • P: Plumbing
  • E: Electrical

You can see that the lower-left of the matrix is left blank, we don’t need to run symmetrical tests.

We don’t include architectural elements in our detection, since resulting clashes are generally not relevant enough to add value to the report.

We test for intersections between every trades, create a report combining all clashes, and export it from Navisworks.

This report is not very useful per se. In fact, there is generally too much clashes to sort them into something useful. And if by chance you haven’t that much clashes, you probably don’t need clash detection in the first place. But this clash report do nevertheless represent the state of our coordination at a given date. The less clashes we have, the better.

Furthermore, once these tests are set up in Navisworks, it become easy to export a large clash report every day, a rather bulky summary of every problems we can find in our model.

Day after day, these reports create the raw data for a journal of our spatial coordination. Periodically, we compile them into something more visual.

To do so, we create a single table (in .csv) listing every clash reported during the project.

We use to compile them through an HTML (tabular) report from Navisworks.


Using the Data -> From Web Excel function, we create a large database of every clash, with its history.

We now have a custom application for extracting the same information from Navisworks XML reports. The process is somehow automated, but the result is the same, a large database of every clashes detected during the design.

Once we have every clash in a handy (and pretty large) .csv file, we use Tableau to create a nice visualization out of it, and let everyone in the office follow the progress of the coordination.


“What gets measured improves”, and we are now able to increase our efforts when we see the spatial coordination staggering. But with precise data about the coordination, I also hope to be able to better understand what makes a coordination process successful and how to reproduce it.

Autodesk Formit and Revit

Autodesk Formit is an example of how far web-based solutions have progressed. Since 3D application need heavy calculation for display, they were generally limited to the heavy client format, until solutions like Autodesk Formit appear.

This 3D sketching tool allow us to quickly create building concept in a web browser or through the mobile app, then further develop this concept in Revit.

Autodesk Formit greets us with a nice introduction screen describing the main functionality.


I generally start by setting up the units to metrics.

ScreenClip [1]

Afterward, everything is quite easy to use, and look pretty much like a web-based Sketchup. Let draw a little sketch of our main plan:

ScreenClip [2]

Extruding this sketch give us the first draft of a building.

We can define levels in our model to calculate gross area for our future building.

ScreenClip [3]

These surfaces are updated as we edit the form of our mass:


Once our model is located, the shadow and Sun and Shadows tool allow us to create a small daylight analysis:


While we work, our model is saved to our Autodesk 360 account, in the Drive section. Along the Formit format .axm, a .rvt file appear. This rvt file is automatically converted from our Formit model to be used in Revit. We can download it to continue our design in Revit :

ScreenClip [9]

The Formit model appear as an In-Place mass in Revit, which can be edited directly in Revit. Each previously defined levels are also integrated in our Revit model, along with corresponding Mass Floors.

ScreenClip [10]

We can enhance our design by using this in place mass to create a Curtain System, some floor and interior divisions. Pretty quickly, we have a fully functional first sketch of our building, with elevation, floor plans and a nice rendering.

ScreenClip [11]

My only regret is to have to use the Revit model provided by the Formit conversion. I think it would be more convenient to retrieve a Revit Mass family to be integrated in the Revit template of our choice. We would lose the levels creation, but gain more flexibility for an early stage workflow.

From Rhino to Revit

My previous post was describing how I use Grasshopper to modify a complex ceiling surface in Rhino. Once this surface is correctly modeled by taking into account constrains set by the actual construction of the ceiling (space taken by structural framing, planarity, maximal angle …), I have to create construction documentation from it.

I need to produce drawings from the 3D models of the ceiling to make it understandable by someone who will built it.

Revit will be our software of choice here. The power of Revit resides in its ability to efficiently produce drawings from a model. To be able to represent our Rhino surface on 2D drawings, we first have to create a Revit model from the Rhino surface.

After some trials and errors with the DWG export options of Rhino, I ended up exporting my surfaces as an ACIS (.sat) file, with the default Autocad export configuration.


I import this .sat file in a new Conceptual Mass family in Revit. The positioning is set to Origin to Origin to place our ceiling in its correct position regarding the origin of the massing family.


I insert this family in my Revit project, and use two dimensions to place it at the origin of the project.


This massing family allow us to create a curtain system by face, by selecting every face of our mass. I use it to create two curtain system, each one with a specific purpose.


The first one is populated only with curtain panel to represent the finish face of our ceiling. Since every panel fit a face of our massing family, we don’t need to add any subdivision into this grid. Curtain panels are 100 mm thick, and have a 50 mm offset to place their finish face along the surface of the curtain system.

I create another curtain system to model the structural element of our ceiling. This curtain system is populated with specifically designed mullion, and without any curtain panel. These mullions represent the supporting elements of our ceiling, and are modeled along the border line of each panel.


Creating a specific curtain system to model mullions allows a greater control over the elements, and does not interfere with the previously created curtain panels.

Once these panels and structure are modeled, Revit will gladly create any needed section view, with all required graphic styles and tags.


Every element is also fully documented, and therefore schedulable, allowing us to extract information like the surface of every panel, or the length of the structural framing.

I will enjoying my summer break for the next few weeks, and will put BIM 42 on hold. Next post in September!

Coordination with Grasshopper

I recently coordinate a complex ceiling with the concrete structure and mechanical equipment. This ceiling is composed of flat panels, with no particular pattern or general repetitive shape. These panels are modeled as a set of surfaces in Rhinoceros 3D.

General View

For those who are not familiar with it, Rhinoceros is a 3D modeling software solution, develop by Mc Neel Associate, and broadly used by architects in the early stage of the design. It comes in handy for design complex free-form shapes.

My ceiling surfaces have to be modified to include enough space in the plenum for mechanical equipment, while keeping the ceiling constructible.

I use different models as a reference during my work, coming mostly from Revit. Once exported in DWG, inserting them in Rhino is quite easy. These models show structural concrete and ducts to be integrated in the plenum space.

The next step is to integrate fabrication constrains, in order to keep every ceiling panels constructible while editing them. To do so, I use Grasshopper, the visual programming interface of Rhinoceros.

With a layer pipeline, I extract every panel of the ceiling surface. I then apply the construction rules on these panels, and display the result with a specific presentation in Rhino.

For example, since every panel must be planar, I display every non-flat panel in red, and correct them as soon I see them in Rhino.



I also display the naked edge curves of every panel to identify junction problems between two supposedly contiguous panels.



Each ceiling panel needs also some space behind it for its supporting structure. The volume of this structure is modeled in real time using the offset command in Grasshopper. Another constrain is the angle of the panel vertices. After fighting with some angle measure in Grasshopper, I ending up by just counting the number of edge of a panel, displaying it as a color scheme in Rhino, and assuming that the smallest edges count was the better.



Once these construction constrains are displayed in real time in the Rhino viewport, I can easily modified the ceiling surface while making sure it still constructible. These modifications are conducted here with basic surface modeling tools, and entirely by hand. But once you have immediate feedback on what you are doing thanks to Grasshopper, editing these surfaces become almost fun.

Trying out Autodesk 360

I was recently searching for a web-based collaboration platform to quickly exchange models between people from different organizations, and since Autodesk had just release its new flavor of Autodesk 360 website, I gave it a try.

The first impression when logging to the new Autodesk 360 Hub is the integration of social capabilities. Every modification is displayed in a handy timeline for everyone to see. I had some prior experience with the project management tool Basecamp (, and I see in this new version of Autodesk 360 some of the features that made Basecamp so successful.

These features, along with the new domain name (, show the effort of Autodesk for producing a complete web-based solution for reviewing BIM content.
Everything in Autodesk 360 is organized around projects, which come with their own calendars and wikis. To work with Autodesk 360, you first have to create a new project and invite members to this project:


After adding a nice logo to your project, you can create folders and start uploading Revit models:

uploadFilesThe upload is pretty quick, but the file has to be processed to be visible through your browser.


Every members will be able to see and download files uploaded in their project. These model also appear in the timeline for everyone to see or comment them.


Once downloaded and processed, the model become visible in the embedded viewer browser. This is where the main feature of Autodesk 360 lies. The 3D model run smoothly, and the whole experience is nearly the same than with a desktop-base viewer.


Along with showing the 3D model, Autodesk 360 display every sheet embedded in the uploaded Revit model. My only wish here is to be able to annotate the drawing just like we do in Design Review, but I hope this will be available in a future release.


Another nice feature, the 3D viewer allow us to isolate elements by categories and display every elements properties.


It’s still miss the ability to create section, and most of it, to be able to download Revit sheets as pdf for an easier reviewing, but I don’t lost hope.

During my whole experience, I just encounter one problem, with my model freezing in generating preview mode just after downloading it.

On the whole, the new Autodesk 360 come really close to a mature web-based model reviewer, and I see a lot of new applications coming to life, especially for the one who are not spending their days in front of Revit, but still need a quick access to the model.

Understanding View Range

Setting up view range regularly came with great stress, and “why I can’t see this particular element” shouts. To explain it to myself (and maybe other), I write a few lines about it.
The View Range comes with four elevations, corresponding to the four planes which define a view range:

ViewRangeInterfaceThese four planes, draw in a section view:

SectionViewPlaneDepthThese planes must stay sorted in the same order, i.e., from up to down: Top, Cut Plane, Bottom and View Depth. Trying to change that order will result in this kind of error message:


The general idea behind the view range is that every element between the Cut plane and the View Depth is displayed.

On ceiling plan, where there is only three plans, all objects included between the cut plane and the View Depth plane are visible.

Most objects became entirely visible even if a small part of them is between the cut plane and the View Depth:


Cut by the Cut plane


Above the Cut plane

On the other hand, some families, let’s call them the “cutable” ones, change their appearance when cut by the Cut plane, and display the section display of their material. Cutable objects belongs to one of the following categories: Wall, windows, doors, railings, site, Structural column, Structural foundation, Structural Framing, Structural Stiffener, Casework, Columns, Roof, Ceilling, and Floor.
In case of an editable cutable family, each geometric element composing this family can be hidden when cut by the Cut plane:


If the View Depth setting is set to Clip (With or without line) these objects are also cut by the View Depth Plane. For example, with a wall with an edited profile:


The corresponding view plan, with different Depth Clipping:


Some categories have also specific behaviors. For example, a windows stay visible above the cut plane if the hosting wall is still below the cut plane.

I also note than an Object Syle or an Override does not apply to an object placed below the Bottom plane, or above the top plane for ceiling view. For example, if Furniture Object Style is set to Red, a chair is normally displayed in red in a plan view:

FurnitureObjectStyle_Plan_AboveBottomPlane FurnitureObjectStyle_Section_AboveBottomPlane

But when the same chair is placed below the Bottom plane, it become black:

FurnitureObjectStyle_Plan_BelowBottomPlane FurnitureObjectStyle_Section_BelowBottomPlane

Filters Override, on the contrary, stays active whenever the object is bellow or above the Bottom plane. I don’t know the reason of such behavior, maybe someone from Autodesk could be able to answer.

Finally, to help users with this view range issues, I create a general section of the building with two different set of dimensions, one for Top height, the other for Cut Plane Height. This section is printed and used as a handout for Revit users to set up themselves their view range on their working views.



EDIT : I have found on Augi the solution for objects placed below the Bottom plane. These elements are displayed with the project’s Beyond> Style Line.


Autodesk Screencast

Implementing BIM software across a company implies to communicate in-house procedures or best-practices to a potentially large audience. We also have to keep it mind than our public is generally not as proficient as we are with all this BIM stuff.

Replacing text by pictures or even better, videos, can help deliver our message. This is where Autodesk Screencast can be really useful.


Autodesk Screencast, formerly known as Autodesk Project Chronicle in the Autodesk Labs, is a screencast application specifically design for Autodesk products. It can support any application, but has an additional feature for Fusion 360, AutoCAD, Revit and Inventor. On these products, it can record not only the screen, but also every commands used during the session. These commands are displayed in a very convenient timeline, allowing the viewer to understand the process behind what is displayed on the screen.


To record these command, Screencast install a plug-in in every selected Autodesk Application.


Screencast comes as a stand-alone application, and can be launch from within your Autodesk product, directly in the Add-Ins ribbon. Once started, you can choose which application to record, fit its window to a correct aspect ratio and select if you also want to log keyboard events. You can even add to your video the sound coming from your microphone.


After hitting the Record button, you can start your demonstration. Screencast will log every command you launch along with the screen cast, and show keyboard actions. This last part is especially useful for describing functions with specific keys, like rotating the view with the Shift key in Revit or Navisworks.

At the end of your demonstration, you can edit your video, cutting out irrelevant parts or loading times to shorten our screencast.

Once recorded and edited, the screencast is automatically uploaded to the Autodesk Screencast website. By default, the screencast is public, but you can restrain to on who have the link, or to a specific group of user with an Autodesk account.


And the last but not the least, the video can be downloaded from the website. An URL is also provided to embed your screencast in a website.

I’m usually not very fond of video tutorial, but I must admit than the Screencast application made the creation of such video too easy to miss. I will probably use it more to present my solutions.