Showing posts with label Door. Show all posts
Showing posts with label Door. Show all posts

March 22, 2021

ACA: Using AutoLISP to Change the Swing of all Swinging Doors

There was a request to change the "swing angle" of all of the Doors in a file to 30 degrees. Building on code I previously wrote for changing the heights of Doors a given style, I put together a command function in AutoLISP that does that. One thing to know before embarking on this particular task is that while all of the 20 built-in Door Types appear to have a SwingAngle property (I did not check all 20, so do not hold me to that), only five of those types (Single, Double, Double Opposing, Uneven and Uneven Opposing) will accept a change to that property; the other 15 types will throw an error and crash the routine. There are four additional types (Single-Dhung, Double-Dhung, Uneven-Dhung and Communicating) that are in fact swinging Doors, but for some reason were not included when the SwingAngle property was introduced. (See comments at the end of the article for more on that.) The "swing" of these types can be changed using the OpenPercent property; a value of 16 approximates 30 degrees. No change is made to the other 11 types of Doors.

The following code defines a command called DRSW that will change the "swing" of Doors of one of the nine types previously mentioned to 30 degrees/16 percent. That amount is hard-coded, on the assumption that this would be part of a larger automation task meant to run unattended (or that you always wanted the same degree/percent values). Collecting user input would be easy enough to add at the beginning if you want to specify the angle/percent each time you run the program.
(defun C:DRSW (                         ; No arguments.
               /
                iCount                  ; Loop counter [integer].
                iDType                  ; Door Type [integer].
                iMax                    ; Total number of Doors in file [integer].
                iProc                   ; Number of Doors processed [integer].
                objDoor                 ; Door object being processed.
                objDStyle               ; Door Style of the object being processed.
                ss1                     ; All Doors in the file [selection set].
              ) ;_ End arguments and local variables.
  (vl-load-com)
  (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))
	     objDStyle	(vlax-get-property objDoor 'Style)
	     iDType	(vlax-get-property objDStyle 'Type)
       ) ;_ End setq.
       (if (or
	     (= iDType 1)               ; Single.
	     (= iDType 2)               ; Double.
	     (= iDType 5)               ; Double Opposing.
	     (= iDType 6)               ; Uneven.
	     (= iDType 8)               ; Uneven Opposing.
	   ) ;_ End or.
	 (progn
	   (vlax-put-property objDoor 'SwingAngle 30)
	   (setq iProc (1+ iProc))
	 ) ;_ End progn.
	 (if (or
	     (= iDType 3)               ; Single-Dhung.
	     (= iDType 4)               ; Double-Dhung.
	     (= iDType 7)               ; Uneven-Dhung.
	     (= iDType 20)              ; Communicating.
	   ) ;_ End or.
	   (progn
	     (vlax-put-property objDoor 'OpenPercent 16)
	     (setq iProc (1+ iProc))
	   ) ;_ End progn.
	 ) ;_ End if.
       ) ;_ End if.
       (setq iCount (1+ iCount))
     ) ;_ End while.
    ) ;_ End condition A2.
  ) ;_ End cond A.
  (prompt
    (strcat
      "\nDRSW function completed:  "
      (itoa iProc)
      " Door(s) of "
      (itoa iCount)
      " total Door(s) processed. "
    ) ;_ End strcat.
  ) ;_ End prompt.
  (prin1)
) ;_ End C:DRSW.

Originally, all Door Types controlled how open they appeared using the Opening percent property on the Properties palette (or its prior equivalent). 100% open for a swinging door meant a 180-degree swing. So a 90-degree swing would be 50%. Some users complained that may make sense to a programmer, but they thought of door swings in terms of degrees, not percentages. So at some point (I do not recall which release), a SwingAngle property was added to Door objects, and, for the five Door types noted above, Swing angle replaced Opening percent on the Properties palette. For those five Door types, the two values are linked - change one and the other changes, too. (That is how I determined that 16% was the right value for 30 degrees - that is the value for OpenPercent that the program shows when the SwingAngle is set to 30.) I have no idea why the three Dhung and the Communicating Door Types were omitted from the change to SwingAngle. Perhaps the original complainants rarely, if ever, used those types and so they were not in the original request. Or maybe the way things were set up in the program, it was easy to make the change for the five types that were changed, but not for the other four. Whatever the reason, things are the way they are, and the code above accommodates that.

