May 21, 2018

Autodesk Product Update Site Maintenance

If you were planning to do some software updates this coming weekend (Memorial Day weekend in the United States), get your download early, as the product update section of the Autodesk Account site will be down from 8:00 pm on Friday, May 25, 2018 through 2:59 am on Monday, May 28, 2018. (Those times are US Eastern Daylight Savings time, to the best of my knowledge.) Check out the banner notification at the top of the Autodesk Account Management page for the times in your zone.

April 23, 2018

Return of the Educational Watermark in AutoCAD 2019 and 2019 Vertical Products

The educational watermark has returned in the 2019 versions of AutoCAD® and AutoCAD-based vertical products, like AutoCAD® Architecture and AutoCAD®MEP. More details on the 2019 implementation of the educational watermark can be found in this Autodesk Knowledge Network article.

March 22, 2018

Say Goodbye... AutoCAD® Architecture and AutoCAD® MEP, and say hello to Only One. AutoCAD. with toolsets in the 2019 release. The familiar tools in AutoCAD Architecture and AutoCAD MEP will still be available, as toolsets that can be installed for use in AutoCAD. Most of the other vertical products built on AutoCAD® will also become toolsets.

Current subscribers to a vertical product have the option to stay with the vertical product or migrate to the new offering. Current permanent licenses with active maintenance will only have access to the vertical product, when it is released, but will have the option to move to subscription (and the Only One. AutoCAD. offering) when the maintenance contract is up for renewal. More details on this and other related issues can be found in the Only One AutoCAD FAQ.

March 14, 2018

Civil 3D 2018 to ACA 2013

We have started to get drawings from Civil consultants in the 2018 file format. Thanks to our recent move to the AEC Collection, we now have access to AutoCAD® Civil 3D®. I have no idea how to use that program, beyond the AutoCAD basics, but I installed the 2018 version of it in the hope that I would be able to export the received drawing to "vanilla" AutoCAD®. Similar to AutoCAD® Architecture and AutoCAD® MEP, you can go to the Application Menu > Export > Export Civil 3D Drawing to export a drawing. There is a dialog, where you can choose between AutoCAD DWG and Microstation® DGN, and, for DWG export, the Export Settings allow you to select a file format, such as 2013.

I did all of that, and Civil 3D did its thing, and drawings were generated. (I got more than one because I left the Include sheets toggle checked, so a drawing for each layout was also generated.) I fired up AutoCAD Architecture 2016 and opened the exported "Model" file, only to be greeted by this dialog:
What?! I just exported this file to a previous file format - there should not be ANY AEC objects, let alone future ones. I closed the dialog and tried run the WALLADD command. No dice - "Command not allowed because drawing contains objects from a newer version of this application." appeared at the command line. So this drawing, supposedly exported to the previous file format, can be opened, but is otherwise mostly useless. You can externally reference the file and use AEC commands in the host file, saving it from being totally useless.

Still, I expected to have a "clean" 2013-format file that only has non-AEC AutoCAD objects. I tried a Window selection in Model Space to get all the visible objects and then tried to copy them to the clipboard, hoping that if I pasted them in a new file, the future AEC Objects would not come along for the ride. That did not work, as the copy to clipboard failed.
Then I tried to select the Model Space objects and use the WBLOCK command, again hoping that the future AEC Objects would be left behind. That also failed.
Finally, I opened the file in AutoCAD Architecture 2018 and tried to use the AECEXPORTTOAUTOCAD2013 command, in the somewhat desperate hope that might work. I got the following dialog indicating that an error had occurred during the save.
And then this dialog showed up, to rub salt into the wound. I tried "saving" as AutoCAD-only objects!
This was followed by a second showing of the warning dialog recommending the use of the RECOVER command. Opening this file in AutoCAD Architecture 2016 resulted in the same Open Drawing - New Versions of Objects in Drawing dialog as shown in the first image above.

