Today we pick up two recent MEP related discussions, on creating a new pipe connector for a hydraulic fitting family and on automatic pipe system routing, and a couple of other odd items
– The names they are a-changin
– Getting a
– Auto-routing a pipe system between plumbing fixtures
– Handling dialogue and failure messages
– Retrieving a geometry reference...
We recently shared a brief note on using the
BreakCurve API for splitting a pipe.
Matt Taylor now pointed out a much more comprehensive discussion asking, is there any API available to split a duct programmatically?
That is not just an example, but an entire tutorial, so I think it is very useful to share here as well for all to enjoy..
I am probably doomed to spend the rest of my life telling people not to unnecessarily apply
ToList to a filtered element collector.
It happened several times again today answering questions in the Revit API discussion forum
– Don't trust the family instance location point
– Searching by name for element type and text note type
– Searching using a negated category filter...
Question: What can we do with the new Revit 2020 API features? Well, just like most of the existing functionality, the enhancements and some typical yet simple use cases for them are demonstrated by the updated SDK samples. Revit 2020 sports five brand new SDK samples – AttachedDetailGroup – CreateTrianglesTopography – Custom2DExporter – PathOfTravel – ViewTemplateCreation – This list also highlights some the most exciting areas of enhancement...
A demonstration of using the
NewSweep method was very kindly provided in yet another helpful answer by Frank @Fair59 Aarssen to the Revit API discussion forum thread on how to create a sweep with multiple closed loops in profile.
Let me also highlight an interesting TED talk on the topic of poverty versus universal basic income
– Creating a sweep with multiple closed loops
– Poverty versus universal basic income...
I have a whole bunch of exciting overdue topics lined up. Let's start with these – Tailor Your BIM sums room areas with F# – Control view for design option elements with F# – Copy legend view and component from background file – Forge RVT to IFC translation defaults to 2x3 – Latitude and longitude in Revit IFC export – Takeoff creation requires branch duct...
I'll start this week with several solutions from the Revit API discussion forum and elsewhere, especially two different approaches to create rotated rebar stirrups – Embedded tooltip icon resource – Revit 2019 tooltip videos are MP4 – How to read and write bolt, plate and weld – Creating rotated rebar stirrups...
My colleague Zhong John Wu just solved a Revit API discussion forum issue on how to create dimension line for rebar. I took this as a prompt to clean out a bunch of other dimensioning related issues lurking in my infinite and growing to-do list – Create dimension line for rebar – Newly created dimensioning not displayed – Dimension leader remains visible after removal – Dimension wall centreline, centre and faces of core – Grid references for dimensioning...
I am attending the BAM Digital Construction Live event in the UK and presenting on Forge for that domain. Today, I'll share my slide deck from this event and welcome my colleague Xiaodong answering his first Revit API cases – Forge for Digital Construction – Welcome Xiaodong and invoking the Draw Model Line command...
José Alberto Torres Jaraute implemented an add-in tool to protect the intellectual property built into a complex hierarchy of nested family instances by replacing them with a flatter and simpler hierarchy, yet retaining all the relevant non-confidential custom data. Basically, his tool also enables location of overlapping elements and duplicates elimination. In the course of this work, Alberto raised a number of questions in the Revit API discussion forum – Explode nested families – Insert a curve-based family instance associated to a face – Explode family instance to get all the components of a family in project – Change the host and work plane of a family...
Here are a couple of threads from the Revit API discussion forum related to MEP and connectors from the past few weeks that seem worth taking note of – Traversing an MEP system and retrieving connected elements – Reproducing the MEP electrical system browser hierarchy – Creating a conduit between two connectors – Dealing with the read-only transition diameter...
Several questions on filtering for intersecting elements came up recently. It is pretty easy as long as a bounding box can be used. However, the bounding box is generally aligned with the cardinal X, Y and Z axes. If the containing volume of interest is not, too many elements may be selected – Family instances in a diagonal room – Conduits intersecting a junction box – Generate 2D arc from radius, start and end points...
Questions on how to use
NewFamilySymbolProfile have come up a couple of times in the Revit API discussion forum.
The short answer is: retrieve the family symbol from the profile family, then call the creation application
I implemented a new sample add-in for you to demonstrate the steps using the Profiles_L-Angles.rfa profile family...
Question: I am trying to create a swept blend geometry and assign it to a
The initial code threw an exception when calling the
How can I fix this?
Answer: The path parameters assume that they should be normalised or that the curve has a range of parameterisation from 0 to 1...
I'll begin the new year by discussing a bunch of topics addressing various aspects of
– Updated DirectShapeFromFace
– Improve loft form creation speed using
DirectShape instead of conceptual mass
– Create surface from face
DirectShape from solid
DirectShape colour and material
– Improve family performance suppressing
DirectShape from room...
I went on my first ski tour this season...
lots of interesting issues in
the Revit API discussion forum...
a Japanese case on programmatically generating a mass floor, enabling us to mention yet another hitherto unmentioned Revit API usility class,
Please tell me if a method exists to generate a mass floor using the API...
Alexander Ignatovich shares an exceedingly elegant solution for automatic wall creation, illustrating a number of important concepts and implementing the following functionality very succinctly indeed
– Retrieve all the
cube family instances
– Retrieve their
height parameter value
– Retrieve their solids making use of the .NET
– Extract their horizontal outline contours using an
– Create walls along each contour curve segment
– Place a door family instance at the midpoint of each wall...
In Revit 2018, cancelling family instance placement during a call to
PromptForFamilyInstancePlacement throws an
– Easily fixed, once discovered
– Change in Behaviour
– Exceptions Should be Exceptional
– The Building Coder samples
I completed a first revision of the ForgeFader project, bringing it up to par with RvtFader. It is pretty cool seeing the same functionality implemented in two such different ways, on completely different platforms, using different tools. Alan Seidel shared another exciting Revit add-in. First and not least, another exciting topic for me personally is switching to half-time work – Work half – AKS Opener – Video – GitHub repository – Why? – Specific interest – RvtFader – ForgeFader...
Today is the last day of the Forge accelerator, and I am still working on the ForgeFader project. The topics today are mainly related to Revit, though – Google prettifier on GitHub – WTA mechanical family placement add-in – Provision for void – What is a provision for void? – Creating a provision for void...
Yesterday, I showed how you can add custom geometry to the Forge viewer for debugging or other purposes and to control graphically what is going on. Today, I address the ray tracing required to determine the number of walls between the user selected signal source point and the other target points spread out across the picked floor slab. Please note the important information in the final section: the viewer implements built-in raycast functionality that obviates the need for this – Connecting Visual Studio Code to the Chrome debugger – Creating a three.js mesh from Forge viewer fragments – Use built-in viewer raycast instead...
I am in Gothenburg supporting the Forge accelerator. My project here is ForgeFader, implementing the same end user functionality as the RvtFader Revit C# .NET API add-in that I implemented last week. I have not quite finished it yet, but the existing functionality looks as if it already ought to be very useful indeed to anyone working with geometry in the Forge viewer – Working in Visual Studio Code – ForgeFader – Implementation – Adding custom geometry to the Forge Viewer – Next steps...
I am traveling to Gothenburg for the Forge accelerator. Meanwhile, Allan Seidel shared his WTA FireP 3D Aimer add-in that creates a custom ribbon tab with discipline related tools for placing specific Revit family types with some families requiring parameter settings made on the fly and the 3D Aimer example that "aims" a special Revit family to a target – WTA FireP 3D Aimer Tools – GitHub Repository and YouTube Video – Source Code Documentation – WTA Elec – Another Family Plunk and Concept Share...
The Forge DevCon developer conference has been happily united with Autodesk University, text note rotation is easy, and I continued my deep learning exploration for implementing a Revit API question answering system
– Forge DevCon at AU
– TensorFlow and Keras
– Updating restricted Python packages
– Rules of machine learning...
Today, I highlight yet another interesting Revit API discussion forum thread and list my ongoing research links on implementing a Revit API question answering system – Creating vertical dimensioning – Revit API QAS research continued – QnA Maker – First steps with DeepDive – YodaQA, DL-Learner and OWL – My current open questions...
I am happy to present a pretty comprehensive overview and explanation of the process of defining a shared parameter by Scott Conover.
Question: What do I need to do to programmatically create a shared parameter? I would like to set the
SetAllowVaryBetweenGroups flag on it.
Answer: You create the details needed to define a shared parameter from
Existing shared parameter file entries can be read to become an
ExternalDefinition in your code, or you can create a new entry in the current shared parameter file using the
Some people have recently reported that they encountered models lacking the
ProjectInfo project information singleton element.
Apparently, it was possible in previous versions of Revit for a faulty or malicious add-in to simply delete this element.
That obviously causes problems for other add-ins and Revit itself, who rely on its presence.
Luckily, it is not hard to fix.
Here is the latest discussion addressing this issue...
I submitted the handout for my presentation on connecting the desktop and cloud for the RTC Revit Technology Conference Europe in Porto next month. I still have to finish my work on the
roomedit3dv3 sample to demonstrate connecting the desktop with the cloud by enabling a real-time round-trip modification of the BIM via the Forge viewer; yesterday I integrated the transform viewer extension; now I have to hook up the
socket.io messaging back to the Revit add-in to update the BIM
– Create solid from bounding box
– Forge webinar series 4 – Viewer...
Today, I address a sequence of Revit MEP related steps required to insert a specific tap or take-off fitting into a duct
– How to determine duct face from location point?
– How to convert
XYZ location to duct face
– How to anchor an object like AutoCAD Architecture?
– How to inherit system information?
– How to inherit system information – take II
– How to control take-off and tap sizing on a duct?
– How to select a specific tap type to connect to a duct?
– Sample code using routing preferences to select
NewTakeOffFitting tap type...
I arrived safe and sound in San Francisco via Vancouver and am now working on the final preparations for the Forge DevCon and 3D Web Fest. Before getting to that, here are some quick notes from my short exploration last week to produce a rather overdue list of the new Revit 2017 SDK samples and on creating a point boundary condition on a structural column – New Revit 2017 SDK Samples – Creating Point Boundary Condition on End of Structural Column...
I want to continue working on the TrackChangesCloud project asap. So far, it only consists of the Revit add-in to determine and list the changes made to the BIM. The interesting part will be to store the results in a cloud database for analysis and reporting. A prerequisite for that is a reliable way to identify Revit project documents. I already explored that topic when starting to implement the FireRatingCloud sample...
Here is another bunch of issues addressed in the Revit API discussion forum and elsewhere in the past day or two – The Building Coder blog source text and index – Reloading add-in DLL for debugging without restart – Drawing curves from a list of points – Determining the distance of a family instance to the floor or elevation – Deleting a PrintSetup or ViewSheetSetting...
I am still busy preparing my presentations for Autodesk University and making slow progress due to handling too many Revit API issues in between. And blogging, as well. Here is a new cool sample contributed by Nikolay Shulga, Senior Principal Engineer in the Revit development team. In his own words – Name: Flatten – Motivation: I wanted to see whether DirectShapes could be used to lock down a Revit design – remove most intelligence, make it read-only, perhaps improve performance – Spec: converts full Revit elements into DirectShapes that hold the same shape and have the same categories – Implementation: see below – Cool API aspects: copy element’s geometry and use it elsewhere – Cool ways to use it: lock down your project; make a copy of your element for presentation/export – How it can be enhanced: the sky is the limit...
The cloud accelerator kept me busy last week, I am working hard on the CompHound project and documenting that work on The 3D Web Coder. Besides that, I submitted several enhancements to various Revit add-in projects. Here are some of my recent activities – CompHound component tracker project development – RevitLookup displays element bounding box – SvgExport for Revit 2016 – In-memory family creation and structural stiffener migration from 2012 to 2016...
Creating a DirectShape from a face used the picked face reference and its stable string representation to navigate the element geometry and determine a transformation. Let's take a look at a much simpler approach – Simpler DirectShape on picked face using total transform – The CompHound component tracker – FireRating in the cloud enhancement...
The creation of a DirectShape element on an interactively selected existing element face requires a transformation to be applied to the face of a family instance returned by the PickObject method to convert it from the family symbol space to the family instance real world coordinates – Creating DirectShape from face mesh – Determining real world transform of a family instance face returned by PickObject – Iterating over element geometry to find a specific target geometry object – Reusing sketch planes for model curve creation...
I am back from my vacation. I had a wonderful time. Now, let's look at two important recurring topics that came up while I was away: Revit API Context Summary. Detailed Form Creation Error Information. Before getting to those, let me mention some of the nice places and mountain tours I was blessed with in the past few weeks: Pallanza and the Lago Maggiore: Mont Blanc, mountaneering and climbing around the Cabane d'Orny: Monte Leone above Locarno (photo album): Pizzo...
Let me list some of the topics we discussed today in the Revit API discussion forum before I head off for vacation: Reacting to Windows mouse clicks in Revit. Reacting to changes and setting parameters using DMU or DocumentChanged. Creating a surface in Revit. FireRating in the Cloud feedback. Vacation Time Now. Summer has seriously arrived in Europe, and the weather is really good as well, for a change. I took advantage of it this weekend and climbed the Alphubel...