[mapguide-commits] r5104 - in sandbox/rfc94: Common/CoordinateSystem Common/Geometry Common/Geometry/CoordinateSystem Web/src/DotNetUnmanagedApi/Geometry

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Sep 2 10:20:14 EDT 2010


Author: baertelchen
Date: 2010-09-02 14:20:14 +0000 (Thu, 02 Sep 2010)
New Revision: 5104

Added:
   sandbox/rfc94/Common/CoordinateSystem/CoordSysDictionaryBase.cpp
   sandbox/rfc94/Common/CoordinateSystem/CoordSysDictionaryBase.h
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.cpp
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.h
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.cpp
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.h
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.cpp
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.h
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPath.cpp
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPath.h
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.cpp
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.h
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathElement.cpp
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathElement.h
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDef.cpp
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDef.h
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.cpp
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.h
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefParams.h
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.cpp
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.h
   sandbox/rfc94/Common/CoordinateSystem/CoordSysMacro.h
   sandbox/rfc94/Common/CoordinateSystem/namestruct.cpp
   sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformDefParams.h
   sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticInterpolationTransformDefParams.h
   sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformDefParams.h
   sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPath.h
   sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathDictionary.h
   sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathElement.h
   sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDef.h
   sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefDictionary.h
   sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefParams.h
   sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefType.h
   sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFile.h
   sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFileFormat.h
Modified:
   sandbox/rfc94/Common/CoordinateSystem/CoordSysCatalog.cpp
   sandbox/rfc94/Common/CoordinateSystem/CoordSysCatalog.h
   sandbox/rfc94/Common/CoordinateSystem/CoordSysDatumDictionary.cpp
   sandbox/rfc94/Common/CoordinateSystem/CoordSysDictionary.cpp
   sandbox/rfc94/Common/CoordinateSystem/CoordSysEllipsoidDictionary.cpp
   sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformation.cpp
   sandbox/rfc94/Common/CoordinateSystem/MentorDictionary.cpp
   sandbox/rfc94/Common/CoordinateSystem/MentorDictionary.h
   sandbox/rfc94/Common/CoordinateSystem/MentorUtil.cpp
   sandbox/rfc94/Common/CoordinateSystem/MentorUtil.h
   sandbox/rfc94/Common/CoordinateSystem/namestruct.h
   sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemCatalog.h
   sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemFactory.cpp
   sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformation.h
   sandbox/rfc94/Common/Geometry/Geometry.vcproj
   sandbox/rfc94/Common/Geometry/GeometryClassId.h
   sandbox/rfc94/Common/Geometry/GeometryCommon.h
   sandbox/rfc94/Web/src/DotNetUnmanagedApi/Geometry/GeometryApiGen.xml
   sandbox/rfc94/Web/src/DotNetUnmanagedApi/Geometry/GeometryConstants.xml
Log:
Added headers for various MgCoordinateSystem* interface classes. Also add the implementation files (header + cpp) to [CoordinateSystem] folder. These allow for reading the new GeodeticPath and GeodeticTransformation dictionaries that are implemented with RFC2 for the CS Map library (Meta CRS project).