Finally, I tried starting a new drawing and using the INSERT command to insert the originally exported "Model" drawing file. I received the following dialog:
The small-print statement "Newer AEC objects will be disallowed from participating in this operation" gave me hope, as it was not flat-out refusing to do the insertion, and I did not want the newer objects in the file. That hope was confirmed, as it did insert what appeared to be all of the objects that were visible in the exported file, and I was able to add AEC objects to the file. Upon saving and reopening, there were no dialogs chastising me for having a file with future AEC Objects in it. Success! I still think that the original export should have been AEC-object-free, and object to having to go to the extra step of inserting the exported file into an empty file to get rid of the future objects, but at least I have a workaround for providing a "clean" file in the 2013 format that does not require proxy objects or object enablers.

February 19, 2018

Revit: "Mystery" Names on the Room Name Drop-Down List

Like other text parameters in Revit, as you add Rooms to your project and provide values to the Name parameter, a list of used values is generated and made available for selecting the Name of a newly added Room. This can speed the naming of Rooms, when you have multiple Rooms with the same Name, and also makes it easier to be consistent in how you name them.

So today, I was the only design technology helpdesk staffer, and a question came in regarding the fact that in the project on which this person was working, there was a long list of room names from which to choose, that were NOT Rooms in that project. The problem was there were so many of these "mystery" names that it was slowing down the process of finding the desired name on the list, and the person wanted to be able to delete the ones that did not apply. I opened the project file and set up Room Schedules for each phase in the project, hoping to find that there were unplaced Rooms in one or more of the Phases that were generating these names. This turned out to not be the case.

Perplexed, I created a new project from our template, and found that those same names were on the list there, as well. I searched the help and the internet, trying to figure out what the source of these names was, to no avail. Then it occurred to me that there could be a Color Scheme in the project that was defining these names. I opened the Edit Color Scheme dialog (on the ribbon: Architecture > Room & Area panel flyout > Color Schemes), set the Category to Rooms and found a number of Color Schemes in our template file. Most were based on the Department parameter, but one was based on the Name parameter, and it was the source of the "mystery" names on the Room Name list.

February 15, 2018

Revit: Linked AutoCAD File with MText and Columns

One of the users at my firm was trying to link an AutoCAD file into Revit 2016, to get some formatted text notes into his project. The formatting of the text changed from what shows in AutoCAD when linked into Revit. It turned out he was using the Columns feature of MText to get his notes to wrap into a second column, as the total "height" of the notes was greater than the height of the sheet. Revit ignored the columns formatting and displayed the text as one continuous column, with the width set to match the total width of both columns in AutoCAD.

The solution was to reformat the MText in AutoCAD, removing the columns formatting, setting the overall width to that of one column, and breaking the MText into two separate pieces, one for each of the former columns. Any future edits to the AutoCAD file will have to deal with the separation of the MText into two pieces, but the text does appear as desired when linked into Revit.

One more issue that we will not encounter as often as we start using Revit 2018 on new projects, given the somewhat improved ability to format text in 2018.

January 22, 2018

ExportToAutoCAD and Civil 3D Object Enabler

I have not tested this exhaustively, but I had an issue today where I was trying to export what appeared to be a "vanilla" AutoCAD 2018 format file back to the 2013 file format, using AutoCAD Architecture 2018. On my initial attempts, I got a message saying there was an error and that I should try to RECOVER the exported file. I did so, and no errors were reported, but I got the dreaded future objects warning, and I could not add a Wall in the file. I had previously installed the Civil 3D object enabler on AutoCAD Architecture 2018, and suspected that was the reason why there were still future objects in the exported file. I uninstalled the object enabler, and was able to export to the 2013 file format without any errors, warnings or issues.

I am not certain if having the object enabler installed was adding Civil 3D objects, which the AutoCAD Architecture EXPORTOTAUTOCAD2013 command could not export/explode or if the enabler was causing an error that left future AutoCAD Architecture AEC objects in the file, but removing the enabler appears to have fixed things, for now.

December 29, 2017

ACA: Curved Mass Elements - Part 2: Shape Impact

First article in the series: ACA: Curved Mass Elements - Part 1: FacetDev and FacetMax

