• Which the release of FS2020 we see an explosition of activity on the forun and of course we are very happy to see this. But having all questions about FS2020 in one forum becomes a bit messy. So therefore we would like to ask you all to use the following guidelines when posting your questions:

    • Tag FS2020 specific questions with the MSFS2020 tag.
    • Questions about making 3D assets can be posted in the 3D asset design forum. Either post them in the subforum of the modelling tool you use or in the general forum if they are general.
    • Questions about aircraft design can be posted in the Aircraft design forum
    • Questions about airport design can be posted in the FS2020 airport design forum. Once airport development tools have been updated for FS2020 you can post tool speciifc questions in the subforums of those tools as well of course.
    • Questions about terrain design can be posted in the FS2020 terrain design forum.
    • Questions about SimConnect can be posted in the SimConnect forum.

    Any other question that is not specific to an aspect of development or tool can be posted in the General chat forum.

    By following these guidelines we make sure that the forums remain easy to read for everybody and also that the right people can find your post to answer it.

Official Airport to SDK project: here is a small app to help you (draft)

rhumbaflappy

Administrator
Staff member
Resource contributor
Messages
5,163
Country
us-wisconsin
This is from the SDK:

<BoundaryFence>, <BlastFence>​

These elements both define different fence types that can be placed around or within an <Airport>. If you are using these elements, then you must also set the appropriate attribute in the <DeleteAirport> element (deleteAllBlastFences or deleteAllBoundaryFences) to TRUE. Both these elements require at least two <Vertex /> sub elements to be considered valid.

IMPORTANT! While these elements may still appear in the XML for airports, they will not work. At the time of publishing this SDK documentation, these elements are scheduled for revision and the documentation will be updated when this happens.

The available attributes for both elements are as follows:



AttributeDescriptionTypeRequired
profileGUID that defines the profile for the fenceStringYes
instanceIdOptional GUID to identify the elementStringNo


The generic airports don't have boundary fences. Code has just been added for VectorPlacement to allow fences and hedgerows, etc. But it is a bit buggy, I read.
The generic airports haven't been updated in quite a while, so they don't have fences, and might never have fences.

Here's some code for the fences:

XML:
    <Airport groupIndex="2" groupID="1" groupGenerated="FALSE" state="Wisconsin" city="Delavan" name="Lake Lawn" ident="C59" lat="42.63388284867607" lon="-88.60112657613251" alt="288.77326180133969" magvar="2.000000" airportTestRadius="5000.00000000000000" applyFlatten="FALSE" isOnTIN="FALSE" starAirport="TRUE">

        <VectorPlacement displayName="ElephantLine" parentGroupID="1" groupIndex="1" profile="{2AFA52E3-EB66-411E-93A1-E7781E495CF2}" spacing="11.740000" heading="0.000000" scale="1.000000" scaleDelta="1.574400" rotation="Random" avoidDiscontinuity="FALSE">
            <Vertex lat="42.63074342774348" lon="-88.60067647441822"/>
            <Vertex lat="42.63269675888878" lon="-88.60053083614795"/>
        </VectorPlacement>

        <VectorPlacement parentGroupID="1" profile="{3539A258-D892-481E-82EB-D60201DF09FE}" spacing="4.600000" heading="0.000000" scale="1.000000" scaleDelta="0.000000" rotation="Follow edge" avoidDiscontinuity="TRUE">
            <Vertex lat="42.63014046895842" lon="-88.60073226981866"/>
            <Vertex lat="42.63009893873452" lon="-88.60026226472387"/>
            <Vertex lat="42.63058645722074" lon="-88.60030370778469"/>
            <Vertex lat="42.63060905277261" lon="-88.60068975530825"/>
            <Vertex lat="42.63014361409324" lon="-88.60072992152207"/>
        </VectorPlacement>
        <Aprons/>
        <PaintedElements/>
        <ApronEdgeLights/>
    </Airport>
From the SDK:

