Hello again, as you know I have been playing with PDF API’s quite a bit lately and came upon a situation where I needed to make a ton of small PDF binders. I was able to grab and organize all of the files into individual folders using lisp quite efficiently, but ultimately I didn’t have a good way to automate the creation of those PDF binders. I unfortunately had a junior designer process them folder by folder for me. However, this experience got me thinking there could be more applications for a lisp version of a PDF binder. In our department, it is not uncommon for projects without a specified line numbering to have spool names based on the rack name. With that level of association in the filename, it would then become very easy to programmatically create a single PDF “package” of all the fabrication information relevant to any given rack section. We also already have the ability to find all the pdf’s for a given selection, so now we could augment that utility with actually creat...
Adapting to changing needs in the construction industry using XFinium pdf Toolkit
This post isn’t actually BIM software related, but it is something all of us BIM people have to deal with on a regular basis. In this post I will be doing a product review on XFinium PDF toolkit, providing a working example of how to work with their demo version and talking about the Engineer/Designer roles in the construction industry. Generally speaking, there is a dividing line between an engineer and a constructability designer. Yes, there are many people that can successfully wear both hats, but those people are rare and I think many companies have finally figured that out. At least, I am personally aware of several engineering outfits that have rooms full of designers with construction backgrounds now and there was a time where I didn’t see hardly any of that; exception being the guys with both hats. The other big problem, people have largely dismissed the value of good designers and that is true even within the construction companies. Example, I had an extremely bad situatio...
FabWrapper - lisp wrapper of the Autodesk Fabrication .Net API - Alpha Release
UPDATE!!! This post is the legacy code from 2017. For the latest code and write-up, please visit the updated post on Josh’s site. https://www.ifnullthen.com/posts/FabWrapper/ Legacy Post Wrappers have always been something of a magical thing to me. It is the process of taking something programmatically impractical or just plain out of reach and making it more accessible. This would usually be a bullet proof and complete encapsulation of the thing being wrapped that hides anything they chose not to support. Well, that isn’t what I did here, but I certainly did a decent job emulating the complete encapsulation of the largely incompatible typed Autodesk.Fabrication.API.Item namespace. If I did it correctly, then I would have many thousands of lines of code, but I cheated using ton of .Net reflection to get the most bang (functionality) for my buck (time) with less than 1000 lines of code. In this post I will show you how to use some various lisp functions to puppeteer the Fabri...
NavisWorks .Net ExecuteCommand() Method
As I told you guys a while ago, I had a personal goal to put a keyboard shortcut interface back into Navisworks. That command line project isn’t quite done yet, but I wanted to share the backbone of the system. To make my project viable, I had figured out what the ExecuteCommand method actually did. Unfortunately, there wasn’t any documentation of any kind. Which left me an obligation to put some out there; it’s pretty EPIC! I am really not kidding, this is very obscure stuff here. I’ve looked everywhere I can think of and there isn’t a single google hit for the “LcRmFrameworkInterface” namespace which owns the ExecuteCommand method. The official documentation doesn’t mention it anywhere either, but it does have references to ExecuteCommand in the context of the user CommandHandlerPlugin namespace; which would never lead you down the path I’m about to. Command ID’s If you’ve ever tried to customize RoamerCommands.xml then you know why I wanted to bypass it and make an entirely n...
Side Loading - Manually Installing a Navisworks Plugin
I was about to make a post involving a (somewhat) novelty Navisworks plugin and went looking for someone else’s rendition of manually installing a Navisworks Plugin and wasn’t real pleased with what I found. So, here I am posting for the sake of having something to reference….. However, to make this meaningful, I am going to expand on this topic a little bit by also providing some coverage of setting up Visual Studio to debug a Navisworks Plugin. Eclectic Navisworks Plugin Thoughts You can use .Net You can use COM You can mix COM and .Net together leveraging both without obvious ramifications Navisworks plugins should derive from one of the predefined “Plugin” classes Autodesk gave us There is actually quite a bit diversity and I don’t consider the entry points they’ve given us to be limiting; you just have to know what’s available and when to use what. I’ve made always on/non initiated plugins using the EventWatcher type You can have multiple pl...
Displaying AutoCAD Attribute Values in Navisworks
I was reading a post about the limitations of Attributed text values within Navisworks today. It made me recall a trick that I conjured on a past project and thought it would make an excellent post. To be clear though, you cannot natively display the values of an attribute in Navisworks!! It is a 3D model viewer and sadly does not play as well as expected with various 2D objects and data. However, I do have a work around that I’ll share in this post and have used quite successfully in the past, but there are some things to consider before using my method: It will disassociate your inserted blocks with their original block definitions. This can be a problem if you have expected needs to block edit them later Note that attributes are always instantiated and the only editing you could possibly do would be on non-attribute geometry. So, sub-point 1 may not matter if that was your goal; you can’t entirely update instantiated attributes anyway… You will hav...
Using the Autodesk Material Libraries to style Fabrication or Plant 3D Services
At AU 2016 I sat down with a number of Autodesk development types for a focus session on what we want as customers. One of my personal desires was an easy way of creating presentation material from existing projects. I wanted an easy button to make those past projects of specific types pay off on similar projects we are bidding with new potential clients. In this post I will share one of the band aids I came up with to fill that void. We will be using the archaic Dialog Control Language (DCL) to pair up Service names with available materials and then apply those materials directly to objects referencing your selected Services. I will probably be referencing Fabrication substantially more than Plant 3D, but that’s just because I wrote it for CADmep and added Plant 3D functionality in less than 10 minutes. Honestly, I could make this work with AutoCAD MEP in about 5 minutes if I wanted to; its just using any VLA property as reference criteria and the AutoCAD Material property that is ...
Changing Fabrication Item Product List Entries Through .NET
A few months ago there was an occasion where a colleague needed to swap out some clamps that were product listed for a different size. The simplest method would have been to just do a swap in, but the problem with that method was that the clamps had unique spool names and custom data that would be overwritten if a swap in was performed. This made me decide to look into changing a Job Item product list line entry through the Fabrication .NET API. For more information about getting started with Fabrications Items through the .NET API see the post [Accessing Fabrication Items Through .NET]/posts/accessing-fabricaton-items-through-net/. The code below has the user select some fabrication objects, then displays a dialog with a drop down of all unique Product List names within the user selection. The user then selects a name from the drop down and hits “OK”. The selected items that have that product list name entry are then updated. It should be noted that the items will not be dynamical...
Pipe Nesting - Another CADmep VLA Example
The CADmep software has had linear nesting for as long as I’ve been using it. Linear Nesting is a process of grouping the right parts together to minimize material waste. However, the nature of the standard implementation for pipe trades is all about generating a separate printable report and I’d much rather have that information directly on my spool drawings. My own personal implementation of this will automatically generate visual representations of baseline dimensions to be placed directly on my spools, but the provided lisp only gets you as far as outputting the minimum number of lengths needed to accommodate your piping model. More often than not you can just run a 2041 based report and divide the total length by 10, 20 or 21 feet (depending on your material type), round up to the nearest full length and that would typically order the correct amount pipe. However, I have seen many unique projects where large quantities of long, but not full lengths were used and in those scena...
Fabrication Color by Status
This post started back in October 2016, when I found a question on the Autodesk Fabrication Forum regarding viewing objects Status color outside of the Fab Viewer. It appears that that particular post on the forum has been removed, but I thought I would address the problem for anyone else who may have that question. For those who don’t know, the Fab Viewer in Autodesk Fabrication allows you to view the Fabrication model content and apply what I would refer to as Appearance Profiles similar to the Appearance Profiler in Navisworks. There are additional commands and functions that are available in the Fab Viewer which are not available directly through the model, but that is a topic for another post. The Fab Viewer can be accessed through the CADmep toolbar or by issuing the “FABVIEWER” command. In the example shown below, and in the lisp provided, I have included the default values from the Imperial Content V3.04 database. As you can see in the image above, all of the lines sh...