Friday, May 15, 2009

AutoCAD Civil 3D 2010 Feature Line productivity without toolbar

2017 Update: This is still an important part of my $120/hr Civil 3D efficiency. The Ribbon still is too much of a drag for highly repetitive commands. And the replacement of interruptive mouse mileage with keyboard muscle memory makes this superior to the old toolbar buttons.

Rick Graham at Engineered Efficiency posted about the demise of the Feature line toolbar in AutoCAD Civil 2010 (registration required). Sadly, the post didn't offer much of a solution for the productivity hit that Autodesk perpetrated on us (site design engineers) with the decision they made to remove the Feature Line toolbar and "replace" it with a context sensitive ribbon panel.

I don't know AutoCAD Civil and version 2010 in particular well enough to make any final pronouncements about its out-of-the-box suitability for feature line productivity. But I have to admit at Hubbard Engineering--even though AutoCAD Civil has won our hearts in the past 6 months--we have failed to discover how to love the Feature Line editing interface of 2010.

So when all else fails, customize!

So we did customize. We are very pleased to finally have broken down and created Quick Keys for feature line editing. Where we were tearing our hair out, we are now smiling. Here is a printable list (copy to your word processor) of the quick keys we created. Let me know what you think. Share and share alike.

-Printable Quick Keys list
-Quick Keys list with commentary
-PGP aliases code
-LISP code
-PGP installation instructions

Feature Line Quick Keys



FeatureAddAsBreakline (to a surface)

CreateFeatureLines (from objects)


GradingElevEditor (table view)


InsertFeatureHighLowPoint (solve intersection)




SetFeatureGrade (straight grade)


SetFeatureRefElev ("Vertex" elevations)











One more time with commentary:

Feature Line Quick Keys


DrawFeatureLine. FD draws a Feature Line. But it's usually faster to draw lines and polylines and convert them to Feature Lines with FCO. Create without a style to enable layer-based control. Create with a style to enable elevation conflict priority. It's easier to FJ join them (to do a projection grading, for example) than to FB break them (to do an FRL, for example), so having fewer segments (shorter Feature Lines) generally works fine.

