[mapguide-commits] r10026 - in trunk/MgDev: . Common/MdfModel Common/MdfParser Common/Schema Common/Stylization Server/src/UnitTesting UnitTest/TestData/Symbology

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Feb 9 02:44:18 PST 2023


Author: jng
Date: 2023-02-09 02:44:17 -0800 (Thu, 09 Feb 2023)
New Revision: 10026

Added:
   trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyCenter.ldf
   trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyCenter.mdf
   trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyLeft.ldf
   trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyLeft.mdf
   trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyRight.ldf
   trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyRight.mdf
Modified:
   trunk/MgDev/
   trunk/MgDev/Common/MdfModel/TextSymbol.cpp
   trunk/MgDev/Common/MdfModel/TextSymbol.h
   trunk/MgDev/Common/MdfParser/IOLabel.cpp
   trunk/MgDev/Common/Schema/LayerDefinition-4.0.0.xsd
   trunk/MgDev/Common/Stylization/GeometryAdapter.cpp
   trunk/MgDev/Common/Stylization/GeometryAdapter.h
   trunk/MgDev/Server/src/UnitTesting/TestRenderingService.cpp
   trunk/MgDev/Server/src/UnitTesting/TestServiceFactory.cpp
Log:
Implement MapGuide RFC 186

Fixes #772

Merged revision(s) 10023-10025 from sandbox/jng/basic_label_justification:

#772: Fix up element documentation
#772: Add basic stylization support for justification of labels. This support already existed in the rendering/stylization engine. The justification setting simply never surfaced to any supported element in the current Layer Definition XML schema, so it always defaulted to left justification. This setting will be most impactful when dealing with multi-line feature labels where such a setting becomes important.

New rendering service tests have been added to exercise the various label justification settings. Manually inspecting the rendered results verifies the new justification setting is being respected.

Since we're here, we are also cleaning up the current v4.0.0 schema by making the previously introduced IncludeBoundsForSelectedFeatures element optional.


Index: trunk/MgDev
===================================================================
--- trunk/MgDev	2023-02-04 14:00:40 UTC (rev 10025)
+++ trunk/MgDev	2023-02-09 10:44:17 UTC (rev 10026)

Property changes on: trunk/MgDev
___________________________________________________________________
Modified: svn:mergeinfo
## -9,6 +9,7 ##
 /sandbox/adsk/3.2o.AIMS:9135-9140,9146
 /sandbox/adsk/3.2p:9254
 /sandbox/adsk/trunk:9866-9867,9871-9873,9875-9881,9908
+/sandbox/jng/basic_label_justification:10023-10025
 /sandbox/jng/catch2:9649-9676
 /sandbox/jng/clean_json:8818-9180
 /sandbox/jng/cmake_v2:9259-9317
Modified: trunk/MgDev/Common/MdfModel/TextSymbol.cpp
===================================================================
--- trunk/MgDev/Common/MdfModel/TextSymbol.cpp	2023-02-04 14:00:40 UTC (rev 10025)
+++ trunk/MgDev/Common/MdfModel/TextSymbol.cpp	2023-02-09 10:44:17 UTC (rev 10026)
@@ -44,6 +44,7 @@
     this->m_strBold = L"false"; // NOXLATE
     this->m_strItalic = L"false"; // NOXLATE
     this->m_strUnderlined = L"false"; // NOXLATE
+    this->m_strLabelJustification = L"'Left'"; //NOXLATE
 #ifdef MG_ZERO_SCALELIMIT
     this->m_dScaleLimit = 0.0;
 #else
@@ -245,6 +246,33 @@
 }
 
 //-------------------------------------------------------------------------
+// PURPOSE: Accessor method for the LabelJustification property in this
+//          TextSymbol. LabelJustification is of type Expression:String,
+//          which is an expression that evaluates to the text representation
+//          of a member of the enum RS_Justify.
+// RETURNS: The string representation of the Expression:String. Default is
+//          "Left".
+//-------------------------------------------------------------------------
+const MdfString& TextSymbol::GetLabelJustification() const
+{
+    return this->m_strLabelJustification;
+}
+
+//-------------------------------------------------------------------------
+// PURPOSE: Accessor method for the LabelJustification property in this
+//          TextSymbol. LabelJustification is of type Expression:String,
+//          which is an expression that evaluates to the text representation
+//          of a member of the enum RS_Justify.
+// PARAMETERS:
+//          strLabelJustification - The string representation of the
+//                              Expression:String.
+//-------------------------------------------------------------------------
+void TextSymbol::SetLabelJustification(const MdfString& strLabelJustification)
+{
+    this->m_strLabelJustification = strLabelJustification;
+}
+
+//-------------------------------------------------------------------------
 // PURPOSE: Accessor method for the Bold property in this TextSymbol.
 //          The property is of type Expression:Boolean, which is an
 //          expression that evaluates to a bool for a given feature.