February 28, 2019

ACA: Custom Display Block for Door in Plan View

You may have noticed that even after assigning a custom Profile to a Door to add a glazed panel to the Door, that there is no change to the graphics when viewing the Door in "plan" (Top view direction) in any of the out-of-the-box Display Representation Sets, That is because these use one of the "plan" Display Representations for Doors (Plan, Plan High Detail, Plan Low Detail, Plan Screened, Reflected or Reflected Screened), and the Panel component in these is 2D graphics representing the panel width and depth (overall Door width only, in Plan Low Detail) that is not tied to the 3D representation where the glazing is shown.

In my work, I have never needed to indicate glazing in a Door Panel at the typical scales used for plan views (1/16" = 1'-0" to 1/4" = 1'-0"). But if you do have a need for that, you can use a custom display block to add graphics to represent a glazed panel in plan views.

Before we dive into creating the block and assigning it to the Door Style, you need to understand the limitations of custom display blocks in plan Display Representations. The only component to which you can assign a custom display block in plan is the Frame component. You cannot assign one to the Panel component. That means you cannot scale the block by the thickness of the Panel, nor will the block rotate to match the swing angle of the Panel. If you use multiple swing angles for your Panels, you will need multiple display blocks and multiple Door Styles (one of each for each angle). For a 90-degree Panel swing angle (the one we typically use for new construction Doors), scaling the custom display block by the Width, even with the Frame Component set to Inside, will not scale the block along the width of the Panel, but perpendicular to the width of the panel (because ACA thinks it is a Frame component). All of this means that if the graphics in the file need to be accurately shown, and not just a "symbol", you will need a separate custom block and a separate Door Style for each Door width.

