A couple of years ago I developed a number of parcel styles and labels to calculate the capacity of basic open channels when you have limited data to do a full model.
Yesterday I had to use the styles again for the first time in a while and it took me a while to remember want to do, so I have made a quick screen capture of the process for future reference and others to review.
The label styles make use of expressions and user defined properties in the parcels. The process is not fully automatic but you can slide the parcel line representing the water level up and down to adjust the calculations and manually update the water surface length to get the correct wetted perimeter. Someone out there may have a clever idea on how this could be automated.
Also the Slide Direction tool does not seem to hold the bearing when moving from one segment of the road frontage (aka stream bed) to the next unless this is by design.
There is a link to the full screen movie here seeing the image below is a bit small.
In rural New Zealand there is generally a lack of Lidar information to build 3d surfaces within Civil3d. However Land Information New Zealand (LINZ) have made available on their website shp file versions of their NZTopo50 series maps that contains contour information at 20m intervals. You can use these contours to create surfaces and define catchments automatically in Civil3d.
To build a surface is Civil3d:- 1. Goto the LINZ website and choose a map of your area of interest http://www.linz.govt.nz/topography/topo-maps/map-chooser at the bottom of the particular map you will see the shp file download option. Download and unzip the shp files.
2. Now you have to import the shp data into a new drawing using MAP and assign the object data elevation to the Z value of the polylines that represent the contour lines. There are a couple of tutorials on the web how to do this already here and here. Note the shp files downloaded are in NZTM co-ordinate system so you may have to do a co-ordinate transformation on import as well.
3. Now that you have the contours with the correct elevation you can build a surface in Civil 3d in the normal way and define catchments and flow paths using the built in Civil3d’s tools.
Only problem Civil3d pipes does not deal with pipes as a 3D string format , polyline format. I have commented on this before and Autodesk should be addressing it sooner rather than later. Currently the piping tools of Civil3d cannot deal with modern construction materials and techniques.
In the near future I foresee modern technology removing the need to run pipes in straight lines between structures as long as all segments of length dx within a pipe of length x achieve the minimum hydraulic requirements water will in fact flow down hill and achieve the required result at a cheaper cost.
See you in the future Mcfly.
Just noticed the other day that I did my 100 th post. Here is a snap shot of my blog stats. Seem to be getting around 1800 page views a month and alot of viewers from all over the world. Surprisingly the most popular posts have been my intro to vb.net, lot grading and keyboard wizard posts. The last few posts have been a bit basic and tongue and cheek. So I will look at some thing a bit more complex in the next few posts.
Comment below and let me know what you guys and girls want to see more posts on VB.net? Daily Gotcha’s? Just doing things differently?
In last day or so Autodesk have announced the release of the new Volume Dashboard add on for Civil3d 2012 subscription users.
About a month or so ago a I bolted together a number of pieces of code off the net from here, here and here. To make my own utility to generate a bounded volumes table for a project. The routine uses polylines for stage boundaries and a single bounded volume surface, here is a quick video of the code in action and the code I developed for those users that want to use it in previous versions of Civil3d. The code may also be useful to dump the results of the stages volumes into a standard Autocad table a functionality that is lacking in the new tool.
I did plan to develop the code further to remember the stage boundaries polylines by attaching the handle of the staging polylines to the volume table as xdata to enable a table refresh at a later date.
Instead I will continue to focus on cleaning up XPac a collection of code routines I have written over the last 5 to 6 years for Civil3d. Here is a compiled version of XPac with the command XP_BoundedVolumeTable command as always use the code at your on risk.
'Prompt the user if the they want to create a new bounded volumes table or refresh an existing one
'If new then get the user to 'Select the volume surface Dim ObjTypetoSelect(0) As Type ObjTypetoSelect(0) =GetType(TinVolumeSurface)
Dim surfaceId As ObjectId = PromptForTinSurface(ObjTypetoSelect, "Select a TIN Volume Surface: ", "The selected object is not a TIN Surface.") If ObjectId.Null = surfaceId Then _write(vbLf &"No TIN Surface object was selected.") ' We don't have a surface; we can't continue. Return EndIf
'Create a selectionset of the polylines to be used the bounded polylines Dim acSSet As SelectionSet = GetSelectionSet()
'check selectionset not null If acSSet.Count =NothingThen Exit Sub EndIf
'Define the and size an array to sort the volume data for use later Dim VolumeData AsString(,) =NewString(acSSet.Count +1, 3) {}
Dim polylinenum AsInteger=2 'for each polyline in the selection 'create an array of vertice co-ords to pass to volume function ForEach acSSetObj As SelectedObject In acSSet
Dim dObjId As ObjectId dObjId = acSSetObj.ObjectId
If (dObjId.IsNull) Then m_Editor.WriteMessage("No Bounding Polylines have been selected") Return EndIf
Try 'not sure if you can get bounded volumes in .net yet therefore 'from the ObjectID get a com surface object to use the boundedvolumes method Using tr As Transaction = startTransaction() 'get the bounding polyline for read Dim oPolyline As Polyline = tr.GetObject(dObjId, OpenMode.ForRead)
'Determine the volumes in the polylines area Dim oCutFillSurface1 As AeccTinVolumeSurface = tr.GetObject(surfaceId, OpenMode.ForRead).AcadObject Dim oCut AsDouble=0 Dim oFill AsDouble=0 Dim oNet AsDouble=0
Dim oArray AsNew List(OfDouble) oArray = ArrayOfPolylineCoords(oPolyline) Dim xx AsObject xx = oArray.ToArray
Catch ex As System.Exception MsgBox("Error in calculating volumes from polyline"& Err.Description &" - "& Err.Number & Convert.ToChar(10)) Return EndTry