Thursday, December 18, 2014

Die Viewcube, Die!!!!

I tried to like the viewcube that shows up in the corner of the screen. I really did, but it kept getting in the way. I needed to put it out of my misery. In order to do this you’ll want to go into OPTIONS. In options head over to the 3D Modeling Tab and then in the Display Tools in Viewport uncheck the 2D Wireframe visual style and possibly the All other visual styles check boxes. The viewcube will then go away.


This tends to be the number one tip people enjoy the most when I teach Civil 3D and I can definitely understand why.

Sunday, December 14, 2014

Custom Bench Subassembly

Sometimes the regular Civil 3D benching just won’t work. It’s fairly bad at showing benching like it will be constructed in the real world. Sometimes it does work like in the image below where the roadway provides for a natural slope so the basins go into the downspouts.


Sometimes, like shown in the image below to the left, we want more control to provide low points. To get the case to the right it might take some time with some link slope and width to get it into the correct location.


With the custom bench subassembly one can set a profile elevation for the benching and get those results rather easily.

The pictures above where taken from an Infraworks presentation at Autodesk University, created by Autodesk. The model was created by HUITT-ZOLLARS, INC. users of the Custom Bench Subassembly.

Sunday, November 23, 2014

Delete Duplicate Point Groups

There is an update to this old post:

A version should be available for a buck on the app store:

If you want it sooner, send an email to me to purchase a copy, the email link is on the right side of this page.

Thursday, November 13, 2014

Custom Bench Subassembly

Do you want more control over your bench subassembly? The one that comes with Civil 3D is rudimentary and doesn’t allow you to set the slopes of the benches. I recently updated the Civil 3D 2015 custom subassembly for benching and is now available for sale. The cost for the subassembly is $100 per office. Send an email to get more information (link to the right).

Here is what the contours look like.


Here is a picture of what it does.


Sunday, November 02, 2014

Alignment Curve Mid Point Coordinates

Remember primary school math? I sure don’t remember all of it. I find I’m relearning the remedial math over and over again since I forget the intricacies of what I learned before. One such concept is similar triangles. I learned it in Middle School math class and then once again during surveying class and once again programming numerous solutions. So sometimes I spend too much time solving other people’s problems. This blog post is one such instance.

The problem is adding Northing and Easting value of the mid point of an alignment curve. I usually break out the problem into parts. The first part is to determine how you want to solve the problem. I could have solved this problem by solving for the equation of line, or utilize the delta angles of a curve. I choose to utilize similar triangles. So first I have to figure out what similar triangle to use. In this case I know the center point location and the PI point, this has a length property that I can use. Here is the expression to get that value:

SQRT(({PI Easting}-{Center Easting})^2+({PI Northing}-{Center Northing})^2)

Next I need to know both the difference in northing and easting between those two values.

ABS({PI Easting}-{Center Easting})

ABS({PI Northing}-{Center Northing})

I need the difference as an absolute value because I need to some checks based on the delta angle later on. Next I need to get the distance of the leg of the triangle I’m solving for. In this case the Northing and Easting expressions are below.



Now I need to figure out how I should subtract or add the expressions above. One solution in this is if the delta angle is larger or smaller then pi (180%%d). The other solution is if center easting is larger or smaller then the PI easting. Once we determine this we can then apply the math correctly. Here is the expressions for the cases.

IF({Delta Angle}<pi,
IF({PI Easting}<{Center Easting},{Center Easting}-EastingDistance,{Center Easting}+EastingDistance),
IF({PI Easting}>{Center Easting},{Center Easting}-EastingDistance,{Center Easting}+EastingDistance))

IF({Delta Angle}<pi,
IF({PI Northing}<{Center Northing},{Center Northing}-NorthingDistance,{Center Northing}+NorthingDistance),
IF({PI Northing}>{Center Northing},{Center Northing}-NorthingDistance,{Center Northing}+NorthingDistance))

Now the ending expression can be used in an alignment label or curve table.


Here is a link to a drawing with the expressions.

Reports Dirty Little Secret

There is a little dirty secret regarding reports in Civil 3D; they are not intended to be used out of the box without modification. The expectation by Autodesk is that you go in and modify them to meet your needs and requirements. I recently got a request to modify one of the reports and I thought I’d make it into this block post.

Their complaint is that Civil 3D for some reason puts the units behind a distance number. So a meters drawing will get a “m” behind, for feet it will get “ft”. Autodesk also puts a comma grouping in the numbers.


Now this goes  back to the little dirty secret of reports. You are supposed to go in and program the reports to get what you want. In this case I have a problem on how Autodesk implemented the reports. Autodesk creates a string value and when you save to Excel you get the string value. Autodesk could have chosen to be nice to us users and placed the number in the Excel Spreadsheet and then formatted the numbers using Excel formatting.

So to fix this issue I’m going to use the same method as Autodesk since I’m doing it for free. When I do a report for a fee I do the report correctly and place the numbers in Excel and then format it utilizing Excel formatting. This way as a user you don’t have to find a replace to make the numbers into real numbers and not dumb strings.

To fix the report in this case I created a new method.

Public Shared Function GetCustomFormatToFourPlaces(ByRef numberToConvert As Double) As String
    Return Math.Round(numberToConvert, 4, MidpointRounding.AwayFromZero).ToString("#.0000")
