PEW File Format: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
Line 29: Line 29:
     ulong                    nOFPTextures          // none in Arma;
     ulong                    nOFPTextures          // none in Arma;
     OFPTexture              OFPTextures[nOFPTextures];
     OFPTexture              OFPTextures[nOFPTextures];
     ulong                    nObjectTypes;
     ulong                    nObjectTemplates;
     ObjectType              ObjectTypes[nObjectTypes];
     ObjectTemplate          ObjectTemplates[nObjectTemplates];
     shortBool                NoOfpTerrains;
     shortBool                NoOfpTerrains;
     if  (!NoOfpTerrains)
     if  (!NoOfpTerrains)
Line 37: Line 37:
     OFPTerrain              OFPTerrains[nOFPTerrains];
     OFPTerrain              OFPTerrains[nOFPTerrains];
     }
     }
     shortBool                NoOFPForests;
     shortBool                NoOFPForests;        //  none in Arma;
     if  (!NoOFPForests)
     if  (!NoOFPForests)
     {
     {
Line 44: Line 44:
     }
     }
     RoadNets                RoadNets[...];
     RoadNets                RoadNets[...];
     Terrain                  Terrain[...];
     Elevation                Elevation[...];
     ulong                    NoOfObjects;
     ulong                    NoOfObjects;
     Object                  Objects[NoOfObjects];
     Object                  Objects[NoOfObjects];
     ulong                    NoOfLayers;
     ulong                    NoOfLayers;
     Layer                    Layers[[NoOfLayers] ;
     Layer                    Layers[[NoOfLayers] ;
// ulong                    RoadNetIndices[TerrainGridSizeXY];
     if (POSEW60)
     if (POSEW60)
     {
     {
Line 108: Line 107:
  }
  }


===ObjectType===
===ObjectTemplate===
   ObjectType
   ObjectTemplate
   {
   {
       String      ModelFilename; //"SomePrefixRoot\data\jablon.p3d\0"
       String      ModelFilename; //"SomePrefixRoot\data\jablon.p3d\0"
Line 122: Line 121:
       RGBAColor    OutlineColour;  
       RGBAColor    OutlineColour;  
       RGBAColor    ObjectColour;   
       RGBAColor    ObjectColour;   
       double   GeometryLODBox_X; // 50.0
       double   GeometryBounds[2];         // 50.0
      double   GeometryLODBox_Y; // 50.0
       ulong   ModelID;
       ulong   ModelID;
       XYZTriplet  GeometryLODAutoCenterPos;
       XYZTriplet  GeometryAutocenterPos;
       double   ResolutionLODBox_X; // 50.0
       double   ResolutionBounds[2];         // 50.0
      double   ResolutionLODBox_Y; // 50.0
       XYZTriplet  ResolutionAutoCenterPos;
       XYZTriplet  ResolutionLODAutoCenterPos;
       shortBool   Generally0x01;   
       shortBool   Generally0x01;   
       shortBool   ScaleFlag;         // Random Scale Flag
       shortBool   RandomScaleFlag;
       double   Scale0; // 50.0
       double   RandomScaleMinMax[2];       // 50.0
      double   Scale1; // 50.0
       shortBool   RandomRotateFlag;
       shortBool   RotateFlag;         // Random Rotate Flag
       double   RandomRotateMinMax[2];      // 20.0
       double   Rotate0;         // 20.0
       shortBool   RandomOrientationFlag;     
       double   Rotate1;         // 20.0
       double   RanmdomOrientationMinMax[2]; // 180.0
       shortBool   OrientationFlag;    // Random Orientation Flag
      double   Orientation0; // 180.0
       double   Orientation1; // 180.0
       shortBool   RoadFlag;
       shortBool   RoadFlag;
       if (RoadFlag)  
       if (RoadFlag)  
       {
       {
             TransformMatrix RoadNamedSelections; // (LB, PB, PB, PE)
             TransformMatrix RoadNamedSelections; // (LB, PB, LE, PE)
             TransformMatrix XRoadNamedSelections; // (LD, LH, PD, PH)
             TransformMatrix XRoadNamedSelections; // (LD, LH, PD, PH)
       };
       };
Line 254: Line 248:
  {
  {
   String    Name;       //kr_asfaltka_asfaltka_t.
   String    Name;       //kr_asfaltka_asfaltka_t.
   ushort    Type              //1 or 3
   ushort    Shape;            //1 or 3
   RGBA      color;       //FF FF FF FF  
   RGBA      color;       //FF FF FF FF  
   shortBool CanChangeBankAngle;
   shortBool CanChangeBankAngle;
Line 280: Line 274:
kr_silince_x_cesta: a crossroad of paved and dirt roads.
kr_silince_x_cesta: a crossroad of paved and dirt roads.


===Terrain===
===Elevation===
  Terrain
  Elevation
  {
  {
     XYPair  TerrainGridSize; // 256 x 256 eg
     XYPair  GridSize; // 256 x 256 eg
     float    TerrainGridHeights[TerrainGridSize];
     float    Heights[GridSize];
     float    BlueEdgeTerrainHeights[NoOfBlueFloats]  ; //Always zero values  
     float    BlueEdgeTerrainHeights[NoOfBlueFloats]  ; //Always zero values  
     // NoOfBlueFloats = (TerrainGrid_Y * TerrainGrid_X)/16;
     // NoOfBlueFloats = (GridSize_Y * GridSize_X)/16;
     ulong    Always0;
     ulong    Always0;
  }
  }
Line 297: Line 291:
       if (IsPresent)
       if (IsPresent)
       {
       {
         ShortBool Always0;
         ShortBool Moveable;             // always 0
         ulong    InstanceId;
         ulong    InstanceId;
         float    TransformColumn[3][4]; // described here to solidly illustrate to reader
         float    TransformColumn[3][4]; // described here to solidly illustrate to reader
Line 307: Line 301:
         RGBA      OutlineColour;  
         RGBA      OutlineColour;  
         RGBA      ObjectColour;   
         RGBA      ObjectColour;   
         ulong    ObjectID;
         ulong    ObjectTemplateID;
       };
       };
   };
   };
Line 316: Line 310:
     Layer
     Layer
     {
     {
         String          Name1;            //"Base"
         String          Name1;            //"Base".. perhaps only once
         ulong          SizeType;        //0..2 //see below
         ulong          SizeType;        //0..2 //see below
         String          Name2;            //"Base"
         String          Name2;            //"Base"
         ushort          DefaultIndicator; // 0 ... 1
         shortBool      DefaultIndicator; // 0 ... 1
         if (DefaultIndicator == 0)
         if (DefaultIndicator == 0)
         {
         {
             ulong SurfaceTable[TableSize.x*y];
             ulong SurfaceTable[TableSize.x*y];
             ulong TextureTable[TableSize.x*y];
             ulong TextureTable[TableSize.x*y];
             char uchar[16384];
             char uchar[(TableSize.x*y/4)];//16384
             char uchar[2];
             char uchar[2];
         };
         };
Line 348: Line 342:
       String BackgroundFilename;
       String BackgroundFilename;
       String BackgroundName;
       String BackgroundName;
       float  OffsetX;
       float  OffsetXY[2];
       float  OffsetY;
       float  SizeXY[2];
      float  SizeX;
      float  SizeY;
       ulong  Transparency;
       ulong  Transparency;
       ulong  Visible;
       shortBool Visible; // or ulong?
   }
   }


Line 365: Line 357:
   ulong    Unknown[12];  
   ulong    Unknown[12];  
             /* typical data
             /* typical data
             **00 00 00 00 00 00 00 F0 2C 46 00 98 23 46 C6 6F  
             **00 00 00 00 00  
            **C6 42 0E 01 00 00 01 00 00 F0 2C 46 00 98 23 46  
00 00 F0 2C  
            **C6 6F C6 42 0E 01 00 00 4B 00 00 00 00 00 00 00  
46 00 98 23  
46 C6 6F C6
42 0E 01 00  
00 01 00 00  
F0 2C 46 00  
98  
23 46 C6 6F  
C6 42 0E 01  
00 00 4B 00  
00 00 00 00  
00 00  
             */
             */
   ushort    Type;            // 0,1,2,3
   ushort    Type;            // 0,1,2,3

Revision as of 06:13, 4 August 2009

Template:unsupported-doc

Introduction

Pew are Visitor's project files. Visitor is BI's tool for creating Islands.

Visitor is a Gui tool interface that interacts with Bulldozer, an inbuilt 'world' viewer inside any Armed Assault engine.

The contents of the project file, pew, are not directly related to the ultimate output, a wrp file. However, that data, of course, contains all similar elements, such as road networks, elevations, cell matrices, models and textures.

Exporting a pew file into wrp format, involves the use of Bulldozer, since it is Bulldozer that decides how it wants that data presented, rather than anything visitor might like to decide. It is Bulldozer that determines the format and version of the resulting wrp file (in 8WVR format), and consequently, that, is a reflection of the Arma Engine itself.

While there have been several pew versions, the one's listed here are

  • POSEW59 and
  • POSEW60

there are only a few subtle differences to their makeup.

Legend

see Generic FileFormat Data Types

File Format

  • This file format is principally used with Armed Assault v1.09 and later plus the ArmA Tools Suite Final release (v1.14).
 POSEW59
 POSEW60
 {
   PoseHeader               Header;
   ulong                    nOFPTextures           // none in Arma;
   OFPTexture               OFPTextures[nOFPTextures];
   ulong                    nObjectTemplates;
   ObjectTemplate           ObjectTemplates[nObjectTemplates];
   shortBool                NoOfpTerrains;
   if  (!NoOfpTerrains)
   {
   ulong                    nOFPTerrains;         //  none in Arma;
   OFPTerrain               OFPTerrains[nOFPTerrains];
   }
   shortBool                NoOFPForests;         //  none in Arma;
   if  (!NoOFPForests)
   {
   ulong                    nOFPForests;          
   OFPForest                OFPForests[nOFPForests];
   }
   RoadNets                 RoadNets[...];
   Elevation                Elevation[...];
   ulong                    NoOfObjects;
   Object                   Objects[NoOfObjects];
   ulong                    NoOfLayers;
   Layer                    Layers[[NoOfLayers] ;
   if (POSEW60)
   {
    ulong                   NoOfBackgrounds;
    Background              Backgrounds[NoOfBackgrounds] ;// probably
   }
   else // pose59
   {
     ulong                  nForestBlocks;
     ForestBlock            ForestBlocks[nForestBlocks];
   }

   ulong                    nRoadBlocks;
   RoadBlock                RoadBlocks[nRoadBlocks];

   if (POSEW60)
   {
     ulong                  nForestBlocks;
     ForestBlock            ForestBlocks[nForestBlocks];
   }
   else // pose59
   {
    ulong                   NoOfBackgrounds;
    Background              Backgrounds[NoOfBackgrounds] ;// probably
   }
   ulong                    Count;
   Locale                   Locales[Count];         
   ulong                    nIcons;
   Icon                     Icons[nIcons];
   ulong                    Always4;
   ulong                    Always0;
 }


PoseHeader

Header
{
 char     Signature[7];        // "POSEW59" or "POSEW60" note: NOT null terminated

 ulong    Length;              // of PEW file;
 ulong    UnknownLong;         // typically 0
 String   IslandDataPath;      //"SomePboPrefix\SomeIsland\data\0"
 String   IslandObjectPath;    //""
 float	   GridSize;            //50.0
 float	   SegmentSize;         //400.0 (==SegmentSize - SegmentOverlap)
 String   IslandClassname;     //""
};

OFPTexture

OFPTexture
{
 ulong	    TextureID;
 String    TextureFileName;	// "snih3.paa"
 String    TextureName;	// "snih3"
 String    RvmatName;		// "snih3.rvmat"
 byte      UnknownBytes[14];	// (typically 0)
 RGBAColor Colour;
}

ObjectTemplate

 ObjectTemplate
 {
     String       ModelFilename; //"SomePrefixRoot\data\jablon.p3d\0"
     String       ModelName;     //"jablon"
     ulong        ObjectType;    // 0..5
                                 // 0 Natural
                                 // 1 Artificial
                                 // 2 ???
                                 // 3 Road (RoadFlag will be true)
                                 // 4 ???
                                 // 5 ArtificialAndDefinedInRoad
     RGBAColor    OutlineColour; 
     RGBAColor    ObjectColour;  
     double	   GeometryBounds[2];	        // 50.0
     ulong	   ModelID;
     XYZTriplet   GeometryAutocenterPos;
     double	   ResolutionBounds[2];	        // 50.0
     XYZTriplet   ResolutionAutoCenterPos;
     shortBool	   Generally0x01;   
     shortBool	   RandomScaleFlag;
     double	   RandomScaleMinMax[2];        // 50.0
     shortBool	   RandomRotateFlag;
     double	   RandomRotateMinMax[2];       // 20.0
     shortBool	   RandomOrientationFlag;     
     double	   RanmdomOrientationMinMax[2];	// 180.0
     shortBool	   RoadFlag;
     if (RoadFlag) 
     {
           TransformMatrix RoadNamedSelections;	// (LB, PB, LE, PE)
           TransformMatrix XRoadNamedSelections;	// (LD, LH, PD, PH)
     };
//   ulong            MarkerType;	                // See MarkerTypeEnum 
     ulong            nArtificialObjects;
     ArtificialObject ArtificialObjects[nArtificialObjects];
     LongBool         UnknownBool;	                // 0 or 1 
 }

ArtificialObject

 ArtificialObject
 {
    String     Name;       //"pohrada"
    LongBool   Unknown;
    ulong      nTriplets; // always 2
    XYZTriplet StartEndPos[nTriplets];
 }

OFPTerrain

OFPTerrain
{
 String  TerrainName;
 byte    UnknownBytes[11];
 ulong	  nSurfaces;
 OFPSurface OFPSurfaces[nSurfaces];
}

OFPSurface

OFPSurface
{
 String SurfaceName;
 float	 Surfacefloat[4];
 byte   UnknownBytes[16];
}

OFPForest

OFPForest
{
 String    ForestName;
 RGBAColor OutlineColour;
 RGBAColor ObjectColour;
 ulong	    SquareFillModelID;
 ulong	    SquareModelID;
 ulong	    TriangleModelID;
 ulong	    Unknown1;	// (typically 0)
 ulong	    Unknown2;	// (typically 0)
}

RoadNet

   shortBool NoRoads;
   if  (!NoRoads)
   {
     ulong    nTypes;
     RoadType RoadTypes[nTypes];
     ulong    nXRoads;
     XRoad    XRoads[nXRoads];
   }

RoadType

 RoadType
 {
   String       FamilyName;        // "cesta","silnice",etc
   RGBA         KeyPartsColour;    
   RGBA         NormalPartsColour; 
   shortBool    FilledLine;        // 0 or 1
   double       MaxAngle;          // 25.0 degrees 
   double       MaxBankAngle;      // 5.0 degrees
   ulong        nStraights;
   RoadList     Straights[nStraights];
   ulong        nCurves;
   RoadList     Curves[nCurves];
   ulong        nSpecials;
   RoadList     Specials[nSpecials];
   ulong        nTerminators;
   RoadList     Terminators[nTerminators];
   }
 }
RoadList
 RoadList     
 {
      String      ModelName;      // "cesta25"
      ulong       ObjectID;       // in the model list
      ushort      MeterType;      // 0,1,2,3 not present for Terminators
      shortBool   CanChangeAngle; // not present for Terminators or Curves
 }

MeterType

Type Straights Curves
0 6 25 meters
1 12 50
2 25 75
3 100

Broadly speaking, there are a few basic road types

  • asfalt bitumen.
  • silnice Paved
  • cesta dirt

Each RoadType describes the general characteristics of a Dirt Road as opposed to (say) an Asphalt one.

Each of these RoadTypes (such as asphalt) can have multiple curved, straight, special, and termination p3d models associated with them.

Generally speaking, there are

  • 3 'straight' models, approximately 6,12, and 25 meters long respectively.
  • 4 'curved' models, 25,50,75 and 100 meters long.
  • 1 'terminaton type.

The termination type is a road like any other but tends to be a fixed 6 meter fade out of the general road texture.

XRoad

XRoad
{
 String    Name;	      //kr_asfaltka_asfaltka_t.
 ushort    Shape;            //1 or 3
 RGBA      color;	      //FF FF FF FF 
 shortBool CanChangeBankAngle;
 ulong     ObjectID;
 String    Intersections[4]; //"asfaltka","silnice","cesta",Type=3 "silnice" else ""
}

Although CrossRoads could, conceivably, have any number of intersections, only two types are handled.

  • Type 1: A T_Junction (3 intersections)
  • Type 3: A Genuine crossroad (4 way intersection)

For T_Junctions, there is, obviously, no 4th intersection and this is null filled.

Without taking too literal an interpretation, there are some major types of road.

  • asfaltka:bitumen (sealed)
  • silnice: Paved
  • cesta: Dirt

Thus the names of each intersection reflect the road type of that intersection, sometimes resulting in (up to) four identical names.

The overall name of the crossroad itself, tries to reflect the nature of it's makeup thus kr_asfaltka_asfaltka_t: an bitumen T_Junction kr_silince_x_cesta: a crossroad of paved and dirt roads.

Elevation

Elevation
{
   XYPair   GridSize; // 256 x 256 eg
   float    Heights[GridSize];
   float    BlueEdgeTerrainHeights[NoOfBlueFloats]  ; //Always zero values 
   // NoOfBlueFloats = (GridSize_Y * GridSize_X)/16;
   ulong    Always0;
}

Object

Object { ShortBool IsPresent; if (IsPresent) { ShortBool Moveable; // always 0 ulong InstanceId; float TransformColumn[3][4]; // described here to solidly illustrate to reader // this is a standard DirectX Transform matrix // but in COLUMN format; double ObjectRelativeSize; // decimal percentage String InstanceName; // "minimalStrelPos" float RelativeSurfaceElevation; RGBA OutlineColour; RGBA ObjectColour; ulong ObjectTemplateID; }; };

Layer

   Layer
   {
       String          Name1;            //"Base".. perhaps only once
       ulong           SizeType;         //0..2 //see below
       String          Name2;            //"Base"
       shortBool       DefaultIndicator; // 0 ... 1
       if (DefaultIndicator == 0)
       {
           ulong SurfaceTable[TableSize.x*y];
           ulong TextureTable[TableSize.x*y];
           char uchar[(TableSize.x*y/4)];//16384
           char uchar[2];
       };
       if (DefaultIndicator == 1)
       {
           ulong           NoOfTerrainMaterials;
           TerrainMaterial[NoOfTerrainMaterials]
           {
               ulong  BitFlags;     // 1 = label, 0x40 = rvmatfile,,,,
               String MaterialName; // "---sea---","Layers\P_000-000_L00.rvmat"
               ulong  TypeID;       // 0..3
           };
           ulong RvmatTable[TableSize.x*y];
       };
   };

TableSize = Terrain.GridSize>> SizeType;

Background

 Background // this structure has not been seen
 {
      String BackgroundFilename;
      String BackgroundName;
      float  OffsetXY[2];
      float  SizeXY[2];
      ulong  Transparency;
      shortBool Visible; // or ulong?
 }

RoadBlock

RoadBlock
{
 ShortBool IsPresent; 
 if IsPresent
 {
 ShortBool Always1; 
 ulong     Unknown[12]; 
           /* typical data
           **00 00 00 00 00 

00 00 F0 2C 46 00 98 23 46 C6 6F C6 42 0E 01 00 00 01 00 00 F0 2C 46 00 98 23 46 C6 6F C6 42 0E 01 00 00 4B 00 00 00 00 00 00 00

           */
 ushort    Type;             // 0,1,2,3
 String    RoadFamilyName;   //"hlavni silnice"
 String    RoadModelName;    //"kr_silnice_cesta_t"
 RGBA      color;            
 ShortBool Always1; 
 ulong     Count; 
 FamilyList FamilyLists[Count];
 ulong     Unknown[27];
           /* typical data
           **FA D4 30 BF 94 58 08 3D 00 00 C8 C0 00 00 60 C0 
           **00 00 00 00 00 00 48 C1 00 00 60 40 00 00 00 00 
           **00 00 48 C1 00 00 60 C0 00 00 00 00 00 00 00 00 
           **00 00 60 40 00 00 00 00 00 00 00 00 00 00 C8 C0 
           **00 00 00 00 00 00 30 C0 00 00 C8 C0 00 00 00 00 
           **00 00 1C C1 04 01 00 00 00 00 00 00 00 00 00 00 
           **09 00 00 00 0B 80 00 00 04 00 00 00 
           */
 ulong     Count;    
 ModelList ModelLists[Count];
 }
}

Type

  • 0 Road Ending with FamilyName and it's ModelName_konec
  • 1 TJunction ModelName Only
  • 2 Road similar to type 0
  • 3 Xroad with ModelName Only

FamilyList

FamilyList
{
  ulong  Unknown[4];// Typically 00 00 C8 C0 00 00 C8 C0 00 00 00 00 0E 01 00 00
  String Name;     // "silnice hlavni silnic\0"
}

This struct is principally used for Xroads and Tjunctions. It typically lists the order of all RoadFamilyName's required

ModelList

ModelList
{
 ulong      Count;           //15 eg
 BlockModel BlockModel[Count];
 String     FamilyName;      //"silnice hlavni silnic\0"
 ulong      Unknown[4];      //Typically 00 00 C8 C0 00 00 C8 C0 00 00 00 00 0E 01 00 00
 RGBA       color[2];         
 ShortBool  Always01;        //01
 ulong      buf2[4];         // Typically 00 00 00 00 00 00 39 40 00 00 00 00 00 00 24 40
}
BlockModel
   BlockModel 
   {
       ulong	   ModelFlag;   // 0x000001 ... 0x00010001
       XYZTriplet Position;      // Model coordinates
       float	   ModelDirection;
       ulong	   ObjectID;
       ushort     Type;               //0,1,2,3
       String     ModelName;          //"silnice10 100\0"
       ulong      unknown[25];
          /*typical data
          **00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
          **C4 76 C2 3F 0E EB 8A C1 00 00 00 00 BE 00 00 00 
          **CC ED 26 BE CA 0F 12 40 56 30 28 3F 00 00 00 00 
          **18 CA 04 C1 48 8B 3D C0 00 00 00 00 2D 3D 91 C1 
          **06 01 C0 40 00 00 00 00 EE 98 84 C1 99 99 91 C0 
          **00 00 00 00 64 4A 5F 35 99 99 91 40 00 00 00 00 
          **64 4A 5F B5 01 00 
          */
       ShortBool  ok; // 0 or 1
}

Forest Block

ForestBlock
{
 ShortBool IsPresent;
 if IsPresent
 {
  ShortBool Always0;
  BisString Name1;          //"Les_new"
  ulong     Colour[3];
  ulong     nFloats;
  float     Floats[nFloats];
            /* Typical Data
            **00 00 61 45 00 78 1B 46 00 20 64 45 00 20 19 46 
            **00 20 64 45 00 78 1B 46 00 40 67 45 00 58 18 46 
            **00 40 67 45 00 78 1B 46 00 60 6A 45 00 58 18 46 
            **00 60 6A 45 00 78 1B 46 00 80 6D 45 00 90 17 46 
            **00 80 6D 45 00 B0 1A 46 00 A0 70 45 00 C8 16 46 
            **00 A0 70 45 00 E8 19 46 00 C0 73 45 00 00 16 46 
            */
  ulong     ID;             // 0,1,2,3,4....
  if POSEW60
  {
   LongBool  Always1;
  }
  else
  {
   BisString Name2;          //Les_new Name2==Name1
  }
 }
};

Locale

Locale
{
 LongBool  Always1; 
 String    ClassName;  //"Noe_Lany"
 RGBA      Colour[3];
 ShortBool ShortInd; 
 float     Offset[2];  // map relative
 float     Size[2];    // 250 x 250.0 eg
 ulong     ID;         // 0,1,2,3,4,5,6....
 BisString TownName;   //"Lipany", "Hill"
 BisString LocaleType; //"NameCity" NameCityCapital, NameVillage, NameLocal, VegetationBroadLeaf,Hill,Marine,ViewPoint
 BisString NoName;     // always null
}

Each of these locales have a LocaleType. Some of which are:

  • NameCity
  • NameCityCapital
  • NameVillage
  • VegetationBroadLeaf (Forest)


There is always a classname associated with this locale,

  • Forest_Owls
  • Abel_LaTrinite

and in most cases a text name

"La Refuge Des Chassuers"

(Type Viewpoints and Marine eg) do not have names associated with them. There is no "place" in the sea.

Icon

Icon
{
 BisString IconFileName;  //"sat_lco.bmp"
 BisString IconName;      //"overlay1"
 byte      unknown[22];
}

Enums

ObjectClassEnum

enum ObjectClassEnum { Natural = 1, Artificial = 2, Road = 3, Forest = 4, ArtificialAndDefinedInRoad = 5 }

MarkerTypeEnum

enum MarkerTypeEnum { Rectangular = 0, Elliptical = 1 }