/////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2002-2025, Open Design Alliance (the "Alliance"). // All rights reserved. // // This software and its documentation and related materials are owned by // the Alliance. The software may only be incorporated into application // programs owned by members of the Alliance, subject to a signed // Membership Agreement and Supplemental Software License Agreement with the // Alliance. The structure and organization of this software are the valuable // trade secrets of the Alliance and its suppliers. The software is also // protected by copyright law and international treaty provisions. Application // programs incorporating this software must include the following statement // with their copyright notices: // // This application incorporates Open Design Alliance software pursuant to a license // agreement with Open Design Alliance. // Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance. // All rights reserved. // // By use of this software, its documentation or related materials, you // acknowledge and accept the above terms. /////////////////////////////////////////////////////////////////////////////// #ifndef _OD_DG_GEODATA_PEIMPL_ #define _OD_DG_GEODATA_PEIMPL_ #include "TD_PackPush.h" #include "DgGeoData.h" #include "SpatialReference/OdCoordinateReferenceSystemDefinition.h" #include "SpatialReference/OdCoordinateReferenceSystemOperation.h" #include "SpatialReference/OdCoordinateReferenceSystemTransformation.h" #include "SpatialReference/OdHelper.h" #include "SpatialReference/OdDatumDefinition.h" #include "SpatialReference/OdEllipsoidDefinition.h" #include "SpatialReference/OdFormatConverter.h" #include "SpatialReference/OdDatumShift.h" #include "SpatialReference/OdCategoryDefinition.h" #include "DbBaseDatabase.h" class OdDgGeoDataCoordinateConverterImpl : public OdDgGeoDataCoordinateConverter { public: ODRX_DECLARE_MEMBERS(OdDgGeoDataCoordinateConverterImpl); OdDgGeoDataCoordinateConverterImpl(); virtual ~OdDgGeoDataCoordinateConverterImpl(); virtual OdResult transformXYZPointLL(const OdGePoint3d& xyzPoint, OdGePoint3d& llPoint) const; virtual OdResult transformXYZPointsLL(const OdGePoint3dArray& arrXYZPoints, OdGePoint3dArray& arrLLPoints) const; virtual OdResult transformLLPointXYZ(const OdGePoint3d& llPoint, OdGePoint3d& xyzPoint) const; virtual OdResult transformLLPointsXYZ(const OdGePoint3dArray& arrLLPoints, OdGePoint3dArray& arrXYZPoints) const; virtual void init(OdSpatialReference::OdCoordinateReferenceSystemDefinition* pCsData, double dUnitConversionScale, const OdDgGeoDataHelmertParams& transformData, bool bUseTransform); private: OdSpatialReference::OdCoordinateReferenceSystemOperationPtr m_pOperation; double m_dModelToCoordinateSystemUnitsScale; OdDgGeoDataHelmertParams m_geoDataHelmertParams; bool m_bApplyHelmertTransform; bool m_bApplyScale; }; typedef OdSmartPtr OdDgGeoDataCoordinateConverterImplPtr; //---------------------------------------------------------------------------------------------------------- class OdDgGeoDataReprojectionCoordinateTransformerImpl : public OdDgGeoDataReprojectionCoordinateTransformer { public: ODRX_DECLARE_MEMBERS(OdDgGeoDataReprojectionCoordinateTransformerImpl); OdDgGeoDataReprojectionCoordinateTransformerImpl(); virtual ~OdDgGeoDataReprojectionCoordinateTransformerImpl(); virtual OdResult transformPoint(OdGePoint3d& point) const; virtual OdResult transformPoints(OdGePoint3dArray& arrPoints) const; virtual OdResult transformPoint(OdGePoint2d& point) const; virtual OdResult transformPoints(OdGePoint2dArray& arrPoints) const; virtual void init(const OdSpatialReference::OdCoordinateReferenceSystemDefinition* pCsDataSource, double dSourceUnitConversionScale, const OdDgGeoDataHelmertParams& sourceTransformData, bool bSourceUseTransform, const OdSpatialReference::OdCoordinateReferenceSystemDefinition* pCsDataDest, double dDestUnitConversionScale, const OdDgGeoDataHelmertParams& destTransformData, bool bDestUseTransform, bool bReprojectEllevation ); private: double m_dSourceModelToCoordinateSystemUnitsScale; OdDgGeoDataHelmertParams m_sourceGeoDataHelmertParams; bool m_bSourceApplyHelmertTransform; bool m_bSourceApplyScale; bool m_bReprojectEllevation; double m_dDestModelToCoordinateSystemUnitsScale; OdDgGeoDataHelmertParams m_destGeoDataHelmertParams; bool m_bDestApplyHelmertTransform; bool m_bDestApplyScale; OdSpatialReference::OdCoordinateReferenceSystemOperationPtr m_pSourceOperation; OdSpatialReference::OdCoordinateReferenceSystemOperationPtr m_pTargetOperation; OdSpatialReference::OdDatumShiftPtr m_pDatumShift; }; typedef OdSmartPtr OdDgGeoDataCoordinateConverterImplPtr; //---------------------------------------------------------------------------------------------------------- class OdDgGeoDataPEImpl : public OdDgGeoDataPE { public: virtual OdResult getGeoDataByName(const OdString& strName, OdDgGeoDataCoordinateSystemPtr& pCoordSystem, OdDgGeoDataDatum& datum, OdDgGeoDataEllipsoid& ellipsoid); virtual OdResult getGeoDataDatumByName(const OdString& strDatumName, OdDgGeoDataDatum& datum, OdDgGeoDataEllipsoid& ellipsoid); virtual OdResult getGeoDataEllipsoidByName(const OdString& strDatumName, OdDgGeoDataEllipsoid& ellipsoid); virtual OdResult createAll(const OdGePoint3d& geoPt, OdArray& allCoordSys); virtual OdResult createAll(OdArray& allCoordSys, const OdDgGeoDataCoordinateSystemCategory* pCategory = NULL); virtual OdResult transformGeoPointByDatum(const OdString& strDatumNameFrom, const OdString& strDatumNameTo, const OdGePoint3d& ptGeoPoint, OdGePoint3d& ptResult); virtual OdResult createGeoPointFromCS(const OdString& strCSFrom, const OdString& strDatumNameTo, const OdGePoint3d& ptXYZPoint, OdGePoint3d& ptResult); virtual OdDgGeoDataReprojectionCoordinateTransformerPtr createReprojectionTransformer(const OdDgGeoDataInfo* pGeoDataFrom, const OdDgGeoDataInfo* pGeoDataTo, double dModelScale = 1.0, bool bReprojectEllevation = true); virtual OdDgGeoDataCoordinateConverterPtr createGeoDataCoordinateConvertor(const OdDgGeoDataInfo* pGeoData, const OdDgModel* pModel = NULL); virtual OdResult getWktRepresentation(const OdDgGeoDataInfo* pGeoData, OdString& strWkt) const; }; typedef OdSmartPtr OdDgGeoDataPEImplPtr; class OdDgGeoDataExportPEImpl : public OdDbBaseGeoDataExportPE { ODRX_DECLARE_MEMBERS(OdDgGeoDataExportPEImpl); virtual ~OdDgGeoDataExportPEImpl() {}; virtual OdResult getGeoDataParams(const OdDbBaseDatabase*, OdString&, int&, int&) const ODRX_OVERRIDE; virtual OdResult getGeoExtents(const OdDbBaseDatabase*, OdGePoint2dArray&, OdGePoint2dArray&) const ODRX_OVERRIDE; }; typedef OdSmartPtr OdDgGeoDataExportPEImplPtr; //---------------------------------------------------------------------------------------------------------- class OdDgGeoDataCoordinateSystemCategoryPEImpl : public OdDgGeoDataCoordinateSystemCategoryPE { public: virtual OdResult getNumOfCoordinateSystem(int& num, const OdString& strCategoryId) const; virtual OdResult getCoordinateSystemAt(int index, const OdString& strCategoryId, OdDgGeoDataCoordinateSystemPtr& pCoordSys) const; virtual OdResult createAll(OdArray& allCategories); }; typedef OdSmartPtr OdDgGeoDataCoordinateSystemCategoryPEImplPtr; #include "TD_PackPop.h" #endif //_OD_DB_GEODATA_PEIMPL_