[mapguide-commits] r5164 - in trunk/MgDev: . Common/CoordinateSystem Common/Geometry Common/Geometry/CoordinateSystem Oem Web/src/DotNetUnmanagedApi/Geometry

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Mon Sep 20 20:20:41 EDT 2010


Author: NormOlsen
Date: 2010-09-21 00:20:41 +0000 (Tue, 21 Sep 2010)
New Revision: 5164

Added:
   trunk/MgDev/Common/CoordinateSystem/CoordSysDictionaryBase.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysDictionaryBase.h
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.h
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.h
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.h
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPath.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPath.h
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.h
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathElement.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathElement.h
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDef.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDef.h
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.h
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefParams.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefParams.h
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.h
   trunk/MgDev/Common/CoordinateSystem/CoordSysMacro.h
   trunk/MgDev/Common/CoordinateSystem/namestruct.cpp
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformDefParams.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformationMethod.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticInterpolationTransformDefParams.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformDefParams.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformationMethod.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPath.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathDictionary.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathElement.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDef.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefDictionary.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefParams.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefType.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFile.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFileFormat.h
Modified:
   trunk/MgDev/
   trunk/MgDev/Common/CoordinateSystem/CoordSysCatalog.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysCatalog.h
   trunk/MgDev/Common/CoordinateSystem/CoordSysCategory.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysDatum.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysDatum.h
   trunk/MgDev/Common/CoordinateSystem/CoordSysDatumDictionary.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysDictionary.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysEllipsoid.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysEllipsoid.h
   trunk/MgDev/Common/CoordinateSystem/CoordSysEllipsoidDictionary.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysEnum.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysEnumCategory.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysEnumCoordinateSystemInCategory.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformation.cpp
   trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformation.h
   trunk/MgDev/Common/CoordinateSystem/CoordSysMathComparator.cpp
   trunk/MgDev/Common/CoordinateSystem/MentorDictionary.cpp
   trunk/MgDev/Common/CoordinateSystem/MentorDictionary.h
   trunk/MgDev/Common/CoordinateSystem/MentorUtil.cpp
   trunk/MgDev/Common/CoordinateSystem/MentorUtil.h
   trunk/MgDev/Common/CoordinateSystem/namestruct.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemCatalog.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemDatum.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemEllipsoid.h
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemFactory.cpp
   trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformation.h
   trunk/MgDev/Common/Geometry/Geometry.vcproj
   trunk/MgDev/Common/Geometry/GeometryClassId.h
   trunk/MgDev/Common/Geometry/GeometryCommon.h
   trunk/MgDev/Oem/
   trunk/MgDev/Web/src/DotNetUnmanagedApi/Geometry/GeometryApiGen.xml
   trunk/MgDev/Web/src/DotNetUnmanagedApi/Geometry/GeometryConstants.xml
Log:
Merging the sandbox RFC94 to the trunk
http://svn.osgeo.org/mapguide/sandbox/rfc94/

Short term impact to the coordinate system transformations involving grid file transformations, meaning that such transformations will not work until the end of the CsMap implementation of its RFC2
The transformations involved are ATS77, RGF93 and Japan. 

Everything would get back to normal by the end of September.



Property changes on: trunk/MgDev
___________________________________________________________________
Added: svn:mergeinfo
   + /sandbox/rfc94:5099-5163

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysCatalog.cpp
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysCatalog.cpp	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysCatalog.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -18,6 +18,7 @@
 #include "GeometryCommon.h"
 #include "CoordSysCommon.h"
 #include "CriticalSection.h"
+#include "CoordSysUtil.h"                   //for Convert_Wide_To_Ascii, CsDictionaryOpenMode
 
 #include "CoordSysCategory.h"               //for CCategoryName
 #include "CoordSysTransform.h"              //for CCoordinateSystemTransform
@@ -25,9 +26,18 @@
 #include "CoordSysDictionary.h"             //for CCoordinateSystemDictionary
 #include "CoordSysEnumDatum.h"              //for CCoordinateSystemEnumDatum
 #include "CoordSysEnumEllipsoid.h"          //for CCoordinateSystemEnumEllipsoid
+#include "CoordSysDictionaryBase.h"                 //for CCoordinateSystemDictionaryBase
+#include "CoordSysGeodeticPath.h"                   //for CCoordinateSystemGeodeticPath
+#include "CoordSysGeodeticTransformDefParams.h"     //for CCoordinateSystemGeodeticTransformDefParams
+#include "CoordSysGeodeticAnalyticalTransformDefParams.h"
+#include "CoordSysGeodeticInterpolationTransformDefParams.h"
+#include "CoordSysGeodeticMultipleRegressionTransformDefParams.h"
+#include "CoordSysGeodeticTransformGridFile.h"
+#include "CoordSysGeodeticTransformDef.h"           //for CCoordinateSystemGeodeticTransformDef
 #include "CoordSysDatumDictionary.h"        //for CCoordinateSystemDatumDictionary
 #include "CoordSysEllipsoidDictionary.h"    //for CCoordinateSystemEllipsoidDictionary
-#include "CoordSysUtil.h"                   //for Convert_Wide_To_Ascii, CsDictionaryOpenMode
+#include "CoordSysGeodeticPathDictionary.h"         //for CCoordinateSystemGeodeticPathDictionary
+#include "CoordSysGeodeticTransformDefDictionary.h" //for CCoordinateSystemGeodeticTransformDefDictionary
 #include "CoordSysCategoryDictionary.h"     //for CCoordinateSystemCategoryDictionary
 #include "CoordSysMathComparator.h"         //for CCoordinateSystemMathComparator
 #include "CoordSysFormatConverter.h"        //for CCoordinateSystemFormatConverter
@@ -40,6 +50,7 @@
 #include "CoordSysGeodeticTransformation.h" //for CCoordinateSystemGeodeticTransformation
 
 #include "csNameMapper.hpp"                 //for csReleaseNameMapper
+#include "cs_map.h"
 
 #ifdef _WIN32
 #include <tchar.h>                          //for _tsplitpath
@@ -65,8 +76,10 @@
     m_pDtDict = new CCoordinateSystemDatumDictionary(this);
     m_pElDict = new CCoordinateSystemEllipsoidDictionary(this);
     m_pCtDict = new CCoordinateSystemCategoryDictionary(this);
+	m_pGpDict = new CCoordinateSystemGeodeticPathDictionary(this);
+    m_pGxDict = new CCoordinateSystemGeodeticTransformDefDictionary(this);
 
-    if (!m_pCsDict || !m_pDtDict || !m_pElDict || !m_pCtDict)
+    if (!m_pCsDict || !m_pDtDict || !m_pElDict || !m_pCtDict || !m_pGpDict || !m_pGxDict)
     {
         throw new MgOutOfMemoryException(L"MgCoordinateSystemCatalog.MgCoordinateSystemCatalog", __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -110,6 +123,8 @@
         m_pDtDict = NULL;
         m_pElDict = NULL;
         m_pCtDict = NULL;
+		m_pGpDict = NULL;
+        m_pGxDict = NULL;
 
         //NOTE: the following behavior happens only in DEBUG if we do not reset the countFlag
         //If an exception is thrown from within the constructor of this MgDisposable derived class
@@ -142,6 +157,8 @@
     m_pDtDict = NULL;
     m_pElDict = NULL;
     m_pCtDict = NULL;
+	m_pGpDict = NULL;
+    m_pGxDict = NULL;
 }
 
 //-----------------------------------------------------------------------------------
@@ -169,6 +186,18 @@
 }
 
 //-----------------------------------------------------------------------------------
+MgCoordinateSystemGeodeticPathDictionary* CCoordinateSystemCatalog::GetGeodeticPathDictionary()
+{
+    return SAFE_ADDREF(m_pGpDict.p);
+}
+
+//-----------------------------------------------------------------------------------
+MgCoordinateSystemGeodeticTransformDefDictionary* CCoordinateSystemCatalog::GetGeodeticTransformDefDictionary()
+{
+    return SAFE_ADDREF(m_pGxDict.p);
+}
+
+//-----------------------------------------------------------------------------------
 STRING CCoordinateSystemCatalog::GetDefaultDictionaryDir()
 {
     STRING sDir;
@@ -277,6 +306,11 @@
     wchar_t* pNewDir=NULL;
     if ((_tcslen(szFname) > 0) || (_tcslen(szExt) > 0))
     {
+		//ABA: don't understand: if a filename or an extension has been found,
+        //we concatenate the filename to the directory + then the extension;
+        //Then, we call makepath() what will give us a full path information incl.
+        //the file name; 
+        //
         //Nope, not properly terminated, need to fix it.
         assert(_tcslen(szDir) + _tcslen(szFname) + _tcslen(szExt) < _MAX_DIR);
         _tcscat(szDir, szFname);
@@ -325,6 +359,8 @@
     STRING sDt=m_pDtDict->GetFileName();
     STRING sEl=m_pElDict->GetFileName();
     STRING sCt=m_pCtDict->GetFileName();
+	STRING sGp=m_pGpDict->GetFileName();
+    STRING sGx=m_pGxDict->GetFileName();
 
     //Set the dictionary file names
     //this will perform a validation of the existence of the files inside the directory
@@ -332,6 +368,8 @@
     m_pDtDict->SetFileName(sDt);
     m_pElDict->SetFileName(sEl);
     m_pCtDict->SetFileName(sCt);
+	m_pGpDict->SetFileName(sGp);
+    m_pGxDict->SetFileName(sGx);
 
     MG_CATCH_AND_THROW(L"MgCoordinateSystemCatalog.SetDictionaryDir")
 }
@@ -349,7 +387,9 @@
         || !m_pCsDict || m_pCsDict->GetFileName().empty()
         || !m_pDtDict || m_pDtDict->GetFileName().empty()
         || !m_pElDict || m_pElDict->GetFileName().empty()
-        || !m_pCtDict || m_pCtDict->GetFileName().empty())
+        || !m_pCtDict || m_pCtDict->GetFileName().empty()
+        || !m_pGpDict || m_pGpDict->GetFileName().empty()
+        || !m_pGxDict || m_pGxDict->GetFileName().empty())
     {
         //Directory hasn't been specified yet.
         throw new MgCoordinateSystemInitializationFailedException(L"MgCoordinateSystemCatalog.AreDictionaryFilesWritable", __LINE__, __WFILE__, NULL, L"MgCoordinateSystemNotReadyException", NULL);
@@ -399,7 +439,29 @@
     {
         return false;
     }
+	
+	sPath=m_pGpDict->GetPath();
+    if (!ValidateFile(
+        sPath.c_str(),          //file name
+        true,                   //must exist
+        false,                  //mustn't be directory
+        true,                   //neeed write access?
+        &reason))
+    {
+        return false;
+    }
 
+    sPath=m_pGxDict->GetPath();
+    if (!ValidateFile(
+        sPath.c_str(),          //file name
+        true,                   //must exist
+        false,                  //mustn't be directory
+        true,                   //neeed write access?
+        &reason))
+    {
+        return false;
+    }
+
     MG_CATCH_AND_THROW(L"MgCoordinateSystemCatalog.AreDictionaryFilesWritable")
     return true;
 }
@@ -420,6 +482,8 @@
     STRING sDt=m_pDtDict->GetDefaultFileName();
     STRING sEl=m_pElDict->GetDefaultFileName();
     STRING sCt=m_pCtDict->GetDefaultFileName();
+	STRING sGp=m_pGpDict->GetDefaultFileName();
+    STRING sGx=m_pGxDict->GetDefaultFileName();
 
     //sets the path to the dictionaries
     //this will perform a validation of the existence of the directory
@@ -431,6 +495,8 @@
     m_pDtDict->SetFileName(sDt);
     m_pElDict->SetFileName(sEl);
     m_pCtDict->SetFileName(sCt);
