November 30, 2017

ACA: Column Bubble "Leader" Object Types

I ran into some display issues with the anchors that connect Column Bubbles to a Column Grid, and discovered that there are two different object types that can be involved, depending upon how the labels were generated. It took me a while to sort all of that out, so I thought I would document it here for my own future reference as well as to share it with others.

If you create the labels by selecting a Column Grid and use the ColumnGridLabel command, or a Custom Column Grid and use the CustomColumnGridLabelAdd command, the anchor objects will be Anchor Bubble to Column Grid objects. If you use the Column Bubble tool (such as the one on the out-of-the-box Annotation tool palette), the anchor objects will be Anchor Lead Entity to Node objects.

If you use a mix of these, any display changes will have to be applied to both object types to have them display the same way.

November 26, 2017

ACA: Curved Mass Elements - Part 1: FacetDev and FacetMax

A thread in the AutoCAD® Architecture Forum last month brought to my attention that I have not yet addressed how AutoCAD Architecture handles "curved" Mass Elements. "Curved" is in quotation marks because AutoCAD Architecture does not display Mass Elements with true curves, but instead will approximate curves with a series of straight-line segments (2D) or facets (3D).
In the image above, a Mass Element Cylinder with a radius of 10'-0" and a height of 5'-0" has been placed, with FacetDev set to 10'-0" to make the facets obvious.

Two settings control the number of segments that are generated, FacetDev and FacetMax:
  • FacetDev is the allowable deviation of a facet from the true curve, and represents the maximum distance allowed from the midpoint of a facet, perpendicular to the true curve. Larger values will generate fewer facets. Smaller values will generate more facets. A full circle will never have less than eight segments, as seen in the image above. FacetDev must be a positive (non-zero, non-negative) value. Note: If imperial architectural units are set current, the command line will show the current value as a linear distance in those units (feet and inches), the value you enter needs to be a real number, without any feet or inchese symbols. For example, to set a value of 1'-0", type 12 and press the ENTER key.
  • FacetMax sets a maximum number of facets for a single curve. For designs that feature curves with a wide range of radii, FacetMax allows setting FacetDev to a sufficiently small number to achieve a reasonable smoothness on the smaller radii without imposing a serious performance hit due to the large number of segments on the larger radii, which would look smooth with larger FacetDev value. Valid values for FacetMax are integers between 100 and 10000, inclusive.
