This article is a cumbersome and very detailed overview of the XML elements available to use in RC DNA generation. For a top level description of the _SRC XML files, see

Editing _SRC files

XML elements in DNA

Below is an overview of the RC DNA elements. The structure of the presentation indicates how the elements are structured logically in the DNA XML.

<RailwayObjectTypeDefinitions> | XML element which contains the entire XML code for a specific instance of RailCOMPLETE object type definitions (Definition of Netork Assets = DNA). | | <DnaIdentification>============================================= | | Element which contains metadata about the present specific DNA: administrator, descriptive text, version number etc. | | Attributes: Name - String - To be presented to a user when selecting between available DNA version. E.g., "NO-BN 2022.a (beta 2022-08-07)". | | | | <DnaIri>===================================================== | | | Element which contains information such as railway administration, DNA's date/time. "IRI" is short for "Internationalized Resource Identifier", see Wikipedia. | | | | | | <AdministrationCountry>----------------------------------- | | | An ISO 3166-2 two-letter uppercased Adm's country name abbreviation. E.g. "NO" for Norway. | | | | | | <AdministrationDelimiter>--------------------------------- | | | Delimiting character between Administration Country and Administration Code. E.g., "-" | | | | | | <AdministrationCode>-------------------------------------- | | | A 2-letter uppercased code which identifies the railway administration within its country, e.g. "BN" for "Bane NOR". | | | | | | <AgentCountry>-------------------------------------------- | | | An ISO 3166-2 two-letter uppercased Agent's country name abbreviation. E.g. "NO" for Norway. | | | | | | <AgentDelimiter>------------------------------------------ | | | Delimiting character between Agent Country and Agent Code. E.g., "." | | | | | | <AgentCode>----------------------------------------------- | | | A four-digit number which identifies the Agent. A codebook for recognized Agents is kept at Railcomplete AS and published on its web pages. | | | | | | <DateTime>------------------------------------------------ | | | Time/date when the DNA was last updated. Format: "YYYY-MM-DD-Thh:mm+hh:mm" where the hh:mm after the '+' is time difference relative to GMT. | | | | | | <VersionNumber>------------------------------------------- | | | DNA Version number. Format: YYYY.xx. Eks: 2022.a or 2022.b etc. It is suggested to use a letter suffix for DNAs, and number suffic for RC application. | | </DnaIri>==================================================== | | | | <Description>------------------------------------------------ | | Text string with a short human-readable description of the DNA's contents. E.g., "RailCOMPLETE(r) Definition of Network Assets (DNA) for Bane NOR". | | | | <AdministrationName>----------------------------------------- | | The railway administration's name. | | | | <AgentName>-------------------------------------------------- | | The DNA Agent's name. | </DnaIdentification>============================================ | | <StyleDefinitions>---------------------------------------------- | Element containing style settings for the DNA, Linetypes, text styles etc. See further documentation below |

| <PropertySets> ============================================ | | Element that contains Property Sets that will be included in the AutoCAD document if AutoCAD Civil3D is used. | | | | <ExtendedDataPropertySet> ----------------------------------- | | | Property Set that will be inclueded. | | | Attributes: Name - String - the name of the Property Set. | | | IsVisible - Boolean - Indicates if the Property Set should be visible or not. | | | IsWritable - Boolean - Indicates if the Property Set is writable. | | | IsLocked - Boolean - Indicats if the Property Set is locked. | | | Description - String - A description of the property set. | | | <Properties> ================================= | | | | Element containing Extended Data Properties | | | | | | | | <ExtendedDataProperty> -------------------------------- | | | | Extended Data Property that will be included in Property Set | | | | Attributes: Name - String - the name of the Extended Data Property. | | | | DataType - String - the data type of the Extended Data Property | | | | Valid values: "Integer", "Real", "Text", "TrueFalse", "AutoIncrement", "AlphaIncrement", "List", "Graphic". | | | | DefaultValue - String - default value of Extended Data Property. | | | | IsVisible - Boolean - Indicates if the Extended Data Property should be visible or not. | | | | DisplayOrder - Integer - the display order number for this Extended Data Property. | | | | Description - String - A description of the property. | | | </Properties> | | | | | </ExtendedDataPropertySet> | | | </PropertySets> | | <Relations>===================================================== | | Specifies a group of relations for objects sharing a certain SourceSpace | | | | <SourceSpace>------------------------------------------------ | | States the relation's SourceSpace. | | Each RC object states zero or one source space, which will be added to the database in the sequence they appear | | in the DNA. See element <RelationSourceSpace>. A relation declaration may reference multiple source spaces. | | | | <Relation>=================================================== | | | Element that defines a relation. | | | Attributes: Name - String - The name of the relation. It must be unique within the possible combinations of available source spaces. | | | AskForRelation - Bool - If true, asks the user, during object creation, to select an object to which the relation will be established. | | | AskForReverseRelation - Bool - If true, asks for a source end object at object creation time, to which the reverse relation will be established. | | | Color - String - Denotes the color for the transient or permament annotation of the relation line. Stated by color name, by index or by RGB code. | | | LineType - String - Denotes the linetype (continuous, dashed etc) to use for relation line annotations. | | | LineWeight - String - Denotes the lineweight to use for relation line annotations. NB: Use only predefined AutoCAD lineweight types. | | | | | | <TargetSpace>--------------------------------------------- | | | States the relation's target space. | | | A target space is created due to mention in an RC object type declaration. A relation declaration may have multiple target spaces. | | | | | | <RelatesTo>----------------------------------------------- | | | Specifies the forward relation from an object in a sourcespace towards an object in a targetspace. | | | Attributes: Prompt - String - The message (prompt) that the user sees when the relation is about to be established | | | WarnAtSaturation - Bool - Warns the used if the source object is already at its max, and offers to break an existing relation to make space. | | | Min - Positive integer / default 0 - States the minimum allowed number of forward relations from a given object in sourcespace. | | | Max - Positive integer or 'Inf' / default '1' - States the maximum allowed number of forward relations from a given object in sourcespace. | | | | | | <ReverseRelatesTo>---------------------------------------- | | | Specifies the reverse relation from an object in a targetspace towards an object in a sourcespace. | | | WarnAtSaturation - Bool - Warns the used if the target object is already at its max. The user is notified but blocked from adding | | | a reverse relation beyond the relation's maximum for reverse connections. | | | Min - Positive integer / default 0 - States the minimum allowed number of reverse relations from a given object in targetspace. | | | Max - Positive integer or 'Inf' / default '1' - States the maximum allowed number of reverse relations from a given object in targetspace. | | </Relation>================================================== | | | </Relations>==================================================== | | <DistanceAcrossScreenAtDocumentStart>--------------------------- | Zoom level at start of a RailCOMPLETE-dokument. Default: 250. | <OwnAlignmentJigHighlightingGlobalWidthRelativeToScreenSize>------------------ | OwnAlignment highlighting width relative to screen size when inserting point objects. | Default 0.005 | <DefaultGeometry3dFileType>----------------------------------------- | Cardinality: 0..infinite | | <PropertyCategory>----------------------------------------------- | | | | The principal naming source for the RC-ManageProperties tool is the ResX language system: | | | | Category names in RC-ManageProperties ==> Resources\PropertiesResources\PropertyCategoriesResources | | Property names in RC-ManageProperties ==> Resources\PropertiesResources\PropertyDisplayNameResources | | Property descriptions in RC-ManageProperties ==> Resources\PropertiesResources\PropertyDescriptionResources | | | | The individual intrinsic property categories such as 'Basic', 'General', '3D' etc have display names | | already stated in the ResX language system for each language (selected by installing an AutoCAD language pack). | | | | ----------------------------------------------------------------------------------------------------------------- | | To reduce confusion, only the neutral language category names are stated in ResX, identical to the ResX keys. | | But the properties' locale names have been subject to translation in ResX. | | ----------------------------------------------------------------------------------------------------------------- | | | | Each intrinsic attribute has a key in RC source code to its corresponding ResX language system text. Each | | property has a display name in ResX and a description. The display name will be shown in the RC-ManageProperties | | tool, but the real underlying name (to be used with Lua code) will be shown as a tooltip text together | | with the descritption from ResX. | | | | Since AutoCAD doesn't come with language packs for every possible language in the world, the DNA allows | | the RC agent to override the ResX displayname and description. | | | | The language system of RC states a display name for each property category (the 'tabs' in | | RC-ManageProperties). However, if a DisplayName is declared inside a PropertyCategory element, then | | this display name will override the language system's word. Collapsed="true"/"false" decides whether the | | category's tab in Property Manager is closed or open at startup. | | | | Note: The order of appearance of the PropertyCategory elements in DNA dictates the categories' order of appearance | | in the Manage Properties tool | | | | Property[Attribute]Override | | =========================== | | The individual intrinsic properties such as 'dir', 'name', 'poleRouting' etc have display names already stated | | in the ResX language system for each language (selected by installing an AutoCAD language pack). | | | | In ResX, declare display name and description for intrinsic attributes in all available languages. The display name | | will be the preferred name to display in RC-ManageProperties. The underlying 'real' name must be used in Lua. | | The tooltip in RC-ManageProperties will show the underlying 'real' name as well as the description. | | | | The language system of RC states an alternative name for each property (the 'rows' in RC-ManageProperties | | inside a category). However, if a DisplayName is declared inside a PropertyOverride element, then | | this display name will override the language system's word. | | The order of appearance of the PropertyOverride elements dictate their order of appearance in the Manage Properties tool, | | within the category. The category's ordering is controlled by the ordering of the PropertyCategory elements in DNA. | | | | Note: In order to change name for a built-in property's category, you must first declare the | | core category as collapsed, and then declare the property as a built-in property with the | | new category name mentioned. | | | | Example: | | Move the 'geoCoord triplet from the core category 'Geographical data' to '3D': | | | | <PropertyCategory Name="Geographical data" Collapsed="true" /> | | <PropertyOverride Name="geoCoord" Category="3D" | | Description="The 'geoCoord' built-in property [Triplet {X,Y,Z}] holds the 'real' position." /> | | | | | | | | railML wiki | | =========== | | XML-file-wide unique, machine-interpretable identity, required for later referencing that element | | internally. For a detailed explanation see https://wiki.railml.org/index.php?title=Dev:identities. | | The general railML® description states the following contraints: | | | | id: xs:ID, required, a string, starting with a letter (a..zA..Z) or an underscore (), followed by a non-colonized and | | non-spaced string consisting of letters, digits, points (.), dashes (-) or underscores (). | | | | (Please note: a Nil UUID shall not be used; UUID's Version 4 is commonly used. Due to the limitations of the ID type by | | www.w3.org in railML® 2 the ID shall begin with a letter!). | | | | Nil UUID link: https://en.wikipedia.org/wiki/Universally_unique_identifier#Nil_UUID | | Version 4 UUID link: https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_(random) | | | | =========================================================================================================--> | | | | | | Use these declarations to manage the naming, order of appearence and on-file-opening open/collaspsed | | state in RC-ManageProperties. You may also suppress a particular property from appearing in RC-M.P. | | | | Category names and display names are case sensitive. | | 'True' / 'true' and 'False' / 'false' may be used interchangeably. | | | | 'Intrinsic' means that the category is known in C#, and its display name is given by the ResX language system. | | 'Custom' means that the category has been declared in at least one CustomAttribute DNA declaration somewhere. | | | | The property declarations' order of appearance in the assembled DNA file decides their order of appearance | | in the Manage Properties tool. | | | | NOTE : Property overrides for properties may contain a displayname, but we presume that all intrinsic properties have already been translated in ResX. | | Any custom property is assumed to have been assigned a sensible locale name, so it does not need a (different) display name. | | | | Note: Identifiers that stem from railML are camelCased, such as 'name' and 'additionalNames'. | | | | | | Ordering and naming and collapsed/open state for Property Manager tabs. | | Attributes: Name - string - Unique full name/key of category | | DisplayName - string - Overrides the assigned name (which is rather pointless to do). | | Collapsed - bool - Determines wether the tab is open whenever the DNA is read (file Start, change active document, update DNA in drawing).default false | </PropertyCategory> | | <PropertyOverride>------------------------------------------ | | Override ordering and naming for properties, either built-in properties in RailCOMPLETE or DNA defined custom properties | | Attributes: Name - string | | Intrinsic To find the correct name to use, hover over its left column in Manage Properties. | | Custom The name that the property's DNA declaration assigns to the property (not the display name). Use this one. | | DisplayName - string | | Intrinsic Overrides the display name given in the ResX language system for this language pack. This is useful in | | cases where the CAD system does not support the language of the DNA's administration. | | Custom Overrides the assigned name (which is rather pointless to do). | | Example: 'SwitchControlAndLocking' is the name, 'Basculer / Contrôler' is the CustomAttribute's declaration's display name. | | Category - string - The name of the category that this property shall appear under in the Manage Properties tool. | | Description - string - | | SortOrderPriority - int - default int.max | | Suppressed - bool - Default 'false'. | | If 'true' the property will not be shown in its category's tab in the Manage Properties tool. If 'Suppressed' | | and 'Category' used in the same PropertyOverride moves the property to its new category, but doesn't show it | | - so this is rather pointless. | | If 'false', the property will appear in its original category, or in its new category if 'Category' is non-empty. | |