+	m_pGpDict->SetFileName(sGp);
+    m_pGxDict->SetFileName(sGx);
 
     m_libraryStatus=lsInitialized;
 

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysCatalog.h
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysCatalog.h	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysCatalog.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -21,6 +21,14 @@
 namespace CSLibrary
 {
 
+    class CCoordinateSystemGeodeticTransformDefDictionary;
+    class CCoordinateSystemDictionary;
+    class CCoordinateSystemDatumDictionary;
+    class CCoordinateSystemEllipsoidDictionary;
+    class CCoordinateSystemCategoryDictionary;
+    class CCoordinateSystemGeodeticPathDictionary;
+    class CCoordinateSystemGeodeticTransformDefDictionary;
+
 class CCoordinateSystemCatalog : public MgCoordinateSystemCatalog
 {
 EXTERNAL_API:
@@ -39,6 +47,8 @@
     virtual MgCoordinateSystemDictionary* GetCoordinateSystemDictionary();
     virtual MgCoordinateSystemDatumDictionary* GetDatumDictionary();
     virtual MgCoordinateSystemEllipsoidDictionary* GetEllipsoidDictionary();
+    virtual MgCoordinateSystemGeodeticPathDictionary* GetGeodeticPathDictionary();
+    virtual MgCoordinateSystemGeodeticTransformDefDictionary* GetGeodeticTransformDefDictionary();
     virtual MgDisposableCollection* GetGeodeticTransformations(MgCoordinateSystemDatum* pSource, MgCoordinateSystemDatum *pTarget);
     virtual MgCoordinateSystemMathComparator* GetMathComparator();
     virtual MgCoordinateSystemFormatConverter* GetFormatConverter();
@@ -71,6 +81,8 @@
     Ptr<CCoordinateSystemDatumDictionary> m_pDtDict;
     Ptr<CCoordinateSystemEllipsoidDictionary> m_pElDict;
     Ptr<CCoordinateSystemCategoryDictionary> m_pCtDict;
+    Ptr<CCoordinateSystemGeodeticPathDictionary> m_pGpDict;
+    Ptr<CCoordinateSystemGeodeticTransformDefDictionary> m_pGxDict;
 
     LibraryStatus m_libraryStatus;
 

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysCategory.cpp
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysCategory.cpp	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysCategory.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -46,7 +46,7 @@
 //
 char * CCoordinateSystemCategory::Name()
 {
-    return m_categoryName.name;
+    return const_cast<char*>(m_categoryName.Name());
 }
 
 //Saves the object to a file.  Purpose of the ulMinSize parameter:
@@ -102,7 +102,7 @@
     // 5. Blank space (if ulMinSize > size)
 
     //Name.
-    CS_fwrite(m_categoryName.name, sizeof(m_categoryName.name), 1, pFile);
+    CS_fwrite(m_categoryName.Name(), sizeof(char), knMaxCategoryNameLen, pFile);
 
     //Size.
     CS_fwrite(reinterpret_cast<char *>(&ulSize), sizeof(ulSize), 1, pFile);
@@ -114,7 +114,7 @@
     CSystemNameList::const_iterator iter;
     for (iter=m_listCoordinateSystemNames.begin(); iter!=m_listCoordinateSystemNames.end(); iter++)
     {
-        CS_fwrite((*iter).name, sizeof((*iter).name), 1, pFile);
+        CS_fwrite((*iter).Name(), sizeof(char), cs_KEYNM_DEF, pFile);
     }
 
     //Blank space, if needed
@@ -131,7 +131,7 @@
         CSystemName dummy(/*NOXLATE*/"fnord");
         for (UINT32 i=0; i<ulDiff; i++)
         {
-            CS_fwrite(dummy.name, sizeof(dummy.name), 1, pFile);
+            CS_fwrite(dummy.Name(), sizeof(char), cs_KEYNM_DEF, pFile);
         }
     }
 
@@ -185,13 +185,20 @@
     // 5. Blank space (if ulMinSize > size)
 
     //Name.
-    size_t nRead=CS_fread(m_categoryName.name, sizeof(m_categoryName.name), 1, pFile);
-    if (1!=nRead)
+    char tempCharBuffer[knMaxCategoryNameLen] = { '\0' };
+    const size_t expectedReadCount = sizeof(tempCharBuffer) / sizeof(char);
+    size_t nRead=CS_fread(tempCharBuffer, sizeof(char), expectedReadCount, pFile);
+    if (expectedReadCount != nRead)
     {
+        _ASSERT(0 == nRead); //otherwise something else is going on here...
+
         //we reached the end of the file
         throw new MgFileIoException(L"MgCoordinateSystemCategory.LoadFromFstream", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
+    //copy the category name into our [m_categoryName] TNameStruct
+    m_categoryName = tempCharBuffer;
+
     //Size.
     UINT32 ulSize;
     nRead=CS_fread(reinterpret_cast<char *>(&ulSize), sizeof(ulSize), 1, pFile);
@@ -213,18 +220,23 @@
         throw new MgFileIoException(L"MgCoordinateSystemCategory.LoadFromFstream", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
+    char keyNameBuffer[cs_KEYNM_DEF]  = { '\0' };
+    const size_t expectedBufferCountRead = sizeof(keyNameBuffer) / sizeof(char);
     //Coordinate system names.
     for (UINT32 i=0; i<ulSize; i++)
     {
-        nRead=CS_fread(member.name, sizeof(member.name), 1, pFile);
-        if (1!=nRead)
+        keyNameBuffer[0] = '\0';
+        nRead=CS_fread(keyNameBuffer, sizeof(char), expectedBufferCountRead, pFile);
+        if (expectedBufferCountRead != nRead)
         {
             throw new MgFileIoException(L"MgCoordinateSystemCategory.LoadFromFstream", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
+        member = keyNameBuffer;
+
         // TODO - WORKAROUND TO SKIP BAD COORDINATE SYSTEMS IN CURRENT DICTIONARIES
-        if((strcmp(member.name, "IGN63/Hiva") != 0) &&
-           (strcmp(member.name, "Phoenix") != 0))
+        if((strcmp(member.Name(), "IGN63/Hiva") != 0) &&
+           (strcmp(member.Name(), "Phoenix") != 0))
         {
             m_listCoordinateSystemNames.push_back(member);
         }
@@ -235,7 +247,7 @@
     ulDiff = ulMinSize - ulSize;
     if (ulDiff > 0)
     {
-        CS_fseek(pFile, CS_ftell(pFile) + ulDiff * sizeof(member.name), SEEK_SET);
+        CS_fseek(pFile, CS_ftell(pFile) + ulDiff * (sizeof(keyNameBuffer) / sizeof(char)), SEEK_SET);
     }
     if (ferror(pFile))
     {
@@ -297,7 +309,7 @@
     STRING sName;
 
     MG_TRY()
-    wchar_t *pName = Convert_Ascii_To_Wide(m_categoryName.name);
+    wchar_t *pName = Convert_Ascii_To_Wide(m_categoryName.Name());
     if (!pName)
     {
         throw new MgOutOfMemoryException(L"MgCoordinateSystemCategory.GetName", __LINE__, __WFILE__, NULL, L"", NULL);
@@ -326,7 +338,10 @@
     {
         throw new MgOutOfMemoryException(L"MgCoordinateSystemCategory.SetName", __LINE__, __WFILE__, NULL, L"", NULL);
     }
-    strcpy(m_categoryName.name, pName);
+    
+    //assign the name to our internal [TNameStruct]
+    m_categoryName = pName;
+
     delete [] pName;
     MG_CATCH_AND_THROW(L"MgCoordinateSystemCategory.SetName")
 }
@@ -346,7 +361,7 @@
 //
 bool CCoordinateSystemCategory::IsValid()
 {
-    return IsLegalName(m_categoryName.name);
+    return IsLegalName(m_categoryName.Name());
 }
 
 //Private member function which returns whether the specified string
@@ -546,7 +561,7 @@
     CSystemNameList::const_iterator iter;
     for (iter=m_listCoordinateSystemNames.begin(); iter!=m_listCoordinateSystemNames.end(); iter++)
     {
-        wchar_t *pName = Convert_Ascii_To_Wide((*iter).name);    //need to delete [] pName
+        wchar_t *pName = Convert_Ascii_To_Wide((*iter).Name());    //need to delete [] pName
         if (NULL == pName)
         {
             throw new MgOutOfMemoryException(L"MgCoordinateSystemCategory.GetCoordinateSystems", __LINE__, __WFILE__, NULL, L"", NULL);
@@ -670,7 +685,7 @@
 //
 void CCoordinateSystemCategory::Clear()
 {
-    memset(m_categoryName.name, 0, knMaxCategoryNameLen);
+    m_categoryName = "\0";
     m_listCoordinateSystemNames.clear();
 }
 

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysDatum.cpp
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysDatum.cpp	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysDatum.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -15,6 +15,8 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
+#include "CoordSysMacro.h"
+
 #include "GeometryCommon.h"
 #include "CoordSysCommon.h"
 #include "CriticalSection.h"
@@ -562,6 +564,10 @@
     SetString(sSource, &m_DtDef.source[0], sizeof(m_DtDef.source));
 }
 
+//Gets/Sets the EPSG code
+//
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemDatum,EpsgCode,INT16,this->m_DtDef.epsgNbr)
+
 //Returns whether the specified string is a legal source string
 //
 bool CCoordinateSystemDatum::IsLegalSource(CREFSTRING sSource)

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysDatum.h
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysDatum.h	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysDatum.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -44,6 +44,8 @@
     virtual bool IsLegalGroup(CREFSTRING sGroup);
     virtual STRING GetSource();
     virtual void SetSource(CREFSTRING sSource);
+    virtual INT16 GetEpsgCode();
+    virtual void SetEpsgCode(INT16 epsgCode);
     virtual bool IsLegalSource(CREFSTRING sSource);
     virtual bool IsProtected();
     virtual INT16 GetAge();

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysDatumDictionary.cpp
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysDatumDictionary.cpp	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysDatumDictionary.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -51,7 +51,9 @@
 #undef cs_Dtdef08_
 
 
+//FIXME (CS_rlsUodt.c isn't built anymore)
 //Externs from Mentor
+/*
 extern "C"
 {
     int CSdtrupReadOld (csFILE *oldStrm,struct csDtrup_ *dtrup,int old_lvl);
@@ -59,11 +61,13 @@
     int CSdtrupRead06 (csFILE *oldStrm,struct csDtrup_ *dtrup);
     extern char cs_Dir[];
 }
+*/
 
-
+//FIXME (CS_rlsUodt.c isn't built anymore)
 //Function which works like CS_dtrd(), except that it reads version
 //5 datum structs.
 //
+/*
 static int
 CS_dtrd05(
     csFILE *oldStrm,
@@ -102,9 +106,8 @@
     }
     return nStatus;
 }
+*/
 
-
-
 //Function which returns whether the specified "magic number" is
 //a valid one for a Mentor datum dictionary.  The returned value
 //indicates the highest access level allowed:  CsDictionaryOpenMode::Write if current
@@ -249,8 +252,13 @@
         return CS_dtdef(kpName);
     }
 
+    throw new MgInvalidOperationException(L"CCoordinateSystemDatumDictionary.dtdef", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    //FIXME (CS_rlsUodt.c isn't built anymore)
+    //
     //It's an old version.  We need to do a special search
     //in the file, and then, if found, update it to a current struct.
+    /*
     UINT32 nStructSize, nNameSize;
     GetDatumSizeInfo(m_lMagic, nStructSize, nNameSize);
     if (strlen(kpName) > nNameSize-1) return NULL;
@@ -300,6 +308,7 @@
     }
     CS_fclose(pFile);
     return pDef;
+    */
 }
 
 //-------------------------------------------------------------------------------
@@ -448,7 +457,9 @@
 
     MentorDictionary::UpdateDef<cs_Dtdef_, MgCoordinateSystemDatum>(
         m_pmapSystemNameDescription,
+        DtKey,
         DtDesc,
+        &MgCoordinateSystemDatum::IsValid,
         CS_dtdef,
         CS_dtupd,
         BuildDtDefFromInterface,
@@ -496,7 +507,9 @@
 
     MentorDictionary::UpdateDef<cs_Dtdef_, MgCoordinateSystemDatum>(
         m_pmapSystemNameDescription,
+        DtKey,
         DtDesc,
+        &MgCoordinateSystemDatum::IsValid,
         CS_dtdef,
         CS_dtupd,
         BuildDtDefFromInterface,
@@ -644,6 +657,8 @@
         assert(nVersion > 0);
         switch (nVersion)
         {
+        // FIXME (CS_rlsUpdt.c isn't built anymore)
+            /*
         case 5:
             //Generate summary for version 5 datum file.
             m_pmapSystemNameDescription = MentorDictionary::GenerateSystemNameDescriptionMap<cs_Dtdef05_>(
@@ -658,11 +673,13 @@
                 DtDesc06,
                 CS_dtrd06);
             break;
+            */
         case 7:
         case 8:
             //Generate summary for version 7 or 8 datum file.
             m_pmapSystemNameDescription = MentorDictionary::GenerateSystemNameDescriptionMap<cs_Dtdef_>(
                 pFile,
+                DtKey,
                 DtDesc,
                 CS_dtrd);
             break;

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysDictionary.cpp
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysDictionary.cpp	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysDictionary.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -49,19 +49,25 @@
 #undef cs_Csdef08_
 
 
+//FIXME (CS_rlsUodt.c isn't built anymore)
+//
 //Externs from Mentor
+/*
 extern "C"
 {
     int CScsrupReadOld (csFILE *oldStrm,struct csCsrup_ *csrup,int old_lvl);
     int CScsrupRead05 (csFILE *oldStrm,struct csCsrup_ *csrup);
     int CScsrupRead06 (csFILE *oldStrm,struct csCsrup_ *csrup);
 }
+*/
 
 
-
+//FIXME (CS_rlsUodt.c isn't built anymore)
+//
 //Function which works like CS_csrd(), except that it reads version
 //5 coordsys structs.
 //
+/*
 static int
 CS_csrd05(
     csFILE *oldStrm,
@@ -100,9 +106,9 @@
     }
     return nStatus;
 }
+*/
 
 
-
 //Function which returns whether the specified "magic number" is
 //a valid one for a Mentor coordsys dictionary.  The returned value
 //indicates the highest access level allowed:  CsDictionaryOpenMode::Write if current
@@ -260,8 +266,14 @@
         return pDef;
     }
 
+    throw new MgInvalidOperationException(L"CCoordinateSystemDictionary.csdef", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    //FIXME (CS_rlsUodt.c isn't built anymore)
+    //
+
     //It's an old version.  We need to do a special search
     //in the file, and then, if found, update it to a current struct.
+    /*
     UINT32 nStructSize, nNameSize;
     GetCoordinateSystemSizeInfo(m_lMagic, nStructSize, nNameSize);
     if (strlen(kpName) > nNameSize-1) return NULL;
@@ -322,6 +334,7 @@
     }
 
     return pDef;
+    */
 }
 
 //------------------------------------------------------------------------
@@ -380,11 +393,11 @@
 
     //Okay, everybody opened all right, so update Mentor's global
     //variables appropriately.
-    char* szCs=Convert_Wide_To_Ascii(sFileName.c_str());
+    char* szCs=Convert_Wide_To_Ascii(sFileName.c_str()); //ABA: why use sFileName here?
     CriticalClass.Enter();
     CS_csfnm(szCs);
     CriticalClass.Leave();
-    delete[] szCs;
+    delete[] szCs; //ABA: where is that deleted in case of an exception
 
     if (m_pmapSystemNameDescription)
     {
@@ -470,7 +483,9 @@
 
     MentorDictionary::UpdateDef<cs_Csdef_, MgCoordinateSystem>(
         m_pmapSystemNameDescription,
+        CsKey,
         CsDesc,
+        &MgCoordinateSystem::IsValid,
         CS_csdef,
         CS_csupd,
         BuildCsDefFromInterface,
@@ -518,7 +533,9 @@
 
     MentorDictionary::UpdateDef<cs_Csdef_, MgCoordinateSystem>(
         m_pmapSystemNameDescription,
+        CsKey,
         CsDesc,
+        &MgCoordinateSystem::IsValid,
         CS_csdef,
         CS_csupd,
         BuildCsDefFromInterface,
@@ -664,6 +681,8 @@
         assert(nVersion > 0);
         switch (nVersion)
         {
+        //FIXME (CS_rlsUpdt.c isn't built anymore)
+            /*
         case 5:
             //Generate summary for version 5 coordsys file.
             m_pmapSystemNameDescription = MentorDictionary::GenerateSystemNameDescriptionMap<cs_Csdef05_>(
@@ -678,11 +697,13 @@
                 CsDesc06,
                 CS_csrd06);
             break;
+            */
         case 7:
         case 8:
             //Generate summary for version 7 or 8 coordsys file.
             m_pmapSystemNameDescription = MentorDictionary::GenerateSystemNameDescriptionMap<cs_Csdef_>(
                 pFile,
+                CsKey,
                 CsDesc,
                 CS_csrd);
             break;

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysDictionaryBase.cpp (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysDictionaryBase.cpp)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysDictionaryBase.cpp	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysDictionaryBase.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,375 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifdef BUILD_DICTIONARY_BASE //set this define before including CoordSysDictionaryBase.cpp; otherwise nothing will be built
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+DICTIONARY_BASE_TEMPLATE_METHOD::CCoordinateSystemDictionaryBase(MgCoordinateSystemCatalog *pCatalog)
+    : dictMagicNumber(0) /* no yet initialized - will be read in [SetFileName] */, dictionaryItems(NULL)
+{
+    if (NULL == pCatalog)
+        throw new MgNullArgumentException(L"CCoordinateSystemDictionaryBase.ctor()", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    this->catalog = SAFE_ADDREF(pCatalog); // 'Ptr = ' does not increment the ref counter
+    this->fileName = defaultFileName; //template default parameter
+}
+
+DICTIONARY_BASE_TEMPLATE
+DICTIONARY_BASE_TEMPLATE_METHOD::~CCoordinateSystemDictionaryBase()
+{
+    this->catalog = NULL;
+    
+    delete this->dictionaryItems;
+    this->dictionaryItems = NULL;
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+void DICTIONARY_BASE_TEMPLATE_METHOD::Dispose()
+{
+    delete this;
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+MgCoordinateSystemCatalog* DICTIONARY_BASE_TEMPLATE_METHOD::GetCatalog()
+{
+    return SAFE_ADDREF(this->catalog.p);
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+STRING DICTIONARY_BASE_TEMPLATE_METHOD::GetDefaultFileName()
+{
+    return defaultFileName; /* from template definition; *NOT* this->fileName ! */
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+STRING DICTIONARY_BASE_TEMPLATE_METHOD::GetFileName()
+{
+    return this->fileName; /* changeable via SetFileName*/
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+void DICTIONARY_BASE_TEMPLATE_METHOD::SetFileName(CREFSTRING sFileName)
+{
+    ::SetDictionaryFileName(
+        sFileName,
+        this->catalog->GetDictionaryDir(),
+        this->dictMagicNumber, //will be set
+        definitionAccess->magicNumberCallback, //open mode
+        definitionAccess->csMapTargetFileName, //CS Map file target
+        L"CoordSysDictionaryBase.SetFileName"); //context
+
+    //the filename has been set for CS library; now set it for this object...
+    this->fileName = sFileName;
+
+    //...and clean up the list of entries we might have already read from the old dictionary file
+    delete this->dictionaryItems;
+    this->dictionaryItems = NULL;
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+STRING DICTIONARY_BASE_TEMPLATE_METHOD::GetPath() /* the full path to the file we're currently using */
+{
+    MG_TRY()
+    
+    return (this->catalog->GetDictionaryDir() + this->fileName);
+    
+    MG_CATCH_AND_THROW(L"CCoordinateSystemDictionaryBase.GetPath")
+
+    _ASSERT(false); //OOM - unable to create the exception object?
+    return NULL;
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+UINT32 DICTIONARY_BASE_TEMPLATE_METHOD::GetSize()
+{
+    //If we have a summary available, we can just return its size.
+    if (NULL != this->dictionaryItems)
+    {
+        return static_cast<UINT32>(this->dictionaryItems->size());
+    }
+
+    SmartCriticalClass critical(true);
+    
+    STRING strPath = this->GetPath();
+    csFILE *pFile = MentorDictionary::Open(this->dictMagicNumber, definitionAccess->magicNumberCallback, strPath.c_str(), Read);
+
+    _ASSERT(NULL != pFile);
+    UINT32 nSize;
+
+    MG_TRY()
+
+    //We're open, but no summary is available.  We need to examine
+    //the file itself to find out how big it is.
+    INT32 pos = CS_ftell(pFile);
+    CS_fseek(pFile, 0, SEEK_END);
+    UINT32 ulFileBytes = 1 + CS_ftell(pFile);
+    CS_fseek(pFile, pos, SEEK_SET);
+    UINT32 nRecSize = sizeof(U);
+
+    //take the complete file size; subtract the "header" and divide by the size of the structs contained
+    nSize = (ulFileBytes - sizeof(this->dictMagicNumber)) / nRecSize;
+
+    MG_CATCH(L"CCoordinateSystemDictionaryBase.GetSize")
+
+    if(NULL != pFile && (0 != CS_fclose(pFile)))
+    {
+        throw new MgFileIoException(L"CCoordinateSystemDictionaryBase.GetSize", __LINE__, __WFILE__, NULL, NULL, NULL);
+    }
+
+    MG_THROW()
+
+    return nSize;
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+void DICTIONARY_BASE_TEMPLATE_METHOD::Add(MgGuardDisposable* pDefinition)
+{
+    //we won't take ownership of [pDefinition]; i.e. it can be deleted by the caller after we're done here
+    if (NULL == pDefinition)
+        throw new MgNullArgumentException(L"CCoordinateSystemDictionaryBase.Add", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    T* pDictionaryDef = dynamic_cast<T*>(pDefinition);
+    if (!pDictionaryDef)
+        throw new MgInvalidArgumentException(L"CCoordinateSystemDictionaryBase.Add", __LINE__, __WFILE__, NULL, L"CCoordinateSystemDictionaryBase", NULL);
+
+    MG_TRY()
+
+    //::UpdateDef will lock the (file) resource via [SmartCriticalClass critical(true);]
+    MentorDictionary::UpdateDef<U, T>(
+       this->dictionaryItems, /* can be null in case no enumerator has been created yet or this dictionary isn't set up for caching */
+        definitionAccess->readDefinitionName,
+        definitionAccess->readDefinitionDescription,
+        definitionAccess->validateDefinition,
+        definitionAccess->readDefinition,
+        definitionAccess->updateDefinition,
+        definitionAccess->setupCsStructFromMgInstance,
+        pDictionaryDef,
+        false); /* bAlreadyExists - we want to create a new one, i.e. the definition must not exist yet */
+
+    MG_CATCH_AND_THROW(L"CCoordinateSystemDictionaryBase.Add")
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+void DICTIONARY_BASE_TEMPLATE_METHOD::Remove(CREFSTRING sName)
+{
+    MG_TRY()
+
+    MentorDictionary::RemoveDef<U>(
+        this->dictionaryItems, /* can be null in case no enumerator has been created yet or this dictionary isn't set up for caching */
+        definitionAccess->readDefinition,
+        definitionAccess->deleteDefinition,
+        sName.c_str());
+
+    MG_CATCH_AND_THROW(L"CCoordinateSystemDictionaryBase.Remove")    
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+void DICTIONARY_BASE_TEMPLATE_METHOD::Modify(MgGuardDisposable *pDefinition)
+{
+    if (NULL == pDefinition)
+        throw new MgNullArgumentException(L"CCoordinateSystemDictionaryBase.Modify", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    T* pDictionaryDef = dynamic_cast<T*>(pDefinition);
+    if (!pDictionaryDef)
+        throw new MgInvalidArgumentException(L"CCoordinateSystemDictionaryBase.Modify", __LINE__, __WFILE__, NULL, L"CCoordinateSystemDictionaryBase", NULL);
+
+    MG_TRY()
+
+    //::UpdateDef will lock the (file) resource via [SmartCriticalClass critical(true);]
+
+    //we don't pass our [this->items] here, as the dictionary is accessed anyway;
+    //if the caller passes us an unknown definition, we'll fail anyway
+    //with an exception what is per se slower than having success here
+    MentorDictionary::UpdateDef<U, T>(
+        this->dictionaryItems, /* can be null in case no enumerator has been created yet or this dictionary isn't set up for caching */
+        definitionAccess->readDefinitionName,
+        definitionAccess->readDefinitionDescription,
+        definitionAccess->validateDefinition,
+        definitionAccess->readDefinition,
+        definitionAccess->updateDefinition,
+        definitionAccess->setupCsStructFromMgInstance,
+        pDictionaryDef,
+        true); //the definition has to exist
+
+    MG_CATCH_AND_THROW(L"CCoordinateSystemDictionaryBase.Modify")
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+MgGuardDisposable* DICTIONARY_BASE_TEMPLATE_METHOD::Get(CREFSTRING sName)
+{
+    U *pDef = NULL;
+    char *pName = NULL;
+
+    //Get the name to search for
+    pName = Convert_Wide_To_Ascii(sName.c_str()); //need to delete [] pName
+    Ptr<T> pDefinition;
+
+    MG_TRY()
+
+    //make sure, we've exclusive access here
+    SmartCriticalClass critical(true);
+    
+    //Look in the dictionary
+    pDef = definitionAccess->readDefinition(pName);
+    if (NULL == pDef)
+    {
+        MgStringCollection whatArguments;
+        whatArguments.Add(sName);
+        throw new MgCoordinateSystemLoadFailedException(L"CCoordinateSystemDictionaryBase.Get", __LINE__, __WFILE__, &whatArguments, L"", NULL);
+    }
+
+    pDefinition = this->NewItem(); //no AddRef; release if needed
+    if (NULL == pDefinition.p) //ABA ???
+        throw new MgOutOfMemoryException(L"CCoordinateSystemDictionaryBase.Get", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    //we've created the Mg instance, we got the CS_Map definition; now let the Mg instance initialize itself from the
+    //struct;
+    //NOTE: [fullInitialize] doesn't take ownership of [pDef] - we've to release it when done
+    definitionAccess->fullInitialize(pDefinition, pDef, this->catalog);
+
+    MG_CATCH(L"CCoordinateSystemDictionaryBase.Get")
+
+    /* cleanup - MG_CATCH() catches every exception; i.e. we'll go through here regardless of whether an exception occurred or not */
+    
+    CS_free(pDef);
+    delete [] pName;
+
+    MG_THROW()
+
+    return pDefinition.Detach(); //done - detach the pointer so the caller can take ownership
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+bool DICTIONARY_BASE_TEMPLATE_METHOD::Has(CREFSTRING sName)
+{
+    MG_TRY()
+    
+    try
+    {
+        Ptr<MgGuardDisposable> definition = this->Get(sName);
+        _ASSERT(NULL != definition);
+
+        return NULL != definition;
+    }
+    catch(MgCoordinateSystemLoadFailedException* loadFailedException)
+    {
+        loadFailedException->Release();
+        return false;
+    }
+
+    MG_CATCH_AND_THROW(L"CCoordinateSystemDictionaryBase.Has")
+
+    _ASSERT(false);
+    return false;
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+MgCoordinateSystemEnum* DICTIONARY_BASE_TEMPLATE_METHOD::GetEnum()
+{
+    //we don't take ownership; the caller has to free it
+    return this->GetEnumImp();
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+CCoordinateSystemEnum* DICTIONARY_BASE_TEMPLATE_METHOD::GetEnumImp()
+{
+    Ptr<CCoordinateSystemEnum> pNew;
+    
+    csFILE *dictionaryFile = NULL;
+    SmartCriticalClass critical(true);
+
+    CSystemNameDescriptionMap* allDictionaryEntries = NULL;
+
+    MG_TRY()
+
+    //do we have to cache the entries read from the dictionary file and have we already read them before?
+    if (!cacheDictionaryEntries || NULL == this->dictionaryItems)
+    {
+        //Not read yet - try to build the map from the entries found in the dictionary file
+        //
+        STRING strPath = this->GetPath();
+    
+        //[Open] throws an exception, if the dictionary file couldn't be opened
+        dictionaryFile = MentorDictionary::Open(this->dictMagicNumber, definitionAccess->magicNumberCallback, strPath.c_str(), Read);
+
+        allDictionaryEntries = MentorDictionary::GenerateSystemNameDescriptionMap<U>(
+            dictionaryFile,
+            definitionAccess->readDefinitionName,
+            definitionAccess->readDefinitionDescription,
+            definitionAccess->readAllDefinitions);
+        
+        if (NULL == allDictionaryEntries) //whatever happend here - the dictionay file seems to be invalid
+            throw new MgCoordinateSystemLoadFailedException(L"CCoordinateSystemDictionaryBase.GetEnumImp", __LINE__, __WFILE__, NULL, L"", NULL);
+    }
+    else
+    {
+        allDictionaryEntries = this->dictionaryItems;
+    }
+
+    //create our enumerator we're returning to the caller
+    pNew = new CCoordinateSystemEnum;
+    pNew->Initialize(this, allDictionaryEntries /* might point to [this->dictionaryItems] */);
+
+    MG_CATCH(L"CCoordinateSystemDictionaryBase.GetEnumImp")
+
+    //in either case, try to close the dictionary file
+    if (NULL != dictionaryFile && 0 != CS_fclose(dictionaryFile) //closing went through?
+        && NULL == mgException.p)
+        //if there hasn't yet an exception occurred we now have one
+        //if there was one already we (unfortunately) do now swallow the MgFileIoException
+        mgException = new MgFileIoException(L"CCoordinateSystemDictionaryBase.GetEnumImp", __LINE__, __WFILE__, NULL, L"MgCoordinateSystemDictionaryCloseFailedException", NULL);
+
+    MG_THROW()
+
+    //cache the map of entries if we did succeed
+    if (cacheDictionaryEntries)
+    {
+        //this will be false, if this dictionary object is shared between multiple threads; however, the dictionary must not be shared between threads
+        //without proper precautions being taken
+        _ASSERT(NULL != allDictionaryEntries);
+        _ASSERT(NULL == this->dictionaryItems || (void*)this->dictionaryItems == (void*)allDictionaryEntries);
+        
+        this->dictionaryItems = allDictionaryEntries; //cache the map now
+    }
+
+    return pNew.Detach();
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+DICTIONARY_BASE_TEMPLATE
+T* DICTIONARY_BASE_TEMPLATE_METHOD::NewItem()
+{
+    //new() throws an exception in case allocation fails; we don't take ownership
+    return new T(this->catalog); //the callee has to incr. the ref counter, if it needs the catalog object
+}
+
+#endif //BUILD_DICTIONARY_BASE
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysDictionaryBase.h (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysDictionaryBase.h)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysDictionaryBase.h	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysDictionaryBase.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,133 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _COORDSYSDICTIONARYBASE_H_
+#define _COORDSYSDICTIONARYBASE_H_
+
+#define BUILD_DICTIONARY_BASE //this is needed to build the content in CoordSysDictionaryBase.cpp
+
+#define MAP_CS_DEFAULT_FILE_NAME(x) L## x //builds the wchar_t default filename from the #define found in cs_map.h, e.g. from [cs_GP_NAME]
+#define DICTIONARY_FILE_NAME(x) DefaultDictName##x //defines the name of the extern variable we need to initialize each template class with
+#define DECLARE_DICTIONARY_FILE_NAME(x) extern const ACE_TCHAR DefaultDictName##x[] //declares(!) the extern variable we need for the template class
+#define DEFINE_DICTIONARY_FILE_NAME(x,y) extern const ACE_TCHAR DefaultDictName##x[] = MAP_CS_DEFAULT_FILE_NAME(y) //defines(!) the extern variable we need for the template class
+
+//typedef of the callback that's being invoked, when a dictionary file is being opened; the invoked method 
+//has to specify the open mode the target dictionary file has to be opened with; the [long] parameter is the magic header number
+typedef CsDictionaryOpenMode (*MagicNumberCallback)(long);
+
+template<class T/* Mg API class */, class U /* CS map struct */> 
+struct DefinitionAccess //carries all method pointers needed by this dictionary base implementation so it can interact with the Mg API and the CS Map API
+{
+public:
+    DefinitionAccess(
+        U* (*ReadDefinition)(const char* definitionKey), //reads a definition from a dictionary file; the caller is responsible for freeing the returned object
+        int (*UpdateDefinition)(U* definition, int), //updates the definition in the dictionary file
+        int (*DeleteDefinition)(U* definition), //deletes the definition in the dictionary file
+        bool (T::*ValidateDefinition)(), //validates a definition; this method is called on the Mg interface
+        bool (*SetupCsStructFromMgInstance)(T*, U&), //initializes the CS Map API struct (type U) from the Mg API objects (type T)
+        void (*FullInitialize)(T*, U*, MgCoordinateSystemCatalog* catalog), //fully initializes the Mg API objects from the CS Map API struct
+        const char* (*ReadDefinitionName)(const U& definition), //reads the definition's name; the caller has to copy the string's content
+        const char* (*ReadDefinitionDescription)(const U& definition), //reads the definition's description; the caller must copy the string's content (if not NULL)
+        int (*ReadAllDefinitions) (csFILE *strm, U* definition, int*), // reads the entire content of a dictionary file; depends on the current file pointer position
+        void (*CsMapTargetFileName)(const char *newFileName), //set the target dictionary file name in the CS Map library
+        CsDictionaryOpenMode (*MagicNumberCallback)(long)) //returns the correct open mode for a dictionary file taking into account the magic number read from the file; passed in as long
+        :
+            readDefinition(ReadDefinition),
+            updateDefinition(UpdateDefinition),
+            deleteDefinition(DeleteDefinition),
+            
+            validateDefinition(ValidateDefinition),
+
+            setupCsStructFromMgInstance(SetupCsStructFromMgInstance),
+            fullInitialize(FullInitialize),
+
+            readDefinitionName(ReadDefinitionName),
+            readDefinitionDescription(ReadDefinitionDescription),
+
+            readAllDefinitions(ReadAllDefinitions),
+            
+            csMapTargetFileName(CsMapTargetFileName),
+            magicNumberCallback(MagicNumberCallback)
+    {
+    }
+
+    U* (*readDefinition)(const char* definitionKey);
+    int (*updateDefinition)(U* definition, int);
+    int (*deleteDefinition)(U* definition);
+    bool (T::*validateDefinition)();
+    bool (*setupCsStructFromMgInstance)(T*, U&);
+    void (*fullInitialize)(T*, U*, MgCoordinateSystemCatalog* catalog);
+    const char* (*readDefinitionName)(const U& definition);
+    const char* (*readDefinitionDescription)(const U& definition);
+    int (*readAllDefinitions) (csFILE *strm, U* definition, int*);
+    void (*csMapTargetFileName) (const char *newFileName);
+    CsDictionaryOpenMode (*magicNumberCallback)(long);
+};
+
+#define DICTIONARY_BASE_TEMPLATE template <class T /* dictionary entries */, class U /* CS_MAP C type*/, \
+    DefinitionAccess<T, U>* definitionAccess, \
+    bool cacheDictionaryEntries, INT32 defaultMagicNumber, const wchar_t* defaultFileName>
+
+#define DICTIONARY_BASE_TEMPLATE_METHOD CCoordinateSystemDictionaryBase<T, U, definitionAccess, cacheDictionaryEntries, defaultMagicNumber, defaultFileName>
+#define DICTIONARY_BASE_TEMPLATE_OBJECT CCoordinateSystemDictionaryBase<T, U, definitionAccess, cacheDictionaryEntries, defaultMagicNumber, defaultFileName>
+#define DICTIONARY_BASE_ENUM_TEMPLATE_METHOD DictionaryBaseEnum<T, U, definitionAccess, cacheDictionaryEntries, defaultMagicNumber, defaultFileName>
+
+namespace CSLibrary
+{
+
+    DICTIONARY_BASE_TEMPLATE
+    class CCoordinateSystemDictionaryBase : public MgCoordinateSystemDictionaryBase
+    {
+    public:
+
+        /* construction / destruction */
+        CCoordinateSystemDictionaryBase(MgCoordinateSystemCatalog *pCatalog);
+        virtual ~CCoordinateSystemDictionaryBase();
+
+        /* overrides */
+        virtual MgCoordinateSystemCatalog* GetCatalog();
+        virtual STRING GetDefaultFileName();
+        virtual STRING GetFileName();
+        virtual void SetFileName(CREFSTRING sFileName);
+        virtual STRING GetPath();
+        virtual UINT32 GetSize();
+        virtual void Add(MgGuardDisposable *pDefinition);
+        virtual void Remove(CREFSTRING sName);
+        virtual void Modify(MgGuardDisposable *pDefinition);
+        virtual MgGuardDisposable* Get(CREFSTRING sName); // TODO - this needs to be removed!
+        virtual bool Has(CREFSTRING sName);
+        virtual MgCoordinateSystemEnum* GetEnum();
+
+        virtual void Dispose();
+
+        /* implementation */
+        T* NewItem();
+
+    protected:
+        virtual CCoordinateSystemEnum* GetEnumImp();
+
+    protected:
+
+        Ptr<MgCoordinateSystemCatalog> catalog;
+        STRING fileName;
+        CSystemNameDescriptionMap* dictionaryItems;
+        INT32 dictMagicNumber;    
+    };
+
+} // End of namespace
+
+#endif //_COORDSYSDICTIONARYBASE_H_

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysEllipsoid.cpp
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysEllipsoid.cpp	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysEllipsoid.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -15,6 +15,8 @@
 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
+#include "CoordSysMacro.h"
+
 #include "GeometryCommon.h"
 #include "CoordSysCommon.h"
 
@@ -416,6 +418,10 @@
     SetString(sSource, &m_def.source[0], sizeof(m_def.source));
 }
 
+//Gets/Sets the EPSG code
+//
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemEllipsoid,EpsgCode,INT16,this->m_def.epsgNbr)
+
 //Returns whether the specified string is a legal source string
 //
 bool CCoordinateSystemEllipsoid::IsLegalSource(CREFSTRING sSource)

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysEllipsoid.h
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysEllipsoid.h	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysEllipsoid.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -45,6 +45,8 @@
     virtual bool IsLegalGroup(CREFSTRING sGroup);
     virtual STRING GetSource();
     virtual void SetSource(CREFSTRING sSource);
+    virtual INT16 GetEpsgCode();
+    virtual void SetEpsgCode(INT16 epsgCode);
     virtual bool IsLegalSource(CREFSTRING sSource);
     virtual bool IsProtected();
     virtual INT16 GetAge();

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysEllipsoidDictionary.cpp
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysEllipsoidDictionary.cpp	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysEllipsoidDictionary.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -52,11 +52,14 @@
 
 
 
+//FIXME (CS_rlsUodt.c isn't built anymore)
 //Externs from Mentor
+/*
 extern "C"
 {
     int CSelrupReadOld (csFILE *oldStrm,struct csElrup_ *elrup,int old_lvl);
 }
+*/
 
 
 
@@ -190,8 +193,14 @@
         return CS_eldef(kpName);
     }
 
+    throw new MgInvalidOperationException(L"CCoordinateSystemEllipsoidDictionary.eldef", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    //FIXME (CS_rlsUodt.c isn't built anymore)
+    //
     //It's an old version.  We need to do a special search
     //in the file, and then, if found, update it to a current struct.
+    
+    /*
     UINT32 nStructSize, nNameSize;
     GetEllipsoidSizeInfo(m_lMagic, nStructSize, nNameSize);
     if (strlen(kpName) > nNameSize-1) return NULL;
@@ -241,6 +250,7 @@
     }
     CS_fclose(pFile);
     return pDef;
+    */
 }
 
 //-----------------------------------------------------------------------------
@@ -388,7 +398,9 @@
 
     MentorDictionary::UpdateDef<cs_Eldef_, MgCoordinateSystemEllipsoid>(
         m_pmapSystemNameDescription,
+        ElKey,
         ElDesc,
+        &MgCoordinateSystemEllipsoid::IsValid,
         CS_eldef,
         CS_elupd,
         BuildElDefFromInterface,
@@ -439,7 +451,9 @@
 
     MentorDictionary::UpdateDef<cs_Eldef_, MgCoordinateSystemEllipsoid>(
         m_pmapSystemNameDescription,
+        ElKey,
         ElDesc,
+        &MgCoordinateSystemEllipsoid::IsValid,
         CS_eldef,
         CS_elupd,
         BuildElDefFromInterface,
@@ -572,6 +586,7 @@
     {
         m_pmapSystemNameDescription = MentorDictionary::GenerateSystemNameDescriptionMap<cs_Eldef_>(
             pFile,
+            ElKey,
             ElDesc,
             CS_elrd);
         if (NULL == m_pmapSystemNameDescription)

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysEnum.cpp
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysEnum.cpp	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysEnum.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -110,7 +110,7 @@
             //success
             return pOutput.Detach();
         }
-        const char *kpName = (*m_iter).first.name;
+        const char *kpName = (*m_iter).first.Name();
         wchar_t* pStr = Convert_Ascii_To_Wide(kpName);
         if (NULL == pStr)
         {
@@ -160,7 +160,7 @@
             //success
             return pOutput.Detach();
         }
-        const char *kpName = (*m_iter).first.name;
+        const char *kpName = (*m_iter).first.Name();
         if (IsFilteredOut(kpName))
         {
             continue;
@@ -195,11 +195,11 @@
             //success
             return pOutput.Detach();
         }
-        if (IsFilteredOut((*m_iter).first.name))
+        if (IsFilteredOut((*m_iter).first.Name()))
         {
             continue;
         }
-        const char *kpDecsription = (*m_iter).second.name;
+        const char *kpDecsription = (*m_iter).second.Name();
         wchar_t *pwDecsription = Convert_Ascii_To_Wide(kpDecsription);
         if (NULL == pwDecsription)
         {
@@ -229,7 +229,7 @@
             //success
             return;
         }
-        const char *kpName = (*m_iter).first.name;
+        const char *kpName = (*m_iter).first.Name();
         if (IsFilteredOut(kpName))
         {
             continue;

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysEnumCategory.cpp
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysEnumCategory.cpp	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysEnumCategory.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -176,7 +176,7 @@
         }
 
         //get the category definition for the next name in the list
-        const char *kpName = (*(m_iter)).name;
+        const char *kpName = (*(m_iter)).Name();
         pStr = Convert_Ascii_To_Wide(kpName);
         if (NULL == pStr)
         {
@@ -229,7 +229,7 @@
             return pOutput.Detach();
         }
 
-        const char *kpName = (*m_iter).name;
+        const char *kpName = (*m_iter).Name();
         if (IsFilteredOut(kpName))
         {
             continue;
@@ -270,7 +270,7 @@
             //success
             return;
         }
-        const char *kpName = (*m_iter).name;
+        const char *kpName = (*m_iter).Name();
         if (IsFilteredOut(kpName))
         {
             continue;

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysEnumCoordinateSystemInCategory.cpp
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysEnumCoordinateSystemInCategory.cpp	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysEnumCoordinateSystemInCategory.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -111,7 +111,7 @@
         }
 
         //get the coordinate system name from the category
-        const char *kpName = (*m_iter).name;
+        const char *kpName = (*m_iter).Name();
 
         assert(IsLegalMentorName(kpName));
         pstr = Convert_Ascii_To_Wide(kpName);
@@ -163,7 +163,7 @@
             //success
             return pOutput.Detach();
         }
-        const char *kpName = (*m_iter).name;
+        const char *kpName = (*m_iter).Name();
 
         if (IsFilteredOut(kpName))
         {
@@ -213,7 +213,7 @@
             return pOutput.Detach();
         }
         //get the coordinate system name from the category
-        const char *kpName = (*m_iter).name;
+        const char *kpName = (*m_iter).Name();
 
         assert(IsLegalMentorName(kpName));
         pstr = Convert_Ascii_To_Wide(kpName);
@@ -264,7 +264,7 @@
             return;
         }
         //get the coordinate system name from the category
-        const char *kpName = (*m_iter).name;
+        const char *kpName = (*m_iter).Name();
         if (IsFilteredOut(kpName))
         {
             continue;

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.cpp (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.cpp)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.cpp	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,125 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#define CS_MAP_DEF_VARIABLE this->geocentricTransformParams
+
+#include "CoordSysMacro.h"
+
+#include "GeometryCommon.h"
+#include "CoordSysCommon.h"
+
+#include "CoordSysGeodeticTransformDefParams.h"
+#include "CoordSysGeodeticAnalyticalTransformDefParams.h"
+
+#include <cs_map.h>
+
+using namespace CSLibrary;
+
+CCoordinateSystemGeodeticAnalyticalTransformDefParams::CCoordinateSystemGeodeticAnalyticalTransformDefParams(
+    const csGeocentricXformParams& params, INT32 analyticalTransformMethod, bool isProtected)
+    : CCoordinateSystemGeodeticTransformDefParams(isProtected)
+    , geocentricTransformParams(NULL), transformationMethod(analyticalTransformMethod)
+{
+    this->geocentricTransformParams = (csGeocentricXformParams*) CS_malc(sizeof(csGeocentricXformParams));
+    if (NULL == this->geocentricTransformParams)
+        throw new MgOutOfMemoryException(L"CCoordinateSystemGeodeticAnalyticalTransformDefParams.Ctor", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    *this->geocentricTransformParams = params;
+}
+
+CCoordinateSystemGeodeticAnalyticalTransformDefParams::~CCoordinateSystemGeodeticAnalyticalTransformDefParams()
+{
+    this->ReleaseInstance();
+}
+
+void CCoordinateSystemGeodeticAnalyticalTransformDefParams::Dispose()
+{
+    delete this;
+}
+
+void CCoordinateSystemGeodeticAnalyticalTransformDefParams::ReleaseInstance()
+{
+    if (NULL != this->geocentricTransformParams)
+    {
+        CS_free(this->geocentricTransformParams);
+        this->geocentricTransformParams = NULL;
+    }
+}
+
+void CCoordinateSystemGeodeticAnalyticalTransformDefParams::CopyTo(void* target) const
+{
+    ENSURE_NOT_NULL(target, CCoordinateSystemGeodeticAnalyticalTransformDefParams::CopyTo);
+    
+    memcpy(target, this->geocentricTransformParams, sizeof(cs_GeodeticTransform_::csGeodeticXformParameters::csGeodeticXformParmsGeocentric));
+}
+
+bool CCoordinateSystemGeodeticAnalyticalTransformDefParams::IsValid()
+{
+    //we're relying on the CS_gxchk() method that will be invoked, before the parent transformation
+    //definition is finally passed to CS_Map
+    return true;
+}
+
+bool CCoordinateSystemGeodeticAnalyticalTransformDefParams::IsProtected()
+{
+    return CCoordinateSystemGeodeticTransformDefParams::IsProtected();
+}
+
+INT32 CCoordinateSystemGeodeticAnalyticalTransformDefParams::GetTransformationMethod()
+{
+    return this->transformationMethod;
+}
+
+void CCoordinateSystemGeodeticAnalyticalTransformDefParams::SetTransformationMethod(INT32 analyticalMethodCode)
+{
+    VERIFY_NOT_PROTECTED(L"CCoordinateSystemGeodeticAnalyticalTransformDefParams::SetTransformationMethod");
+
+    switch(analyticalMethodCode)
+    {
+    case MgCoordinateSystemGeodeticAnalyticalTransformationMethod::None:
+    case MgCoordinateSystemGeodeticAnalyticalTransformationMethod::ThreeParameter:
+    case MgCoordinateSystemGeodeticAnalyticalTransformationMethod::Molodensky:
+    case MgCoordinateSystemGeodeticAnalyticalTransformationMethod::AbridgedMolodensky:
+    case MgCoordinateSystemGeodeticAnalyticalTransformationMethod::Geocentric:
+    case MgCoordinateSystemGeodeticAnalyticalTransformationMethod::FourParameter:
+    case MgCoordinateSystemGeodeticAnalyticalTransformationMethod::SixParameter:
+    case MgCoordinateSystemGeodeticAnalyticalTransformationMethod::Bursa:
+    case MgCoordinateSystemGeodeticAnalyticalTransformationMethod::Frame:
+    case MgCoordinateSystemGeodeticAnalyticalTransformationMethod::SevenParameter:
+    case MgCoordinateSystemGeodeticAnalyticalTransformationMethod::MolodenskyBadekas:
+        break;
+
+    default:
+        throw new MgInvalidArgumentException(L"CCoordinateSystemGeodeticAnalyticalTransformDefParams.SetTransformationMethod", __LINE__, __WFILE__, NULL, L"", NULL);
+    }
+
+    this->transformationMethod = analyticalMethodCode;
+}
+
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticAnalyticalTransformDefParams,DeltaX,double,this->geocentricTransformParams->deltaX)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticAnalyticalTransformDefParams,DeltaY,double,this->geocentricTransformParams->deltaY)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticAnalyticalTransformDefParams,DeltaZ,double,this->geocentricTransformParams->deltaZ)
+
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticAnalyticalTransformDefParams,RotateX,double,this->geocentricTransformParams->rotateX)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticAnalyticalTransformDefParams,RotateY,double,this->geocentricTransformParams->rotateY)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticAnalyticalTransformDefParams,RotateZ,double,this->geocentricTransformParams->rotateZ)
+
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticAnalyticalTransformDefParams,Scale,double,this->geocentricTransformParams->scale)
+
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticAnalyticalTransformDefParams,TranslateX,double,this->geocentricTransformParams->translateX)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticAnalyticalTransformDefParams,TranslateY,double,this->geocentricTransformParams->translateY)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticAnalyticalTransformDefParams,TranslateZ,double,this->geocentricTransformParams->translateZ)
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.h (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.h)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.h	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,84 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _CCOORDSYSGEODETICANALYTICALTRANSFORMDEFPARAMS_H_
+#define _CCOORDSYSGEODETICANALYTICALTRANSFORMDEFPARAMS_H_
+
+namespace CSLibrary
+{
+    typedef cs_GeodeticTransform_::csGeodeticXformParameters::csGeodeticXformParmsGeocentric csGeocentricXformParams;
+    
+    class CCoordinateSystemGeodeticAnalyticalTransformDefParams :
+        public MgCoordinateSystemGeodeticAnalyticalTransformDefParams,
+        public CCoordinateSystemGeodeticTransformDefParams
+    {
+    public:
+        CCoordinateSystemGeodeticAnalyticalTransformDefParams(const csGeocentricXformParams& params, INT32 analyticalTransformMethod, bool isProtected);
+        ~CCoordinateSystemGeodeticAnalyticalTransformDefParams();
+
+        virtual void Dispose();
+        virtual bool IsValid();
+
+        virtual bool IsProtected();
+
+        virtual void CopyTo(void* target) const;
+
+        //MgCoordinateSystemGeodeticAnalyticalTransformDefParams implementation
+        virtual double GetDeltaX();
+        virtual void SetDeltaX(double deltaX);
+			
+        virtual double GetDeltaY();
+        virtual void SetDeltaY(double deltaY);
+
+        virtual double GetDeltaZ();
+        virtual void SetDeltaZ(double deltaZ);
+    			
+        virtual double GetRotateX();
+        virtual void SetRotateX(double rotateX);
+
+        virtual double GetRotateY();
+        virtual void SetRotateY(double rotateY);
+
+        virtual double GetRotateZ();
+        virtual void SetRotateZ(double rotateZ);
+    			
+	    virtual double GetScale();
+        virtual void SetScale(double scale);
+
+        virtual double GetTranslateX();
+        virtual void SetTranslateX(double translateX);
+
+        virtual double GetTranslateY();
+        virtual void SetTranslateY(double translateY);
+
+        virtual double GetTranslateZ();
+        virtual void SetTranslateZ(double translateZ);
+
+        virtual INT32 GetTransformationMethod();
+        virtual void SetTransformationMethod(INT32 analyticalMethodCode);
+
+    private:
+        void ReleaseInstance();
+
+    private:
+        csGeocentricXformParams* geocentricTransformParams;
+        INT32 transformationMethod;
+    };
+
+} //namespace CSLibrary
+
+#endif //_CCOORDSYSGEODETICANALYTICALTRANSFORMDEFPARAMS_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.cpp (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.cpp)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.cpp	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,188 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#define CS_MAP_DEF_VARIABLE this->gridFileParams
+
+#include "CoordSysMacro.h"
+
+#include "GeometryCommon.h"
+#include "CoordSysCommon.h"
+
+#include "CoordSysUtil.h"
+#include "MentorUtil.h"
+
+#include "CoordSysGeodeticTransformGridFile.h"
+#include "CoordSysGeodeticTransformDefParams.h"
+#include "CoordSysGeodeticInterpolationTransformDefParams.h"
+
+#include <cs_map.h>
+
+using namespace CSLibrary;
+
+CCoordinateSystemGeodeticInterpolationTransformDefParams::CCoordinateSystemGeodeticInterpolationTransformDefParams(
+    const csGridFileXformParams& params, bool isProtected)
+    : CCoordinateSystemGeodeticTransformDefParams(isProtected), gridFileParams(NULL)
+{
+    this->Reset();
+    *this->gridFileParams = params;
+}
+
+CCoordinateSystemGeodeticInterpolationTransformDefParams::~CCoordinateSystemGeodeticInterpolationTransformDefParams()
+{
+    this->ReleaseInstance();
+}
+
+void CCoordinateSystemGeodeticInterpolationTransformDefParams::Dispose()
+{
+    delete this;
+}
+
+void CCoordinateSystemGeodeticInterpolationTransformDefParams::Reset()
+{
+    this->ReleaseInstance();
+    
+    this->gridFileParams = (csGridFileXformParams*) CS_malc(sizeof(csGridFileXformParams));
+    if (NULL == this->gridFileParams)
+        throw new MgOutOfMemoryException(L"CCoordinateSystemGeodeticInterpolationTransformDefParams.Reset", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    memset(this->gridFileParams, 0, sizeof(csGridFileXformParams));
+}
+
+void CCoordinateSystemGeodeticInterpolationTransformDefParams::ReleaseInstance()
+{
+    if (NULL != this->gridFileParams)
+    {
+        CS_free(this->gridFileParams);
+        this->gridFileParams = NULL;
+    }
+}
+
+void CCoordinateSystemGeodeticInterpolationTransformDefParams::SetGridFiles(MgDisposableCollection* gridFiles)
+{
+    VERIFY_INITIALIZED(L"CCoordinateSystemGeodeticInterpolationTransformDefParams.SetGridFiles");
+    VERIFY_NOT_PROTECTED(L"CCoordinateSystemGeodeticInterpolationTransformDefParams.SetGridFiles");
+
+    //we don't take ownership over fileNames
+    ENSURE_NOT_NULL(gridFiles, CCoordinateSystemGeodeticInterpolationTransformDefParams::SetGridFileNames);
+    const INT32 fileNamesCount = gridFiles->GetCount();
+    if (fileNamesCount > csGRIDI1_FILEMAX)
+        throw new MgInvalidArgumentException(L"CCoordinateSystemGeodeticInterpolationTransformDefParams.SetGridFiles", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    bool emptyFileCollection = (0 == fileNamesCount);
+    csGeodeticXfromParmsFile_* allFiles = emptyFileCollection ? NULL : new csGeodeticXfromParmsFile_[fileNamesCount];
+    
+    MG_TRY()
+
+    if (!emptyFileCollection)
+        memset(allFiles, 0, fileNamesCount * sizeof(csGeodeticXfromParmsFile_));
+
+    for(INT32 i = 0; i < fileNamesCount; i++)
+    {
+        Ptr<MgDisposable> gridFile = gridFiles->GetItem(i); //calls [AddRef] on the item being returned
+        CCoordinateSystemGeodeticTransformGridFile* gridFileSetting = dynamic_cast<CCoordinateSystemGeodeticTransformGridFile*>(gridFile.p);
+        if (NULL == gridFileSetting)
+            throw new MgInvalidArgumentException(L"CCoordinateSystemGeodeticInterpolationTransformDefParams.SetGridFiles", __LINE__, __WFILE__, NULL, L"", NULL);
+
+        //we only allow for setting valid grid files
+        if (!gridFileSetting->IsValid())
+            throw new MgInvalidArgumentException(L"CCoordinateSystemGeodeticInterpolationTransformDefParams.SetGridFiles", __LINE__, __WFILE__, NULL, L"", NULL);
+
+        //take the values from the settings we have been passed here and set our internal
+        //[csGridFileXFormat] instance at index [i] to those values
+        gridFileSetting->CopyTo(&allFiles[i]);
+    }
+
+    this->gridFileParams->fileReferenceCount = fileNamesCount;
+
+    //wipe out all memory where the filenames are stored...
+    memset(this->gridFileParams->fileNames, 0, csGRIDI1_FILEMAX * sizeof(csGeodeticXfromParmsFile_));
+    //...and copy our values in case we've been given a non-empty list
+    if (!emptyFileCollection)
+        memcpy(this->gridFileParams->fileNames, allFiles, fileNamesCount * sizeof(csGeodeticXfromParmsFile_));
+
+    MG_CATCH(L"CCoordinateSystemGeodeticInterpolationTransformDefParams.SetGridFileNames");
+
+    delete[] allFiles; //safe to call on [null]
+
+    MG_THROW();
+}
+
+MgDisposableCollection* CCoordinateSystemGeodeticInterpolationTransformDefParams::GetGridFiles()
+{
+    Ptr<MgDisposableCollection> gridFileNames = new MgDisposableCollection();
+
+    INT32 fileCount = this->gridFileParams->fileReferenceCount;
+    if (0 == fileCount)
+        return gridFileNames.Detach();
+    
+    for(INT32 i = 0; i < fileCount && i < csGRIDI1_FILEMAX; i++)
+    {
+        csGeodeticXfromParmsFile_& singleGridFile = this->gridFileParams->fileNames[i];
+
+        Ptr<CCoordinateSystemGeodeticTransformGridFile> gridFileSetting =
+            new CCoordinateSystemGeodeticTransformGridFile(&singleGridFile, this->IsProtected());
+
+        //the collection will take ownership over [gridFileSetting]
+        gridFileNames->Add(gridFileSetting);
+    }
+
+    return gridFileNames.Detach();
+}
+
+MgCoordinateSystemGeodeticTransformGridFile* CCoordinateSystemGeodeticInterpolationTransformDefParams::NewGridFile()
+{
+    return new CCoordinateSystemGeodeticTransformGridFile(NULL, false);
+}
+
+bool CCoordinateSystemGeodeticInterpolationTransformDefParams::IsValid()
+{
+    if (NULL == this->gridFileParams)
+        return false;
+
+    Ptr<MgDisposableCollection> gridFiles = this->GetGridFiles();
+    INT32 gridFileCount = gridFiles->GetCount();
+    if (gridFileCount > csGRIDI1_FILEMAX)
+        return false;
+
+    for (INT32 i = 0; i < gridFileCount; i++)
+    {
+        Ptr<MgDisposable> gridFilePtr = gridFiles->GetItem(i);
+        MgCoordinateSystemGeodeticTransformGridFile* gridFile = dynamic_cast<MgCoordinateSystemGeodeticTransformGridFile*>(gridFilePtr.p);
+
+        if (NULL == gridFile || !gridFile->IsValid())
+        {
+            _ASSERT(false); //how comes? This can only have happened when we initialized this item here
+            return false;
+        }
+    }
+
+    return true; //0 items count is ok
+}
+
+bool CCoordinateSystemGeodeticInterpolationTransformDefParams::IsProtected()
+{
+    return CCoordinateSystemGeodeticTransformDefParams::IsProtected();
+}
+
+DEFINE_GET_SET_STRING(CCoordinateSystemGeodeticInterpolationTransformDefParams,Fallback,this->gridFileParams->fallback)
+
+void CCoordinateSystemGeodeticInterpolationTransformDefParams::CopyTo(void* target) const
+{
+    ENSURE_NOT_NULL(target, CCoordinateSystemGeodeticInterpolationTransformDefParams::CopyTo);
+    
+    memcpy(target, this->gridFileParams, sizeof(csGridFileXformParams));
+}
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.h (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.h)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.h	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,62 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _CCOORDINATESYSTEMGEODETICINTERPOLATIONTRANSFORMDEFPARAMS_H_
+#define _CCOORDINATESYSTEMGEODETICINTERPOLATIONTRANSFORMDEFPARAMS_H_
+
+
+namespace CSLibrary
+{
+    typedef cs_GeodeticTransform_::csGeodeticXformParameters::csGeodeticXformParmsGridFiles_ csGridFileXformParams;
+
+    class CCoordinateSystemGeodeticInterpolationTransformDefParams :
+        public MgCoordinateSystemGeodeticInterpolationTransformDefParams,
+        public CCoordinateSystemGeodeticTransformDefParams
+    {
+    public:
+        CCoordinateSystemGeodeticInterpolationTransformDefParams(const csGridFileXformParams& params, bool isProtected);
+        ~CCoordinateSystemGeodeticInterpolationTransformDefParams();
+        
+        // >>> MgCoordinateSystemGeodeticInterpolationTransformDefParams
+        virtual void SetGridFiles(MgDisposableCollection* gridFiles);
+        virtual MgDisposableCollection* GetGridFiles();
+			
+        virtual STRING GetFallback();
+        virtual void SetFallback(CREFSTRING);
+
+        virtual MgCoordinateSystemGeodeticTransformGridFile* NewGridFile();
+
+        // <<< MgCoordinateSystemGeodeticInterpolationTransformDefParams
+
+        virtual bool IsValid(); //from MgCoordinateSystemGeodeticTransformDefParams
+        virtual bool IsProtected();
+
+        virtual void Dispose();
+
+    private:
+        void CopyTo(void* target) const;
+        
+        void Reset();
+        void ReleaseInstance();
+
+    private:
+        csGridFileXformParams* gridFileParams;
+    };
+
+} //namespace CSLibrary
+
+#endif //_CCOORDINATESYSTEMGEODETICINTERPOLATIONTRANSFORMDEFPARAMS_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.cpp (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.cpp)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.cpp	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,133 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#define CS_MAP_DEF_VARIABLE this->mulRegParams
+
+#include "CoordSysMacro.h"
+
+#include "GeometryCommon.h"
+#include "CoordSysCommon.h"
+
+#include "CoordSysUtil.h"
+#include "MentorUtil.h"
+
+#include "CoordSysGeodeticTransformGridFile.h"
+#include "CoordSysGeodeticTransformDefParams.h"
+#include "CoordSysGeodeticMultipleRegressionTransformDefParams.h"
+
+#include <cs_map.h>
+
+using namespace CSLibrary;
+
+CCoordinateSystemGeodeticMultipleRegressionTransformDefParams::CCoordinateSystemGeodeticMultipleRegressionTransformDefParams(
+    const csMultipleRegressionXformParams& params, INT32 mulRegTransformMethod, bool isProtected)
+    : CCoordinateSystemGeodeticTransformDefParams(isProtected)
+    , mulRegParams(NULL), transformationMethod(mulRegTransformMethod)
+{
+    this->Reset();
+    *this->mulRegParams = params;
+}
+
+CCoordinateSystemGeodeticMultipleRegressionTransformDefParams::~CCoordinateSystemGeodeticMultipleRegressionTransformDefParams()
+{
+    this->ReleaseInstance();
+}
+
+void CCoordinateSystemGeodeticMultipleRegressionTransformDefParams::Dispose()
+{
+    delete this;
+}
+
+void CCoordinateSystemGeodeticMultipleRegressionTransformDefParams::Reset()
+{
+    this->ReleaseInstance();
+    
+    this->mulRegParams = (csMultipleRegressionXformParams*) CS_malc(sizeof(csMultipleRegressionXformParams));
+    if (NULL == this->mulRegParams)
+        throw new MgOutOfMemoryException(L"CCoordinateSystemGeodeticMultipleRegressionTransformDefParams.Reset", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    memset(this->mulRegParams, 0, sizeof(csMultipleRegressionXformParams));
+}
+
+void CCoordinateSystemGeodeticMultipleRegressionTransformDefParams::ReleaseInstance()
+{
+    if (NULL != this->mulRegParams)
+    {
+        CS_free(this->mulRegParams);
+        this->mulRegParams = NULL;
+    }
+}
+
+void CCoordinateSystemGeodeticMultipleRegressionTransformDefParams::CopyTo(void* target) const
+{
+    ENSURE_NOT_NULL(target, CCoordinateSystemGeodeticMultipleRegressionTransformDefParams::CopyTo);
+    
+    memcpy(target, this->mulRegParams, sizeof(csMultipleRegressionXformParams));
+}
+
+bool CCoordinateSystemGeodeticMultipleRegressionTransformDefParams::IsValid()
+{
+    //we're relying on the CS_gxchk() method that will be invoked, before the parent transformation
+    //definition is finally passed to CS_Map
+    return true;
+}
+
+bool CCoordinateSystemGeodeticMultipleRegressionTransformDefParams::IsProtected()
+{
+    return CCoordinateSystemGeodeticTransformDefParams::IsProtected();
+}
+
+INT32 CCoordinateSystemGeodeticMultipleRegressionTransformDefParams::GetTransformationMethod()
+{
+    return this->transformationMethod;
+}
+
+void CCoordinateSystemGeodeticMultipleRegressionTransformDefParams::SetTransformationMethod(INT32 mulRegTransformationMethod)
+{
+    VERIFY_NOT_PROTECTED(L"CCoordinateSystemGeodeticMultipleRegressionTransformDefParams::SetTransformationMethod");
+
+    switch(mulRegTransformationMethod)
+    {
+    case MgCoordinateSystemGeodeticMultipleRegressionTransformationMethod::None:
+    case MgCoordinateSystemGeodeticMultipleRegressionTransformationMethod::GeneralPolynomialEpsg:
+    case MgCoordinateSystemGeodeticMultipleRegressionTransformationMethod::MultipleRegression:
+        break;
+
+    default:
+        throw new MgInvalidArgumentException(L"CCoordinateSystemGeodeticMultipleRegressionTransformDefParams.SetTransformationMethod", __LINE__, __WFILE__, NULL, L"", NULL);
+    }
+
+    this->transformationMethod = mulRegTransformationMethod;
+}
+
+//DEFINE_GET_SET_NUMERIC_IDX(CCoordinateSystemGeodeticMultipleRegressionTransformDefParams,PhiBitmap,UINT32,this->mulRegParams->phiBitMap,3)
+//DEFINE_GET_SET_NUMERIC_IDX(CCoordinateSystemGeodeticMultipleRegressionTransformDefParams,LambdaBitmap,UINT32,this->mulRegParams->lambdaBitMap,3)
+//DEFINE_GET_SET_NUMERIC_IDX(CCoordinateSystemGeodeticMultipleRegressionTransformDefParams,HeightBitmap,UINT32,this->mulRegParams->heightBitMap,3)
+
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticMultipleRegressionTransformDefParams,Validation,double,this->mulRegParams->validation)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticMultipleRegressionTransformDefParams,TestPhi,double,this->mulRegParams->testPhi)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticMultipleRegressionTransformDefParams,TestLambda,double,this->mulRegParams->testLambda)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticMultipleRegressionTransformDefParams,DeltaPhi,double,this->mulRegParams->deltaPhi)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticMultipleRegressionTransformDefParams,DeltaLambda,double,this->mulRegParams->deltaLambda)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticMultipleRegressionTransformDefParams,DeltaHeight,double,this->mulRegParams->deltaHeight)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticMultipleRegressionTransformDefParams,PhiOffset,double,this->mulRegParams->phiOffset)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticMultipleRegressionTransformDefParams,LambdaOffset,double,this->mulRegParams->lambdaOffset)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticMultipleRegressionTransformDefParams,NormalizationScale,double,this->mulRegParams->normalizationScale)
+        
+DEFINE_GET_SET_NUMERIC_IDX(CCoordinateSystemGeodeticMultipleRegressionTransformDefParams,CoefficientPhi,double,this->mulRegParams->coeffPhi,104)
+DEFINE_GET_SET_NUMERIC_IDX(CCoordinateSystemGeodeticMultipleRegressionTransformDefParams,CoefficientLambda,double,this->mulRegParams->coeffLambda,104)
+DEFINE_GET_SET_NUMERIC_IDX(CCoordinateSystemGeodeticMultipleRegressionTransformDefParams,CoefficientHeight,double,this->mulRegParams->coeffHeight,104)
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.h (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.h)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.h	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,101 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _CCOORDINATESYSTEMGEODETICMULTIPLEREGRESSIONTRANSFORMDEFPARAMS_H_
+#define _CCOORDINATESYSTEMGEODETICMULTIPLEREGRESSIONTRANSFORMDEFPARAMS_H_
+
+
+namespace CSLibrary
+{
+    typedef cs_GeodeticTransform_::csGeodeticXformParameters::csGeodeticXformParmsDmaMulReg_ csMultipleRegressionXformParams;
+
+    class CCoordinateSystemGeodeticMultipleRegressionTransformDefParams :
+        public MgCoordinateSystemGeodeticMultipleRegressionTransformDefParams,
+        public CCoordinateSystemGeodeticTransformDefParams
+    {
+    public:
+
+        CCoordinateSystemGeodeticMultipleRegressionTransformDefParams(const csMultipleRegressionXformParams& mulRegParams,
+            INT32 mulRegTransformMethod, bool isProtected);
+        ~CCoordinateSystemGeodeticMultipleRegressionTransformDefParams();
+
+        virtual void Dispose();
+        virtual bool IsValid();
+        virtual bool IsProtected();
+
+        //virtual UINT32 GetPhiBitmap(INT32 index /* range [0..3]*/); //long compiles as 32 bit in MS VC;
+        //virtual void SetPhiBitmap(INT32 index, UINT32 value); //long compiles as 32 bit in MS VC;
+
+        //virtual UINT32 GetLambdaBitmap(INT32 index /* range [0..3]*/); //long compiles as 32 bit in MS VC;
+        //virtual void SetLambdaBitmap(INT32 index, UINT32 value); //long compiles as 32 bit in MS VC;
+        //
+        //virtual UINT32 GetHeightBitmap(INT32 index /* range [0..3]*/); //long compiles as 32 bit in MS VC;
+        //virtual void SetHeightBitmap(INT32 index, UINT32 value); //long compiles as 32 bit in MS VC;
+
+        virtual double GetValidation();
+        virtual void SetValidation(double validation);
+
+        virtual double GetTestPhi();
+        virtual void SetTestPhi(double testPhi);
+
+        virtual double GetTestLambda();
+        virtual void SetTestLambda(double testLambda);
+        		
+        virtual double GetDeltaPhi();
+        virtual void SetDeltaPhi(double deltaPhi);
+
+        virtual double GetDeltaLambda();
+        virtual void SetDeltaLambda(double deltaLambda);
+
+        virtual double GetDeltaHeight();
+        virtual void SetDeltaHeight(double deltaHeight);
+    			
+        virtual double GetPhiOffset();
+        virtual void SetPhiOffset(double phiOffset);
+
+        virtual double GetLambdaOffset();
+        virtual void SetLambdaOffset(double lambdaOffset);
+        
+        virtual double GetNormalizationScale();
+        virtual void SetNormalizationScale(double NormalizationScale);
+
+        virtual double GetCoefficientPhi(INT32 index /* range [0..104]*/);
+        virtual void SetCoefficientPhi(INT32 index, double value);
+        
+        virtual double GetCoefficientLambda(INT32 index /* range [0..104]*/);
+        virtual void SetCoefficientLambda(INT32 index, double value);
+
+        virtual double GetCoefficientHeight(INT32 index /* range [0..104]*/);
+        virtual void SetCoefficientHeight(INT32 index, double value);
+
+        virtual INT32 GetTransformationMethod();
+        virtual void SetTransformationMethod(INT32 mulRegTransformationMethod);
+
+    private:
+        void CopyTo(void* target) const;
+        
+        void Reset();
+        void ReleaseInstance();
+    
+    private:
+        csMultipleRegressionXformParams* mulRegParams;
+        INT32 transformationMethod;
+    };
+
+} //namespace CSLibrary
+
+#endif //_CCOORDINATESYSTEMGEODETICMULTIPLEREGRESSIONTRANSFORMDEFPARAMS_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPath.cpp (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPath.cpp)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPath.cpp	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPath.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,237 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#include "GeometryCommon.h"
+#include "CoordSysCommon.h"
+#include "CriticalSection.h"
+
+#include "CoordSysGeodeticPathElement.h"
+#include "CoordSysGeodeticPath.h"
+
+#include "CoordSysTransform.h"          //for CCoordinateSystemTransform
+#include "CoordSysUtil.h"               //for CsDictionaryOpenMode
+#include "MentorDictionary.h"
+
+using namespace CSLibrary;
+
+#define CS_MAP_DEF_VARIABLE this->pathDefinition //needed by CoordSysMacro
+
+#include "CoordSysMacro.h" //for DEFINE_GET_SET_STRING and DEFINE_GET_SET_NUMERIC
+
+CCoordinateSystemGeodeticPath::CCoordinateSystemGeodeticPath(MgCoordinateSystemCatalog* pCatalog)
+    : pathDefinition(NULL), catalog(SAFE_ADDREF(pCatalog))
+{
+    if (NULL == pCatalog)
+        throw new MgNullArgumentException(L"CCoordinateSystemGeodeticPath.ctor", __LINE__, __WFILE__, NULL, L"", NULL);
+}
+
+CCoordinateSystemGeodeticPath::~CCoordinateSystemGeodeticPath()
+{
+    this->CleanupInstanceVariables();
+}
+
+void CCoordinateSystemGeodeticPath::Dispose()
+{
+    delete this;
+}
+
+void CCoordinateSystemGeodeticPath::CleanupInstanceVariables()
+{
+    if (NULL != this->pathDefinition)
+    {
+        CS_free(this->pathDefinition);
+        this->pathDefinition = NULL;
+    }
+}
+
+void CCoordinateSystemGeodeticPath::Reset()
+{
+    this->CleanupInstanceVariables();
+    this->pathDefinition = (cs_GeodeticPath_*)CS_malc(sizeof(cs_GeodeticPath_));
+    
+    if (NULL == this->pathDefinition)
+        throw new MgOutOfMemoryException(L"CCoordinateSystemGeodeticPath.Initialize", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    memset ((void*)this->pathDefinition, 0, sizeof(cs_GeodeticPath_));
+}
+
+void CCoordinateSystemGeodeticPath::Initialize(const cs_GeodeticPath_& pathDef)
+{
+    this->Reset();
+    
+    *this->pathDefinition = pathDef;
+}
+
+MgCoordinateSystemGeodeticPath* CCoordinateSystemGeodeticPath::CreateClone()
+{
+    VERIFY_INITIALIZED(L"CCoordinateSystemGeodeticPath.CreateClone");
+
+    Ptr<CCoordinateSystemGeodeticPath> clonedPath = new CCoordinateSystemGeodeticPath(this->catalog);
+    clonedPath->Initialize(*this->pathDefinition);
+    clonedPath->pathDefinition->protect = 0; //unset the protection flag; otherwise the caller wouldn't be able to change any values
+
+    return clonedPath.Detach();
+}
+
+MgCoordinateSystemGeodeticPathElement* CCoordinateSystemGeodeticPath::NewPathElement()
+{
+    return new CCoordinateSystemGeodeticPathElement(NULL, false);
+}
+
+void CCoordinateSystemGeodeticPath::CopyTo(cs_GeodeticPath_& pathDef) const
+{
+    VERIFY_INITIALIZED(L"CCoordinateSystemGeodeticPath.CopyTo");
+    pathDef = *this->pathDefinition;
+}
+
+//helper - don't delete; will be called by MentorUtil / DictionaryUtil
+bool CCoordinateSystemGeodeticPath::IsEncrypted()
+{
+    return false;
+}
+
+bool CCoordinateSystemGeodeticPath::IsProtected()
+{
+    VERIFY_INITIALIZED(L"CCoordinateSystemGeodeticPath.IsProtected");
+    return DICTIONARY_SYS_DEF == this->pathDefinition->protect;
+}
+
+
+bool CCoordinateSystemGeodeticPath::IsValid()
+{
+    if (NULL == this->pathDefinition)
+        return false;
+
+    //make sure, the names for this path and the datums are set
+    size_t pathNameLength = strlen(this->pathDefinition->pathName);
+    if (0 == pathNameLength || pathNameLength >= sizeof(this->pathDefinition->pathName))
+        return false;
+
+    size_t srcDatumNameLength = strlen(this->pathDefinition->srcDatum);
+    if (0 == srcDatumNameLength || srcDatumNameLength >= sizeof(this->pathDefinition->srcDatum))
+        return false;
+
+    size_t trgDatumNameLength = strlen(this->pathDefinition->trgDatum);
+    if (0 == trgDatumNameLength || trgDatumNameLength >= sizeof(this->pathDefinition->trgDatum))
+        return false;
+
+    //check, whether there are only valid path elements according to MgCoordinateSystemGeodeticPathElement::IsValid()
+    Ptr<MgDisposableCollection> pathElements = this->GetPathElements();
+    INT32 pathElementCount = pathElements->GetCount();
+    if (0 == pathElementCount || pathElementCount > csPATH_MAXXFRM)
+        return false;
+
+    if (pathElementCount != this->pathDefinition->elementCount)
+        return false;
+
+    for(INT32 i = 0; i < pathElementCount; i++)
+    {
+        Ptr<MgDisposable> mgDisposable = pathElements->GetItem(i);
+        MgCoordinateSystemGeodeticPathElement* pathElement = dynamic_cast<MgCoordinateSystemGeodeticPathElement*>(mgDisposable.p);
+        if (NULL == pathElement)
+            throw new MgInvalidArgumentException(L"CCoordinateSystemGeodeticPath.IsValid", __LINE__, __WFILE__, NULL, L"", NULL);
+
+        if (!pathElement->IsValid())
+            return false;
+    }
+
+    //TODO: add gp_gpchk in cs_map.h
+    return true; //for any other stuff, like [accuracy] etc. rely on cs_gpcheck
+}
+
+//all getters and setters
+
+MgDisposableCollection* CCoordinateSystemGeodeticPath::GetPathElements()
+{
+    VERIFY_INITIALIZED(L"CCoordinateSystemGeodeticPath.GetPathElements");
+
+    Ptr<MgDisposableCollection> pathElements = new MgDisposableCollection();
+
+    const INT32 pathElementCount = this->pathDefinition->elementCount;
+    for(int i = 0; (i < pathElementCount && i <= csPATH_MAXXFRM); i++)
+    {
+        const cs_GeodeticPathElement_ pathElement = this->pathDefinition->geodeticPathElements[i];
+
+        Ptr<CCoordinateSystemGeodeticPathElement> mgPathElement =
+            new CCoordinateSystemGeodeticPathElement(&pathElement, this->IsProtected());
+        
+        //the elements will be released when the collection is released
+        pathElements->Add(mgPathElement);
+    }
+
+    return pathElements.Detach();
+}
+   
+void CCoordinateSystemGeodeticPath::SetPathElements(MgDisposableCollection* pathElements)
+{
+    VERIFY_INITIALIZED(L"CCoordinateSystemGeodeticPath.SetPathElements");
+    VERIFY_NOT_PROTECTED(L"CCoordinateSystemGeodeticPath.SetPathElements");
+
+    ENSURE_NOT_NULL(pathElements, CCoordinateSystemGeodeticPath::SetPathElements);
+
+    const INT32 pathElementCount = pathElements->GetCount();
+    if (0 == pathElementCount || pathElementCount > csPATH_MAXXFRM)
+        throw new MgInvalidArgumentException(L"CCoordinateSystemGeodeticPath.SetPathElements", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    cs_GeodeticPathElement_* validElements = new cs_GeodeticPathElement_[pathElementCount];
+
+    MG_TRY()
+
+    memset(validElements, 0, pathElementCount * sizeof(cs_GeodeticPathElement_));
+
+    //we don't take ownership over the elements
+    for(int i = 0; i < pathElementCount; i++)
+    {
+        Ptr<MgDisposable> collectionItem = pathElements->GetItem(i);
+        MgCoordinateSystemGeodeticPathElement* pathElement = dynamic_cast<MgCoordinateSystemGeodeticPathElement*>(collectionItem.p);
+        if (NULL == pathElement)
+            throw new MgInvalidArgumentException(L"CCoordinateSystemGeodeticPath.SetPathElements", __LINE__, __WFILE__, NULL, L"", NULL);
+
+        cs_GeodeticPathElement_& pathElementDef = validElements[i];
+
+        //set the name of the transformation on the temporary [pathElementDef] we'll later copy into our own [this->pathDefinition]
+        MentorSetString(pathElement->GetTransformName(),
+            pathElementDef.geodeticXformName /* target buffer */, sizeof(pathElementDef.geodeticXformName));
+
+        pathElementDef.direction = pathElement->GetIsInversed() ? cs_PATHDIR_INV : cs_PATHDIR_FWD;
+    }
+
+    //wipe out the current path definition settings...
+    memset(this->pathDefinition->geodeticPathElements, 0, csPATH_MAXXFRM * sizeof(cs_GeodeticPathElement_));
+    //...copy the new values over...
+    memcpy(this->pathDefinition->geodeticPathElements, validElements, pathElementCount * sizeof(cs_GeodeticPathElement_));
+    //...and set the number of elements contained in the struct
+    this->pathDefinition->elementCount = pathElementCount;
+
+    MG_CATCH(L"CCoordinateSystemGeodeticPath.SetPathElements")
+
+    delete[] validElements;
+
+    MG_THROW();
+}
+
+DEFINE_GET_SET_STRING(CCoordinateSystemGeodeticPath,PathName,this->pathDefinition->pathName)
+DEFINE_GET_SET_STRING(CCoordinateSystemGeodeticPath,Description,this->pathDefinition->description)
+DEFINE_GET_SET_STRING(CCoordinateSystemGeodeticPath,Group,this->pathDefinition->group)
+DEFINE_GET_SET_STRING(CCoordinateSystemGeodeticPath,Source,this->pathDefinition->source)
+DEFINE_GET_SET_STRING(CCoordinateSystemGeodeticPath,SourceDatum,this->pathDefinition->srcDatum)
+DEFINE_GET_SET_STRING(CCoordinateSystemGeodeticPath,TargetDatum,this->pathDefinition->trgDatum)
+
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticPath,Accuracy,double,this->pathDefinition->accuracy)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticPath,IsReversible,bool,this->pathDefinition->reversible)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticPath,EpsgCode,INT32,this->pathDefinition->epsgCode)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticPath,EpsgVariant,INT32,this->pathDefinition->variant)

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPath.h (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPath.h)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPath.h	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPath.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,91 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+
+#ifndef _CCOORDINATESYSTEMGEODETICPATH_H_
+#define _CCOORDINATESYSTEMGEODETICPATH_H_
+
+namespace CSLibrary
+{
+
+    class CCoordinateSystemGeodeticPath : public MgCoordinateSystemGeodeticPath
+    {
+    public:
+        CCoordinateSystemGeodeticPath(MgCoordinateSystemCatalog* pCatalog);
+        ~CCoordinateSystemGeodeticPath();
+
+        virtual void Dispose();
+        
+        void Initialize(const cs_GeodeticPath_& pathDef);
+        void Reset();
+        
+        virtual MgCoordinateSystemGeodeticPath* CreateClone();
+        virtual MgCoordinateSystemGeodeticPathElement* NewPathElement();
+
+        //properties
+        virtual STRING GetPathName();
+        virtual void SetPathName(CREFSTRING);
+
+        virtual STRING GetDescription();  
+        virtual void SetDescription(CREFSTRING);
+
+        virtual STRING GetGroup();  
+        virtual void SetGroup(CREFSTRING);
+
+        virtual STRING GetSource();  
+        virtual void SetSource(CREFSTRING);
+
+        virtual STRING GetTargetDatum();  
+        virtual void SetTargetDatum(CREFSTRING);
+
+        virtual STRING GetSourceDatum();  
+        virtual void SetSourceDatum(CREFSTRING);
+
+        virtual double GetAccuracy(); 
+        virtual void SetAccuracy(double accuracy);
+
+        virtual bool GetIsReversible();
+        virtual void SetIsReversible(bool isReversible);
+
+        virtual INT32 GetEpsgCode();
+        virtual void SetEpsgCode(INT32 epsgCode);
+
+        virtual INT32 GetEpsgVariant();
+        virtual void SetEpsgVariant(INT32 epsgVariant);
+
+        virtual MgDisposableCollection* GetPathElements();
+        virtual void SetPathElements(MgDisposableCollection* pathElements);
+
+        //helper - don't delete
+        virtual bool IsEncrypted();
+        
+        virtual bool IsProtected();
+        virtual bool IsValid();
+
+        void CopyTo(cs_GeodeticPath_& pathDef) const;
+    
+    private:
+        void CleanupInstanceVariables();
+
+    private:
+        cs_GeodeticPath_* pathDefinition;
+        Ptr<MgCoordinateSystemCatalog> catalog;
+    };
+
+} //namespace CSLibrary
+
+#endif //_CCOORDINATESYSTEMGEODETICPATH_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.cpp (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.cpp)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.cpp	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,220 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#include "CoordSysMacro.h"
+
+#include "GeometryCommon.h"
+#include "CoordSysCommon.h"
+#include "CriticalSection.h"
+
+#include "CoordSysUtil.h"               //for Convert_Wide_To_Ascii
+#include "MentorUtil.h"                 //for OpenDictionaryFile()
+#include "MentorDictionary.h"
+
+#include <cs_map.h>
+
+#include "CoordSysEnum.h"
+#include "CoordSysDictionaryBase.h"
+
+#include "CoordSysGeodeticPath.h"
+#include "CoordSysGeodeticPathDictionary.h"
+
+using namespace CSLibrary;
+
+DEFINE_DICTIONARY_FILE_NAME(GeodeticPath, cs_GP_NAME);
+
+extern DefinitionAccess<CCoordinateSystemGeodeticPath, cs_GeodeticPath_> definitionAccess(
+    CS_gpdef,
+    CCoordinateSystemGeodeticPathDictionary::UpdateGeodeticPath, /* CS_gpupd has a different signature than the other CS 'update' methods */
+    CS_gpdel,
+
+    &CCoordinateSystemGeodeticPath::IsValid,
+    CCoordinateSystemGeodeticPathDictionary::SetupCsGeodeticPathStruct,
+    CCoordinateSystemGeodeticPathDictionary::FullInitialize,
+
+    CCoordinateSystemGeodeticPathDictionary::ReadName,
+    CCoordinateSystemGeodeticPathDictionary::ReadDescription,
+    CCoordinateSystemGeodeticPathDictionary::ReadAllGeodeticPaths,
+    
+    CS_gpfnm,
+    
+    CCoordinateSystemGeodeticPathDictionary::GetFileOpenMode);
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+CCoordinateSystemGeodeticPathDictionary::CCoordinateSystemGeodeticPathDictionary(MgCoordinateSystemCatalog *pCatalog)
+   : m_pDictionary(new CCoordinateSystemDictionaryBase<CCoordinateSystemGeodeticPath, cs_GeodeticPath_, &definitionAccess, true, cs_GPDEF_MAGIC, DICTIONARY_FILE_NAME(GeodeticPath)>(pCatalog))
+{
+}
+
+CCoordinateSystemGeodeticPathDictionary::~CCoordinateSystemGeodeticPathDictionary()
+{
+    this->m_pDictionary = NULL;
+}
+
+const char* CCoordinateSystemGeodeticPathDictionary::ReadName(const cs_GeodeticPath_& definition)
+{
+    return definition.pathName;
+}
+
+const char* CCoordinateSystemGeodeticPathDictionary::ReadDescription(const cs_GeodeticPath_& definition)
+{
+    return definition.description;
+}
+
+CsDictionaryOpenMode CCoordinateSystemGeodeticPathDictionary::GetFileOpenMode(long magicNumberFromFile)
+{
+    if (cs_GPDEF_MAGIC == magicNumberFromFile)
+        return Write;
+
+    _ASSERT(false);
+    return Closed;
+}
+
+int CCoordinateSystemGeodeticPathDictionary::UpdateGeodeticPath(cs_GeodeticPath_* csPath, int /*unused*/)
+{
+    return CS_gpupd(csPath);
+}
+
+int CCoordinateSystemGeodeticPathDictionary::ReadAllGeodeticPaths(csFILE *file, cs_GeodeticPath_ *gp_def, int* /*unused*/)
+{
+    return CS_gprd(file, gp_def);
+}
+
+bool CCoordinateSystemGeodeticPathDictionary::SetupCsGeodeticPathStruct(CCoordinateSystemGeodeticPath* mgGeodeticPath, cs_GeodeticPath_& csPath)
+{
+    _ASSERT(NULL != mgGeodeticPath);
+    
+    //copy the values from [mgGeodeticPath] to [csPath]; this will throw an exception in case [mgGeodeticPath] hasn't been initialized yet
+    mgGeodeticPath->CopyTo(csPath);
+
+    return true;
+}
+
+void CCoordinateSystemGeodeticPathDictionary::FullInitialize(CCoordinateSystemGeodeticPath* mgGeodeticPath, cs_GeodeticPath_* csPath, MgCoordinateSystemCatalog* catalog)
+{
+    ENSURE_NOT_NULL(mgGeodeticPath, CCoordinateSystemGeodeticPathDictionary::FullInitialize);
+    ENSURE_NOT_NULL(csPath, CCoordinateSystemGeodeticPathDictionary::FullInitialize);
+
+    _ASSERT(NULL != catalog);
+
+    mgGeodeticPath->Initialize(*csPath);
+}
+
+//-------------------------------------------------------------------------------
+MgCoordinateSystemGeodeticPath* CCoordinateSystemGeodeticPathDictionary::NewGeodeticPath()
+{
+    Ptr<CCoordinateSystemGeodeticPath> newPathItem = this->m_pDictionary->NewItem();
+    newPathItem->Reset(); //sets up the [cs_geodeticpath_] struct; it can thus be used by 
+    
+    return newPathItem.Detach();
+}
+
+//-----------------------------------------------------------------------------
+STRING CCoordinateSystemGeodeticPathDictionary::GetDefaultFileName()
+{
+    return this->m_pDictionary->GetDefaultFileName();
+}
+
+//-----------------------------------------------------------------------------
+//Gets the file name of the dictionary file.
+STRING CCoordinateSystemGeodeticPathDictionary::GetFileName()
+{
+    return this->m_pDictionary->GetFileName();
+}
+
+//-----------------------------------------------------------------------------
+void CCoordinateSystemGeodeticPathDictionary::SetFileName(CREFSTRING sFileName)
+{
+    this->m_pDictionary->SetFileName(sFileName);
+}
+
+//------------------------------------------------------------------------
+//Gets the path to the dictionary file, if currently open.
+STRING CCoordinateSystemGeodeticPathDictionary::GetPath()
+{
+    return this->m_pDictionary->GetPath();
+}
+
+//------------------------------------------------------------------------
+//Gets the size of the set (number of defs it currently contains).
+UINT32 CCoordinateSystemGeodeticPathDictionary::GetSize()
+{
+    return this->m_pDictionary->GetSize();
+}
+
+void CCoordinateSystemGeodeticPathDictionary::Add(MgGuardDisposable *pDefinition)
+{
+    this->m_pDictionary->Add(pDefinition);
+}
+
+void CCoordinateSystemGeodeticPathDictionary::Remove(CREFSTRING sName)
+{
+    this->m_pDictionary->Remove(sName);
+}
+
+void CCoordinateSystemGeodeticPathDictionary::Modify(MgGuardDisposable *pDefinition)
+{
+    this->m_pDictionary->Modify(pDefinition);
+}
+
+MgGuardDisposable* CCoordinateSystemGeodeticPathDictionary::Get(CREFSTRING sName)
+{
+    return this->m_pDictionary->Get(sName);
+}
+
+MgCoordinateSystemGeodeticPath* CCoordinateSystemGeodeticPathDictionary::GetGeodeticPath(CREFSTRING sName)
+{
+    try
+    {
+        return static_cast<MgCoordinateSystemGeodeticPath*>(this->m_pDictionary->Get(sName));
+    }
+    catch(MgCoordinateSystemLoadFailedException* loadFailedException)
+    {
+        //catch only the [MgCoordinateSystemLoadFailedException] and release it right away
+        loadFailedException->Release();
+    }
+
+    return NULL;
+}
+
+//--------------------------------------------------------------
+//Returns whether the set contains a def with the specified name.
+bool CCoordinateSystemGeodeticPathDictionary::Has(CREFSTRING sName)
+{
+    return this->m_pDictionary->Has(sName);
+}
+
+//--------------------------------------------------------------
+//Gets an enumerator for all the defs in the set.
+MgCoordinateSystemEnum* CCoordinateSystemGeodeticPathDictionary::GetEnum()
+{
+    return this->m_pDictionary->GetEnum();
+}
+
+//MgDisposable
+void CCoordinateSystemGeodeticPathDictionary::Dispose()
+{
+    delete this;
+}
+
+//*****************************************************************************
+MgCoordinateSystemCatalog* CCoordinateSystemGeodeticPathDictionary::GetCatalog()
+{
+    return this->m_pDictionary->GetCatalog();
+}
+
+#include "CoordSysDictionaryBase.cpp"
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.h (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.h)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.h	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,86 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _CCOORDINATESYSTEMGEODETICPATHDICTIONARY_H_
+#define _CCOORDINATESYSTEMGEODETICPATHDICTIONARY_H_
+
+
+DECLARE_DICTIONARY_FILE_NAME(GeodeticPath);
+
+//typedef cs_GeodeticPath_* (*ReadPathDefinition)(const char* definitionKey, INT32 dictionaryMagicNumber);
+//typedef const char* (*ReadPathName)(const cs_GeodeticPath_* definition);
+//typedef const char* (*ReadPathDescription)(const cs_GeodeticPath_* definition);
+
+extern DefinitionAccess<CSLibrary::CCoordinateSystemGeodeticPath, cs_GeodeticPath_> definitionAccess;
+
+namespace CSLibrary
+{
+    class CCoordinateSystemGeodeticPathDictionary : public MgCoordinateSystemGeodeticPathDictionary
+    {
+    public:
+        CCoordinateSystemGeodeticPathDictionary(MgCoordinateSystemCatalog *pCatalog);
+        virtual ~CCoordinateSystemGeodeticPathDictionary();
+
+        //create new path
+        virtual MgCoordinateSystemGeodeticPath* NewGeodeticPath();
+        virtual MgCoordinateSystemGeodeticPath* GetGeodeticPath(CREFSTRING pathName);
+
+        //querying the dictionary
+        virtual MgGuardDisposable* Get(CREFSTRING sName);
+        virtual MgCoordinateSystemEnum* GetEnum();
+        virtual bool Has(CREFSTRING sName);
+        virtual STRING GetPath();
+        virtual UINT32 GetSize();
+
+        //CS_Map library support stuff
+        virtual MgCoordinateSystemCatalog* GetCatalog();
+        virtual STRING GetDefaultFileName();
+        virtual STRING GetFileName();
+        virtual void SetFileName(CREFSTRING sFileName);
+        
+        //modify the dictionary
+        virtual void Add(MgGuardDisposable *pDefinition);
+        virtual void Remove(CREFSTRING sName);
+        virtual void Modify(MgGuardDisposable *pDefinition);
+        //virtual void Rename(CREFSTRING sOldName, CREFSTRING sNewName);
+
+    protected:
+        //MgDisposable
+        virtual void Dispose();
+
+    protected:
+
+        Ptr<CCoordinateSystemDictionaryBase<CCoordinateSystemGeodeticPath, cs_GeodeticPath_, \
+            &definitionAccess, true, cs_GPDEF_MAGIC, DICTIONARY_FILE_NAME(GeodeticPath)>> m_pDictionary;
+
+    public:
+
+        static const char* ReadName(const cs_GeodeticPath_& definition);
+        static const char* ReadDescription(const cs_GeodeticPath_& definition);
+        
+        static int UpdateGeodeticPath(cs_GeodeticPath_* csPath, int /*unused*/);
+        static int ReadAllGeodeticPaths(csFILE *file, cs_GeodeticPath_ *gp_def, int* /*unused*/);
+
+        static bool SetupCsGeodeticPathStruct(CCoordinateSystemGeodeticPath* mgGeodeticPath, cs_GeodeticPath_& csPath);
+        static void FullInitialize(CCoordinateSystemGeodeticPath* mgGeodeticPath, cs_GeodeticPath_* csPath, MgCoordinateSystemCatalog* catalog);
+
+        static CsDictionaryOpenMode GetFileOpenMode(long magicNumberFromFile);
+    };
+
+} // End of namespace
+
+#endif //_CCOORDINATESYSTEMGEODETICPATHDICTIONARY_H_

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathElement.cpp (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathElement.cpp)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathElement.cpp	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathElement.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,106 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#include "GeometryCommon.h"
+#include "CoordSysCommon.h"
+#include "CriticalSection.h"
+
+#include "CoordSysGeodeticPathElement.h"
+
+
+#include "CoordSysTransform.h"          //for CCoordinateSystemTransform
+#include "CoordSysUtil.h"               //for CsDictionaryOpenMode
+#include "MentorDictionary.h"
+
+using namespace CSLibrary;
+
+#define CS_MAP_DEF_VARIABLE this->pathElement //needed by CoordSysMacro
+
+#include "CoordSysMacro.h" //for DEFINE_GET_SET_STRING and DEFINE_GET_SET_NUMERIC
+
+CCoordinateSystemGeodeticPathElement::CCoordinateSystemGeodeticPathElement(const cs_GeodeticPathElement_* const pathElementArg, bool isProtected)
+    : pathElement(NULL), isProtected(isProtected)
+{
+    this->Reset(pathElementArg);
+}
+
+CCoordinateSystemGeodeticPathElement::~CCoordinateSystemGeodeticPathElement()
+{
+    this->CleanupInstanceVariables();
+}
+
+void CCoordinateSystemGeodeticPathElement::Dispose()
+{
+    delete this;
+}
+
+void CCoordinateSystemGeodeticPathElement::CleanupInstanceVariables()
+{
+    if (NULL != this->pathElement)
+    {
+        CS_free(this->pathElement);
+        this->pathElement = NULL;
+    }
+}
+
+void CCoordinateSystemGeodeticPathElement::Reset(const cs_GeodeticPathElement_* const pathElementArg)
+{
+    cs_GeodeticPathElement_* tempPathElement = (cs_GeodeticPathElement_*) CS_malc(sizeof(cs_GeodeticPathElement_));
+    if (NULL == tempPathElement)
+        throw new MgOutOfMemoryException(L"CCoordinateSystemGeodeticPathElement.Reset", __LINE__, __WFILE__, NULL, L"", NULL);
+    
+    MG_TRY()
+
+    this->CleanupInstanceVariables();
+    if (NULL == pathElementArg) //initialize to 0 memory
+        memset(tempPathElement, 0, sizeof(cs_GeodeticPathElement_));
+    else
+        *tempPathElement = *pathElementArg; //otherwise, copy the values from the arg over
+
+    this->pathElement = tempPathElement; //make us hold the allocated memory...
+    tempPathElement = NULL; //...and make sure, we don't free it below
+
+    MG_CATCH(L"CCoordinateSystemGeodeticPathElement.Reset")
+
+    if (NULL != tempPathElement)
+        CS_free(tempPathElement);
+
+    MG_THROW()
+}
+
+bool CCoordinateSystemGeodeticPathElement::IsValid()
+{
+    if (NULL == this->pathElement)
+        return false;
+
+    size_t transformNameLength = strlen(this->pathElement->geodeticXformName);
+    _ASSERT(transformNameLength < sizeof(this->pathElement->geodeticXformName)); //how comes?
+    
+    //TODO: put transformNameLength 64 in cs_map.h
+    if (0 == transformNameLength || transformNameLength >= sizeof(this->pathElement->geodeticXformName))
+        return false;
+
+    return (cs_PATHDIR_FWD == this->pathElement->direction) || (cs_PATHDIR_INV == this->pathElement->direction);
+}
+
+bool CCoordinateSystemGeodeticPathElement::IsProtected()
+{
+    return this->isProtected;
+}
+
+DEFINE_GET_SET_STRING(CCoordinateSystemGeodeticPathElement,TransformName,this->pathElement->geodeticXformName)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticPathElement,IsInversed,bool,this->pathElement->direction)
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathElement.h (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathElement.h)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathElement.h	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticPathElement.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,51 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+
+#ifndef _COORDSYSGEODETICPATHELEMENT_H_
+#define _COORDSYSGEODETICPATHELEMENT_H_
+
+namespace CSLibrary
+{
+    class CCoordinateSystemGeodeticPathElement : public MgCoordinateSystemGeodeticPathElement
+    {
+    public:
+        CCoordinateSystemGeodeticPathElement(const cs_GeodeticPathElement_* const pathElement, bool isProtected);
+        ~CCoordinateSystemGeodeticPathElement();
+
+        virtual void Dispose();
+        virtual bool IsValid();
+        virtual bool IsProtected();
+
+        virtual STRING GetTransformName();
+        virtual void SetTransformName(CREFSTRING);
+
+        virtual bool GetIsInversed();
+        virtual void SetIsInversed(bool);
+
+    private:
+       void Reset(const cs_GeodeticPathElement_* const pathElement);
+       void CleanupInstanceVariables();
+
+    private:
+        bool isProtected;
+        cs_GeodeticPathElement_* pathElement;
+    };
+
+} //namespace CSLibrary
+
+#endif //_COORDSYSGEODETICPATHELEMENT_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDef.cpp (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDef.cpp)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDef.cpp	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDef.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,354 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#include "GeometryCommon.h"
+#include "CoordSysCommon.h"
+#include "CriticalSection.h"
+
+#include "CoordSysGeodeticTransformation.h"
+#include "CoordSysGeodeticTransformDefParams.h"
+#include "CoordSysGeodeticAnalyticalTransformDefParams.h"
+#include "CoordSysGeodeticInterpolationTransformDefParams.h"
+#include "CoordSysGeodeticMultipleRegressionTransformDefParams.h"
+#include "CoordSysGeodeticTransformDef.h"
+
+#include "CoordSysTransform.h"          //for CCoordinateSystemTransform
+#include "CoordSysUtil.h"               //for CsDictionaryOpenMode
+#include "MentorDictionary.h"
+
+using namespace CSLibrary;
+
+#define CS_MAP_DEF_VARIABLE this->transformDefinition //needed by CoordSysMacro
+
+#include "CoordSysMacro.h" //for DEFINE_GET_SET_STRING and DEFINE_GET_SET_NUMERIC
+
+CCoordinateSystemGeodeticTransformDef::CCoordinateSystemGeodeticTransformDef(MgCoordinateSystemCatalog* pCatalog)
+    : transformationDefType(0), transformDefinition(NULL), catalog(SAFE_ADDREF(pCatalog) /* make sure, we take a count on it */)
+{
+    //have we been passed a non-null argument?
+    if (NULL == this->catalog)
+        throw new MgNullArgumentException(L"CCoordinateSystemGeodeticTransformDef.ctor", __LINE__, __WFILE__, NULL, L"", NULL); 
+}
+
+CCoordinateSystemGeodeticTransformDef::~CCoordinateSystemGeodeticTransformDef()
+{
+    this->ReleaseInstance();
+}
+
+void CCoordinateSystemGeodeticTransformDef::ReleaseInstance()
+{
+    if (NULL != this->transformDefinition)
+    {
+        CS_free(this->transformDefinition);
+        this->transformDefinition = NULL;
+    }
+
+    this->transformationDefType = 0;
+}
+
+void CCoordinateSystemGeodeticTransformDef::Dispose()
+{
+    delete this;
+}
+
+void CCoordinateSystemGeodeticTransformDef::Reset(INT32 transformationDefType)
+{
+    INT32 transformationType;
+    switch(transformationDefType)
+    {
+    case MgCoordinateSystemGeodeticTransformDefType::None:
+    case MgCoordinateSystemGeodeticTransformDefType::Analytical:
+    case MgCoordinateSystemGeodeticTransformDefType::Interpolation:
+    case MgCoordinateSystemGeodeticTransformDefType::MultipleRegression:
+        transformationType = transformationDefType;
+        break;
+    default:
+        throw new MgInvalidArgumentException(L"CCoordinateSystemGeodeticTransformDef.Reset", __LINE__, __WFILE__, NULL, L"", NULL);
+    }
+    
+    //try creating a new [cs_GeodeticTransform_] instance before we wipe out our own stuff
+    cs_GeodeticTransform_* newEmptyDef = (cs_GeodeticTransform_*)CS_malc(sizeof(cs_GeodeticTransform_));
+    if (NULL == newEmptyDef) //uses CS_malc which returns NULL in case allocation fails
+        throw new MgOutOfMemoryException(L"CCoordinateSystemGeodeticTransformDef.Initialize", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    MG_TRY()
+
+    //now, 0 our temp memory we've allocated
+    memset ((void*)newEmptyDef, 0, sizeof(cs_GeodeticTransform_));
+
+    //ok - everything worked out so far; release this instance's information
+    this->ReleaseInstance();
+    _ASSERT(NULL == this->transformDefinition);
+   
+    this->transformDefinition = newEmptyDef;
+    newEmptyDef = NULL; //make sure, we don't free that one after we get a hold on the (no longer temp) memory
+
+    this->transformationDefType = transformationType;
+
+    MG_CATCH(L"CCoordinateSystemGeodeticTransformDef.Reset")
+
+    if (NULL != newEmptyDef) //will have been set to NULL before
+        CS_free(newEmptyDef);
+
+    MG_THROW()
+}
+
+INT32 CCoordinateSystemGeodeticTransformDef::GetTransformationDefType(INT32 methodCode /* method code as read from the dictionary entry */)
+{
+    INT32 transformationType;
+    switch(methodCode)
+    {
+    //standalone methods; see information in cs_geodetic.h 
+    case cs_DTCMTH_NULLX:
+    case cs_DTCMTH_WGS72:
+        transformationType = MgCoordinateSystemGeodeticTransformDefType::None;
+        break;
+
+    //multiple Regression methods
+    case cs_DTCMTH_MULRG:
+    case cs_DTCMTH_PLYNM:
+        transformationType = MgCoordinateSystemGeodeticTransformDefType::MultipleRegression;
+        break;
+
+    //geocentric methods
+    case cs_DTCMTH_3PARM:
+    case cs_DTCMTH_MOLOD:
+    case cs_DTCMTH_AMOLO:
+    case cs_DTCMTH_GEOCT:
+    case cs_DTCMTH_4PARM:
+    case cs_DTCMTH_6PARM:
+    case cs_DTCMTH_BURSA:
+    case cs_DTCMTH_FRAME:
+    case cs_DTCMTH_7PARM:
+    case cs_DTCMTH_BDKAS:
+        transformationType = MgCoordinateSystemGeodeticTransformDefType::Analytical;
+        break;
+
+    //grid file interpolation methods; if a transformation uses grid file(s), this is the actual
+    //type - the ones below are the format of the grid file(s) being used. For example,
+    //the dictionary does then contains something like
+    //GRID_FILE: NTv2,FWD,.\Australia\Agd66\A66National(13.09.01).gsb
+    case cs_DTCMTH_GFILE:
+        transformationType = MgCoordinateSystemGeodeticTransformDefType::Interpolation;
+        break;
+    
+    //the next entries are not expected; we're mapping them to the interpolation transformation type
+    case cs_DTCMTH_CNTv1:
+    case cs_DTCMTH_CNTv2:
+    case cs_DTCMTH_FRNCH:
+    case cs_DTCMTH_JAPAN:
+    case cs_DTCMTH_ATS77:
+    case cs_DTCMTH_OST97:
+    case cs_DTCMTH_OST02:
+        _ASSERT(false);
+        transformationType = MgCoordinateSystemGeodeticTransformDefType::Interpolation;
+        break;
+
+    default: //invalid / unknown [methodCode] given; don't know how to proceed here
+        throw new MgInvalidArgumentException(L"CCoordinateSystemGeodeticTransformDef.Initialize", __LINE__, __WFILE__, NULL, L"", NULL);
+    }
+
+    return transformationType;
+}
+
+void CCoordinateSystemGeodeticTransformDef::Initialize(const cs_GeodeticTransform_& transformDef)
+{
+    //take the transformation type from the param we've been passed; we'll use that information to build the correct
+    //parameter object later on
+    INT32 transformationType = this->GetTransformationDefType(transformDef.methodCode);
+
+    this->Reset(transformationType);
+    *this->transformDefinition = transformDef;
+}
+
+MgCoordinateSystemGeodeticTransformation* CCoordinateSystemGeodeticTransformDef::CreateTransformation(bool createInverse)
+{
+    VERIFY_INITIALIZED(L"CCoordinateSystemGeodeticTransformDef.CreateTransformation");
+
+    if (MgCoordinateSystemGeodeticTransformDefType::None == this->GetTransformDefType() || !this->IsValid())
+        throw new MgInvalidOperationException(L"CCoordinateSystemGeodeticTransformDef.CreateTransformation", __LINE__,__WFILE__, NULL, L"", NULL);
+    
+    //we don't take ownership of the transformation being returned but
+    //will release [sourceDatum] and [targetDatum];
+    //new [CCoordinateSystemGeodeticTransformation] will have to ADDREF if needed
+    return new CCoordinateSystemGeodeticTransformation(this->catalog, this, createInverse);
+}
+
+MgCoordinateSystemGeodeticTransformDef* CCoordinateSystemGeodeticTransformDef::CreateClone()
+{
+    VERIFY_INITIALIZED(L"CCoordinateSystemGeodeticTransformDef.CreateClone");
+
+    Ptr<CCoordinateSystemGeodeticTransformDef> clonedTransformDef = new CCoordinateSystemGeodeticTransformDef(this->catalog.p);
+    clonedTransformDef->Initialize(*this->transformDefinition);
+    clonedTransformDef->transformDefinition->protect = 0; //unset the protection flag; otherwise the caller wouldn't be able to change any values
+
+    return clonedTransformDef.Detach();
+}
+
+void CCoordinateSystemGeodeticTransformDef::CopyTo(cs_GeodeticTransform_& transformDef) const
+{
+    VERIFY_INITIALIZED(L"CCoordinateSystemGeodeticTransformDef.CopyTo");
+    
+    //copy our values into the [cs_GeodeticTransform_] we've been passed here
+    transformDef = *this->transformDefinition;
+}
+
+INT32 CCoordinateSystemGeodeticTransformDef::GetTransformDefType()
+{
+    return this->transformationDefType; //can be None
+}
+
+MgCoordinateSystemGeodeticTransformDefParams* CCoordinateSystemGeodeticTransformDef::GetParameters()
+{
+    VERIFY_INITIALIZED(L"CCoordinateSystemGeodeticTransformDef.GetParameters");
+
+    switch(this->transformationDefType)
+    {
+    case MgCoordinateSystemGeodeticTransformDefType::None:
+        return NULL;
+
+    case MgCoordinateSystemGeodeticTransformDefType::Analytical:
+        return static_cast<MgCoordinateSystemGeodeticAnalyticalTransformDefParams*>(new CCoordinateSystemGeodeticAnalyticalTransformDefParams(
+            this->transformDefinition->parameters.geocentricParameters, this->transformDefinition->methodCode, this->IsProtected()));
+    
+    case MgCoordinateSystemGeodeticTransformDefType::Interpolation:
+        return static_cast<MgCoordinateSystemGeodeticInterpolationTransformDefParams*>(
+            new CCoordinateSystemGeodeticInterpolationTransformDefParams(this->transformDefinition->parameters.fileParameters, this->IsProtected()));
+    
+    case MgCoordinateSystemGeodeticTransformDefType::MultipleRegression:
+        return static_cast<MgCoordinateSystemGeodeticMultipleRegressionTransformDefParams*>(new CCoordinateSystemGeodeticMultipleRegressionTransformDefParams(
+            this->transformDefinition->parameters.dmaMulRegParameters, this->transformDefinition->methodCode, this->IsProtected()));
+    
+    default: //invalid state; why's that?
+        _ASSERT(false);
+        throw new MgInvalidOperationException(L"CCoordinateSystemGeodeticTransformDef.GetParameters", __LINE__, __WFILE__, NULL, L"", NULL);
+    }
+}
+
+void CCoordinateSystemGeodeticTransformDef::SetParameters(MgCoordinateSystemGeodeticTransformDefParams* parameters)
+{
+    VERIFY_INITIALIZED(L"CCoordinateSystemGeodeticTransformDef.SetParameters");
+    VERIFY_NOT_PROTECTED(L"CCoordinateSystemGeodeticTransformDef.SetParameters");
+
+    //first check, whether this is a NONE transformation definition; if so, ignore the parameter altogether and wipe out
+    //this instance's parameter information to NULL
+    if (MgCoordinateSystemGeodeticTransformDefType::None == this->transformationDefType)
+    {
+        memset(&this->transformDefinition->parameters, 0, sizeof(this->transformDefinition->parameters.sizeDetermination.unionSize));
+        return;
+    }
+
+    //otherwise: make sure, we've been passed non null paramaters...
+    ENSURE_NOT_NULL(parameters, CCoordinateSystemGeodeticTransformDef::SetParameters);
+    
+    INT32 paramsMethodCode = 0x0;
+
+    //...and the parameters are actually of the correct type, i.e. match whatever we've stored in [this->transformationDefType]
+    CCoordinateSystemGeodeticTransformDefParams* transformDefParams = NULL;
+    CCoordinateSystemGeodeticMultipleRegressionTransformDefParams* mulRegParams = NULL;
+    CCoordinateSystemGeodeticAnalyticalTransformDefParams* analyticalParams = NULL;
+
+    switch(this->transformationDefType)
+    {
+    case MgCoordinateSystemGeodeticTransformDefType::Analytical:
+        analyticalParams = dynamic_cast<CCoordinateSystemGeodeticAnalyticalTransformDefParams*>(parameters);
+        if (NULL != analyticalParams)
+        {
+            paramsMethodCode = analyticalParams->GetTransformationMethod();
+            transformDefParams = analyticalParams;
+        }
+        break;
+
+    case MgCoordinateSystemGeodeticTransformDefType::Interpolation:
+        transformDefParams = dynamic_cast<CCoordinateSystemGeodeticInterpolationTransformDefParams*>(parameters);
+        //the transformation method is "grid file"; the actual type doesn't matter as this
+        //is specified through the [MgCoordinateSystemGeodeticInterpolationTransformDefParams] object;
+        //such a transformation can use multiple grid files where each can have a different format
+        paramsMethodCode = cs_DTCMTH_GFILE;
+        break;
+    
+    case MgCoordinateSystemGeodeticTransformDefType::MultipleRegression:
+        mulRegParams = dynamic_cast<CCoordinateSystemGeodeticMultipleRegressionTransformDefParams*>(parameters);
+        if (NULL != mulRegParams)
+        {
+            paramsMethodCode = mulRegParams->GetTransformationMethod();
+            transformDefParams = mulRegParams;
+        }
+
+        break;
+
+    default:
+        _ASSERT(false); //why's that?
+        break;
+    }
+
+    if (NULL == transformDefParams)
+        throw new MgInvalidOperationException(L"CCoordinateSystemGeodeticTransformDef.SetParameters", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    //copy the values from the parameter we've been passed into our own [parameters] section
+    transformDefParams->CopyTo(&this->transformDefinition->parameters);
+    this->transformDefinition->methodCode = paramsMethodCode;
+}
+
+bool CCoordinateSystemGeodeticTransformDef::IsProtected()
+{
+    VERIFY_INITIALIZED(L"CCoordinateSystemGeodeticTransformDef.IsProtected");
+    return (DICTIONARY_SYS_DEF == this->transformDefinition->protect);
+}
+
+bool CCoordinateSystemGeodeticTransformDef::IsValid()
+{
+    if (NULL == this->transformDefinition) //an unitialized definition is always invalid
+        return false;
+
+    Ptr<MgCoordinateSystemGeodeticTransformDefParams> params = this->GetParameters();
+    if (!params->IsValid())
+        return false;
+
+    //TODO: would we also need to check, whether the datum(s) exists?
+
+    /*
+    CriticalClass.Enter();
+    //TODO: pass correct parameters; make sure, CS_gxchk checks all stuff
+    int nNumErrs = CS_gxchk(this->transformDefinition, 0, NULL, 0);
+    CriticalClass.Leave();
+    
+    return (0 == nNumErrs);
+    */
+    return true;
+}
+
+//helper - don't delete
+bool CCoordinateSystemGeodeticTransformDef::IsEncrypted()
+{
+    return false;
+}
+
+DEFINE_GET_SET_STRING(CCoordinateSystemGeodeticTransformDef,TransformName,this->transformDefinition->xfrmName)
+DEFINE_GET_SET_STRING(CCoordinateSystemGeodeticTransformDef,SourceDatum,this->transformDefinition->srcDatum)
+DEFINE_GET_SET_STRING(CCoordinateSystemGeodeticTransformDef,TargetDatum,this->transformDefinition->trgDatum)
+DEFINE_GET_SET_STRING(CCoordinateSystemGeodeticTransformDef,Group,this->transformDefinition->group)
+DEFINE_GET_SET_STRING(CCoordinateSystemGeodeticTransformDef,Description,this->transformDefinition->description)
+DEFINE_GET_SET_STRING(CCoordinateSystemGeodeticTransformDef,Source,this->transformDefinition->source)
+
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticTransformDef,EpsgCode,INT32,this->transformDefinition->epsgCode)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticTransformDef,EpsgVariation,INT32,this->transformDefinition->epsgVariation)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticTransformDef,InverseSupported,bool,this->transformDefinition->inverseSupported)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticTransformDef,MaxIterations,INT32,this->transformDefinition->maxIterations)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticTransformDef,ConvergenceValue,double,this->transformDefinition->cnvrgValue)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticTransformDef,ErrorValue,double,this->transformDefinition->errorValue)
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticTransformDef,Accuracy,double,this->transformDefinition->accuracy)
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDef.h (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDef.h)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDef.h	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDef.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,107 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _CCOORDINATESYSTEMGEODETICTRANSFORMDEF_H_
+#define _CCOORDINATESYSTEMGEODETICTRANSFORMDEF_H_
+
+
+namespace CSLibrary
+{
+
+class CCoordinateSystemGeodeticTransformDef : public MgCoordinateSystemGeodeticTransformDef
+{
+public:
+
+    CCoordinateSystemGeodeticTransformDef(MgCoordinateSystemCatalog* pCatalog);
+    virtual ~CCoordinateSystemGeodeticTransformDef();
+
+    virtual void Dispose();
+
+    void Reset(INT32 transformationDefType);
+    void Initialize(const cs_GeodeticTransform_& transformDef);
+
+    virtual MgCoordinateSystemGeodeticTransformDef* CreateClone();
+
+    //begin properties
+    virtual STRING GetTransformName();
+    virtual void SetTransformName(CREFSTRING name);
+
+    virtual STRING GetSourceDatum();
+    virtual void SetSourceDatum(CREFSTRING datumKey);
+
+    virtual STRING GetTargetDatum();
+    virtual void SetTargetDatum(CREFSTRING datumKey);
+
+    virtual STRING GetGroup();
+    virtual void SetGroup(CREFSTRING group);
+
+    virtual STRING GetDescription();
+    virtual void SetDescription(CREFSTRING description);
+
+    virtual STRING GetSource();
+    virtual void SetSource(CREFSTRING source);
+
+    virtual INT32 GetEpsgCode();
+    virtual void SetEpsgCode(INT32 epsgCode);
+
+    virtual INT32 GetEpsgVariation();
+    virtual void SetEpsgVariation(INT32 epsgVariation);
+
+    virtual bool GetInverseSupported();
+    virtual void SetInverseSupported(bool inverseSupported);
+
+    virtual INT32 GetMaxIterations();
+    virtual void SetMaxIterations(INT32 maxIterations);
+	
+    virtual double GetConvergenceValue();
+    virtual void SetConvergenceValue(double convergenceValue);
+	
+    virtual double GetErrorValue();
+    virtual void SetErrorValue(double errorValue);
+	
+    virtual double GetAccuracy();
+    virtual void SetAccuracy(double accuracy);
+    
+    virtual MgCoordinateSystemGeodeticTransformDefParams* GetParameters();
+    virtual void SetParameters(MgCoordinateSystemGeodeticTransformDefParams* parameters);
+    //end properties
+
+    virtual INT32 GetTransformDefType();
+
+    MgCoordinateSystemGeodeticTransformation* CreateTransformation(bool createInverse);
+
+    //helper - don't delete
+    virtual bool IsEncrypted();
+    
+    virtual bool IsProtected();
+    virtual bool IsValid();
+
+    void CopyTo(cs_GeodeticTransform_& transformDef) const;
+
+private:
+    void ReleaseInstance();
+    INT32 GetTransformationDefType(INT32 methodCode);
+
+private:
+    INT32 transformationDefType;
+    cs_GeodeticTransform_* transformDefinition;
+    Ptr<MgCoordinateSystemCatalog> catalog;
+};
+
+} //namespace CSLibrary
+
+#endif //_CCOORDINATESYSTEMGEODETICTRANSFORMDEF_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.cpp (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.cpp)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.cpp	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,219 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#include "CoordSysMacro.h"
+
+#include "GeometryCommon.h"
+#include "CoordSysCommon.h"
+#include "CriticalSection.h"
+
+#include "CoordSysUtil.h"               //for Convert_Wide_To_Ascii
+#include "MentorUtil.h"                 //for OpenDictionaryFile()
+#include "MentorDictionary.h"
+
+#include <cs_map.h>
+
+#include "CoordSysEnum.h"
+#include "CoordSysDictionaryBase.h"
+
+#include "CoordSysGeodeticTransformDef.h"
+#include "CoordSysGeodeticTransformDefDictionary.h"
+
+using namespace CSLibrary;
+
+DEFINE_DICTIONARY_FILE_NAME(GeodeticTransformation, cs_GX_NAME);
+
+extern DefinitionAccess<CCoordinateSystemGeodeticTransformDef, cs_GeodeticTransform_> transformDefinitionAccess(
+    CS_gxdef,
+    CCoordinateSystemGeodeticTransformDefDictionary::UpdateGeodeticTransformDef, /* CS_gpupd has a different signature than the other CS 'update' methods */
+    CS_gxdel,
+
+    &CCoordinateSystemGeodeticTransformDef::IsValid,
+    CCoordinateSystemGeodeticTransformDefDictionary::SetupCsStructFromMgTransformDef,
+    CCoordinateSystemGeodeticTransformDefDictionary::FullInitialize,
+
+    CCoordinateSystemGeodeticTransformDefDictionary::ReadName,
+    CCoordinateSystemGeodeticTransformDefDictionary::ReadDescription,
+    CCoordinateSystemGeodeticTransformDefDictionary::ReadAllGeodeticTransformDefs,
+    
+    CS_gxfnm,
+    
+    CCoordinateSystemGeodeticTransformDefDictionary::GetFileOpenMode);
+
+CCoordinateSystemGeodeticTransformDefDictionary::CCoordinateSystemGeodeticTransformDefDictionary(MgCoordinateSystemCatalog *pCatalog)
+    : m_pDictionary(new CCoordinateSystemDictionaryBase<CCoordinateSystemGeodeticTransformDef, cs_GeodeticTransform_,
+        &transformDefinitionAccess, true, cs_GXDEF_MAGIC, DICTIONARY_FILE_NAME(GeodeticTransformation)>(pCatalog))
+{
+}
+
+CCoordinateSystemGeodeticTransformDefDictionary::~CCoordinateSystemGeodeticTransformDefDictionary()
+{
+}
+
+
+void CCoordinateSystemGeodeticTransformDefDictionary::Dispose()
+{
+    delete this;
+}
+
+MgCoordinateSystemGeodeticTransformDef* CCoordinateSystemGeodeticTransformDefDictionary::NewGeodeticTransformationDef(INT32 transformationDefType)
+{
+    Ptr<CCoordinateSystemGeodeticTransformDef> newTransformDef = this->m_pDictionary->NewItem();
+    newTransformDef->Reset(transformationDefType); //sets up the [cs_geodeticTransfrom_] struct and initializes it to [transformationDefType]
+    
+    return newTransformDef.Detach(); //this instance is not yet initialized
+}
+
+MgCoordinateSystemGeodeticTransformDef* CCoordinateSystemGeodeticTransformDefDictionary::GetGeodeticTransformationDef(CREFSTRING transformationName)
+{
+    try
+    {
+        return static_cast<MgCoordinateSystemGeodeticTransformDef*>(this->m_pDictionary->Get(transformationName));
+    }
+    catch(MgCoordinateSystemLoadFailedException* loadFailedException)
+    {
+        //catch only the [MgCoordinateSystemLoadFailedException] and release it right away
+        loadFailedException->Release();
+    }
+
+    return NULL;
+}
+
+/******************************************************************************************************/
+/* BEGIN -------------------- MgCoordinateSystemDicationary implementation -------------------- BEGIN */
+/******************************************************************************************************/
+MgGuardDisposable* CCoordinateSystemGeodeticTransformDefDictionary::Get(CREFSTRING sName)
+{
+    return this->m_pDictionary->Get(sName);
+}
+
+MgCoordinateSystemEnum* CCoordinateSystemGeodeticTransformDefDictionary::GetEnum()
+{
+    return this->m_pDictionary->GetEnum();
+}
+
+bool CCoordinateSystemGeodeticTransformDefDictionary::Has(CREFSTRING sName)
+{
+    return this->m_pDictionary->Has(sName);
+}
+
+STRING CCoordinateSystemGeodeticTransformDefDictionary::GetPath()
+{
+    return this->m_pDictionary->GetPath();
+}
+
+UINT32 CCoordinateSystemGeodeticTransformDefDictionary::GetSize()
+{
+    return this->m_pDictionary->GetSize();
+}
+
+MgCoordinateSystemCatalog* CCoordinateSystemGeodeticTransformDefDictionary::GetCatalog()
+{
+    return this->m_pDictionary->GetCatalog();
+}
+
+STRING CCoordinateSystemGeodeticTransformDefDictionary::GetDefaultFileName()
+{
+    return this->m_pDictionary->GetDefaultFileName();
+}
+
+STRING CCoordinateSystemGeodeticTransformDefDictionary::GetFileName()
+{
+    return this->m_pDictionary->GetFileName();
+}
+
+void CCoordinateSystemGeodeticTransformDefDictionary::SetFileName(CREFSTRING sFileName)
+{
+    this->m_pDictionary->SetFileName(sFileName);
+}
+
+void CCoordinateSystemGeodeticTransformDefDictionary::Add(MgGuardDisposable *pDefinition)
+{
+    this->m_pDictionary->Add(pDefinition);
+}
+
+void CCoordinateSystemGeodeticTransformDefDictionary::Remove(CREFSTRING sName)
+{
+    this->m_pDictionary->Remove(sName);
+}
+
+void CCoordinateSystemGeodeticTransformDefDictionary::Modify(MgGuardDisposable *pDefinition)
+{
+    this->m_pDictionary->Modify(pDefinition);
+}
+
+/******************************************************************************************************/
+/* END -------------------- MgCoordinateSystemDicationary implementation -------------------- END */
+/******************************************************************************************************/
+
+/*********************************************************************************************************/
+/* BEGIN -------------------- CCoordinateSystemDictionaryBase support methods -------------------- BEGIN */
+int CCoordinateSystemGeodeticTransformDefDictionary::UpdateGeodeticTransformDef(cs_GeodeticTransform_* csTransformDef, int /*unused*/)
+{
+    return CS_gxupd(csTransformDef);
+}
+
+bool CCoordinateSystemGeodeticTransformDefDictionary::SetupCsStructFromMgTransformDef(CCoordinateSystemGeodeticTransformDef* mgGeodeticTransformDef, cs_GeodeticTransform_& csTransformDef)
+{
+    ENSURE_NOT_NULL(mgGeodeticTransformDef, CCoordinateSystemGeodeticTransformDefDictionary::SetupCsStructFromMgTransformDef);
+
+    //copy the struct values from [mgGeodeticTransformDef] to [csTransformDef]; will throw an exception, if [mgGeodeticTransformDef] hasn't been yet initialized
+    mgGeodeticTransformDef->CopyTo(csTransformDef);
+    return true;
+}
+    
+void CCoordinateSystemGeodeticTransformDefDictionary::FullInitialize(CCoordinateSystemGeodeticTransformDef* mgGeodeticTransformDef,
+                                                                     cs_GeodeticTransform_* csTransformDef,
+                                                                     MgCoordinateSystemCatalog* catalog)
+{
+    ENSURE_NOT_NULL(mgGeodeticTransformDef, CCoordinateSystemGeodeticTransformDefDictionary::FullInitialize);
+    ENSURE_NOT_NULL(csTransformDef, CCoordinateSystemGeodeticTransformDefDictionary::FullInitialize);
+
+    mgGeodeticTransformDef->Initialize(*csTransformDef);
+
+    return;
+}
+
+const char* CCoordinateSystemGeodeticTransformDefDictionary::ReadName(const cs_GeodeticTransform_& definition)
+{
+    return definition.xfrmName;
+}
+
+const char* CCoordinateSystemGeodeticTransformDefDictionary::ReadDescription(const cs_GeodeticTransform_& definition)
+{
+    return definition.description;
+}
+
+int CCoordinateSystemGeodeticTransformDefDictionary::ReadAllGeodeticTransformDefs(csFILE *file, cs_GeodeticTransform_* csTransformDef, int* /*unused*/)
+{
+    return CS_gxrd(file, csTransformDef);
+}
+
+CsDictionaryOpenMode CCoordinateSystemGeodeticTransformDefDictionary::GetFileOpenMode(long magicNumberFromFile)
+{
+    if (cs_GXDEF_MAGIC == magicNumberFromFile)
+        return Write;
+
+    _ASSERT(false);
+    return Closed;
+}
+
+/* END -------------------- CCoordinateSystemDictionaryBase support methods -------------------- END */
+/*****************************************************************************************************/
+
+
+#include "CoordSysDictionaryBase.cpp"
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.h (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.h)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.h	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,82 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _CCOORDINATESYSTEMGEODETICTRANSFORMDEFDICTIONARY_H_
+#define _CCOORDINATESYSTEMGEODETICTRANSFORMDEFDICTIONARY_H_
+
+
+DECLARE_DICTIONARY_FILE_NAME(GeodeticTransformation);
+
+extern DefinitionAccess<CSLibrary::CCoordinateSystemGeodeticTransformDef, cs_GeodeticTransform_> transformDefinitionAccess;
+
+namespace CSLibrary
+{
+    class CCoordinateSystemGeodeticTransformDefDictionary : public MgCoordinateSystemGeodeticTransformDefDictionary
+    {
+    public:
+        CCoordinateSystemGeodeticTransformDefDictionary(MgCoordinateSystemCatalog *pCatalog);
+        virtual ~CCoordinateSystemGeodeticTransformDefDictionary();
+
+        virtual MgCoordinateSystemGeodeticTransformDef* NewGeodeticTransformationDef(INT32 transformationDefType);
+        virtual MgCoordinateSystemGeodeticTransformDef* GetGeodeticTransformationDef(CREFSTRING pathName);
+
+
+        //querying the dictionary
+        virtual MgGuardDisposable* Get(CREFSTRING sName);
+        virtual MgCoordinateSystemEnum* GetEnum();
+        virtual bool Has(CREFSTRING sName);
+        virtual STRING GetPath();
+        virtual UINT32 GetSize();
+
+        //CS_Map library support stuff
+        virtual MgCoordinateSystemCatalog* GetCatalog();
+        virtual STRING GetDefaultFileName();
+        virtual STRING GetFileName();
+        virtual void SetFileName(CREFSTRING sFileName);
+        
+        //modify the dictionary
+        virtual void Add(MgGuardDisposable *pDefinition);
+        virtual void Remove(CREFSTRING sName);
+        virtual void Modify(MgGuardDisposable *pDefinition);
+
+    protected:
+        //MgDisposable
+        virtual void Dispose();
+
+    protected:
+
+        Ptr<CCoordinateSystemDictionaryBase<CCoordinateSystemGeodeticTransformDef, cs_GeodeticTransform_, \
+            &transformDefinitionAccess, true, cs_GXDEF_MAGIC, DICTIONARY_FILE_NAME(GeodeticTransformation)>> m_pDictionary;
+
+    public:
+        
+        static int UpdateGeodeticTransformDef(cs_GeodeticTransform_* csTransformDef, int /*unused*/);
+        static bool SetupCsStructFromMgTransformDef(CCoordinateSystemGeodeticTransformDef* mgGeodeticTransformDef, cs_GeodeticTransform_& csTransformDef);
+        
+        static void FullInitialize(CCoordinateSystemGeodeticTransformDef* mgGeodeticTransformDef, cs_GeodeticTransform_* csTransformDef, MgCoordinateSystemCatalog* catalog);
+
+        static const char* ReadName(const cs_GeodeticTransform_& definition);
+        static const char* ReadDescription(const cs_GeodeticTransform_& definition);
+
+        static int ReadAllGeodeticTransformDefs(csFILE *file, cs_GeodeticTransform_* csTransformDef, int* /*unused*/);
+
+        static CsDictionaryOpenMode GetFileOpenMode(long magicNumberFromFile);
+    };
+
+} // namespace CSLibrary
+
+#endif //_CCOORDINATESYSTEMGEODETICTRANSFORMDEFDICTIONARY_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefParams.cpp (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefParams.cpp)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefParams.cpp	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefParams.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,38 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#include "GeometryCommon.h"
+#include "CoordSysGeodeticTransformDefParams.h"
+
+#include <cs_map.h>
+
+using namespace CSLibrary;
+
+CCoordinateSystemGeodeticTransformDefParams::CCoordinateSystemGeodeticTransformDefParams(bool isProtected)
+: isProtected(isProtected)
+{
+}
+
+CCoordinateSystemGeodeticTransformDefParams::~CCoordinateSystemGeodeticTransformDefParams()
+{
+}
+
+bool CCoordinateSystemGeodeticTransformDefParams::IsProtected()
+{
+    return this->isProtected;
+}
+

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefParams.h (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefParams.h)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefParams.h	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformDefParams.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,40 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _CCOORDINATESYSTEMGEODETICTRANSFORMDEFPARAMS_H_
+#define _CCOORDINATESYSTEMGEODETICTRANSFORMDEFPARAMS_H_
+
+
+namespace CSLibrary
+{    
+    class CCoordinateSystemGeodeticTransformDefParams : public MgCoordinateSystemGeodeticTransformDefParams
+    {
+    public:
+        virtual void CopyTo(void* target) const = 0;
+        virtual bool IsProtected();
+
+    protected:
+        CCoordinateSystemGeodeticTransformDefParams(bool isProtected);
+        virtual ~CCoordinateSystemGeodeticTransformDefParams();
+
+    private:
+        bool isProtected;
+    };
+
+} //namespace CSLibrary
+
+#endif //_CCOORDINATESYSTEMGEODETICTRANSFORMDEFPARAMS_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.cpp (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.cpp)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.cpp	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,138 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#define CS_MAP_DEF_VARIABLE this->gridFileDesc
+
+#include "CoordSysMacro.h"
+
+#include "GeometryCommon.h"
+#include "CoordSysCommon.h"
+
+#include "CoordSysUtil.h"               //for Convert_Wide_To_Ascii
+#include "MentorUtil.h"                 //for OpenDictionaryFile()
+#include "MentorDictionary.h"
+
+#include "CoordSysGeodeticTransformGridFile.h"
+
+#include <cs_map.h>
+
+using namespace CSLibrary;
+
+CCoordinateSystemGeodeticTransformGridFile::CCoordinateSystemGeodeticTransformGridFile(const csGeodeticXfromParmsFile_* const fileFormatParam, bool isProtected)
+    : gridFileDesc(NULL), isProtected(isProtected)
+{
+    this->gridFileDesc = (csGeodeticXfromParmsFile_*)CS_malc(sizeof(csGeodeticXfromParmsFile_));
+    if (NULL == this->gridFileDesc)
+        throw new MgOutOfMemoryException(L"CCoordinateSystemGeodeticAnalyticalTransformDefParams.ctor", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    ::memset(this->gridFileDesc, 0, sizeof(csGeodeticXfromParmsFile_)); 
+    if (NULL != fileFormatParam)
+        *this->gridFileDesc = *fileFormatParam;
+    //else: keep the 0'ed memory
+}
+
+CCoordinateSystemGeodeticTransformGridFile::~CCoordinateSystemGeodeticTransformGridFile()
+{
+    this->ReleaseInstance();
+}
+
+void CCoordinateSystemGeodeticTransformGridFile::Dispose()
+{
+    delete this;
+}
+
+void CCoordinateSystemGeodeticTransformGridFile::ReleaseInstance()
+{
+    if (NULL != this->gridFileDesc)
+    {
+        delete this->gridFileDesc;
+        this->gridFileDesc = NULL;
+    }
+}
+
+void CCoordinateSystemGeodeticTransformGridFile::CopyTo(csGeodeticXfromParmsFile_* destGridFile) const
+{
+    ENSURE_NOT_NULL(destGridFile, CCoordinateSystemGeodeticTransformGridFile::CopyTo);
+    *destGridFile = *this->gridFileDesc;
+}
+
+bool CCoordinateSystemGeodeticTransformGridFile::IsProtected()
+{
+    return this->isProtected;
+}
+
+bool CCoordinateSystemGeodeticTransformGridFile::IsValid()
+{
+    _ASSERT(NULL != this->gridFileDesc);
+
+    size_t fileNameLength = strlen(this->gridFileDesc->fileName);
+    
+    _ASSERT(fileNameLength < csGRIDI1_FLNMSZ);
+    if (0 == fileNameLength || fileNameLength >= csGRIDI1_FLNMSZ)
+        return false;
+
+    switch(this->gridFileDesc->fileFormat)
+    {
+    case cs_DTCFRMT_CNTv1:
+    case cs_DTCFRMT_CNTv2:
+    case cs_DTCFRMT_NADCN:
+    case cs_DTCFRMT_FRNCH:
+    case cs_DTCFRMT_JAPAN:
+    case cs_DTCFRMT_ATS77:
+    case cs_DTCFRMT_OST97:
+    case cs_DTCFRMT_OST02:
+        break;
+    
+    case cs_DTCFRMT_NONE:
+        _ASSERT(false);
+        break;
+
+    //unsupported file formats
+    default:
+        return false;
+    }
+
+    switch(this->gridFileDesc->direction)
+    {
+    case 'i':
+    case 'I':
+    case 'f':
+    case 'F':
+        break;
+
+    default:
+        return false;
+    }
+
+    return true;
+}
+
+
+//************************************ Getters / Setters ***************************** /
+DEFINE_GET_SET_NUMERIC(CCoordinateSystemGeodeticTransformGridFile,FileFormat,INT32,this->gridFileDesc->fileFormat);
+
+bool CCoordinateSystemGeodeticTransformGridFile::GetIsInverseDirection()
+{
+    return 'I' == this->gridFileDesc->direction || 'i' == this->gridFileDesc->direction;
+}
+
+void CCoordinateSystemGeodeticTransformGridFile::SetIsInverseDirection(bool isInverseDirection)
+{
+    this->gridFileDesc->direction = isInverseDirection ? 'I' : 'F';
+}
+
+DEFINE_GET_SET_STRING(CCoordinateSystemGeodeticTransformGridFile, FileName, this->gridFileDesc->fileName);

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.h (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.h)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.h	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,58 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _CCOORDINATESYSTEMGEODETICTRANSFORMGRIDFILE_H
+#define _CCOORDINATESYSTEMGEODETICTRANSFORMGRIDFILE_H
+
+namespace CSLibrary
+{
+    class CCoordinateSystemGeodeticTransformGridFile :
+        public MgCoordinateSystemGeodeticTransformGridFile
+    {
+    public:
+        CCoordinateSystemGeodeticTransformGridFile(const csGeodeticXfromParmsFile_* const fileFormatParam, bool isProtected);
+        ~CCoordinateSystemGeodeticTransformGridFile();
+
+        // >>> MgCoordinateSystemGeodeticTransformGridFile
+        virtual INT32 GetFileFormat();
+        virtual void SetFileFormat(INT32 gridFileFormat);
+
+        virtual bool GetIsInverseDirection();
+        virtual void SetIsInverseDirection(bool isInverseDirection);
+
+        virtual STRING GetFileName();
+        virtual void SetFileName(CREFSTRING fileName);
+
+        virtual bool IsProtected();
+        virtual bool IsValid();
+
+        // <<< MgCoordinateSystemGeodeticTransformGridFile
+
+        virtual void Dispose();
+
+        virtual void CopyTo(csGeodeticXfromParmsFile_* destGridFile) const;
+
+    private:
+        void ReleaseInstance();
+
+    private:
+        csGeodeticXfromParmsFile_* gridFileDesc;
+        bool isProtected;
+    };
+}
+
+#endif //_CCOORDINATESYSTEMGEODETICTRANSFORMGRIDFILE_H
\ No newline at end of file

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformation.cpp
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformation.cpp	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformation.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -18,19 +18,11 @@
 #include "GeometryCommon.h"
 #include "CoordSysCommon.h"
 #include "CriticalSection.h"
+#include "CoordSysUtil.h"                   //for Convert_Wide_To_Ascii, CsDictionaryOpenMode
+#include "MentorUtil.h"                     //for BuildDtDefFromInterface + various utilities
 
-#include "CoordSysEnum.h"                   //for CCoordinateSystemEnum
-#include "CoordSysEnumDatum.h"              //for CCoordinateSystemEnumDatum
-#include "CoordSysEnumEllipsoid.h"          //for CCoordinateSystemEnumEllipsoid
-#include "CoordSysDictionary.h"             //for CCoordinateSystemDictionary
-#include "CoordSysDatumDictionary.h"        //for CCoordinateSystemDatumDictionary
-#include "CoordSysEllipsoidDictionary.h"    //for CCoordinateSystemEllipsoidDictionary
-#include "CoordSysUtil.h"                   //for Convert_Wide_To_Ascii, CsDictionaryOpenMode
-#include "CoordSysCategoryDictionary.h"     //for CCoordinateSystemCategoryDictionary
-#include "CoordSysCatalog.h"                //for CCoordinateSystemCatalog
+#include "CoordSysDatum.h"                  //for CCoordinateSystemDatum
 #include "CoordSysGeodeticTransformation.h" //for CCoordinateSystemGeodeticTransformation
-#include "CoordSysDatum.h"                  //for CCoordinateSystemDatum
-#include "MentorUtil.h"                     //for BuildDtDefFromInterface
 
 using namespace CSLibrary;
 
@@ -48,6 +40,23 @@
 }
 
 //-----------------------------------------------------------------------------
+CCoordinateSystemGeodeticTransformation::CCoordinateSystemGeodeticTransformation(MgCoordinateSystemCatalog* pCatalog, MgCoordinateSystemGeodeticTransformDef* transformationDef, bool createInversed)
+: m_pDtcprm(NULL), m_pDtSource(NULL), m_pDtTarget(NULL)
+{
+    if (NULL == pCatalog || NULL == transformationDef)
+        throw new MgNullArgumentException(L"CCoordinateSystemGeodeticTransformation.ctor", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    //this->Uninitialize(); //not needed - this does release the resourced held by this instance; we haven't set anything yet
+
+    this->SetCatalog(pCatalog);
+    
+    //now - setup ourselves from the [MgCoordinateSystemGeodeticTransformDef] we've been passed
+    //we'll not pass a source and a target datum to CS Map so it constructs the cs_Dtcprm_ struct
+    //but we'll do that because we already have a transformation
+    this->SetupFromTransformationDef(transformationDef, createInversed);
+}
+
+//-----------------------------------------------------------------------------
 CCoordinateSystemGeodeticTransformation::~CCoordinateSystemGeodeticTransformation()
 {
     Uninitialize();
@@ -345,6 +354,44 @@
     assert(!IsInitialized());
 }
 
+//Initializes this transformation instance from an [MgCoordinateSystemGeodeticTransformDef] object;
+//That is, we don't let CS Map find the appropriate transformation based on a source and a target
+//datum but will instruct CS Map to use the transformation defition we pass to it
+//
+void CCoordinateSystemGeodeticTransformation::SetupFromTransformationDef(MgCoordinateSystemGeodeticTransformDef* transformationDef, bool createInversed)
+{
+    char* transformName = Convert_Wide_To_Ascii(transformationDef->GetTransformName().c_str());
+    
+    MG_TRY()
+    
+    
+    //protect the call to the lib files; the calls to the [datumDictionary] below
+    //we also enter the critical section but on the same thread - i.e. no problem;
+    //putting the check here saves us from [enter, leave, enter leave]
+    SmartCriticalClass criticalSection(true);
+
+    //ask CS_Map for the transformation
+    cs_Dtcprm_* datumTransform = CSdtcsu1(transformName, createInversed ? cs_DTCDIR_INV : cs_DTCDIR_FWD, cs_DTCFLG_BLK_W);
+
+    if (NULL == datumTransform)
+        throw new MgInvalidArgumentException(L"CCoordinateSystemGeodeticTransformation.SetupFromTransformationDef", __LINE__, __WFILE__, NULL, L"", NULL);
+    
+    Ptr<MgCoordinateSystemDatumDictionary> datumDictionary = this->m_pCatalog->GetDatumDictionary();
+    Ptr<MgCoordinateSystemDatum> srcDatum = datumDictionary->GetDatum(transformationDef->GetSourceDatum());
+    Ptr<MgCoordinateSystemDatum> trgDatum = datumDictionary->GetDatum(transformationDef->GetTargetDatum());
+
+    this->m_pDtcprm = datumTransform;
+    this->m_pDtSource = srcDatum.Detach();  //m_pDtSource is no auto pointer
+    this->m_pDtTarget = trgDatum.Detach();  //m_pDtTarget is no auto pointer
+
+    MG_CATCH(L"CCoordinateSystemGeodeticTransformation.SetupFromTransformationDef")
+
+    if (NULL != transformName)
+        delete[] transformName;
+
+    MG_THROW()
+}
+
 //-----------------------------------------------------------------------------
 MgCoordinateSystemDatum* CCoordinateSystemGeodeticTransformation::GetWGS84()
 {

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformation.h
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformation.h	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysGeodeticTransformation.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -25,6 +25,7 @@
 {
 public:
     CCoordinateSystemGeodeticTransformation(MgCoordinateSystemCatalog* pCatalog, MgCoordinateSystemDatum* pSource, MgCoordinateSystemDatum *pTarget);
+    CCoordinateSystemGeodeticTransformation(MgCoordinateSystemCatalog* pCatalog, MgCoordinateSystemGeodeticTransformDef* transformationDef, bool createInversed);
     virtual ~CCoordinateSystemGeodeticTransformation();
 
     virtual void SetSourceAndTarget(MgCoordinateSystemDatum *pSource, MgCoordinateSystemDatum *pTarget);
@@ -66,6 +67,7 @@
     void SetCatalog(MgCoordinateSystemCatalog* pCatalog);
     bool GetDefinitionForGeodeticTransformationParameter(cs_Dtdef_& def);
     MgCoordinateSystemDatum* GetWGS84();
+    void SetupFromTransformationDef(MgCoordinateSystemGeodeticTransformDef* transformationDef, bool createInversed);
 
 protected:
     //Data members

Copied: trunk/MgDev/Common/CoordinateSystem/CoordSysMacro.h (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/CoordSysMacro.h)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysMacro.h	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysMacro.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,99 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _MG_COORDSYSMACRO_H_
+#define _MG_COORDSYSMACRO_H_
+
+//make sure to have CS_MAP_DEF_VARIABLE defined before including this header; this is used by VERIFY_INITIALIZED(x)
+    
+    #define MAKE_L_STRING(x) L## #x
+
+#ifdef CS_MAP_DEF_VARIABLE   
+    #define VERIFY_INITIALIZED(x)   if (NULL == CS_MAP_DEF_VARIABLE) \
+        throw new MgInvalidOperationException(x, __LINE__, __WFILE__, NULL, L"", NULL)
+#else
+    #define VERIFY_INITIALIZED(x)
+#endif
+
+#define VERIFY_NOT_PROTECTED(x) if (this->IsProtected()) \
+    throw new MgCoordinateSystemInitializationFailedException(x, __LINE__, __WFILE__, NULL, L"MgCoordinateSystemProtectedException", NULL);
+
+#define DEFINE_GET_STRING(x,y) STRING x::Get##y()
+#define DEFINE_SET_STRING(x,y) void x::Set##y(CREFSTRING propertyValue)
+
+#define DEFINE_GET_SET_STRING(className,propertyName,charBuffer) \
+    DEFINE_GET_STRING(className,propertyName) \
+    { \
+        VERIFY_INITIALIZED(MAKE_L_STRING(className##.Get##propertyName)); \
+        return MentorReadString(charBuffer); \
+    } \
+    DEFINE_SET_STRING(className,propertyName) \
+    { \
+        VERIFY_INITIALIZED(MAKE_L_STRING(className##.Set##propertyName)); \
+        if (this->IsProtected()) \
+            throw new MgCoordinateSystemInitializationFailedException(L"SetString", __LINE__, __WFILE__, NULL, L"MgCoordinateSystemProtectedException", NULL); \
+        \
+        MentorSetString(propertyValue, charBuffer /* target buffer */, sizeof(charBuffer)); \
+    }
+
+#define DEFINE_GET_NUMERIC(x,y,targetType) targetType x::Get##y()
+#define DEFINE_SET_NUMERIC(x,y,targetType) void x::Set##y(targetType propertyValue)
+
+#define DEFINE_GET_NUMERIC_IDX(x,y,targetType) targetType x::Get##y(INT32 index)
+#define DEFINE_SET_NUMERIC_IDX(x,y,targetType) void x::Set##y(INT32 index, targetType propertyValue)
+
+#define DEFINE_GET_SET_NUMERIC(className, propertyName,targetType,target) \
+    DEFINE_GET_NUMERIC(className,propertyName,targetType) \
+    { \
+        VERIFY_INITIALIZED(MAKE_L_STRING(className##.Get##propertyName)); \
+        return target; \
+    } \
+    DEFINE_SET_NUMERIC(className,propertyName,targetType) \
+    { \
+        VERIFY_INITIALIZED(MAKE_L_STRING(className##.Set##propertyName)); \
+        if (this->IsProtected()) \
+            throw new MgCoordinateSystemInitializationFailedException(L"SetValue", __LINE__, __WFILE__, NULL, L"MgCoordinateSystemProtectedException", NULL); \
+        \
+        target = propertyValue;\
+    }
+
+#define DEFINE_GET_SET_NUMERIC_IDX(className, propertyName,targetType,target,maxIdx) \
+    DEFINE_GET_NUMERIC_IDX(className,propertyName,targetType) \
+    { \
+        VERIFY_INITIALIZED(MAKE_L_STRING(className##.Get##propertyName)); \
+        if (index < 0 || index > maxIdx) \
+            throw new MgArgumentOutOfRangeException(L"GetValue", __LINE__, __WFILE__, NULL, L"MgCoordinateSystemProtectedException", NULL); \
+        \
+        return target[index]; \
+    } \
+    DEFINE_SET_NUMERIC_IDX(className,propertyName,targetType) \
+    { \
+        VERIFY_INITIALIZED(MAKE_L_STRING(className##.Set##propertyName)); \
+        if (this->IsProtected()) \
+            throw new MgCoordinateSystemInitializationFailedException(L"SetValue", __LINE__, __WFILE__, NULL, L"MgCoordinateSystemProtectedException", NULL); \
+        \
+        if (index < 0 || index > maxIdx) \
+            throw new MgArgumentOutOfRangeException(L"GetValue", __LINE__, __WFILE__, NULL, L"MgCoordinateSystemProtectedException", NULL); \
+        \
+        target[index] = propertyValue;\
+    }
+
+#define ENSURE_NOT_NULL(param,method) \
+    if (NULL == param) \
+        throw new MgNullArgumentException(L# method, __LINE__, __WFILE__, NULL, L"", NULL)
+
+#endif //_MG_COORDSYSMACRO_H_
\ No newline at end of file

Modified: trunk/MgDev/Common/CoordinateSystem/CoordSysMathComparator.cpp
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/CoordSysMathComparator.cpp	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/CoordSysMathComparator.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -22,6 +22,8 @@
 #include "CoordSysUtil.h"               //for FloatEqual
 #include "MentorUtil.h"                 //for IsLegalMentorName
 
+#include <cs_Legacy.h>
+
 using namespace CSLibrary;
 
 const double CCoordinateSystemMathComparator::kdEpsilonGeographic  = 1.0E-12;      // latitude & longitude

Modified: trunk/MgDev/Common/CoordinateSystem/MentorDictionary.cpp
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/MentorDictionary.cpp	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/MentorDictionary.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -147,12 +147,15 @@
     /*[in]*/ CsDictionaryOpenMode (*ValidMagic)(long),
     /*[in]*/ CREFSTRING sDirectory,
     /*[in]*/ CREFSTRING sFileName,
-    /*[in]*/ REFSTRING sFileNameSet,
+    /*[IN/OUT]*/ REFSTRING sFileNameSet,
     /*[in]*/ const wchar_t* kpMethodName)
 {
     MG_TRY()
 
-    if (!sFileName.empty())
+    _ASSERT(!sFileName.empty());
+
+    //ABA: don't understand the rational behind the logic here - if the file name is empty we're doing nothing?
+    if (!sFileName.empty()) //ABA: should it be rather [sDirectory]; if filename is given, also a path must have been given?
     {
         if (sDirectory.empty())
         {
@@ -182,6 +185,8 @@
     }//if dictionary is specified
 
     //ok, so, save the file name
+    //ABA: sFileName is never touched - same with sFileNameSet; why would a caller wanted us to that
+    //is it rather [sFileNameSet = sPath]?
     sFileNameSet=sFileName;
 
     MG_CATCH_AND_THROW(kpMethodName)

Modified: trunk/MgDev/Common/CoordinateSystem/MentorDictionary.h
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/MentorDictionary.h	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/MentorDictionary.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -32,6 +32,8 @@
 #include "MentorUtil.h"
 #include "Foundation.h"
 
+#define DICTIONARY_SYS_DEF 1
+
 namespace MentorDictionary
 {
     void SetFileName(INT32& lMagic, CsDictionaryOpenMode (*ValidMagic)(long), CREFSTRING sDirectory, CREFSTRING sFileName, REFSTRING sFileNameSet, const wchar_t* kpMethodName);
@@ -49,6 +51,7 @@
     CSystemNameDescriptionMap *
     GenerateSystemNameDescriptionMap(
         csFILE *pFile,
+        const char* (*CS_Tkey)(const T&),
         const char * (*description)(const T&),
         int (*CS_Trd)(csFILE*, T *, int *))
     {
@@ -72,9 +75,11 @@
         {
             while ((nResult = CS_Trd(pFile, &def, &nCrypt)) > 0)
             {
+                const char* keyName = CS_Tkey(def);
+
                 pmapSystemNameDescription->insert(
                     CSystemNameDescriptionPair(
-                        CSystemName(def.key_nm),
+                        CSystemName(keyName),
                         CSystemDescription(description(def))
                     )
                 );
@@ -96,8 +101,8 @@
         return pmapSystemNameDescription;
     }
 
+    #define CALL_MEMBER_FN(object,ptrToMember)  ((object)->*(ptrToMember))
 
-
     //Template function for updating a def in a dictionary.
     //Works for ellipsoids, datums, and coordinate systems.
     //The bAlreadyExists parameter specifies whether there
@@ -109,7 +114,9 @@
     template <class T, class Tinterface>
     void UpdateDef(
         CSystemNameDescriptionMap *pmapSystemNameDescription,
+        const char * (*key)(const T&),
         const char * (*description)(const T&),
+        bool (Tinterface::*isValid)(),
         T * (*CS_Tdef)(const char *),
         int (*CS_Tupd)(T *, int),
         bool (*BuildDefFromInterface)(Tinterface *, T&),
@@ -123,7 +130,7 @@
         }
 
         //Make sure the def they've given us is valid
-        if (!kpDef->IsValid())
+        if (NULL != isValid && CALL_MEMBER_FN(kpDef, isValid)())
         {
             throw new MgInvalidArgumentException(L"MentorDictionary.UpdateDef", __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -136,11 +143,16 @@
             throw new MgCoordinateSystemInitializationFailedException(L"MentorDictionary.UpdateDef", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
+        const char* keyName = key(def);
+
         //Look in the dictionary
         bool bActuallyExists = false;
         INT16 sProtect = 0;
+        
+        //make sure, we've exclusive access to the file(s)
         SmartCriticalClass critical(true);
-        T *pDef = CS_Tdef(def.key_nm);
+        
+        T *pDef = CS_Tdef(keyName);
         if (NULL != pDef)
         {
             bActuallyExists = true;
@@ -153,7 +165,7 @@
         CSystemNameDescriptionMap::iterator iter;
         if (NULL != pmapSystemNameDescription)
         {
-            iter = pmapSystemNameDescription->find(CSystemName(def.key_nm));
+            iter = pmapSystemNameDescription->find(CSystemName(keyName));
             assert(bActuallyExists == (iter != pmapSystemNameDescription->end()));
         }
 
@@ -167,7 +179,7 @@
         else if (!bActuallyExists && bAlreadyExists)
         {
             //It doesn't exist, but it's supposed to.
-            STRING message = MgUtil::MultiByteToWideChar(string(def.key_nm));
+            STRING message = MgUtil::MultiByteToWideChar(string(keyName));
             MgStringCollection arguments;
             arguments.Add(message);
             throw new MgCoordinateSystemLoadFailedException(L"MentorDictionary.UpdateDef", __LINE__, __WFILE__, &arguments, L"", NULL);
@@ -203,7 +215,7 @@
                 {
                     pmapSystemNameDescription->insert(
                         CSystemNameDescriptionPair(
-                            CSystemName(def.key_nm),
+                            CSystemName(keyName),
                             CSystemDescription(description(def))
                         )
                     );
@@ -232,7 +244,7 @@
                 //it.  (We can't just change the key in-place by
                 //modifying (*iter).first, since the key in a std::map
                 //pair is a const object.)
-                if (0 == strcmp(def.key_nm, (*iter).first.name))
+                if (0 == strcmp(keyName, (*iter).first.Name()))
                 {
                     //The key name is unchanged; we can just update
                     //the summary.
@@ -242,13 +254,13 @@
                 {
                     //The name changed (case changed only).  We need
                     //to delete the item and re-insert it.
-                    assert(0 == CS_stricmp(def.key_nm, (*iter).first.name));
+                    assert(0 == CS_stricmp(keyName, (*iter).first.Name()));
                     try
                     {
                         pmapSystemNameDescription->erase(iter);
                         pmapSystemNameDescription->insert(
                             CSystemNameDescriptionPair(
-                                CSystemName(def.key_nm),
+                                CSystemName(keyName),
                                 CSystemDescription(description(def))
                             )
                         );

Modified: trunk/MgDev/Common/CoordinateSystem/MentorUtil.cpp
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/MentorUtil.cpp	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/MentorUtil.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -26,7 +26,7 @@
 #include "CoordSysCommon.h"
 #include "CriticalSection.h"
 #include "CoordSysUtil.h"           //for Convert_Wide_To_Ascii, CsDictionaryOpenMode
-#include "MentorUtil.h"
+#include "MentorDictionary.h"
 #ifdef _WIN32
 #include <io.h>                        //for _dup()
 #endif
@@ -37,6 +37,8 @@
 #include "CoordSysEnum.h"           //for CCoordinateSystemEnum
 #include "CoordSysDictionary.h"     //for CCoordinateSystemDictionary
 
+#include <cs_legacy.h>
+
 using namespace CSLibrary;
 
 //Externs from Mentor
@@ -72,10 +74,14 @@
 const char * CsDesc05(const struct cs_Csdef05_& def) { return def.desc_nm; }
 const char * CsDesc06(const struct cs_Csdef06_& def) { return def.desc_nm; }
 
+const char * DtKey(const cs_Dtdef_& def) { return def.key_nm; }
+const char * DtKey05(const cs_Dtdef05_& def) { return def.key_nm; }
+const char * DtKey06(const cs_Dtdef06_& def) { return def.key_nm; }
+const char * CsKey(const cs_Csdef_& def) { return def.key_nm; }
+const char * CsKey05(const cs_Csdef05_& def) { return def.key_nm; }
+const char * CsKey06(const cs_Csdef06_& def) { return def.key_nm; }
+const char * ElKey(const cs_Eldef_& def) { return def.key_nm; }
 
-
-
-
 //MENTOR_MAINTENANCE
 //The public API needs a programmatic way for clients to ask whether a
 //particular projection uses any or all of the following:
@@ -1355,7 +1361,10 @@
 
     // Skip datum transformation if we have a null transformation
     // We have a null transform if the first transform type is dtcTypNone
-    if (dtcTypNone != pDtcprm->xforms[0].xfrmType)
+    
+    // FIXME
+    if (NULL != pDtcprm->xforms[0])
+    //if (dtcTypNone != pDtcprm->xforms[0].xfrmType) <-- doesn't compile
     {
         double dZ=0.;
         if (pdZ)
@@ -1386,6 +1395,68 @@
     return nResult;
 }
 
+//method that set the current file name of a dictionary in CS Map
+void SetDictionaryFileName(CREFSTRING sFileName /* no directory information must be included */,
+                           CREFSTRING dictionaryPath, /* the directory; no file information */
+                           INT32& magicNumber, /* will be set */
+                           CsDictionaryOpenMode (*MagicNumberCallback)(long),
+                           void (*FileNameTarget)(const char* newFileName),
+                           const wchar_t* context)
+{
+    if (NULL == MagicNumberCallback || NULL == FileNameTarget)
+        throw new MgNullArgumentException(L"MentorUtil.SetDictionaryFileName", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    if (sFileName.empty() || dictionaryPath.empty())
+    {
+        MgStringCollection arguments;
+        arguments.Add(sFileName);
+
+        throw new MgArgumentOutOfRangeException(L"MentorUtil.SetDictionaryFileName", __LINE__, __WFILE__, NULL, L"", NULL);
+    }
+
+    char* szCs = NULL;
+    bool entered = false;
+    
+    MG_TRY()
+
+    //Make local variables to hold converted strings
+    bool bResult = IsValidDictionaryName(sFileName);
+    if (!bResult)
+    {
+        MgStringCollection arguments;
+        arguments.Add(sFileName);
+        throw new MgFileIoException(/*context */ L"MentorUtil.SetDictionaryFileName", __LINE__, __WFILE__, &arguments, L"MgInvalidArgumentException", NULL);
+    }
+
+    STRING fileNameSet;
+    MentorDictionary::SetFileName(
+        magicNumber,
+        MagicNumberCallback,
+        dictionaryPath,
+        sFileName,
+        fileNameSet,
+        L"MentorUtil.SetDictionaryFileName");
+
+    //Okay, everybody opened all right, so update Mentor's global
+    //variables appropriately.
+    szCs = Convert_Wide_To_Ascii(fileNameSet.c_str());
+    
+    CriticalClass.Enter();
+    entered = true;
+
+    //the target function in CS map that sets the current active dictionary file name
+    FileNameTarget(szCs);
+    
+    MG_CATCH(L"MentorUtil.SetDictionaryFileName")
+    
+    if (entered)
+        CriticalClass.Leave();
+    
+    delete[] szCs;
+
+    MG_THROW()
+}
+
 //Opens a Mentor dictionary, verifies magic value, and positions read
 //pointer at start of first record.  Returns true for success, false
 //for failure.
@@ -1545,4 +1616,69 @@
     return wcsncmp(sBuf1.c_str(), sBuf2.c_str(), nLen);
 }
 
+//reads a const char* and returns the STRING class object for it
+STRING MentorReadString(const char* mentorString)
+{
+    if (NULL == mentorString)
+        return L"";
+
+    STRING readString;
+    wchar_t* pString = NULL;
+
+    MG_TRY()
+    
+    pString = Convert_Ascii_To_Wide(mentorString);
+    if (NULL == pString) //ABA: this cannot be null, can it?
+        throw new MgOutOfMemoryException(L"MentorUtil.ReadString", __LINE__, __WFILE__, NULL, L"", NULL);
+    
+    MG_CATCH(L"MentorUtil.ReadString")
+
+    readString = pString;
+    delete[] pString;
+
+    MG_THROW()
+
+    return readString;
+}
+
+void MentorSetString(CREFSTRING sSrc, char *pDest, UINT32 nMaxSize)
+{
+    //make sure to have checked the Protection level before calling this method
+    
+    char *pStr = NULL;
+
+    MG_TRY()
+
+    assert(NULL != pDest);
+
+    if (NULL==pDest)
+    {
+        throw new MgNullArgumentException(L"MentorSetString", __LINE__, __WFILE__, NULL, L"", NULL);
+    }
+
+    if (!IsLegalString(sSrc.c_str(), nMaxSize))
+    {
+        //Can't set string, caller gave us an illegal value
+        throw new MgInvalidArgumentException(L"MentorSetString", __LINE__, __WFILE__, NULL, L"", NULL);
+    }
+
+    //Convert to a C++ string, for Mentor's sake
+    pStr = Convert_Wide_To_Ascii(sSrc.c_str()); //need to delete[] pStr
+    if (NULL == pStr)
+    {
+        throw new MgOutOfMemoryException(L"MentorSetString", __LINE__, __WFILE__, NULL, L"", NULL);
+    }
+
+    //Copy it in
+    memset(pDest, 0, nMaxSize);
+    strncpy(pDest, pStr, nMaxSize);
+
+    MG_CATCH(L"MentorSetString")
+
+    //Clean up and return success.
+    delete [] pStr;
+
+    MG_THROW()
+}
+
 //End of file.

Modified: trunk/MgDev/Common/CoordinateSystem/MentorUtil.h
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/MentorUtil.h	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/MentorUtil.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -69,8 +69,14 @@
 const char * CsDesc05(const struct cs_Csdef05_& def);
 const char * CsDesc06(const struct cs_Csdef06_& def);
 
+const char * DtKey(const cs_Dtdef_& def);
+const char * DtKey05(const cs_Dtdef05_& def);
+const char * DtKey06(const cs_Dtdef06_& def);
+const char * CsKey(const cs_Csdef_& def);
+const char * CsKey05(const cs_Csdef05_& def);
+const char * CsKey06(const cs_Csdef06_& def);
+const char * ElKey(const cs_Eldef_& def);
 
-
 //Returns whether the specified string is legal as a Mentor
 //key name (for coordinate system, datum, or ellipsoid).
 bool IsLegalMentorName(const wchar_t* kpStr);
@@ -203,6 +209,12 @@
 //for success, eError for total failure, or eWarning for partial success.
 INT32 GeodeticTransformationPoint(cs_Dtcprm_ *pDtcprm, double& dLongitude, double& dLatitude, double *pZ);
 
+//utility method to be used by any CS dictionary implementation that has a SetFileName() method in it
+void SetDictionaryFileName(CREFSTRING sFileName, CREFSTRING dictionaryPath, INT32& magicNumber,
+                           CsDictionaryOpenMode (*MagicNumberCallback)(long),
+                           void (*FileNameTarget)(const char* newTargetName),
+                           const wchar_t* context);
+
 //Opens a Mentor dictionary, verifies magic value, and positions read
 //pointer at start of first record.  Returns true for success, false
 //for failure.
@@ -236,7 +248,14 @@
 //(i.e. '_' > letters).  Note:  may modify input buffers.
 int Mentor6Strnicmp(char *pBuf1, char *pBuf2, INT32 nLen);
 
+//reads a const char* and returns the STRING class object for it
+STRING MentorReadString(const char* mentorString = NULL);
 
+//writes a string into the destination char buffer specified through pDest; this method has no idea
+//where the target buffer is, i.e. the caller must have checked the target item's protection
+//level first; usually [Mg*Item::IsProtected()]
+void MentorSetString(CREFSTRING sSrc, char *pDest, UINT32 nMaxSize);
+
 //Macro which defines comparison function, suitable for use with CS_bins,
 //which compares two Mentor structs a la CS_cscmp() et al.
 //Doing this as a macro is incredibly lame, and I really *really* would

Copied: trunk/MgDev/Common/CoordinateSystem/namestruct.cpp (from rev 5163, sandbox/rfc94/Common/CoordinateSystem/namestruct.cpp)
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/namestruct.cpp	                        (rev 0)
+++ trunk/MgDev/Common/CoordinateSystem/namestruct.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,123 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+#include "namestruct.h"
+
+//Constructor.  Initializes to a specified string
+//(if one is provided) or to all zeroes (if not).
+//
+TNameStruct::TNameStruct(const char *kpName)
+    : name(NULL)
+{
+    this->Init(kpName);
+}
+
+//Copy constructor - needed as we allocate the [name] field dynamically
+//
+TNameStruct::TNameStruct(const TNameStruct& other)
+    : name(NULL)
+{
+    this->Init(other.name);
+}
+
+//Destructor - releases the allocated memory
+//
+TNameStruct::~TNameStruct()
+{
+    this->Release();
+}
+
+void TNameStruct::Release()
+{
+    delete[] name;
+    name = NULL;
+}
+
+void TNameStruct::Init(const char *kpName)
+{
+    this->Release();
+
+    size_t stringLength = (NULL == kpName) ? 0 : strnlen(kpName, MAX_STRING_LENGTH);
+    
+    //cannot be null; throws std::bad_alloc in case of failure; (what about replacing the new operator?)
+    //don't catch it here - if we're not even able to allocate about [MAX_STRING_LENGTH] something very serious is going on here
+    name = new char[stringLength + 1];
+
+    if (stringLength > 0) //copy the string into the buffer if we've been given a valid, non-empty string
+        strncpy(name, kpName, stringLength);
+    
+    name[stringLength] = '\0'; // finally, set the terminating NULL char in any case; the buffer is at least 1 char long
+}
+
+//Assignment operator; assign based on other TNameStruct
+//
+TNameStruct& 
+TNameStruct::operator=(const TNameStruct& other)
+{
+    this->Init(other.name);
+    return *this;
+}
+
+//Assignment operator; assign based on string
+TNameStruct&
+TNameStruct::operator=(const char* newName)
+{
+    this->Init(newName);
+    return *this;
+}
+
+//Comparison operator (alphabetic, case-insensitive).
+//
+bool
+TNameStruct::operator<(const TNameStruct& other) const
+{
+    return (_stricmp(name, other.name) < 0);
+}
+
+
+//Comparison operator (alphabetic, case-insensitive).
+//
+bool
+TNameStruct::operator>(const TNameStruct& other) const
+{
+    return (_stricmp(name, other.name) > 0);
+}
+
+
+//Equality operator (alphabetic, case-insensitive).
+//
+bool
+TNameStruct::operator==(const TNameStruct& other) const
+{
+    return (_stricmp(name, other.name) == 0);
+}
+
+
+//Inequality operator (alphabetic, case-insensitive).
+//
+bool
+TNameStruct::operator!=(const TNameStruct& other) const
+{
+    return (_stricmp(name, other.name) != 0);
+}
+
+//Returns this [TNameStruct] current char* pointer
+//
+const char*
+TNameStruct::Name() const
+{
+    return this->name;
+}
\ No newline at end of file

Modified: trunk/MgDev/Common/CoordinateSystem/namestruct.h
===================================================================
--- trunk/MgDev/Common/CoordinateSystem/namestruct.h	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/CoordinateSystem/namestruct.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -57,17 +57,41 @@
 #endif
 #endif
 
-template<int nSize>
+#define MAX_STRING_LENGTH 256
+
 struct TNameStruct
 {
-    //data members
-    char name[nSize];
-    //member functions
+public:
+    // construction / destruction
     TNameStruct(const char *kpName = NULL);
+    TNameStruct(const TNameStruct& other);
+
+    ~TNameStruct();
+
+    //comparison
     bool operator<(const TNameStruct& other) const;
     bool operator>(const TNameStruct& other) const;
     bool operator==(const TNameStruct&) const;
     bool operator!=(const TNameStruct&) const;
+
+    //assignment
+    TNameStruct& operator=(const TNameStruct&);
+    
+    //assignment
+    TNameStruct& operator=(const char* newName);
+
+    //misc. methods
+    const char* Name() const;
+    void Reset();
+
+private:
+    //methods
+    void Init(const char *kpName = NULL);
+    void Release();
+
+private:
+    //data members
+    char* name;
 };
 
 //This struct holds a summary of a definition (just name and description,
@@ -79,8 +103,8 @@
 //coordinate system dictionary shows that that wouldn't save much space;
 //description strings take up, on average, around 2/3 of the space available
 //for them, so the savings wouldn't be much.
-typedef TNameStruct<cs_KEYNM_DEF> CSystemName;
-typedef TNameStruct<64> CSystemDescription;
+typedef TNameStruct CSystemName;
+typedef TNameStruct CSystemDescription;
 
 //Handy typedef for working with sets of CSystemName objects.
 typedef std::list<CSystemName> CSystemNameList;
@@ -100,67 +124,10 @@
 //which were created using a different number.
 const int knMaxCategoryNameLen = 128;
 
-typedef TNameStruct<knMaxCategoryNameLen> CCategoryName;
+typedef TNameStruct CCategoryName;
 typedef std::map<CCategoryName, long> CCategoryNameIndexMap;
 typedef std::list<CCategoryName> CCategoryNameList;
 
-//Constructor.  Initializes to a specified string
-//(if one is provided) or to all zeroes (if not).
-//
-template<int nSize>
-TNameStruct<nSize>::TNameStruct(const char *kpName)
-{
-    if (NULL == kpName)
-    {
-        memset(name, 0, sizeof(name));
-    }
-    else
-    {
-        strncpy(name, kpName, nSize);
-        name[nSize-1] = '\0';
-    }
-}
-
-
-//Comparison operator (alphabetic, case-insensitive).
-//
-template<int nSize>
-bool
-TNameStruct<nSize>::operator<(const TNameStruct& other) const
-{
-    return (_stricmp(name, other.name) < 0);
-}
-
-
-//Comparison operator (alphabetic, case-insensitive).
-//
-template<int nSize>
-bool
-TNameStruct<nSize>::operator>(const TNameStruct& other) const
-{
-    return (_stricmp(name, other.name) > 0);
-}
-
-
-//Equality operator (alphabetic, case-insensitive).
-//
-template<int nSize>
-bool
-TNameStruct<nSize>::operator==(const TNameStruct& other) const
-{
-    return (_stricmp(name, other.name) == 0);
-}
-
-
-//Inequality operator (alphabetic, case-insensitive).
-//
-template<int nSize>
-bool
-TNameStruct<nSize>::operator!=(const TNameStruct& other) const
-{
-    return (_stricmp(name, other.name) != 0);
-}
-
 #endif //MG_NAMESTRUCT_H
 
 

Modified: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemCatalog.h
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemCatalog.h	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemCatalog.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -23,6 +23,8 @@
 class MgCoordinateSystemEllipsoidDictionary;
 class MgCoordinateSystemCategoryDictionary;
 class MgCoordinateSystemGeodeticTransformation;
+class MgCoordinateSystemGeodeticPathDictionary;
+class MgCoordinateSystemGeodeticTransformDefDictionary;
 class MgCoordinateSystemMathComparator;
 class MgCoordinateSystemFormatConverter;
 class MgCoordinateSystemProjectionInformation;
@@ -53,6 +55,8 @@
     virtual MgCoordinateSystemDictionary* GetCoordinateSystemDictionary()=0;
     virtual MgCoordinateSystemDatumDictionary* GetDatumDictionary()=0;
     virtual MgCoordinateSystemEllipsoidDictionary* GetEllipsoidDictionary()=0;
+    virtual MgCoordinateSystemGeodeticPathDictionary* GetGeodeticPathDictionary()=0;
+    virtual MgCoordinateSystemGeodeticTransformDefDictionary* GetGeodeticTransformDefDictionary()=0;
     virtual MgDisposableCollection* GetGeodeticTransformations(MgCoordinateSystemDatum* pSource, MgCoordinateSystemDatum *pTarget)=0;
     virtual MgCoordinateSystemMathComparator* GetMathComparator()=0;
     virtual MgCoordinateSystemFormatConverter* GetFormatConverter()=0;

Modified: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemDatum.h
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemDatum.h	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemDatum.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -40,6 +40,8 @@
     virtual bool IsLegalGroup(CREFSTRING sGroup)=0;
     virtual STRING GetSource()=0;
     virtual void SetSource(CREFSTRING sSource)=0;
+    virtual INT16 GetEpsgCode()=0;
+    virtual void SetEpsgCode(INT16 epsgCode)=0;
     virtual bool IsLegalSource(CREFSTRING sSource)=0;
     virtual bool IsProtected()=0;
     virtual INT16 GetAge()=0;

Modified: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemEllipsoid.h
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemEllipsoid.h	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemEllipsoid.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -38,6 +38,8 @@
     virtual bool IsLegalGroup(CREFSTRING sGroup)=0;
     virtual STRING GetSource()=0;
     virtual void SetSource(CREFSTRING sSource)=0;
+    virtual INT16 GetEpsgCode()=0;
+    virtual void SetEpsgCode(INT16 epsgCode)=0;
     virtual bool IsLegalSource(CREFSTRING sSource)=0;
     virtual bool IsProtected()=0;
     virtual INT16 GetAge()=0;

Modified: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemFactory.cpp
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemFactory.cpp	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemFactory.cpp	2010-09-21 00:20:41 UTC (rev 5164)
@@ -17,16 +17,18 @@
 
 #include "GeometryCommon.h"
 #include "CoordSysCommon.h"             //for COORDINATE_SYSTEM_API
+#include "CoordSysUtil.h"                   //for Convert_Wide_To_Ascii, CsDictionaryOpenMode
 #include "CoordinateSystem.h"           //for MgCoordinateSystem
 #include "CoordSys.h"                   //for CCoordinateSystem
 #include "CoordSysEnum.h"               //for CCoordinateSystemEnum
-#include "CoordSysEnum.h"               //for CCoordinateSystemEnum
 #include "CoordSysEnumDatum.h"          //for CCoordinateSystemEnumDatum
+#include "CoordSysGeodeticPath.h"           //for CCoordinateSystemGeodeticPath
 #include "CoordSysEnumEllipsoid.h"      //for CCoordinateSystemEnumEllipsoid
+#include "CoordSysDictionaryBase.h"         //for CCoordinateSystemDictionaryBase
 #include "CoordSysDictionary.h"         //for CCoordinateSystemDictionary
 #include "CoordSysDatumDictionary.h"    //for CCoordinateSystemDatumDictionary
 #include "CoordSysEllipsoidDictionary.h"//for CCoordinateSystemEllipsoidDictionary
-#include "CoordSysUtil.h"               //for Convert_Wide_To_Ascii, CsDictionaryOpenMode
+#include "CoordSysGeodeticPathDictionary.h" //for CCoordinateSystemGeodeticPathDictionary
 #include "CoordSysCategoryDictionary.h" //for CCoordinateSystemCategoryDictionary
 #include "CoordSysCatalog.h"            //for CCoordinateSystemCatalog
 #include "CoordSysTransform.h"          //for CCoordinateSystemTransform

Copied: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformDefParams.h (from rev 5163, sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformDefParams.h)
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformDefParams.h	                        (rev 0)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformDefParams.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,88 @@
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _MGCOORDINATESYSTEMGEODETICANALYTICALTRANSFORMDEFPARAMS_H_
+#define _MGCOORDINATESYSTEMGEODETICANALYTICALTRANSFORMDEFPARAMS_H_
+
+/// \defgroup MgCoordinateSystemGeodeticAnalyticalTransformDefParams MgCoordinateSystemGeodeticAnalyticalTransformDefParams
+/// \ingroup Coordinate_System_classes
+/// \{
+
+////////////////////////////////////////////////////////////////
+/// \brief
+/// This class holds all parameters that are specific to analytical geodetic transformation methods, e.g.
+/// geocentric transformation, molodensky etc.
+///
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticAnalyticalTransformDefParams : public MgCoordinateSystemGeodeticTransformDefParams
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticAnalyticalTransformDefParams)
+
+PUBLISHED_API:
+
+    //BEGIN: struct csGeodeticXformParmsGeocentric
+    virtual double GetDeltaX() = 0;
+    virtual void SetDeltaX(double deltaX) = 0;
+			
+    virtual double GetDeltaY() = 0;
+    virtual void SetDeltaY(double deltaY) = 0;
+
+    virtual double GetDeltaZ() = 0;
+    virtual void SetDeltaZ(double deltaZ) = 0;
+			
+    virtual double GetRotateX() = 0;
+    virtual void SetRotateX(double rotateX) = 0;
+
+    virtual double GetRotateY() = 0;
+    virtual void SetRotateY(double rotateY) = 0;
+
+    virtual double GetRotateZ() = 0;
+    virtual void SetRotateZ(double rotateZ) = 0;
+			
+	virtual double GetScale() = 0;
+    virtual void SetScale(double scale) = 0;
+
+    virtual double GetTranslateX() = 0;
+    virtual void SetTranslateX(double translateX) = 0;
+
+    virtual double GetTranslateY() = 0;
+    virtual void SetTranslateY(double translateY) = 0;
+
+    virtual double GetTranslateZ() = 0;
+    virtual void SetTranslateZ(double translateZ) = 0;
+    
+    //END: struct csGeodeticXformParmsGeocentric
+
+    virtual INT32 GetTransformationMethod() = 0;
+    virtual void SetTransformationMethod(INT32 analyticalMethodCode) = 0;
+			
+protected:
+    /////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Get the class Id
+    ///
+    /// \return
+    /// The integer value
+    ///
+    INT32 GetClassId(){return m_cls_id;};
+
+CLASS_ID:
+    static const INT32 m_cls_id = CoordinateSystem_CoordinateSystemGeodeticAnalyticalTransformDefParams;
+
+};
+
+/// \}
+
+#endif //_MGCOORDINATESYSTEMGEODETICANALYTICALTRANSFORMDEFPARAMS_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformationMethod.h (from rev 5163, sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformationMethod.h)
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformationMethod.h	                        (rev 0)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformationMethod.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,53 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _MGCOORDINATESYSTEMGEODETICANALYTICALTRANSFORMATIONMETHOD_H_
+#define _MGCOORDINATESYSTEMGEODETICANALYTICALTRANSFORMATIONMETHOD_H_
+
+/// \defgroup MgCoordinateSystemGeodeticAnalyticalTransformationMethod MgCoordinateSystemGeodeticAnalyticalTransformationMethod
+/// \ingroup Coordinate_System_classes
+/// \{
+
+///////////////////////////////////////////////////////////////
+/// \brief
+/// This class defines the currently supported transformation methods for
+/// analytical geodetic transformations as they can be read via the
+/// MgCoordinateSystemGeodeticTransformDefDictionary. That is, the constants
+/// defined below are only valid for MgCoordinateSystemGeodeticTransformDef instances
+/// of type MgCoordinateSystemGeodeticTransformDefType.Analytical.
+///
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticAnalyticalTransformationMethod
+{
+PUBLISHED_API:
+
+    static const INT32 None = 0;
+
+    static const INT32 ThreeParameter =     (8192 + 1);     //cs_DTCMTH_3PARM
+    static const INT32 Molodensky =         (8192 + 2);     //cs_DTCMTH_MOLOD
+    static const INT32 AbridgedMolodensky = (8192 + 3);     //cs_DTCMTH_AMOLO
+    static const INT32 Geocentric =         (8192 + 4);     //cs_DTCMTH_GEOCT
+    static const INT32 FourParameter =      (8192 + 5);     //cs_DTCMTH_4PARM
+    static const INT32 SixParameter =       (8192 + 6);     //cs_DTCMTH_6PARM
+    static const INT32 Bursa =              (8192 + 7);     //cs_DTCMTH_BURSA
+    static const INT32 Frame =              (8192 + 8);     //cs_DTCMTH_FRAME
+    static const INT32 SevenParameter =     (8192 + 9);     //cs_DTCMTH_7PARM
+    static const INT32 MolodenskyBadekas =  (8192 + 10);    //cs_DTCMTH_BDKAS
+
+};
+/// \}
+
+#endif //_MGCOORDINATESYSTEMGEODETICANALYTICALTRANSFORMATIONMETHOD_H_

Copied: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticInterpolationTransformDefParams.h (from rev 5163, sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticInterpolationTransformDefParams.h)
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticInterpolationTransformDefParams.h	                        (rev 0)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticInterpolationTransformDefParams.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,115 @@
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _MGCOORDINATESYSTEMGEODETICINTERPOLATIONTRANSFORMDEFPARAMS_H_
+#define _MGCOORDINATESYSTEMGEODETICINTERPOLATIONTRANSFORMDEFPARAMS_H_
+
+/// \defgroup MgCoordinateSystemGeodeticInterpolationTransformDefParams MgCoordinateSystemGeodeticInterpolationTransformDefParams
+/// \ingroup Coordinate_System_classes
+/// \{
+
+////////////////////////////////////////////////////////////////
+/// \brief
+/// This class holds all parameters that are specific to grid-file based transformation. That is,
+/// where the actual datum shift value for a coordinate is determined by interpolating between grid point values
+/// as defined in the respective grid file(s).
+///
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticInterpolationTransformDefParams : public MgCoordinateSystemGeodeticTransformDefParams
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticInterpolationTransformDefParams)
+
+PUBLISHED_API:
+		
+    //BEGIN: struct csGeodeticXfromParmsFile
+
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Sets the grid files to be used by this transformation. See the description for
+    /// gridFiles parameter.
+    /// 
+    /// \param gridFiles
+    /// A (possibly empty) ordered(!) collection of MgCoordinateSystemGeodeticTransformGridFile objects.
+    /// The order of the elements contained in the collection is important, because this
+    /// instructs the underlying API in which order to use the grid files, e.g. in case of an overlap.
+    /// 
+    /// \remarks
+    /// The caller is responsible for disposing the collection of grid files. That is,
+    /// this parameter object will not take ownership of the collection passed in.
+    virtual void SetGridFiles(MgDisposableCollection* gridFiles) = 0;
+    
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Returns an ordered, non-live collection MgCoordinateSystemGeodeticTransformGridFile elements
+    /// currently used by this parameter object. Changing the collection does NOT
+    /// have an affect on this parent parameter instance. Instead, any API client
+    /// has to modify the collection and then set it back via SetGridFiles.
+    /// The list returned can be an empty but will never be NULL.
+    ///
+    /// \remarks
+    /// The caller is responsible for disposing the collection of grid files being returned
+    /// here.
+    virtual MgDisposableCollection* GetGridFiles() = 0;
+			
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Returns the name of the transformation to fallback to in case the transformation using the
+    /// defined grid files doesn't succeed.
+    ///
+    /// \return
+    /// Returns the name of the fallback transformation. Can be empty if no such fallback transformation
+    /// is defined.
+    /// 
+    virtual STRING GetFallback() = 0;
+
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Sets the name of the transformation to fallback to, if the transformation could not
+    /// be performed using the grid files defined.
+    ///
+    /// \param fallbackTransformation
+    /// Name of the transformation to fallback to.
+    virtual void SetFallback(CREFSTRING fallbackTransformation) = 0;
+
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Creates a new, empty MgCoordinateSystemGeodeticTransformGridFile object
+    /// that can be added to the collection set via SetGridFiles.
+    /// 
+    /// \return
+    /// Returns a new, unitialized MgCoordinateSystemGeodeticTransformGridFile instance
+    /// The caller is resonsible for disposing the object if no longer needed.
+    virtual MgCoordinateSystemGeodeticTransformGridFile* NewGridFile() = 0;
+
+     //END: struct csGeodeticXfromParmsFile
+
+protected:
+    /////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Get the class Id
+    ///
+    /// \return
+    /// The integer value
+    ///
+    INT32 GetClassId(){return m_cls_id;};
+
+CLASS_ID:
+    static const INT32 m_cls_id = CoordinateSystem_CoordinateSystemGeodeticInterpolationTransformDefParams;
+
+};
+
+/// \}
+
+#endif //_MGCOORDINATESYSTEMGEODETICINTERPOLATIONTRANSFORMDEFPARAMS_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformDefParams.h (from rev 5163, sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformDefParams.h)
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformDefParams.h	                        (rev 0)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformDefParams.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,103 @@
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _MGCOORDINATESYSTEMGEODETICMULTIPLEREGRESSIONTRANSFORMDEFPARAMS_H_
+#define _MGCOORDINATESYSTEMGEODETICMULTIPLEREGRESSIONTRANSFORMDEFPARAMS_H_
+
+/// \defgroup MgCoordinateSystemGeodeticMultipleRegressionTransformDefParams MgCoordinateSystemGeodeticMultipleRegressionTransformDefParams
+/// \ingroup Coordinate_System_classes
+/// \{
+
+////////////////////////////////////////////////////////////////
+/// \brief
+/// This class holds all parameters that are specific to the multiple regression transformation method.
+///
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticMultipleRegressionTransformDefParams : public MgCoordinateSystemGeodeticTransformDefParams
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticMultipleRegressionTransformDefParams)
+
+PUBLISHED_API:
+
+    //BEGIN: struct csGeodeticXformParmsDmaMulReg
+
+    //virtual UINT32 GetPhiBitmap(INT32 index) = 0; // range [0..3]; long compiles as 32 bit in MS VC;
+    //virtual void SetPhiBitmap(INT32 index, UINT32 value) = 0; //long compiles as 32 bit in MS VC;
+
+    //virtual UINT32 GetLambdaBitmap(INT32 index) = 0; // range [0..3]; long compiles as 32 bit in MS VC;
+    //virtual void SetLambdaBitmap(INT32 index, UINT32 value) = 0; //long compiles as 32 bit in MS VC;
+    //
+    //virtual UINT32 GetHeightBitmap(INT32 index) = 0; // range [0..3]; long compiles as 32 bit in MS VC;
+    //virtual void SetHeightBitmap(INT32 index, UINT32 value) = 0; //long compiles as 32 bit in MS VC;
+
+    virtual double GetValidation() = 0;
+    virtual void SetValidation(double validation) = 0;
+
+    virtual double GetTestPhi() = 0;
+    virtual void SetTestPhi(double testPhi) = 0;
+
+    virtual double GetTestLambda() = 0;
+    virtual void SetTestLambda(double testLambda) = 0;
+    		
+    virtual double GetDeltaPhi() = 0;
+    virtual void SetDeltaPhi(double deltaPhi) = 0;
+
+    virtual double GetDeltaLambda() = 0;
+    virtual void SetDeltaLambda(double deltaLambda) = 0;
+
+    virtual double GetDeltaHeight() = 0;
+    virtual void SetDeltaHeight(double deltaHeight) = 0;
+			
+    virtual double GetPhiOffset() = 0;
+    virtual void SetPhiOffset(double phiOffset) = 0;
+
+    virtual double GetLambdaOffset() = 0;
+    virtual void SetLambdaOffset(double lambdaOffset) = 0;
+    
+    virtual double GetNormalizationScale() = 0;
+    virtual void SetNormalizationScale(double NormalizationScale) = 0;
+
+    virtual double GetCoefficientPhi(INT32 index) = 0; // range [0..104]
+    virtual void SetCoefficientPhi(INT32 index, double value) = 0;
+    
+    virtual double GetCoefficientLambda(INT32 index) = 0; // range [0..104]
+    virtual void SetCoefficientLambda(INT32 index, double value) = 0;
+
+    virtual double GetCoefficientHeight(INT32 index) = 0; // range [0..104]
+    virtual void SetCoefficientHeight(INT32 index, double value) = 0;
+
+    //END: struct csGeodeticXformParmsDmaMulReg
+
+    virtual INT32 GetTransformationMethod() = 0;
+    virtual void SetTransformationMethod(INT32 mulRegTransformationMethod) = 0;
+
+protected:
+    /////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Get the class Id
+    ///
+    /// \return
+    /// The integer value
+    ///
+    INT32 GetClassId(){return m_cls_id;};
+
+CLASS_ID:
+    static const INT32 m_cls_id = CoordinateSystem_CoordinateSystemGeodeticMultipleRegressionTransformDefParams;
+
+};
+
+/// \}
+
+#endif //_MGCOORDINATESYSTEMGEODETICMULTIPLEREGRESSIONTRANSFORMDEFPARAMS_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformationMethod.h (from rev 5163, sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformationMethod.h)
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformationMethod.h	                        (rev 0)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformationMethod.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,45 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _MGCOORDINATESYSTEMGEODETICMULTIPLEREGRESSIONTRANSFORMATIONMETHOD_H_
+#define _MGCOORDINATESYSTEMGEODETICMULTIPLEREGRESSIONTRANSFORMATIONMETHOD_H_
+
+/// \defgroup MgCoordinateSystemGeodeticMultipleRegressionTransformationMethod MgCoordinateSystemGeodeticMultipleRegressionTransformationMethod
+/// \ingroup Coordinate_System_classes
+/// \{
+
+///////////////////////////////////////////////////////////////
+/// \brief
+/// This class defines the currently supported transformation methods for
+/// multiple regression geodetic transformations as they can be read via the
+/// MgCoordinateSystemGeodeticTransformDefDictionary. That is, the constants
+/// defined below are only valid for MgCoordinateSystemGeodeticTransformDef instances
+/// of type MgCoordinateSystemGeodeticTransformDefType.MultipleRegression.
+///
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticMultipleRegressionTransformationMethod
+{
+PUBLISHED_API:
+
+    static const INT32 None = 0;
+
+    static const INT32 MultipleRegression =     (20480 + 1); //cs_DTCMTH_MULRG
+    static const INT32 GeneralPolynomialEpsg =  (20480 + 2); //cs_DTCMTH_PLYNM
+
+};
+/// \}
+
+#endif //_MGCOORDINATESYSTEMGEODETICMULTIPLEREGRESSIONTRANSFORMATIONMETHOD_H_

Copied: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPath.h (from rev 5163, sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPath.h)
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPath.h	                        (rev 0)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPath.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,143 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _MGCOORDINATESYSTEMGEODETICPATH_H_
+#define _MGCOORDINATESYSTEMGEODETICPATH_H_
+
+/// \defgroup MgCoordinateSystemGeodeticPath MgCoordinateSystemGeodeticPath
+/// \ingroup Coordinate_System_classes
+/// \{
+
+////////////////////////////////////////////////////////////////
+/// \brief
+/// A geodetic (transformation) path allows to concatenate multiple
+/// geodetic transformations. For example, converting between 2 datums
+/// cannot be achieved by doing 1 datum shift only but requires to
+/// do 1 or more datums shifts in between.
+///
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticPath : public MgGuardDisposable
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticPath)
+
+PUBLISHED_API:
+
+    //properties
+
+    virtual STRING GetPathName()=0;
+    virtual void SetPathName(CREFSTRING)=0;
+    
+    virtual STRING GetDescription()=0;  /// __get
+    virtual void SetDescription(CREFSTRING)=0;
+    
+    virtual STRING GetGroup()=0;  /// __get
+    virtual void SetGroup(CREFSTRING)=0;
+    
+    virtual STRING GetSource()=0;  /// __get
+    virtual void SetSource(CREFSTRING)=0;
+    
+    virtual STRING GetTargetDatum()=0;  /// __get
+    virtual void SetTargetDatum(CREFSTRING)=0;
+
+    virtual STRING GetSourceDatum()=0;  /// __get
+    virtual void SetSourceDatum(CREFSTRING)=0;
+
+    virtual double GetAccuracy()=0; /// __get
+    virtual void SetAccuracy(double accuracy)=0;
+
+    virtual bool GetIsReversible()=0;
+    virtual void SetIsReversible(bool isReversible)=0;
+
+    virtual INT32 GetEpsgCode()=0;
+    virtual void SetEpsgCode(INT32 epsgCode)=0;
+    
+    virtual INT32 GetEpsgVariant()=0;
+    virtual void SetEpsgVariant(INT32 epsgVariant)=0;
+
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Returns an ordered collection of MgCoordinateSystemGeodeticPathElement objects
+    /// that form this geodetic transformation path. See remarks.
+    /// 
+    /// \return
+    /// Returns a (possibly empty) collection of MgCoordinateSystemGeodeticPathElement instances.
+    /// The caller is responsible for disposing the collection being returned.
+    ///
+    /// \remarks
+    /// Changing the collection being returned has no affect on this parent geodetic
+    /// path instance. Instead, the collection can be modified and then re-set via
+    /// SetPathElements.
+    virtual MgDisposableCollection* GetPathElements() = 0;
+    
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Sets the individual transformation steps that form this geodetic transformation
+    /// path.
+    /// 
+    /// \remarks
+    /// The caller is responsible for disposing the collection passed in, i.e.
+    /// this geodetic path instance will not take ownership of the elements.
+    virtual void SetPathElements(MgDisposableCollection* pathElements) = 0;
+    
+    virtual bool IsProtected() = 0;
+    virtual bool IsValid() = 0;
+
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Creates a new, unitialized MgCoordinateSystemGeodeticPathElement instance.
+    /// Calling this method does not affect the underlying dictionary file.
+    /// Typically, an API client will retrieve new objects through this method
+    /// so they can be added to the collection of path elements that can be set
+    /// via SetPathElements.
+    ///
+    /// \return
+    /// Returns a new MgCoordinateSystemGeodeticPathElement instance. The caller is responsible
+    /// for disposing the object being returned.
+    virtual MgCoordinateSystemGeodeticPathElement* NewPathElement() = 0;
+
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Creates a deep clone of this geodetic path. That is, the cloned object
+    /// will also have its geodetic path element information cloned.
+    ///
+    /// \return
+    /// Returns a new MgCoordinateSystemGeodeticPath object that is an exact clone
+    /// of this MgCoordinateSystemGeodeticPath instance. The caller is responsible for
+    /// disposing the object being returned.
+    ///
+    /// \remarks:
+    /// The returned MgCoordinateSystemGeodeticPath instance will have its protected flag
+    /// unset. However, all other properties like name etc will be the same. Any caller will
+    /// have to change such values before trying to write the cloned instance into
+    /// the dictionary file.
+    virtual MgCoordinateSystemGeodeticPath* CreateClone() = 0;
+
+protected:
+    /////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Get the class Id
+    ///
+    /// \return
+    /// The integer value
+    ///
+    INT32 GetClassId(){return m_cls_id;};
+
+CLASS_ID:
+    static const INT32 m_cls_id = CoordinateSystem_CoordinateSystemGeodeticPath;
+};
+/// \}
+
+#endif //_MGCOORDINATESYSTEMGEODETICPATH_H_

Copied: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathDictionary.h (from rev 5163, sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathDictionary.h)
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathDictionary.h	                        (rev 0)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathDictionary.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,76 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _MGCOORDINATESYSTEMGEODETICPATHDICTIONARY_H_
+#define _MGCOORDINATESYSTEMGEODETICPATHDICTIONARY_H_
+
+/// \defgroup MgCoordinateSystemGeodeticPathDictionary MgCoordinateSystemGeodeticPathDictionary
+/// \ingroup Coordinate_System_classes
+/// \{
+
+////////////////////////////////////////////////////////////////
+/// \brief
+/// The MgCoordinateSystemGeodeticPathDictionary provides access to all geodetic transformation path
+/// definitions as defined in the dictionary file this instance reads from / writes to.
+///
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticPathDictionary : public MgCoordinateSystemDictionaryBase
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticPathDictionary)
+
+PUBLISHED_API:
+
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Creates a new, empty geodetic path object that has to be filled by an API client. This
+    /// method does not create a new entry in the dictionary. The caller is responsible
+    /// for disposing the object being returned.
+    /// 
+    /// \return
+    /// Return a new, in-memory geodetic path object. No content is written to disk
+    /// when this method executes.
+    ///
+    virtual MgCoordinateSystemGeodeticPath* NewGeodeticPath()=0;
+
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Returns the geodetic path object where the name is equal to the parameter
+    /// pathName. The caller is responsible for disposing the object.
+    /// 
+    /// \param pathName
+    /// The name of the geodetic path to look up in the dictionary. Must not be an empty string.
+    /// 
+    /// \return
+    /// Return the geodetic path if found. Otherwise NULL.
+    ///
+    virtual MgCoordinateSystemGeodeticPath* GetGeodeticPath(CREFSTRING pathName)=0;
+
+protected:
+    /////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Get the class Id
+    ///
+    /// \return
+    /// The integer value
+    ///
+    INT32 GetClassId(){return m_cls_id;};
+
+CLASS_ID:
+    static const INT32 m_cls_id = CoordinateSystem_CoordinateSystemGeodeticPathDictionary;
+};
+/// \}
+
+#endif //_MGCOORDINATESYSTEMGEODETICPATHDICTIONARY_H_

Copied: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathElement.h (from rev 5163, sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathElement.h)
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathElement.h	                        (rev 0)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathElement.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,55 @@
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _MGCOORDINATESYSTEMGEODETICPATHELEMENT_H_
+#define _MGCOORDINATESYSTEMGEODETICPATHELEMENT_H_
+
+/// \defgroup MgCoordinateSystemGeodeticPathElement MgCoordinateSystemGeodeticPathElement
+/// \ingroup Coordinate_System_classes
+/// \{
+
+////////////////////////////////////////////////////////////////
+/// \brief
+/// A geodetic transformation path element describes a single transformation step within a series
+/// of concatenated steps that eventually form a geodetic (transformation) path.
+///
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticPathElement : public MgGuardDisposable
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticPathElement)
+
+PUBLISHED_API:
+
+    virtual STRING GetTransformName() = 0;
+    virtual void SetTransformName(CREFSTRING) = 0;
+
+    virtual bool GetIsInversed() = 0;
+    virtual void SetIsInversed(bool) = 0;
+
+    virtual bool IsValid() = 0;
+    virtual bool IsProtected() = 0;
+
+protected:
+    /////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Get the class Id
+    ///
+    /// \return
+    /// The integer value
+    ///
+    INT32 GetClassId(){return m_cls_id;};
+
+CLASS_ID:
+    static const INT32 m_cls_id = CoordinateSystem_CoordinateSystemGeodeticPathElement;
+};
+
+/// \}
+
+#endif
\ No newline at end of file

Copied: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDef.h (from rev 5163, sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDef.h)
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDef.h	                        (rev 0)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDef.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,178 @@
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _MGCOORDINATESYSTEMGEODETICTRANSFORMDEF_H_
+#define _MGCOORDINATESYSTEMGEODETICTRANSFORMDEF_H_
+
+/// \defgroup MgCoordinateSystemGeodeticTransformDef MgCoordinateSystemGeodeticTransformDef
+/// \ingroup Coordinate_System_classes
+/// \{
+
+////////////////////////////////////////////////////////////////
+/// \brief
+/// An instance of this class describes a geodetic transformation with all its parameters
+/// as it is defined in the dictionary file. The actual transformation operation
+/// is performed by the MgCoordinateSystemGeodeticTransformation objects
+/// that's being returned by the CreateTransformation method.
+///
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticTransformDef : public MgGuardDisposable
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticTransformDef)
+
+PUBLISHED_API:
+
+    //BEGIN: struct cs_GeodeticTransform_
+
+    virtual STRING GetTransformName() = 0;
+    virtual void SetTransformName(CREFSTRING name) = 0;
+
+    virtual STRING GetSourceDatum() = 0;
+    virtual void SetSourceDatum(CREFSTRING datumKey) = 0;
+
+    virtual STRING GetTargetDatum() = 0;
+    virtual void SetTargetDatum(CREFSTRING datumKey) = 0;
+
+    virtual STRING GetGroup() = 0;
+    virtual void SetGroup(CREFSTRING group) = 0;
+
+    virtual STRING GetDescription() = 0;
+    virtual void SetDescription(CREFSTRING description) = 0;
+
+    virtual STRING GetSource() = 0;
+    virtual void SetSource(CREFSTRING source) = 0;
+
+    virtual INT32 GetEpsgCode() = 0;
+    virtual void SetEpsgCode(INT32 epsgCode) = 0;
+
+    virtual INT32 GetEpsgVariation() = 0;
+    virtual void SetEpsgVariation(INT32 epsgVariation) = 0;
+
+    virtual bool GetInverseSupported() = 0;
+    virtual void SetInverseSupported(bool inverseSupported) = 0;
+
+    virtual INT32 GetMaxIterations() = 0;
+    virtual void SetMaxIterations(INT32 maxIterations) = 0;
+	
+    virtual double GetConvergenceValue() = 0;
+    virtual void SetConvergenceValue(double convergenceValue) = 0;
+	
+    virtual double GetErrorValue() = 0;
+    virtual void SetErrorValue(double errorValue) = 0;
+	
+    virtual double GetAccuracy() = 0;
+    virtual void SetAccuracy(double accuracy) = 0;
+    
+    //END: struct cs_GeodeticTransform_
+
+    virtual bool IsProtected() = 0;
+    virtual bool IsValid() = 0;
+    
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Returns the type of this geodetic transformation (as defined by MgCoordinateSystemGeodeticTransformDefType).
+    /// The type defines the parameters that are being returned by the GetParameters method.
+    virtual INT32 GetTransformDefType() = 0;
+    
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Returns the extended parameters object valid for this transformation definition. See remarks.
+    /// Depending on the type returned by GetTransformDefType(), this method returns one of the following:
+    /// 
+    /// \li NULL if this is a NULL transformation
+    /// \li MgCoordinateSystemGeodeticAnalyticalTransformDefParams if this transformation uses an anylitical transformation method
+    /// \li MgCoordinateSystemGeodeticInterpolationTransformDefParams if this transformation uses grid files
+    /// \li MgCoordinateSystemGeodeticMultipleRegressionTransformDefParams if this transformation is a multiple regression transformation type
+    ///
+    /// \return
+    /// Returns the extended parameters (or NULL) object for this transformation object. The
+    /// caller is responsible for disposing the object being returned. See remarks.
+    /// 
+    /// \remarks
+    /// If a caller needs to change the parameters of a transformation, the values
+    /// have to be changed on the object being returned here and then written
+    /// back via SetParameters. Setting the values on the parameters object 
+    /// has no affect on this transformation definition.
+    virtual MgCoordinateSystemGeodeticTransformDefParams* GetParameters() = 0;
+    
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Sets the extended parameters for this transformation.
+    /// 
+    /// \param parameters
+    /// The parameters to set for this transformation. The object passed in,
+    /// has to be of the same type as it has been returned by GetParameters. Otherwise,
+    /// an exception will be thrown. This parameter can only be NULL, if this is a NONE transformation.
+    /// 
+    /// \remarks
+    /// The instance passed in has to be disposed by the caller, i.e. this transformation
+    /// object will not take ownership of it.
+    virtual void SetParameters(MgCoordinateSystemGeodeticTransformDefParams* parameters) = 0;
+
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Creates a deep clone of this geodetic transformation. That is, the cloned object
+    /// will also have its extended parameters cloned.
+    ///
+    /// \return
+    /// Returns a new MgCoordinateSystemGeodeticTransformDef object that is an exact clone
+    /// of this MgCoordinateSystemGeodeticTransformDef instance. The caller is responsible for
+    /// disposing the object being returned.
+    ///
+    /// \remarks
+    /// The returned MgCoordinateSystemGeodeticTransformDef instance will have its protected flag
+    /// unset. However, all other properties like name etc will be the same. Any caller will
+    /// have to change such values before trying to write the cloned instance into
+    /// the dictionary file.
+    virtual MgCoordinateSystemGeodeticTransformDef* CreateClone() = 0;
+    
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Creates a new MgCoordinateSystemGeodeticTransformation object that
+    /// can be used to perform the actual transformation this transformation
+    /// definition describes. This method will fail with an exception,
+    /// if this is the NONE transformation.
+    ///
+    /// \param createInverse
+    /// If true, the MgCoordinateSystemGeodeticTransformation being returned will
+    /// perform the inverse of the transformation as defined in the dictionary file. That is,
+    /// it will convert from the actual target datum to the source datum. Note, that not all
+    /// transformations are invertible. This method will fail with an exception then.
+    /// If false, this method will return a MgCoordinateSystemGeodeticTransformation
+    /// instance that performs the default forward datum transformation.
+    ///
+    /// \return
+    /// Returns the MgCoordinateSystemGeodeticTransformation that performs the actual
+    /// datum transformation as described by this definition instance. The caller
+    /// is reponsible for disposing the object being returned.
+    virtual MgCoordinateSystemGeodeticTransformation* CreateTransformation(bool createInverse) = 0;
+
+protected:
+    /////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Get the class Id
+    ///
+    /// \return
+    /// The integer value
+    ///
+    INT32 GetClassId(){return m_cls_id;};
+
+CLASS_ID:
+    static const INT32 m_cls_id = CoordinateSystem_CoordinateSystemGeodeticTransformDef;
+};
+
+/// \}
+
+#endif //_MGCOORDINATESYSTEMGEODETICTRANSFORMDEF_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefDictionary.h (from rev 5163, sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefDictionary.h)
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefDictionary.h	                        (rev 0)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefDictionary.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,77 @@
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _MGCOORDINATESYSTEMGEODETICTRANSFORMDEFDICTIONARY_H_
+#define _MGCOORDINATESYSTEMGEODETICTRANSFORMDEFDICTIONARY_H_
+
+
+/// \defgroup MgCoordinateSystemGeodeticTransformDefDictionary MgCoordinateSystemGeodeticTransformDefDictionary
+/// \ingroup Coordinate_System_classes
+/// \{
+
+////////////////////////////////////////////////////////////////
+/// \brief
+/// The MgCoordinateSystemGeodeticTransformDefDictionary provides access to all geodetic transformation
+/// definitions as defined in the dictionary file this instance reads from / writes to.
+///
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticTransformDefDictionary : public MgCoordinateSystemDictionaryBase
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticTransformDefDictionary)
+
+PUBLISHED_API:
+    
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Creates a new, empty geodetic transformation definition object that has to be filled by an API client. This
+    /// method does not create a new entry in the dictionary. The caller is responsible
+    /// for disposing the object being returned.
+    /// 
+    /// \return
+    /// Return a new, in-memory geodetic transformation definition object. No content is written to disk
+    /// when this method executes.
+    ///
+    virtual MgCoordinateSystemGeodeticTransformDef* NewGeodeticTransformationDef(INT32 transformationDefType) = 0;
+
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Returns the geodetic transformation definition object where the name is equal to the parameter
+    /// pathName. The caller is responsible for disposing the object.
+    /// 
+    /// \param transformationName
+    /// The name of the geodetic transformation to look up in the dictionary. Must not be an empty string.
+    /// 
+    /// \return
+    /// Return the geodetic transformation if found. Otherwise NULL.
+    ///
+    virtual MgCoordinateSystemGeodeticTransformDef* GetGeodeticTransformationDef(CREFSTRING transformationName)=0;
+
+protected:
+    /////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Get the class Id
+    ///
+    /// \return
+    /// The integer value
+    ///
+    INT32 GetClassId(){return m_cls_id;};
+
+CLASS_ID:
+    static const INT32 m_cls_id = CoordinateSystem_CoordinateSystemGeodeticTransformDefDictionary;
+};
+
+/// \}
+
+#endif //_MGCOORDINATESYSTEMGEODETICTRANSFORMDEFDICTIONARY_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefParams.h (from rev 5163, sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefParams.h)
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefParams.h	                        (rev 0)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefParams.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,58 @@
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _MGCOORDINATESYSTEMGEODETICTRANSFORMDEFPARAMS_H_
+#define _MGCOORDINATESYSTEMGEODETICTRANSFORMDEFPARAMS_H_
+
+/// \defgroup MgCoordinateSystemGeodeticTransformDefParams MgCoordinateSystemGeodeticTransformDefParams
+/// \ingroup Coordinate_System_classes
+/// \{
+
+////////////////////////////////////////////////////////////////
+/// \brief
+/// Common base class for all geodetic transformation parameters.
+///
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticTransformDefParams : public MgGuardDisposable
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticTransformDefParams)
+
+PUBLISHED_API:
+
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Checks, whether this transformation parameter object's content is considered (technically) valid.
+    /// That is, even if this method returns true, the transformation might still fail due to
+    /// other reasons, e.g. a grid file does not exist.
+    ///
+    /// \return
+    /// Returns true, if this parameter object is considered valid. Otherwise false.
+    virtual bool IsValid() = 0;
+    
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Checks, whether this transformation object is protected, i.e. any attempts to change its
+    /// content will fail. All definitions contained in the dictionaries at compile time
+    /// are protected by default.
+    ///
+    /// \return
+    /// Returns true, if this parameter object is read-only. Otherwise false.
+    virtual bool IsProtected() = 0;
+
+};
+
+/// \}
+
+#endif _MGCOORDINATESYSTEMGEODETICTRANSFORMDEFPARAMS_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefType.h (from rev 5163, sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefType.h)
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefType.h	                        (rev 0)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefType.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,63 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _MGCOORDINATESYSTEMGEODETICTRANSFORMDEFTYPE_H_
+#define _MGCOORDINATESYSTEMGEODETICTRANSFORMDEFTYPE_H_
+
+/// \defgroup MgCoordinateSystemGeodeticTransformDefType MgCoordinateSystemGeodeticTransformDefType
+/// \ingroup Coordinate_System_classes
+/// \{
+
+///////////////////////////////////////////////////////////////
+/// \brief
+/// This class contains the constants for all current transformation definition types.
+/// 
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticTransformDefType
+{
+
+PUBLISHED_API:
+
+    ///////////////////////////////////////////////////////////////
+    /// \brief
+    /// The transformation definition describes the NONE transformation. That is, that
+    /// transformation doesn't actually perform a datum shift but is basically a NOOP.
+    static const INT32 None = 0;
+    
+    ///////////////////////////////////////////////////////////////
+    /// \brief
+    /// The transformation definition describes an analytical transformation where
+    /// the transformation between the source and the target datum is defined
+    /// through a formular that's fed with up to 10 parameters.
+    static const INT32 Analytical = 1;
+    
+    ///////////////////////////////////////////////////////////////
+    /// \brief
+    /// The transformation definition describes a transformation that
+    /// uses grid files to calculate the actual datum shift for a given
+    /// coordinate by interpolating between given grid points.
+    static const INT32 Interpolation = 2;
+    
+    ///////////////////////////////////////////////////////////////
+    /// \brief
+    /// The transformation definition describes a transformation that
+    /// uses a multiple regression calculation to perform the actual datum shift.
+    static const INT32 MultipleRegression = 4;
+};
+
+/// \}
+
+#endif //_MGCOORDINATESYSTEMGEODETICTRANSFORMDEFTYPE_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFile.h (from rev 5163, sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFile.h)
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFile.h	                        (rev 0)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFile.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,94 @@
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _MGCOORDINATESYSTEMGEODETICTRANSFORMGRIDFILE_H_
+#define _MGCOORDINATESYSTEMGEODETICTRANSFORMGRIDFILE_H_
+
+/// \defgroup MgCoordinateSystemGeodeticTransformGridFile MgCoordinateSystemGeodeticTransformGridFile
+/// \ingroup Coordinate_System_classes
+/// \{
+
+////////////////////////////////////////////////////////////////
+/// \brief
+/// The MgCoordinateSystemGeodeticInterpolationTransformDefParams parameter class requires
+/// instances of MgCoordinateSystemGeodeticTransformGridFile to be set via its
+/// SetGridFiles method. An MgCoordinateSystemGeodeticTransformGridFile object simply describes
+/// the grid file rather than containing the (grid file) information itself.
+///
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticTransformGridFile : public MgGuardDisposable
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticTransformGridFile)
+
+PUBLISHED_API:
+
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Returns the format of the grid file as a constant value as defined in
+    /// MgCoordinateSystemGeodeticTransformGridFileFormat.
+    ///
+    /// \return
+    /// Returns the file format as an INT32 value.
+    virtual INT32 GetFileFormat() = 0;
+    
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Sets this file's format. Has to be constant
+    /// as defined by MgCoordinateSystemGeodeticTransformGridFileFormat.
+    virtual void SetFileFormat(INT32 gridFileFormat) = 0;
+
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// When used within a geodetic transformation that defines a source and a target
+    /// datum, this flag instructs the API whether to consider the grid file's content
+    /// to be the inverse of the actual conversion direction.
+    /// 
+    /// \return
+    /// Returns true, if the grid file provides information to transform between
+    /// 2 datums in the inversed direction to what's actually specified in
+    /// the parent transformation definition.
+    virtual bool GetIsInverseDirection() = 0;
+    
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Sets the flag, whether this grid file carries the information
+    /// to perform a datum transformation in the inversed direction
+    /// to what's specified in the parent transformation definition.
+    virtual void SetIsInverseDirection(bool isInverseDirection) = 0;
+
+    virtual STRING GetFileName() = 0;
+    virtual void SetFileName(CREFSTRING fileName) = 0;
+
+    virtual bool IsProtected() = 0;
+    virtual bool IsValid() = 0;
+
+protected:
+    /////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Get the class Id
+    ///
+    /// \return
+    /// The integer value
+    ///
+    INT32 GetClassId(){return m_cls_id;};
+
+CLASS_ID:
+    static const INT32 m_cls_id = CoordinateSystem_CoordinateSystemGeodeticTransformGridFile;
+
+};
+
+/// \}
+
+#endif //_MGCOORDINATESYSTEMGEODETICTRANSFORMGRIDFILE_H_
\ No newline at end of file

Copied: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFileFormat.h (from rev 5163, sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFileFormat.h)
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFileFormat.h	                        (rev 0)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFileFormat.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -0,0 +1,44 @@
+//
+//  Copyright (C) 2004-2010 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+#ifndef _MGCOORDINATESYSTEMGEODETICTRANSFORMGRIDFILEFORMAT_H_
+#define _MGCOORDINATESYSTEMGEODETICTRANSFORMGRIDFILEFORMAT_H_
+
+/// \defgroup MgCoordinateSystemGeodeticTransformGridFileFormat MgCoordinateSystemGeodeticTransformGridFileFormat
+/// \ingroup Coordinate_System_classes
+/// \{
+
+////////////////////////////////////////////////////////////////
+/// \brief
+/// This class contains the constants for all currently supported grid file formats.
+///
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticTransformGridFileFormat
+{
+PUBLISHED_API:
+
+    static const INT32 None = 0;
+    static const INT32 NTv1 = 1;
+    static const INT32 NTv2 = 2;
+    static const INT32 NADCON = 3;
+    static const INT32 RGF = 4;
+    static const INT32 PAR = 5;
+    static const INT32 ATS77 = 6;
+};
+
+/// \}
+
+#endif //_MGCOORDINATESYSTEMGEODETICTRANSFORMGRIDFILEFORMAT_H_
\ No newline at end of file

Modified: trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformation.h
===================================================================
--- trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformation.h	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformation.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -18,6 +18,16 @@
 #ifndef _MGCOORDINATESYSTEMGEODETICTRANSFORMATION_H_
 #define _MGCOORDINATESYSTEMGEODETICTRANSFORMATION_H_
 
+/// \defgroup MgCoordinateSystemGeodeticTransformation MgCoordinateSystemGeodeticTransformation
+/// \ingroup Coordinate_System_classes
+/// \{
+
+////////////////////////////////////////////////////////////////
+/// \brief
+/// An instance of this class allow a caller do perform a geodetic transformation (datum shift).
+/// That is, this class does not operate on coordinate system level, but rather on 
+/// datum level.
+/// 
 class MgCoordinateSystemGeodeticTransformation : public MgGuardDisposable
 {
     DECLARE_CLASSNAME(MgCoordinateSystemGeodeticTransformation)
@@ -31,23 +41,95 @@
     virtual MgCoordinate* Shift(double dLongitude, double dLatitude)=0;
     virtual MgCoordinate* Shift(double dLongitude, double dLatitude, double dZ)=0;
 
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual double GetOffsetX()=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual double GetOffsetY()=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual double GetOffsetZ()=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual void SetOffset(double x, double y, double z)=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual double GetBursaWolfeTransformRotationX()=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual double GetBursaWolfeTransformRotationY()=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual double GetBursaWolfeTransformRotationZ()=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual double GetBursaWolfeTransformBwScale()=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual void SetBursaWolfeTransform(double dRotationX, double dRotationY, double dRotationZ, double dBwScale)=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual INT32 GetGeodeticTransformationMethod()=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual void SetGeodeticTransformationMethod(INT32 nGeodeticTransformationMethod)=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual double GetMaxOffset()=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual bool IsLegalOffset(double dOffset)=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual double GetMaxRotation()=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual bool IsLegalRotation(double dRotation)=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual double GetBwScaleMin()=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual double GetBwScaleMax()=0;
+    ////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Obsolete. Use MgCoordinateSystemGeodeticTransformDef and
+    /// MgCoordinateSystemGeodeticTransformDefParams (plus derived classes) instead.
     virtual bool IsLegalBwScale(double dBwScale)=0;
 
 protected:
@@ -64,4 +146,6 @@
     static const INT32 m_cls_id = CoordinateSystem_CoordinateSystemGeodeticTransformation;
 };
 
+/// \}
+
 #endif //_MGCOORDINATESYSTEMGEODETICTRANSFORMATION_H_

Modified: trunk/MgDev/Common/Geometry/Geometry.vcproj
===================================================================
--- trunk/MgDev/Common/Geometry/Geometry.vcproj	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/Geometry/Geometry.vcproj	2010-09-21 00:20:41 UTC (rev 5164)
@@ -2643,6 +2643,38 @@
 				>
 			</File>
 			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticAnalyticalTransformationMethod.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticAnalyticalTransformDefParams.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticInterpolationTransformDefParams.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticMultipleRegressionTransformationMethod.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticMultipleRegressionTransformDefParams.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticPath.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticPathDictionary.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticPathElement.h"
+				>
+			</File>
+			<File
 				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticTransformation.h"
 				>
 			</File>
@@ -2651,6 +2683,30 @@
 				>
 			</File>
 			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticTransformDef.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticTransformDefDictionary.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticTransformDefParams.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticTransformDefType.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticTransformGridFile.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticTransformGridFileFormat.h"
+				>
+			</File>
+			<File
 				RelativePath=".\CoordinateSystem\CoordinateSystemGridGeneric.h"
 				>
 			</File>
@@ -2807,6 +2863,14 @@
 				>
 			</File>
 			<File
+				RelativePath="..\CoordinateSystem\CoordSysDictionaryBase.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysDictionaryBase.h"
+				>
+			</File>
+			<File
 				RelativePath="..\CoordinateSystem\CoordSysDictionaryUtility.cpp"
 				>
 			</File>
@@ -2887,6 +2951,54 @@
 				>
 			</File>
 			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticAnalyticalTransformDefParams.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticAnalyticalTransformDefParams.h"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticInterpolationTransformDefParams.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticInterpolationTransformDefParams.h"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticMultipleRegressionTransformDefParams.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticMultipleRegressionTransformDefParams.h"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticPath.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticPath.h"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticPathDictionary.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticPathDictionary.h"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticPathElement.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticPathElement.h"
+				>
+			</File>
+			<File
 				RelativePath="..\CoordinateSystem\CoordSysGeodeticTransformation.cpp"
 				>
 			</File>
@@ -2895,6 +3007,38 @@
 				>
 			</File>
 			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticTransformDef.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticTransformDef.h"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticTransformDefDictionary.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticTransformDefDictionary.h"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticTransformDefParams.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticTransformDefParams.h"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticTransformGridFile.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticTransformGridFile.h"
+				>
+			</File>
+			<File
 				RelativePath="..\CoordinateSystem\CoordSysGridGeneric.cpp"
 				>
 			</File>
@@ -2911,6 +3055,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\CoordinateSystem\CoordSysMacro.h"
+				>
+			</File>
+			<File
 				RelativePath="..\CoordinateSystem\CoordSysMathComparator.cpp"
 				>
 			</File>
@@ -3011,6 +3159,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\CoordinateSystem\namestruct.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\CoordinateSystem\namestruct.h"
 				>
 			</File>

Modified: trunk/MgDev/Common/Geometry/GeometryClassId.h
===================================================================
--- trunk/MgDev/Common/Geometry/GeometryClassId.h	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/Geometry/GeometryClassId.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -112,6 +112,22 @@
 #define CoordinateSystem_CoordinateSystemGridTick                   GEOMETRY_COORDINATE_SYSTEM_ID+31
 #define CoordinateSystem_CoordinateSystemGridBase                   GEOMETRY_COORDINATE_SYSTEM_ID+32
 
+#define CoordinateSystem_CoordinateSystemGeodeticPath               GEOMETRY_COORDINATE_SYSTEM_ID+33
+#define CoordinateSystem_CoordinateSystemGeodeticPathElement        GEOMETRY_COORDINATE_SYSTEM_ID+34
+#define CoordinateSystem_CoordinateSystemGeodeticPathDictionary     GEOMETRY_COORDINATE_SYSTEM_ID+35
+
+#define CoordinateSystem_CoordinateSystemGeodeticTransformDef                       GEOMETRY_COORDINATE_SYSTEM_ID+36
+#define CoordinateSystem_CoordinateSystemGeodeticAnalyticalTransformDef             GEOMETRY_COORDINATE_SYSTEM_ID+37
+#define CoordinateSystem_CoordinateSystemGeodeticInterpolationTransformDef          GEOMETRY_COORDINATE_SYSTEM_ID+38
+#define CoordinateSystem_CoordinateSystemGeodeticMultipleRegressionTransformDef     GEOMETRY_COORDINATE_SYSTEM_ID+39
+#define CoordinateSystem_CoordinateSystemGeodeticTransformDefDictionary             GEOMETRY_COORDINATE_SYSTEM_ID+40
+
+#define CoordinateSystem_CoordinateSystemGeodeticTransformDefParams                     GEOMETRY_COORDINATE_SYSTEM_ID+41
+#define CoordinateSystem_CoordinateSystemGeodeticAnalyticalTransformDefParams           GEOMETRY_COORDINATE_SYSTEM_ID+42
+#define CoordinateSystem_CoordinateSystemGeodeticInterpolationTransformDefParams        GEOMETRY_COORDINATE_SYSTEM_ID+43
+#define CoordinateSystem_CoordinateSystemGeodeticMultipleRegressionTransformDefParams   GEOMETRY_COORDINATE_SYSTEM_ID+44
+#define CoordinateSystem_CoordinateSystemGeodeticTransformGridFile                      GEOMETRY_COORDINATE_SYSTEM_ID+45
+
 // Exceptions
 #define Geometry_Exception_MgCoordinateSystemComputationFailedException     GEOMETRY_EXCEPTION_ID+0
 #define Geometry_Exception_MgCoordinateSystemConversionFailedException      GEOMETRY_EXCEPTION_ID+1

Modified: trunk/MgDev/Common/Geometry/GeometryCommon.h
===================================================================
--- trunk/MgDev/Common/Geometry/GeometryCommon.h	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Common/Geometry/GeometryCommon.h	2010-09-21 00:20:41 UTC (rev 5164)
@@ -108,6 +108,17 @@
 
 #include "CoordinateSystem/CoordinateSystem.h"
 #include "CoordinateSystem/CoordinateSystemDatum.h"
+#include "CoordinateSystem/CoordinateSystemGeodeticTransformGridFile.h"
+#include "CoordinateSystem/CoordinateSystemGeodeticTransformDefParams.h"
+#include "CoordinateSystem/CoordinateSystemGeodeticInterpolationTransformDefParams.h"
+#include "CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformDefParams.h"
+#include "CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformDefParams.h"
+#include "CoordinateSystem/CoordinateSystemGeodeticTransformDefType.h"
+#include "CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformationMethod.h"
+#include "CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformationMethod.h"
+#include "CoordinateSystem/CoordinateSystemGeodeticTransformDef.h"
+#include "CoordinateSystem/CoordinateSystemGeodeticPathElement.h"
+#include "CoordinateSystem/CoordinateSystemGeodeticPath.h"
 #include "CoordinateSystem/CoordinateSystemGeodeticTransformation.h"
 #include "CoordinateSystem/CoordinateSystemEllipsoid.h"
 #include "CoordinateSystem/CoordinateSystemCategory.h"
@@ -119,6 +130,8 @@
 #include "CoordinateSystem/CoordinateSystemDatumDictionary.h"               //for MgCoordinateSystemDatumDictionary
 #include "CoordinateSystem/CoordinateSystemEllipsoidDictionary.h"           //for MgCoordinateSystemEllipsoidDictionary
 #include "CoordinateSystem/CoordinateSystemCategoryDictionary.h"            //for MgCoordinateSystemCategoryDictionary
+#include "CoordinateSystem/CoordinateSystemGeodeticTransformDefDictionary.h"    //for MgCoordinateSystemGeodeticTransformDefDictionary
+#include "CoordinateSystem/CoordinateSystemGeodeticPathDictionary.h"            //for MgCoordinateSystemGeodeticPathDictionary
 #include "CoordinateSystem/CoordinateSystemDictionaryUtility.h"             //for MgCoordinateSystemDictionaryUtility
 #include "CoordinateSystem/CoordinateSystemCatalog.h"
 #include "CoordinateSystem/CoordinateSystemFilter.h"                        //for MgCoordinateSystemFilter


Property changes on: trunk/MgDev/Oem
___________________________________________________________________
Modified: svn:externals
   - /metacrs/csmap/trunk/CsMapDev CsMap
/fusion/trunk fusion

   + /metacrs/csmap/sandbox/RFC2 CsMap
/fusion/trunk fusion


Modified: trunk/MgDev/Web/src/DotNetUnmanagedApi/Geometry/GeometryApiGen.xml
===================================================================
--- trunk/MgDev/Web/src/DotNetUnmanagedApi/Geometry/GeometryApiGen.xml	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Web/src/DotNetUnmanagedApi/Geometry/GeometryApiGen.xml	2010-09-21 00:20:41 UTC (rev 5164)
@@ -138,6 +138,16 @@
     <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemCategoryDictionary.h" />
     <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemDatum.h" />
     <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemDatumDictionary.h" />
+	 <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefParams.h" />
+	 <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathElement.h" />
+	 <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPath.h" />
+	 <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathDictionary.h" />
+	 <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDef.h" />
+	 <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFile.h" />
+	 <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformDefParams.h" />
+	 <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticInterpolationTransformDefParams.h" />
+	 <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformDefParams.h" />
+	 <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefDictionary.h" />
     <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemDictionary.h" />
     <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemDictionaryUtility.h" />
     <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemEllipsoid.h" />

Modified: trunk/MgDev/Web/src/DotNetUnmanagedApi/Geometry/GeometryConstants.xml
===================================================================
--- trunk/MgDev/Web/src/DotNetUnmanagedApi/Geometry/GeometryConstants.xml	2010-09-20 20:15:35 UTC (rev 5163)
+++ trunk/MgDev/Web/src/DotNetUnmanagedApi/Geometry/GeometryConstants.xml	2010-09-21 00:20:41 UTC (rev 5164)
@@ -86,6 +86,10 @@
   <Class name="MgCoordinateSystemUnitCode" />
   <Class name="MgCoordinateSystemUnitType" />
   <Class name="MgCoordinateSystemWktFlavor" />
+  <Class name="MgCoordinateSystemGeodeticTransformDefType" />
+  <Class name="MgCoordinateSystemGeodeticAnalyticalTransformationMethod" />
+  <Class name="MgCoordinateSystemGeodeticMultipleRegressionTransformationMethod"/>
+  <Class name="MgCoordinateSystemGeodeticTransformGridFileFormat"/>
 </Classes>
 
 <!--
@@ -116,6 +120,10 @@
     <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemUnitCode.h" />
     <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemUnitType.h" />
     <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemWktFlavor.h" />
+	 <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefType.h" />
+	 <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformationMethod.h" />
+	 <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformationMethod.h" />
+	 <Header path="../../../../Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFileFormat.h" />
 
 </Headers>
 



More information about the mapguide-commits mailing list