End Function

In the report I then converted where it is needed. Here is one example:


So now when it is run the report will use raw numbers formated to the correct decimal place rather then the string value that is hard to convert.

Here is the revised file that I changed from the .NET reports. The compiled dll is provided at this link.

To replace this reports with the previous go to this location on your machine: C:\ProgramData\Autodesk\C3D 2015\enu\Data\Reports\Net

Change the name of the original C3DReport.dll file to C3DReport_Old.dll and then copy the new file from the above link. You might have to unblock the file by going into it’s properties in Windows and at the bottom of the General Tab press the Unblock button. The report then should run with the revised report and formatting.

Then the report should output like this:


Friday, October 31, 2014

Adding Buttons to Ribbon Panels

So in the last post I showed how to pull out panels and put them back. We may want to add additional commands to the panel, such as a save button. This way the panel will contain all of the often used commands I might need. To do this follow the steps in this video:

Pull Out Panels

Often times we will want all the time access to a ribbon or tab panel. Don’t forget all of the panels may be removed from the Ribbon and made to act like a large rectangular toolbar. To do this click and drag on as white space on the panel and then move it away from the ribbon. It should then pop out. To put it back you can hover over the panel and then press the arrow in the upper right hand corner of the reappearing portion of the panel.

Here is a short video (without sounds) showing the steps:

Thursday, October 09, 2014

Word Adding Page Number and Number of Pages to A Header by .NET

Sometimes things on the internet are hard to find because most other questions are slightly related. One such instance I ran into is programattically adding in the page number and number of pages in a header. I’m sure the answer has been asked and answered somewhere on the internet, but I couldn’t find it.

My initial attempts came up way short. Using some of the examples overwrote the other text I needed in the header. So here is my code to get the job done.

Public Sub HeaderInformation(ByRef reportHeaderInfo As ReportHeaderInformation)
    ' Add info for header.
    Dim header As Word.HeaderFooter = oDoc.Sections.Last.Headers(Word.WdHeaderFooterIndex.wdHeaderFooterPrimary)
    Dim headerRange As Word.Range = header.Range
    headerRange.Text = "File Name: " & reportHeaderInfo.FileName & vbTab & vbTab & "Date: " & DateTime.Now.ToString("MM-dd-yy")
    headerRange.Text += "Project: " & reportHeaderInfo.ProjectName & vbTab & vbTab & "Time: " & DateTime.Now.ToString("hh:mm:ss")
    headerRange.Text += "Subproject: " & reportHeaderInfo.SubProject & " , Subproject No:" & reportHeaderInfo.SubProjectNo & vbTab & vbTab & "  of  "

    headerRange = header.Range
    headerRange.SetRange(header.Range.Text.IndexOf("of") - 2, header.Range.Text.IndexOf("of") - 1)
    headerRange.Fields.Add(headerRange, Word.WdFieldType.wdFieldPage)

    headerRange = header.Range
    headerRange.SetRange(header.Range.End - 1, header.Range.End)
    headerRange.Fields.Add(headerRange, Word.WdFieldType.wdFieldNumPages)

End Sub

Note that I had to get a range within the header range and then add the page number and number of pages fields to the header. Make sure not to utilize the character count of the header range because it doesn’t count the field’s characters. This ends up having the field being inserted into the original field. Using the Range.End returns the actual end and not the end of the character count.

Saturday, September 27, 2014

Missing Toolspace Tabs

Have you ever found tabs missing from Toolspace? Well there is an easy solution to get them to show up again. On the Home Tab of the ribbon, Palettes panel there is a collection of four buttons that toggle on/off prospector, Settings, Toolbox, and Survey. They are located conveniently next to the big Toolspace button. So if you find your are missing them, just press the buttons on the ribbon.


Thursday, September 25, 2014

Set Reference Text

Nothing like having to create a code snippet test to provide it to Autodesk so they can check to make sure their own code works. It’s not like they are going to provide me the source code so I can fix the error in the method. So I figured I’d create a blog post at the same time so Autodesk can steal it to and hopefully create a unit test so they can make sure non-buggy software doesn’t make it out into the world. Unfortunately for you, at least at the time of this writing, this post is entirely useless for setting reference text for a surface. It does work for alignments, profiles, and some other object types. Feel free to use the code for this. This code doesn’t have any error catching and would need improvements if used in a production environment.

The code throws an exception for setting surfaces as a reference saying it’s not the correct type of object.  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.ApplicationServices.Core;
using Autodesk.AutoCAD.Runtime;
using Autodesk.Civil.DatabaseServices;
using Autodesk.Civil.DatabaseServices.Styles;

namespace SetReferenceTextTarget
    public class SetReferenceTextTargetTest
        public static void runCommand()
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            Database db = HostApplicationServices.WorkingDatabase;

                using (Transaction tr = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction())
                    var surfObjId = ed.GetEntity("Select Surface:").ObjectId;
                    var labelToUse = ed.GetEntity("Select label with surface reference text: ").ObjectId.GetObject(OpenMode.ForWrite) as Label;

                    // Get the reference text, yeah! We can't use link because this "modern" software hasn't implemented IEnumerable for the
                    // ObjectIdCollection yet. So we get to go through each one in a loop!
                    ObjectId refTxtlabelComponentObjId = ObjectId.Null;
                    foreach (ObjectId objIdTxt in labelToUse.GetTextComponentIds())
                        var txtComp = objIdTxt.GetObject(OpenMode.ForWrite) as LabelStyleReferenceTextComponent;
                        if (txtComp != null)
                            refTxtlabelComponentObjId = objIdTxt;

                    labelToUse.SetReferenceTextTarget(refTxtlabelComponentObjId, surfObjId);

            catch (System.Exception ex)
                System.Windows.Forms.MessageBox.Show("Autodesk quality control sucks!: Here is proof: " + ex.Message);

