Archive | InRoads RSS for this section

Spring FLUG!



FLUG offers you the opportunity to make connections with industry peers, exhibitors, and even your own colleagues from other offices to solve a problem you recently encountered?

Engage in hands-on, face-to-face instruction with Industry experts who have faced similar challenges to yours.

  • Explore the many new product capabilities you aren’t using yet to determine how you can take advantage of them
  • Glean best practices and insider tips and tricks to create new efficiencies in your workflows
  • Collaborate with developers to extend the use of your software

For over 25 years, FLUG one of the countries longest running and most successful Users’ Conference and Training Events, offers you the tools to best leverage your software to better meet your strategic objectives, make the most of your resources, and stay ahead of your competition.

Check out our Agenda:

Visit our website, Under the Main Menu portion of the webpage you will find a link to for the current Spring Agenda. A few highlights include….

  • Tips and Tricks in MicroStation V8i
  • DWG Interoperability with MicroStation V8i
  • Point Clouds
  • AECOsim Building Designer
  • Bentley Navigator
  • Corridor Modeling
  • Autodesk Revit Architecture
  • Civil 3D Plans Production
  • GEOPAK Terrain

How do I register to attend FLUG?

That is easy, visit our website, Under the Main Menu portion of the webpage you will find a link to both the current Spring Agenda and to Registration. Click the Registration link and follow the guided registration process.

Hotel Information:
Radisson Resort at the Port
8701 Astronaut Blvd.
Cape Canaveral, FL 32920 Phone: (321) 784-0000 Visit us at The Radisson is using a new online registration system to reserve your discount FLUG rooms. For the FLUG Government Rate (ID required at check in) please use the following link, For the FLUG Non Government Rate please use the following link,

Information to Help You Better Manage Your CAD Environment

by Mark Stefanchuk,

Information is the key. Without it we can’t analyze and resolve issues, or win funding for new initiatives. As a CAD Manager, one of the toughest things I had to do was present and support the business case for moving projects forward. It required formulating data in a way that each stake holder could understand. Often that was a monetary presentation other times it was technical. We need information that can help us to understand overall operations, as well as detailed data about each workstation. With information readily available we will have much better control of the CAD ecosystem and a better argument when we have to reach out to our boss for funding. Here are five things, pieces of information, that can help you manage your CAD environment.

Computer Names

Capture computer names to support automated deployments. If you have a small footprint this is easy enough to manage and you probably aren’t doing automated deployments – but can offer you insights when combined with other data. In larger environments, especially those with self service request centers knowing who has what software isn’t always that easy. Even if you have a small pool of licenses your installed base could be much larger. Automating license capture is necessary and can help you with the next deployment.

User Names

In addition to providing very granular usage stats, user names can also provide data on asset usage – shared and individual. Tracking user names per computer name can tell you how effectively you are using your hardware assets. And you may find there are opportunities to consolidate resources or in some cases pro-actively address maintenance issues for shared resources. You can extend usage monitoring to just about any asset including software. In large environments software deployment, including CAD software is often managed by a centralized IT department. In this scenario CAD Managers will quickly lose track of who has and is using critical software assets.

How can we capture username and computer name? In a small environment (say fewer than 10) you can just survey the team and catalog the data manually. In larger environments you will want to use automation to capture this data. A quick and easy way to do this is to add some code to your start up script or program. In VBA you can use the following…

   Dim sComp as String, sUser as String
   sComp = $Environ(“computername”)
   sUser = $Environ(“username”)

And a quick way to save this data is to just append it to a log file using the open and print statements. Check http:\\\wiki\Visual_Basic\Files for details on writing text files. Of course a more sophisticated approach would be to use a SQL database or some other data system that you can query and report.

Version Audit

Going a step further in your intelligence gathering you might also consider capturing version dates on first tier software. These include your business critical applications – that is MicroStation, AutoCAD, Civil3D, and so on.  Version audits can help to avert support issues. For example, incompatible plug-ins.

In both MicroStation and AutoCAD VBA this is easy – it’s just a simple call to the application object.



In addition to analyzing support issues, version audits can also help with funding – as is the case with Adobe applications where each version counts as a license instance. In larger environments with self service software requests I’ve seen incorrect versions deployed and version audits can help identify workstations that need to be upgraded. For those of you working for a consulting shop, it’s not unusual to be running multiple versions because in these situations we tend to upgrade as users finish one project and are just starting a new project. So in this case we can use version audits to avoid potential production losses.

In smaller environments versions and software deployments are more easily managed, but if you’re managing a reasonably sized CAD ecosystem computer names, user names, and versions can provide better feedback from your CAD environment. And there are many other things you might want to consider tracking – hardware form factors, plotter usage, and user profiles – each provides valuable information and combined they can inform upgrade schedules, refresh strategy, and software management policies. I’ll investigate these more in future posts, but for now experiment with user, computer, and versions, and let me know what else you might want to track.