<VectorPlacement>​

This element is for adding in a series of points that will be connected by a vector path and then have a model placed along the path, useful for creating things like fences or power-lines, etc... This element requires at least two <Vertex /> sub-elements to define the points between which the models will be placed. The element has the following parameters:



AttributeDescriptionTypeRequired
profileThis is the GUID of the model that will be used to populate the vector path.StringYes
snapToVerticesWhen this attribute is set to "TRUE" the chosen model will only be placed on the single vertices (points) that make up the vector path, instead of being placed along the lengths of the vectors. Default value is "FALSE".BoolNo
spacingThis sets the spacing (in meters) between the models as they are placed along the vector path. This set to a avalue that brings the object models closer together to keep continuity between them.FloatYes
headingThis attribute can be used to modify the orientation (heading) of the model by a value in degrees. This will be a relative orientation if the rotation attribute is set to "Follow edge" or "Random", and an absolute orientation if the attribute is "Same".FloatYes
scaleThis attribute is used to scale the model up or down. The base value is 1, and a value less than one will scale it down and a value greater than 1 will scale it up. This will also be cummulative with the scale applied if the scaleDelta option is greater than 0.FloatYes
scaleDeltaThis attribute will add a random variation in scale to each model placed along the vector path. The default value is 0, which is no random variation, and any value greater than 0 will be used to apply a random variation in size to each model using the given value as a magnitude for the variation. This variation will be cumulative with the scale setting.FloatYes
rotationWith this attribute you can change the way the model rotation will be handled by the simulation. It can be one of the following strings:
  • "Follow edge": The models will be orientated relative to the direction of the vector path it follows
  • "Same": All the models will be orientated in the same, single direction, which can be edited using the Model Headings parameter (below).
  • "Random": Each model will be geiven it's own random orientation regardless of the position it occupies along the vector path.
StringYes
avoidDiscontinuityThis attribute can be set to "TRUE" to have the scenery editor try and ensure that the models used match up correctly at the corners of the vector path. If set to "FALSE" then the model may overrun the length of the vectors.BoolYes
castShadowIf this attribute is set to "TRUE" the models used will cast a shadow, and if set to "FALSE" they won't.BoolNo


I'm not sure why they didn't call the GUID as ID or GUID... but profile it is. VectorPlacement is part of the Airport definition.
 
Last edited:
Messages
6,844
Country
us-illinois
This is from the SDK:


IMPORTANT! While these elements may still appear in the XML for airports, they will not work. At the time of publishing this SDK documentation, these elements are scheduled for revision and the documentation will be updated when this happens.


The generic airports don't have boundary fences. Code has just been added for VectorPlacement to allow fences and hedgerows, etc. But it is a bit buggy, I read.
The generic airports haven't been updated in quite a while, so they don't have fences, and might never have fences.

Here's some code for the fences:

XML:
    <Airport groupIndex="2" groupID="1" groupGenerated="FALSE" state="Wisconsin" city="Delavan" name="Lake Lawn" ident="C59" lat="42.63388284867607" lon="-88.60112657613251" alt="288.77326180133969" magvar="2.000000" airportTestRadius="5000.00000000000000" applyFlatten="FALSE" isOnTIN="FALSE" starAirport="TRUE">

        <VectorPlacement displayName="ElephantLine" parentGroupID="1" groupIndex="1" profile="{2AFA52E3-EB66-411E-93A1-E7781E495CF2}" spacing="11.740000" heading="0.000000" scale="1.000000" scaleDelta="1.574400" rotation="Random" avoidDiscontinuity="FALSE">
            <Vertex lat="42.63074342774348" lon="-88.60067647441822"/>
            <Vertex lat="42.63269675888878" lon="-88.60053083614795"/>
        </VectorPlacement>

        <VectorPlacement parentGroupID="1" profile="{3539A258-D892-481E-82EB-D60201DF09FE}" spacing="4.600000" heading="0.000000" scale="1.000000" scaleDelta="0.000000" rotation="Follow edge" avoidDiscontinuity="TRUE">
            <Vertex lat="42.63014046895842" lon="-88.60073226981866"/>
            <Vertex lat="42.63009893873452" lon="-88.60026226472387"/>
            <Vertex lat="42.63058645722074" lon="-88.60030370778469"/>
            <Vertex lat="42.63060905277261" lon="-88.60068975530825"/>
            <Vertex lat="42.63014361409324" lon="-88.60072992152207"/>
        </VectorPlacement>
        <Aprons/>
        <PaintedElements/>
        <ApronEdgeLights/>
    </Airport>