Wednesday, September 24, 2014

Render Contest

I almost ready to do an informative post about Civil 3D, then Imaginit sent me an email that made it so I don’t have to come up with original content for post material. Evidently they are having a contest where you can win prizes by doing work or voting on the work others have done.

How to Enter

  1. Designers simply upload your best rendering that was developed using software or products from either Autodesk or IMAGINiT Technologies. The contest is free to enter.
  2. IMAGINiT will share all entries across their social networks and entrants are encouraged to do the same.
  3. The submission deadline is October 1, 2014.


The public will determine the three winners by voting for their favorite rendering on IMAGINiT’s RENDERiT Contest Facebook Page.

Voting closes on October 7, 2014 and winners will be announced on October 8, 2014.

Voters will also be eligible for a prize as everyone who votes will be entered into a drawing for a US$100 Apple gift card.

First prize: MakerBot Replicator Mini 3D Printer

Second prize: Polaroid Socialmatic

Third prize: Pebble Steel Smartwatch

Small commercial and residential projects seem to have less of an opportunity to come up with cool posts. Maybe next time.

Monday, September 22, 2014

Epson Printers

I’m out of blog ideas, so Epson Printers was kind enough to provide one for me.

Epson today announced its next-generation of SureColor® T-Series large-format color printers – the SureColor T3270, T5270, T7270, T5270D, and T7270D – are now shipping and available for purchase from a network of authorized T-Series resellers.

Equipped with Epson’s latest PrecisionCore TFP® print head and Epson UltraChrome® XD pigment ink, the SureColor T-Series provides technical, corporate and marketing professionals an unprecedented combination of precision, performance and brilliance.

Epson Now Shipping Next-Generation SureColor T-Series Large-Format Color Printers

LONG BEACH, Calif. – Sept. 22, 2014 – Epson today announced it is shipping its next-generation family of large-format color printers – the Epson® SureColor® T3270, T5270, T7270, T5270D, and T7270D. Equipped with Epson’s latest PrecisionCore TFP® printhead and Epson UltraChrome® XD pigment ink, the SureColor T-Series provides technical, corporate and marketing professionals an unprecedented combination of precision, performance and brilliance, and are now available for purchase through authorized Epson Professional Imaging T-Series resellers.

“We have been using the SureColor T5270D dual-roll 36-inch printer with the multifunction scanning module to create drawings for a variety of customers in the civil engineering market, with needs ranging from 36-inch wide output down to 18-inch drawings to meet strict LA County requirements,” said George Shweiri, Owner, Denn Engineers. “With simultaneous support for two different media widths, the dual-roll T-Series machine has allowed us to not only maximize space, but also reduce overhead and lower total cost of ownership. Plus, the scan to-network shared folders capability has elevated overall efficiency.”

Available in both single- and dual-roll models, the SureColor T-Series delivers extreme line accuracy with resolutions up to 2880 x 1440 dpi at incredibly fast speeds – producing a presentation quality D-size plot in as little as 25 seconds1. In addition, the SureColor T-Series 36- and 44-inch printer models offer an optional multifunction (MFP) module, enabling PC-free full color copy and scan capabilities – up to 36-inches wide – at best-in-class speeds for added convenience.

“The next-generation SureColor T-Series incorporates the latest in printing technology, and we are very excited to begin shipping into the hands of our customers,” said Timothy Check, product manager, Professional Imaging, Epson America, Inc. “Whether printing retail posters, corporate graphics, CAD drawings or GIS maps, the T-Series printers are cost-effective, scalable machines that really can do it all. We look forward to feedback from our customers and discovering even more unique applications and use cases.”

More about the SureColor T-Series

The SureColor T-Series is comprised of five printer models, offering varying performance and feature sets to accommodate a range of printing needs, all while retaining a minimal footprint to fit virtually anywhere.

Utilizing Epson’s UltraChrome XD ink, which delivers brilliant color and crisp lines on practically any media type and varied ink capacities to maximize efficiency, users can achieve truly archival and water-resistant output at an affordable cost. The SureColor T-Series printers are designed to be used exclusively with these specially-formulated inks, and not with other brands of cartridges or inks2. In addition, multiple optional features are available for the new SureColor T-Series, including a Multifunction MFP Scanner upgrade for the 36- and 44-inch single and dual-roll models, 320 GB internal print server upgrade and True Adobe® Postscript® 3 Hardware Engine.

Availability & Support

The Epson SureColor T-Series is currently available through authorized Epson Professional Imaging resellers. The SureColor T-Series printers offer a standard Epson PreferredSM Limited Warranty, a one-year program that includes toll-free advanced telephone access Monday through Friday and on-site service in the unlikely event of any hardware failure. Epson Preferred Plus extended service plans are available to provide coverage for up to two additional years. For more information, visit