If all of that did not change your mind about showing a glazed panel in plan views for Doors, here is how to do it.
  1. Identify the Door Style that is to receive the custom display block. For this example, I have a style called Wood Door with Glazing that has a custom Profile assigned as the Shape on the Design Rules tab of the Door Style. That creates a glazed panel in a model view, but has no effect on the plan view graphics, as seen in the image below.
  2. Verify that the target Display Representation for Doors is active in the current Display Configuration. In this example, the custom display block will be attached to the Plan Display Representation for Doors, and that is active in my current Display Configuation.
  3. Place an instance of the Door in the drawing, and set the Width property of the Door to the width intended for the display block. Having an instance in the drawing is helpful for seeing the effects of the editing so far, and, in cases like this where no scaling will be applied to the block, can be used when generating the linework for the block definition.
  4. Determine where the insertion point of the custom display block will be. In this case, the hinge-side corner of the frame (where it meets the corner of the Door Panel) is an appropriate insertion point.
  5. Draw the linework for the custom display block. If you want to be able to control the display of the linework in the display properties of the Door Style, draw the linework on Layer 0, and assign ByBlock to the Color, Linetype, Plot Style (if using named plot styles), Lineweight and Transparency properties of the linework. In this example, the linework consists of two lines perpendicular to the width of the Door Panel, set in 10" from each end of the Door Panel, and a third line connecting the midpoints of the first two lines, to give a symbolic representation of the glass panel in the Door.
  6. Create the block definition from the linework, being careful to specify the desired insertion point. If you choose to retain the linework or convert the linework to a block, move the linework or block to the side, so that it will not obscure the results of adding the custom block to the Door Style.
  7. Select the Door and, on the Door contextual ribbon tab, on the General panel, select the Edit Style tool. (Or, if you prefer, open the Style Manager, navigate to and select the Door Style in the left pane so that you can edit the style in the right pane.)
  8. Choose the Display Properties tab. The currently active Display Representations will be displayed in bold type. In this example, both the Plan and Threshold Plan Display Representations are active. As the Threshold Plan Display Representation does not allow for attaching custom display blocks, the Plan Display Representation will be used.
  9. Select the Display Representation to receive the custom display block. Left click the toggle in the Style Override column for that Display Representation, to add a display override and open the override for editing.
  10. In the Display Properties dialog, select the Other tab. In the Custom Block Display area, select the Add button.
  11. In the Custom Block dialog, select the Select Block button. Choose the block you created in the Select a Block dialog and select the OK button to return to the Custom Block dialog. The block should show in the viewer.
  12. Back in the Custom Block dialog, change the Insertion Point Y: value to Back and set the Frame Component to Inside. When I did this, the block shifted when I changed the Y setting of the Insertion Point, but did not move when I changed the Frame Component to Inside.
  13. I chose to let the Display setting at Always. If you want to limit the situations where the block will display, select one of the other options: When Intersecting Cut Plane, When Above Cut Plane or When Below Cut Plane, and the block will only display when the selected option is true.
  14. Select OK to ratify the changes, close the Custom Block dialog and return to the Door Style Properties dialog.
  15. If you are a bit leery about the fact that the viewer was showing the custom block outside of the Door Panel, you can select the block name that now shows in the list box in the Custom Block Display area and choose the Edit button. That will reopen the Custom Block dialog and the viewer will properly update and show the block inside the Door Panel, where it belongs. If you are not making any changes, you can select the Cancel button to dismiss the Custom Block dialog; otherwise select the OK button after you are finished with any changes.
  16. In the Display Properties dialog, select the Layer/Color/Linetype tab. Notice that the custom display block now appears as a Display Component. You can make any edits here that you desire. I chose to let the default settings (Layer 0, with ByBlock properties), so that the block will inherit its properties from the parent Door object, just like the Panel, Frame and Swing components. You may want something different. Keep in mind these settings will only be apparent if the linework within the custom display block is on Layer 0 with ByBlock properties, as previously noted.
  17. When you are done editing the properties of the custom display block component, select the OK button to return to the Door Style Properties dialog. Notice that there is now a check mark in the Style Override column and that the Display Property Source now shows Door Style Override - [YOUR DOOR STYLE NAME HERE] rather than Drawing Default. Select the OK button to accept all of the changes to the Door Style and return to the drawing.
    NOTE: If you ever need to edit the display settings for this Door Style's Plan Display Representation, select it and choose the Edit Display Properties button in the upper left of the dialog. Do NOT select the Style Override toggle again; that will clear the toggle and remove the override. If you do that unintentionally, select the Cancel button to exit the dilaog without making any changes, or you will have to recreate the override.
The instance of the Door Style in the drawing should now reflect the addition of the custom display block (assuming that you edited an active Display Representation, as directed above). In the image below, the custom display block instance is at the left and selected, and the Door instance, now showning the custom display block, is at the right.

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.

May 04, 2014

Revit - Residential Door Tag

There is a convention for residential projects in some areas using Imperial Units for showing the width and height of a Door at the plan representation of the Door, in the format "3070", where the "30" represents a width of 3'-0" and the "70" represents a height of 7'-0". Likewise, a 2'-10" wide by 6'-8" high door would be tagged as "21068". Sometimes the inches numbers are shown in a slight superscript, to make the values more legible.

Long-time readers may recall that Door Tags supporting this convention had been developed in AutoCAD® Architecture. The same can be done in Autodesk® Revit®, by adding some additional parameters to your Door families, and using some relatively simple formulas. The instructions below and screen captures are based on the 2014 release, but you should be able to follow them in other versions as well (tool locations and naming may vary). In order for these parameters to appear in a Door Tag, they will need to be created as shared parameters. This example assumes that your Door families have parameters called Width and Height that hold the (nominal) door opening width and height. If your Door families use differently named parameters for these values, then substitute your names for Width and Height. It also assumes that your nominal door sizes do not involve fractional inches.