Modified: sandbox/rfc94/Common/CoordinateSystem/CoordSysCatalog.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysCatalog.cpp	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysCatalog.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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: sandbox/rfc94/Common/CoordinateSystem/CoordSysCatalog.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysCatalog.h	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysCatalog.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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: sandbox/rfc94/Common/CoordinateSystem/CoordSysDatumDictionary.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysDatumDictionary.cpp	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysDatumDictionary.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -457,7 +457,9 @@
 
     MentorDictionary::UpdateDef<cs_Dtdef_, MgCoordinateSystemDatum>(
         m_pmapSystemNameDescription,
+        DtKey,
         DtDesc,
+        &MgCoordinateSystemDatum::IsValid,
         CS_dtdef,
         CS_dtupd,
         BuildDtDefFromInterface,
@@ -505,7 +507,9 @@
 
     MentorDictionary::UpdateDef<cs_Dtdef_, MgCoordinateSystemDatum>(
         m_pmapSystemNameDescription,
+        DtKey,
         DtDesc,
+        &MgCoordinateSystemDatum::IsValid,
         CS_dtdef,
         CS_dtupd,
         BuildDtDefFromInterface,
@@ -675,6 +679,7 @@
             //Generate summary for version 7 or 8 datum file.
             m_pmapSystemNameDescription = MentorDictionary::GenerateSystemNameDescriptionMap<cs_Dtdef_>(
                 pFile,
+                DtKey,
                 DtDesc,
                 CS_dtrd);
             break;

Modified: sandbox/rfc94/Common/CoordinateSystem/CoordSysDictionary.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysDictionary.cpp	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysDictionary.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -393,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)
     {
@@ -483,7 +483,9 @@
 
     MentorDictionary::UpdateDef<cs_Csdef_, MgCoordinateSystem>(
         m_pmapSystemNameDescription,
+        CsKey,
         CsDesc,
+        &MgCoordinateSystem::IsValid,
         CS_csdef,
         CS_csupd,
         BuildCsDefFromInterface,
@@ -531,7 +533,9 @@
 
     MentorDictionary::UpdateDef<cs_Csdef_, MgCoordinateSystem>(
         m_pmapSystemNameDescription,
+        CsKey,
         CsDesc,
+        &MgCoordinateSystem::IsValid,
         CS_csdef,
         CS_csupd,
         BuildCsDefFromInterface,
@@ -699,6 +703,7 @@
             //Generate summary for version 7 or 8 coordsys file.
             m_pmapSystemNameDescription = MentorDictionary::GenerateSystemNameDescriptionMap<cs_Csdef_>(
                 pFile,
+                CsKey,
                 CsDesc,
                 CS_csrd);
             break;

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysDictionaryBase.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysDictionaryBase.cpp	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysDictionaryBase.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,378 @@
+//
+//  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()
+
+    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,
+        NULL, /* IsValid() callback */ //ABA; TBD
+        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()
+
+    //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,
+        NULL, /* IsValid() callback */ //ABA; TBD
+        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
+    if (NULL == pName) //ABA: ???
+        throw new MgOutOfMemoryException(L"CCoordinateSystemDictionaryBase.Get", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    Ptr<T> pDefinition;
+
+    MG_TRY()
+
+    //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)
+{
+    bool bHas = false;
+    char *pName = NULL;
+
+    MG_TRY()
+
+    //Get the name to search for
+    pName = Convert_Wide_To_Ascii(sName.c_str()); //need to delete [] pName
+    if (NULL == pName) //ABA: ???
+        throw new MgOutOfMemoryException(L"CCoordinateSystemDictionaryBase.Has", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    //Look in the dictionary
+    U *pDef = definitionAccess->readDefinition(pName);
+    if (NULL != pDef)
+    {
+        bHas = true;
+        
+        CS_free(pDef);
+        pDef = NULL;
+        
+        //make sure, we're deleting [pName]
+    }
+
+    MG_CATCH(L"CCoordinateSystemDictionaryBase.Has")
+    
+    delete [] pName;
+    
+    MG_THROW()
+    
+    return bHas;
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+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);
+    }
+
+    //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);
+}
+
+#endif //BUILD_DICTIONARY_BASE
\ No newline at end of file

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysDictionaryBase.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysDictionaryBase.h	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysDictionaryBase.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,129 @@
+//
+//  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 (*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),
+            
+            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 (*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: sandbox/rfc94/Common/CoordinateSystem/CoordSysEllipsoidDictionary.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysEllipsoidDictionary.cpp	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysEllipsoidDictionary.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -398,7 +398,9 @@
 
     MentorDictionary::UpdateDef<cs_Eldef_, MgCoordinateSystemEllipsoid>(
         m_pmapSystemNameDescription,
+        ElKey,
         ElDesc,
+        &MgCoordinateSystemEllipsoid::IsValid,
         CS_eldef,
         CS_elupd,
         BuildElDefFromInterface,
@@ -449,7 +451,9 @@
 
     MentorDictionary::UpdateDef<cs_Eldef_, MgCoordinateSystemEllipsoid>(
         m_pmapSystemNameDescription,
+        ElKey,
         ElDesc,
+        &MgCoordinateSystemEllipsoid::IsValid,
         CS_eldef,
         CS_elupd,
         BuildElDefFromInterface,
@@ -582,6 +586,7 @@
     {
         m_pmapSystemNameDescription = MentorDictionary::GenerateSystemNameDescriptionMap<cs_Eldef_>(
             pFile,
+            ElKey,
             ElDesc,
             CS_elrd);
         if (NULL == m_pmapSystemNameDescription)

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.cpp	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,80 @@
+//
+//  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)
+    : geocentricTransformParams(NULL)
+{
+    this->geocentricTransformParams = (csGeocentricXformParams*) CS_malc(sizeof(csGeocentricXformParams));
+    if (NULL == this->geocentricTransformParams)
+        throw new MgOutOfMemoryException(L"CCoordinateSystemGeodeticAnalyticalTransformDefParams.Ctor", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    memset(this->geocentricTransformParams, 0, sizeof(csGeocentricXformParams));
+}
+
+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));
+}
+
+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

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.h	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticAnalyticalTransformDefParams.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,80 @@
+//
+//  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);
+        ~CCoordinateSystemGeodeticAnalyticalTransformDefParams();
+
+        virtual void Dispose();
+
+        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);
+
+    private:
+        void ReleaseInstance();
+        bool IsProtected() { return false; }
+
+    private:
+        csGeocentricXformParams* geocentricTransformParams;
+    };
+
+} //namespace CSLibrary
+
+#endif //_CCOORDSYSGEODETICANALYTICALTRANSFORMDEFPARAMS_H_
\ No newline at end of file

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.cpp	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,150 @@
+//
+//  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)
+    : 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(CCoordinateSystemGeodeticInterpolationTransformDefParams::SetGridFileNames);
+
+    //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.SetGridFileNames", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    csGridFileXFormat* allFiles = new csGridFileXFormat[fileNamesCount];
+    
+    MG_TRY()
+
+    memset(allFiles, 0, fileNamesCount * sizeof(csGridFileXFormat));
+
+    for(INT32 i = 0; i < fileNamesCount; i++)
+    {
+        Ptr<MgDisposable> gridFile = gridFiles->GetItem(i);
+        CCoordinateSystemGeodeticTransformGridFile* gridFileSetting = dynamic_cast<CCoordinateSystemGeodeticTransformGridFile*>(gridFile.p);
+        if (NULL == gridFileSetting)
+            throw new MgInvalidArgumentException(L"CCoordinateSystemGeodeticInterpolationTransformDefParams.SetGridFileNames", __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(csGridFileXFormat));
+    //...and copy our values in
+    memcpy(this->gridFileParams->fileNames, allFiles, fileNamesCount * sizeof(csGridFileXFormat));
+
+    MG_CATCH(L"CCoordinateSystemGeodeticInterpolationTransformDefParams.SetGridFileNames");
+
+    delete[] allFiles;
+
+    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++)
+    {
+        csGridFileXFormat& singleGridFile = this->gridFileParams->fileNames[i];
+
+        Ptr<CCoordinateSystemGeodeticTransformGridFile> gridFileSetting =
+            new CCoordinateSystemGeodeticTransformGridFile(&singleGridFile);
+
+        //the collection will take ownership over [gridFileSetting]
+        gridFileNames->Add(gridFileSetting);
+    }
+
+    return gridFileNames.Detach();
+}
+
+MgCoordinateSystemGeodeticTransformGridFile* CCoordinateSystemGeodeticInterpolationTransformDefParams::NewGridFile()
+{
+    return new CCoordinateSystemGeodeticTransformGridFile(NULL);
+}
+
+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

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.h	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticInterpolationTransformDefParams.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,60 @@
+//
+//  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);
+        ~CCoordinateSystemGeodeticInterpolationTransformDefParams();
+        
+        // >>> MgCoordinateSystemGeodeticInterpolationTransformDefParams
+        virtual void SetGridFiles(MgDisposableCollection* gridFiles);
+        virtual MgDisposableCollection* GetGridFiles();
+			
+        virtual STRING GetFallback();
+        virtual void SetFallback(CREFSTRING);
+
+        virtual MgCoordinateSystemGeodeticTransformGridFile* NewGridFile();
+
+        // <<< MgCoordinateSystemGeodeticInterpolationTransformDefParams
+
+        virtual bool IsProtected() { return false; };
+        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

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.cpp	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,98 @@
+//
+//  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)
+    : mulRegParams(NULL)
+{
+    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));
+}
+
+
+//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

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.h	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticMultipleRegressionTransformDefParams.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,95 @@
+//
+//  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);
+        ~CCoordinateSystemGeodeticMultipleRegressionTransformDefParams();
+
+        virtual void Dispose();
+        virtual bool IsProtected() { return false; };
+
+        //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);
+
+    private:
+        void CopyTo(void* target) const;
+        
+        void Reset();
+        void ReleaseInstance();
+    
+    private:
+        csMultipleRegressionXformParams* mulRegParams;
+    };
+
+} //namespace CSLibrary
+
+#endif //_CCOORDINATESYSTEMGEODETICMULTIPLEREGRESSIONTRANSFORMDEFPARAMS_H_
\ No newline at end of file

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPath.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPath.cpp	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPath.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,190 @@
+//
+//  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 "MentorUtil.h"                 //for IsLegalMentorName
+
+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) //don't need the catalog
+{
+}
+
+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(CCoordinateSystemGeodeticPath::CreateClone);
+
+    Ptr<CCoordinateSystemGeodeticPath> clonedPath = new CCoordinateSystemGeodeticPath(NULL);
+    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();
+}
+
+void CCoordinateSystemGeodeticPath::CopyTo(cs_GeodeticPath_& pathDef) const
+{
+    VERIFY_INITIALIZED(CopyTo);
+    pathDef = *this->pathDefinition;
+}
+
+bool CCoordinateSystemGeodeticPath::IsEncrypted()
+{
+    return false;
+}
+
+bool CCoordinateSystemGeodeticPath::IsProtected()
+{
+    VERIFY_INITIALIZED(IsProtected);
+    return 1 == this->pathDefinition->protect; //ABA: see cs_map; actually 0 does indicate protected...
+}
+
+
+//all getters and setters
+
+MgDisposableCollection* CCoordinateSystemGeodeticPath::GetPathElements()
+{
+    VERIFY_INITIALIZED(GetPathElements);
+
+    Ptr<MgDisposableCollection> pathElements = new MgDisposableCollection();
+
+    const INT32 pathElementCount = this->pathDefinition->elementCount;
+    for(int i = 0; i < pathElementCount; i++)
+    {
+        cs_GeodeticPathElement_ pathElement = this->pathDefinition->geodeticPathElements[i];
+        bool isInversed = (1 == pathElement.direction);
+        STRING transformName = MentorReadString(pathElement.geodeticXformName);
+
+        Ptr<CCoordinateSystemGeodeticPathElement> mgPathElement = new CCoordinateSystemGeodeticPathElement(transformName, isInversed);
+        
+        //the elements will be released when the collection is released
+        pathElements->Add(mgPathElement);
+    }
+
+    return pathElements.Detach();
+}
+   
+void CCoordinateSystemGeodeticPath::SetPathElements(MgDisposableCollection* pathElements)
+{
+    VERIFY_INITIALIZED(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);
+
+    if (this->IsProtected())
+        throw new MgCoordinateSystemInitializationFailedException(L"CCoordinateSystemGeodeticPath.SetPathElements", __LINE__, __WFILE__, NULL, L"MgCoordinateSystemProtectedException", 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)

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPath.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPath.h	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPath.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,87 @@
+//
+//  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();
+
+        //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();
+
+        void CopyTo(cs_GeodeticPath_& pathDef) const;
+    
+    private:
+        void CleanupInstanceVariables();
+
+    private:
+        cs_GeodeticPath_* pathDefinition;
+    };
+
+} //namespace CSLibrary
+
+#endif //_CCOORDINATESYSTEMGEODETICPATH_H_
\ No newline at end of file

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.cpp	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,254 @@
+//
+//  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,
+
+    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;
+}
+
+//Private member function which tries to get a def with the specified
+//name from the file, which is assumed to be already open.  If found,
+//returns an allocated def which the caller must free via CS_free().
+//If not found, returns NULL.
+//
+//cs_GeodeticPath_* CCoordinateSystemGeodeticPathDictionary::ReadDefFromFile(const char *pathName) const
+//{
+//    ////If the dictionary version is current, we can just
+//    ////use the regular function.
+//    //if (cs_GPDEF_MAGIC == m_lMagic)
+//    //{
+//    //    SmartCriticalClass critical(true);
+//    //    return CS_gpdef(pathName);
+//    //}
+//
+//    //_ASSERT(false);
+//    //return NULL;
+//
+//    return NULL;
+//}
+
+//cs_GeodeticPath_* CCoordinateSystemGeodeticPathDictionary::ReadDefinition(const char* definitionKey, INT32 dictionaryMagicNumber)
+//{
+//    //If the dictionary version is current, we can just
+//    //use the regular function.
+//    if (cs_GPDEF_MAGIC == dictionaryMagicNumber)
+//    {
+//        SmartCriticalClass critical(true);
+//        return CS_gpdef(definitionKey);
+//    }
+//
+//    _ASSERT(false);
+//    return 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()
+{
+    CCoordinateSystemGeodeticPath* newPathItem = this->m_pDictionary->NewItem();
+    newPathItem->Reset(); //sets up the [cs_geodeticpath_] struct; it can thus be used by 
+    
+    return newPathItem;
+}
+
+//-----------------------------------------------------------------------------
+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

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.h	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathDictionary.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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_

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathElement.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathElement.cpp	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathElement.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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
+//
+
+
+#include "GeometryCommon.h"
+#include "CoordSysCommon.h"
+
+#include "CoordSysGeodeticPathElement.h"
+
+using namespace CSLibrary;
+
+CCoordinateSystemGeodeticPathElement::CCoordinateSystemGeodeticPathElement(CREFSTRING transformName, bool isInversed)
+: transformName(transformName), isInversed(isInversed)
+{
+}
+
+CCoordinateSystemGeodeticPathElement::~CCoordinateSystemGeodeticPathElement()
+{
+}
+
+void CCoordinateSystemGeodeticPathElement::Dispose()
+{
+    delete this;
+}
+
+STRING CCoordinateSystemGeodeticPathElement::GetTransformName()
+{
+    return this->transformName;
+}
+
+void CCoordinateSystemGeodeticPathElement::SetTransformName(CREFSTRING transformName)
+{
+    this->transformName = transformName;
+}
+
+bool CCoordinateSystemGeodeticPathElement::GetIsInversed()
+{
+    return this->isInversed;
+}
+
+void CCoordinateSystemGeodeticPathElement::SetIsInversed(bool isInversed)
+{
+    this->isInversed = isInversed;
+}
\ No newline at end of file

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathElement.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathElement.h	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticPathElement.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,46 @@
+//
+//  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(CREFSTRING transformName, bool isInversed);
+        ~CCoordinateSystemGeodeticPathElement();
+
+        virtual void Dispose();
+
+        virtual STRING GetTransformName();
+        virtual void SetTransformName(CREFSTRING);
+
+        virtual bool GetIsInversed();
+        virtual void SetIsInversed(bool);
+
+    private:
+        bool isInversed;
+        STRING transformName;
+    };
+
+} //namespace CSLibrary
+
+#endif //_COORDSYSGEODETICPATHELEMENT_H_
\ No newline at end of file

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDef.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDef.cpp	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDef.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,307 @@
+//
+//  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 "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 "MentorUtil.h"                 //for IsLegalMentorName
+
+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)
+{
+}
+
+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);
+
+    //ok - did work; release this instance's information
+    this->ReleaseInstance();
+    
+    memset ((void*)newEmptyDef, 0, sizeof(cs_GeodeticTransform_));
+    
+    this->transformDefinition = newEmptyDef;
+    this->transformationDefType = transformationType;
+}
+
+INT32 CCoordinateSystemGeodeticTransformDef::GetTransformationDefType(INT32 methodCode)
+{
+    INT32 transformationType;
+    //the following swtich/case is built from the information found in [CS_gxio.c]
+    switch(methodCode)
+    {
+    //case MgCoordinateSystemGeodeticTransformationMethod::None:
+    case cs_DTCMTH_NULLX:
+    case cs_DTCMTH_WGS72:
+        transformationType = MgCoordinateSystemGeodeticTransformDefType::None;
+        break;
+
+    //case MgCoordinateSystemGeodeticTransformationMethod::MReg:
+    case cs_DTCMTH_MULRG:
+    case cs_DTCMTH_PLYNM:
+        transformationType = MgCoordinateSystemGeodeticTransformDefType::MultipleRegression;
+        break;
+
+    //case MgCoordinateSystemGeodeticTransformationMethod::Molodensky:
+    //case MgCoordinateSystemGeodeticTransformationMethod::Bursa:
+    //case MgCoordinateSystemGeodeticTransformationMethod::SevenParameter:
+    //case MgCoordinateSystemGeodeticTransformationMethod::ThreeParameter:
+    //case MgCoordinateSystemGeodeticTransformationMethod::SixParameter:
+    //case MgCoordinateSystemGeodeticTransformationMethod::FourParameter:
+    //case MgCoordinateSystemGeodeticTransformationMethod::Geocentric:
+    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_BDKUS:
+        transformationType = MgCoordinateSystemGeodeticTransformDefType::Analytical;
+        break;
+
+    //case MgCoordinateSystemGeodeticTransformationMethod::NAD27:
+    //case MgCoordinateSystemGeodeticTransformationMethod::HPGN:
+    //case MgCoordinateSystemGeodeticTransformationMethod::AGD66:
+    //case MgCoordinateSystemGeodeticTransformationMethod::AGD84:
+    //case MgCoordinateSystemGeodeticTransformationMethod::NZGD49:
+    //case MgCoordinateSystemGeodeticTransformationMethod::ATS77:
+    //case MgCoordinateSystemGeodeticTransformationMethod::CSRS:
+    //case MgCoordinateSystemGeodeticTransformationMethod::TOKYO:
+    //case MgCoordinateSystemGeodeticTransformationMethod::RGF93:
+    //case MgCoordinateSystemGeodeticTransformationMethod::ED50:
+    //case MgCoordinateSystemGeodeticTransformationMethod::DHDN:
+    //case MgCoordinateSystemGeodeticTransformationMethod::CHENYX:
+    case cs_DTCMTH_FILE:
+    case cs_DTCMTH_NTv1:  
+    case cs_DTCMTH_NTv2:
+    case cs_DTCMTH_NADCON:
+    case cs_DTCMTH_RGF:
+    case cs_DTCMTH_PAR:
+    case cs_DTCMTH_ATS77:
+
+        transformationType = MgCoordinateSystemGeodeticTransformDefType::Interpolation;
+        break;
+
+    //ABA: ???
+    //unknown: Not listed in case in CS_gxio.c
+    /*
+    static const INT32 NAD83 = 5;
+    static const INT32 WGS84 = 6;
+    static const INT32 WGS72 = 7;
+    static const INT32 Lclgrf = 99;
+    */
+
+    //unknown: No call to CS_bswap in CS_gxio.c
+    /*
+    static const INT32 GDA94 = 17;
+    static const INT32 NZGD2K = 18;
+    static const INT32 ETRF89 = 24;
+    */
+    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;
+}
+
+MgCoordinateSystemGeodeticTransformDef* CCoordinateSystemGeodeticTransformDef::CreateClone()
+{
+    VERIFY_INITIALIZED(CCoordinateSystemGeodeticTransformDef::CreateClone);
+
+    Ptr<CCoordinateSystemGeodeticTransformDef> clonedTransformDef = new CCoordinateSystemGeodeticTransformDef(NULL);
+    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(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()
+{
+    switch(this->transformationDefType)
+    {
+    case MgCoordinateSystemGeodeticTransformDefType::None:
+        return NULL;
+
+    case MgCoordinateSystemGeodeticTransformDefType::Analytical:
+        return static_cast<MgCoordinateSystemGeodeticAnalyticalTransformDefParams*>(
+            new CCoordinateSystemGeodeticAnalyticalTransformDefParams(this->transformDefinition->parameters.geocentricParameters));
+    
+    case MgCoordinateSystemGeodeticTransformDefType::Interpolation:
+        return static_cast<MgCoordinateSystemGeodeticInterpolationTransformDefParams*>(
+            new CCoordinateSystemGeodeticInterpolationTransformDefParams(this->transformDefinition->parameters.fileParameters));
+    
+    case MgCoordinateSystemGeodeticTransformDefType::MultipleRegression:
+        return static_cast<MgCoordinateSystemGeodeticMultipleRegressionTransformDefParams*>(
+            new CCoordinateSystemGeodeticMultipleRegressionTransformDefParams(this->transformDefinition->parameters.dmaMulRegParameters));
+    
+    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(CCoordinateSystemGeodeticTransformDef::SetParameters);
+    
+    if (this->IsProtected())
+        throw new MgCoordinateSystemInitializationFailedException(L"CCoordinateSystemGeodeticTransformDef::SetParameters", __LINE__, __WFILE__, NULL, L"MgCoordinateSystemProtectedException", NULL);
+
+    //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);
+    
+    //...and the parameters are actually of the correct type, i.e. match whatever we've stored in [this->transformationDefType]
+    CCoordinateSystemGeodeticTransformDefParams* transformDefParams = NULL;
+    switch(this->transformationDefType)
+    {
+    case MgCoordinateSystemGeodeticTransformDefType::Analytical:
+        transformDefParams = dynamic_cast<CCoordinateSystemGeodeticAnalyticalTransformDefParams*>(parameters);
+        break;
+
+    case MgCoordinateSystemGeodeticTransformDefType::Interpolation:
+        transformDefParams = dynamic_cast<CCoordinateSystemGeodeticInterpolationTransformDefParams*>(parameters);
+        break;
+    
+    case MgCoordinateSystemGeodeticTransformDefType::MultipleRegression:
+        transformDefParams = dynamic_cast<CCoordinateSystemGeodeticMultipleRegressionTransformDefParams*>(parameters);
+        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);
+}
+
+bool CCoordinateSystemGeodeticTransformDef::IsProtected()
+{
+    VERIFY_INITIALIZED(IsProtected);
+    return 1 == this->transformDefinition->protect; //ABA: see cs_map; actually 0 does indicate protected...
+}
+
+//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,MethodCode,INT32,this->transformDefinition->methodCode)
+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

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDef.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDef.h	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDef.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,105 @@
+//
+//  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 GetMethodCode();
+    virtual void SetMethodCode(INT32 methodCode);
+
+    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();
+
+    //helper - don't delete
+    virtual bool IsEncrypted();
+    virtual bool IsProtected();
+
+    void CopyTo(cs_GeodeticTransform_& transformDef) const;
+
+private:
+    void ReleaseInstance();
+    INT32 GetTransformationDefType(INT32 methodCode);
+
+private:
+    INT32 transformationDefType;
+    cs_GeodeticTransform_* transformDefinition;
+};
+
+} //namespace CSLibrary
+
+#endif //_CCOORDINATESYSTEMGEODETICTRANSFORMDEF_H_
\ No newline at end of file

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.cpp	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,218 @@
+//
+//  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,
+
+    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)
+{
+    CCoordinateSystemGeodeticTransformDef* newTransformDef = this->m_pDictionary->NewItem();
+    
+    newTransformDef->Reset(transformationDefType); //sets up the [cs_geodeticTransfrom_] struct and initializes it to [transformationDefType]
+    return newTransformDef; //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

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.h	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefDictionary.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefParams.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefParams.h	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformDefParams.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,32 @@
+//
+//  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;
+    };
+
+} //namespace CSLibrary
+
+#endif //_CCOORDINATESYSTEMGEODETICTRANSFORMDEFPARAMS_H_
\ No newline at end of file

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.cpp	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,87 @@
+//
+//  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 csGridFileXFormat* const fileFormatParam)
+    : gridFileDesc(NULL)
+{
+    this->gridFileDesc = (csGridFileXFormat*)CS_malc(sizeof(csGridFileXFormat));
+    if (NULL == this->gridFileDesc)
+        throw new MgOutOfMemoryException(L"CCoordinateSystemGeodeticAnalyticalTransformDefParams.ctor", __LINE__, __WFILE__, NULL, L"", NULL);
+
+    ::memset(this->gridFileDesc, 0, sizeof(csGridFileXFormat)); 
+    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(csGridFileXFormat* destGridFile) const
+{
+    ENSURE_NOT_NULL(destGridFile, CCoordinateSystemGeodeticTransformGridFile::CopyTo);
+    *destGridFile = *this->gridFileDesc;
+}
+
+
+//************************************ 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);

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.h	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformGridFile.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,57 @@
+//
+//  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
+{
+    typedef cs_GeodeticTransform_::csGeodeticXformParameters::csGeodeticXformParmsGridFiles_::csGeodeticXfromParmsFile_ csGridFileXFormat;
+
+    class CCoordinateSystemGeodeticTransformGridFile :
+        public MgCoordinateSystemGeodeticTransformGridFile
+    {
+    public:
+        CCoordinateSystemGeodeticTransformGridFile(const csGridFileXFormat* const fileFormatParam);
+        ~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);
+
+        // <<< MgCoordinateSystemGeodeticTransformGridFile
+
+        virtual void Dispose();
+        virtual bool IsProtected() { return false; }
+
+        virtual void CopyTo(csGridFileXFormat* destGridFile) const;
+
+    private:
+        void ReleaseInstance();
+
+    private:
+        csGridFileXFormat* gridFileDesc;
+    };
+}
+
+#endif //_CCOORDINATESYSTEMGEODETICTRANSFORMGRIDFILE_H
\ No newline at end of file