Thursday, August 21, 2014

Floor Hatch Blues

Do you have to show a solid floor width on your structures in profile view? Well if you do, this is imageone way to accomplish the feat.

Unfortunately Civil 3D sucks as a BIM product, so we are going to have to do a work around in order to get this to work. The first step is to create a hatch, or hatches, representing the floor of the structures we have to show. Once we have this we can then create blocks for each one, making sure to give them a adequate name. Next create a label for each size having the hatch as it’s component. Make sure to rotate the block so it points up. Now adjust the attachment point for the structure labels to the bottom of the structure.

If you live in the real world, and not some fantasy world of Autodesk’s developers, user interface designers and the like, then you will probably have requirements to place labels at the top, middle, and/or bottom of the structure in one plan set. I know crazy thing we plan producing people have been doing for decades is beyond the comprehension of people who don’t put together plans. For this label you will want to anchor to the bottom of the structure. You do this by going into Toolspace, Settings, and adjusting the attachment point for the structure. Once you add the labels make sure you go back and adjust it to the correct location on the structure for your other labels. You’ll be glad to know that changing the color of the user interface to dark is more important then making it easier to change the location of the structure labels.

Here is a file showing it in action.

Monday, August 18, 2014

Corridor Excavations–Material Types

Sometimes when we do project we have soil types that require different quantities to get an actual price. We may have sand, rock, or other materials we need to keep track of. One way to do this is to create a surface for each type of material. If we have a corridor we can then analyze the corridor excavations by using the Compute Materials tool.

We can use the Import another criteria tab to bring in other criteria then the original cut fill values. Using the define material section we can add surfaces and then limit how the surfaces are analyzed.


Once you have it set up, it should look something like this.


Here is a sample file:

Thursday, August 14, 2014

Creating a button in the CUI to Open a PDF

I occasionally write programs for customers that necessitate the creation of a CUI so they may press a button to either run the command or open a help file. In this post I’ll cover creating a button in the CUI to open a fictitious help file as a PDF.

The first step is to type CUI at the command line to open the Customize User Interface.

Next select the partial cui file you want to add the command to, in this case I’m going to modify the C3DRPointToSnap cui to add a help file button to a PDF file.


Now we need to create a command for the help file. This is done by selecting the star with starburst in the command list section.


Once you do this the right side of the dialog box will show information for the newly created command after you select it. After it comes up fill in the appropriate information for your command.


Once you have what you want it to be enter in the Macro command. The ^C^C is the escape command twice to make sure any running commands are ended before this command should run. In my macro it is:

^C^C(command "_start" "C:/Progra~1/MWHGlo~1/APC3DU~1/MWHAPC~1.PDF")

The command now looks something like this:


Now I need to add the command to the ribbon. The first step is to create a new panel since I want this help file to be in one. If you already have a panel you can just add the command to it and bypass this step. To create a panel right click on the Panels branch and choose new Panel…


This will create a new panel, next drag the command from the bottom of the screen into the newly created panel after giving it a catchy name. I’m adding mine to Row 1. Next on the the right when you select the command in the Row 1 you can set the button style, I’m going with Large with Text (Vertical).


My last step is to add the panel to the ribbon tab. You can do this by dragging the panel up into the appropriate tab.


Now save the CUI (press the save button next to the cui name) and hit the OK button. It should then show up in the ribbon.

Tuesday, August 05, 2014

Dead Jobs and Exploded Points

Sometimes dead jobs come back to life. The CAD files aren’t always pretty and sometimes the source data doesn’t exist. One way to bring back exploded points is listed below.

In this case all of the points where exploded into two small lines representing an X. In order to get Civil 3D points from it I started with this Lisp from CAD Studio. This placed AutoCAD blocks at each of the intersection points. Plus the cost was the right price at free.

Next I utilized the Create Points from AutoCAD Points command in Civil 3D.


Make sure to set the point creation to automatically add a default description.

Then type in the point numbers to each point to replace the value in the text. Just kidding, do an internet search for lisp commands and come up with something like this:

(defun c:chgPtNum (/ doc ss obj newPtNum oldPtNum ent objmtext stroldval)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-startundomark doc)
(while (setq ss (ssget ":S" '((0 . "AECC_COGO_POINT"))))
(setq obj (vlax-ename->vla-object (ssname ss 0)))
(setq ent (car (entsel "\nPick mText with Pt Num:")) objMText
(vlax-ename->vla-object ent) strOldval (vlax-get-property objMText "TEXTSTRING"))
(vlax-put obj '
number (atoi stroldval))
(acet-ss-visible ss 1)
(vla-endundomark doc)

Then go around and select points and mtext and it will revise the point number to match that of the mText. I’m sure this could be automated further, but since it is a one off task this will work for my purposes. There might even be a third party app that has done the programming, I wasn’t able to find it though.

Surveying in the Stone Age

Don’t you hate when you try to find something on the internet and can’t find the data? I do.

I hope to correct this deficiency with this blog post. My problem is trying to convert a cr5 file to text and then from text to cr5. For those of you who don’t know, cr5 is an old file format created by TDS. TDS used to be owned by HP, but was sold to Trimble a long time ago. The cr5 file format was at one time the default format utilized by the TDS data collectors. A while later they wrote their software to utilize a job file format and a fbk format. This was many moons ago. Since it was many moons ago, and a company ago, the cr5 file isn’t well supported. If you want to use the originally provided Survey Link program you need a dongle to run it and I’ve also heard rumors the dongle doesn’t like any Windows operating system after XP.

So what is one to do today? Utilize the hidden Survey Link that comes with Civil 3D of course! Of course you are probably thinking to your self, I checked out the ribbon and couldn’t find the a command that sounded like it would do the task. Well I couldn’t find it either. The solution is to type STARTSURVEYLINK at the command line. This will open up Survey Link. If it doesn’t happen to be installed you can find a link here. When opening through Civil 3D it does not require a dongle and will work as normal.

Also if you have moved from the stone age to the bronze age of computing don’t forget about the download to Trimble Link that will allow your data collector to interact directly with Civil 3D.

Civil 3D 2015:

Other Releases:

Friday, July 25, 2014

Epson Large Format Printers

Did you know I can copy and paste? I know it’s kind of hard to believe that I can, but it’s true. To prove it to you I present you some information I received recently from Epson about their new next generation large format printers. This is a product I don’t have room for, nor is it in my budget to get one but it would be nice to have one.

Catering directly to the printing needs of CAD/engineering/GIS, Epson today launched itsimage002 next-generation family of large-format color printers – the Epson® SureColor® T3270, T5270, T7270, T5270D, and T7270D.

The Epson® SureColor® T-Series is available in both single- and now dual-roll models, and incorporates the latest in printing technology to provide technical, corporate, marketing, and educational professionals with unparalleled precision, performance and brilliance.

In addition, the SureColor T-Series 36- and 44-inch printer models offer an optional multifunction (MFP) module, enabling PC-free full color scan and copy capabilities – up to 36-inches wide – at best-in-class speeds for added convenience.

Some additional highlights are:

There printer widths, my favorite is the 36 width and my nemesis is the evil 44 inch width that I sometimes get from Architects.

There is an optional upgrade for a scanner for the 36 and 44 inch sizes.

An option for an internal print server.


Max Width & Mode

Square Feet per Hour Print Speeds1

Optional MFP Module



SureColor T3270

24-inch single-roll




SureColor T5270

36- inch single-roll




SureColor T7270

44-inch single-roll




SureColor T5270D

36-inch dual-roll




SureColor T7270D

44-inch dual-roll




If you notice the above table, I also am showing of my awe inspiring html editing skills by changing the color of the header cells.

Monday, July 14, 2014

Alignments, Offset Alignments, and Profiles From Polylines

Do you design parking lots in Civil 3D? Are you looking for possibly a better way. Well I’m not quite sure if this is the bestest way, but here is a workflow that I heard from Joe Bouza. It’s a way to utilize surfaces, alignments, profiles, and autofeature lines to model curbs and gutters for a parking lot from a grading surface.

The first step is to create a baseline featureline(s) and then create grading from them representing how you want the parking lot to be graded.

Next create a surface from those gradings or feature lines.

Create surfaces for the lip, flowline, top of curb, and if necessary back of curb. Then paste your previously created surface into it. Then adjust the surfaces the correct elevations to get the distances required to model the appropriate location on the curb and gutter.

Next you can create alignments, offset alignments, and profiles for each of your curb islands. The profiles should be created on the appropriate alignment, or offset alignments. This may be a laborious step which may be reduced greatly by using a command in the SincPac called CreateAlignmentsFromPolylines. The comand will create the source alignment plus up to 3 offset alignments and profiles. SP_CreateAlignmentsFromPolylines_Dialog

Make sure the polylines are going in the correct direction to create the appropriate offsets. Sometimes it will go the opposite way that we want. Don’t forget about the reverse command on the Modify tab to quickly reverse the polylines.

Next create autofeaturelines from the alignments and profiles. Utilize the profiles from surface for the appropriate surface.

Then add those autofeaturelines to a surface to model the parking lot.

The benefit of this method is that any changes to the original surface will be propogated through to the autofeaturelines. This makes it easier, once set up, then adjusting a bunch of regular feature lines.

Profile Stationing

Have you ever wanted to show actual pipe lengths as the stationing values? This is usually done on long pipe work where the contractor and owner is more concerned about the total length of pipe rather then the length of pipe in the plan view. On large pipe line projects this may cause quite the discrepancy in the station values. There are new commands in the SincPac called the ProfileStationing comma ProfileStationingReplaceLabels to address this request.

The first step is to run the Profile Stationing command. This will take a profile and do station values based on the length of the profile as a function of station values. It takes into account vertical curves and tangents to figure out what the profile elevation should be to represent the station values. This profile may then be used as a reference in plan view labels in other profile labels.


As you attempt to adjust the or add the profile reference to the profile labels you might quickly recognize it is a major pain in the butt. Luckily the SincPac has a quicker way to populate the station values by utilizing the ProfileStationingReplaceLabels command. This will look into profile labels and replace what ever text is specified in the Text to Replace text box. The default is <Station>. You then create profile labels that contain the text to replace. When the command is run any instance of the value will be replaced with the referenced profile created in the ProfileStationing command.


Since you might have pipes as a reference as control you might want to use the PipeProfiles command to get a profile.

Pipe Profiles

There is a new command in the SincPac called the PipeProfiles command. This command takes a profile view and creates a profile at the requested elevation point along the pipes a tolerance value away from the alignment. This command is useful to create profiles for use in output to a data collector. The command is not dynamic, so will need to be run at a design change. This shouldn’t be that big of an issue since the surveying hopefully occurs after the design is complete.

The command may also be utilized to produce bands that show pipe invert elevations along the pipes at major or minor station values. Some jurisdictions require this. This command would require you to update the bands after each time the command is run.


Thursday, June 26, 2014

Projected CogoPoints to a Profile View

Sometimes we want to show 3D information in a drawing, in places such as a profile view. If only we had a 3D Civil Engineering software program. Unfortunately we are stuck with Civil 1-1/2D to do our design and we have to do workarounds to get 3D information to show up correctly. In this case I want to project a multiview block into a profile view in order to see the shape of an Urban Industrial Bin. Now I can’t get it to show up by just including the Multiview block in the profile view.

In order to get it to show up I need to create a block of the multiview block in the position that I want to show in the profile view. Now if you might have worked with multiview blocks before and found that they only show in the plan view in plan view. Unfortunately Autodesk hasn’t programmed the multiview blocks to show in the appropriate view when the multiview is projected to a profile view.

In order to fix this definition and get the program to Civil 1-3/4D we can follow these instructions.

  • First insert a block that represents the model view of the Multiview block. If it is an Autodesk created multiview block it should have an _M after the block name.


  • Next rotate the block to the correct view you want it to show up in the profile view. You might want to try utilizing the 3DRotate command. My block looked like this once I was done.


  • Next copy it with a base point and paste it as block. Then right click and rename the block that makes sense. In my case I called it UrbanIndustrialBin-Profile.
  • Now project the CogoPoint to the profile view desired.
  • Create a Point Style that will reflect the exaggeration of the profile view and the block created for this purpose. Here are my settings.


Here is in the Project Objects to Profile View dialog box.


Now my project object looks like an industrial bin is hanging out on my profile view.


So while it’s not easy to do, it is possible to get a multiview block to look correct in a profile view. Now it won’t be perfect, but it’s closer then what we did have.

Wednesday, June 25, 2014

Hole in Surface for Retaining Wall

Sometimes quantities overlap and we want to restrict it to a certain area. We can create a boundary around the area we want excluded.

The first step is to extract feature lines from a corridor. This can be done from the Launch Pad and select Create Polyline From Corridor (on the drop down).

Next select the feature lines you want it created from.

Next draw a 3DPolyline to connect the ends of the two feature lines created.

Then go to the Modify Tab on the Ribbon and select the Join Command.

Then add in AutoCAD properties set the 3DPolyline to be closed.

Then add the 3DPolyline as a boudnary to the Datum surface.

This will cause Civil 3D to not calculate quanties where the hole occurs.

Friday, May 09, 2014

Change MLeader Number

Here is some old VBA code for changing mleader numbers.

Sub ChangeMLeaderNumber()

    Dim oAcadObject As AcadObject

    Dim sOriginalNumber As String

    Dim sChangedNumber As String

    Dim oMLeader As AcadMLeader

    Dim oAttDef As AcadAttribute

    sOriginalNumber = ThisDrawing.Utility.GetString(1, "Enter existing MLeader Number to change: ")

    sChangedNumber = ThisDrawing.Utility.GetString(1, "Enter new MLeader Number: ")

    For Each oAcadObject In ThisDrawing.ModelSpace

        If (TypeOf oAcadObject Is AcadMLeader) Then

            Set oMLeader = oAcadObject

            Dim sBlock As String

            sBlock = oMLeader.ContentBlockName

            Dim oEnt As AcadEntity

            For Each oEnt In ThisDrawing.Blocks(sBlock)

                If oEnt.ObjectName = "AcDbAttributeDefinition" Then

                    Set oAttDef = oEnt

                    If oAttDef.TagString = "CIRCLE" And oAttDef.TextString = sOriginalNumber Then

                        oMLeader.SetBlockAttributeValue oAttDef.ObjectID, sChangedNumber

                    End If

                End If


        End If


End Sub

Monday, May 05, 2014

Adding Arborescence to the Toolbox

A while back I did a blog post regarding the Toolbox. I don’t remember what it was about, but it included this image. This image contains a whole lot of non out of the box arborescence, or options.


You might want to know how you too can have an awesomely full Toolbox. It is super easy to do if you love user permissions. This is how my work flow usually goes.

  • Press the Edit Toolbox Content button.


  •   Next press this button to add a new root category. That isn’t a typo, the button is called this.


  • Next rename the Root Category to the name you want to use. I’ve renamed mine Super. To add a new Category below the Root Category, right click on the Root Category and select ‘New Category…’


  • Once you create a category you can add either another category or a tool by right clicking on the new Category.


  • Once you are done press the Save Button. That’s that 2.5” floppy disk looking thingy.


  • Now you can close the Panorama tab by pressing the Check Box next to the save button.

It should then be saved and added to the ToolBox.


Now it may not show up and I probably should put this part at the top of the list, especially if you don’t read all of the directions first. These steps won’t work if you don’t have permission to write to this folder: C:\ProgramData\Autodesk\C3D 2014\enu\Data\Toolbox so if you don’t, you’ll have to get it.

You can also modify the ToolBoxCfg.xml to contain create your own folders (or create a new XML file). If the XML file is in this folder, it will automatically be added to the Toolbox. It is probably a good idea to create your own in case Autodesk modifies it during a Service Pack. To create your own, copy the ToolBoxCfg.xml file and give it a new name and then edit the contents. Either from the Toolbox or from an XML editor such as Notepad, Notepad XML, or Notepad++.

Thursday, April 24, 2014

Creating a Point File Format

Sometimes we get survey information for a third party that doesn’t match any of the out of the box point file formats. We may need to create a new one to make it work. You can usually tell that you need to create one because you get a message that says “No point file format match found”.


To create a new point format press the format button on the same dialog box you get the message on.


When the dialog box pops up make sure to select a format that looks similar to your file and press copy. In my case I think the PNEZD is fairly close so I’m going to use that one.


The Point File Format dialog box will then show up which shows the current values.


I need to make some changes, the first is changing the format name to NNEZD (comma delimited). This represents Name, Northing, Easting, Elevation, and Description in a comma delimited format. I’m also going to change the file format to .csv.


Next I want to change the Point Number to Name by selecting the Point Number heading and then using the column name drop down to select Name.


I then press OK to close the dialog box and press Close on the Point File Formats Dialog box.

If you did everything correctly Civil 3D should then select your newly created file format.

You probably don’t want to do it each time, so make sure to add it to your template or use the Import Styles button on the Manage Tab of the ribbon to transfer the format from an existing drawing you’ve already done the transfer for.


Tuesday, April 01, 2014

Replace Last Entity

Finally I’ve created the million dollar application that you won’t be able to live without. In reality the application is priceless, but I’ve reduced it to an extremely affordable price of only $1,000,000. This app does what you were waiting for. It replaces the last profile entity from an entity and replaces it with a brand new refreshed copy.

You may have experienced drawing slow down in the past and wondered what the cause was. It just might have been due to a tired worn out last profile entity being the slowest chain in the link of objects. Autodesk may have told you in the past it was due to large amount of data in the drawing. My research as determined in reality it is caused by a tired last profile entity segment. Since I started using this application my drawing regen times have been increased by 3,500% (your results may vary).

The program is available in the Civil 3D App Store. After installing the program, type C3DRReplaceLastEntity at the command line, select the design profile, and sit back and watch your drawing performance improve exponentially. It’s like buying a new computer from the future to get the unlimited computing power of tomorrow. Here is the command in action: see how easy it is to use? I’m sure it will be your go to tool when drawing performance starts to go downhill.

Another feature of this million dollar app is it fixes a glaring error in the newly announced Civil 3D 2015. A new feature allows you to extend a fixed or floating tangent or parabola to the extents of the profile view the object is currently in. To accomplish this it adds a line or curve extension to the end of the profile view. This makes it possible to hide the added portion of the profile, while still using the extension in a corridor. This would let the corridor not go to zero elevation. Unfortunately if you decide to adjust the last profile entity you can’t get rid of the extension line. Since this million dollar app replaces the last segment, it also gets rid of the extended line or curve. Think of how quick your return on investment will be for this app. Since Civil 3D 2015 was light on new features, and for this new feature to be included, I'm sure it will be quickly recouped.

To celebrate the release of this application I’m going to give away this application to the first million people to request it on the first day of April. That’s a value of $1 Trillion dollars I’m giving away. I must be crazy. To get a copy fill out this survey. Yes, it is that easy to get a copy of this million dollar app!

The survey is now closed and you have lost the opportunity to get the million dollar app for free. It doesn't look like the app was accepted into the Civil 3D App Store. If you'd like to purchase email me (link to the upper right) and we can make payment arrangements. While this post is an April's Fools day post the app does replace the last profile entity in Civil 3D 2015 in case you extended the profile and now want to have it show correctly. It must be worth that price since Autodesk wasn't willing to spend the supposed countless hours to include the command in Civil 3D 2015 to do it themselves.

Monday, March 24, 2014


In the past two years I’ve attended Startup Weekend events, where you pitch ideas and a the end of the weekend you end up with a prototype product and a business idea that is fairly well developed. At each of them I’ve pitched a tool to help with Storm Water management. Many of the participants are students, so it’s not surprising I couldn’t get a team to do a real world useful app compared to another app to share music with others.

I recently got an email for a new product, which just happened to be the tool I was pitching at Startup Weekend. The product name is shiftStormWater. The product helps you track all of the required forms, rainfall, action logs and other required items. It makes it easy to have all of the information in one place. The tool is accessed over the cloud and provides all of the required forms.


The user interface is easy to navigate between items. Adding forms is as easy as clicking the + Forms button at the top of the screen. The dashboard provides an entry point to the data. The Details button allows you to enter and change the details for your project. There are alerts that are provided for rainfall events. If you do rainfall monitoring and stormwater development projects you might want to check out this tool. You can find out more information here:

Friday, March 07, 2014

Dell Announcements

Dell recently has been sending out some press release announcements, while I have been busy not putting out blog posts. I figured I would take this opportunity to do a blog post by passing on Dell’s information.

First up is a less expensive mobile workstation dubbed the M2800. It is a 15” screen with a system set up for utilizing AutoCAD (and I’m assuming the verticals). At a base price of $1,199 it hopes to fill the gap between a basic laptop and a workstation. I could see this machine as an away from the office machine that isn’t as bulky as 17” laptop workstation and a desktop at the office. I don’t have a permanent office space, so I’m going to stick with my 17” behemoth of a mobile workstation. More information may be found here and here.

Dell also announced the Dell Wyse Datacenter for Virtual Workstations. This allows Independent Software Vendors (ISV), such as Autodesk, to develop their software and then test it on the virtual workstations. Dell is providing free help for the ISVs to figure out any problems and then get help in solving them. Presumably once all of the kinks are worked out the virtual workstations may then be certified for use. You then could implement them for your company. The benefit of a virtual workstation is the ability to access a fast computer and your data in remote locations using a variety of devices. The benefit for Dell the ability to sell customers a cloud solution they they host. It also allows for the security of the data without having to trust cloud solutions provided by others such as Autodesk.

I see this as the future cloud solution. You create a series of virtual workstations in a central location and then install a version of the Autodesk’s cloud platform on your servers. This removes the big road block in Autodesk’s plan to move all of us to the cloud. Or I could be wrong and Autodesk will fail miserably as we stick to desktop versions because internet connections suck at this time and who wants to be dependent on a link to the outside of your walls to get and use a program and your data. For more information check this link out.

Dell has provided a free trip to me in the past to attend a press event of theirs. I also get invited to SWSX events, which I haven’t had a chance to attend. Maybe next year.

Monday, January 27, 2014

Profile View Bands

There appears to be a bug in adding a profile view band set to a profile view through the API in Civil 3D 2013 & 2014. The error is that the profiles, pipe network, and other information isn’t shown properly. In addition all of the settings don’t make sense. Here is some code that corrects the situation below. There is lots of code not shown, along with methods that are called that are included below. But the main concept is below.

ProfileViewBandSetStyle bandSet = profileBandSetId.GetObject(OpenMode.ForRead) as ProfileViewBandSetStyle;
ProfileViewBandItemCollection bottomBandItems = profileView.Bands.GetBottomBandItems();
ProfileViewBandItemCollection topBandItems = profileView.Bands.GetTopBandItems();


bottomBandItems = new ProfileViewBandItemCollection(profileView.ObjectId, Autodesk.Civil.BandLocationType.Bottom);
topBandItems = new ProfileViewBandItemCollection(profileView.ObjectId, Autodesk.Civil.BandLocationType.Top);

var bottomBandSetItems = bandSet.GetBottomBandSetItems();

foreach (var bandItem in bandSet.GetBottomBandSetItems())

int i = 0;
foreach (var bandItm in bottomBandItems)
bandItm.Gap = bottomBandSetItems[i].Gap;
bandItm.LabelAtEndStation = bottomBandSetItems[i].LabelAtEndStation;
bandItm.LabelAtStartStation = bottomBandSetItems[i].LabelAtStartStation;
if (bandItm.BandType != Autodesk.Civil.BandType.PipeNetwork)
bandItm.MajorInterval = bottomBandSetItems[i].MajorInterval == 0 ? 100 : bottomBandSetItems[i].MajorInterval;
bandItm.MinorInterval = bottomBandSetItems[i].MinorInterval == 0 ? 25 : bottomBandSetItems[i].MinorInterval;
bandItm.StaggerLabel = bottomBandSetItems[i].StaggerLabel;
if (bandItm.StaggerLabel != StaggerLabelType.None)
bandItm.StaggerLineHeight = bottomBandSetItems[i].StaggerLineHeight;
bandItm.ShowLabels = bottomBandSetItems[i].ShowLabels;
bandItm.Weeding = bottomBandSetItems[i].Weeding;
i += 1;

var topBandSetItems = bandSet.GetTopBandSetItems();

foreach (var bandItem in topBandSetItems)

i = 0;
foreach (var bandItm in topBandItems)
bandItm.Gap = topBandSetItems[i].Gap;
bandItm.LabelAtEndStation = topBandSetItems[i].LabelAtEndStation;
bandItm.LabelAtStartStation = topBandSetItems[i].LabelAtStartStation;
if (bandItm.BandType != Autodesk.Civil.BandType.PipeNetwork)
bandItm.MajorInterval = topBandSetItems[i].MajorInterval == 0 ? 100 : bottomBandSetItems[i].MajorInterval;
bandItm.MinorInterval = topBandSetItems[i].MinorInterval == 0 ? 25 : bottomBandSetItems[i].MinorInterval;
bandItm.StaggerLabel = topBandSetItems[i].StaggerLabel;
if (bandItm.StaggerLabel != StaggerLabelType.None)
bandItm.StaggerLineHeight = topBandSetItems[i].StaggerLineHeight;
bandItm.ShowLabels = topBandSetItems[i].ShowLabels;
bandItm.Weeding = topBandSetItems[i].Weeding;
i += 1;

UpdateBandProfileAndDataSource(PipeNetworkObjId, prof, bottomBandItems);
UpdateBandProfileAndDataSource(PipeNetworkObjId, prof, topBandItems);



Blog Widget by LinkWithin