From the SDK:

<VectorPlacement>​

This element is for adding in a series of points that will be connected by a vector path and then have a model placed along the path, useful for creating things like fences or power-lines, etc... This element requires at least two <Vertex /> sub-elements to define the points between which the models will be placed. The element has the following parameters:



I'm not sure why they didn't call the GUID as ID or GUID... but profile it is. VectorPlacement is part of the Airport definition.

Although it is likely most GA airports IRL do have fences to prevent wildlife hazards in a high velocity vehicle area, FAA only requires these in certain urban / large and Washington D.C. area airports, so I suppose for now that may save MS-Asobo some work.

So, IIUC, regardless of whether we attempt to insert XML code for Fences, the rendering engine since SU9 ...will not display Fences ?

I had the impression from prior threads on this sub-topic that there was only a problem with the Vector Placement Tool (and not with the SU9 rendering engine), since your screenie had successfully displayed the Fences at Nas_Fallon (ICAO KNFL): :oops:

https://www.fsdeveloper.com/forum/threads/changes-for-su9.455227/post-901827

msfs_su9_knfl_fences-jpg.81992



Here's some code for the fences:

XML:
<Airport
         groupIndex="2"
         groupID="1"
         groupGenerated="FALSE"
         state="Wisconsin"
         city="Delavan"
         name="Lake Lawn"
         ident="C59"
         lat="42.63388284867607"
         lon="-88.60112657613251"
         alt="288.77326180133969"
         magvar="2.000000"
         airportTestRadius="5000.00000000000000"
         applyFlatten="FALSE"
         isOnTIN="FALSE"
         starAirport="TRUE">
    <VectorPlacement
                     displayName="ElephantLine"
                     parentGroupID="1"
                     groupIndex="1"
                     profile="{2AFA52E3-EB66-411E-93A1-E7781E495CF2}"
                     spacing="11.740000"
                     heading="0.000000"
                     scale="1.000000"
                     scaleDelta="1.574400"
                     rotation="Random"
                     avoidDiscontinuity="FALSE">
        <Vertex
                lat="42.63074342774348"
                lon="-88.60067647441822"/>
        <Vertex
                lat="42.63269675888878"
                lon="-88.60053083614795"/>
    </VectorPlacement>
    <VectorPlacement
                     parentGroupID="1"
                     profile="{3539A258-D892-481E-82EB-D60201DF09FE}"
                     spacing="4.600000"
                     heading="0.000000"
                     scale="1.000000"
                     scaleDelta="0.000000"
                     rotation="Follow edge"
                     avoidDiscontinuity="TRUE">
        <Vertex
                lat="42.63014046895842"
                lon="-88.60073226981866"/>
        <Vertex
                lat="42.63009893873452"
                lon="-88.60026226472387"/>
        <Vertex
                lat="42.63058645722074"
                lon="-88.60030370778469"/>
        <Vertex
                lat="42.63060905277261"
                lon="-88.60068975530825"/>
        <Vertex
                lat="42.63014361409324"
                lon="-88.60072992152207"/>
    </VectorPlacement>
    <Aprons/>
    <PaintedElements/>
    <ApronEdgeLights/>
</Airport>

I wonder if the amount of ground area to be shadowed by an Elephant versus a slim Fence Post ...may impact run time rendering performance ? :laughing:


From the SDK:

<VectorPlacement>​

This element is for adding in a series of points that will be connected by a vector path and then have a model placed along the path, useful for creating things like fences or power-lines, etc... This element requires at least two <Vertex /> sub-elements to define the points between which the models will be placed. The element has the following parameters:



AttributeDescriptionTypeRequired
profileThis is the GUID of the model that will be used to populate the vector path.StringYes
snapToVerticesWhen this attribute is set to "TRUE" the chosen model will only be placed on the single vertices (points) that make up the vector path, instead of being placed along the lengths of the vectors. Default value is "FALSE".BoolNo
spacingThis sets the spacing (in meters) between the models as they are placed along the vector path. This set to a avalue that brings the object models closer together to keep continuity between them.FloatYes
headingThis attribute can be used to modify the orientation (heading) of the model by a value in degrees. This will be a relative orientation if the rotation attribute is set to "Follow edge" or "Random", and an absolute orientation if the attribute is "Same".FloatYes
scaleThis attribute is used to scale the model up or down. The base value is 1, and a value less than one will scale it down and a value greater than 1 will scale it up. This will also be cummulative with the scale applied if the scaleDelta option is greater than 0.FloatYes
scaleDeltaThis attribute will add a random variation in scale to each model placed along the vector path. The default value is 0, which is no random variation, and any value greater than 0 will be used to apply a random variation in size to each model using the given value as a magnitude for the variation. This variation will be cumulative with the scale setting.FloatYes
rotationWith this attribute you can change the way the model rotation will be handled by the simulation. It can be one of the following strings:
  • "Follow edge": The models will be orientated relative to the direction of the vector path it follows
  • "Same": All the models will be orientated in the same, single direction, which can be edited using the Model Headings parameter (below).
  • "Random": Each model will be geiven it's own random orientation regardless of the position it occupies along the vector path.
StringYes
avoidDiscontinuityThis attribute can be set to "TRUE" to have the scenery editor try and ensure that the models used match up correctly at the corners of the vector path. If set to "FALSE" then the model may overrun the length of the vectors.BoolYes
castShadowIf this attribute is set to "TRUE" the models used will cast a shadow, and if set to "FALSE" they won't.BoolNo


I'm not sure why they didn't call the GUID as ID or GUID... but profile it is. VectorPlacement is part of the Airport definition.

It seems many Terrain.Cfg issues in prior FS versions may be solved by MSFS' moving of local (vector) object definitions into "Airport XML". :scratchch

Otherwise we would have had to deal with Autogen definitions such as seen in FSX Terrain.Cfg ...versus that seen in MSFS' "Profiles": :rolleyes:

Code:
//------------------------------------------------------------------------
// autogen format
// [Autogen.id.type.variant]
//  id = id of the object specified in the "autogen" tag for the vector data
//  type = an extra identifier that allows mulitple autogenned types to be
//         associated with a single tag.  For example an autogen with id=0
//         could use type=0 for medians and type=1 for billboards.  Both will
//         be applied to any vector data that specifies autogen=0.
//  variant = this is a variant that may be applied to the autogen of vector
//            data.  For each id/type pair multiple variants may exist.  On
//            any given segment that applies an id/type autogen specification
//            a single variant will be chosen.
// AutoObject - guid of the primary object to use
// AutoObjectEnd - guid of any endpoint object to use
// ObjectSize - length to apply between objects (in meters)
// ObjectEndSize - length of the end segments (in meters)
// ExlusionWidth - width to exlude autogen around this type
//                 this will exclude along the entire line,
//                 not just where an object is actually placed.
// ClipData      - BOOL flag that determines whether the object
//                 should be clipped between cells.  Should be
//                 0 for anything with end objects (bridges)
// Offset        - This is an offset to apply from the vector line
//                 can be used to place object beside a road like
//                 billboards.
// Density       - This is the percentage of objects to place.  If the
//                 number is 50, 50% of all objects will be placed.
//                 This is a repeatably random 50%.  This number is
//                 further modified by the autogen density setting.
//                 NOTE: if 100 is set here, then all objects will be
//                 placed and the number will not be modified by the
//                 autogen density setting
// MinAutogenDensity - This setting determines the min percentage of autogen
//                     that must be present for this object to appear.
// Scale         - Scale factor to apply to the model.
// ScaleRange    - Randomly modulate scale factor up to +/- ScaleRange.
// PlacementRange- Randomly jitter the model placement up to +/- this many meters.
// RandomHeading - Randomly rotate the heading of each model instance.
//------------------------------------------------------------------------

