Logical Name
|
Resource Type
|
Mandatory
|
Criteria
|
Description
|
Alignment Design Customization
|
XML Document available in
win_b64\startup\Civil\AlignmentDesign
|
|
- |
Customizes the behavior of alignment features.
|
Alignment Design Rules Definition
|
XML Document available in
win_b64\startup\Civil\AlignmentDesignRules
|
|
- |
Defines the design rules to check an alignment
definition. |
Building Information Modeling
Definition
|
XML Document available in
win_b64\startup\Civil\BIM
|
|
- |
Defines the IFC/OmniClass/UniFormat extensions that
can be set on Building & Civil objects. Provides the list of
IFC/OmniClass/UniFormat extensions that can be assigned to
Building & Civil objects at creation.
Also provides the list of extensions that can be added manually by
the designer during edition.
|
Concrete Design Customization
|
XML Document available in
win_b64\startup\Civil\ConcreteDesign
|
- |
- |
Customizes the behavior of concrete features. |
Supported Standards
|
XML Document
available in
win_b64\startup\Civil\aecstd
|
|
-
|
Defines the supported standards.
|
Road attainment methods
|
Business Rule
available in
win_b64\resources\knowledge\scripts
|
-
|
-
|
Defines the road attainment methods.
|
BIM Attribute Completion
|
Business Rule available in
win_b64\resources\knowledge\scripts
|
- |
The script of the Runtime View is read,
- if the rule is UNSET in Data Setup and if the Fact Type contains either the
"VPMReference" value, or the exact Aec type of the object
(for example: "AecSlab" value)
- or if the rule is SET and the Fact Type contains "Any
Value"
Script files are located in the following runtime view directory:
<os>\resources\knowledge\scripts .
The script (BIMAttributeCompletionRule_Sample.CATRule ) of the Data Setup is read, if the rule is SET and if the Fact Type contains
the "VPMReference" value.
|
Defines the BIM Attribute Completion behavior.
From the BIM Completeness dialog box, the
missing attributes of Civil Engineering objects are automatically
defined/computed through the script of the Business Rules, and set
directly in the BIM Attributes panel.
|
Railway attainment methods
|
Business Rule available in
win_b64\resources\knowledge\scripts
|
- |
The script of the Runtime View is read, if no rule is set in Data Setup. |
Defines the railway attainment methods. |
Railway cant and transition length
rules
|
Business Rule available in
win_b64\resources\knowledge\scripts
|
- |
The script of the Runtime View is read, if no rule is set in Data Setup. |
Defines the railway cant and transition length values.
|
Road Superelevation and Transition Length
Rules |
Business Rule available in
win_b64\resources\knowledge\scripts
|
- |
The script of the Runtime View is read, if no rule is set in Data Setup. |
Defines the road superelevation and transition length
values. |
Road Widening and Transition Length
Rules |
Business Rule available in
win_b64\resources\knowledge\scripts
|
- |
The script of the Runtime View is read, if no rule is set in Data Setup. |
Defines the road widening and transition length
values. |
Subgrade Surface width and transition
length |
Business Rule available in
win_b64\resources\knowledge\scripts
|
- |
The script of the Runtime View is read, if no rule is set in Data Setup. |
Defines Subgrade Surface width and transition
length. |
Subgrade Surface curve widening and transition
length |
Business Rule available in
win_b64\resources\knowledge\scripts
|
- |
The script of the Runtime View is read, if no rule is set in Data Setup. |
Defines Subgrade Surface curve widening and transition length. |
Building Information Modeling
Customization
|
Know-how component available in
win_b64\startup\Civil\BIM\
|
|
The script of the Runtime View is read, if no rule is set in Data Setup. |
Defines the customized extensions that can be set on
Building and Civil features. |
About Building & Civil Resources
The xml files from the directories indicated in the table above are used when there are no
files referenced in Data Setup.
A building & civil resource is an XML document that describes building and civil objects
along with their expected behaviors at creation and in edition mode. Sample files
are available in win_b64\resources\standard\aec or
win_b64\resources\knowledge\scripts . You can modify the xml
files of interest with the specifying values for AddAtCreation and
AtEdition attributes for each extension (Yes or No). Or you
can add customized extensions in a new xml file. The extract below shows an example
for the IfcPset_ChimneyCommon extension.
Note:
For information, see About Adding Customized Extensions in Building and Civil Assemblies.
XML File Example
<Extension
AddAtCreation="Yes"
AtEdition="Add|Remove"
Name="IfcPset_ChimneyCommon" />
<Extension
Description of XML Elements
The table below describes the elements and their possible attributes.
Element
|
Attribute (s)
|
Description
|
AddAtCreation
|
|
Specifies whether an extension is to be
added if not present.
|
AddAtEdition
|
|
Can be the combination of
Add that allows you to add an extension
Replace that allows you to replace a base extension and ensures that
there is always a base extension. As an example
IfcWall ,
IfcWallStandardCase ,
IfcWallElementedCase are the base
extensions of the wall entity
Remove that allows you to remove an
existing extension
|
Supported Standards
- Example of Supported Standards
-
standards version="1">
<standard name="IFC4" activated="true"/>
<standard name="OmniClass_Table_11" activated="false"/>
<standard name="OmniClass_Table_12" activated="false"/>
<standard name="OmniClass_Table_13" activated="false"/>
<standard name="OmniClass_Table_14" activated="false"/>
<standard name="OmniClass_Table_21" activated="false"/>
<standard name="OmniClass_Table_22" activated="false"/>
<standard name="OmniClass_Table_23" activated="false"/>
<standard name="OmniClass_Table_31" activated="false"/>
<standard name="OmniClass_Table_32" activated="false"/>
<standard name="OmniClass_Table_33" activated="false"/>
<standard name="OmniClass_Table_34" activated="false"/>
<standard name="OmniClass_Table_35" activated="false"/>
<standard name="OmniClass_Table_36" activated="false"/>
<standard name="OmniClass_Table_41" activated="false"/>
<standard name="OmniClass_Table_49" activated="false"/>
<standard name="Uniformat_II_Elemental_Classification" activated="false"/>
<standard name="Proposed_Uniformat_II_Bridge_Elements" activated="false"/>
</standards>
Alignment Design Customization
The script below is a stationing
script. If no XML resource file is set in Data Setup, the AlignmentDesign.xml file delivered in
startup\Civil\AlignmentDesign is used.
<AlignmentDesign>
<Units>
<DefaultValues>
<!-- Default values are used while creating a new alignment, road/railway surface, road/railway design -->
<!-- Ulterior Data Setup modifications do not impact existing entities -->
<Speed value="km_h"/> <!--km_h, mph-->
<Gradient value="%_angle"/> <!--%_angle, m_m, deg, rad, grad, in_ft--> <!-- NOT USED -->
<Superelevation value="%_angle"/> <!--%_angle, m_m, deg, rad, grad, in_ft-->
<Cant value="%_angle"/> <!--%_angle, m_m, deg, rad, grad, in_ft--> <!-- NOT USED -->
<CrossSection>
<SmallAngle value="%_angle"/> <!--%_angle, m_m, deg, rad, grad, in_ft-->
<LargeAngle value="m_m"/> <!--%_angle, m_m, deg, rad, grad, in_ft-->
<LimitSmallLarge value="20%_angle"/>
</CrossSection>
<RoadGeometry value="mm"/> <!--mm, m, in, ft-->
<VehicleTypeGeometry value="mm"/> <!--mm, m, in, ft-->
<Stationing value="m"/> <!-- Can be represented in any length unit e.g. "m","ft","in" ...-->
</DefaultValues>
</Units>
<Stationings>
<!-- Default values are used while creating a new alignment or the first stationing -->
<!-- Ulterior Data Setup modifications do not impact existing alignments or stationings -->
<DefaultValues>
<MajorInterval value="100m"/>
<!-- Can be expressed in any length unit e.g. "100 feet"-->
<MinorInterval value="20m"/>
<!-- Can be expressed in any length unit e.g. "100 feet"-->
<StationTextHeightRatio value="0.02"/>
<!-- Expressed as a ratio of the MajorInterval-->
<StationOffsetRatio value="1"/>
<!-- Offset between the alignment and the station text. Expressed as a ratio of TextHeight -->
</DefaultValues>
<!-- Global values are shared among all alignments contained in a given PLM representation -->
<!-- They are stored in this representation during the first alignment creation -->
<!-- Ulterior Data Setup modifications do not impact PLM representations in which alignments were already created -->
<GlobalValues>
<!-- Alignment -->
<LockIntervals value="false"/>
<!-- true: Major\Minor intervals parameter cannot be edited -->
<!-- Numbers -->
<LengthDecimalPlaces value="3"/>
<LengthDisplayTrailingZeros value="false"/>
<!-- Station annotation -->
<StationTailRatio value="1"/>
<!-- Expressed as a ratio of the TextHeight -->
<StationOverrunRatio value="1"/>
<!-- Expressed as a ratio of the TextHeight -->
<!-- Station equation annotation -->
<StationEquationBackLabel value="@unset"/>
<!-- @unset to have an internationalized value equivalent to 'BACK' -->
<StationEquationAheadLabel value="@unset"/>
<!-- @unset to have an internationalized value equivalent to 'AHEAD' -->
<StationEquationSideOffsetRatio value="1"/>
<!-- Expressed as a ratio of the TextHeight -->
<StationEquationTailRatio value="1"/>
<!-- Expressed as a ratio of the TextHeight -->
<StationEquationOverrunRatio value="1"/>
<!-- Expressed as a ratio of the TextHeight -->
<StationingFormat value="1"/> <!-- Stationing format : '1' for [123+456.789] and '2' for [1234+56.789] -->
</GlobalValues>
</Stationings>
<VehicleTypes>
<VehicleType type="Passenger Car" symbol="P"
height="1300mm" width="2130mm" length="5790mm"
frontOverhang="910mm" rearOverhang="1520mm"
wheelbase="3350mm"
emptySpeedLimit="130km_h" loadSpeedLimit="130km_h"
unloadedWeight="1200kg" payload="500kg"
autonomous="false"
heightOfEye="1.06m" headlightSightDistance="150m"
headlightHeight="0.65m" lightBeamDivergence="1deg"
decelerationRate="3.4m_s2"
taillightHeight="600m"
reactionTime="2.5s"
wheelHeight"500m"/>
</VehicleTypes>
<LaneTypes>
<LaneType name="3.5m lane - One way"
designVehicles="P;SU-9;WB-20"
width="3500mm" lateralClearance="910mm"
travelingDirection="2"
speed="130km_h;130km_h;110km_h"/>
<!--1: None; 2: OneWay; 3: TwoWays-->
<!--None: no traveling (e.g. raised median)-->
<!--OneWay: only one direction of traveling (e.g. Bus lane)-->
<!--TwoWays: can be traveled on both directions (e.g. Pedestrian lane)-->
</LaneTypes>
<PointTypes>
<!--
label for text1 and text2
%s : stationning (exemple: PO+189.456)
%r : radius (radius of the corner, in local distance unit)
%d : distance from start point (in local distance unit)
%i : point index (only for PI and VI index of the point, order of alignment)
starti: start of the index (exemple 1), stepi: step of the index
%v : velocity (exemple 70 km/h)
%c : category (Catefory field content on profile specification)
%t : type (exemple : Tunnel / Bridge ...)
%e : elevation (only on vertical alignment : ###,## in local distance unit)
%w : width of road
pointType :
"CROSS", "PLUS", "CONCENTRIC", "COINCIDENT", "FULLCIRCLE", "FULLSQUARE",
"STAR", "DOT", "SMALLDOT"
Show :
0 : hide text + point
1 : display text + point
Output :
0 : don't output the point
1 : output the point
-->
<KeyPoint>
<Horizontal>
<!--
PI : Point of Intersection
TS : Tangent to Spiral
TC : Tangent to Curve
SC : Spiral to Curve
CM : Curve to middle
CC : Curve to curve
SS : Spiral to Spiral
CS : Spiral to Curve
CT : Curve to Tangent
ST : Spiral to Tangent
CE : Curve extremum
TT : Tangent to Tangent
-->
<PI text1="PI%i" text2="" color="255 0 0" pointType="CONCENTRIC" start_index="1" step_index="1" output="false"/>
<TS text1="TS = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<TC text1="TC = %s" text2="R = %r" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<SC text1="SC = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CM text1="CM = %s" text2="R = %r" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CC text1="CC = %s" text2="R = %r" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<SS text1="SS = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CS text1="CS = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CT text1="CT = %s" text2="R = %r" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<ST text1="ST = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CE text1="CE = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<TT text1="TT = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
</Horizontal>
<Vertical>
<!--
VPI : Vertical Point of Intersection
GS : Gradient to Spiral
SC : Spiral to Curve
GC : Gradient to Curve
CE : Curve extremum
CC : Curve to curve
CG : Curve to Gradient
CS : Curve to Spiral
SG : Spiral to Gradient
-->
<VPI text1="VPI%i" text2="" color="255 0 0" pointType="CONCENTRIC" start_index="1" step_index ="1" output="false"/>
<GS text1="GS = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<SC text1="SC = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<GC text1="GC = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CE text1="CE = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CC text1="CC = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CG text1="CG = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CS text1="CS = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<SG text1="SG = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<GG text1="GG = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
</Vertical>
</KeyPoint>
<EventPoint>
<!--
BA : Begin of Alignement
EA : End of Alignement
SE : Station equation : #back# / #head# value override for internationalized value
VE : Change of Speed
TY : Change of underlying infrastructure type (e.g. Start of bridge)
WI : Change of width
OT : Other
-->
<BA text1="%s" text2="" color="60 190 240" pointType="FULLSQUARE" output="true"/>
<EA text1="%s" text2="" color="0 0 255" pointType="FULLSQUARE" output="true"/>
<SE text1="#back# %s" text2="#ahead# %s" color="0 0 255" pointType="FULLSQUARE" output="true"/>
<VE text1="%v" text2="" color="127 0 255" pointType="FULLSQUARE" output="false"/>
<TY text1="%t" text2="" color="127 0 255" pointType="FULLSQUARE" output="true"/>
<WI text1="%w" text2="" color="127 0 255" pointType="FULLSQUARE" output="false"/>
<OT text1="%s" text2="" color="127 0 255" pointType="FULLSQUARE" output="false"/>
</EventPoint>
<SurveyPoint>
<!-- SP : StationPoint -->
<SP text1="%s" text2="" color="9 82 40" pointType="STAR" output="false"/>
<!-- GP : GeoPoint -->
<GP text1="%s" text2="" color="27 157 44" pointType="STAR" output="false"/>
</SurveyPoint>
</PointTypes>
<Profile name="Road" iconLocalPath="I_CegRoad108x144.png">
<Design>
<DefaultValues>
<TraveledWayType value="2"/>
<!--1: Planar; 2: Crowned-->
<RotationMode value="1"/>
<!--1: CenterLine; 1: InnerEdge; 2: OuterEdge; 3: Right; 4: Left-->
<DesignVehicle value="SU-9"/>
<DesignSpeed value="80km_h"/>
<NormalSlope value="2%_angle"/>
<RightShoulderSlope value="4%_angle"/>
<LeftShoulderSlope value="4%_angle"/>
<FirstWayRightWidth value="3.5m"/>
<FirstWayLeftWidth value="3.5m"/>
<FirstWayRightShoulderSlope value="4%_angle"/>
<FirstWayLeftShoulderSlope value="4%_angle"/>
<FirstWayRightShoulderWidth value="2m"/>
<FirstWayLeftShoulderWidth value="2m"/>
<WideningTransition value="10m"/>
<WideningSmoothing value="2m"/>
<RollOver value="6%_angle"/>
<StoppingSightDistance value="true"/>
<HeightOfObjectForStoppingSightDistance value="0.6m"/>
<PassingSightDistance value="true"/>
<HeightOfObjectForPassingSightDistance value="0.10m"/>
<LengthOfPassingSections value="true"/>
<RatioOfPassingSections value="true"/>
<HeadlightSightDistance value="true"
<DrainageControl value="true"/>
<PassengerComfort value="true"/>
<VerticalCentripetalAccelerationThreshold value="true"/>
<VerticalCurveType value="2"/>
</DefaultValues>
</Design>
<TraveledWayLaneDistribution>
<FirstWayLeftSide>
<Lane name="3m lane - One way" direction="3"/>
<!--1: None; 2: Along; 3: Opposite-->
<!--None: not a traveling lane-->
<!--Along: traveling from alignment Start to alignment End-->
<!--Opposite: traveling from alignment End to alignment Start-->
</FirstWayLeftSide>
<FirstWayRightSide>
<Lane name="3m lane - One way" direction="2"/>
</FirstWayRightSide>
</TraveledWayLaneDistribution>
<Rules>
<DefaultValues>
<RadiusTable value="Sample eMax 4%"/>
<LengthTable value="DefaultLengthBySpeed"/>
<GradientTable value="DefaultGradientBySpeed"/>
<SuperelevationTable value="Sample eMax 4%"/>
<AttainmentMethodsTable value="Default"/>
</DefaultValues>
</Rules>
</Profile>
</AlignmentDesign> Where:
|
|
MajorInterval
|
Corresponds to the major interval of stationing at
alignment creation. This value is stored on the alignment when
creating this alignment. It is not updated if the value is modified
later in Data Setup. The value used at creation is kept. |
MinorInterval
|
Corresponds to the minor interval of stationing at
alignment creation. This value is stored on the alignment when
creating this alignment. It is not updated if the value is modified
later in Data Setup. The value used at creation is kept. |
StationTextHeightRatio
|
Corresponds to the text height at alignment
creation. Expressed as a ratio of the major interval value. This
value is stored on the alignment when creating this alignment. It is
not updated if the value is modified later in Data Setup. The value used at creation is kept. For example, it could be
0.02, which results in a text height of 2m if the major interval is
set to 100m. |
StationOffsetRatio
|
Corresponds to the distance between the station
name and the alignment. Expressed as a ratio of the text height.
This value is stored on the alignment when creating this alignment.
It is not updated if the value is modified later in Data Setup. The value used at creation is kept. |
LockIntervals
|
Locks/unlocks the edition of minor and major
intervals at 3D Shape level. This value is stored on the alignment
when creating this alignment. It is not updated if the value is
modified later in Data Setup. The value used at creation is kept. |
LenghtDecimalPlaces
|
Gives the number of significant decimals for
stations. |
LenghtDisplayTrailingZeros
|
Displays trailing zeros for stations. |
StationTailRatio
|
Corresponds to the length of the station
annotation beyond the alignment (that is, the opposite side of the
text). This value is stored on the alignment when creating this
alignment. It is not updated if the value is modified later in Data Setup. The value used at creation is kept. |
StationOverrunRatio
|
Corresponds to the length of the station
annotation from the alignment (that is, on the side of the text).
This value is stored on the alignment when creating this alignment.
It is not updated if the value is modified later in Data Setup. The value used at creation is kept. |
StationEquationBackLabel
|
Corresponds to the back label at first stationing
point creation. This value is stored on the alignment when creating
this alignment. It is not updated if the value is modified later in
Data Setup. The value used at creation is kept. |
StationEquationAheadLabel
|
Corresponds to the ahead label at first stationing
point creation. This value is stored on the alignment when creating
this alignment. It is not updated if the value is modified later in
Data Setup. The value used at creation is kept. |
StationEquationSideOffsetRatio
|
Corresponds to the distance between the equation
texts and the line perpendicular to the alignment. This value is
stored on the alignment when creating this alignment. It is not
updated if the value is modified later in Data Setup. The value used at creation is kept. |
StationEquationTailRatio
|
Corresponds to the length of the station equation
annotation beyond the alignment (that is, the opposite side of the
text). This value is stored on the alignment when creating this
alignment. It is not updated if the value is modified later in Data Setup. The value used at creation is kept. |
StationEquationTailRatio
|
Corresponds to the length of the station equation
annotation beyond the text (that is, on the side of the text). This
value is stored on the alignment when creating this alignment. It is
not updated if the value is modified later in Data Setup. The value used at creation is kept. |
Speed
|
Corresponds to the speed value of the vehicle on
the infrastructure. |
Gradient
|
Corresponds to the longitudinal slope of the
alignment. |
Superelevation
|
Corresponds to the Superelevation value for roads.
|
Cant
|
Corresponds to the Cant value for railways.
|
CrossSection
|
Corresponds to the CrossSection value for ditches,
filling and excavation. The unit is chosen according to the angle
value. |
Alignment Design Rules Definition
- Example of Radius Table
-
<Alignments>
<!-- ********************* -->
<!-- Radius Tables -->
<!-- ********************* -->
<RadiusTables>
<!-- Sample Radius Table by speed values -->
<RadiusTable Name="DefaultRadiusBySpeed">
<HorizontalRadiusTable>
<Radius Speed="40km_h" Minimum="40m"/>
<Radius Speed="60km_h" Minimum="120m"/>
<Radius Speed="80km_h" Minimum="240m"/>
<Radius Speed="100km_h" Minimum="400m"/>
<Radius Speed="120km_h" Minimum="665m"/>
</HorizontalRadiusTable>
<VerticalRadiusTable>
<CrestRadiusTable>
<Radius Speed="40km_h" Minimum="500m"/>
<Radius Speed="60km_h" Minimum="1500m"/>
<Radius Speed="80km_h" Minimum="3000m"/>
<Radius Speed="100km_h" Minimum="6000m"/>
<Radius Speed="120km_h" Minimum="12000m"/>
</CrestRadiusTable>
<SagRadiusTable>
<Radius Speed="40km_h" Minimum="700m"/>
<Radius Speed="60km_h" Minimum="1500m"/>
<Radius Speed="80km_h" Minimum="2200m"/>
<Radius Speed="100km_h" Minimum="3000m"/>
<Radius Speed="120km_h" Minimum="4200m"/>
</SagRadiusTable>
</VerticalRadiusTable>
</RadiusTable>
<!-- Sample Radius Table by category values -->
<RadiusTable Name="DefaultRadiusByCategory">
<HorizontalRadiusTable>
<Radius Category="R60" Minimum="120m"/>
<Radius Category="R80" Minimum="240m"/>
<Radius Category="T80" Minimum="240m"/>
<Radius Category="T100" Minimum="425m"/>
</HorizontalRadiusTable>
<VerticalRadiusTable>
<CrestRadiusTable>
<Radius Category="R60" Minimum="1500m"/>
<Radius Category="R80" Minimum="3000m"/>
<Radius Category="T80" Minimum="3000m"/>
<Radius Category="T100" Minimum="6000m"/>
</CrestRadiusTable>
<SagRadiusTable>
<Radius Category="R60" Minimum="1500m"/>
<Radius Category="R80" Minimum="2200m"/>
<Radius Category="T80" Minimum="2200m"/>
<Radius Category="T100" Minimum="3000m"/>
</SagRadiusTable>
</VerticalRadiusTable>
</RadiusTable>
</RadiusTables>
- Design Rules: Example of Length Table
-
<!-- ********************* -->
<LengthTables>
<!-- Sample Length Table by speed values -->
<LengthTable Name="DefaultLengthBySpeed">
<HorizontalLengthTable>
<LineLengthTable>
<Length Speed="30km_h" Minimum="10m"/>
<Length Speed="50km_h" Minimum="10m"/>
<Length Speed="70km_h" Minimum="10m"/>
<Length Speed="80km_h" Minimum="10m"/>
<Length Speed="90km_h" Minimum="10m"/>
<Length Speed="110km_h" Minimum="10m"/>
<Length Speed="130km_h" Minimum="10m"/>
</LineLengthTable>
<ArcLengthTable>
<Length Speed="30km_h" Minimum="min(45.0m, 0.2695*R+3.2871m)"/>
<Length Speed="50km_h" Minimum="min(45.0m, 0.2695*R+3.2871m)"/>
<Length Speed="70km_h" Minimum="min(45.0m, 0.2695*R+3.2871m)"/>
<Length Speed="80km_h" Minimum="min(45.0m, 0.2695*R+3.2871m)"/>
<Length Speed="90km_h" Minimum="min(45.0m, 0.2695*R+3.2871m)"/>
<Length Speed="110km_h" Minimum="min(45.0m, 0.2695*R+3.2871m)"/>
<Length Speed="130km_h" Minimum="min(45.0m, 0.2695*R+3.2871m)"/>
</ArcLengthTable>
<TransitionLengthTable>
<Length Speed="30km_h" Minimum="10m"/>
<Length Speed="50km_h" Minimum="10m"/>
<Length Speed="70km_h" Minimum="10m"/>
<Length Speed="80km_h" Minimum="10m"/>
<Length Speed="90km_h" Minimum="10m"/>
<Length Speed="110km_h" Minimum="10m"/>
<Length Speed="130km_h" Minimum="10m"/>
</TransitionLengthTable>
</HorizontalLengthTable>
<VerticalLengthTable>
<LineLengthTable>
<Length Speed="30km_h" Minimum="10m"/>
<Length Speed="50km_h" Minimum="10m"/>
<Length Speed="70km_h" Minimum="10m"/>
<Length Speed="80km_h" Minimum="10m"/>
<Length Speed="90km_h" Minimum="10m"/>
<Length Speed="110km_h" Minimum="10m"/>
<Length Speed="130km_h" Minimum="10m"/>
</LineLengthTable>
<TransitionLengthTable>
<Length Speed="30km_h" Minimum="10m"/>
<Length Speed="50km_h" Minimum="10m"/>
<Length Speed="70km_h" Minimum="10m"/>
<Length Speed="80km_h" Minimum="10m"/>
<Length Speed="90km_h" Minimum="10m"/>
<Length Speed="110km_h" Minimum="10m"/>
<Length Speed="130km_h" Minimum="10m"/>
</TransitionLengthTable>
<CrestArcLengthTable>
<Length Speed="30km_h" Minimum="2.5m"/>
<Length Speed="50km_h" Minimum="9m"/>
<Length Speed="70km_h" Minimum="20m"/>
<Length Speed="80km_h" Minimum="30m"/>
<Length Speed="90km_h" Minimum="40m"/>
<Length Speed="110km_h" Minimum="85m"/>
<Length Speed="130km_h" Minimum="130m"/>
</CrestArcLengthTable>
<SagArcLengthTable>
<Length Speed="30km_h" Minimum="2.5m"/>
<Length Speed="50km_h" Minimum="9m"/>
<Length Speed="70km_h" Minimum="20m"/>
<Length Speed="80km_h" Minimum="30m"/>
<Length Speed="90km_h" Minimum="40m"/>
<Length Speed="110km_h" Minimum="85m"/>
<Length Speed="130km_h" Minimum="130m"/>
</SagArcLengthTable>
<CrestParabolaLengthTable>
<Length Speed="30km_h" Minimum="50m"/>
<Length Speed="50km_h" Minimum="50m"/>
<Length Speed="70km_h" Minimum="50m"/>
<Length Speed="80km_h" Minimum="50m"/>
<Length Speed="90km_h" Minimum="50m"/>
<Length Speed="110km_h" Minimum="50m"/>
<Length Speed="130km_h" Minimum="50m"/>
</CrestParabolaLengthTable>
<SagParabolaLengthTable>
<Length Speed="30km_h" Minimum="50m"/>
<Length Speed="50km_h" Minimum="50m"/>
<Length Speed="70km_h" Minimum="50m"/>
<Length Speed="80km_h" Minimum="50m"/>
<Length Speed="90km_h" Minimum="50m"/>
<Length Speed="110km_h" Minimum="50m"/>
<Length Speed="130km_h" Minimum="50m"/>
</SagParabolaLengthTable>
</VerticalLengthTable>
</LengthTable>
</LengthTables>
- Design Rules: Example of Gradient Table
-
<!-- ********************* -->
<!-- Gradient Tables -->
<!-- ********************* -->
<GradientTables>
<!-- Sample Gradient Table by speed values -->
<GradientTable Name="DefaultGradientBySpeed">
<Gradient Speed="40km_h" Maximum="7%"/>
<Gradient Speed="60km_h" Maximum="7%"/>
<Gradient Speed="80km_h" Maximum="6%"/>
<Gradient Speed="100km_h" Maximum="5%"/>
<Gradient Speed="120km_h" Maximum="5%"/>
</GradientTable>
<!-- Sample Gradient Table by category values -->
<GradientTable Name="DefaultGradientByCategory">
<Gradient Category="R60" Maximum="7%"/>
<Gradient Category="R80" Maximum="6%"/>
<Gradient Category="T80" Maximum="6%"/>
<Gradient Category="T100" Maximum="5%"/>
</GradientTable>
</GradientTables>
- Design Rules: Example of Superelevation Table
-
Superelevation attainment methods can be defined in a dedicated Business
Rule called Alignment superelevation rules
available the Building & Civil Resources
resource table. The script below is a stationing script. If no
XML resource file is set in Data Setup, the AlignmentDesign.xml file delivered in
startup\Civil\AlignmentDesign is used. When
you create a new alignment superelevation rule and assign it to a
resource, the resource's input "ThisObject" must be set to
"AECAlignment3D" type.
<SuperelevationTables>
<SuperelevationTable Name="MySuperelevationTable">
<SuperelevationDesignSpeed Speed="20km_h">
<Superelevation Radius="75m" tLength="15m" eRate="2.2%"/>
<Superelevation Radius="51m" tLength="16m" eRate="2.4%"/>
<Superelevation Radius="38m" tLength="18m" eRate="2.6%"/>
<Superelevation Radius="30m" tLength="19m" eRate="2.8%"/>
<Superelevation Radius="24m" tLength="20m" eRate="3%"/>
<Superelevation Radius="20m" tLength="22m" eRate="3.2%"/>
<Superelevation Radius="17m" tLength="23m" eRate="3.4%"/>
<Superelevation Radius="14m" tLength="24m" eRate="3.6%"/>
<Superelevation Radius="12m" tLength="26m" eRate="3.8%"/>
<Superelevation Radius="8m" tLength="27m" eRate="4%"/>
</ SuperelevationDesignSpeed >
</SuperelevationTable>
<!-- Available formula is : "FranceARP" -->
<SuperelevationTable Name="France ARP formula" FormulaId="FranceARP"/>
</SuperelevationTables>
where:
|
|
Speed (input)
|
Corresponds to the design speed
defined in Alignment. The speed value defined in
Alignment must match precisely the attribute value Speed
defined in the XML design rules. Otherwise the matching
table containing rule values is not found. For example:
Ex: if Alignment design speed = 25km/h, no table will be
found since parameter Speed = 20km/h. |
Radius (input)
|
Corresponds to the curve radius as per
Alignment geometries. If the radius of the alignment
curve does not match precisely the attribute value
Radius, for safety reason the closest lower radius value
will always be selected. For example: if curve radius =
28m, select a node the attribute value of which is
Radius =24m. |
tLength (output)
|
Corresponds to the transition length.
|
eRate
|
Corresponds to the superelevation
rate. |
- Design Rules: Example of Horizontal Radius Tables Depending on
Superelevation Rate
-
<RadiusTable Name="MyRadiusTableSpeed">
<HorizontalRadiusTable eRate="2%">>
<Radius Speed="50km_h" Minimum="86m"/>
<Radius Speed="70km_h" Minimum="203m"/>
<Radius Speed="80km_h" Minimum="280m"/>
<Radius Speed="90km_h" Minimum="375m"/>
<Radius Speed="100km_h" Minimum="492m"/>
</HorizontalRadiusTable>
<HorizontalRadiusTable eRate="3%">
<Radius Speed="50km_h" Minimum="78m"/>
<Radius Speed="70km_h" Minimum="186m"/>
<Radius Speed="80km_h" Minimum="240m"/>
<Radius Speed="90km_h" Minimum="322m"/>
<Radius Speed="100km_h" Minimum="415m"/>
</HorizontalRadiusTable>
</RadiusTable>
- Design Rule: Example of Cant Design Table
-
<CantTables>
<CantTable Name="MyCantTable">
<CantDesignSpeed Speed="20km_h">
<Cant radius="90m" Cant="5mm" tLength="5m"/>
</CantDesignSpeed>
</CantTable>
<CantTable Name="MyCantTableByFormula" formulaId="France">
<CantTables>
where:
|
|
Speed (input) |
Designs speed defined in Alignment.
|
Radius (input) |
Corresponds to curve radius as per
Alignment geometries. |
tLength (output) |
Corresponds to transition length.
|
Cant (output) |
Corresponds to the railway cant.
|
formulaId (input) |
Corresponds to identifier to switch
from a formula to another one in a dedicated Business
rule. See next paragraph. |
If no Design Rules are set in Data Setup, default cant tables are provided in
startup\Civil\AlignmentDesignRules\RailwayAlignmentDesignRules_Default.xml
and are used by default.
- Design Rule: an example of Curve Widening Table
-
Under the Rules section of the
Horizontal Alignment Initialization dialog
box, you can select the DefaultWideningFormula or an existing curve
widening table in the drop-list. By default, the DefaultWideningFormula
is set to compute the widening value. Both the formula and the curve
widening tables are defined in the RoadAlignmentDesign.xml file.
In the road context, to set the widening curve value from tables, choose
an existing table, defined in the RoadAlignmentDesignRules.xml file. If
a widening table is selected to compute widening, the Curve Widening and
the Ratio on inner Edge parameters in the Horizontal
Curve dialog box are automatically updated, if the
automatic mode is set as true. By default, the Curve Widening Auto and
Ratio on Inner Edge Auto parameters are set as true (not automatic).
The RoadAlignmentDesignRules.xml file contains all the tables, in
particular a table for curve widening. See the example below. The name
of the table contains the following information: the number of lanes and
the lane width. This XML resource file can be set and modified to define
widening. You can also add another table for curve widening.
If no Design Rules are set in Data Setup, default curve widening tables are provided in
startup\Civil\AlignmentDesignRules\RoadAlignmentDesignRules_Default.xml
and are used by default.
The value of curve widening of the traveled way on a horizontal curve is
the difference between the width needed on the curve and the width used
on a tangent. The value of curve widening is taken from the curve
widening table according to the type of speed (for example 50km/h) and
radius (e.g. 300m). The larger the curve is, the smaller the widening
is.
You can also read or overload the widening table using the
Alignment Point dialog box. When no widening
value is found for the specified speed or radius, a warning icon
appears.
- With a design rule table, you can also compute the transition length, and
not only the widening length, that corresponds to the curve widening. The
Widening transition length can be determined from the following inputs:
Design speed (30km/h, 50 km/h, 80 km/h), radius (for example: 300m) and the
curve widening table name (lane distribution and width).
-
<CurveWideningTables>
<CurveWideningTable Name="2 Lanes - 7.2m">
<WideningDesignSpeed speed="30km_h">
<Widening radius="3000m" widening="0.1m" tLength="10m"/>
<Widening radius="2500m" widening="0.2m" tLength="10m"/>
<Widening radius="2000m" widening="0.2m" tLength="10m"/>
<Widening radius="1500m" widening="0.2m" tLength="30m"/>
<Widening radius="1000m" widening="0.3m" tLength="30m"/>
<Widening radius="900m" widening="0.4m" tLength="30m"/>
<Widening radius="800m" widening="0.4m" tLength="10m"/>
<Widening radius="700m" widening="0.5m" tLength="10m"/>
<Widening radius="600m" widening="0.5m" tLength="10m"/>
<Widening radius="500m" widening="0.6m" tLength="10m"/>
<Widening radius="400m" widening="0.7m" tLength="15m"/>
<Widening radius="300m" widening="1.0m" tLength="15m"/>
<Widening radius="250m" widening="1.1m" tLength="20m"/>
<Widening radius="200m" widening="1.4m" tLength="25m"/>
<Widening radius="150m" widening="1.8m" tLength="30m"/>
<Widening radius="140m" widening="1.9m" tLength="30m"/>
<Widening radius="130m" widening="2.1m" tLength="35m"/>
<Widening radius="120m" widening="2.2m" tLength="35m"/>
<Widening radius="110m" widening="2.4m" tLength="40m"/>
<Widening radius="100m" widening="2.7m" tLength="45m"/>
<Widening radius="90m" widening="3.0m" tLength="45m"/>
<Widening radius="80m" widening="3.3m" tLength="50m"/>
<Widening radius="70m" widening="3.8m" tLength="60m"/>
</WideningDesignSpeed>
<WideningDesignSpeed speed="50km_h">
…
</WideningDesignSpeed>
</CurveWideningTable >
</CurveWideningTables>
- Design Rule : Example of single or dual spiral configuration (reverse turn)
-
When you create two spirals to join two arcs traveled in opposite
direction, you obtain the following configuration:
Tangent-Spiral-Circle-Spiral-Spiral-Circle-Spiral-Tangent.
Single or Dual spiral configuration can be specified in the xml file of
Data Setup named RoadAlignmentDesign for road and RailwayAlignmentDesign for
railway.
<Profile name="Road" iconLocalPath="I_CegRoad108x144.png">
<Design>
<DefaultValues>
<TraveledWayType value="2"/>
<!--1: Planar; 2: Crowned-->
<RotationMode value="1"/>
<!--1: CenterLine; 1: InnerEdge; 2: OuterEdge; 3: Right; 4: Left-->
<DesignVehicle value="SU-9"/>
<DesignSpeed value="80km_h"/>
<NormalSlope value="2%_angle"/>
…
<!-- Vertical Curve Type initialisation to create Arc(1) or Parabola(2) -->
<VerticalCurveType value="2"/>
<!—Reverse turn intermediate spiral configuration Single (1) or Dual(2) -->
<ReverseTurnIntermediateSpiral value="1/>
</DefaultValues>
</Design>
- Design Rule : Example of single or dual spiral configuration (compound
turn)
-
When you create a compound turn with dual PI and a spiral to join two
arcs traveled in the same direction, you obtain the following
configuration: Tangent-Spiral-Circle-Spiral-Circle-Spiral-Tangent.
Single or Dual spiral configuration can be specified in the xml file of
Data Setup named RoadAlignmentDesign for road and RailwayAlignmentDesign for
railway.
<Profile name="Road" iconLocalPath="I_CegRoad108x144.png">
<Design>
<DefaultValues>
…
<!—Compound turn PI configuration Single (1) or Dual(2) -->
<CompoundTurnPI value="1/>
…
</DefaultValues>
</Design>
- Design Rule : Example of Points Customization
-
The default values for point customization are stored as follows:
<PointTypes>
<!--
label for text1 and text2
%s : stationning (exemple: PO+189.456)
%r : radius (radius of the corner, in local distance unit)
%d : distance from start point (in local distance unit)
%i : point index (only for PI and VI index of the point, order of alignment)
starti: start of the index (exemple 1), stepi: step of the index
%v : velocity (exemple 70 km/h)
%c : category (Catefory field content on profile specification)
%t : type (exemple : Tunnel / Bridge ...)
%e : elevation (only on vertical alignment : ###,## in local distance unit)
%w : width of road
pointType :
"CROSS", "PLUS", "CONCENTRIC", "COINCIDENT", "FULLCIRCLE", "FULLSQUARE",
"STAR", "DOT", "SMALLDOT"
Show :
0 : hide text + point
1 : display text + point
Output :
0 : don't output the point
1 : output the point
-->
<KeyPoint>
<Horizontal>
<!--
PI : Point of Intersection
TS : Tangent to Spiral
TC : Tangent to Curve
SC : Spiral to Curve
CM : Curve to middle
CC : Curve to curve
SS : Spiral to Spiral
CS : Spiral to Curve
CT : Curve to Tangent
ST : Spiral to Tangent
CE : Curve extremum
TT : Tangent to Tangent
-->
<PI text1="PI%i" text2="" color="255 0 0" pointType="CONCENTRIC" start_index="1" step_index="1" output="false"/>
<TS text1="TS = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<TC text1="TC = %s" text2="R = %r" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<SC text1="SC = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CM text1="CM = %s" text2="R = %r" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CC text1="CC = %s" text2="R = %r" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<SS text1="SS = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CS text1="CS = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CT text1="CT = %s" text2="R = %r" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<ST text1="ST = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CE text1="CE = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<TT text1="TT = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
</Horizontal>
<Vertical>
<!--
VPI : Vertical Point of Intersection
GS : Gradient to Spiral
SC : Spiral to Curve
GC : Gradient to Curve
CE : Curve extremum
CC : Curve to curve
CG : Curve to Gradient
CS : Curve to Spiral
SG : Spiral to Gradient
-->
<VPI text1="VPI%i" text2="" color="255 0 0" pointType="CONCENTRIC" start_index="1" step_index ="1" output="false"/>
<GS text1="GS = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<SC text1="SC = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<GC text1="GC = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CE text1="CE = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CC text1="CC = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CG text1="CG = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<CS text1="CS = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<SG text1="SG = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
<GG text1="GG = %s" text2="" color="0 0 255" pointType="FULLSQUARE" output="false"/>
</Vertical>
</KeyPoint>
<EventPoint>
<!--
BA : Begin of Alignement
EA : End of Alignement
SE : Station equation : #back# / #head# value override for internationalized value
VE : Change of Speed
TY : Change of underlying infrastructure type (e.g. Start of bridge)
WI : Change of width
OT : Other
-->
<BA text1="%s" text2="" color="60 190 240" pointType="FULLSQUARE" output="true"/>
<EA text1="%s" text2="" color="0 0 255" pointType="FULLSQUARE" output="true"/>
<SE text1="#back# %s" text2="#ahead# %s" color="0 0 255" pointType="FULLSQUARE" output="true"/>
<VE text1="%v" text2="" color="127 0 255" pointType="FULLSQUARE" output="false"/>
<TY text1="%t" text2="" color="127 0 255" pointType="FULLSQUARE" output="true"/>
<WI text1="%w" text2="" color="127 0 255" pointType="FULLSQUARE" output="false"/>
<OT text1="%s" text2="" color="127 0 255" pointType="FULLSQUARE" output="false"/>
</EventPoint>
<SurveyPoint>
<!-- SP : StationPoint -->
<SP text1="%s" text2="" color="9 82 40" pointType="STAR" output="false"/>
<!-- GP : GeoPoint -->
<GP text1="%s" text2="" color="27 157 44" pointType="STAR" output="false"/>
</SurveyPoint>
</PointTypes>
Concrete Design Customization
- Example of Concrete Design Customization
-
<ConcreteDesign>
<Numberings>
<!-- Rounding values are used in numbering and report -->
<RoundingValues>
<!-- Use Rounding -->
<UseRounding value="true"/>
<!-- true: calculated lengths are rounded with following parameters -->
<!-- false: calculated lengths keep their exact values -->
<!-- Dimension Rounding Direction -->
<DimensionRoundingDirection value="nearest"/>
<!-- Acceptable values are up, down and nearest"-->
<!-- Total Length Rounding Direction -->
<TotalLengthRoundingDirection value="nearest"/>
<!-- Acceptable values are up, down and nearest"-->
<DimensionRoundingAccuracy value="5mm"/>
<!-- Can be expressed in any length unit e.g. "1 feet"-->
<TotalLengthRoundingAccuracy value="25mm"/>
<!-- Can be expressed in any length unit e.g. "1 feet"-->
</RoundingValues>
<!-- Numbering values are used in numbering -->
<NumberingValues>
<!-- Adaptive Layers -->
<AdaptiveLayersIndividually value="false"/>
<!-- true: Number bars individually else Number bars as a whole -->
<!--Prefix For Coupler-->
<PrefixForCoupler value="(C)"/>
<!--Prefix added to the layer bar mark symbolizing the coupler relation-->
</NumberingValues>
<!-- Numbering display -->
<Display>
<!-- Separator used for display between Group and Number -->
<Separator value="."/>
<AdaptiveLayers>
<!-- Option to group similar bars if true, no group otherwise -->
<GroupSimilarBars value="true"/>
<!-- Separator used for display between Start and End values -->
<Separator value="~"/>
</AdaptiveLayers>
</Display>
</Numberings>
</ConcreteDesign>
Road Attainment Methods
/* ========================================================================== */
/* AlignmentDesignRule.CATRule */
/* */
/* Sample file to customize alignment superelevation attainment methods. */
/* User can customize this file for each project. */
/* */
/* ========================================================================== */
/* Defines formulae for the various transition lengths */
/* for attaining superelevation */
/* Based on the following variables */
/* {e} - full superelevation rate for the curve from the tables (%) */
/* {c} - normal crown slope (%, positive) */
/* {s} - normal shoulder slope (%, positive) */
/* {t} - the transition length from the tables */
/* {w} - greatest width from the pivot point to edge of traveled way */
/* {l} - length of the spiral (found in alignment) */
/* {p} - fractional part of transition length achieved before BC point */
/* {q} - Rate of increase of centripetal acceleration traveling */
/* along curve at constant speed */
/* {v} - speed */
/* {r} - radius */
/* ========================================================================== */
/* Defines the following transition lengths (where approriate) */
/* LCtoFS - Level Crown to Full Super (runoff) */
/* LCtoBC - Level Crown to Beginning of Curve */
/* NCtoFS - Normal Crown to Full Super (instead of LCtoFS on planar roads */
/* NCtoBC - Normal Crown to Begin Curve (instead of LCtoBC on planar roads */
/* NCtoLC - Normal Crown to Level Crown (runout) */
/* LCtoRC - Level Crown to Reverse Crown */
/* NStoNC - Normal Shoulder to Normal Crown */
/* ========================================================================== */
/* Get inputs */
Let e(real)
Let c(real)
Let s(real)
Let t(real)
Let w(real)
Let l(real)
Let p(real)
Let q(real)
Let v(real)
Let r(real)
Let LaneType(integer)
e = Parameters.GetAttributeReal("eRate")
c = ThisObject.GetAttributeReal("Angle")
t = Parameters.GetAttributeReal("tLength")
l = Parameters.GetAttributeReal("sLength")
p = ThisObject.GetAttributeReal("TRate")
v = Parameters.GetAttributeReal("Speed")
r = Parameters.GetAttributeReal("Radius")
LaneType = ThisObject.GetAttributeInteger("LaneType")
/* Compute outputs */
Let LCtoFS(real)
Let LCtoBC(real)
Let NCtoFS(real)
Let NCtoBC(real)
Let NCtoLC(real)
Let LCtoRC(real)
Let NStoNC(real)
if(LaneType==0)
{
NCtoFS=t-t*c/e
NCtoBC=t*(p-c/e)
LCtoFS=t
LCtoBC=p*t
NCtoLC=t*c/e
/* Write outputs */
Parameters.SetAttributeReal("NCtoFS", NCtoFS)
Parameters.SetAttributeReal("NCtoBC", NCtoBC)
Parameters.SetAttributeReal("LCtoFS", LCtoFS)
Parameters.SetAttributeReal("LCtoBC", LCtoBC)
Parameters.SetAttributeReal("NCtoLC", NCtoLC)
}
else if(LaneType==1)
{
LCtoFS=t
LCtoBC=p*t
NCtoLC=t*c/e
LCtoRC=t*c/e
NStoNC=t*(s-c)/e
/* Write outputs */
Parameters.SetAttributeReal("LCtoFS", LCtoFS)
Parameters.SetAttributeReal("LCtoBC", LCtoBC)
Parameters.SetAttributeReal("NCtoLC", NCtoLC)
Parameters.SetAttributeReal("LCtoRC", LCtoRC)
Parameters.SetAttributeReal("NStoNC", NStoNC)
}
Road Superelevation and Transition Length Rules
You can define a formula calculating the superelevation of a road and the
superelevation transition length thanks to a Business Rule. To compute
superelevation and transition length, the following parameters are used as input:
- Speed
- Radius
- Rotation mode
- Normal crown/normal slope
- Width and lane type
Defining a superelevation and transition length from design rule tables is also
possible.
/* ================================================================================ */
/* RoadSuperelevationAndTransitionLengthRules_Sample.CATRule */
/* */
/* Sample file to calculate superelevation and transition length. */
/* User can customize this file for each project. */
/* */
/* ============================================================================= */
/* Defines formulas for Superelevation and transition length. */
/* Based on the following variables */
/* {FormulaId} - formula identifier given by design rules: */
/* "FranceARP" */
/* "General condition - Max 10%" */
/* "General condition - Max 8%" */
/* "General condition - Max 6%" */
/* "Snow condition" */
/* {speed} - current design speed (m/s) */
/* {radius} - Curve radius from geometry (m) */
/* {category} - Road Category (R60, R80, ...) */
/* {nbLanes} - Number of Road lanes */
/* ============================================================================= */
/* Defines superelevation and transition length values */
/* superelevation - Applied superelevation for the curve (%) */
/* tLengthIn - In Transition length (m) */
/* tLengthOut - Out Transition length (m) */
/* tLengthInMin - Minimum In Transition length (m) */
/* tLengthInMax - Maximum In Transition length (m) */
/* tLengthOutMin - Minimum Out Transition length (m) */
/* tLengthOutMax - Maximum Out Transition length (m)
/* ============================================================================= */
/* Defines superelevation and transition length values */
/* superelevation - Applied superelevation for the curve (%) */
/* tLength - Transition length (m) */
/* ==============================================================================*/
/* Parameters */
Let myCurve (AECHorizontalArc)
Let HA (AECAlignment2DHorizontal)
Let rotationMode (TraveledWayRotationModeEnum)
Let FormulaId (String)
Let category (String)
Let speed (speed)
Let radius (Length)
Let BIn (Length)
Let BOut (Length)
Let BInLeft (Length)
Let BInRight (Length)
Let BOutLeft (Length)
Let BOutRight (Length)
Let Direction (Angle)
Let NC (Angle)
Let delta (Angle)
Let LaneType (integer)
Let nbLanes (integer)
Let P (real)
/* Outputs */
Let superelevation (real)
Let tLength (Length)
Let tLengthIn (Length)
Let tLengthOut (Length)
Let tLengthInMin (Length)
Let tLengthInMax (Length)
Let tLengthOutMin (Length)
Let tLengthOutMax (Length)
/* Get Inputs */
FormulaId = Parameters.GetAttributeString("FormulaId")
Set myCurve = ThisObject
/* Compute outputs */
if(NULL<>myCurve)
{
Let centerH(Length)
Let centerV(Length)
Let ArcRadius(Length)
Arc->GetCenterRadius(centerH, centerV, ArcRadius)
Set radius=ArcRadius
Set speed = Arc->GetSpeed()
Set category = Arc->GetCategory()
Set nbLanes = Arc->GetNumberOfLanes()
if (FormulaId=="FranceARP")
{
Let Rnd(real)
Let Rdm(real)
Let Rm(real)
if (category=="R60")
{
Rnd=600
Rdm=450
Rm=120
if (radius>=Rdm)
{
superelevation = 0.025
} else if (radius>=Rm)
{
superelevation = ((736.4/radius) + 0.86)/100.0
} else
{
superelevation=0.07
}
} else
{
Rnd=900
Rdm=650
Rm=240
if (radius>=Rdm)
{
superelevation = 0.025
} else if (radius>=Rm)
{
superelevation = ((1712/radius) - 0.13)/100.0
} else
{
superelevation = 0.07
}
}
/** Transition length **/
if (nbLanes<=2)
{
tLength=6*(radius**0.4)
tLength=min(tLength,67)
} else if(nbLanes==3)
{
tLength=9*(radius**0.4)
tLength=min(tLength,100)
} else
{
tLength=12*(radius**0.4)
tLength=min(tLength,133)
}
}
}
superelevation=max(superelevation,0.02)
tLength=max(tLength,15)
superelevation=max(superelevation,0.02)
tLengthInMax = -1m
tLengthInMin = -1m
tLengthOutMax = -1m
tLengthOutMin = -1m
/* Write outputs */
Parameters.SetAttributeReal("Superelevation", superelevation)
Parameters.SetAttributeReal("tLengthIn", tLengthIn)
Parameters.SetAttributeReal("tLengthOut", tLengthOut)
Parameters.SetAttributeReal("tLengthInMax", tLengthInMax)
Parameters.SetAttributeReal("tLengthInMin", tLengthInMin)
Parameters.SetAttributeReal("tLengthOutMax", tLengthOutMax)
Parameters.SetAttributeReal("tLengthOutMin", tLengthOutMin)
- Support of National Design Rules
- Country-specific design rules for superelevation and transition length are supported thanks
to additional formulas in the business rules and resources tables. You can
also define two outputs in formulas: the In/Out transition lengths, with
minimum/maximum values.
Road Widening and Transition Length Rules
You can define a formula calculating the widening of a road and the widening
transition length thanks to a Business Rule. To compute widening and transition
length, the following parameters are used as input:
- Speed
- Radius
- Lane Distribution
The transition length is defined in the superelevation attainment methods, by
comparing superelevation transition length and widening transition length.
Defining a widening and transition length from design rule tables is also
possible.
- Compute road widening and the transition length corresponding to the
widening: Example of Business Rule
-
/* ================================================================================*/
/* RoadWideningAndTransitionLengthRules_Sample.CATRule */
/* */
/* Sample file to calculate Widening and transition length. */
/* User can customize this file for each project. */
/* */
/* ================================================================================*/
/* Defines formulas for Widening and transition length. */
/* Based on the following variables */
/* {FormulaId} - formula identifier given by design rules: */
/* - "DefaultWideningFormula" */
/* {speed} - current design speed (m/s) */
/* {radius} - Curve radius from geometry (m) */
/* {nbLanes} - Number of Road lanes */
/* {Direction} - Turn rotation direction */
/* - "Left Turn" */
/* - "Right Turn" */
/* ================================================================================*/
/* Defines Widening and transition length values */
/* Widening - Applied Widening for the curve (m) */
/* Ratio - Widening ratio on inner edge (%)*/
/* tLengthIn - In Transition length (m) */
/* tLengthOut - Out Transition length (m) */
/* tLengthInMin - Minimum In Transition length (m) */
/* tLengthInMax - Maximum In Transition length (m) */
/* tLengthOutMin - Minimum Out Transition length (m) */
/* tLengthOutMax - Maximum Out Transition length (m) */
/* ================================================================================*/
/* Parameters */
Let myCurve (AECHorizontalArc)
Let FormulaId (String)
Let Direction (String)
Let bTurnRight (boolean)
Let radius (Length)
Let speed (speed)
/* Outputs */
Let Widening (Length)
Let Ratio (RATIO)
Let tLength (Length)
Let tLengthIn (Length)
Let tLengthOut (Length)
Let tLengthInMin (Length)
Let tLengthInMax (Length)
Let tLengthOutMin (Length)
Let tLengthOutMax (Length)
/* Get Inputs */
FormulaId = Parameters.GetAttributeString("FormulaId")
Set myCurve = ThisObject
/* Compute outputs */
if (NULL <> myCurve)
{
Let centerH (Length)
Let centerV (Length)
myCurve->GetCenterRadius(centerH, centerV, radius)
Set speed = myCurve->GetSpeed()
Set Direction = myCurve->GetDirection()
If (Direction == "Right Turn") bTurnRight = true
if (FormulaId == "DefaultWideningFormula")
{
Let ListLeftLane (List)
Let ListCenterLane (List)
Let ListRightLane (List)
myCurve->GetTraveledWayLaneDistribution(ListLeftLane, ListCenterLane, ListRightLane)
Let eTravelingDir (LaneDirectionEnum)
Let DesignVehicleList (list)
Let WidthInCurve (Length)
Let LeftWidthInCurve (Length)
Let CenterWidthInCurve (Length)
Let RightWidthInCurve (Length)
Let LeftWidthInTangent (Length)
Let CenterWidthInTangent (Length)
Let RightWidthInTangent (Length)
Let ii (Integer)
Let nbLanes (Integer)
ii = 1
nbLanes = ListLeftLane.Size()
for ii while ii <= nbLanes
{
Let LeftLane (AECLaneType)
Let C (Length)
Let WidthOfLane (Length)
Let bIsMostOutside (boolean)
Let nbVehicles (integer)
Let jj (Integer)
jj=1
bIsMostOutside = false
LeftLane = ListLeftLane->GetItem(ii)
C = LeftLane.GetLateralClearance()
eTravelingDir = LeftLane.GetTravelingDirection()
if ("LaneDirection_None" == eTravelingDir) continue
DesignVehicleList = LeftLane.GetDesignVehicles()
if (true == bTurnRight AND nbLanes == ii) bIsMostOutside = true
nbVehicles=DesignVehicleList.Size()
for jj while jj <= nbVehicles
{
Let DesignVehicle (AECVehicleType)
Let U (Length)
Let FA (Length)
Let Wc (Length)
DesignVehicle = DesignVehicleList->GetItem(jj)
U = DesignVehicle.GetSweptPathWidth(radius*1.e3)
if (false == bIsMostOutside)
FA = DesignVehicle.GetFrontOverhangWidth(radius*1.e3)
Wc = U + FA + C
WidthOfLane = max(Wc,WidthOfLane)
}
LeftWidthInCurve = LeftWidthInCurve + WidthOfLane
LeftWidthInTangent = LeftWidthInTangent + LeftLane.GetWidth()
}
/** Compute ratio **/
Let LeftWc (Length)
Let RightWc (Length)
LeftWc = LeftWidthInCurve - LeftWidthInTangent + (CenterWidthInCurve - CenterWidthInTangent ) / 2.
RightWc = RightWidthInCurve - RightWidthInTangent + (CenterWidthInCurve - CenterWidthInTangent ) / 2.
if((LeftWc + RightWc) > 0)
{
if (true == bTurnRight)
Ratio = RightWc / (LeftWc + RightWc)
else
Ratio = LeftWc / (LeftWc + RightWc)
}
else
exit
/** Widening value **/
// Extra width allowance Z
Let Z (real)
Z = 0.1*(3.6*speed) / sqrt(radius)*1.e3
Widening = LeftWidthInCurve + RightWidthInCurve + CenterWidthInCurve + Z - LeftWidthInTangent - RightWidthInTangent - CenterWidthInTangent
/** Transition length **/
Widening = Widening * 1.e-3
tLengthIn = 15. * Widening
tLengthOut = 15. * Widening
tLengthIn = max(tLengthIn, 10m)
tLengthOut = max(tLengthOut, 10m)
}
}
tLengthInMax = -1.m
tLengthInMin = 10.m
tLengthOutMax = -1.m
tLengthOutMin = 10.m
/* Write outputs */
Parameters.SetAttributeDimension("Widening", Widening, "LENGTH")
Parameters.SetAttributeDimension ("Ratio", Ratio, "RATIO")
Parameters.SetAttributeDimension("tLengthIn", tLengthIn, "LENGTH")
Parameters.SetAttributeDimension("tLengthOut", tLengthOut, "LENGTH")
Parameters.SetAttributeDimension("tLengthInMax", tLengthInMax, "LENGTH")
Parameters.SetAttributeDimension("tLengthInMin", tLengthInMin, "LENGTH")
Parameters.SetAttributeDimension("tLengthOutMax", tLengthOutMax, "LENGTH")
Parameters.SetAttributeDimension("tLengthOutMin", tLengthOutMin, "LENGTH")
- Design Rules: Example of Widening transition length
- With a design rule table, you can compute the transition length that corresponds to the
curve widening. The Widening transition length can be determined from the
following inputs: Design speed (30km/h, 50 km/h, 80 km/h), radius (for
example: 300m) and the table name of the curve widening (lane distribution
and width).
-
<CurveWideningTables>
<CurveWideningTable Name="2 Lanes - 7.2m">
<WideningDesignSpeed speed="30km_h">
<Widening radius="3000m" widening="0.1m" tLength="10m"/>
<Widening radius="2500m" widening="0.2m" tLength="10m"/>
<Widening radius="2000m" widening="0.2m" tLength="10m"/>
<Widening radius="1500m" widening="0.2m" tLength="30m"/>
<Widening radius="1000m" widening="0.3m" tLength="30m"/>
<Widening radius="900m" widening="0.4m" tLength="30m"/>
<Widening radius="800m" widening="0.4m" tLength="10m"/>
<Widening radius="700m" widening="0.5m" tLength="10m"/>
<Widening radius="600m" widening="0.5m" tLength="10m"/>
<Widening radius="500m" widening="0.6m" tLength="10m"/>
<Widening radius="400m" widening="0.7m" tLength="15m"/>
<Widening radius="300m" widening="1.0m" tLength="15m"/>
<Widening radius="250m" widening="1.1m" tLength="20m"/>
<Widening radius="200m" widening="1.4m" tLength="25m"/>
<Widening radius="150m" widening="1.8m" tLength="30m"/>
<Widening radius="140m" widening="1.9m" tLength="30m"/>
<Widening radius="130m" widening="2.1m" tLength="35m"/>
<Widening radius="120m" widening="2.2m" tLength="35m"/>
<Widening radius="110m" widening="2.4m" tLength="40m"/>
<Widening radius="100m" widening="2.7m" tLength="45m"/>
<Widening radius="90m" widening="3.0m" tLength="45m"/>
<Widening radius="80m" widening="3.3m" tLength="50m"/>
<Widening radius="70m" widening="3.8m" tLength="60m"/>
</WideningDesignSpeed>
<WideningDesignSpeed speed="50km_h">
…
</WideningDesignSpeed>
</CurveWideningTable >
</CurveWideningTables>
Subgrade Surface Width and Transition Length
You can define a table or formula calculating the width and transition length of a
subgrade surface thanks to Business Rules. To compute width and transition length,
the following parameters are used as input:
- Design speed
- Railway track type (Mono or Dual)
- The ballast availability
A default transition length is provided before and after the widening of the
surface.
win_b64\resources\knowledge\scripts\SubgradeSurfaceWidthAndTransitionLengthRules_Sample.CATRule
/* ================================================================================*/
/* SubgradeSurfaceWidthAndTransitionLengthRules_Sample.CATRule */
/* */
/* Sample file to calculate width and transition length. */
/* User can customize this file for each project. */
/* */
/* ================================================================================ */
/* Defines formulas for Widening and transition length. */
/* Based on the following variables */
/* {FormulaId} - formula identifier given by design rules: */
/* - "DefaultSubgradeSurfaceWidthFormula" */
/* {mySection} - The Current section */
/* {my3DCurve} - The 3D Alignment Curve */
/* {Speed} - The section Speed (m/s) */
/* {Distance} - The section Curvilinear distance (m) */
/* {IsBallast} - The section Ballast availability (True/False)*/
/* {trackType} - The Subgrade Surface Track Type (Mono/Dual) */
/* ================================================================================ */
/* Defines Width and transition length values */
/* LeftWidth - Applied width for the section (m) */
/* RightWidth - Applied width for the section (m) */
/* tLength - Transition length (m) */
/* tLengthMin - Minimum Transition length (m) */
/* tLengthMax - Maximum Transition length (m) */
/* ================================================================================ */
/* Get Inputs */
Let mySection (AECSubgradeSection)
Let FormulaId (String)
Set mySection = ThisObject
FormulaId = Parameters.GetAttributeString("FormulaId")
/* Parameters */
Let my3DCurve (AEC3DAlignmentCurve)
Let trackType (RailTrackTypeEnum)
Let isBallast (boolean)
Let Speed (Speed)
Let Distance (LENGTH)
/* Outputs */
Let Width (Length)
Let tLength (Length)
Let tLengthMax (Length)
Let tLengthMin (Length)
/* Compute outputs */
if (NULL <> mySection)
{
Distance = mySection->GetDistance()
my3DCurve = mySection->Get3DAlignmentCurve()
if (NULL <> my3DCurve)
{
Speed = my3DCurve->GetSpeed(Distance)
}
isBallast = mySection->GetIsBallast()
trackType = mySection->GetTrackType()
if (FormulaId == "DefaultSubgradeSurfaceWidthFormula")
{
if (isBallast == true)
{
If (trackType == "RailTrackType_Mono")
{
Width = 8.8m
}
else if (trackType == "RailTrackType_Dual")
{
if (Speed >= 350km_h) Width = 13.8m
else if (Speed >= 300km_h) Width = 13.6m
else Width = 13.4m
}
}
else
{
If (trackType == "RailTrackType_Mono")
{
Width = 8.6m
}
else if (trackType == "RailTrackType_Dual")
{
if (Speed >= 350km_h) Width = 13.6m
else if (Speed >= 300km_h) Width = 13.4m
else Width = 13.2m
}
}
/** Transition length **/
tLength = 5.m
}
}
tLengthMax = -1.m
tLengthMin = 5.m
/* Write outputs */
Parameters.SetAttributeDimension("LeftWidth", Width/2., "LENGTH")
Parameters.SetAttributeDimension("RightWidth", Width/2., "LENGTH")
Parameters.SetAttributeDimension("tLength", tLength, "LENGTH")
Parameters.SetAttributeDimension("tLengthMax", tLengthMax, "LENGTH")
Parameters.SetAttributeDimension("tLengthMin", tLengthMin, "LENGTH")
Subgrade Surface Curve Widening and Transition Length
You can define a table or formula calculating the curve widening and transition
length of a subgrade surface thanks to Business Rules. To compute widening and
transition length, the following parameters are used as input:
- Design Speed
- Curve Radius
A default transition length corresponding to the In/Out spiral length is provided
before and after the widening of the surface.
win_b64\resources\knowledge\scripts\SubgradeSurfaceCurveWideningAndTransitionLengthRules_Sample.CATRule
/* ================================================================================ */
/* SubgradeSurfaceCurveWideningAndTransitionLengthRules_Sample.CATRule */
/* */
/* Sample file to calculate Subgrade Surface Curve widening and transition length. */
/* User can customize this file for each project. */
/* */
/* ================================================================================ */
/* Defines formulas for Widening and transition length. */
/* Based on the following variables */
/* {FormulaId} - formula identifier given by design rules: */
/* - "DefaultSubgradeSurfaceCurveWideningFormula" */
/* {my3DCurve} - The 3D Alignment Curve */
/* {Speed} - The Curve In Speed (m/s)*/
/* {Distance} - The Curve In Curvilinear distance (m) */
/* {Radius} - The Curve Radius (m) */
/* {InSpiralLength} - The In Spiral Length (m) */
/* {OutSpiralLength} - The Out Spiral Length (m) */
/* ================================================================================ */
/* Defines Widening and transition length values */
/* Widening - Applied Widening for the curve (m) */
/* Ratio - Widening ratio on inner edge (%) */
/* InTransitionLength - In transition length (m) */
/* InTransitionLengthMin - Minimum In Transition length (m) */
/* InTransitionLengthMax - Maximum In Transition length (m) */
/* OutTransitionLength - Out transition length (m) */
/* OutTransitionLengthMin - Minimum Out Transition length (m) */
/* OutTransitionLengthMax - Maximum Out Transition length (m) */
/* ================================================================================ */
/* Get Inputs */
Let my3DCurve (AEC3DAlignmentCurve)
Let FormulaId (String)
Let Distance (Length)
Let InSpiralLength (Length)
Let OutSpiralLength (Length)
Set my3DCurve = ThisObject
FormulaId = Parameters.GetAttributeString("FormulaId")
Distance = Parameters.GetAttributeReal("Distance")
InSpiralLength = Parameters.GetAttributeReal("InSpiralLength")
OutSpiralLength = Parameters.GetAttributeReal("OutSpiralLength")
/* Parameters */
Let Radius (Length)
Let Speed (Speed)
/* Outputs */
Let Widening (Length)
Let Ratio (RATIO)
Let InTransitionLength (Length)
Let InTransitionLengthMin (Length)
Let InTransitionLengthMax (Length)
Let OutTransitionLength (Length)
Let OutTransitionLengthMin (Length)
Let OutTransitionLengthMax (Length)
/* Compute outputs */
if (NULL <> my3DCurve)
{
Speed = my3DCurve->GetSpeed(Distance)
Radius = my3DCurve->GetRadius(Distance)
if (FormulaId == "DefaultSubgradeSurfaceCurveWideningFormula")
{
if (Speed == 120km_h)
{
if (Radius >= 5000m) Widening = 0.1m
else if (Radius < 5000m AND Radius >= 1600m) Widening = 0.2m
else if (Radius < 1600m AND Radius >= 1200m) Widening = 0.3m
else if (Radius < 1600m) Widening = 0.4m
}
else if (Speed == 160km_h)
{
if (Radius >= 10000m) Widening = 0.1m
else if (Radius < 10000m AND Radius >= 3000m) Widening = 0.2m
else if (Radius < 3000m AND Radius >= 2000m) Widening = 0.3m
else if (Radius < 2000m) Widening = 0.4m
}
else if (Speed == 200km_h)
{
if (Radius >= 6000m) Widening = 0.2m
else if (Radius < 6000m AND Radius >= 3500m) Widening = 0.3m
else if (Radius < 3500m) Widening = 0.4m
}
else if (Speed == 300km_h)
{
if (Radius >= 14000m) Widening = 0.2m
else if (Radius < 14000m AND Radius >= 9000m) Widening = 0.3m
else if (Radius < 9000m AND Radius >= 7000m) Widening = 0.4m
else if (Radius < 7000m AND Radius >= 5000m) Widening = 0.5m
else if (Radius < 5000m) Widening = 0.6m
}
else if (Speed == 350km_h)
{
if (Radius >= 12000m) Widening = 0.3m
else if (Radius < 12000m AND Radius >= 9000m) Widening = 0.4m
else if (Radius < 9000m AND Radius >= 6000m) Widening = 0.5m
else if (Radius < 6000m) Widening = 0.6m
}
/** Ratio on Enner Edge **/
Ratio = 0%
/** Transition length **/
if (InSpiralLength > 0)
{
InTransitionLength = InSpiralLength
}
if (OutSpiralLength > 0)
{
OutTransitionLength = OutSpiralLength
}
InTransitionLength = max(InTransitionLength, 5.m)
OutTransitionLength = max(OutTransitionLength, 5.m)
}
}
InTransitionLengthMax = -1.m
InTransitionLengthMin = 5.m
OutTransitionLengthMax = -1.m
OutTransitionLengthMin = 5.m
/* Write outputs */
Parameters.SetAttributeDimension("Widening", Widening, "LENGTH")
Parameters.SetAttributeDimension ("Ratio", Ratio, "RATIO")
Parameters.SetAttributeDimension("InTransitionLength", InTransitionLength, "LENGTH")
Parameters.SetAttributeDimension("InTransitionLengthMax", InTransitionLengthMax, "LENGTH")
Parameters.SetAttributeDimension("InTransitionLengthMin", InTransitionLengthMin, "LENGTH")
Parameters.SetAttributeDimension("OutTransitionLength", OutTransitionLength, "LENGTH")
Parameters.SetAttributeDimension("OutTransitionLengthMax", OutTransitionLengthMax, "LENGTH")
Parameters.SetAttributeDimension("OutTransitionLengthMin", OutTransitionLengthMin, "LENGTH")
Railway Attainment Methods
/* ========================================================================== */
/* RailwayAttainmentMethods.CATRule */
/* */
/* Sample file to customize Railway attainment methods. */
/* User can customize this file for each project. */
/* */
/* ========================================================================== */
/* Defines formulae for the various transition lengths */
/* for attaining Cant */
/* Based on the following variables */
/* {l} - spiral length from geometry */
/* {t} - transition length from table */
/* {m} - maximum cant value on Tangent */
/* {a} - applied cant for the curve */
/* {p} - fractional part of transition length achieved before curve point */
/* ========================================================================== */
/* Defines the following transition lengths (where approriate) */
/* LRtoFC - Level Rail to Full Cant */
/* LRtoBC - Level Rail to Beginning of Curve */
/* ========================================================================== */
/* Get inputs */Let l(real)Let t(real)Let m(real)Let a(real)Let p(real)l = Parameters.GetAttributeReal("sLength")t =
Parameters.GetAttributeReal("tLength")m = Parameters.GetAttributeReal("MaxCantOnTangent")a =
Parameters.GetAttributeReal("Cant")p = ThisObject.GetAttributeReal("TRate")
/* Compute outputs */Let LRtoFC(real)Let LRtoBC(real)if(l>0){ LRtoFC=l LRtoBC=l*p}else {LRtoFC=t if (a>0 AND m>0)
{ Let threshold(real) threshold=m/a if(threshold<p ){LRtoBC=t*threshold} else {LRtoBC=t*p}}
else { LRtoBC=t*p }}/* Write outputs */Parameters.SetAttributeReal("LRtoFC",
LRtoFC)Parameters.SetAttributeReal("LRtoBC", LRtoBC)
Railway Cant and Transition Length Rules
/* ================================================================================ */
/* RailwayCantAndTransitionLengthRules_Sample.CATRule */
/* */
/* Sample file to calculate cant and transition length. */
/* User can customize this file for each project. */
/* */
/* ================================================================================ */
/* Defines formulas for Cant and transition length. */
/* Based on the following variables */
/* {FormulaId} - formula identifier given by design rules */
/* -"France": "China" and "CantDeficiency" */
/* Cant(mm) = 6*Speed^2/radius */
/* tLength(m) = max(50,5.8*Speed*Speed*Speed/(180*radius)) */
/* -"China": */
/* Cant(mm) = 0.64*trackWidth*Speed*Speed/(3.6*3.6*g*radius) */
/* tLength(m) = 0.01*Cant*Speed */
/* -"CantDeficiency": */
/* Cant(mm) = ceil((eqCant-md)*2)/2 */
/* tLength(m) = 0.012*cantDeficiency*Speed */
/* {trackWidth} - track width (m) */
/* {speed} - current design speed (m/s) */
/* {radius} - Curve radius from geometry (m) */
/* {md} - maximum allowable cant deficiency (m) */
/* {me} - maximum allowable cant excess (m) */
/* {smax} - maximum speed (m/s) */
/* {smin} - minimum speed (m/s) */
/* {g} - gravity acceleration (m/s^2)*/
/* ================================================================================ */
/* Defines cant and transition length values */
/* cant - Applied cant for the curve (m) */
/* tLength - Transition length (m) */
/* ================================================================================ */
/* Get inputs */
Let FormulaId (String)
Let trackWidth (Length)
Let speed (real)
Let radius (Length)
Let md (Length)
Let me (Length)
Let smax (real)
Let smin (real)
Let myHA (AECAlignment2DHorizontal)
Let Arc (AECHorizontalArc)
/* Compute outputs */
Let cant (real)
Let tLength (real)
FormulaId = Parameters.GetAttributeString("FormulaId")
Set Arc = ThisObject
if (NULL<>Arc)
{
Let centerH (Length)
Let centerV (Length)
Let ArcRadius (Length)
Arc->GetCenterRadius(centerH, centerV, ArcRadius)
Set radius=ArcRadius
Set speed = Arc->GetSpeed()
Set myHA = Arc->GetHorizontalAlignment()
if(NULL<>myHA)
{
Set trackWidth = myHA->GetTrackWidth()
Set md = myHA->GetMaximumAllowableCantDeficiency()
Set me = myHA->GetMaximumAllowableCantExcess()
Set smax = myHA->GetMaximumSpeed()
Set smin = myHA->GetMinimumSpeed()
}
}
/* Local attributs */
Let g (real) /*Gravity*/
Let eqCant(real) /*Equilibrium cant*/
g=9.806
/* Convert Speeds in km_h*/
Let maxSpeed (Real)
speed=speed*3.6
maxSpeed =smax*3.6
if(radius>0)
{
if(FormulaId=="France"){
cant=round(6*speed*speed/radius)/1000
tLength=round(max(10,5.8*speed*speed*speed/(180*radius)))
}
else if (FormulaId=="China")
{
cant=round(0.64*trackWidth*1000*speed*speed/(3.6*3.6*g*radius))/1000
tLength=round(0.01*cant*1000*speed)
}
else if(FormulaId=="CantDeficiency")
{
eqCant=round(trackWidth*1000*maxSpeed*maxSpeed/(127*radius))/1000
cant=ceil((eqCant-md)*2000)/2000
Let cantDeficiency(real)
cantDeficiency=round(trackWidth*1000*maxSpeed*maxSpeed/(127*radius))/1000-cant
tLength=round(0.012*cantDeficiency*1000*speed)
}
}
cant=max(cant,0.005)
tLength=max(tLength,5)
/* Write outputs */
Parameters.SetAttributeReal("Cant", cant)
Parameters.SetAttributeReal("tLength", tLength)
BIM Attribute Completion
You can customize the behavior of BIM attributes by giving them a value through a Business Rule
in Data Setup.
To perform an automatic completion of missing IFC attributes in the BIM
Attributes panel, you can use the BIM
Completeness command. It activates the BIM Attribute
Completion Business Rule you have assigned to the
Building & Civil Resources resource table. Several
attributes can be defined/computed in BIM Attributes at the
same time, which saves time in design.
The Business Rule script below is an example. If no XML resource file is set in Data Setup, the BIMAttributeCompletionRule_Sample.CATRule file delivered in
startup\Civil\ is used. There is a condition on the Slab
Reference and Gross Volume Attributes in the script. Then the Gross Volume is
computed and, its value and the slab reference are added in the corresponding
attribute boxes in the BIM Attributes panel.
/* ========================================================================== */
/* BIMAttributeCompletionRule_Sample.CATRule */
/* */
/* Sample file to automatize the completion of IFC attribute */
/* */
/* ========================================================================== */
/* Based on the following variables */
/* {attributeName} */
/* ========================================================================== */
/* Defines attribute value */
/* {attributeValue} */
/* ========================================================================== */
/* Get inputs */
Let attributeName (String)
attributeName = Parameters.GetAttributeString("AttributeName")
/* Write outputs */
if(attributeName=="IfcPset_SlabCommon_Reference"){
(ThisObject:IfcPset_SlabCommon).IfcPset_SlabCommon_Reference="18.12.0456"
Parameters.SetAttributeString("AttributeValue", "18.12.0456")
}
if(attributeName=="IfcQto_SlabBaseQuantities_GrossVolume"){
Let partBodyList(List)
partBodyList = ThisObject ->Query("BodyFeature","x.Name like \"*PartBody*\"")
if(partBodyList.Size() > 0)
{
Let volume(VOLUME)
volume = smartVolume(partBodyList->GetItem(1))
Let skeletonList(List)
skeletonList = ThisObject ->Query("Feature","x.Name like \"*Skeleton Representation*\"")
if(skeletonList.Size() > 0)
{
Let skeleton(Feature)
skeleton = skeletonList->GetItem(1)
Let childrenListParam(List)
childrenListParam = skeleton->Query("AdvisorParameterSet","x.Name like \"Parameters*\"")
Let paramSet(AdvisorParameterSet)
paramSet = childrenListParam->GetItem(1)
paramSet->SetAttributeReal("IfcQto_SlabBaseQuantities_GrossVolume",volume)
Parameters.SetAttributeReal("AttributeValue", volume)
}else{
(ThisObject:IfcQto_SlabBaseQuantities).IfcQto_SlabBaseQuantities_GrossVolume=volume
Parameters.SetAttributeReal("AttributeValue", volume)
}
}
}
Alignment Radius Rules
/* ================================================================================
/* AlignmentRadiusRules_Sample.CATRule
/*
/* Sample file to calculate radius for horizontal arc.
/* User can customize this file for each project.
/*
/* ================================================================================
/* Defines formulas for arc radius
/* Based on the following variables
/* {FormulaId} - formula identifier given by design rules:
/* - "France ARP"
/*
/* {speed} - current design speed (m/s)
/* {angle} - current arc central angle (ANGLE)
/* ================================================================================
/* Defines arc radius values
/* MinRadius - Min radius applied radius for the curve (m)
/* DefaultRadius - Min radius applied radius for the curve (m)
/* MaxRadius - Min radius applied radius for the curve (m)
/*
/* ===============================================================================
/* Parameters */
Let myVerticalCurve (AECVerticalArc)
Let myHorizontalCurve (AECHorizontalArc)
Let PreviousHorizontalArc (AECHorizontalArc)
Let Category (STRING)
Let speed (SPEED)
Let angle (ANGLE)
Let FormulaId (STRING)
/* Outputs */
Let MinRadius (LENGTH)
Let DefaultRadius (LENGTH)
Let MaxRadius (LENGTH)
/* Get Inputs */
FormulaId = Parameters.GetAttributeString("FormulaId")
Set myCurve = ThisObject
/* Compute outputs */
if (NULL <> myHorizontalCurve )
{
Set speed = myCurve->GetSpeed()
Set PreviousHorizontalArc = myCurve->GetPreviousArc()
Set Category = myCurve-> GetCategory()
if (FormulaId == "France ARP")
{
if (Category == “R60” OR (speed < 80km_h AND Category = “”))
{
MinRadius = 120m
DefaultRadius = 450m
MaxRadius = 600m
}
else if (Category == “T80” OR Category == “R80” (speed < 100km_h AND Category = “”)
{
MinRadius = 240m
DefaultRadius = 650m
MaxRadius = 900m
}
else
{
MinRadius = 425m
DefaultRadius = 900m
MaxRadius = 1300m
}
}
}
Else if (NULL <> myVerticalCurve )
{
Set speed = myCurve->GetSpeed()
Set Category = myCurve-> GetCategory()
if (FormulaId == "France ARP")
{
if (Category == “R60” OR (speed < 80km_h AND Category = “”))
{
MinRadius = 1500m
DefaultRadius = 1500m
MaxRadius = 3000m
}
else if (Category == “T80” OR Category == “R80” (speed < 100km_h AND Category = “” )
{
MinRadius = 3000m
DefaultRadius = 3000m
MaxRadius = 6000m
}
else
{
MinRadius = 6000m
DefaultRadius = 6000m
MaxRadius = 12000m
}
}
}
/* Write outputs */
Parameters.SetAttributeDimension("MinRadius", MinRadius, "LENGTH")
Parameters.SetAttributeDimension("DefaultRadius", DefaultRadius, "LENGTH")
Parameters.SetAttributeDimension("MaxRadius", MaxRadius, "LENGTH")
|