Modified: sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformation.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformation.cpp	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysGeodeticTransformation.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -18,19 +18,11 @@
 #include "GeometryCommon.h"
 #include "CoordSysCommon.h"
 #include "CriticalSection.h"
-
-#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 "CoordSysGeodeticTransformation.h" //for CCoordinateSystemGeodeticTransformation
+#include "MentorUtil.h"                     //for BuildDtDefFromInterface + various utilities
+
 #include "CoordSysDatum.h"                  //for CCoordinateSystemDatum
-#include "MentorUtil.h"                     //for BuildDtDefFromInterface
+#include "CoordSysGeodeticTransformation.h" //for CCoordinateSystemGeodeticTransformation
 
 using namespace CSLibrary;
 

Added: sandbox/rfc94/Common/CoordinateSystem/CoordSysMacro.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/CoordSysMacro.h	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/CoordSysMacro.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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 _MG_COORDSYSMACRO_H_
+#define _MG_COORDSYSMACRO_H_
+
+//make sure to have CS_MAP_DEF_VARIABLE defined before including this header
+
+#ifdef CS_MAP_DEF_VARIABLE
+    
+    #define VERIFY_INITIALIZED(x)   if (NULL == CS_MAP_DEF_VARIABLE) \
+        throw new MgInvalidOperationException(L# x, __LINE__, __WFILE__, NULL, L"", 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(className##.Get##propertyName); \
+            return MentorReadString(charBuffer); \
+        } \
+        DEFINE_SET_STRING(className,propertyName) \
+        { \
+            VERIFY_INITIALIZED(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(className##.Get##propertyName); \
+            return target; \
+        } \
+        DEFINE_SET_NUMERIC(className,propertyName,targetType) \
+        { \
+            VERIFY_INITIALIZED(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(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(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;\
+        }
+
+#endif
+
+#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: sandbox/rfc94/Common/CoordinateSystem/MentorDictionary.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/MentorDictionary.cpp	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/CoordinateSystem/MentorDictionary.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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: sandbox/rfc94/Common/CoordinateSystem/MentorDictionary.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/MentorDictionary.h	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/CoordinateSystem/MentorDictionary.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -49,6 +49,7 @@
     CSystemNameDescriptionMap *
     GenerateSystemNameDescriptionMap(
         csFILE *pFile,
+        const char* (*CS_Tkey)(const T&),
         const char * (*description)(const T&),
         int (*CS_Trd)(csFILE*, T *, int *))
     {
@@ -72,9 +73,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 +99,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 +112,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 +128,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 +141,13 @@
             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;
         SmartCriticalClass critical(true);
-        T *pDef = CS_Tdef(def.key_nm);
+        T *pDef = CS_Tdef(keyName);
         if (NULL != pDef)
         {
             bActuallyExists = true;
@@ -153,7 +160,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 +174,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 +210,7 @@
                 {
                     pmapSystemNameDescription->insert(
                         CSystemNameDescriptionPair(
-                            CSystemName(def.key_nm),
+                            CSystemName(keyName),
                             CSystemDescription(description(def))
                         )
                     );
@@ -232,7 +239,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 +249,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: sandbox/rfc94/Common/CoordinateSystem/MentorUtil.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/MentorUtil.cpp	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/CoordinateSystem/MentorUtil.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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
@@ -74,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:
@@ -1391,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.
@@ -1550,4 +1616,73 @@
     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)
+{
+    char *pStr = NULL;
+
+    MG_TRY()
+
+    assert(NULL != pDest);
+
+    if (NULL==pDest)
+    {
+        throw new MgNullArgumentException(L"MentorSetString", __LINE__, __WFILE__, NULL, L"", NULL);
+    }
+
+    //if (Protected())
+    //{
+    //    //Can't modify a read-only object.
+    //    throw new MgCoordinateSystemInitializationFailedException(L"MentorSetString", __LINE__, __WFILE__, NULL, L"MgCoordinateSystemProtectedException", 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: sandbox/rfc94/Common/CoordinateSystem/MentorUtil.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/MentorUtil.h	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/CoordinateSystem/MentorUtil.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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,12 @@
 //(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
+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

Added: sandbox/rfc94/Common/CoordinateSystem/namestruct.cpp
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/namestruct.cpp	                        (rev 0)
+++ sandbox/rfc94/Common/CoordinateSystem/namestruct.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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
+//
+#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
+//
+TNameStruct& 
+TNameStruct::operator=(const TNameStruct& other)
+{
+    this->Init(other.name);
+    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);
+}
\ No newline at end of file

Modified: sandbox/rfc94/Common/CoordinateSystem/namestruct.h
===================================================================
--- sandbox/rfc94/Common/CoordinateSystem/namestruct.h	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/CoordinateSystem/namestruct.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -57,17 +57,33 @@
 #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&);
+    
+    //data members
+    char* name;
+
+private:
+    //methods
+    void Init(const char *kpName = NULL);
+    void Release();
 };
 
 //This struct holds a summary of a definition (just name and description,
@@ -79,8 +95,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 +116,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: sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemCatalog.h
===================================================================
--- sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemCatalog.h	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemCatalog.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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: sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemFactory.cpp
===================================================================
--- sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemFactory.cpp	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemFactory.cpp	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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

Added: sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformDefParams.h
===================================================================
--- sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformDefParams.h	                        (rev 0)
+++ sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticAnalyticalTransformDefParams.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,74 @@
+//  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_
+
+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
+			
+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

Added: sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticInterpolationTransformDefParams.h
===================================================================
--- sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticInterpolationTransformDefParams.h	                        (rev 0)
+++ sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticInterpolationTransformDefParams.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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 _MGCOORDINATESYSTEMGEODETICINTERPOLATIONTRANSFORMDEFPARAMS_H_
+#define _MGCOORDINATESYSTEMGEODETICINTERPOLATIONTRANSFORMDEFPARAMS_H_
+
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticInterpolationTransformDefParams : public MgCoordinateSystemGeodeticTransformDefParams
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticInterpolationTransformDefParams)
+
+PUBLISHED_API:
+		
+    //BEGIN: struct csGeodeticXfromParmsFile
+
+    virtual void SetGridFiles(MgDisposableCollection* gridFiles) = 0;
+    virtual MgDisposableCollection* GetGridFiles() = 0;
+			
+    virtual STRING GetFallback() = 0;
+    virtual void SetFallback(CREFSTRING) = 0;
+
+    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

Added: sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformDefParams.h
===================================================================
--- sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformDefParams.h	                        (rev 0)
+++ sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticMultipleRegressionTransformDefParams.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,90 @@
+//  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_
+
+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
+
+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

Added: sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPath.h
===================================================================
--- sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPath.h	                        (rev 0)
+++ sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPath.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,89 @@
+//
+//  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 CoordinateSystemGeodeticTransformationPath CoordinateSystemGeodeticTransformationPath
+/// \ingroup Coordinate_System_classes
+/// \{
+
+////////////////////////////////////////////////////////////////
+/// \brief
+/// Basic functionality for the geodetic transformation path
+///
+
+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;
+
+    virtual MgDisposableCollection* GetPathElements() = 0;
+    virtual void SetPathElements(MgDisposableCollection* pathElements) = 0;
+    
+    virtual bool IsProtected()=0;
+
+    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_

Added: sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathDictionary.h
===================================================================
--- sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathDictionary.h	                        (rev 0)
+++ sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathDictionary.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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 _MGCOORDINATESYSTEMGEODETICPATHDICTIONARY_H_
+#define _MGCOORDINATESYSTEMGEODETICPATHDICTIONARY_H_
+
+/// \defgroup MgCoordinateSystemCategoryDictionary MgCoordinateSystemCategoryDictionary
+/// \ingroup Coordinate_System_classes
+/// \{
+
+////////////////////////////////////////////////////////////////
+/// \brief
+/// Basic functionality for the ellipsoid dictionary
+///
+
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticPathDictionary : public MgCoordinateSystemDictionaryBase
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticPathDictionary)
+
+PUBLISHED_API:
+        //create new path
+        virtual MgCoordinateSystemGeodeticPath* NewGeodeticPath()=0;
+
+        //working members - this won't throw an exception in case the path doesn't exist
+        virtual MgCoordinateSystemGeodeticPath* GetGeodeticPath(CREFSTRING pathName)=0;
+        
+        //virtual void Rename(CREFSTRING sOldName, CREFSTRING sNewName)=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_

Added: sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathElement.h
===================================================================
--- sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathElement.h	                        (rev 0)
+++ sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticPathElement.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,41 @@
+//
+//  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_
+
+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;
+
+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

Added: sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDef.h
===================================================================
--- sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDef.h	                        (rev 0)
+++ sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDef.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,93 @@
+//  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_
+
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticTransformDef : public MgGuardDisposable
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticTransformDef)
+
+PUBLISHED_API:
+
+    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 GetMethodCode() = 0;
+    virtual void SetMethodCode(INT32 methodCode) = 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;
+
+    virtual bool IsProtected() = 0;
+    
+    virtual INT32 GetTransformDefType() = 0;
+    
+    virtual MgCoordinateSystemGeodeticTransformDefParams* GetParameters() = 0;
+    virtual void SetParameters(MgCoordinateSystemGeodeticTransformDefParams* parameters) = 0;
+
+    virtual MgCoordinateSystemGeodeticTransformDef* CreateClone() = 0;
+    
+    //MgCoordinateSystemGeodeticTransformation* CreateTransformation();
+
+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

Added: sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefDictionary.h
===================================================================
--- sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefDictionary.h	                        (rev 0)
+++ sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefDictionary.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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 _MGCOORDINATESYSTEMGEODETICTRANSFORMDEFDICTIONARY_H_
+#define _MGCOORDINATESYSTEMGEODETICTRANSFORMDEFDICTIONARY_H_
+
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticTransformDefDictionary : public MgCoordinateSystemDictionaryBase
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticTransformDefDictionary)
+
+PUBLISHED_API:
+    
+    virtual MgCoordinateSystemGeodeticTransformDef* NewGeodeticTransformationDef(INT32 transformationDefType) = 0;
+
+    //working members - this won't throw an exception in case the transformation doesn't exist
+    virtual MgCoordinateSystemGeodeticTransformDef* GetGeodeticTransformationDef(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_CoordinateSystemGeodeticTransformDefDictionary;
+};
+
+#endif //_MGCOORDINATESYSTEMGEODETICTRANSFORMDEFDICTIONARY_H_
\ No newline at end of file

Added: sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefParams.h
===================================================================
--- sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefParams.h	                        (rev 0)
+++ sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefParams.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,41 @@
+//  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_
+
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticTransformDefParams : public MgGuardDisposable
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticTransformDefParams)
+
+PUBLISHED_API:
+
+//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_CoordinateSystemGeodeticTransformDefParams;
+
+};
+
+#endif _MGCOORDINATESYSTEMGEODETICTRANSFORMDEFPARAMS_H_
\ No newline at end of file