Modified: trunk/MgDev/Common/MdfModel/TextSymbol.h
===================================================================
--- trunk/MgDev/Common/MdfModel/TextSymbol.h	2023-02-04 14:00:40 UTC (rev 10025)
+++ trunk/MgDev/Common/MdfModel/TextSymbol.h	2023-02-09 10:44:17 UTC (rev 10026)
@@ -94,6 +94,10 @@
         const MdfString& GetVerticalAlignment() const;
         void SetVerticalAlignment(const MdfString& strVrtAlignment);
 
+        // Property : LabelJustification
+        const MdfString& GetLabelJustification() const;
+        void SetLabelJustification(const MdfString& strLabelJustification);
+
         // Property : Bold  Type : Expression:Boolean
         const MdfString& GetBold() const;
         void SetBold(const MdfString& strBoldExpr);
@@ -144,6 +148,9 @@
         // The Expression:enum string representation for the vertical orientation.
         MdfString m_strVrtAlignment;
 
+        // The Expression:enum string representation for the label justification.
+        MdfString m_strLabelJustification;
+
         // The Expression:Boolean string representation for Bold style.
         MdfString m_strBold;
 

Modified: trunk/MgDev/Common/MdfParser/IOLabel.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOLabel.cpp	2023-02-04 14:00:40 UTC (rev 10025)
+++ trunk/MgDev/Common/MdfParser/IOLabel.cpp	2023-02-09 10:44:17 UTC (rev 10026)
@@ -48,7 +48,8 @@
 ELEM_MAP_ENTRY(19, Underlined);
 ELEM_MAP_ENTRY(20, AdvancedPlacement);
 ELEM_MAP_ENTRY(21, ScaleLimit);
-ELEM_MAP_ENTRY(22, ExtendedData1);
+ELEM_MAP_ENTRY(22, LabelJustification);
+ELEM_MAP_ENTRY(23, ExtendedData1);
 
 
 IOLabel::IOLabel(Version& version) : SAX2ElementHandler(version)
@@ -167,6 +168,10 @@
             symbol->SetVerticalAlignment(ch);
         break;
 
+    case eLabelJustification:
+        symbol->SetLabelJustification(ch);
+        break;
+
     case eBold:
         symbol->SetBold(ch);
         break;
@@ -298,6 +303,14 @@
             fd << endStr(sVerticalAlignment) << std::endl;
         }
 