The Shape property of a curved Mass Element will affect how it reacts to the FacetDev and FacetMax settings. Any of the standard shapes that involve a curve, Arch, Barrel Vault, Cone, Cylinder, Dome, Doric and Sphere, will be initially placed based on the settings of FacetDev and FacetMax, and will update when changes to the FacetDev value would result in a different number of segments. A change to the value of FacetMax will not result in a change to the faceting of existing Mass Elements, even if it would cause a lesser or greater number of segments. The effect of a change to FacetMax on existing objects will be seen only if the value of FacetDev is subsequently changed by an amount sufficient to result in a different number of facets.

Mass Element Extrusions and Revolutions that have curves in the defining Profile will also retain the ability to change the number of facets when FacetDev is changed. Freeform Mass Elements, however, will have the number of facets present at the time of creation, regardless of later changes to the value of FacetDev. How can you end up with a Freeform Mass Element? The following will produce one:
  • Use of the Boolean tools to create Unions, Subtractions or Intersections of two or more Mass Elements that results in a shape that cannot be created by extruding a Profile placed in the X-Y plane in which the first object was created.
  • Use of the AecMassElementConvert command to convert an AEC object or an AutoCAD 3D Solid to a Mass Element. The Convert to Mass Element tool on the out-of-the-box Massing palette (in the Design tool palette group, in the US Imperial content, and, likely other content as well) runs this command. You can also access this command by selecting an AutoCAD 3D Solid, right clicking and chosing Convert to > Mass Element from the context menu.
  • Use of the ConvertMEToFFME command to convert an AutoCAD 3D Solid or a standard-shape Mass Element to a Freeform Mass Element. For standard-shape Mass Elements, this command can be invoked by selecting the Mass Element, right clicking and choosing Convert to > Freeform Mass Element on the context menu. NOTE: If you right click on one of the standard-shape tools on the Massing tool palette, and choose Apply Tool Properties to > Mass Element, the ConvertMEToFFME command will be run, but the 3D Solid or Mass Element will be converted into a Mass Element with the standard shape of the tool which was right-clicked.
In the images below, all three things started from the same source. At the lower left, there are the original objects: a Cylinder base and a Cone on top. In the middle, with FacetDev set to 20, with the Cylinder selected, Boolean > Union was selected from the right-click context menu, and then the Cone was chosen. The same operation was performed on the source objects in the upper right, but with FacetDev set to 0.5. In the top image, FaceDev is set to 0.5, and you can see that the facets on the Freeform Mass Element in the upper right match those of the Cylinder and Cone in the lower left, while the Freeform Mass Element in the middle retains the faceting that was current when it was created. For comparison, FacetDev is set to 20 in the lower image, and you can see that the faceting of the middle Freeform Mass Element matches that of the Cylinder and Cone in the lower left, while the faceting of the Freeform Mass Element in the upper right remains as it was at the time it was created.

December 27, 2017

Dynamo: Forcing Exactly One-Half to Round Up

In the same Dynamo graph on which my previous post was based, I had a need to round a real number to the nearest whole number, and I wanted a decimal of exactly .5 to round up. The Math.Round node met all my rounding needs except for when the decimal value is exactly 0.5; that node "rounds to even," which means that both 1.5 and 2.5 will round to 2, since 2 is even. Statistically, when dealing with a large amount of data, always rounding exactly 0.5 to even (or rounding always to odd) makes sense, as always rounding up would tend to skew any mathematical analysis of the data to a higher value. In this case, the number was being used only as a label, and I decided that it should always round up.