We need to take the values from the Door's Width and Height parameters and extract the whole foot value and the whole inch value for both the width and the height, so that we can then create a Door Tag that combines these values. To do this, we will need to create six parameters.
  1. Edit one of your Door Families, and on the Create ribbon tab, on the Properties panel, select the Family Types tool to open the Family Types dialog.
  2. In the Family Types dialog, in the Parameters area at the middle of the right side, select the Add button.
  3. In the Parameter Properties dialog, in the Parameter Type area at the top, choose the Shared parameter radio button and then select the Select button.
  4. If the Shared Parameters dialog appears, select the Edit button. If a dialog appears indicating that you have not yet specified a shared parameters file, select OK.
  5. In the Edit Shared Parameters dialog, you will need to indicate a shared parameters file to use, if one has not previously been selected, or verify that the one that is selected is appropriate. Use the Browse button to open an existing file or the Create button to make a new one. CAUTION: If you work with others, and you are not the BIM Manager for your firm, please consult with the BIM Manager before creating a new shared parameters file or editing an existing one, to assure that you are using the correct file, not duplicating parameters that already exist, putting the parameters in the proper group and use the appropriate naming convention. For the purposes of this example, I created a new shared parameters file, just for these parameters. While you can have multiple shared parameters files, it is easier to manage shared parameters at a firm if they are all in a single file. Work all this out with your firm's management and/or your co-workers in advance, so that work will not need to be redone.
  6. With the proper shared parameters file selected, set (or create) the desired Parameter group. I used "Door" for this example; you may already have a similarly named group that should be used instead. (See discussion on coordinating with your BIM Manager above.)
  7. You can now use the New button in the Parameters area at the right side to create the six new shared parameters (unless you have existing ones that already perform the needed function). In the Parameter Properties dialog, enter WidthReal for the Name, set the Discipline to Common and set the Type of Parameter to Number. We will use this to convert the door's width from feet and inches to a real number (decimal feet).
  8. Select OK to return to the Edit Shared Parameters dialog.
  9. Using the New parameter button, create five additional shared parameters: HeightReal, WidthFeet, HeightFeet, WidthInches and HeightInches. All five should be set to the Common discipline. Height Real should also have a type of Number; the other four should have a type of Integer.
  10. With all six shared parameters created, select OK in the Edit Shared Parameters dialog.
  11. In the Shared Parameters dialog, set the appropriate Parameter group, if necessary, and then choose the WidthReal parameter and select OK.
  12. In the Parameter Properties dialog, set the Group under which you want to place this parameter. In the example, I used the General group, but you may feel that another group is more appropriate.
  13. Verify that the Type radio button is selected and select OK.
  14. Add the other five shared parameters by using the Add button and following the steps above, with the exception that you will not need to create the shared parameters, since all six were created at once.
  15. With the new parameters in place, you can add the formulas for them in the Family Types dialog. In the Formula column for the WidthReal parameter, type Width/1'. Dividing the value of the Width parameter by 1' removes the units from the value, leaving a real number (in decimal feet).
  16. In the Formula column for the HeightReal parameter, type Height/1'.
  17. In the Formula column for the WidthFeet parameter, type rounddown(WidthReal). This will round the value of the WidthReal parameter down to the next lowest whole number, which is the whole feet part of the Door width.
  18. In the Formula column for the HeightFeet parameter, type rounddown(HeightReal).
  19. In the Formula column for the WidthInches parameter, type rounddown(12.0*(WidthReal-WidthFeet)). This subtracts the whole foot value from the Door width, leaving fractional feet (if any), and then multiplies the result by 12 to arrive at the inches portion of the width. This value is rounded down to the next lowest whole number, discarding any fractional inches.
  20. In the Formula column for the HeightInches parameter, type rounddown(12.0*(HeightReal-HeightFeet)).
  21. You will see the calculated values for each of the parameters and can verify that the results are correct.
  22. If your Door family has multiple types with different sizes, you can select the different types to verify that the formulas work in each case.
