Drag and drop a Define Variable element DaylightSlope from the Miscellaneous section of the [Tool Box] to the PositiveVariables sequence and set the properties as shown: A variable is
Trang 1Create Subassemblies That Think
Outside the Box With Subassembly
Kati L Mercier, P.E –Nathan L Jacobson & Associates, Inc
CI4252 Intended for existing AutoCAD Civil 3D users, this class explores the potential of Subassembly Composer for AutoCAD Civil 3D 2011 and 2012, available in the Subscription Center Subassembly Composer provides users with an easy-to-use interface to visually create complex subassemblies without the need for advanced programming knowledge With forethought and ingenuity, users can create custom subassemblies to meet their specific needs that can be used again and again once they are imported into Civil 3D Learn what it takes with these in-depth, step-by-step instructions that will give you the skills to go back to the office and wow your coworkers with your own custom subassemblies specific to your standards With the subassemblies already available in the Civil 3D tool palette and the subassemblies you create with the tool box in the Subassembly Composer, your corridors will have endless possibilities Attendees should be familiar with the subassemblies available in Civil 3D and how to utilize them in assembly and corridor creation
Learning Objectives
At the end of this class, you will be able to:
Define appropriate input and target parameters that allow for end user customization once they are imported into Civil 3D
Create a complex flowchart built with subassembly logic tools available in the tool box
Identify Visual Basic expressions and other settings that are available for use when creating subassembly geometry or constructing conditionals
Evaluate a flowchart and preview a subassembly to confirm that all scenarios have been analyzed
About the Speaker
Kati Mercier, earned her B.S in civil engineering from Virginia Tech in 2004 Since then she has worked
as a project engineer at Nathan L Jacobson & Associates, Inc., a consulting civil and environmental engineering firm in Chester, Connecticut The firm specializes in providing engineering consultation, review, and design to local municipalities and private clients Kati has earned her Professional Engineering license in the states of Connecticut and New York Recently she has played a significant role in transitioning the firm from Land Desktop to Civil 3D Kati is an AutoCAD Civil 3D 2011 Certified Professional and a contributor to the civil4d.com blog She is also an active participant in the Autodesk Subassembly Composer for AutoCAD Civil 3D 2011 discussion group
katimercier@gmail.com
www.twitter.com/KDinCTPE
Trang 2Autodesk Subassembly Composer for AutoCAD Civil 3D
The „Subassembly Composer® for AutoCAD Civil 3D®‟ (hereafter
referred to as Subassembly Composer) program is used to create
subassemblies to supplement the stock subassemblies that come with
Civil 3D Before composing any subassembly, one of the first
documents you should examine is the “AutoCAD Civil 3D
Subassembly Reference document” (scan QR code at right or go to
http://images.autodesk.com/adsk/files/c3dstocksubassemblyhelp.pdf )
If you can‟t find a stock subassembly that will solve your problem, this
document will be a beneficial aid in using terminology and naming conventions that are already standard to Civil 3D users You may think that when you make your own subassembly that these conventions are not important But you may wish to share the assembly with coworkers and colleagues in the future, or you may return to it after a while and it will be easier to understand if you use already established naming conventions
The Subassembly Composer consists of five individual window panels: the [Tool Box], the [Flowchart], the [Preview], the [Properties], and the [Settings and Parameters] Each of these window panels may be moved around independently using the docking controls
(icon shown at right) to serve the user‟s needs At any time the default position
can be regained by going to the View menu and selecting “Restore Default
Layout.”
Trang 3The [Tool Box]
The [Tool Box] is the storage location for elements available for constructing the subassembly This panel will provide all of the elements used to build your flowchart There are five sections: Geometry, Advanced Geometry, Auxiliary, Workflow, and Miscellaneous To use any of these elements you simply click on the desired element and drag and drop it over into the [Flowchart]
The [Flowchart]
The [Flowchart] is workspace used to build and organize the subassembly logic and elements
A flowchart could be a simple straight line of logic or it can be a complex tree of branching decisions either way always beginning at the Start element If there is a problem with your subassembly a small red circle with an exclamation point will be displayed in the upper right hand corner of this panel
The [Preview]
The [Preview] allows you to view your current geometry There are two preview modes:
Roadway Mode which shows the subassembly built using any target surfaces, target elevations, and/or target offsets; and
Layout Mode which shows the subassembly built using only the input parameters (no targets)
At the bottom of this panel are two checkboxes for Codes which are shown in brackets [] and Comments which are shown in parentheses () If any Codes or Comments were entered in the properties for the points, links, or shapes then this information will be listed next to the applicable geometry
The [Properties]
The [Properties] is the input location of the parameters that define each geometry element
The [Settings and Parameters]
The [Settings and Parameters] consists of five tabs that define the subassembly: Packet Settings, Input/Output Parameters, Target Parameters, Superelevation, and Event Viewer
The Typical Workflow
The typical workflow for creating a subassembly is broken into six steps This is the process we will be using for all of our examples For the purposes of this handout we will refer to the user of Civil 3D who is using the subassembly as the “End User” and the user of the Subassembly Composer who is making the subassembly as the “User” The six steps are:
1 Sketch the subassembly or ”the problem”
2 Define the [Input/Output Parameters] for the End User
3 Define the [Target Parameters] for the End User
4 Build the subassembly using the [Tool Box]
5 Evaluate your subassembly and modify as necessary
Trang 4Example 1: Varying Shoulder
1 Sketch the subassembly or ”the problem”:
In a typical shoulder and daylight
scenario, we could have a constant
shoulder and the daylight location on
the target surface is calculated In
this first example, however, we
instead have a known daylight target
location (Offset) and the shoulder width is variable based on the shoulder slope and daylight slope This scenario allows the End User to provide a large shoulder for future development within a pre-established right of way
There may be some instances where
the End User wants to maintain a
minimum shoulder width due to
excessive cuts/fills In which case,
the offset target will not be used and
an easement would be required
Using current Civil 3D functionality this could be obtained by finding the intersection generated from two surfaces (one temporary surface using a grading object with a feature line at P1 and generating the shoulder slope extended beyond the intersection, and one temporary surface using a grading object from a feature line at the desired daylight location with the target surface elevations and generating the daylight slope beyond the intersection)
To find the intersection you would generate a volume tin between these two temporary surfaces and using the 0 elevation volume contour as the target for the finished surface‟s shoulder location and then manually adjust for the minimum shoulder This procedure is cumbersome and requires reanalyzing the shoulder target at every change in design Instead, we can create a single dynamic corridor model using Subassembly Composer that will save us a great deal of time
We will first define the [Packet Settings], which includes the Subassembly Name, Description, Help File, and Image This information will be shown on the Tool Palette once imported into Civil 3D The Help File and Image are optional however to add them simply click on the […] button to the right of the entry field to browse to the location
Trang 52 Define the [Input/Output Parameters] for the End User:
For each variable that we want the End User in Civil 3D to have ability to change we must define an input parameter
The first line in the Input/Output Parameters tab will always be filled in for you with “Side.” If you wish to disable this parameter for the End User, set the Default Value as “None.” In this example we will draw the curb as if it is on the right side and if the End User switches the Side to Left then the subassembly will mirror itself as defined
The first four columns (Name, Type, Direction, and Default Value) must be filled in The last two columns (DisplayName and Description) are optional If no DisplayName is provided, the Name will be displayed for the End User in Civil 3D
There are a total of eight Input/Output Parameter Types provided in the
program (you can make more types using Enumeration which we will
discuss later) In this example we will be using Double numbers, which allow
for decimal precision, alternatively you could limit the End User to inputting
Integer numbers, which allows only whole number values We will also be
using Slope (Horizontal:Vertical), Grade (%), and String (text)
For this example we will not be defining any Output Parameters
To add a parameter, click the words “Create parameter” If you inadvertently add too many parameters, select the one you would like to delete and press the Delete key on your keyboard
Trang 63 Define the [Target Parameters] for the End User:
There are three types of Targets that can be used: Offset, Elevation, and
Surface In this example we have two required targets that the End User
must use The first is the target offset for the daylight, and the second is
the target surface The offset target can be an alignment, polyline, feature
line, or survey figure
Just like with the Input/Output Parameters, to add a parameter click the words “Create parameter” If you inadvertently add too many parameters, select the one you would like to delete and press the Delete key on your keyboard
4 Build the subassembly using the [Tool Box]:
The full Flowchart is available at the end of the building procedure on page 14 for your reference The building procedure has been provided in two columns, at left is the step by step procedure and at right is a commentary
a Drag and drop a Sequence element from the
Workflow section of the [Tool Box] to the
[Flowchart] It will automatically connect to the
Start element
You will notice that all elements have multiple connection nodes, at any time you can click on a connection arrow and drag it to an alternate
connection node
Trang 7b Rename the Sequence by clicking once on the
name of the element and changing it to
PositiveVariables The double click into the
Sequence to add elements
In this example there are two Input Parameters which the End User must enter as positive values In order to avoid any logic errors we are first going to find the absolute value of these two inputted parameters and use those in the remainder of the calculations
c Drag and drop a Define Variable element
(DaylightSlope) from the Miscellaneous section
of the [Tool Box] to the PositiveVariables
sequence and set the properties as shown:
A variable is similar to an input parameter, however it is defined by you instead of the Civil 3D End User Math.abs() is one of many math Visual Basic (VB) expressions that can be used in calculations Additional math VB expressions can
be found in the Appendix of this handout The Cut/Fill Daylight Slope should be positive since in this subassembly the same slope will be used for cut and fill therefore the logic will define the + or – and not
by the End User
d Drag and drop a Define Variable element
(MinShoulder) from the Miscellaneous section
of the [Tool Box] to the PositiveVariables
sequence and set the properties as shown:
The Minimum Shoulder Width should be positive since the side is being defined by the Side parameter
e Exit out of the Sequence click the Flowchart in
the nest links at the top of the [Flowchart] panel
Trang 8f Drag and drop a Decision element from the
Workflow section of the [Tool Box] to the
flowchart below the PositiveVariables Sequence
It will automatically connect to the Sequence
element
Since the two target parameters are required, we will provide an error message to the Panorama in Civil 3D alerting the End User if they try
to run the corridor without these targets provided To do this we will query whether the both targets have valid input
g Define the Condition for the Decision as follows: In order to test two elements at the
same time we are using the ()AND() expression In each set of parenthesis we are going to use a Subassembly Composer Application Program Interface (API) function called “IsValid” which is available for all of the Target classes Additional API expressions are available in the Appendix of this handout Note that
if you click on the triangle flag in the upper right hand corner of the Decision element the Condition expression will remain visible
h Drag and drop a Report Message element from
the Miscellaneous section of the [Tool Box] to
the right (false) side of the Decision element and
define as follows:
If it connects to or from the wrong connection
node, simply click on the connection arrow and
press the Delete key on your keyboard, then
hover over the Decision element and click on the
False connection node and drag it to connect to
the Report Error
If you hover over the Decision element you will see that the True is
on the left and the False is on the right An easy way to remember what side is true or false for a decision element is to think „Right side means it‟s wrong‟ We will want
to give the End User an error if one
or both of the targets are not valid There are three types of Error Levels: Error, Informational, and Warning
Trang 9i Drag and drop a Point element (P1) from the
Geometry section of the [Tool Box] to the left
(true) side of the Decision element and let it
keep its defaults of being located at the Origin
and being named P1
The origin is the geometry point that your subassembly will attach to when generating an assembly in Civil 3D
There are nine different Point Geometry Types
j Drag and drop an Auxiliary Point element
(AP1) from the Auxiliary Geometry section of the
[Tool Box] to below P1 and define as follows:
An auxiliary point or an auxiliary link are used for subassembly generation but are not displayed in Civil 3D They are useful for intermediate geometry such as this case In this example we will be placing the first auxiliary point at the minimum shoulder location and have added a Comment reflecting that These Comments can be viewable in the [Preview] panel Note that you can expand or collapse any of the Property elements by clicking on the triangle
to the left (ex Link) For any of the images provided in this handout that have a property collapsed, you can assume that the default values were utilized
Trang 10k Drag and drop an Auxiliary Point element
(AP2) to below AP1 and define as follows:
The second auxiliary point is located on the target surface at the target offset We do not want to put
a normal point at this location yet because we do not know if this point will be used or if it will be overridden with the minimum shoulder test Note that the Delta X is purely for layout purposes and will not be used since this element is in a branch that has already tested that the TargetOffset is valid
l Drag and drop a Decision element to below
AP2 and define as follows:
This decision element tests to find if the slope between AP1 and AP2 (defined by the Point Class SlopeTo API Function AP1.SlopeTo (“AP2”)) is steeper than the
daylight slope provided by the End User If it is not steeper, we will calculate the shoulder location using the target location If it is steeper than the DaylightSlope variable, that means that the minimum shoulder value should be used and a new daylight location must be calculated In order to provide a visual cue to the viewer of the flowchart, you can edit the True and False labels to act as a reminder of what the true and false mean In this example, the false will calculate the hinge point and the true will use the minimum shoulder
as the hinge point
Trang 11m Drag and drop a Point element (P2) to the left
(true) side of the Minimum Shoulder Decision
element and define as follows:
We will first define the logic using the minimum shoulder
Since we already have an auxiliary point at the minimum shoulder hinge location, there is no need to recalculate the location, so we will simply match the location of AP1
n Drag and drop a Point element (P3) to below P2
(Min Shoulder) and define as follows:
Note that the Slope expression reads as follows:
If an expression becomes too long
to be fully visible, simply click the […] button to the right of the expression to open the Expression Editor window to see the full expression
Trang 12o Drag and drop a Point element (renamed to
also be P3) to the right side of the Minimum
Shoulder Decision element and define as
follows:
This point is located at the target daylight Since we already have an auxiliary point AP2 at that location, the point location does not need to
be recalculated The Subassembly Composer will not allow you to duplicate a point number in a branch of logic but you are allowed
to duplicate a point number if they are in separate branches of logic In order to maintain consistency we will continue to use P3 for the daylight point and P2 for the hinge point
p Drag and drop an Intersection Point element
(renamed to also be P2) from the Advanced
Geometry section of the [Tool Box] to below P3
(Target Daylight) and define as follows:
Note that the Slope 2 expression reads in full as
be the shoulder grade and we want
to second slope to be the daylight grade (either positive or negative as appropriate for if the situation is cut
or fill respectively)
For Slope 2 we have used an IF statement to test if the slope from AP1 to AP2 is greater than the shoulder grade If true a positive daylight slope will be used and if false a negative daylight slope will
be used
Slope 2 (the daylight slope) is extended meaning that it extends out of both sides of Point 2 and not just in one direction Experiment with the extending and reversing slopes to find the combination that works best for your situation
Trang 13q Drag and drop a Sequence element to below
the current logic It should automatically connect
to either of the end elements, P3 (Daylight
Override) or P2 (Calc Shoulder) Add an
additional connection arrow so that the branched
logic both uses the same sequence Rename
the Sequence as Links and double click into the
Sequence to add elements
Each element can only have one exiting connection arrow (with the exception of Decisions and Switches) but it can have multiple incoming connection arrows to combine logic
r Drag and drop a Link element (L1) from the
Geometry section of the [Tool Box] into the Links
Sequence and define as follows:
Since we maintained consistency of point P2 being the hinge point, we can use the same link to define the shoulder for all scenarios In this example we allowed the End User
to define the Link Codes through an Input Parameter string, if we were hard entering the Link Codes here
we would need to include the quotation marks (ex “Top”,
“Datum”)
s Drag and drop a Link element (L2) to below L1
in the Links Sequence and define as follows:
Like link L1, by maintaining consistent point numbers, we can use the same link to define the daylight link for all scenarios
The PKT file will be available for download from the AU2011 CI4252 class website after the associated lecture is given
Trang 145 Evaluate your subassembly and modify as necessary:
Before finalizing a subassembly it is important to pay attention to some key components in the [Preview] panel In this example, the first thing that we want to do is select the checkbox for Codes This will allow the codes which are assigned to the points, links, and shapes to display For each example you want to check to make sure that the links have the desired link codes, that any points have the desired point codes, and that the shapes have the desired shape codes
Trang 15The next thing to check for any subassembly with targets is that the subassembly is functional for all potential target values You can easily assess the targets by either changing the preview value in the [Target Parameters] tab or by dragging the various targets
in the [Preview] panel Make certain you are previewing the geometry in Roadway Mode
In this example we will first make certain that the Target Offset is overridden when the minimum shoulder decision is triggered Note that I have turned on the Comments to confirm which points are being used from the different branches of logic
Trang 16We will also test different values of the TargetSurface I have shown two examples below I recommend for all subassemblies trying a large positive value, a large negative value, and then on either +/- side of every point, since these tend to be the areas where decision ranges are most likely to have errors
6 Import into AutoCAD® Civil 3D®:
Once you are ready to import your subassembly into
the Civil 3D Tool Palette Save your PKT file and open
up Civil 3D To import the subassembly go to the Insert
tab in Civil 3D, expand the Import panel, and select
Import Subassemblies The Import Subassemblies
window as shown on the following page will open
Browse to your PKT file and add it to a Tool Palette (in
this example, I‟ve made a custom tool palette for all of
my AU subassemblies)
Trang 17Here is the road assembly created using the stock Civil 3D subassemblies for the road (LaneSuperelevationAOR), curb (UrbanCurbGutterGeneral), and our custom VaryingShoulder subassembly:
In this picture of the corridor using this subassembly you can see on the northerly side of the road how the minimum shoulder was maintained and the target offset line (shown as a dashed red line) is overridden while on the southerly side of the road the target offset was maintained and the shoulder width varies
Trang 18Example 2: Precast Concrete Curb
1 Sketch the subassembly or “the problem”:
This is a construction detail for concrete curbing
that our office frequently uses and while we can
generate a proposed top surface that is similar, it
does not include the radius at the top gutter edge
Therefore this is a good candidate for a
Subassembly Composer generated subassembly
Like the previous example we will first define the
[Packet Settings]
2 Define the [Input/Output Parameters] for the End User:
The Subassembly Composer is unitless; however, once you import a file into Civil 3D it will use the default units (feet or meters) that Civil 3D is using when the subassembly is imported In this example I will assume that it will be used in Civil 3D Imperial; however, you will notice I am going to ask the End User for the length and depth dimensions in inches instead of feet; pay attention when we are building the geometry because each of these values will be divided by 12 to build the subassembly in feet as required by the default units
As a reminder to myself, I like to suffix any variables that I am asking the End User to provide in inches with “IN” to remind myself to convert back into feet in the flowchart
Trang 193 Define the [Target Parameters] for the End User:
For this example there are no Target Parameters which makes this step of the process simple
4 Build the subassembly using the [Tool Box]:
Before building the logic for your subassembly, it is
sometimes helpful to draw in the points on your original
sketch and number them sequentially (just like a “Connect
The Dots” drawing) and similarly label each link between a
pair of points You will want a point at every change in
direction of a link As you can see by the finished sequence
at right, we can‟t always define the points sequentially in the
logic but it will make much more sense if your point numbers
are continuous around a shape
Similar to the last example, the building procedure has been
provided in two columns, at left is the step by step procedure
and at right is a commentary
Trang 20a Drag and drop a Sequence element to below
the Start element Double click into the
Sequence to add elements
Because this is “straight line logic” (no decisions, always the same geometry) we are going to build the entire subassembly logic inside of a Sequence
b Drag and drop a Point element (P1) into the
Sequence and define as follows:
As previously stated, the Subassembly Reference is a good place to get help in deciding point codes Unlike the last example, because the code is being defined
by the End User and is not a string input parameter, we must place the quotes around the word to convert it into a string
c Drag and drop an Auxiliary Point element
(AP1) to below P1 in the Sequence and define
as follows including the creation of Auxiliary Link
element (AL1):
Point AP1 will be placed at the point
of intersection for the front radius curve In order to draw the radius
we will need to remember that since all of the Input Parameters are in inches, we are dividing the dimensions by 12 to convert the subassembly into feet
With each point or auxiliary point there is the option to add a link or auxiliary link from the “From Point”
to the point or auxiliary point being generated In this case we will soon
be defining the front radius link between two links so we will take this opportunity to define the first of these two auxiliary links needed later
Trang 21d Drag and drop an Auxiliary Point element
(AP2) to below AP1&AL1 in the Sequence and
define as follows including the creation of
Auxiliary Link element (AL2):
Similar to AP1, this will be the point
of vertical intersection for the back radius curve
In addition, we will once again create an auxiliary link to be used in defining both the front and back radius links
e Drag and drop a Fillet Arc element (renamed
L2) from the Advanced Geometry section of the
[Tool Box] to below AP2&AL2 in the Sequence
and define as follows including the creation of
Point elements (renamed P2 and P3):
Now that we have an auxiliary link for each tangent of the front radius
we can define the fillet arc link between the two auxiliary links and
at the same time generate the points at the points of tangency The tessellation of an arc is the number of segments that are generated to create the arc