I put together the following nodes to achieve the desired results. Numbers in the explanation below refer to the numbers in the image. As always, you can click on the image to see the full-size version.

  1. This code block provides the source number to be processed.
  2. The nodes in Area 2 divide the source number by 100. In the example in the image, this results in a value of 12.5. This value is fed to the nodes in Areas 3, 4 and 5.
  3. The Math.Floor node truncates any fractional part in the value from Area 2, resulting in an integer of 12 in the example. This value is fed to the nodes in Areas 5 and 6.
  4. The Math.Round node takes the value from Area 2 and rounds it. For the example value of 12.5, the .5 is rounded to even, or 12. The result is a floating point number. This value is fed to a node in Area 7.
  5. The nodes in Area 5 take the value from Area 2 (12.5 in the example) and Area 3 (12 in the example) and subtract the Area 3 value from the Area 2 value. The result of the subtraction (0.5 in the example) is compared to the value in the Code Block, which is 0.5, by the == node. If the two are equal, the result of the comparison is true, as it is in the example; otherwise, it is false. This result is fed to the test input of the If node in Area 8.
  6. The Area 6 nodes take the integer result from Area 3 and add the value in the Code Block, or 1.0, to it. This is the rounded up value; it is 13 in the example.
  7. The two Math.Floor nodes in Area 7 take the real number results from Areas 4 and 7 and convert them to integers. These values were already whole numbers, but the Math.Round and + nodes output is a floating point number, not an integer. The application for which this rounding is being done required an integer. If it does not matter to your application whether the rounded number is a floating point number or an integer, these nodes would not be required. In hindsight, it occurs to me that one Math.Floor node could have been placed after the If node.
  8. The If node in Area 8 determines whether to use the result of the nodes in Areas 4 - 7 or Areas 3 - 6 - 7, based on whether Area 5 evalutes to true or false. If true, then the fractional part was exactly 0.5, and the rounded up value from Areas 3 - 6 - 7 is used. Otherwise, the rounded value from Areas 4 - 7 is used. This value will be rounded up for fractional values greater than 0.5 and down for fractional values less than 0.5.

December 25, 2017

Dynamo: Selecting All Curtain Walls

An opportunity to use Dynamo to create a string with which to tag Curtain Walls came up in a thread in the AUGI Revit Architecture - Families Forum. The first task for the Dynamo graph is to select all of the Curtain Walls in the Autodesk® Revit® project file. The All Elements of Category node, in combination with the Categories node, is the usual method for selecting all objects of a particular category in a project file, but there is no Curtain Walls category; you have to choose Walls as the category, and you get all of the Walls, including Basic Walls, Curtain Walls and Stacked Walls.

Thanks to the Filtering / Selecting Curtain walls thread in the Dynamo Forum, in particular, the third post by thread initiator Aseem Deshpande, I was able to use a modified version of what was shown in that post to generate a list of just Curtain Walls from the list of all Walls. (The code posted by Aseem Deshpande sought to remove the Curtain Walls, leaving only "opaque" Walls.) I too had used the Element.Parameter node to examine the available parameters and noted that the Family parameter held the information I needed to determine if a Wall was a Curtain Wall. Unfortunately, I also found that the Element.GetParameterValueByName node was returning the Type name, rather than the value of the Family parameter. The nodes in the post provide a way to make use of the Family parameter value to determine if a particular Wall is a Curtain Wall.

In the image below, the list of all Walls generated by the nodes in the image above, is fed to both the Element.Parameters node and the List.FilterByBoolMask node.
The Element.Parameters node takes the list of all Walls and creates a list of lists; each sub-list contains a list of the parameters attached to each Wall. The Parameter.Name node takes the list of lists of parameters and converts each parameter object to a string of the parameter name. That list of lists of parameter names is then fed to the List.FirstIndexOf node, which outputs a list of the index of the first occurrence of the string "Family" in each sub-list.

The List.GetItemAtIndex node takes the list of parameters lists and the list of indexes of the Family parameter to create a list of the Family parameters. The String from Object node converts each item on that list from a parameter and its value to a string. A code block then tests each string to see if it is equal to "Family : Curtain Wall", which is the value that will be present for Curtain Walls; the output is a list of True or False values, True representing Curtain Walls and False representing Basic or Stacked Walls. This list of Booleans is used as the mask input to the List.FilterByBoolMask node, and is applied to the list of all Walls. That node generates two lists, the "in" list contains all the "Trues", or Curtain Walls, and the "out" list contains all the "Falses". The "in" list is what I needed for the balance of that graph, a list of all of the Curtain Walls in the Revit project.