About Building & Civil ResourcesThe 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 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 ElementsThe table below describes the elements and their possible attributes.
Supported Standards
Alignment Design CustomizationThe script below is a stationing
script. If no XML resource file is set in Data Setup, the AlignmentDesign.xml file delivered in
<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:
Alignment Design Rules Definition
Concrete Design Customization
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 RulesYou 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:
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)
Road Widening and Transition Length RulesYou 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:
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.
Subgrade Surface Width and Transition LengthYou 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:
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 LengthYou 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:
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 CompletionYou 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
/* ========================================================================== */
/* 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")
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||