You will need to add these parameters and formulas to each of the Door families on which you want to use a residential-type tag. Having added the parameters to your Door Families, you will need to create a Door Tag that displays them. Create a new Revit family, starting with the Door Tag.rft template.
  1. On the Create ribbon tab, on the Text panel, select the Label tool.
  2. Verify the current Label type is as desired. If not, set and/or create and set the appropriate Label type.
  3. On the Modify|Place Label contextual ribbon tab, on the Format panel, verify the Label justification settings are appropriate. For this example, I am using Align Center (left/right) and Center Middle (top/bottom).
  4. Select the placement point for the Label, keeping in mind that the initial insertion point of the tag will be at the intersection of the two Reference Planes. Do not obsess over picking the point, you can fine tune the placement after the Label is created.
  5. In the Edit Label dialog, select the Add Parameter button in the lower left corner of the dialog.
  6. In the Parameter Properties dialog, select the Select button in the Parameter Type area at the top of the dialog.
  7. In the Shared Parameters dialog, set the Parameter group to the one you used for the parameters you added to your Door Families ("Door" in the example here), and choose the WidthFeet parameter. If you do not see your parameter group or your parameter, use the Edit button and, in the Edit Shared parameters dialog that opens, browse to the shared parameter file that you previously used when creating the shared parameters for your Door Families. Then click OK to return to the Shared Parameters dialog and choose the WidthFeet parameter as directed.
  8. Click OK twice to add the parameter.
  9. Repeat the previous two steps to add the WidthInches, HeightFeet and HeightInches parameters.
  10. In the Edit Label dialog, select WidthFeet from the Category Parameters list on the left side of the dialog, and then select the Add parameter(s) to label button (with green arrow).
  11. In turn, do the same for the WidthInches, HeightFeet and HeightInches parameters. Add representative sample values, rather than the default, which is the name of the parameter. In my example, I set the Spaces between the parameters to 0 and did not add a Prefix or Suffix to any of the parameters. If your needs are different, set these values as you wish.
  12. Select OK to return to the Family Editor.
  13. Fine-tune the location of the label and adjust the label's width so that it is just wide enough to accomodate the widest expected value.
  14. Save the Door Tag family, and then load it into a project in which you have placed Doors that have the residential door parameters and formulas added. Tag the Doors with the new tag and verify that the parameters, formulas and tag are working as desired.
I have attached a ZIP file that has a sample Door Tag family as well as a sample project file in which the Door Tag is applied to a thread in the Autodesk Revit Architecture Discussion Group. The sample Door Tag family has two types: one displays the single label with all four parameters in it, as shown above, and the other uses four labels, one for each parameter, with the inches labels using a slightly smaller height and positioned as a superscript, similar to the AutoCAD Architecture tag developed by Matt Dillon (see link in second paragraph above).

2025-10-10 UPDATE: The forum link in the previous paragraph is no longer valid and I believe that thread is no longer available in the forum. A related question came up today, and I was able to find my old files. I upgraded them to Revit 2024 (from the original Revit 2014) and posted them in a reply in this thread in the Revit Architecture Forum.

Yes/No parameters control the visibility of the parameters in each type.

See "Part 2" to see how this concept can be applied to Curtain Wall Doors, also.

April 10, 2013

ACA 2014: Door and Window Placement

Your requests have been heard. Prior to the 2011 release, when placing Doors and Windows, you had a choice between Unconstrained and Offset/Center, where the latter would center the Door or Window on a Wall segment if you click near the midpoint of that Wall segment or would offset the opening a user-set distance from the end of the Wall segment when clicking near that end. The 2011 release introduced a number of additional placement options, but in order to offer these, the Offset/Center option was split into two separate choices, Offset and Center. (Read more about this change in the 2011 release in a four-part series of posts starting here.) Many missed the convenience of having Offset/Center as a single choice and complained about lost efficiency in placing Doors and Windows. The 2014 release brings back the combined Offset/Center option

while keeping the options added in the 2011 release, as seen below on the Wall contextual ribbon tab, on the General panel.


In addition to restoring the combined Offset/Center option, you also now have options prior to placement for the justification of a Door or Window within the width of the Wall: in addition to the previous default initial justification of Center, you can now choose from Left and Right.

Where the Window is placed for Left or Right justification is determined the same way that Left and Right justification are determined for the Wall itself. Looking from the starting point of the Wall toward the end point, Left justification is to the left side of the Wall and Right justification is to the right side of the Wall.


If neither of these features gets your Door or Window placed exactly where you want it, the Reposition Along Wall and Reposition Within Wall tools are still available on the Door or Window contextual ribbon tabs or right-click menus, as well as the grip editing options.

September 08, 2012

ACA: Grip Editing of Doors and Windows with Standard Sizes