About Mark Stefanchuk: Mark is a VP and senior consultant with CAD Management Resources, Inc. He divides his time between developing innovative custom software solutions and helping clients navigate complex design automation environments. If you would like to find out how he can assist you with your design technology he can be reached by contacting us at

Launching External Programs and CADpilot

by Mark Stefanchuk,

Yesterday I was looking at launching external applications from my favorite CAD programs. Launching standard Windows office applications are generally supported, but I wanted to see if I could launch an executable developed by someone other than Microsoft. Sure enough, there are several posts out there that document how to do this, but I thought it might be helpful to see how to handle it in both MicroStation and AutoCAD. And many of our CADpilot customers have asked the same thing, specifically “how do I launch an external application using CADpilot?” So, I’ve included a couple of CADpilot examples too.


In MicroStation this is easy. Use the “%” symbol before the application name. For example,


As long as snagit32.exe is found in a PATH folder the program will launch. If it’s not in the path then you can always be explicit. For example,

%"C:\Program Files (x86)\SDJElectra\SegmentTables\Program\segmenttables.exe"

The quotes are necessary because there are spaces in the path spec.


In AutoCAD it takes a little more effort, but you can do it. The START command will launch most windows programs found in PATH. If it’s not found in path you will need to use the SHELL command. For example,

SHELL "C:\Program Files (x86)\SDJElectra\SegmentTables\Program\segmenttables.exe"

These will start a command window which then executes the request.

You can also set up an alias by editing the acad.pgp file. To open this file in Civil3d go to the Manage tab on the ribbon menu and click “Edit Aliases”. This will open the file in notepad. You can find more information on how to add aliases for external programs from the knowledgebase article, Starting Windows programs from the AutoCAD command line.

The interesting thing about the alias file is that it is user specific. If you do a Save-As from notepad you will see that the acad.pgp file is located in the users AppData folder. It will move with the user’s roaming profile, but everyone could have a different acad.pgp.

That’s great. It gives your users control over their personal CAD environment. On the other hand, you will have to do some planning if you, as the CAD Manager, make changes to this file and want to deploy it to everyone on the team.


A somewhat biased plug – this is one of the many reasons I like CADpilot. The user can create her own aliases and you can deliver program launch commands for the whole team, or for segments of your team to a single location. Also, since CADpilot is a delivery and deployment platform you can make global changes very easily without making users exit their design session.

Ok, so for those of you already using CADpilot, launching commands is really easy. You use the “cadpilot ui run” command. In MicroStation it will look like this,

cadpilot ui run snagit32

and for AutoCAD,

(cadpilot-ui-run snagit32)

If you need to spec the whole path then use the following format.

(cadpilot-ui-run "C:/Program Files (x86)/SDJElectra/SegmentTables/Program/segmenttables.exe")

In the editor it would look like this.

On my development menu I’ve just added it as a test – like this,

It looks the same in both MicroStation and AutoCAD, there’s no DOS command shell opened when the command launches, and I only had to deploy it to one location.

I also discovered, today, that I can add my own variables to cadpilot.ui.cfg file. I added,

MYPATHVAR = C:/mydevpath/

The new commands for MicroStation and AutoCAD,

You don’t have to exit the CAD application either, just reload the menu.

If you’re not already a CADpilot user, download the demo version from

About Mark Stefanchuk: Mark is a VP and senior consultant with CAD Management Resources, Inc. He divides his time between developing innovative custom software solutions and helping clients navigate complex design automation environments. If you would like to find out how he can assist you with your design technology he can be reached by contacting us at

MicroStation Cell Copy VBA

by Mark Stefanchuk,

I’ve had several requests to update the cell copy MDL example I wrote for MicroStation SE. Thanks to Amos from Jacobs Engineering for the push earlier this year.

I had updated the MDL shortly after the first V8 release and it continued to work through V8 2004. More recent versions of MicroStation however, have introduced several changes that break this old command. Instead of just updating the MDL code, I decided to take a different approach.

The new version is written in VBA, which really simplifies the code and approach. Using the VBA IDE (integrated development environment), creating user forms (dialog boxes) is faster and easier than in MDL. And if you don’t know how to do something in VBA a quick web search will tell you how. So, for CAD managers who are pressed for time this is definitely the way to go.

The new program operates essentially like the old one. Load the source library into the left listbox. Load the destination library into the right listbox. Highlight the cells from the source library you want to add to the destination library and click the arrow button that points to the destination listbox. Click the Add button located at the bottom of the destination library listbox.