FeatureAddAsBreakline. FAB is how you make a surface out of Feature Lines unless you are using Grading Infill. Making a surface is the way you can evaluate your design via contours or 3D viewing. Having a surface also gives you the best way to label your design slopes and elevations. FAB was the chief or sole way I built a Finished Grade surface until I got comfortable with Grading Infill. I consider an FG surface as merely a throw-away draped object and the Feature Lines as gospel. The surface is always fully re-buildable by simply FAB-ing all Feature lines (or redoing Grading Infill). For a "smooth" surface, use shorter Distance (25') and Mid-ordinate distance (-.05') Supplementing factors; for precise warp control, use more Feature Lines. To prevent crossing breakline errors, use a mid-ordinate distance supplementing factor smaller than your smallest Feature Line offset (such as offset between top of face of curb and gutter flow-line.

CreateFeatureLines (from objects). FCO is the fastest way to make Feature Lines, but sometimes FO (offset) may be a better practice (for geometric precision and avoiding surplus elevation points). Keep your work in bite-sized pieces by creating only as many Feature Lines at a time as you are ready to work with (start with what you know and add detail as you learn and progress), because you may find along the way you would rather use FO offset than FCO for some of your feature lines, and because adding large numbers of Feature Lines without personal attention is an invitation for troublesome, evil crossings and gaps.


GradingElevEditor. FGE is the tabular view for editing feature line elevations. While FQ is the better default grading plan editor tool, FGE is a powerful Feature Line table view editor with tools that are not available in other commands. Only with FGE (though FG comes close) can you raise or lower as a group selected points on a Feature Line. FGE treats a feature line more like an alignment.

FEI inserts a vertical-only bend in a feature line. Elevation points are sometimes easier to insert than PI points because you don't have to attend to the horizontal alignment. But beware that if you extend, trim, or stretch a feature line, elevation points will move proportionally.

DeleteElevPoint. FED is mostly a great cleanup tool for all the elevation points that appear without your permission or notice. Notice the All option for when it can help you.

InsertFeatureHighLowPoint. InsertFeatureHighLowPoint. FHP solves the location and elevation at which two slopes toward each other meet. FHP is a powerful little calculator for the rare occasions you need it. I use FHP to pinpoint the elevation and location where two grades intersect without resorting to a Projection Grading. Experiment with FHP so that you will remember it when it's your quickest solution.

RaiseLowerFeatures. Use FRL to raise an entire section of your site or a single Feature Line. A nice feature of FRL is that it works like Stretch, in that connecting Feature Lines have their slopes adjusted.

QuickEditFeatureElevs. FQ is the fastest grading design, checking, and error-correction tool in the toolbox. Notice the Surface option for when you want to paste a point to a Surface. When FQ doesn't work/respond, it is because you have touching feature lines (only one of them can have “priority” or editability--the last one created or see the FD comments) or tiny feature line segments you have not discovered.

EditFeatureElevs. FE is, with FQ and FGE, one of the three similar feature line editing tools. It was my first exposure to Feature Line editing, but I am not aware of any advantage it has over the other two other than backward similiarity. I have not touched it in years.

SetFeatureGrade. FG is how you straight grade a feature line between any two points. The interface is a little confusing, and you may need to hover your cursor along a feature line to get a response, but you need to be good at using this tool so you can set ranges of vertices along a feature line all in one command.

RaiseLowerFeaturesByRef. FR lets you change the elevation of selected Feature Lines (for example, a building pad or an entire parking lot) as calculated from a certain other point to any point in the set. For example, set this building 1 foot above this sidewalk point or set this parking lot so this driveway neck slopes 5% up from this valley gutter edge. In my work I have only used this tool when I need to make major adjustments to balance earthwork, but it sure comes in handy when I need it.

SetFeatureRefElev ("Vertex" elevations). FV lets you set a Feature Line vertex (point) elevation as calculated from some other point.  It is a tedious command to use, but sometimes in a pinch it is faster than, say, adding an elevation point or PI and drawing a feature line.

AdjacentFeatureElevsByRef. FA is like FO offset, but instead of making a new object, it projects the elevations of one Feature Line onto an adjacent Feature Line. If you use FA with sloppy geometry, you will have trouble with phantom elevation points. It is sometimes best to use FO or AutoCAD Offset to create adjacent parallel lines such as for curbs so that FA works seemlessly with them. When it's necessary to use FA for geometry you know is not parallel with exactly coincident endpoints, use either FQ and FED or FB and Extend to clean up the results.

FeatureGradeExtensionByRef. FX lets you grade across a gap. In reality it is very similar to FV, but it suggests the continuation slope of the reference object, which allows for exactness. I don't think it works right prior to version 2011. I have rarely used this tool in the real world.

FeatureElevsFromSurf. FES is the way to drape an existing Feature Line onto a surface. I use FES for quick and dirty daylight line design (to avoid the overhead of Projection Grading). I also use it to paste parking islands onto a pavement surface that has been defined by the major parking edges.


InsertFeaturePI. Use FPI to insert vertices and grade changes on Feature Lines.

DeleteFeaturePI. Use FPD to delete vertices from Feature Lines. PIs are represented as triangles vs. Elevation Point circles.

BreakFeatures. Break a Feature Line. Works just like Break, but it's finicky to respond to the First option.

JoinFeatures. Join to a Feature Line. I mostly use this in preparation to do a FG (straight grade) or a Projection Grading.

TrimFeatures. Trim Feature Lines.  Use standard Extend to extend them.

OffsetFeature. Offset Feature Lines. FO is the best way to create additional curb or walk lines after you have established the controlling curb line. For most initial design purposes, use only edge of pavement and top back of curb at curbs; gutter and top face are normally only necessary for looks.

WeedFeatures. FW is useful to simplify a daylight line whose elevations were assigned from a complicated surface, inserting intermediate grade break points (to follow the surface exactly). Weeding may be very wise before using such a Feature Line for Projection Grading.

We added these by putting the following section in our team lisp file:

;;; Feature Line Quick Keys
(defun c:fd () (command "_AeccDrawFeatureLine")(princ))
(defun c:fbl () (command "_AeccFeatureAddAsBreakline")(princ))
(defun c:fab () (command "_AeccFeatureAddAsBreakline")(princ));Add to Surface as Breaklines
(defun c:fco () (command "_AeccCreateFeatureLines")(princ));Create Feature Lines from Objects(defun c:fc () (command "_AeccCreateFeatureLines")(princ));Create Feature Lines from Objects;;; Elevations
(defun c:fge () (command "_AeccGradingElevEditor")(princ))
(defun c:fei () (command "_AeccInsertFeatureElevPoint")(princ))
(defun c:fed () (command "_AeccDeleteFeatureElevPoint")(princ))
(defun c:fhp () (command "_AeccInsertFeatureHighLowPoint")(princ))
(defun c:frl () (command "_AeccRaiseLowerFeatures")(princ))
(defun c:fq () (command "_AeccQuickEditFeatureElevs")(princ))
(defun c:q () (command "_AeccQuickEditFeatureElevs")(princ))(defun c:fe () (command "_AeccEditFeatureElevs")(princ))
(defun c:fg () (command "_AeccSetFeatureGrade")(princ))
(defun c:fr () (command "_AeccRaiselowerFeaturesByRef")(princ))
(defun c:fv () (command "_AeccSetFeatureRefElev")(princ));"Vertex" elevation
(defun c:fa () (command "_AeccAdjacentFeatureElevsByRef")(princ))
(defun c:fx () (command "_AeccFeatureGradeExtensionByRef")(princ))
(defun c:fes () (command "_AeccFeatureElevsFromSurf")(princ))
;;; Geometry
(defun c:fpi () (command "_AeccInsertFeaturePI")(princ))
(defun c:fi () (command "_AeccInsertFeaturePI")(princ))(defun c:fpd () (command "_AeccDeleteFeaturePI")(princ))(defun c:fdd () (command "_AeccDeleteFeaturePI")(princ))(defun c:fb () (command "_AeccBreakFeatures")(princ))
(defun c:fj () (command "_AeccJoinFeatures")(princ))
(defun c:ft () (command "_AeccTrimFeatures")(princ))
(defun c:fo () (command "_AeccOffsetFeature")(princ))
(defun c:fw () (command "_AeccWeedFeatures")(princ))
;;; End Feature Line Quick Keys

You could also add them one at a time as "PGP aliases" using the ALIASEDIT command or add them as a group to your ACAD.PGP file as instructed at the end of this post, like this:

FD, *DrawFeatureLine
FAB, *FeatureAddAsBreakline
FCO, *CreateFeatureLines

FC, *CreateFeatureLines
FGE, *GradingElevEditor
FEI, *InsertElevPoint
FED, *DeleteElevPoint
FHP, *InsertFeatureHighLowPoint
FRL, *RaiseLowerFeatures
FQ, *QuickEditFeatureElevs
FE, *EditFeatureElevs
FG, *SetFeatureGrade
FR, *RaiselowerFeaturesByRef
FV, *SetFeatureRefElev
FA, *AdjacentFeatureElevsByRef
FX, *FeatureGradeExtensionByRef
FES, *FeatureElevsFromSurf
FPI, *InsertFeaturePI

FI, *InsertFeaturePI
FPD, *DeleteFeaturePI
FDD, *DeleteFeaturePI
FB, *BreakFeatures
FJ, *JoinFeatures
FT, *TrimFeatures
FO, *OffsetFeature
FW, *WeedFeatures

Basic Installation Instructions

Install the "PGP Aliases" by pasting then into the end of your active ACAD.PGP file, as follows.

1. Paste the following line onto your AutoCAD command line to find the location of your active ACAD.PGP file.

(progn(princ(findfile "acad.pgp"))(princ))

2. Using the result of step one, browse to your ACAD.PGP file in Windows Explorer. Open the file by double-clicking it. If Windows needs you to choose a program from a list to open it, choose Notepad.

3. Use the CTRL+END keys to go to the end of the file. Then copy the pgp style aliases (eg. FD, *DrawFeatureLine) from this page and paste them into the very end of your ACAD.PGP. Don't worry; the ACAD.PGP file is designed to be easy for non-programmers to change without trouble.

4. Save and close the ACAD.PGP file. In AutoCAD at the command line, enter the REINIT command and select the PGP file.

5. Try your new quick keys.

Revised: 1 Sep 2017. Added optimized shortcuts Q, FC, FI, and FDD
Revised: 24 Sep 2010. Added command explanations.
Revised: 20 Sep 2010. Added basic loading instructions.
Revised: 9 Jul 2009. Added commands.
Revised: 18 Sep 2009. Corrected PGP syntax
Revised: 2 Apr 2021. Added references to Grading Infill and that I have not used FE in years.


Wes Ashworth said...

Very Nice! I'll definately use this!

Sinc said...

I'm not sure I understand why you need this... Keyboard commands can be handy, and many people prefer to run certain commands from the command line. But all of these commands should also be easily-accessible via the Ribbon...

The majority of these commands are on the Modify tab of the Ribbon. They are also on the Feature Line contextual tab in the Ribbon, although you may need to click on "Edit Geometry" or "Edit Elevations" to expand the tab.

The Feature Line contextual tab can be called up either by selecting a Feature Line in the drawing, or by selecting "Feature Line" from the "Design" portion of the Modify tab in the Ribbon.

Thomas Gail Haws said...

Thanks for your comment, Sinc. As it turned out for us, the frequency of invoking some of the Feature Line commands made the delay of repetitively accessing the Ribbon unacceptable. The difference that the quick keys made for us was tangible, and in the end we were glad to have been cornered into using quick keys. But you are sure right that the Ribbon is available for those commands.

Emily said...

This is just what I have been looking for! I just switched from 2009 to 2011, and I was frustrated that I didn't have the Feature Line Toolbar. I am still trying to convince my co-workers (still using ACAD 2004 and Eagle Point) to switch, but they are having a hard time getting over the hump. Thank you for posting this (in 2009)! I have searched for the last couple of months to try and get that toolbar back, without success.

Thomas Gail Haws said...

Thanks so much for taking the time to share with me your appreciation, Emily. I hope your co-workers learn to have fun with Civil 3D.

Anonymous said...

I have to agree Thomas... it seems to me the reason for the command line was exactly what you're talking about. In fact, it's my understanding the "tablet" and icons were a large time consumption as a drafter had to leave his drawing space to click on some item, disrupting flow and creating potential opportunities for additional error. It seems to me they are re-introducing the very problem they eliminated with the command line by forcing use of the ribbon for repetative tasks... most especially the grading features and feature line (3dpolyline). I'm guessing the group running the show there now are my age (meaning too young to know better). The fact that they added 1 more step to something as common as the feature line (3dpolyline) ... meaning, that dreadful dialogue box, they are willing to sacrifice the ease of use of the command line. I hope, in the future, they find the ribbon a last resort, and the command 1st, though I imagine they added the ribbon to assist "noobs", engineers in training, etc, offering a more graphical interface for the simple-ton. Anyhow... enough venting... what's it really do anyhow.


Chris said...

I can't get this lisp to work. Is there something else I need to do than copy/paste into notepad and save as .lsp?

Thomas Gail Haws said...

Yes, Chris. If you are making a new lsp file, you also need to load it in each session. One way to do this is to add the new lsp file to your startup suite. You can use the APPLOAD command to do this.

Many people already have lsp files they load, so I'm sorry I didn't cover the loading part.


Chris said...

Oh, no. I know how to load the file. I was just having problems creating it as a new file. I ended up just copying another lisp I use and replacing it with this code and resaving, then changing the name, and putting my other lisp back in the same directoy now with my new lisp. For some reason my computer kept seeing it as a .txt eventhough I saved as .lsp.

Also, I appreciate your timely response, I wasn't really expecting feedback. Thanks!

Thomas Gail Haws said...

Yeah. It's kind of frustrating that by default Windows hides the extensions for files and then supplies it invisibly so that it's impossible for you to change a file from txt to lsp or anything else.

You know there's a setting under the File Explorer menu for this? Use Alt+T in the Windows File Explorer to access the Tools menu, then select Folder Options, View tab, and uncheck "Hide extensions for known file types". Hope that's helpful.

Thomas Gail Haws said...


I don't know how I missed your comments, but I really, really like your observations. Very insightful. Good history lesson too. I hope Autodesk is listening.