One nice feature of AutoCAD® Architecture is that you can assign standard sizes to Doors and Windows. This allows the user to select a standard size from a list of the sizes entered into the Style, saving time and minimizing the potential for error.
Better still, when grip editing an instance of a Style with standard sizes, the inital default is to restrict the grip edit to one of the values that is part of a standard size. Does that mean that you cannot use such a style to create a non-standard size Door or Window? No. You can always use the Properties palette to enter a non-standard Width or Height. But you can also use grip editing to do so.

Given the wide range of things that grips on AEC objects can do, I highly recommend turning on grip tips, if you do not already have them on. Check the toggle in the Grips area on the Selection tab of the Options dialog or set the GRIPTIPS system variable to 1.
With grip tips enabled, if you select an AEC object and hover over a grip, you will get a tip on how that grip can be used. In the image below, a Window has been placed, using one of the standard sizes assigned to its Style. The Window has been selected, and the cursor is hovering over the grip, but the grip has not been selected (made "hot") yet.
The first line of the grip tip (yellow box) indicates that the Width and Height of this Window are currently a standard size*. The rest of the tip tells you that you have two options when using this grip - either stretching to a Standard Width (the initial default, as it is first on the list) or to a Custom Width - and that you can toggle between the two by pressing the CTRL key. If you start with a Window that has a Width and Height which are not paired as a standard size, the grip tip is nearly identical, with the exception that the first line indicates that the Window is currently a Custom Width*. The initial default remains to stretch to a Standard Width.
Many AEC grips have more than one state or function, and the tip provides a handy reminder of what those are and how to activate them. In general, the CTRL key is used to toggle through the available options.

When you first make the grip hot, you will be restricted to stretching the grip to a standard Width, as defined in the Style. ACA will display a series of lines, indicating the places to which you will be permitted to stretch the Window or Door. You can stretch to any Width that is part of a standard size, even if it is not paired with the current Height as a standard size. To show this graphically, "long" gray lines are used to indicate Widths that are paired with the current Height in a standard size, and "short" red lines are used to indicate Widths that are part of at least one standard size, but which are not paired with the current height in one. A grip tip will appear to remind you of this, if grip tips are active.

If you press the CTRL key once after making the grip hot (but before left clicking to select a stretch point), you will be able to stretch the grip without any restriction.

* - Unfortunately, if the current Window Width and Height are not a standard size, the tip for the Width grip will read "Custom Width", even if that Width does appear in the standard size list, paired with a different Height. The tip really should read "Standard Size" or "Custom Size", to be less confusing. NOTE: Images in this post were made using ACA 2010. Other versions may have slightly different graphics or text.

October 11, 2011

ACA Openings with "Style"

The Opening object in ACA does not have styles. So, unlike Doors, Windows and many other ACA object types, you can not control the display of Openings with overrides at the style level, nor can you attach style-based Property Sets. Given the relatively limited display components associated with Openings,
not having styles may not be a problem for you. But if you have ever wanted to show different types of Openings in different ways, and wished that you could control these displays at the style level, rather than having to make the changes on each individual Opening, then you may be interested to know that it is possible use a Door to emulate an Opening, and thereby gain the benefits of having an Opening-like object that has styles. Another advantage of doing this is that you can assign a Profile to a Door Style acting as an "opening", allowing you to have non-rectangular "openings".

Before diving into the specifics, it is worth noting some of the limitations. If you make use of the Fill Types in the plan display of Openings, and you use a hatch pattern other than Solid Fill for the fill, you will likely be disappointed, as the use of a unit block to mimic the Fill Types will almost always result in a distortion of the hatch pattern since the Width and Depth dimensions will likely result in unequal scaling of the block. Another minor limitation is that, unlike when selecting the Triangle A or Triangle B Fill Types, the display of Cross Line B will not automatically be suppressed when turning on the display of the custom block for Triangle A or Triangle B. The four Fill Types are also not mutually exclusive - you could accidentally have more than one turned on at a time. If none of the above are deal breakers for you, then read on to see what is needed to set up a Door Style to enable "openings" with style.