+        // Property: LabelJustification
+        if (symbol->GetLabelJustification() != L"'Left'") // NOXLATE
+        {
+            fd << tab.tab() << startStr(sLabelJustification);
+            fd << EncodeString(symbol->GetLabelJustification());
+            fd << endStr(sLabelJustification) << std::endl;
+        }
+
         // Property: Bold
         if (wstrToBool(symbol->GetBold().c_str()))
         {

Modified: trunk/MgDev/Common/Schema/LayerDefinition-4.0.0.xsd
===================================================================
--- trunk/MgDev/Common/Schema/LayerDefinition-4.0.0.xsd	2023-02-04 14:00:40 UTC (rev 10025)
+++ trunk/MgDev/Common/Schema/LayerDefinition-4.0.0.xsd	2023-02-09 10:44:17 UTC (rev 10026)
@@ -124,7 +124,7 @@
               <xs:documentation>A boolean FDO expression that specifies which features to return.  No filter means pass all features through.</xs:documentation>
             </xs:annotation>
           </xs:element>
-          <xs:element name="IncludeBoundsForSelectedFeatures" type="xs:boolean" default="true">
+          <xs:element name="IncludeBoundsForSelectedFeatures" type="xs:boolean" default="true" minOccurs="0">
             <xs:annotation>
               <xs:documentation>Controls whether bounding box data is included with selected features when selecting from this layer</xs:documentation>
             </xs:annotation>
@@ -601,6 +601,11 @@
               </xs:sequence>
             </xs:complexType>
           </xs:element>
+          <xs:element name="LabelJustification" type="xs:string" default="'Left'" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>A string FDO expression for the label justification.  Must evaluate to one of the 'Left', 'Right', 'Center' or 'Justify' (which is the same as 'Left').</xs:documentation>
+            </xs:annotation>
+          </xs:element>
           <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
         </xs:sequence>
       </xs:extension>

Modified: trunk/MgDev/Common/Stylization/GeometryAdapter.cpp
===================================================================
--- trunk/MgDev/Common/Stylization/GeometryAdapter.cpp	2023-02-04 14:00:40 UTC (rev 10025)
+++ trunk/MgDev/Common/Stylization/GeometryAdapter.cpp	2023-02-09 10:44:17 UTC (rev 10026)
@@ -486,6 +486,58 @@
 
 
 //////////////////////////////////////////////////////////////////////////////
+bool GeometryAdapter::ConvertLabelJustification(const MdfModel::MdfString& justify, RS_Justify& rsjustify)
+{
+    // first check if the expression is a constant - in that case it can be cached
+    if (justify == L"'Center'")
+    {
+        rsjustify = RS_Justify_Center;
+        return true;
+    }
+    else if (justify == L"'Justify'")
+    {
+        rsjustify = RS_Justify_Justify;
+        return true;
+    }
+    else if (justify == L"'Left'")
+    {
+        rsjustify = RS_Justify_Left;
+        return true;
+    }
+    else if (justify == L"'Right'")
+    {
+        rsjustify = RS_Justify_Right;
+        return true;
+    }
+
+    // Otherwise we need to evaluate as expression.  If it is an expression,
+    // the value will come back without quotes.
+    RS_String str;
+    /*bool dummy =*/ EvalString(justify, str);
+
+    if (str == L"'Center'")
+    {
+        rsjustify = RS_Justify_Center;
+    }
+    else if (str == L"'Justify'")
+    {
+        rsjustify = RS_Justify_Justify;
+    }
+    else if (str == L"'Left'")
+    {
+        rsjustify = RS_Justify_Left;
+    }
+    else if (str == L"'Right'")
+    {
+        rsjustify = RS_Justify_Right;
+    }
+
+    // not cacheable
+    return false;
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
 bool GeometryAdapter::ConvertSymbol(MdfModel::Symbol* symbol, RS_MarkerDef& mdef)
 {
     SymbolVisitor::eSymbolType type = SymbolVisitor::DetermineSymbolType(symbol);
@@ -671,6 +723,9 @@
     cacheable = ConvertTextHAlign(text->GetHorizontalAlignment(), tdef.halign()) && cacheable;
     cacheable = ConvertTextVAlign(text->GetVerticalAlignment(), tdef.valign()) && cacheable;
 
+    // justification
+    cacheable = ConvertLabelJustification(text->GetLabelJustification(), tdef.justify()) && cacheable;
+
     return cacheable;
 }
 

Modified: trunk/MgDev/Common/Stylization/GeometryAdapter.h
===================================================================
--- trunk/MgDev/Common/Stylization/GeometryAdapter.h	2023-02-04 14:00:40 UTC (rev 10025)
+++ trunk/MgDev/Common/Stylization/GeometryAdapter.h	2023-02-09 10:44:17 UTC (rev 10026)
@@ -54,6 +54,7 @@
     STYLIZATION_API bool ConvertFill      (MdfModel::AreaSymbolization2D* fill, RS_FillStyle&  rsfill);
     STYLIZATION_API bool ConvertTextHAlign(const MdfModel::MdfString&   halign, RS_HAlignment& rshalign);
     STYLIZATION_API bool ConvertTextVAlign(const MdfModel::MdfString&   valign, RS_VAlignment& rsvalign);
+    STYLIZATION_API bool ConvertLabelJustification(const MdfModel::MdfString& justify, RS_Justify& rsjustify);
     STYLIZATION_API bool ConvertSymbol    (MdfModel::Symbol*            symbol, RS_MarkerDef&  mdef);
     STYLIZATION_API bool ConvertTextDef   (MdfModel::TextSymbol*          text, RS_TextDef&    tdef);
 

Modified: trunk/MgDev/Server/src/UnitTesting/TestRenderingService.cpp
===================================================================
--- trunk/MgDev/Server/src/UnitTesting/TestRenderingService.cpp	2023-02-04 14:00:40 UTC (rev 10025)
+++ trunk/MgDev/Server/src/UnitTesting/TestRenderingService.cpp	2023-02-09 10:44:17 UTC (rev 10026)
@@ -114,6 +114,28 @@
     return map;
 }
 
+static MgMap* CreateLabelJustifyMap(CREFSTRING justify)
+{
+    Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
+    Ptr<MgSiteConnection> m_siteConnection = TestServiceFactory::CreateSiteConnection(svcSite);
+
+    STRING sMdfId = L"Library://UnitTests/Maps/LabelJustify" + justify + L".MapDefinition";
+
+    Ptr<MgResourceIdentifier> mdfres = new MgResourceIdentifier(sMdfId);
+    MgMap* map = new MgMap(m_siteConnection);
+    map->Create(mdfres, mdfres->GetName());
+
+    Ptr<MgCoordinate> coordNewCenter = new MgCoordinateXY(-87.733253, 43.746199);
+    Ptr<MgPoint> ptNewCenter = new MgPoint(coordNewCenter);
+    map->SetViewCenter(ptNewCenter);
+    map->SetViewScale(75000.0);
+    map->SetDisplayDpi(96);
+    map->SetDisplayWidth(1024);
+    map->SetDisplayHeight(1024);
+
+    return map;
+}
+
 static MgMap* CreateTestTiledMap()
 {
     Ptr<MgServerSiteService> svcSite = TestServiceFactory::CreateSiteService();
@@ -1229,6 +1251,60 @@
     }
 }
 