But, AFAIK, this is going to dramatically increase the size of "Airport XML" code burden, and I fear it may lead to longer MSFS scenery load times. :yikes:


As for Fences, I wonder if we can just consolidate and convert the final vector meta-object output code into glTF 3D models (with LODs) ?

IIRC, Don Grovestine did this in FenceBuilder Pro, and we had the ability in SBuilderX to make MDLs of Generic Buildings by processing source code.

This may help eliminate rendering problems of vector Fences, such as we had in FSX / P3D (ex: 'vanishing' with changes to camera angle of view etc.).


GaryGB
 

Attachments

  • MSFS_SU9_KNFL_Fences.jpg
    MSFS_SU9_KNFL_Fences.jpg
    374 KB · Views: 214
Last edited:

rhumbaflappy

Administrator
Staff member
Resource contributor
Messages
5,163
Country
us-wisconsin
VectorPlacement

XML:
<?xml version="1.0"?>
<FSData version="9.0">
    <Airport state="Wisconsin" city="Delavan" name="Lake Lawn" ident="C59" lat="42.63388284867607" lon="-88.60112657613251" alt="288.77326180133969" magvar="2.000000" airportTestRadius="5000.00000000000000" applyFlatten="FALSE" isOnTIN="FALSE" starAirport="TRUE">

        <VectorPlacement profile="{3539A258-D892-481E-82EB-D60201DF09FE}" spacing="4.600000" heading="0.000000" scale="1.000000" scaleDelta="0.000000" rotation="Follow edge" avoidDiscontinuity="TRUE" castShadow="FALSE">
            <Vertex lat="42.63057123681902" lon="-88.60064051860233"/>
            <Vertex lat="42.63018255097286" lon="-88.60067834447477"/>
            <Vertex lat="42.63014394887865" lon="-88.60031860099645"/>
            <Vertex lat="42.63055878170507" lon="-88.60034160380218"/>
            <Vertex lat="42.63057123681902" lon="-88.60064051860233"/>
        </VectorPlacement>

    </Airport>
</FSData>

Vector lines exist inside the Airport definition. The SDK provides a good description of the elements,

Untitled.png


This is the image from BGLViewer. What is needed to be decoded is the ??? Field.

05 00 is the number of vertices. I made 5 to close the line. 65536 is the maximum number of points. 2 is the minimum.
58 A2 39 35 92 D8 1E 48 82 EB D6 02 01 DF 09 FE is the encoded GUID of the model used.
33 33 93 40 is the spacing.
00 00 00 00 is the heading.
00 00 80 3F is the scale.
10 is a flag. This contains the 3 types of rotation, avoidDiscontinuity, and snapToVertices.
00 00 00 00 00 00 00 is unknown... perhaps leaving room for future conditions.
CE F7 EB 8E B6 50 45 40 is the first point latitude.
2B 03 EE E4 70 26 56 C0 is the first point longitude.
Then the rest of the points in order.
 

Attachments

  • Basic-LakeLawn.zip
    24.8 KB · Views: 13
Messages
222
Country
canada
FYI from DevSupport: VectorPlacement is currently broken and unusable, however it will be fixed in SU10 which should release in August. So this will be a useful thing to decode. Thank you once again for this tool!
 
Top