| | Note 1: The attribute is still available in the Lua interpreter, but auto-fill will not suggest it. | |

| | Note 2: Rather use the <CustomAttribute> element's attribute 'HideFromUser="true"' if you want to hide a property | | from the Lua editor's auto-fill and to not show it in the property manager. This is recommended over declaring it | | as visible with HideFromUser="false" in the CustomAttribute declaration, and subsequently suppressing it with a | | PropertyOverride element. | |

| | Note 3: If either suppressed or declared as HideFromUser="true", all three ways of addressing the attribute in a | | Lua snippet using either 'MyPropName' or 'getPropertyValue("MyPropName")' or 'fromDisplayName("MyPropDisplayName")' | | will work, but the Lua editor auto-fill function will just not suggest them. | </PropertyOverride> | | <DefaultSettingsForCommands>--------------------------------- | | Stores default values for train dimensions. | | <DefaultTrainDimensions>--------------------------------- | | Attributes: CarWidth - The default width in meters of a railway car. | | AxleSeparation - The default axle separation in meters of a railway car. | | NoseLength - The default nose length in meters of a railway car, i.e. the distance from the front of the car to its first axle. | | TailLength - The default tail length in meters of a railway car, i.e. the distance from the last axle of the car to its end. | | CarCount - The default number of railway cars in a train. | | CarSeparation - The default distance in meters between two consecutive railway cars. | </DefaultSettingsForCommands> | | <FoulingPointSetting>------------------------------------------------ | A FoulingPointSetting is used to make a LuaFunction available to the show fouling points command. | Attributes: Name - Name of the FoulingPointSetting. | MaxSearchLength - Maximum search length (m) when looking for a fouling point. Default 200. | LuaFunctionName - Reference to a LuaFunction. This function should take the arguments | Point? foulingPointCandidate, RailwayPath path1, RailwayPath path2, bool path1IsLeftOf2, bool shunting. | It should return the fouling distance between the paths path1 and path2 at the point foulingPointCandidate. | FoulingPointGraphicsType - int - The graphics that will be drawn when creating transient annotations. Valid values are 0-5. | SetAsDefault - bool - If this is set to true, then this FoulingPointSetting is selected by default in the settings manager. | If multiple FoulingPointSettings have this attribute set to true, then the first FoulingPointSetting encountered will be selected. | | <PositionToolSettings>--------------------------------------------- | | PositionToolSettings is used to make a LuaFunction available to the show position command. | | Attributes: Name - string - Name of the PositionToolSettings. | | <PositionToolTextLines>---------------------------------------- | | | Description of transient text lines produced by the position tool. | | | <!-- The following text line specifications are all based on the same structure--> | | | The common attributes are as follows | | | Attributes: PositionToolFormatLuaFunctionName - string - The name of a declared lua function that takes a PositionToolInfo and outputs a string. | | | A PositionToolInfo element has the following fields: | | | PositionToolInfo | | | { | | | Point CursorPosition; | | | AlignmentPos OwnAlignmentPos; | | | AlignmentPos RefAlignmentPos; | | | | | | double? Value; | | | | | | string DefaultAlignment; | | | bool? DefaultMileageMarkerFront; | | | }, | | | where either Value is not nil or DefaultAlignment and DefaultMileageMarkerFront is not nil. | | | OrderPriority - int - Decides the order of text lines displayed by the position tool. Lower numbered text lines are placed closer to the bottom by the alignment. | | | <OwnAlignmentNameOrCodeOrId> | | | <ReferenceAlignmentNameOrCodeOrId> | | | <OwnAlignmentDistanceToAlignment> | | | <ReferenceAlignmentDistanceToAlignment> | | | <OwnAlignmentElevation> | | | <ReferenceAlignmentElevation> | | | <OwnAlignmentMileage> | | | <ReferenceAlignmentMileage> | | | <OwnAlignmentPos> | | | <ReferenceAlignmentPos> | </PositionToolSettings> | | <ReferenceAlignmentProjectionMethod>------------------------------- | Choice of reference alignment projection method. Given a 2D point in model space and an alignment, the chosen method decides which point on a reference alignment corresponds to that point. | The following choices are available: | - Default: Use default method specified in C# (TwoStep). | - Direct: BaneNOR method. For a point close to an own alignment, it's reference alignment point is calculated by projecting it directly onto the reference alignment. | - TwoStep: ISO method. For a point close to an own alignment, it's reference alignment point is calculated by first projecting it onto it's own-alignment, then from there onto the reference alignment. | | <DisplayGaugeSettings>------------------------------------------ | | Settings for DisplayGauge function. | | <Profiles>-------------------------------------------------- | | | | | | <Profile>----------------------------------------------- | | | | Attributes: Name - string | | | | <HalfProfile>-------------------------------------- | | | | | <Point>---------------------------------------- | | | | | | <X>---------------------------------------- | | | | | | Double | | | | | | <Y>---------------------------------------- | | | | | | Double | | | | | </Point> | | | | </HalfProfile> | | | </Profile> | | </Profiles> | </DisplayGaugeSettings> | | <SwitchGeometryFile>-------------------------------------------- | The path and filename to the XML file which describes the available switch (turnout) geometries to use in pattern matching for automated connection of tracks. | The root folder is the installation folder under 'RC.bundle', located under the CAD program's roaming application data folder. | | <RightSideOfAlignmentPositive>---------------------------------- | Bool - If true, then objects to the right of an alignment, seen in its drawn direction, are viewed as having a positive lateral offset (X) from its alignment. | Default: True | | <SymbolLibraryPath>--------------------------------------------- | Specifies the filne names of the 2D symbol libraries relative to the administration folder. | Example: <SymbolLibraryPath>..\2D\JBV-2D-JBTSI.dwg</SymbolLibraryPath> | | <Geometry3DLibraryFolder>------------------------------------------ | Default folder for 3D symbol library. | | <StandardUnknown3DModelFileName>------------------------------------------ | DEPRECATED, use DefaultUnresolved3DModelFileName instead | Default name of 3D model used for unknown or missing models | | <DefaultUnresolved3DModelFileName> | Default name of the standard model used for "unknown" 3Dmodels | | <Geometry3DLayerMappingFolder>------------------------------------- | Default folder for 3D layer mapping file. | <ObjectThumbnailsPath>------------------------------------------ | Default path to SymbolThumbnails.rc | <SwitchGeometryPath>----------------------------------------- | [2019.1] The switch geometry definitions path associated with one or more DNAs (absolute or relative to bundled adm home folder). | Example: 'Dna\Switches\NO-BN-2019.1-Switches.dwg'. The switch geometry definitions are used to identify the switch variant to be | inserted in RC-ASSISTCREATECONNECTIONOBJECTS. See XSD for switch geometry syntax. | <DnaMappingFolder>---------------------------------------------- | Default path to folder containing Dna mappings | <FaqPath>------------------------------------------------------- | FAQ paths | <WebPagesPath>-------------------------------------------------- | Web Links Paths | <LuaTooltipPagesFolder>----------------------------------------- | Lua tooltip pages | <LuaTooltipImagesPath>------------------------------------------ | Lua tooltip images | <TutorialsFolder>----------------------------------------------- | Tutorials folder path | <InfrastructureManagerImagePath> | Path to Infrastructure Manager's logo. | | | <DefaultStagePattern>=========================================== | | Default layer name pattern to be used for the stage manager. | | | | <Prefix>----------------------------------------------------- | | Default prefix. String | | <MainStageDigits>----------------------------------------------------- | | Default no. of main stage digits. Int | | <SubStageDigits>----------------------------------------------------- | | Default no. of sub stage digits. Int | | <DigitSeparator>----------------------------------------------------- | | Default digit separator. String | | <StageSeparator>----------------------------------------------------- | | Default stage separator. String | | <Suffix>----------------------------------------------------- | | Default suffix. String | </DefaultStagePattern>========================================== | | | <Export3DSettings>============================================== | | Contains settings for export of certain object types to 3D | | | | <AlignmentSetting>=========================================== | | | Contains settings for export of Alignments (polylines) | | | | | | <MinimumStepLength>--------------------------------------- | | | Indicates minimum step lenght in the algorithm that goes through alignments to export to a 3DPolyline | | | default: 0.0001 | | | | | | <MaximumStepLength>--------------------------------------- | | | Indicates maximum step lenght in the algorithm that goes through alignments to export to a 3DPolyline | | | default: 1000 | | </AlignmentSettings>========================================= | | | </Export3DSettings>============================================= | | <Units>========================================================= | | Specifies drawing units when initializing a new RailComplete document. | | | | <DistanceUnitFormat>----------------------------------------- | | Sets the distance unit format | | default: Decimal | | Attributes: Precision {0-8} - number between 0 and 8 indicating standart precision. Default 3 | | | | <AngularUnitFormat>----------------------------------------- | | Sets the angular unit format | | default: Decimal Degrees | | Attributes: Precision {0-8} - number between 0 and 8 indicating standart precision. Default 2 | | Clockwise - boolean indicating if positive rotation direction is clockwise. Default false | | | | <InsertionScaleFormat>-------------------------------------- | | Sets the format for AutoCad InsertionUnits. See AutoCad documentation for system variable INSUNITS | | default: Meters | | | | <LightingFormat>-------------------------------------------- | | Sets the format for AutoCad Lighting. See AutoCad documentation for system variable LIGHTINGUNITS | | default: International | </Units>======================================================= | | <DefaultAutoCADSupportFileSearchFolder>------------------------ | Deprecated use AutocadSupportFileSearchFolder | Sets AutoCAD support file search folder | default: %appdata%\Autodesk\ApplicationPlugins\RC.bundle\Adm\NO-BN\AutoCAD | <AutocadSupportFileSearchFolder>------------------------------- | AutoCAD fonts, color tables etc, to be found by AutoCAD during runtime. | | <DefaultFont>-------------------------------------------------- | Sets default font. | default: iso3098 | | <DefaultStyle>------------------------------------------------- | Sets default style. | default: iso | | <DefaultHeight>------------------------------------------------ | Sets default text height | default: 1.0 | <DefaultTargetDirectory>--------------------------------------- | | <TextAttributeDefault>----------------------------------------- | Declares a property which is to be synced between | Object XML (in extension dictionary) and block reference | attribute (for use in displayed texts in drawing) | | | <ShowLayerMenu>------------------------------------------------ | Sets the behaviour of the ShowLayer drop down menu. | Attributes: HideMissingLayerSets - boolean determining if a layer defined in DNA, but not used in drawing should be shown in drop | down menu. Default true. | | <ShowLayer>==================================================== | | Element that defines a collection of layers that can be turned on and aff through the command RC-ShowLayer | | Attributes: Name - String indicating the name of the layer | | DisplayName - String indicating the name shown in user interfaces | | DefaultOff - bool that determines if the layer is turned off by default when objects are inserted on this layer | | | | <LayerSelection>-------------------------------------------- | | Indicates a layer in the ShowLayer group. A <ShowLayer> can have many <LayerSelection> | | Attributes: Type - {ExactMatch, PartialMatch}. Indicates if the layer name shall match exactly or partially to be included in RC-SHOWLAYER | | CaseSensitive - Bool indicating if RC-SHOWLAYER should ignore uppercase/lowercase | </ShowLayer>=================================================== | | <LuaFunction>================================================== | | Defines a standard Lua function that can be used in the DNA and in RailCOMPLETE drawings using this DNA. | | Attributes: Name - String - Name of the function. | | Description - String - Description of the function. Shown in tooltip in RailCOMPLETE Lua editor. | | ReturnType - Indicates returntype of the function. Shown in tooltip in RailCOMPLETE | | | | <Constructor>---------------------------------------------- | | The function's signature (constructor). Example: isnan(Double value) | | | | <Formula>-------------------------------------------------- | | Lua definition of the function. | </LuaFunction>================================================ | | | <ObjectType>================================================== | | Defines and object type. This makes up most of the DNA. See further documentation below. | | Objects can be point objects (signals, signs, balises, etc.), alignments (tracks, contact wires, cable ducts, etc.), Areas, Xrefs or tables. | </ObjectType>================================================= | | <DefaultInterlockingExportOptions>--------------------------- | | | | <TrainRoutesStartPointFilter> | | <TrainRoutesEndPointFilter> | | <TrainRoutesExcludedObjectsFilter> | | <ExtendedTrainRoutesExcludedStartPointFilter> | | <ShuntingRoutesStartPointFilter> | | <ShuntingRoutesEndPointFilter> | | <ShuntingRoutesExcludedObjectsFilter> | | <ExtendedShuntingRoutesExcludedStartPointFilter> | | <ViaPointFilter> | | <SwitchNameScript> | | <ExtendedRoutePartFormatScript> | </DefaultInterlockingExportOptions> | | <ReleaseNotesFolder>----------------------------------------- | Folder containing release note text files. Files should be named on the format [release name][iso date][][anything].txt | Deprecated elements: | <DefaultModel3dFileType>---------------------------------- | Use DefaultGeometry3dFileType | <Model3DLibraryFolder>---------------------------------- | Use Geometry3DLibraryFolder | <Model3DLayerMappingFolder>---------------------------------- | Use Geometry3DLayerMappingFolder </RailwayObjectTypeDefnitions>===================================