You can find a download link to the new version on our cadgurus page. The code is not locked – something I’m likely going to get grief for – “why are you giving away the store…” – “… because I like these cad manager types…”. And, as always these are examples that come with limited validation and error checking, so use at your own risk. Create backups of your libraries before modifying them with CellCopy, and be careful with the delete option. It will remove all cells from the library and you won’t be able to get them back if you haven’t first backed up the original.*

This is a MicroStation VBA. So you can load it using the “VBA Load (path + vba name)” key-in, for example “VBA LOAD C:\temp\cellcopy.mvba”. I usually use the VBA Project Manager so I can browse for the program and then set the Auto-Load option. (from the pull down menu, Utilities > Macro > Project Manager).

There are a couple of key coding points to make.

1) To copy the cells I use the information provided in the dialog box – the source and destination locations. The cell names are gathered by indexing the  destination listbox and grabbing the highlighted cell names. If the cell name is already in the library then the program will skip it.

2) Delete Cells (advanced) – I didn’t find a method in VBA to delete the cells, but I did find one in the MDL reference. This MDL function requires that you pass a pointer for the cell name string. How do you do that?!

This MicroStation V8i Bentley Community page refers to the undocumented VBA function VarPtr. It says that you should use this to pass a pointer of your char* or void*. The MDL function I used was mdlCell_deleteInLibrary and the MDL Funtion Reference says to pass a type of MSWChar const*. So, when I used VarPtr, the function didn’t work – it returned a cell not found error. Ok.

The same VarPtr discussion on the Bentley Community says to look at for more information. Here you will find several other undocumented pointer functions including StrPtr. This one works. Yay. The indexing logic for delete is the same as it is for copy and deleting cells requires these four lines.

One more thing about the example – the Windows Open File Dialog (browse for cell library) helper code (unmodified) can be found on la-solutions web site. Bookmark this site, especially if you are developing programs for MicroStation – there are plenty of great programming examples here.

* If you want to share cell copy with others on your team, but you don’t want them to be able to delete cells then just hide the delete button. You can turn off it’s visible property and/or you can just set the enabled property to false.

About Mark Stefanchuk: Mark is a senior consultant with CAD Management Resources, Inc. He divides his time between developing innovative custom software solutions and helping clients navigate complex design automation environments. If you would like to find out how he can assist you with your design technology he can be reached by contacting us at

“I need to get a surface from Civil 3D for InRoads, I’ll just export a LandXML file, right?”

by Seth Cohen,

So, you are asked to give a surface that you created in Civil 3D to a company that uses Bentley InRoads.  You assume, because you have heard it from everyone, just export it to LandXML and all will be good.  Well, that works……….sometimes.  Let’s look at some reasons why this is not always %100 correct.

In the example below, my surface in Civil 3D looks perfect.

Surface in Civil 3D

Surface in Civil 3D

However, when the surface is translated in InRoads from the LandXML file, this is what it looks like.

Surface in InRoads

Surface in InRoads

So, as you can see, sometimes it is not a one-to-one translation.  In this example the reason the surface did not come in properly is that in Civil 3D, the triangles were deleted and a surface boundary was not used to “bound” the surface.  The solution in this example is to extract the boundary of the surface in Civil 3D, and bring it into the surface as an Outer Boundary. When the surface is translated into InRoads, the surface boundary will come in as a breakline, allowing the InRoads user to use the boundary to create an Exterior Boundary (as it’s called in InRoads).

Another issue is shown below in the following images:

TIN in Civil 3D

TIN in Civil 3D

TIN in InRoads

TIN in InRoads

As you can see, the triangles don’t match up, and the InRoads user is not going to know that the triangles are incorrect.  Now sometimes this is more of an issue in each software package and the different algorithms used to triangulate the surface, and the InRoads user will have to Change Triangle Edges (Swap Edge in Civil 3D) to match the correct triangulation.  However, with the correct data provided to the InRoads user, the surface can match the Civil 3D version.

So, what can you do to ensure that an accurate surface will be reproduced in InRoads?  Here are some tips that will help ensure a more accurate model representation.

    • Add an exterior boundary to the surface (as mentioned in the first section)
    • Make sure the surface is using a style that shows triangles, and export the DWG to either a MicroStation DGN file or AutoCAD graphics.  This will allow the InRoads user to see how the surface should look (triangulation-wise).  Additionally, the InRoads user will have whatever 3D graphics they will need to make the surface work correctly.
    • Verify that the necessary settings are defined in the LandXML Settings dialog box.  This dialog box is found in the Settings tab > right-click on the drawing name > Select Edit LandXML Settings.

“Now you know, and knowing is half the battle.”…………G.I. Joe