I have several hundred cross sections for a surface that I need to label the major section breaks. Civil 3D gives the option of weeding based on distance, but I want to label only the major grade breaks (i.e. more than 1%). Is this possible, or is the only option manually labeling the section?
If you want to add grade break labels to the major section grade only (where the difference is greater than 1%) you can add labels with an offset and an elevation to hundreds of crosses sections for a surface and change a percent controller globally.
Using this method you can do it fast and easily:
1. Select the Section node from Toolspace,
2. Choose the Grade Break node from Label Styles,
3. Create a new Expression and give it a meaningful name e.g. myPercentControl
- Set the value 0.01 which is equal 1%
4. Create a new Expression and give it a meaningful name e.g. TextHigh
- Set the value 0.002 which is equal 2mm
5. Create a new Expression and give it a meaningful name e.g. LineLength
- Set the value 0.01 which is equal 10mm
6. Create a new Expression and give it a meaningful name e.g. ValueInv
- Set the value 0.00000000001 which is equal almost 0
7. Create a new Expression and give it a meaningful name e.g. myGradeChange
- Set the Expression and choose Format result as: Percent
IF(
({Distance from Centerline}<={Left Length}),{Section Grade Out},
(IF(
({Distance from Centerline}>={Right Length}),{Section Grade In},
{Section Grade Change})))
8. Create a new Expression and give it a meaningful name e.g. myLineVis
- Set the Expression
IF(
({Distance from Centerline}<={Left Length})|
({Distance from Centerline}>={Right Length}),LineLength,
IF(
ABS(myGradeChange)>{ myPercentControl},LineLength,ValueInv))
9. Create a new Expression and give it a meaningful name e.g. myTextVis
- Set the Expression
IF(
({Distance from Centerline}<={Left Length})|
({Distance from Centerline}>={Right Length}),TextHigh,
IF(
ABS(myGradeChange)>{ myPercentControl},TextHigh,ValueInv))
10. Now create a new label and call it e.g. myPercentSectionOffsetElevation
11. Delete all the existing elements and add your new line element
- Name = LineElement
- Start point anchor point = Anchor Grade Break
- Length = myLineVis
- Angle = 90.0000(d)
12. Add a new Text element
- Name = TextElement
- Anchor Componet = LineElement
- Anchor Point = End
- Text Height = myTextVis
- Attachment = Middle left
- Gap = 0
- Contents -
OFF:<[Offset from Centerline(Um|P2|RN|AP|GC|UN|Sn|OF)]> ELEV:<[Section Elevation(Um|P2|RN|AP|GC|UN|Sn|OF)]>
(Optionally to see how it works you can also add):
DIFF: <[myGradeChange(FP|P2|RN|AP|Sn|OF)]>
13. Choose Edit Section Labels and Select a Section
14. Choose from Type: Grade Breaks and from Section Grade Break Label Style: myPercentSectionOffsetElevation
15. Change Weeding to the value = 0
16. You can also use the Stagger Labels option and set it as Stagger both with the following values:
Stagger line1 height = 6.00mm and Stagger line2 height = 3.00mm
17. Click the OK button
18. You will see the final result:
19. Now you can control globally the values: TextHigh and LineLength
You can also control globally your decision value myPercentControler and change the frequency labels to control the percent value e.g. 2%
20. At last if you do NOT want to show the values at LeftLength and RightLength you can change the expression in myLineVis to
IF(
({Distance from Centerline}<={Left Length})|
({Distance from Centerline}>={Right Length}), ValueInv,
IF(
ABS(myGradeChange)>{ myPercentControl},LineLength,ValueInv))
21. And also for the same reason you can change the expression in myTextVis to
IF(
({Distance from Centerline}<={Left Length})|
({Distance from Centerline}>={Right Length}), ValueInv,
IF(
ABS(myGradeChange)>{ myPercentControl},TextHigh,ValueInv))
This works great on a existing ground line in cross sections. How can I get this to label grade breaks from my propsed assembly?
Hi
Can anyone tell me please whats wrong with the expression in the attached picture?