[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