ObjectType element - defines RC objects

<ObjectType> Declares an object type, which is used as a template for initializing and handling an object in the RailCOMPLETE document. The RailCOMPLETE object will be added to the drawing as a CAD entity, which entity type depends on the specified Class of the object type. Attributes: DataType= Name of XmlDataType defined in RailCOMPLETE.

		An instantiation of a given type will lead to an object being created in the database. RC objects will also be created as a result of using the CAD system's
		commands such as COPY, MIRROR,  COPYBASE, because these commands are listened to and RailCOMPLETE adds its data to the basic CAD system object when those commands are being used Note
		that these CAD system commands, if their command name is preceded by certain control characters, will prevent RailCOMPLETE from applying command
		overloading.Each time a new object is created by RailCOMPLETE or by overloading one of the object creating CAD system commands, then the new object will
		receive a globally unique ID(GUID). Note that if CAD system copy commands are used without running the RailCOMPLETE plugin, or if control characters are used to
		suppress RailCOMPLETE overloading, then objects will appear with the same GUID.This can be repaired later using the &lt;Audit_StartAuditUniqueIds&gt; command.

		Constraints
		===========
		- If the object type class is a RailwayAlignment, then the data type must implement the IAlignment interface.
		- If the object type class is a RailwayPlacedObject, then the data type must implement the IPlacedObjectBase interface.
		- If the object type class is a RcXRef, then the data type must be a RailCOMPLETEXref.
		- If the object type class is a RcTable, then the data type must be a RailCOMPLETETable.

		Data types which are based on railML 2.2
		========================================
		- eTrack           railML data type for tracks.
		- eSwitch          railML data type which inherits from class tPlacedElement. Used by RailCOMPLETE to identify switches.
		- tStrictOrientedElement railML data type used by objects with directions "up" or "down".
		- tSignal          railML data type for signals.
		- tBalise          railML data type for balises. tSpeedChange railML data type for speed changes, inherits from tStrictOrientedElement.
		- tOrientedElement railML data type used by objects with directions "up", "down", "both", "none" or "unknown". Used by points, point frogs, locks, etc.
						   "both" is used by objects visible in both 'driving directions' (or facing the alignment).
						   "none" is not visible in any direction and is used by objects facing away from the alignment.
						   "unknown" is used by objects that have direction, but the direction is unknown. The resulting symbol rotation is to be further specified
						   in the DNA.

		Extension data types which have been added
		==========================================
		- tSign                   Inherits from railML class tSignal.
		- tMarker                 Inherits from railML class tOrientedElement.
		- tStrictOrientedElement  Inherits from railML class  tPlacedElement.
		- tElementWithAlignment	  Inherits from railML class.
		- tElementWithIDAndName   Used for alignments which are not defined in railML, such as cable ducts, catenary wires, etc.
		- RailCOMPLETELabel       Inherits from railML class.
		- tConnection             Inherits from railML class tElementWithIDAndName.
		- RAILCOMPLETECloneObject Inherits from railML class tElementWithIDAndName.
		- RailCOMPLETETable       Inherits from railML class tElementWithIDAndName.
		- RailCOMPLETEXref        Inherits from railML class tElementWithIDAndName.

	Class:
		The RailwayObjectType class of the object. Available types are RailAlignment, RailwayPlacedObject, RailwayArea, RCXref, RcTable and CloneRailwayObject.
		RailwayAlignment: The graphical representation is a CAD polyline.Requires that the XmlDataType implements the IAlignment interface.
		RailwayPlacedObject: The graphical representation is a CAD anonymous block reference.Requires that the XmlDataType implements the IPlacedObjectBase interface
		RailwayArea : The graphical representation is a closed CAD polyline.
		RCXref: The graphical representation is a CAD xref.
		RcTable: The graphical representation is a CAD table.
		CloneRailwayObject: The graphical representation is any CAD entity.

	Name:
		Name of RailCOMPLETE type. The name is used as a key and should be unique.

	LuaName:
		Alias for the current object type to be used in Lua code. Similar object's across different DNA's and administrations should have the same LuaName.

	DisplayName:
		Name to be shown to the end user. The Name is shown if DisplayName is omitted. Empty string is allowed (nothing is shown).

	Layer:
		Determines the value of the CAD text attribute's Layer property. The referenced Layer should be declared elsewhere in the DNA

  	Color:
		The CAD color assigned to the object type.

	DrawTail:
		If true, a polyline tail will be drawn from the attachment point to the insertion point during the inserting jig.

	DrawTailExtension:
		If true, a polyline tail will be drawn from the attachment point to the insertion point during the inserting jig.

	Group:
		Group name of XmlDataType. Used for grouping loaded types into dropdowns in the ribbon.

	AttAddX:
		X-value added to all the CAD text attributes at object creation. Accepts DotLiquid markup. Parsed to double.
		Example: AttAddX="{%if Dir == 'down' %}-13.503{% else %}13.503{% endif %}"

	AttAddY:
		Y-value added to all the CAD text attributes at object creation. Accepts DotLiquid markup. Parsed to double.

	AttMirrorX:
		Mirror the 2D symbol's text attributes' X-coordinates about the symbol's Y-axis. Accepts DotLiquid markup. Parsed to Boolean.
		Example: AttMirrorX="{% if dir == 'up' %}true{% else %}false{% endif %}"

	AttMirrorY:
		Mirror the 2D symbol's text attributes' Y-coordinates about the symbol's X-axis. Accepts DotLiquid markup. Parsed to Boolean.
		Example: AttMirrorY="{% if RightSided %}true{% else %}false{% endif %}

	Linetype:
		The CAD LineType assigned to the object type. Valid for areas only.
		Example: Linetype="{% if AreaType == 'Arbeidsområde' %}RC-Arbeidsområde{% else %}RC-Udefinert{% endif %}"