Custom Blocks
In order to duplicate the components available in an Opening object, you will need to create eight "unit" blocks, one for each component. A description of unit blocks can be found in this blog post. The graphics of each unit block fit within a one-unit by one-unit area; the eight unit blocks can be seen in the image below. The insertion point is in the lower left corner of each block. The linework or hatch in each block is drawn on Layer 0, with Color, Linetype, Plot style (if you use named plot styles) and Lineweight set to ByBlock, so that the Display System will be able to contol all of these properties.
The four blocks on the left side provide the graphics for the equivalent of the Length Lines, Width Lines, Cross Line A and Cross Line B components of an Opening. The four blocks on the right side provide the equivalent of the four Fill (Hatch) Types: Cross A, Cross B, Triangle A and Triangle B, provided that you set the Hatch component to use a Solid hatch.


Door Style as Opening
With the custom blocks defined, you can now create the Door Style that will be used as a style-based "opening". The following steps will show how to do that, matching the out-of-the-box Display settings for Openings; if your office has customized those settings, you will likely want to use those instead. On the Manage ribbon tab, on the Style & Display panel, click the Style Manager tool to open the Style Manager. Expand the Architectural Objects node (under the drawing in which the unit blocks are defined) and select the Door Styles node. In the right pane, right click on the Standard Door Style and choose Copy from the context menu, and then right click over a blank area on the right pane and choose Paste to create a copy. In the left pane, select the new copy (mine was called Standard (2)) and choose the General tab. Rename the style in accordance with your firm's naming convention. (I used Door as Opening for my example style, and provided a description for the style.)
On the Dimensions tab, in the Frame area in the upper right, set the width to 0" and make certain that the Auto-Adjust to Width of Wall toggle is checked. Simply turning off the Frame component is not enough - you need to set the Width of the Frame component to 0 here so that the Width set on the Door (as Opening) will also be the width of the actual opening created in the Wall.
On the Design Rules tab, change the Door Type to Pass Through. If you are looking to create a non-rectangular opening, you would assign the profile on this tab.
You can set up standard sizes on the Standard Sizes tab, if you like. On the Display Properties tab, click on the toggle in the Style Override column for the Plan Display Representation to set and edit a style-level override.
The Display Properties dialog will open. On the Layer/Color/Linetype tab, turn off the display of all components by clicking on all yellow lightbulbs in the Visible column to turn them off.
This will suppress the display of the standard Door components in a plan view. The custom blocks will now be added to provide the equivalent of the components for Openings. On the Other tab of the Display Properties dialog, click on the Add button.
In the Custom Block dialog, do the following:
  1. Click the Select Block button and choose a block definition to add as a custom display block in the Select a Block dialog. In the example, the Dr as Opng - Length Lines block is selected. This is the Length Lines block illustrated above. Click OK to register your change - the block name will be displayed to the right of the Select Block button.
  2. Choose the conditions under which the custom block will display (Always, When Intersectiong Cut Plane, When Above Cut Plane, When Below Cut Plane). In a brief experiment, I found that Opening object components, when "on", appear to display regardless of whether the Opening is cut by the cut plane, above the cut plane or below the cut plane, so I left all of my custom blocks set to Always display. You may choose to do differently, if it meets your needs.
  3. In the Scale to Fit area, enable the scaling toggles for Width and Depth. This will cause our unit block to be scaled to match the user specified Width for the Door object and the width of the partition (because we enabled the Auto-Adjust to Width of Wall toggle on the Dimensions tab of the style). Since the block only contains 2D (plan) graphics, we do not need to scale it for Height. Choosing both Width and Depth scaling will disable the Lock XY Ratio toggle, which we would not want to use here.
  4. Clear all of the Mirror In toggles (none should be selected when first adding a block; verify that none are selected).
  5. Set the Insertion Point to X: Left, Y: Front and Z: Bottom, if it is not already set that way. This coordinates with the insertion point of the unit block being in the lower left corner of the block's extents.
  6. No Insertion Offset is required; verify all values are set to 0.
  7. The only choice of Component for a Door is Frame Component. Verify it is set to Outside, which should be the default value.