+static void TestCase_LabelJustifyLeft(CREFSTRING imageFormat, CREFSTRING extension)
+{
+    try
+    {
+        Ptr<MgRenderingService> svcRendering = TestServiceFactory::CreateRenderingService();
+        Ptr<MgMap> map = CreateLabelJustifyMap(L"Left");
+        Ptr<MgByteReader> image = svcRendering->RenderMap(map, nullptr, imageFormat);
+
+        image->ToFile(GetPath(L"../UnitTestFiles/LabelJustifyLeft", imageFormat, extension));
+    }
+    catch (MgException* e)
+    {
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+        SAFE_RELEASE(e);
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+    }
+}
+
+static void TestCase_LabelJustifyRight(CREFSTRING imageFormat, CREFSTRING extension)
+{
+    try
+    {
+        Ptr<MgRenderingService> svcRendering = TestServiceFactory::CreateRenderingService();
+        Ptr<MgMap> map = CreateLabelJustifyMap(L"Right");
+        Ptr<MgByteReader> image = svcRendering->RenderMap(map, nullptr, imageFormat);
+
+        image->ToFile(GetPath(L"../UnitTestFiles/LabelJustifyRight", imageFormat, extension));
+    }
+    catch (MgException* e)
+    {
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+        SAFE_RELEASE(e);
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+    }
+}
+
+static void TestCase_LabelJustifyCenter(CREFSTRING imageFormat, CREFSTRING extension)
+{
+    try
+    {
+        Ptr<MgRenderingService> svcRendering = TestServiceFactory::CreateRenderingService();
+        Ptr<MgMap> map = CreateLabelJustifyMap(L"Center");
+        Ptr<MgByteReader> image = svcRendering->RenderMap(map, nullptr, imageFormat);
+
+        image->ToFile(GetPath(L"../UnitTestFiles/LabelJustifyCenter", imageFormat, extension));
+    }
+    catch (MgException* e)
+    {
+        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+        SAFE_RELEASE(e);
+        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+    }
+}
+
 static void TestCase_RenderMetatile(CREFSTRING imageFormat, CREFSTRING extension)
 {
     try
@@ -1665,6 +1741,21 @@
 TEST_CASE("RenderXYZMetatileJPG_4x", "[RenderingService]") { TestCase_RenderXYZMetatile(L"JPG", L"jpg", 4); }
 TEST_CASE("RenderXYZMetatileGIF_4x", "[RenderingService]") { TestCase_RenderXYZMetatile(L"GIF", L"gif", 4); }
 
+TEST_CASE("RenderLabelJustifyLeftPNG", "[RenderingService]") { TestCase_LabelJustifyLeft(L"PNG", L"png"); }
+TEST_CASE("RenderLabelJustifyLeftPNG8", "[RenderingService]") { TestCase_LabelJustifyLeft(L"PNG8", L"png"); }
+TEST_CASE("RenderLabelJustifyLeftJPG", "[RenderingService]") { TestCase_LabelJustifyLeft(L"JPG", L"jpg"); }
+TEST_CASE("RenderLabelJustifyLeftGIF", "[RenderingService]") { TestCase_LabelJustifyLeft(L"GIF", L"gif"); }
+
+TEST_CASE("RenderLabelJustifyRightPNG", "[RenderingService]") { TestCase_LabelJustifyRight(L"PNG", L"png"); }
+TEST_CASE("RenderLabelJustifyRightPNG8", "[RenderingService]") { TestCase_LabelJustifyRight(L"PNG8", L"png"); }
+TEST_CASE("RenderLabelJustifyRightJPG", "[RenderingService]") { TestCase_LabelJustifyRight(L"JPG", L"jpg"); }
+TEST_CASE("RenderLabelJustifyRightGIF", "[RenderingService]") { TestCase_LabelJustifyRight(L"GIF", L"gif"); }
+
+TEST_CASE("RenderLabelJustifyCenterPNG", "[RenderingService]") { TestCase_LabelJustifyCenter(L"PNG", L"png"); }
+TEST_CASE("RenderLabelJustifyCenterPNG8", "[RenderingService]") { TestCase_LabelJustifyCenter(L"PNG8", L"png"); }
+TEST_CASE("RenderLabelJustifyCenterJPG", "[RenderingService]") { TestCase_LabelJustifyCenter(L"JPG", L"jpg"); }
+TEST_CASE("RenderLabelJustifyCenterGIF", "[RenderingService]") { TestCase_LabelJustifyCenter(L"GIF", L"gif"); }
+
 TEST_CASE("RenderMapBigPNG", "[RenderingService_Stress]")
 {
     try

Modified: trunk/MgDev/Server/src/UnitTesting/TestServiceFactory.cpp
===================================================================
--- trunk/MgDev/Server/src/UnitTesting/TestServiceFactory.cpp	2023-02-04 14:00:40 UTC (rev 10025)
+++ trunk/MgDev/Server/src/UnitTesting/TestServiceFactory.cpp	2023-02-09 10:44:17 UTC (rev 10026)
@@ -654,6 +654,21 @@
                 Ptr<MgByteReader> mdfrdr1 = mdfsrc1->GetReader();
                 svcResource->SetResource(mapres1, mdfrdr1, nullptr);
 
+                Ptr<MgResourceIdentifier> mapres22 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LabelJustifyLeft.MapDefinition");
+                Ptr<MgByteSource> mdfsrc22 = new MgByteSource(L"../UnitTestFiles/UT_LabelJustifyLeft.mdf", false);
+                Ptr<MgByteReader> mdfrdr22 = mdfsrc22->GetReader();
+                svcResource->SetResource(mapres22, mdfrdr22, nullptr);
+
+                Ptr<MgResourceIdentifier> mapres23 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LabelJustifyRight.MapDefinition");
+                Ptr<MgByteSource> mdfsrc23 = new MgByteSource(L"../UnitTestFiles/UT_LabelJustifyRight.mdf", false);
+                Ptr<MgByteReader> mdfrdr23 = mdfsrc23->GetReader();
+                svcResource->SetResource(mapres23, mdfrdr23, nullptr);
+
+                Ptr<MgResourceIdentifier> mapres24 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LabelJustifyCenter.MapDefinition");
+                Ptr<MgByteSource> mdfsrc24 = new MgByteSource(L"../UnitTestFiles/UT_LabelJustifyCenter.mdf", false);
+                Ptr<MgByteReader> mdfrdr24 = mdfsrc24->GetReader();
+                svcResource->SetResource(mapres24, mdfrdr24, nullptr);
+
                 // publish tile set
                 Ptr<MgResourceIdentifier> tilesetres1 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/XYZ.TileSetDefinition");
                 Ptr<MgByteSource> tsdsrc1 = new MgByteSource(L"../UnitTestFiles/UT_XYZ.tsd", false);
@@ -676,6 +691,21 @@
                 Ptr<MgByteReader> ldfrdr3 = ldfsrc3->GetReader();
                 svcResource->SetResource(ldfres3, ldfrdr3, nullptr);
 
+                Ptr<MgResourceIdentifier> ldfres24 = new MgResourceIdentifier(L"Library://UnitTests/Layers/LabelJustifyLeft.LayerDefinition");
+                Ptr<MgByteSource> ldfsrc24 = new MgByteSource(L"../UnitTestFiles/UT_LabelJustifyLeft.ldf", false);
+                Ptr<MgByteReader> ldfrdr24 = ldfsrc24->GetReader();
+                svcResource->SetResource(ldfres24, ldfrdr24, nullptr);
+
+                Ptr<MgResourceIdentifier> ldfres25 = new MgResourceIdentifier(L"Library://UnitTests/Layers/LabelJustifyRight.LayerDefinition");
+                Ptr<MgByteSource> ldfsrc25 = new MgByteSource(L"../UnitTestFiles/UT_LabelJustifyRight.ldf", false);
+                Ptr<MgByteReader> ldfrdr25 = ldfsrc25->GetReader();
+                svcResource->SetResource(ldfres25, ldfrdr25, nullptr);
+
+                Ptr<MgResourceIdentifier> ldfres26 = new MgResourceIdentifier(L"Library://UnitTests/Layers/LabelJustifyCenter.LayerDefinition");
+                Ptr<MgByteSource> ldfsrc26 = new MgByteSource(L"../UnitTestFiles/UT_LabelJustifyCenter.ldf", false);
+                Ptr<MgByteReader> ldfrdr26 = ldfsrc26->GetReader();
+                svcResource->SetResource(ldfres26, ldfrdr26, nullptr);
+
                 // publish the feature sources
                 Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/HydrographicPolygons.FeatureSource");
                 Ptr<MgByteSource> fssrc1 = new MgByteSource(L"../UnitTestFiles/UT_HydrographicPolygons.fs", false);
@@ -1936,6 +1966,15 @@
             Ptr<MgResourceIdentifier> mapres1 = new MgResourceIdentifier(L"Library://UnitTests/Maps/Sheboygan.MapDefinition");
             svcResource->DeleteResource(mapres1);
 
+            Ptr<MgResourceIdentifier> mapres22 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LabelJustifyLeft.MapDefinition");
+            svcResource->DeleteResource(mapres22);
+
+            Ptr<MgResourceIdentifier> mapres23 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LabelJustifyRight.MapDefinition");
+            svcResource->DeleteResource(mapres23);
+
+            Ptr<MgResourceIdentifier> mapres24 = new MgResourceIdentifier(L"Library://UnitTests/Maps/LabelJustifyCenter.MapDefinition");
+            svcResource->DeleteResource(mapres24);
+
             // delete tile set
             Ptr<MgResourceIdentifier> tilesetres1 = new MgResourceIdentifier(L"Library://UnitTests/TileSets/XYZ.TileSetDefinition");
             svcResource->DeleteResource(tilesetres1);
@@ -1950,6 +1989,15 @@
             Ptr<MgResourceIdentifier> ldfres3 = new MgResourceIdentifier(L"Library://UnitTests/Layers/Parcels.LayerDefinition");
             svcResource->DeleteResource(ldfres3);
 
+            Ptr<MgResourceIdentifier> ldfres24 = new MgResourceIdentifier(L"Library://UnitTests/Layers/LabelJustifyLeft.LayerDefinition");
+            svcResource->DeleteResource(ldfres24);
+
+            Ptr<MgResourceIdentifier> ldfres25 = new MgResourceIdentifier(L"Library://UnitTests/Layers/LabelJustifyRight.LayerDefinition");
+            svcResource->DeleteResource(ldfres25);
+
+            Ptr<MgResourceIdentifier> ldfres26 = new MgResourceIdentifier(L"Library://UnitTests/Layers/LabelJustifyCenter.LayerDefinition");
+            svcResource->DeleteResource(ldfres26);
+
             // delete the feature sources
             Ptr<MgResourceIdentifier> fsres1 = new MgResourceIdentifier(L"Library://UnitTests/Data/HydrographicPolygons.FeatureSource");
             svcResource->DeleteResource(fsres1);

Copied: trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyCenter.ldf (from rev 10025, sandbox/jng/basic_label_justification/UnitTest/TestData/Symbology/UT_LabelJustifyCenter.ldf)
===================================================================
--- trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyCenter.ldf	                        (rev 0)
+++ trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyCenter.ldf	2023-02-09 10:44:17 UTC (rev 10026)
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="4.0.0" xsi:noNamespaceSchemaLocation="LayerDefinition-4.0.0.xsd">
+  <VectorLayerDefinition>
+    <ResourceId>Library://UnitTests/Data/VotingDistricts.FeatureSource</ResourceId>
+    <FeatureName>Default:VotingDistricts</FeatureName>
+    <FeatureNameType>FeatureClass</FeatureNameType>
+    <Geometry>Geometry</Geometry>
+    <VectorScaleRange>
+      <MinScale>10000</MinScale>
+      <AreaTypeStyle>
+        <AreaRule>
+          <LegendLabel />
+          <Label>
+            <Unit>Points</Unit>
+            <SizeContext>DeviceUnits</SizeContext>
+            <SizeX>0</SizeX>
+            <SizeY>10</SizeY>
+            <Text>concat('District\n', ID)</Text>
+            <FontName>Verdana</FontName>
+            <ForegroundColor>FF625231</ForegroundColor>
+            <BackgroundColor>FFFFFFFF</BackgroundColor>
+            <BackgroundStyle>Transparent</BackgroundStyle>
+            <LabelJustification>'Center'</LabelJustification>
+          </Label>
+          <AreaSymbolization2D>
+            <Fill>
+              <FillPattern>None</FillPattern>
+              <ForegroundColor>00FFFFFF</ForegroundColor>
+              <BackgroundColor>FF000000</BackgroundColor>
+            </Fill>
+            <Stroke>
+              <LineStyle>Solid</LineStyle>
+              <Thickness>0</Thickness>
+              <Color>FFA68B53</Color>
+              <Unit>Inches</Unit>
+              <SizeContext>DeviceUnits</SizeContext>
+            </Stroke>
+          </AreaSymbolization2D>
+        </AreaRule>
+      </AreaTypeStyle>
+    </VectorScaleRange>
+  </VectorLayerDefinition>
+</LayerDefinition>
\ No newline at end of file

Copied: trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyCenter.mdf (from rev 10025, sandbox/jng/basic_label_justification/UnitTest/TestData/Symbology/UT_LabelJustifyCenter.mdf)
===================================================================
--- trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyCenter.mdf	                        (rev 0)
+++ trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyCenter.mdf	2023-02-09 10:44:17 UTC (rev 10026)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<MapDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="MapDefinition-1.0.0.xsd">
+  <Name>New Map</Name>
+  <CoordinateSystem>GEOGCS["WGS84 Lat/Long's, Degrees, -180 ==> +180",DATUM["D_WGS_1984",SPHEROID["World_Geodetic_System_of_1984",6378137,298.257222932867]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]</CoordinateSystem>
+  <Extents>
+    <MinX>-87.76498623679663</MinX>
+    <MaxX>-87.69551753753811</MaxX>
+    <MinY>43.691398447253356</MinY>
+    <MaxY>43.7975198255836</MaxY>
+  </Extents>
+  <BackgroundColor>ffffffff</BackgroundColor>
+  <MapLayer>
+    <Name>Districts</Name>
+    <ResourceId>Library://UnitTests/Layers/LabelJustifyCenter.LayerDefinition</ResourceId>
+    <Selectable>true</Selectable>
+    <ShowInLegend>true</ShowInLegend>
+    <LegendLabel>Districts</LegendLabel>
+    <ExpandInLegend>true</ExpandInLegend>
+    <Visible>true</Visible>
+    <Group />
+  </MapLayer>
+</MapDefinition>
\ No newline at end of file

Copied: trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyLeft.ldf (from rev 10025, sandbox/jng/basic_label_justification/UnitTest/TestData/Symbology/UT_LabelJustifyLeft.ldf)
===================================================================
--- trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyLeft.ldf	                        (rev 0)
+++ trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyLeft.ldf	2023-02-09 10:44:17 UTC (rev 10026)
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="4.0.0" xsi:noNamespaceSchemaLocation="LayerDefinition-4.0.0.xsd">
+  <VectorLayerDefinition>
+    <ResourceId>Library://UnitTests/Data/VotingDistricts.FeatureSource</ResourceId>
+    <FeatureName>Default:VotingDistricts</FeatureName>
+    <FeatureNameType>FeatureClass</FeatureNameType>
+    <Geometry>Geometry</Geometry>
+    <VectorScaleRange>
+      <MinScale>10000</MinScale>
+      <AreaTypeStyle>
+        <AreaRule>
+          <LegendLabel />
+          <Label>
+            <Unit>Points</Unit>
+            <SizeContext>DeviceUnits</SizeContext>
+            <SizeX>0</SizeX>
+            <SizeY>10</SizeY>
+            <Text>concat('District\n', ID)</Text>
+            <FontName>Verdana</FontName>
+            <ForegroundColor>FF625231</ForegroundColor>
+            <BackgroundColor>FFFFFFFF</BackgroundColor>
+            <BackgroundStyle>Transparent</BackgroundStyle>
+            <LabelJustification>'Left'</LabelJustification>
+          </Label>
+          <AreaSymbolization2D>
+            <Fill>
+              <FillPattern>None</FillPattern>
+              <ForegroundColor>00FFFFFF</ForegroundColor>
+              <BackgroundColor>FF000000</BackgroundColor>
+            </Fill>
+            <Stroke>
+              <LineStyle>Solid</LineStyle>
+              <Thickness>0</Thickness>
+              <Color>FFA68B53</Color>
+              <Unit>Inches</Unit>
+              <SizeContext>DeviceUnits</SizeContext>
+            </Stroke>
+          </AreaSymbolization2D>
+        </AreaRule>
+      </AreaTypeStyle>
+    </VectorScaleRange>
+  </VectorLayerDefinition>
+</LayerDefinition>
\ No newline at end of file

Copied: trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyLeft.mdf (from rev 10025, sandbox/jng/basic_label_justification/UnitTest/TestData/Symbology/UT_LabelJustifyLeft.mdf)
===================================================================
--- trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyLeft.mdf	                        (rev 0)
+++ trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyLeft.mdf	2023-02-09 10:44:17 UTC (rev 10026)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<MapDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="MapDefinition-1.0.0.xsd">
+  <Name>New Map</Name>
+  <CoordinateSystem>GEOGCS["WGS84 Lat/Long's, Degrees, -180 ==> +180",DATUM["D_WGS_1984",SPHEROID["World_Geodetic_System_of_1984",6378137,298.257222932867]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]</CoordinateSystem>
+  <Extents>
+    <MinX>-87.76498623679663</MinX>
+    <MaxX>-87.69551753753811</MaxX>
+    <MinY>43.691398447253356</MinY>
+    <MaxY>43.7975198255836</MaxY>
+  </Extents>
+  <BackgroundColor>ffffffff</BackgroundColor>
+  <MapLayer>
+    <Name>Districts</Name>
+    <ResourceId>Library://UnitTests/Layers/LabelJustifyLeft.LayerDefinition</ResourceId>
+    <Selectable>true</Selectable>
+    <ShowInLegend>true</ShowInLegend>
+    <LegendLabel>Districts</LegendLabel>
+    <ExpandInLegend>true</ExpandInLegend>
+    <Visible>true</Visible>
+    <Group />
+  </MapLayer>
+</MapDefinition>
\ No newline at end of file

Copied: trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyRight.ldf (from rev 10025, sandbox/jng/basic_label_justification/UnitTest/TestData/Symbology/UT_LabelJustifyRight.ldf)
===================================================================
--- trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyRight.ldf	                        (rev 0)
+++ trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyRight.ldf	2023-02-09 10:44:17 UTC (rev 10026)
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="4.0.0" xsi:noNamespaceSchemaLocation="LayerDefinition-4.0.0.xsd">
+  <VectorLayerDefinition>
+    <ResourceId>Library://UnitTests/Data/VotingDistricts.FeatureSource</ResourceId>
+    <FeatureName>Default:VotingDistricts</FeatureName>
+    <FeatureNameType>FeatureClass</FeatureNameType>
+    <Geometry>Geometry</Geometry>
+    <VectorScaleRange>
+      <MinScale>10000</MinScale>
+      <AreaTypeStyle>
+        <AreaRule>
+          <LegendLabel />
+          <Label>
+            <Unit>Points</Unit>
+            <SizeContext>DeviceUnits</SizeContext>
+            <SizeX>0</SizeX>
+            <SizeY>10</SizeY>
+            <Text>concat('District\n', ID)</Text>
+            <FontName>Verdana</FontName>
+            <ForegroundColor>FF625231</ForegroundColor>
+            <BackgroundColor>FFFFFFFF</BackgroundColor>
+            <BackgroundStyle>Transparent</BackgroundStyle>
+            <LabelJustification>'Right'</LabelJustification>
+          </Label>
+          <AreaSymbolization2D>
+            <Fill>
+              <FillPattern>None</FillPattern>
+              <ForegroundColor>00FFFFFF</ForegroundColor>
+              <BackgroundColor>FF000000</BackgroundColor>
+            </Fill>
+            <Stroke>
+              <LineStyle>Solid</LineStyle>
+              <Thickness>0</Thickness>
+              <Color>FFA68B53</Color>
+              <Unit>Inches</Unit>
+              <SizeContext>DeviceUnits</SizeContext>
+            </Stroke>
+          </AreaSymbolization2D>
+        </AreaRule>
+      </AreaTypeStyle>
+    </VectorScaleRange>
+  </VectorLayerDefinition>
+</LayerDefinition>
\ No newline at end of file

Copied: trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyRight.mdf (from rev 10025, sandbox/jng/basic_label_justification/UnitTest/TestData/Symbology/UT_LabelJustifyRight.mdf)
===================================================================
--- trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyRight.mdf	                        (rev 0)
+++ trunk/MgDev/UnitTest/TestData/Symbology/UT_LabelJustifyRight.mdf	2023-02-09 10:44:17 UTC (rev 10026)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<MapDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="MapDefinition-1.0.0.xsd">
+  <Name>New Map</Name>
+  <CoordinateSystem>GEOGCS["WGS84 Lat/Long's, Degrees, -180 ==> +180",DATUM["D_WGS_1984",SPHEROID["World_Geodetic_System_of_1984",6378137,298.257222932867]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]</CoordinateSystem>
+  <Extents>
+    <MinX>-87.76498623679663</MinX>
+    <MaxX>-87.69551753753811</MaxX>
+    <MinY>43.691398447253356</MinY>
+    <MaxY>43.7975198255836</MaxY>
+  </Extents>
+  <BackgroundColor>ffffffff</BackgroundColor>
+  <MapLayer>
+    <Name>Districts</Name>
+    <ResourceId>Library://UnitTests/Layers/LabelJustifyRight.LayerDefinition</ResourceId>
+    <Selectable>true</Selectable>
+    <ShowInLegend>true</ShowInLegend>
+    <LegendLabel>Districts</LegendLabel>
+    <ExpandInLegend>true</ExpandInLegend>
+    <Visible>true</Visible>
+    <Group />
+  </MapLayer>
+</MapDefinition>
\ No newline at end of file



More information about the mapguide-commits mailing list