Monday, October 31, 2011

Civil 3D Reminders Pack 2012

There are going to be some changes in the future regarding the Civil 3D Reminders Pack 2012 edition. Currently the 2012 program is available by request only. To request a copy send an email to me at the link to the right.

Or you can update the references from the 2011 source code and upgrade the pack yourself. A link is to the right.

Wednesday, October 26, 2011

Pipe Slope Label Precision

So here’s the scenario, you have submitted plans for  a sewer line (or profile) and a comment comes back that your pipe slope labels are wrong. You go through and check them and find out that you are getting the same results as the plan checker. You think Civil 3D is stupid it can’t even calculate pipe slopes correctly. Well the real problem is located between the chair on the plans on the plan checker side and between your chair and the computer on your end.

It seems somewhere along the way some of us forgot about significant figures. The basic concept of significant figures is that the resulting number can’t be more accurate than the least accurate number used in the calculation.


The problem usually comes up when the agency requires more significant figures in the slope label then in the Grade Break labels. In this above picture if we calculate the slope based on the grade break information:

(PVIE – PVIE)/(PVIS-PVIS) = slope

The best accuracy we can get from the slope would be -0.33%. If you do the math you will find calculating the slope based on the grade breaks is -0.3284746%. This number is obviously different than the slope Civil 3D is showing.

The only way we should be confirming the accuracy of the Civil 3D label is using this formula:

((PVIS-PVIS) x slope) +PVIE = PVIE

This way we are using the available values to ensure our results meet the requirements of the significant figures provided on the plans.

Once completing this explanation of the issue with the plan checker and they don’t agree. The only accurate solution is to increase the precision of the grade break labels. Creating a label to get the slope label to be correct may cause problems later on. Especially if the contractor builds the project off the slopes provided. For long lengths the ending PVIE will be incorrect value. 

Monday, October 24, 2011

Win a Trip to AU!

Boss won’t pay for you to go to Autodesk University? Then try getting 3DConnexion to pay for your way to AU. Click the image below to enter to win.


Why am I blatantly plugging a 3DConnexion promotion? Because in the past they have provided product for me to conduct product reviews and giveaways to you my readers. They also provided me a great lunch and a sit down with the CEO to check out the latest features of the product at last years AU and yes this is a Government mandated disclaimer.

How to reduce Parcel Area precision to less than 1

Sometimes when you are doing conceptual work you may want convey less accuracy in a parcel label. For instance maybe you want to show the value to the nearest 100 SF of area. This is quite easy to accomplish with expressions.

First create the expression. Next use a formula that will calculate the precision that you are looking for. The expression would be similar to this:


Replace the Area with the expression property. The expression is finding what the hundreds value should be by rounding the area of the parcel by 100. Next we want the area to be the correct value so we multiply 100 to the result to get the correct magnitude of the area value. Make sure to set the expression type to Area to get all of the text component values you are used to.

Got an expression problem you want solved? Send me an email to get a quote on an expression to solve your challenge.

Wednesday, October 19, 2011

Curb Ramps

One of my recent projects was designing some curb ramps. I was quickly affirmed of my belief that Civil 3D is not a BIM software product. Take a look at the image below.


It’s a Caltrans Type F curb ramp, well not really it’s a bunch of feature lines and a Civil 3D surfaces (EG & FG). Can you tell where the curb ends and the asphalt begins? I can’t. Can you tell me what material is between the curb return and the handicap ramp? I can’t. Can you tell that I’m using both curb and gutter and asphalt dike? I can’t.

I don’t know about you but, I’d expect a BIM product to do the basics, like letting you design curbs that are actually curb objects. Feature Lines are an extremely poor substitute for a modeling curbs and curb ramps. I would expect a real BIM Civil software product to allow me to model my design and then let me see the differences of the various materials involved.

If I had a curb object then I could label the curb instead of labeling a surface. In labeling a surface I’m prone to making errors, such as labeling the wrong point on the surface. Whoops did I just label the flowline as the Top of Curb? Yep.

Design changes anyone? Forget it with the current process. What you want to move the curb ramp 90 degrees ? Guess what I’m starting nearly from scratch because of the lack of BIM capabilities of Civil 3D.

Maybe someday Autodesk will have a Civil BIM product, but it definitely isn’t today.

(Note: Most of the rant is extremely affected from sitting through Autodesk Marketing events. Seeing what the architects can do with their products that are BIM provide a vary stark difference.)

Monday, October 10, 2011

vb.NET Insert Block and Attributes

To insert a block into AutoCAD using .NET you may also need to insert the attributes of the block after you insert the block into the drawing. Unlike in VBA, you have to insert the attributes also, they don’t come along for the ride. Below is the code to insert the block into a drawing in the current space.

    Public Function InsertBlock(ByVal blkName As String, ByVal insPt As Point3d, ByVal xBlkScale As Double, _
ByVal yBlkScale As Double, ByVal zBlkScale As Double, ByVal ang As Double) As ObjectId
Dim doc As Document = Application.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database

Using tr As Transaction = db.TransactionManager.StartTransaction
Dim blkTable As BlockTable = tr.GetObject(db.BlockTableId, OpenMode.ForRead)
Dim blkObjId As ObjectId = GetBlkRefObjIdByName(blkName)

Dim blkRef As BlockReference = New BlockReference(insPt, blkObjId)
blkRef.ScaleFactors = New Scale3d(xBlkScale, yBlkScale, zBlkScale)
blkRef.Rotation = ang

Dim blkTblRec As BlockTableRecord
' Assumes the current space was already changed to.
blkTblRec = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite)

tr.AddNewlyCreatedDBObject(blkRef, True)

' add the attribute definitions.
Dim blkTblR As BlockTableRecord = blkObjId.GetObject(OpenMode.ForRead)
For Each objId As ObjectId In blkTblR
Dim obj As DBObject = objId.GetObject(OpenMode.ForRead)
If TypeOf obj Is AttributeDefinition Then
Dim ad As AttributeDefinition = objId.GetObject(OpenMode.ForRead)
Dim ar As AttributeReference = New AttributeReference()
ar.SetAttributeFromBlock(ad, blkRef.BlockTransform)
ar.Position = ad.Position.TransformBy(blkRef.BlockTransform)
tr.AddNewlyCreatedDBObject(ar, True)
End If

Return blkRef.ObjectId
End Using

End Function


Blog Widget by LinkWithin