Added: sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefType.h
===================================================================
--- sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefType.h	                        (rev 0)
+++ sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformDefType.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,32 @@
+//
+//  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_
+
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticTransformDefType
+{
+
+PUBLISHED_API:
+
+    static const INT32 None = 0;
+    static const INT32 Analytical = 1;
+    static const INT32 Interpolation = 2;
+    static const INT32 MultipleRegression = 4;
+};
+
+#endif //_MGCOORDINATESYSTEMGEODETICTRANSFORMDEFTYPE_H_
\ No newline at end of file

Added: sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFile.h
===================================================================
--- sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFile.h	                        (rev 0)
+++ sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFile.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,50 @@
+//  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_
+
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticTransformGridFile : public MgGuardDisposable
+{
+    DECLARE_CLASSNAME(MgCoordinateSystemGeodeticTransformGridFile)
+
+PUBLISHED_API:
+
+    virtual INT32 GetFileFormat() = 0;
+    virtual void SetFileFormat(INT32 gridFileFormat) = 0;
+
+    virtual bool GetIsInverseDirection() = 0;
+    virtual void SetIsInverseDirection(bool isInverseDirection) = 0;
+
+    virtual STRING GetFileName() = 0;
+    virtual void SetFileName(CREFSTRING fileName) = 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

Added: sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFileFormat.h
===================================================================
--- sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFileFormat.h	                        (rev 0)
+++ sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformGridFileFormat.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -0,0 +1,35 @@
+//
+//  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_
+
+
+class MG_GEOMETRY_API MgCoordinateSystemGeodeticTransformGridFileFormat
+{
+PUBLISHED_API:
+    static const INT32 None = 0;
+    static const INT32 NTv1 = 256;
+    static const INT32 NTv2 = 512;
+    static const INT32 NADCON = 768;
+    static const INT32 RGF = 1024;
+    static const INT32 PAR = 1280;
+    static const INT32 ATS77 = 1536;
+
+};
+
+#endif //_MGCOORDINATESYSTEMGEODETICTRANSFORMGRIDFILEFORMAT_H_
\ No newline at end of file

Modified: sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformation.h
===================================================================
--- sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformation.h	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/Geometry/CoordinateSystem/CoordinateSystemGeodeticTransformation.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -31,6 +31,8 @@
     virtual MgCoordinate* Shift(double dLongitude, double dLatitude)=0;
     virtual MgCoordinate* Shift(double dLongitude, double dLatitude, double dZ)=0;
 
+    //TODO: Add comments - don't use the following members any more
+
     virtual double GetOffsetX()=0;
     virtual double GetOffsetY()=0;
     virtual double GetOffsetZ()=0;

Modified: sandbox/rfc94/Common/Geometry/Geometry.vcproj
===================================================================
--- sandbox/rfc94/Common/Geometry/Geometry.vcproj	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/Geometry/Geometry.vcproj	2010-09-02 14:20:14 UTC (rev 5104)
@@ -2643,6 +2643,30 @@
 				>
 			</File>
 			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticAnalyticalTransformDefParams.h"
+				>
+			</File>
+			<File
+				RelativePath=".\CoordinateSystem\CoordinateSystemGeodeticInterpolationTransformDefParams.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 +2675,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 +2855,14 @@
 				>
 			</File>
 			<File
+				RelativePath="..\CoordinateSystem\CoordSysDictionaryBase.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysDictionaryBase.h"
+				>
+			</File>
+			<File
 				RelativePath="..\CoordinateSystem\CoordSysDictionaryUtility.cpp"
 				>
 			</File>
@@ -2887,6 +2943,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 +2999,34 @@
 				>
 			</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.h"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticTransformGridFile.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\CoordinateSystem\CoordSysGeodeticTransformGridFile.h"
+				>
+			</File>
+			<File
 				RelativePath="..\CoordinateSystem\CoordSysGridGeneric.cpp"
 				>
 			</File>
@@ -2911,6 +3043,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\CoordinateSystem\CoordSysMacro.h"
+				>
+			</File>
+			<File
 				RelativePath="..\CoordinateSystem\CoordSysMathComparator.cpp"
 				>
 			</File>
@@ -3011,6 +3147,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\CoordinateSystem\namestruct.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\CoordinateSystem\namestruct.h"
 				>
 			</File>

Modified: sandbox/rfc94/Common/Geometry/GeometryClassId.h
===================================================================
--- sandbox/rfc94/Common/Geometry/GeometryClassId.h	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/Geometry/GeometryClassId.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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: sandbox/rfc94/Common/Geometry/GeometryCommon.h
===================================================================
--- sandbox/rfc94/Common/Geometry/GeometryCommon.h	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Common/Geometry/GeometryCommon.h	2010-09-02 14:20:14 UTC (rev 5104)
@@ -108,6 +108,15 @@
 
 #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/CoordinateSystemGeodeticTransformDef.h"
+#include "CoordinateSystem/CoordinateSystemGeodeticPathElement.h"
+#include "CoordinateSystem/CoordinateSystemGeodeticPath.h"
 #include "CoordinateSystem/CoordinateSystemGeodeticTransformation.h"
 #include "CoordinateSystem/CoordinateSystemEllipsoid.h"
 #include "CoordinateSystem/CoordinateSystemCategory.h"
@@ -119,6 +128,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

Modified: sandbox/rfc94/Web/src/DotNetUnmanagedApi/Geometry/GeometryApiGen.xml
===================================================================
--- sandbox/rfc94/Web/src/DotNetUnmanagedApi/Geometry/GeometryApiGen.xml	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Web/src/DotNetUnmanagedApi/Geometry/GeometryApiGen.xml	2010-09-02 14:20:14 UTC (rev 5104)
@@ -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: sandbox/rfc94/Web/src/DotNetUnmanagedApi/Geometry/GeometryConstants.xml
===================================================================
--- sandbox/rfc94/Web/src/DotNetUnmanagedApi/Geometry/GeometryConstants.xml	2010-09-02 12:35:03 UTC (rev 5103)
+++ sandbox/rfc94/Web/src/DotNetUnmanagedApi/Geometry/GeometryConstants.xml	2010-09-02 14:20:14 UTC (rev 5104)
@@ -86,6 +86,8 @@
   <Class name="MgCoordinateSystemUnitCode" />
   <Class name="MgCoordinateSystemUnitType" />
   <Class name="MgCoordinateSystemWktFlavor" />
+  <Class name="MgCoordinateSystemGeodeticTransformDefType" />
+  <Class name="MgCoordinateSystemGeodeticTransformGridFileFormat"/>
 </Classes>
 
 <!--
@@ -116,6 +118,8 @@
     <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/CoordinateSystemGeodeticTransformGridFileFormat.h" />
 
 </Headers>
 



More information about the mapguide-commits mailing list