In the image below, I changed the Visual Style from Conceptual (used in previous image) and I set DISPSILH to 0, so that the lines between facets on the curved surface will show (rather than just displaying the silhouette), viewing the same Mass Element Cylinder as in the previous image. On the left side, FACETDEV remains set to 120 (or 10'-0"). On the right, FACETDEV has been set to 0.5 (or 1/2"). The first value is high enough to result in the minimum 8 facets. The second number results in a much higher number of facets, and is closer to a smooth curve.

With DISPSILH reset back to 1, the image below shows the same cylinder in the 2D Wireframe (left) and Conceptual (right) Visual Styles.

October 31, 2017

ACA: Start Tab and New Drawing Files

This most likely applies to "plain" AutoCAD® and all verticals built on AutoCAD. The Start tab has been there for quite a few releases so far, but somehow I only figured the following out recently, so I thought I would document it here for anyone else who is unaware of it. I almost always start AutoCAD® Architecture from a desktop shortcut, and then start and leave open a blank, new drawing ("Drawing1"). This is an old habit - many releases back, settings would get lost if you closed the program in a "zero-doc" state (no open drawings), so I got in the habit of leaving the initial drawing that opened when starting the program from a shortcut (before the New/Start tab was added), as I like to save and close my working files manually, rather than relying on the program to prompt me to save any unsaved files if I were to close the program with working files open. (I have a lot of little habits like that - otherwise, I am perfectly normal.)

Anyway, now that the Start tab is there on startup, I usually create a new file from my default template, and had been using the Templates drop-down list to choose a template.
Here at home, the list of templates is pretty long, but the last template used has the initial highlight, making it semi-easy for me to select it again most of the time. At work, the list is much shorter, making it even easier to get the right one. I had been doing that for years, until I discovered that the Start Drawing rectangular area just above the Templates drop-down list is not just pretty graphics - it is a giant button, and will start a new drawing with the template assigned as the QNEW template in the Options dialog for the current AutoCAD Profile. That is the template I use for Drawing1 99.99% of the time anyway, so now I can save at least three to four seconds and a click every time I start the program by clicking on that button instead of using the drop-down list.


PS. Yes, I see the notification that I have three product updates. I checked, and they are for various versions of Revit®. I promise to download and install them soon.

October 21, 2017

ACA: Using AutoLISP to Change the Heights of All Doors of a Given Style

There was a request in the AutoCAD® Architecture Forum for a script or customization that could change the heights of all Doors of a specific style to 5'-2". I decided that would be an interesting challenge, and decided to see if I could come up with an AutoLISP® function that would to just that. The exact style name was not given, and I may not have had a style of that name, anyway, so I decided to set up my test file with several instances of the out-of-the-box Bifold - Single Door Style, along with some other Doors.

The routine first gets all of the Doors in the drawing file. If none are found, an alert message is displayed, and the function terminates. If Doors are found, the function iterates over that selection set of all Doors, one Door at a time, looking for Doors of the Bifold - Single Door Style. When one is found, its Height property is changed to 62.0. When all of the Doors have been examined, the program reports that it is complete and lets the user know how many Doors had their height set to 62.0, of the total number of Doors. The routine does not check to see if the height is already 62.0, so it will report the total number of Bifold - Single Doors as being processed. If it were important to report on the number of Doors that actually were changed, the current height could be obtained and compared against the desired height, and any Doors that were already set to the desired height could be skipped.
(defun C:DRHT (                         ; No arguments.
               /
                iCount                  ; Loop counter [integer].
                iMax                    ; Total number of Doors in file [integer].
                iProc                   ; Number of Doors processed [integer].
                objDoor                 ; Door object being processed.
                ss1                     ; All Doors in the file [selection set].
                sStyleName              ; Style name of Door being processed [string].
              ) ;_ End arguments and local variables.
  (setq        ss1 (ssget "_X" '((0 . "AEC_DOOR"))))
  (cond
    ((not ss1)                          ; No Doors in drawing.
     (alert "Drawing file has no Door objects.\nNothing to do!")
    ) ;_ End condition A1.
    (T                                  ; Else, continue.
     (setq iMax          (sslength ss1)
           iCount 0
           iProc  0
     ) ;_ End setq.
     (while (< iCount iMax)
       (setq objDoor    (vlax-ename->vla-object (ssname ss1 iCount))
             sStyleName (vlax-get-property objDoor 'StyleName)
       ) ;_ End setq.
       (if (= sStyleName "Bifold - Single")
         (progn
           (vlax-put-property objDoor 'Height 62.0)
           (setq iProc (1+ iProc))
         ) ;_ End progn.
       ) ;_ End if.
       (setq icount (1+ icount))
     ) ;_ End while.
    ) ;_ End condition A2.
  ) ;_ End cond A.
  (prompt
    (strcat
      "\nDRHT function completed:  "
      (itoa iProc)
      " Door(s) of "
      (itoa iCount)
      " total Door(s) processed. "
    ) ;_ End strcat.
  ) ;_ End prompt.
  (prin1)
) ;_ End C:DRHT.

Change the (if (= sStyleName "Bifold - Single") line, replacing "Bifold - Single" with the name of the Door Style you want to operate on (enclosed in double quotes). Change the (vlax-put-property objDoor 'Height 62.0) line, replacing 62.0 with a real number representing the desired Door Height in whatever your current linear drawing unit is (inches, millimeters, etc.). The code could also be modified to remove the Style Name test, if you wanted to reset the heights of all Doors in a project to a specific height.

September 24, 2017

Autodesk Answer Days

The next Autodesk® Answer Day will be on October 5, 2017, from 6:00 am to 6:00 pm U.S. Pacific Time. Autodesk team members will be scouring the AutoCAD, AutoCAD Civil 3D, Revit, Inventor, Vault, Maya and 3ds Max forums.

This event will also take place in the following German-language forums, on October 5, 2017, from 10:00am to 5:00pm Central Europe Time: 3ds Max - Deutsch, AutoCAD Produktfamilie - Deutsch, EAGLE - Deutsch, Fusion 360 - Deutsch, Inventor - Deutsch, Maya - Deutsch, Revit - Deutsch.

Read more about the event here and mark your calendar.

August 11, 2017

Multiple Plug-ins Ribbon Tabs...

...instead of one Add-ins ribbon tab, in AutoCAD® Architecture 2018. I found this Autodesk Knowledge Network article on the topic, indicating it was for AutoCAD® Map 3D, 2014/2015, but also applying to AutoCAD® and other verticals, for the 2014, 2015, 2016 and 2017 releases. The instructions worked just fine in AutoCAD Architecture 2018.

As noted, I did not need to do Steps 2, 3 and 4, but I did check to see that was all in place prior to proceeding with the balance of the steps. After unloading the partial customization files for the two plug-ins that I had installed and then closing and restarting the program, the individual panels for the plug-ins showed up on a single Add-ins tab. I did have to turn on the display of the Add-ins ribbon tab, but that was easily done by right-clicking on a blank area of the ribbon and choosing Show Tabs > Add-ins from the context menu.

Oddly, it all came in on one Add-ins tab for AutoCAD® MEP 2018, on the same machine.

August 03, 2017

AutoCAD Architecture 2018.0.2 Update Released

The 2018.0.2 Update for AutoCAD® Architecture 2018 was released on Tuesday, August 1, 2017. You can read the full release notes here. This update addresses issues with viewport layers not remaining frozen for Multi-View Blocks, AEC Objects in external reference files with display overrides still plotting and fatal errors caused by an increase in graphic objects during AEC object insertion.

The update is available through your Autodesk Account page or in the Autodesk desktop application.

July 30, 2017

Ribbon Tools in AutoCAD 2018.1 Update

The ".1" update for AutoCAD® 2018 for subscription and maintenance customers was released on July 27, 2017. You can see what's new in AutoCAD 2018.1 by reading the AutoCAD 2018.1 and AutoCAD LT 2018.1 Update Preview Guide. According to the Readme, the AutoCAD 2018.1 Update can be installed on AutoCAD-based verticals, such as AutoCAD® Architecture 2018 and AutoCAD® MEP 2018.

PLEASE NOTE: The update will overwrite the ACAD.cuix file for your 2018 product. If you have made any customizations to the ACAD.cuix file, be certain to back that file up prior to installing the update.
08/03/2017 UPDATE:  I have been told that the ACAD.cuix file does not get overwritten if you have already run the program at least once, but that the file is updated and the new panel and tool are added.  I would still back the file up prior to running the update if you have any customizations. The ACA.cuix or MEP.cuix file will not be updated.

While compatible with the vertical applications, the update will not update the customization files for those verticals that do not use the ACAD.cuix file as the main customization file, such as ACA.cuix and MEP.cuix. I personally have no problem with that, as I would rather maintain the Workspace customizations I have done in my main CUIX file* and manually transfer any new items I deem worthy. Here is how to get the Named Views panel and Insert View tool added in the AutoCAD 2018.1 update into your vertical's customization file. I will be working with the ACA.cuix file, but the same process applies to the MEP.cuix file, or that of any other AutoCAD-based vertical that does not use the ACAD.cuix file.

The first step is to install the AutoCAD 2018.1 update, which you can download from your Autodesk® Account page.

With the updated ACAD.cuix file for 2018 in place, you can now use the Transfer tab of the Customize User Interface dialog to copy the panel and the tool to your customization file. The following Screencast shows how to do so.
  1. After installing the AutoCAD 2018.1 Update, launch your vertical product.
  2. Start the CUI command to open the Customize User Interface dialog. Select the Transfer tab.
  3. The left pane of the transfer tab may already have your current main customization file open. If not, open it on this side.
  4. On the right pane, use the open tool and navigate to the location of the ACAD.cuix file in your user profile. Mine was located at
    C:\Users\dkoch\AppData\Roaming\Autodesk\ACA 2018\enu\Support
    Substitute your user name for "dkoch". Depending upon where you are in the world and what language version you have installed, the "enu" folder may have a different name. If you have your roaming Windows profile files on your network, then look there for the AutoCAD Vertical Product 2018 Support folder. Also keep in mind that the AppData folder is a hidden folder in Windows, so you will have to turn on the display of hidden files and folders if you plan to use the Search feature or navigate to the folder.
  5. On both the left and right panes, expand the Ribbon node and then the Panels node below that. Scroll down to find the Layout - Viewports panel in each customization file. Expand that panel's node and then expand the Row 1 node below that.
  6. On the right pane (ACAD.cuix), select both the Separator after Sub-Panel 1 and the Sub-Panel 2 node. The Sub-Panel 2 Node contains the Insert View tool.
  7. Hover the mouse over one of the highlighted items, press and hold the left mouse button down and drag those two items over to the left pane. Position the cursor just below the Sub-Panel 1 node. When you see the blue bar, release the left mouse button to drop those two items into the ACA.cuix version of the Layout - Viewports panel.
  8. If the Separator comes in below the Sub-Panel 2 node in the left pane, drag it up so that it is in between the Sub-Panel 1 and Sub-Panel 2 nodes.
  9. In the right pane (ACAD.cuix), scroll to find the View - Named Views panel.
  10. Drag the View - Named Views panel from the right pane to the left pane, under one of the nodes under the Panels node and drop it, to copy it to the ACA.cuix.
  11. Select the Customize tab in the Customize User Interface dialog.
  12. In the upper left pane, under the ACA node (or the node for the main customization file for your vertical product), expand the Ribbon node, and then expand the Tabs node under that.
  13. Scroll down to find the View - ACA ribbon tab, and expand that node. You will see a listing of the panels currently assigned to that tab.
  14. Scroll down and expand the Panels node under your main customization file. Scroll down to find the View - Named Views panel that you just copied.
  15. Drag the View - Named Views panel up toward the top of the list box in the upper left pane. The list box should start scrolling when you get close to the top. Keep scrolling until the View - ACA ribbon tab is visible.
  16. Drop the View - Named Views panel into the list of panels under the View - ACA node. I find that it is difficult to drop an item at the very end of a list of things under a node, so I usually drop it just above the current last item, and then drag that item above the item I just dropped, if I want the added item to be the last in the list.
  17. Select the OK button to ratify your changes and dismiss the Customize User Interface dialog.
  18. If a layout is not already set current, select a layout. The Layout contextual ribbon tab should appear. Select it and verify that the Separator and the Insert View tool were added to the Layout Viewports panel.
  19. Select the View ribbon tab and verify that the Named Views panel was added.

* - To make moving to a new release easier, I try to limit customization of the ACA.cuix file to those things that have to be there, such as Workspaces, and put as much as I can into a separate customization file, loaded as a partial customization file. That keeps my "stuff" mostly separate and I can adopt the ACA.cuix file that ships with the new release.

July 23, 2017

In What Version of AutoCAD Was My File Saved - Update 1

After using the FMT command over the last month or so (see this previous post), I became annoyed by the fact that, when trying to check multiple files in the same folder, I had to navigate to that folder from "My Documents" each time. The AutoLISP getfiled function can be told to start in a specific folder; my original code was written quickly and was initially more of a proof-of-concept effort. Actual use exposed the problem with using the default starting folder. So I made a few modifications to the code, including establishing a global variable (one that does not lose its value after a run of the program), sFmtPath, to hold the directory path of the file selected on the previous use of FMT.

I added an if statement at the very beginning of the code to test to see if the value of sFmtPath is either nil or is not a string. If either of those conditions is true, the value is reset to an empty string [""]. If neither is true, the string value is left as is. This string value is then passed as the second argument to the getfiled function. If you check the old code, you will see that this was hard-coded as an empty string, so on first use in a drawing editing session (or if the value was somehow changed to a non-string value), the program will run just the way the old one did, starting in the My Documents folder. But after that first run, supplying the folder path there and setting the flags argument (last argument) to 16 (setting the 4 bit) has the getfiled function use that folder as the initial starting folder, making it easier to check multiple files in the same folder, or a folder that is close by in the folder structure.

I suppose the initial test should, if sFmtPath does contain a string, also then check to see if that string represents a folder on the current machine, but, for now, I decided that would be overkill. Unless you intentionally mess with the value of sFmtPath or if you have another program that also sets a value of a global variable that is also named sFmtPath, there should not be any issues.

Here is the revised AutoLISP code.
(defun C:FMT ( / file1 sfile1 sline1 stext1)
  (if (or
        (not sFmtPath)
        (/= 'STR (type sFmtPath))
      ) ;_ End or.
    (setq sFmtPath "")
  ) ;_ End if.
  (setq sfile1 (getfiled "Select Drawing File" sFmtPath "dwg" 16)
        file1  (open sfile1 "r")
  ) ;_ End setq.
  (if file1
    (progn
      (setq sline1 (read-line file1)
            stext1 (substr sline1 1 6)
            sFmtPath (vl-filename-directory sfile1)
      ) ;_ End setq.
      (close file1)
      (cond    ; Condition A.
        ((= "AC1032" stext1)
         (alert
           (strcat
             "Header = AC1032."
             "\nFile " sfile1
             "\nis saved in the 2018 file format."
           ) ;_ End strcat.
         ) ;_ End alert.
        ) ;_ End condition A1.
        ((= "AC1027" stext1)
         (alert
           (strcat
             "Header = AC1027."
             "\nFile " sfile1
             "\nis saved in the 2013 file format."
           ) ;_ End strcat.
         ) ;_ End alert.
        ) ;_ End condition A2.
        ((= "AC1024" stext1)
         (alert
           (strcat
             "Header = AC1024."
             "\nFile " sfile1
             "\nis saved in the 2010 file format."
           ) ;_ End strcat.
         ) ;_ End alert.
        ) ;_ End condition A3.
        ((= "AC1021" stext1)
         (alert
           (strcat
             "Header = AC1021."
             "\nFile " sfile1
             "\nis saved in the 2007 file format."
           ) ;_ End strcat.
         ) ;_ End alert.
        ) ;_ End condition A4.
        ((= "AC1018" stext1)
         (alert
           (strcat
             "Header = AC1018."
             "\nFile " sfile1
             "\nis saved in the 2004 file format."
           ) ;_ End strcat.
         ) ;_ End alert.
        ) ;_ End condition A5.
        ((= "AC1015" stext1)
         (alert
           (strcat
             "Header = AC1015."
             "\nFile " sfile1
             "\nis saved in the 2000 file format."
           ) ;_ End strcat.
         ) ;_ End alert.
        ) ;_ End condition A6.
        ((= "AC1014" stext1)
         (alert
           (strcat
             "Header = AC1014."
             "\nFile " sfile1
             "\nis saved in the R14 file format."
           ) ;_ End strcat.
         ) ;_ End alert.
        ) ;_ End condition A7.
        ((= "AC1012" stext1)
         (alert
           (strcat
             "Header = AC1012."
             "\nFile " sfile1
             "\nis saved in the R13 file format."
           ) ;_ End strcat.
         ) ;_ End alert.
        ) ;_ End condition A8.
        ((= "AC1009" stext1)
         (alert
           (strcat
             "Header = AC1009."
             "\nFile " sfile1
             "\nis saved in the R11/R12 file
            ) ;_ End strcat.
         ) ;_ End alert.
        ) ;_ End condition A9.
        ((= "AC1006" stext1)
         (alert
           (strcat
             "Header = AC1006."
             "\nFile " sfile1
             "\nis saved in the R10 file format."
           ) ;_ End strcat.
         ) ;_ End alert.
        ) ;_ End condition A10.
        ((= "AC1004" stext1)
         (alert
           (strcat
             "Header = AC1004."
             "\nFile " sfile1
             "\nis saved in the R9 file format."
           ) ;_ End strcat.
         ) ;_ End alert.
        ) ;_ End condition A11.
        ((= "AC1003" stext1)
         (alert
           (strcat
             "Header = AC1003."
             "\nFile " sfile1
             "\nis saved in the Version 2.60 file format."
           ) ;_ End strcat.
         ) ;_ End alert.
        ) ;_ End condition A12.
        ((= "AC1002" stext1)
         (alert
           (strcat
             "Header = AC1002."
             "\nFile " sfile1
             "\nis saved in the Version 2.50 file format."
           ) ;_ End strcat.
         ) ;_ End alert.
        ) ;_ End condition A13.
        ((= "AC1001" stext1)
         (alert
           (strcat
             "Header = AC1001."
             "\nFile " sfile1
             "\nis saved in the Version 2.22 file format."
           ) ;_ End strcat.
         ) ;_ End alert.
        ) ;_ End condition A14.
        (T
         (alert
           (strcat
             "Header = "
             stext1
             "\nFile " sfile1
             "\nis saved in an unknown file format."
           ) ;_ End strcat.
         ) ;_ End alert.
        ) ;_ End condition A15.
      ) ;_ End condition A.
    ) ;_ End progn.
    (prompt "\nNo file selected. ")
  ) ;_ End if.
  (prin1)
) ;_ End C:FMT

July 10, 2017

Autodesk Answer Day - APAC


The next Autodesk® Answer Day, for Asia-Pacific customers, will be held on Thursday, July 13, 2017. The event will be held in English and Chinese, and will cover AutoCAD®, AutoCAD® Mechanical, Inventor®, and Revit®. The events will be held in the respective product forums; refer to this Autodesk Community Announcement page for details on the times and links to the forums.