Elements:
	<Variants>:
		The element defines the possible variants for the current object type. At insertion or when changing the variant, the SetValues and LuaExpressions expressions of that variant will be executed.

		Attributes:
			DefaultValue="..."
				Specifies the default variant.

		Elements:
			<Variant>
				The variant declares a subtype of the object type. The variant is identified by the variant name.
				Attributes:
					Name:
						Variant name. This is used as a key.

					Description:
						Description of the variant.
				Elements:
					<LuaExpression>:
						See ObjectType.LuaExpression
					</LuaExpression>
					<TextPositionLuaExpression>:
						See ObjectType.TextPositionLuaExpression
					</TextPositionLuaExpression>
					<SetValue>:
						Value setters executed at insertion of the current variant or whenever the Variant changes.
						See ObjectType.SetValue
					</SetValue>
					<DynamicProperty>:
						Dynamic property setters executed at insertion of the current variant.
						Attributes:
							Type:
								Valid values depend on the Object Type's Class:
									RailwayPlacedObject:
										[Representation|ProjectionCollection]
									RailwayAlignment:
										Representation
							SubType:
								Valid values depend on the Object Type's Class and this DynamicProperty's Type:
									RailwayPlacedObject.Representation:
										[ Geometry3D | Annotation3D | CoordinateSystemChange3D ]
									RailwayAlignment.Representation3D:
										[ SweptGeometry3D | IteratedGeometry3D | IteratedAnnotation3D | CoordinateSystemChange3D ]
									RailwayPlacedObject.ProjectionCollection:
										[ Projection ]
						Elements:
							<SetValue>:
								Value setters executed at creation of the dynamic property. The Key property is relative to the dynamic object instead of the base object.
								See ObjectType.SetValue
							</SetValue>
							<LuaExpression>:
								The Name property is relative to the dynamic object instead of the base object.
								See ObjectType.LueExpression
							</LuaExpression>
					</DynamicProperty>
			</Variant>
	</Variants>
	<CustomAttribute>:
		Custom attribute to be added to the data object and stored in the database
		Attributes:
			DataType:
				.NET type name from list of allowable type names (e.g. "String", "Double", "Boolean", "UInt16", "Byte", etc.).
				Indicates that the current RailwayObjectAttribute must be of this type. However, it must be representable
				as a string, as all data is saved as strings.
				<https://msdn.microsoft.com/en-us/library/hfa3fa08(v=vs.110).aspx>
			Name:
				Name key of the custom attribute.
			DisplayName:
				Name to be shown to the end user. The Name is shown if DisplayName is omitted.
			Description:
				Description of the custom attribute.
			DefaultValue:
				Default value of the custom attribute.
			Category:
				Category string used category header in menus. If not defined, the custom attribute will be placed in the "Custom properties" category.
			ReadOnly:
				Boolean determining whether the attribute can be changed
			ExtendedDataPropertySet:
				Extended Data Property Set this custom attribute will be mapped to.
			ExtendedDataPropertyDefinition:
				Extended data property within the extended data property set this custom attribute will be mapped to.
			StandardValuesFromLuaFormula:
				If true, custom attribute will get its standard values from lua formula specified in element "StandardValuesLuaFormula".
				Applicable only if DataType is "String".
			StandardValuesExclusive:
				If true, only standard values are valid values for this custom attribute.
				Not valid for data type "Enumeration"
			DotLiquidExpression:
				If defined, the expression is parsed and the result is saved for the custom attribute value. Not valid if DataType is Enumeration.
				Example: DotLiquidExpression="{{TIL_KM | minus:FRA_KM | times:1000000 | plus:TIL_MM | minus:FRA_MM | todouble | divided_by:1000}}"
				See more about available standard filters (pipes '|') and custom filters added by RC, under 'DotLiquid' elsewhere in this manual.
			InvertOnAlignmentReverse:
				Boolean
			HideFromUser:
				If true, the property is hidden (Browsable(false)) from the user the property is also hidden in Lua editor (Lua autocomplete will not show property name).

		Elements:
			<StandardValuesLuaFormula>:
				The Lua formula (string) from which the custom attribute gets its standard values
			</StandardValuesLuaFormula>
			<Values>:
				Valid if DataType is Enumeration. Used when different variants have different enumeration values.
				Attributes:
					Variant
					DefaultValueOverride:
						The default value for the variant. Overrides the CustomProperty default value.
				Elements:
					<Value>:
						Attributes:
							DisplayName
							Description
						Text:
							Key
					</Value>
			</Values>
		Deprecated Elements:
			<Value>:
				Use Values.
			</Value>
	</CustomAttribute>
	<ObjectTypeAttribute>
		Attribute which is not stored in the database, but which can be referred to in DotLiquid code snippets.
		Attributes:
			Key:
				To obtain the value, refer to this key.
			Value:
				The desired value of the attribute.
	</ObjectTypeAttribute>
	<SymbolDefinition>:
		Available if the object's DNA Class is 'RailwayPlacedObject'.
		Defines a list of CAD system graphical elements (CAD system block references) to be added to the RC object's CAD system anonymous block.
		Each block reference introduces graphical entities which will introduce definitions of layers, fonts, line types, colors etc. as required.
		These definitions may be removed from the drawing with a CAD system PURGE command when all objects using those resources have been deleted.
		Attributes:
			X:
				Offset in X direction. DotLiquid code can be used
			Y:
				Offset in Y direction. DotLiquid code can be used
			RotationCenter:
				Enum: OwnPosition or Origin, default OwnPosition
			DefaultBlockName:
				Block name which is shown when jigging.
			DrawOrder:
				Allow moving of symbols independently of object block.
			AllowSymbolMove:
				Allow moving of symbols independently of object block.
			Layer:
				Name of layer to place object.
			Color:
				Color of object. "bylayer" or "byblock"
			Linetype
			Lineweight
			Transparency

		Elements:
			<BlockNameFormat>:
				Format string for finding the name of the block to be inserted.
				Attributes:
					JoinBy
				Text:
					TemplateString
			</BlockNameFormat>
			<Rotation>:
				Attributes:
					AddAngle
					DoNotRotateWithAlignment
					Add180DegreesIfDirIsDown
			</Rotation>
			<SymbolAttribute>:
				Attributes:
					Tag
					DataType
				Elements:
					<Value>:
						Text: Value
					</Value>
			</SymbolAttribute>
	</SymbolDefinition>
	<Model3DDefinition>:
		DEPRECATED, use GeometryDefinition
		Defines a Model3DDefinition for the object type, which is used to set attributes of the 3D BlockReference when viewing the 3D representation of the object type.
		Elements:
			"Attribute":
				Attributes:
					Tag
					DataType
				Elements:
					<Value>:
						Text: Value
					</Value>
	</Model3DDefinition>
	<GeometryDefinition>:
		Defines a Model3DDefinition for the object type, which is used to set attributes of the 3D BlockReference when viewing the 3D representation of the object type.
		Elements:
			"Attribute":
				Attributes:
					Tag
					DataType
				Elements:
					<Value>:
						Text: Value
					</Value>
	</GeometryDefinition>
	<INSERT OPTIONS>:
		This is not an element but common properties of the elements InsertPointobject, InsertTable, InsertAlignment, InsertArea. Those elements have the following properties in addition to those documented under their own headers.
		Attributes:
			DisplayName:
				Text to be shown to the end user. The Name is shown if DisplayName is omitted.
			Name:
				Name of the item to be inserted. If not defined, the default variant will be inserted.
			DisplayBlockName:
				Name of the block in the current 2D symbol library to display in the ribbon's associated object creation menu.
				For point objects the block is also used as a preview symbol during jigging,
				i.e. shown on the computer screen before you place the object with a mouse click.
			Group:
				Object insertion declarations for areas, alignments, point objects and tables can be associated with a Group name.
				Stating a group name Group='foo' as an attribute for the InsertX (X = Area, Alignment, PointObject or Table)
				declaration element has an effect on the GUI for the various RC-CreateX commands (X = Area,Alignment, PointObject or Table).
				With each new group name encountered, the insertion ribbon menus will add a row with that name. Subsequent InsertX declarations in the DNA
				will append more object type declarations to the same row in the GUI. Subgroups can be created by stating the group name followed by a
				slash character '/' and a subgroup name. More subgroups can be named by adding slash and a new subgroup name, etc.

				Example:
				- Group="foo"       A group is created, named 'foo' *)
				- Group="foo/bar1"  A group is created, named 'foo', with a subgroup named 'bar1' *)
				- Group="foo/bar2"  A group is created, named 'foo', with a subgroup named 'bar2' *)
				*) The group/subgroup names are reused if already declared higher up in the DNA file.
			SubGroup:
				Object insertion declarations for areas, alignments, point objects and tables can be associated with a SubGroup name. Stating a subgroup name adds
				a slash '/' and the subgroup name to the insertion declaration's group name. Subgroup names are handy if you have an object type with group='foo'
				and you need many different insertion declarations for that object type, but you want them all to use the same RcType. If half of them should appear
				in the RC-CreateX (X = Area, Alignment, PointObject or Table) ribbon sub-group 'bar1' and the rest should appear as 'bar2', then you must declare
				the first insertion declarations with attribute SubGroup='bar1' and the remaining with attribute SubGroup='bar2'.
			DEPRECATED: VariantName:
				Use Name.
		Elements:
			<SetValue>:
				See ObjectType.SetValue
			</SetValue>
			<LuaExpression>:
				See ObjectType.LuaExpression
			</LuaExpression>
			<PropertyPrompt>:
				See ObjectType.PropertyPrompt
			</PropertyPrompt>
	</INSERT OPTIONS>:
	<InsertPointObject>:
		Valid for RailwayPlacedObject class only.
		Defines how the point object is previewed and inserted into to RailCOMPLETE document.
		See INSERT OPTIONS
		Attributes:
			AskForAttachment
			AskMatchPosition:
				If true, the user is prompted to match position with another object after object is inserted.
			InsertOnce:
				If false, continue inserting objects until the user aborts.
			Thumbnail3DModel
			SnapToAlignment:
				If true, the point object will snap to the alignment with an offset distance as specified by SnapDistance or SecondSnapDistance.
				Snaps to visible alignments only. Alignments located in xrefs are also available.
			SnapDistance:
				Preset distance to alignment to snap the object to. Default 0.
			SecondSnapDistance:
				If defined, a second snap distance (from alignment) becomes available.
			SnapSensitivityDistance:
				Maximum snap distance. The point object will target the closest alignment within the maximum snap distance.
			    When the object is inserted, its own alignment property is set to the targeted alignment.
				Default 3.0
			DefaultSnapMode:
				Defines the default snap mode to use when jigging. The following values are available:
			    - Alignment:Snap to an alignment. Toggle alignment snap mode on/off with keyboard shortcut 'A' during insertion.
			    Is turned off of point snapping is turned on.
			    - Point: Snap to a snap point. Toggle point snap mode on/off with keyboard shortcut 'P' during insertion.
			    Is turned off if alignment snapping is turned on.
			    - None: No snapping.
		Elements:
			<JigSymbolAppearance>:
				 Definition of the InsertSymbol jig. Describes options to modify the rotation of the 2D symbol while jigging.
				 Attributes:
					RotateIfRightSideOfAlignment:
						Adds 180 degrees to 2D symbol rotation if the cursor is on the right side of the alignment.
						Dot Liquid markup is not available.
					RotateIfLeftSideOfAlignment:
						Adds 180 degrees to 2D symbol rotation if the cursor is on the left side of the alignment.
						Dot Liquid markup is not available.
					RotateWithUcs:
						Adds 180 degrees to 2D symbol rotation if the tangent deviates by more than 90 degrees from the current User Coordinate System's positive x-axis.
						Note: The current UCS x-axis does not necessarily point to the right hand side of the screen.
						Dot Liquid markup is not available.
					MirrorAboutJigYAxisIfRightSideOfAlignment:
						Mirror 2D symbol about jig Y-axis when on the right side of the alignment.
						Dot Liquid markup is not available.
					MirrorAboutJigYAxisIfLeftSideOfAlignment:
						Mirror 2D symbol about jig Y-axis when on the left side of the alignment.
						Dot Liquid markup is not available.
					MirrorAboutJigXAxisIfRightSideOfAlignment:
						Mirror 2D symbol about jig X-axis when on the right side of the alignment.
						Dot Liquid markup is not available.
					MirrorAboutJigXAxisIfLeftSideOfAlignment:
						Mirror 2D symbol about jig X-axis when on the left side of the alignment.
						Dot Liquid markup is not available.
					AddAngle:
						Adds a constant angle [DD] to the 2D symbol rotation. 0 means that the symbol's own Y-axis points upwards when in CAD editor Top view and North is up.
						Dot Liquid markup is available.
					EnableDirectionSetting:
						If true: Keyboard shortcut 'd' becomes available. If 'd' is pressed during the insertion jig, 180 degrees are added to the 2D symbol's rotation angle.
						Dot Liquid markup is not available.
					DoNotRotateWithAlignment:
						If false: the symbol will be oriented along its own alignment. If true, the symbol will be oriented along the current UCS (the CAD system's user coordinate system).
						Dot Liquid markup is not available.
			</JigSymbolAppearance>
			<OwnAlignmentTargetSpace>:
				The relation space the alignment the object belongs to.
				Text:
					The name of the relation space
			</OwnAlignmentTargetSpace>
		Deprecated Elements:
			<Rotation>
				Use JigSymbolAppearance
			</Rotation>
	</InsertPointObject>
	<InsertTable>:
		See INSERT OPTIONS
		Elements:
			<TableSpecification>:
				To be documented later, see examples for now.
			</TableSpecification>
	</InsertTable>
	<InsertAlignment>:
		Valid for RailwayAlignment class only.
		Defines how the alignment object is previewed and inserted into to RailCOMPLETE document.
		See INSERT OPTIONS
		Attributes:
			DefaultToTangentContinuity:
				If true, RailCOMPLETE will initially draw segments using the differentiable menu setting '1' when inserting alignment. I.e., the tangent vector will be continued from one segment to the next.
		Elements:
			<IncludeSegmentType>:
				If no segment types are explicitly included, all segment types are included.
				Text:
					Available types for alignment horizontal geometry segments. More segment types may be added in later versions of RC.
					- Tangent: A straight-line segment.
					- Curve:   A circular curve (arc), characterized by its length L and its radius R.
					- Spiral:  A spiral of type 'clothoid', also known as a Euler spiral, characterized by its start radius r (default Inf),
			        its end radius R, its length L and
			        its curvature change rate parameter A = R*L.
			</IncludeSegmentType>
	</InsertAlignment>
	<InsertArea>:
		Valid for RCArea class only.
		Defines how the alignment object is previewed and inserted into to RailCOMPLETE document.
		See INSERT OPTIONS
		Attributes:
			DefaultToTangentContinuity:
				If true, RailCOMPLETE will initially draw segments using the differentiable menu setting '1' when inserting alignment. I.e., the tangent vector will be continued from one segment to the next.
		Elements:
			<IncludeSegmentType>:
				If no segment types are explicitly included, all segment types are included.
				Text:
					Available types for alignment horizontal geometry segments. More segment types may be added in later versions of RC.
					- Tangent: A straight-line segment.
					- Curve:   A circular curve (arc), characterized by its length L and its radius R.
					- Spiral:  A spiral of type 'clothoid', also known as a Euler spiral, characterized by its start radius r (default Inf),
			        its end radius R, its length L and
			        its curvature change rate parameter A = R*L.
			</IncludeSegmentType>
	</InsertArea>

	<TextAttribute>:
		Attributes:
			BindingProperty:
				Identifies the name of the object property the CAD text attribute's value should be bound to.
				The binding works both ways, so updating the object's property, will update the CAD text attribute and vice versa.
				Ex: BindingProperty="name" will bind the text attribute's text to the object's name.
			CadAttributeTag:
				CAD tag of the text attribute.
			DefaultValue
			X:
				Specifies X-offset of the text attribute with respect to the insertion point.
			Y:
				Specifies Y-offset of the text attribute with respect to the insertion point.
			Layer:
				Determines the value of the CAD text attribute's Layer property. The referenced Layer should be declared elsewhere in the DNA.
			Linetype:
				Determines the value of the CAD text attribute's Linetype property. The referenced LineType should be declared elsewhere in the DNA.
			Color
			Lineweight:
				Determines the value of the CAD text attribute's Lineweight property.
			Transparency:
				Determines the value of the CAD text attribute's Transparency property.
				Possible values: 1-255, ByLayer or ByBlock
			Style:
				Determines the value of the CAD text attribute's Style property. Overrides DefaultStyle in RailwayObjectTypeDefinitions.
                The referenced text style should be declared elsewhere
			Justify:
				Determines the value of the CAD text attribute's Justify property.
			Height:
				Determines the value of the CAD text attribute's Height property. Overrides DefaultTextHeight in RailwayObjectTypeDefinitions
			Width:
				Determines the value of the CAD text attribute's Width property.
			Annotative:
				Determines if the TextAttribute is Annotative.
			ObliqueAngle:
				Determines the value of the CAD text attribute's ObliqueAngle property.
			Constant
			Invisible:
				Determines the value of the CAD text attribute Invisible's property.
			Lock:
				Determines the value of the CAD text attribute's Lock property.
			Mtext:
				Determines the value of the CAD text attribute's MText property.
	</TextAttribute>

	<LuaExpression>:
		Lua expression private to the object type it is declared in, associated with one object property. Lua expressions are evaluated whenever
	    their host object is refreshed, which happens either at the user's refresh request or as a result of another object's direct or indirect
        reading of the object's properties. To read a property's current value without triggering its associated expressions to execute, please
		address the property through the intrinsic method getPropertyValue().
		Attributes:
			Name:
				A name key identifying the host object's associated property, into which the Lua expression's formula will return its result(s).
			IsModelCheck:
				If true, the Lua expression implements a *model check*. A model check is a Lua expression associated with a custom property, with the
				IsModelCheck flag set to 'true'. Flagging a property as a model check blocks the user from reading the property's model checking Lua
				formula and from tampering with the model check's evaluated result. It is customary to return one of the symbols [_ok,_warning,_error]
				as a visual feedback to the property data grid and to the object data grid.

				Hint: The resulting symbols from an object's model checks may be read by a formula associated with the built-in SymbolFrame property, in order to set a suitable
				symbol frame reference. The available symbol frames must be declared in StyleDefinitions elements.

                Example:
                 - Declare a symbol frame "Error" as thick red circle around objects which have one or more model checks that return the _error symbol.
		         - Declare a symbol frame "Warning" as dashed orange circle around objects which have one or more model checks that return the _warning symbol, but no _error symbols.
		Elements:
			<Formula>:
				Lua code snippet which is run whenever the object's associated property value is to be updated by this Lua expression.
			    The return value consists of a single value, an optional feedback symbol [_nosymbol (default), _ok, _warning, _error], and an optional _info(String).
			    The ordering of the three return elements is arbitrary.
				Text:
					The Lua formula
			</Formula>
	</LuaExpression>
	<TextPositionLuaExpression>:
		A Lua expression that governs a text attributes position relative to the objects insertion point.
		The expression must return two or three numbers (X, Y, Z in WCS)
	</TextPositionLuaExpression>
	<TextRotationLuaExpression>:
		A Lua expression that governs a text attribute's rotation.
		The expression must evaluate to a number representing the rotation in degrees.
	</TextRotationLuaExpressions>
	<DynamicProperty>:
		Attribute:
			Type
			Subtype
		Elements:
			<SetValue>:
				See ObjectType.SetValue
			</SetValue>
			<LuaExpression>:
				See ObjectType.LuaExpression
			</LuaExpression>
	</DynamicProperty>
	<SetValue>:
		Attributes:
			Key:
				Property key
			Value:
				Property value
	</SetValue>
	<PropertyPrompt>:
		Property prompt to be shown to user at the conclusion of an object creation process, to ask for input from the user.
		The object's property matching Key will be set to the obtained input value. Property prompts can be used to set built-in
        and custom (DNA-declared) properties.
		Attributes:
			Key:
				A key identifying an object's property identifier (built-in or custom property).
			DefaultValue:
				Default value suggested to user.
			AcceptEmptyValue:
				If true, empty value from user is accepted.

	</PropertyPrompt>
	<RelationSpace>:
		Defines a source space for the present object type, be it an area, alignment or point object. The space name is added to the
        list of available spaces (within the present database context) when a DNA object type declaration brings in a new space name.
        Each space may be used as either the source space or the target space in a DNA declaration of a custom relation. Space names
        given to the various DNA alignment declarations may be referenced in DNA object type declarations to restrict an object such
        that it can only snap to and have an alignment of that space type as its 'own alignment'. - As the source and target spaces
        in custom-declared binary relations, but also by generic functions such as limiting the available alignment types which a point
        object may be snapped to at creation, or defining the spaces that a given connection object may connect to.
		Note 1: Currently you can only have ONE source space per object type.
		Note 2: The mathematical notation for a relation 'R' is AxB => {true,false}, i.e. a named assignment of true/false to each ordered
		tuple (a,b) from AxB. A and B may be the same space. See more under <Relations>.
		Text:
			The name of the relation space
	</RelationSpace>
	<LuaFunction>:
		Lua function scoped to the current object type. See above for more details
	</LuaFunction>
	<AttachTo>:
		This object is an attachment source which targets the given attachment category.
		Attributes:
			Category:
				Identification string for an attachment category to which this object type can be attached.
			DrawTail:
				If true, a polyline tail will be drawn from the attaching object's symbol offset location to the host object's CAD system insertion point.
	</AttachTo>
	<AttachmentCategory>:
		Defines an attachment category for other objects' use when targeting the declaring object's type during an attachment operation.
        Only object types that refer to the attachment category by an AttachTo reference, can attach to this object.
		Attributes:
			Name:
				Category name for this attachment target. Used as key.
                - If the name is 'not defined' then this object can only be attached to by objects targeting the 'any' category.
                - If the name is 'any' then any object can attach to this category.
                - If the name is '' then no object can attach to this category.
			PassAttachmentToTarget:
				If true, the attached object (the 'attachment child') will inherit its insertion point from the target object (the 'attachment parent').
                By repeated attaching of objects to other objects, you will build a 'family tree' holding exactly one top object (the family tree root).
	</AttachmentCategory>
	<DockPointDefinitions>:
		Declares lists of locations (2D points) to be used as custom snap points.
		Attributes:
			Annotative:
				Boolean default true
		Elements:
			<SnapPoints>:
				Attributes:
					Variant
					MirrorAboutAlignmentTangent
					MirrorAboutAlignmentNormal
				Elements:
					<SnapPoint>:
						Attributes:
							X
							Y
							Z
							TargetSpace
					</SnapPoint>
			</SnapPoints>
	</DockPointDefinitions>
	<DisplayPointDefinitions>:
		Declares a list of points where a new created object offers the user to place the 2D symbol's display point (the graphics).
        If the object's declaration sets tail-drawing to true, then a tail will be drawn from the object's insertion point
        to the applied display point.
		Attributes:
			Annotative:
				Boolean default true
		Elements:
			<SnapPoints>:
				Attributes:
					Variant
					MirrorAboutAlignmentTangent
					MirrorAboutAlignmentNormal
				Elements:
					<SnapPoint>:
						Attributes:
							X
							Y
							Z
							TargetSpace
					</SnapPoint>
			</SnapPoints>
	</DisplayPointDefinitions>

StyleDefinitions element - defines styles for drawings

<StyleDefinitions> Attributes: Description: Culture: Either omit the 'Culture' attribute, or assign values from one of these (not case sensitive): [ nor | fr | de | usa ] Elements: <TextStyle> TEXT STYLES, FONTS Font files are .SHX fonts which will be located by AutoCAD as soon as the search folder for fonts has been correctly declared. Cardinality: 0..infinite Attributes: Name Font Height </TextStyle> <LineType> Element to define an AutoCAD linetype. .lin files can also be placed in the AutoCAD support folder. Cardinality: 0..infinite Attributes: Name: Specifies the line type name PatternLenght: Specifies the line type pattern length IsScaledToFit Description Elements: <Dash> Specifies the length of a dash. The total extent should add up to the total pattern length. Positive "Dash" attribute gives a solid line Negative "Dash" attribute gives no 'ink' Value zero (0) for "Dash" gives a dot Cardinality: 0..infinite Text: The number </Dash> <ComplexDash> Class containing properties to be able to create complex line types in CAD software. Attributes: Dashlength Text ShapeScale ShapeRotation ShapeName ShapeStyle ShapeIsUcsOriented ShapeOffset </ComplexDash> </LineType> <Layer> Define layer properties. Layers will be referenced by TextAttribute and ObjectType elements. When a layer is used in a 2D symbol during object creation, and this layer already exists, then the symbol's constituent parts will be placed directly on that layer. The layer's properties such as on/off, frozen/thawed etc are not altered. If the layer in question does not already exist, then it will be created. If there is a layer definition in the current RailCOMPLETE Style Definitions, then this newly created layer's properties will be set as defined by the style definitions. If one ore more layer properties have not been given definite values in Style Definitions, then these properties will be cloned from the non-purgable layer 0.

		RailCOMPLETE needs the neutral language layer names or the alias color numbers (0, 256, index color numbers).
		But Lua code assigning colors must follow the language pack they are used in.

		Examples:
			<Layer Name="JBTFE@OBJEKTNAVN" Color="3"
			LineType="RC-CONTINUOUS" LineWeight="LineWeight005" Description="Navn på tverrfaglige (felles) objekter" />
			<Layer Name="JBTFE@OBJEKTID" Color="62" Description="Tverrfaglige (felles) objekter: Banedata objekt-ID" />
			<TextAttribute Annotative="true" BindingProperty="name" CadAttributeTag="NOM"
				X="0" Y="5.5" Layer="JBTFE@NAME" Color="ByLayer" Justify="MiddleCenter" Height="1.0" />
		Note on 'Component layers':
			Layers for graphic component belonging to an object's 2D symbol but contained on its own layer
			which may be toggled using RC-ShowLayerGroups.

		Note on 'Transient graphics layers':
			Layers for copying transient graphics to a permanent entity in the drawing. Transient graphics
			are there-and-then graphics which is shown as long as the object has been selected and the
			corresponding RC-Show.../RC-Display... function is active.

		Cardinality: 0..infinite
		Attributes:
			Name:
				The element's name, which will be visible in AutoCAD Layer Manager etc as a layer name
				The special layer names are:
					0			Cannot be deleted. Trouble with assigning a layer to an object will default to 0.
					Defpoints	Automatically disables "Show in plot". Can be deleted and purged. Same name in all language packs.

				Suggested layer naming conventions
				..................................
				Feature layers
				..............

				Layers will be given style elements (linetype, color etc) if they have a <Layer> declaration in the
				StyleDefinitions file. If no definition is found, then the style for layer 0 will be cloned.

				Layers which contain textual or graphical elements and which are to be used as a block in another block
				(for instance "metal-free area" in a balise object) should have layer names written in uppercase with an
				initial discipline identifier: TRK=track, SUB=substructure/foundations, OCS=overhead catenary system,
				SIG=signalling, TEL=telecommunications, PNB=poles and boards, COM=features common to several disciplines.

				Then follows one of five situations:

					#	'sharp' character 	"Dead" AutoCAD Object that has been created by one of the "RC-Show..." or
											"RC-Display..." routines as annotations and then copied to the drawing using
											the 'RC-CopyAnnotationsToDrawing' command. Example: Mileage annotation.

					$$	2 x 'dollar' 		Component layer predefined in the 2D library for semantic symbols. Such layers
											contain graphics, text or text attributes which are part of a semantic symbol
											but which may be made invisible by any method that turns this layer OFF or
											FREEZEs it. A fixed color has been pre-assigned. Example: Symbol description.

					$	'dollar' character	Component graphics which are bundled with the main 2D symbol and put on this
											layer which may be made invisble without hiding the object's main graphics.
											Such graphics will normally assume the color of its main symbol.
											This layer is declared in the DNA where the various parts making up the object'same
											overall symbol are put together using <SymbolDefinition> elements.
											Example: Signalling 'stuff' or catenary 'stuff' inside a turnout's symbol.

					@	'at' character		Text attribute (a CAD entity) which is bundled with the main 2D symbol and put
											on this layer which may be made invisble without hiding the object's main graphics.
											Such graphics will normally assume the color of its main symbol.
											This layer is declared in the DNA, inside an <ObjectType> declaration, as part of
											a <TextAttribute> element.
											overall symbol are put together using <SymbolDefinition> elements.
											Example: Text item NAME (in th CAD block) linked to a semantic object's intrinsic
											'name' property, or the INFO text item linked to a semantic object's custom property
											'info'.

					_	Single underscore	"Live" RC objects that have been declared with <ObjectType> declarations in DNA.

				Note: The special delimiter characters have been chosen carefully:
					1) 	Their sort order in the AutoCAD layer manager is intended: # => $$ => $ => @ => _
					2) 	Live objects' layer names are often used in Lua match() function calls, where shartp #, underscore _ and
						'at' @ are treated as regular characters. The dollar $, minus -, caret ^, percent % are special characters
						that must be escaped in Lua by a preceding '%' percent if they were to be used as search patterns.

				RailCOMPLETE can easily manipulate hundreds of layers, in the active document or in XRef'ed
				documents.

				Example:
				RCCO#ANNOTATIONS_SECTIONS					"Dead" annotations  (RI = railway infrastructure, CO = common)
				RISI$$BALISE_METAL_FREE_AREA				Graphics or text inside an atomic symbol, as stored in the external 2D symbol library file
				RITR$SIGNALLING_DETAILS_IN_TURNOUT_SYMBOL	Atomic block inside a turnout symbol's overall block, concerning signalling stuff
				RISI@NAME									The 'NAME' text element inside a symbol
				RISI_SIG									A "live" signal object

				Object layers
				.............
				Layers which contain the RailCOMPLETE objects follow the naming convention, that only ONE
				underscore letter separates the inital discpline identifier and the remainder. The second part denotes
				the type of object / objects to be found on that object layer, and should have a readable name such that
				a user looking at the CAD system's layer names will understand what the contents of each layer is supposed
				to be.

				The RailCOMPLETE objects found on such layers are always anonymous blocks which can't be edited in the
				CAD system's block editor, and which can not be exploded, to protect them from inadvertent tampering.
				Such objects also contain embedded XML code representing the property values and the Lua methods which
				are particluar to each individual object. If possible, the railway administration's asset management
				database naming conventions should be reflected in these object layer names.

				Example:
				SIG_SIGNAL, SIG_AXLE_COUNTER, SIG_MARKER_BOARD, TRK_SWITCH, TRK_CROSSING, TRK_DERAILER

				Abstract drawing elements ('dead' annotations) which are inserted as blocks by RailCOMPLETE reside on
				layers created by RC when needed.

				Example:
				COM$ANNOTATION_MILEAGE, COM$ANNOTATION_CHAIN_BREAK, COM$ANNOATION_REFERENCE_ALIGNMENT, SIG$SIGHTLINE

			Locked:
				As defined in AutoCAD
			Off:
				The opposite of "On" as defined in AutoCAD. Overridden by "On" if it has a value.
			Frozen:
				As defined in AutoCAD
			Color:
				As defined in AutoCAD. Note: Colors can be given as a number 1..255, where *index colors* are (1..7). If an index color
				has been set by number, AutoCAD will still display its textual name. "1" is "Red" / "Rouge" / "Rot" etc depending on the
				AutoCAD language pack that has been installed. But if colors were stated as "Jaune" (yellow) in one DNA, and that file
				was opened by a user having say the German pack installed, then "Jaune" will not be recognized and the layer will appear
				in white color (the acad default for non-recognizable index color names). Also, 0 = ByBlock, 256 = ByLayer.
				==> Therefore, the Style Definitions files should always name index colors by numbers, not by names. Same goes for Lisp code.
				The index + special colors are:
					1 = RED
					2 = YELLOW
					3 = GREEN
					4 = CYAN
					5 = BLUE
					6 = MAGENTA
					7 = WHITE
					0 = ByBlock
					256 = ByLayer

				Objects may receive color ByLayer or ByBlock. AutoCAD reserves the number '0' and '256' as language-independent aliases:
				0 = ByBlock / DuBloc / VonBlock (each language pack has its own name, but all accept the number as an alias)
				256 = ByLayer / DuCalque / VonLayer (each language pack has its own name, but all accept the number as an alias)
				Lua code may return colors "0" and "256" both as the neutral name, as the current language pack name (not case-sensitive)and as a number
				or as a triplet. Color codes as triplets must be returned in Lua as a comma-separated quoted text string (otherwise Lua treats the
				commas as separator between multiple assignment arguments).
				Other nice color codes:
					GRAY   : "128,128,128" can also use its name - a neutral gray tone accepted from Lua code, but not by the French color picker
					Gray   : 250 = "51,51,51"		Darkest index color for gray
					Gray   : 251 = "91,91,91"		...
					Gray   : 252 = "132,132,132"	...
					Gray   : 253 = "173,173,173"	...
					Gray   : 254 = "214,214,214"	Lightest index color for gray
					Orange : "255,165,0" 			Orange
			Transparency:
				Default 0. As defined in AutoCAD. In the API (and in DNA declarations). 0 is solid and 90 is 90% transparent (max).
			Description:
				As defined in AutoCAD
			Lineweight:
				As defined in AutoCAD (A selection of predefined values).
				RailCOMPLETE has defined intrinsic enums for the predefined AutoCAD values, in order to be able to show tooltips for them.

				ByLineweightDefault	Default		Might have a ResX translation
				ByBlock				ByBlock		Might have a ResX translation
				ByLayer				ByLayer		Might have a ResX translation
				Lineweight000		"0.00 mm"
				Lineweight005		"0.05 mm"
				Lineweight009		"0.09 mm"
				Lineweight013		"0.13 mm"
				Lineweight015		"0.15 mm"
				Lineweight018		"0.18 mm"
				Lineweight020		"0.20 mm"
				Lineweight025		"0.25 mm"
				Lineweight035		"0.35 mm"
				Lineweight040		"0.40 mm"
				Lineweight050		"0.50 mm"
				Lineweight053		"0.53 mm"
				Lineweight060		"0.60 mm"
				Lineweight070		"0.70 mm"
				Lineweight080		"0.80 mm"
				Lineweight090		"0.90 mm"
				Lineweight100		"1.00 mm"
				Lineweight106		"1.06 mm"
				Lineweight120		"1.20 mm"
				Lineweight140		"1.40 mm"
				Lineweight158		"1.58 mm"
				Lineweight200		"2.00 mm"
				Lineweight211		"2.11 mm"
			Linetype:
				As defined in AutoCAD ("Continuous" is the same in all language packs, for some reason).
				Objects may receive Linetype as one of the built-in values 'ByLayer', 'ByBlock' or 'Continuous'.
				In RailCOMPLETE StyleDefinitions, the <Layer> declaration has a LineType attribute, where the neutral LineType name shall be used,
				Lua *must* use the language pack's LineType name ("ByBlock" | "DuBloc" | "VonBlock", "ByLayer" | DuCalque" | "VonLayer").
		Deprecated Attributes:
			On:
				Use Off. If On is true. On attribute is used. If not Off is used
	</Layer>
	<Annotations>
			ALIGNMENT ANNOTATIONS - transient graphics for visualization of otherwise intangible alignment data
			T S C = Tangent - Spiral - Curve
			Values given in DNA overrides language pack-dependent settings given in the ResX language system.
			See also <http://www.wikiengineer.com/Transportation/SpiralCurves>
		Cardinality:0..1
		Elements:
			<PropertyNames>
				Short names used in alignment annotations. If these are not specified then language specific defaults will be inserted in their place.

				Elements:
					<StartOfAlignment>
						Marks the low-mileage start point of an alignment.
						Text:
							Value
					</StartOfAlignment>
					<StockRails>
						Marks the point where a visible tSwitch object is linearly placed.
						Text:
							Value
					</StockRails>

					<BeginToCurve>
						Start of axis, where the first segment is a circular arc
						Text:
							Value
					</BeginToCurve>
					<BeginToSpiral>
						Start of axis, where the first segment is a transition curve
						Text:
							Value
					</BeginToSpiral>
					<BeginToTangent>
						Start of axis, where the first segment is a tangent
						Text:
							Value
					</BeginToTangent>
					<CurveToEnd>
						End of axis, where the last segment is a circular arc
						Text:
							Value
					</CurveToEnd>
					<SpiralToEnd>
						End of axis, where the last segment is a transition curve
						Text:
							Value
					</SpiralToEnd>
					<TangentToEnd>
						End of axis, where the last segment is a tangent
						Text:
							Value
					</TangentToEnd>
					<CurveToCurve>
						Marks a point in the horizontal geometry where a circular arc is followed by a circular arc.
						Text:
							Value
					</CurveToCurve>
					<CurveToSpiral>
						Marks a point in the horizontal geometry where a circular arc is followed by a transition curve.
						Text:
							Value
					</CurveToSpiral>
					<CurveToTangent>
						Marks a point in the horizontal geometry where a circular arc is followed by a tangent.
						Text:
							Value
					</CurveToTangent>
					<SpiralToCurve>
						Marks a point in the horizontal geometry where a transition curve is followed by a circular arc.
						Text:
							Value
					</SpiralToCurve>
					<SpiralToSpiral>
						Marks a point in the horizontal geometry where a transition curve is followed by a transition curve.
						Text:
							Value
					</SpiralToSpiral>
					<SpiralToTangent>
						Marks a point in the horizontal geometry where a tangent line meets a transition curve.
						Text:
							Value
					</SpiralToTangent>
					<TangentToSpiral>
						 Marks a point in the horizontal geometry where a transition curve meets a tangent line.
						 Text:
							Value
					</TangentToSpiral>
					<TangentToCurve>
						Marks a point in the horizontal geometry where a tangent is followed by a circular arc.
						Text:
							Value
					</TangentToCurve>
					<TangentToTangent>
						 Marks a point in the horizontal geometry where a tangent is followed by a tangent.
						 Text:
							Value
					</TangentToTangent>
					<Length>
						Alignment segment 2D length. Is overriden by TangentLength, CurveLength and SpiralLength.
						Text:
							Value
					</Length>
					<CurveLength>
						Alignment curve segment 2D length. Overrides Length for curve segments.
						Text:
							Value
					</CurveLength>
					<SpiralLength>
						Alignment spiral segment 2D length. Overrides Length for spiral segments.
						Text:
							Value
					</SpiralLength>
					<TangentLength>
						Alignment tangent segment 2D length.  Overrides Length for tangent segments.
						Text:
							Value
					</TangentLength>
					<CurveRadius>
						Abbreviated name for circular arc segment type, shown below the segment's length
						Text:
							Value
					</CurveRadius>
					<Spiral>
						Abbreviated name for spiral segment type, shown below the segment's length
						Text:
							Value
					</Spiral>
					<StraightLine>
						Abbreviated name for tangent line segment type, shown below the segment's length
						Text:
							Value
					</StraightLine>

					<!-- Vertical profile PVI -->

					<Sag>
						A point of vertical intersection where an increase in vertical profile gradient towards higher distance along occurs.
						Text:
							Value
					</Sag>
					<Crest>
						A point of vertical intersection where a decrease in vertical profile gradient towards higher distance along occurs.
						Text:
							Value
					</Crest>
					<VerticalCurveStart>
						Marks the low-mileage start point of a circular arc smoothing of a crest or a sag in the vertical profile.
						Text:
							Value
					</VerticalCurveStart>
					<VerticalCurveEnd>
						Marks the high-mileage end point of a circular arc smoothing of a crest or a sag in the vertical profile.
						Text:
							Value
					</VerticalCurveEnd>
					<VerticalParabolaStart>
						Marks the low-mileage start point of a parabolic smoothing of a crest or a sag in the vertical profile.
						Text:
							Value
					</VerticalParabolaStart>
					<VerticalParabolaEnd>
						Marks the high-mileage end point of a parabolic smoothing of a crest or a sag in the vertical profile.
						Text:
							Value
					</VerticalParabolaEnd>
					<Length3D>
						Vertical profile 3D length, measured along the gradient curve (being the combination of horizontal geometry and vertical profile, disregarding the effect of cant).
						Text:
							Value
					</Length3D>
					<ParaCurveLength>
						Vertical profile ParaCurve horizontal geometry (2D) length, (disregarding the combined effect of vertical profile and cant).
						Text:
							Value
					</ParaCurveLength>

					<PviElevation>
						Elevation above mean sea level at point of intersection between two adjacent vertical profile tangents' extensions. NB: ProfileAnnotations attribute ElevationFormatLuaFunctionName will override this item.
						Text:
							Value
					</PviElevation>
					<PviMileage>
						 Mileage at point of intersection between two adjacent vertical profile tangents' extensions.  NB: ProfileAnnotations attribute MileageFormatLuaFunctionName will override this item.
						 Text:
							Value
					 </PviMileage>

					<!-- Cant -->
					<CantHeight>
						Cant (superelevation) height above reference level, which amounts to either lowest rail.
						Text:
							Value
					</CantHeight>
					<CantRampStart>
						Marks the low-mileage start point of a ramp in the cant (superelevation).
						Text:
							Value
					</CantRampStart>
					<CantRampEnd>
						 Marks the high-mileage end point of a ramp in the cant (superelevation).
						 Text:
							Value
					 </CantRampEnd>
					<CantCommonRampPoint>
						Marks the common point where one cant ramp ends and another one starts.
						Text:
							Value
					</CantCommonRampPoint>
			</PropertyNames>
			<ANNOTATIONS COMMON ATTRIBUTES>
			The following annotations all share these attributes
			Attributes:
				Color:
					default 2
				TurnOffMagnification:
					deafult = "0.01"
				DecimalSensitivity:
					default 1
				UseTransientColorWhenMakingPermanent:
					default false
				MinMagnification:
					default 0.01
				DynamicScaling:
					default false
				MultipleTransientBlocks:
					default false
				PermanentAnnotationLayer

			</ANNOTATIONS COMMON ATTRIBUTES>

			<AlignmentNameAnnotations>
				Attributes:
					RightSide
					TextStyle:
						default "RC-STANDARD"
					TextHeight:
						default 1.0
					TextDistFromAlignment:
						default 3
					BarSize:
						default 3
					Rotate90
					MaxItemsAcrossScreen:
						default 4
			</AlignmentNameAnnotations>
			<MileageChangeAnnotations OR MileageChangeMilepostAnnotations>
				These elements annotate different mileagechanges, but contain the same elements.
				MileageChangeAnnotations for anotation for MileageChanges of type ChainBreak
				MileageChangeMilepostAnnotations for annotation for MileageChanges of type Milepost.
				Attributes:
					DecimalSensitivity:
						default 1
				Elements:
					<SymbolDefinition>
						Information about a symbol which is inserted into a block to represent a RailwayObject.
						Attributes:
							X:
								Offset in X direction. DotLiquid code can be used
							Y:
								Offset in Y direction. DotLiquid code can be used
							RotationCenter:
								Ownposition (default) or Origin
							DefaultBlockName:
								Block name which is shown when jigging.
							DrawOrder:
								Allow moving of symbols independently of object block.
							AllowSymbolMove:
								Allow moving of symbols independently of object block.
							Layer:
								Name of layer to place object.
							Color:
								Color of object. "bylayer" or "byblock"
							LineType
							LineWeight
							Transparency
							DoNotIncludeInSymbolFrame:
								Decides if the symbol should be included when calculating the size of the SymbolFrame.
						Elements:
							<BlockNameFormat>
								Format string for finding the name of the block to be inserted.
								Attributes:
									Joinby
								Text:
									TemplateString
							</BlockNameFormat>
							<Rotation>
								Attributes:
									AddAngle
									DoNotRotateWithAlignment
									Add180DegreesIfDirIsDown
								DeprecatedAttributes:
									RotateDirection
							</Rotation>
							<SymbolAttribute Tag="INN_KM" DataType="Int32" >
								Cardinality: 1..infinite
								Attributes:
									Tag
									DataType
								Elements:
									<Value>
										Text
									</Value>
							</SymbolAttribute>
					</SymbolDefinition>
			</MileageChangeAnnotations OR MileageChangeMilepostAnnotations>
			<MileageAnnotations>
				Attributes:
					TextStyle:
						default "RC-STANDARD"
					TextHeight
						default 1.0
					TextDistFromAlignment:
						default 3
					RightSideOfAlignment
					Rotate90:
						Rotate 90 degrees with respect to the alignment direction
					MajorBarSize:
						default 3
					MinorBarSize:
						default 1
					DynamicScaling
					MaxMajorStepsAcrossScreen:
						default 10
					TurnOffMagnification
					MajorMinStep:
						default 0.001
					MajorMaxStep:
						default 10000
					MinorFactor:
						default 10
					MileageFormatLuaFunctionName:
						Name of a Lua function. This function should take the arguments
						double Mileage and int decimals
						It returns Mileage as a formatted string, e.g. "km.12.345678" or "Pk.12+345.678".
			</MileageAnnotations>
			<GeometryAnnotations>
				Attributes:
					TextStyle:
						default "RC-STANDARD"
					TextHeight:
						default 1.0
					AlignmentBarSize:
						default 3
					TextDistFromAlignment:
						default 1
					DecimalSensitivity:
						default 1
					DetailedViewMagnification:
						default 0.25
					DrawCircle:
						default false
					DisplayCant:
						default false
					ClothoidRadiusFormatLuaFunctionName:
						Name of Lua function that takes (segment type 1, radius1, segment type 2, radius2, decimals) as input
						and outputs a formatted annotation string. Segment types are strings that take on values "", "Line", "Arc", "Clothoid"
			</GeometryAnnotations>
			<ProfileAnnotations>
				Attributes:
					TextStyle:
						default "RC-STANDARD"
					TextHeight:
						default 1.0
					AlignmentBarSize:
						default 3
					TextDistFromAlignment:
						default 1
					GradientTextHeight:
						default 1
					GradientLineLength:
						default 6
					DecimalSensitivity:
						default 1
					TurnOffRadiusMagnification:
						default 0.01
					TurnOffMileageMagnification:
						default 0.01
					TurnOffElevationMagnification:
						default 0.01
					TurnOffCrestSagMagnification:
						default 0.01
					TurnOffLengthMagnification:
						default 0.01
					TurnOffVerticalTransitionPoints:
						default 0.01
					TurnOffGradientMagnification:
						default 0.01
					ElevationFormatLuaFunctionName:
						Name of Lua function to format elevation annotation for profile. Takes inputs (double) elevation and (int) decimals
					    and returns a properly formatted string
					MileageFormatLuaFunctionName:
						Name of Lua function to format mileage annotation for profile. Takes inputs (double) mileage and (int) decimals
						and returns a properly formatted string
			</ProfileAnnotations>
			<FoulingPointAnnotations>
				Attributes:
					TextStyle:
						default "RC-STANDARD"
					TextHeight:
						default 1.0
					DecimalSensitivity:
						default 1.5
					TurnOffMileageMagnification:
						default 0.5
					TurnOffFoulingDistanceMagnification:
						default 0.5
					MultipleTransientBlocks:
						default true
			</FoulingPointAnnotations>
			<AlignmentElementAnnotations>
				Attributes:
					TextStyle:
						default "RC-STANDARD"
					TextHeight:
						default 1.0
					AnnotationWidth:
						default 3
			</AlignmentElementAnnotations>
			<ReferenceAlignmentAnnotations>
				Attributes:
					TextStyle:
						default "RC-STANDARD"
					TextHeight:
						default 1.0
					DoNotDisplayText:
						default false
					Width:
						default 3
					ParentLineType:
						default "RC-SOLID"
					ChildLineType:
						default "RC-DASHED"
					InvalidChildLineType:
						default "RC-DASHED"
					ParentLineTypeScale:
						default 1
					ChildLineTypeScale:
						default 10
					InvalidChildLineTypeScale:
						default 1
			</ReferenceAlignmentAnnotations>
			<BrakingCurveMadePermanent/>
			<SightLineMadePermanent/>
			<PlaneSectionMadePermanent/>
			<SightAreaMadePermanent/>
			<SightVolumeMadePermanent/>
			<SightBeamMadePermanent/>
			<RelationAnnotation/>
			<AttachmentAnnotation/>
			<ShowPositionInAlignmentAnnotation/>
			<Show3DPreviewAnnotation/>
			<TvdSectionAnnotation/>
			<EarthingAlignmentAnnotation/>
			<SightingAnnotation/>
			<DisplayGaugeMadePermanent/>
			<DeadZoneOffsetAnnotation>
				Attributes:
					Linetype:
						Name of the linetype used to draw offset lines. Default RC-DASHED
					HideBox:
						Boolean to hide right angle box in offset annotation
					BoxLineType:
						Name of linetype used to draw right angle box. Default Continuous
					BoxSize:
						Size of right angle box. Default 1
			</DeadZoneOffsetAnnotation>

	</Annotations>
	<SymbolFrames>
		The Property Manager offers an interface to the SymbolFrame property for point objects. To set a symbol frame, enter the frame's name.
		To unset a symbol frame, select the "empty frame" from the F4 selection menu (a default choice that the DNA does not declare).
		Attributes:
			Layer:
				Default layer for symbol frames (unless overridden by individual layer declaration, see the SymbolFrame element)
			Elements:
				<IgnoreLayer>
					Graphics contained on this layer will be ignored when RC figures out the needed size for the symbol's frame
					Cardinality:1..infinite
					Text:
						Layer name
				</IgnoreLayer>
				<SymbolFrame>
					Symbol frame definition
					Cardinality:1..infinite
					Attributes:
						Name:
							No default value, must be non-empty. Objects shall use this name as their SymbolFrame property.
						CircleRadius:
							Default 0. Corner rounding radius. Radius zero means "square corner".
						HorizontalMargin:
							Default 0. Horizontal margin between not-ignored-graphics and the symbol frame
						VerticalMargin:
							Default 0. Vertical margin between not-ignored-graphics and the symbol frame
						Color:
							Default ByLayer. The frame's color.
						LineType:
							Default Continuous. The frame's line type.
						LineWidth:
							Default 0. The frame's line width.
						Transparency:
							Default "ByBlock". The frame's transparency. One of [ 'ByBlock' | 'ByLayer' | 0..90 ] where 0 is solid and 90 is 90% transparent.
						Layer:
							Defaults to the main element's Layer attribute. The symbol frame will reside on this layer instead of the default layer.
					Elements:
						<Tail>
							Attributes:
								CornerCutDistance:
									Controls the appearance of 45 degree corners to the tail, when the object's display point is sufficiently far from its insertion point. Default 1.5
								SegmentLengthBeforeCornerCut:
									Controls the appearance of 45 degree corners to the tail, when the object's display point is sufficiently far from its insertion point. Default 2.5
						</Tail>
				</SymbolFrame>
	</SymbolFrames>
	<Thumbnails>
		List of layers to be included (in addition to "0") in 2D symbol thumbnails when writing these to file.
		Elements:
			<IncludeLayer>
				 Layer to include in thumbnails in addition to "0"
				 Text:
					Layer name
			</IncludeLayer>
	</Thumbnails>
	<SectionColors>
		Ordered list of preferred colors for annotation of sections (paths delimited by section delimiter objects).
		Elements:
			<string>
				Text:
					Color name or number
			</string>
	</SectionColors>
Deprecated elements:
	<TvdSectionColors>
		Ordered list of preferred colors for annotation of sections (paths delimited by section delimiter objects).
		Elements:
			<string>
				Text:
					Color name or number
			</string>
	</TvdSectionColors>