Click OK in the Custom Block dialog to register your changes. TIP: The preview display on the right side of the Custom Block dialog does not always display the block properly when first added. If you want to use the preview to be certain that your settings are correct, click OK, and then, back on the Other tab of the Display Properties dialog, select the block you added in the list and click the Edit button. It should now be correctly displayed for the settings you have chosen.
Repeat the process above to add the blocks for the Width Lines, Cross Line A, Cross Line B, Cross A, Cross B, Triangle A and Triangle B custom display blocks. I used the same settings for each block.
Return to the Layer/Color/Linetype tab. In addition to the out-of-the-box components previously shown here, you will find that each of your custom blocks is now listed as a display component.
This is where you will control the visibility and display parameters of the custom blocks. You will not have a Fill type tab, as an Opening object does; instead, you will need to control the display of each fill option individually, here. You also will not have a Hatching tab, so, as noted at the beginning of this post, you will not be able to select a hatching type - solid fill is "hard coded" into the custom display block of each fill type. In order to match the out-of-the-box display for Openings, you will need to turn off all of the custom display blocks except for the Length Lines block, and set the display parameters as shown in the image below.
You are, of course, free to use your own settings. Click OK in the Display Properties dialog to register the changes made to the Door as Opening Door Style. In the Style Manager, click OK to save the changes to the drawing file (and then save the drawing file), or click Apply if you want to continue editing styles in the Style Manager. To test your new style, you can either make duplicates the style and then modify the style-level override display settings in each to turn on different sets of components, to verify that each works as expected, or you can place multiple instances of your Door as Opening "with style" and then apply object-level overrides to test each component's display. Ultimately, you will want to create multiple styles, since the whole point of creating this Door Style was to be able to control the display of "openings" at the style level. To complete the emulation of an Opening object, you will need to create a Tool palette tool for each Door as Opening Door Style and that uses the OPENING Layer Key as an override, so that the Door object created get placed on the same layer as an Opening object (by default).

If you use the Schedule Feature to create a Door Schedule for your "real" Doors and do not want these "opening Doors" showing up in the Schedule Table, you can apply a Layer Filter to your Door Schedule or you can set up and apply a Classification Definition to exclude the opening Door Styles from your Schedule Table. Refer to this blog article for more information on filtering the objects in a Schedule Table.

You can find a sample file that contains the style used to generate the screen captures shown here, along with some copied styles with different custom blocks turned on, in this thread in the AutoCAD Architecture Content Discussion Group.

November 26, 2010

ACA 2011 - Opening Location Changes - Part 4

First Post in Series: ACA 2011 - Opening Location Changes - Part 1
Previous Post in Series: ACA 2011 - Opening Location Changes - Part 3

To wrap up this series on opening location changes in AutoCAD® Architecture 2011, we will look at the ribbon tools that have been provided to make using them somewhat less tedious. Several choices have been combined into one ribbon tool, reducing the number of steps needed when working "manually", as presented in the previous articles.

These tools are located on the Wall contextual ribbon tab, on the General panel, so in order to access them, you will need to select a Wall. The Door and Window tools are now split buttons, and if you click on the lower half of the tool (the part with the arrow icon), you will get a list of tools from which to choose. For Doors, these tools are Door (DOORADD command), Offset from Grid Line (DOORADD GRID YES POSITION OFFSET command), Center between Grid Lines (DOORADD GRID YES POSITION CENTER command), Evenly between Grid Lines (DOORADD GRID YES MULTIPLE command), Evenly between walls (DOORADD GRID NO MULTIPLE command) and Entire Wall (DOORADD WIDTH MAXIMIZE command).The same options are available for Windows (substitute the WINDOWADD command for the DOORADD command).Since Openings and Door/Window Assemblies do not offer the relative to grid line or multiple options, there are no additional choices on the Opening-Door/Window Assembly tool.
One thing to keep in mind is that when you choose one of the Door or Window tools from the flyout other than the "plain" Door (DOORADD) or Window (WINDOWADD) tool, some of the options associated with that tool will become your new default options. The Relative to grid and Position properties will retain the selected option. The Multiple insert property will maintain a default value of No.

I personally do not see much use for the Entire Wall tools, particularly with respect to Doors, but if you need to fill an entire Wall segment with a Door or Window, the option is there. I would be more likely to want to use the Entire Wall option with a Door/Window Assembly, but that is not an option for Door/Window Assemblies.