/////////////////////////////////////////////////////////////////////////////// // 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. /////////////////////////////////////////////////////////////////////////////// /************************************************************************/ /* Defines entry points for the DLL */ /************************************************************************/ //#include "stdafx.h" #include "OdaCommon.h" #include "OdGripPointsModule.h" #include "RxDynamicModule.h" #include "DbLine.h" #include "DbMline.h" #include "DbArc.h" #include "DbPolyline.h" #include "DbEntityGripPoints.h" #include "DbRotatedDimension.h" #include "DbAlignedDimension.h" #include "DbRadialDimension.h" #include "DbDiametricDimension.h" #include "Db3PointAngularDimension.h" #include "DbOrdinateDimension.h" #include "Db2LineAngularDimension.h" #include "DbRadialDimensionLarge.h" #include "DbArcDimension.h" #include "DbCircle.h" #include "DbBlockReference.h" #include "DbMLeader.h" #include "DbPolygonMesh.h" #include "DbUnderlayReference.h" #include "DbViewport.h" #include "DbRasterImage.h" #include "DbTrace.h" #include "DbSolid.h" #include "Db3dPolyline.h" #include "DbCamera.h" #include "AbstractViewPE.h" #include "DbGeoPositionMarker.h" #include "DbWipeout.h" #include "DbFace.h" #include "DbMPolygon.h" #include "DbPoint.h" #if defined(_TOOLKIT_IN_DLL_) && defined(_MSC_VER) // MacOS X dynamic library loading. //#ifdef _TOOLKIT_IN_DLL_ extern "C" int APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID ) { switch ( dwReason ) { case DLL_PROCESS_ATTACH: // remove this if you need per-thread initialization DisableThreadLibraryCalls( (HMODULE)hInstance ); break; } return TRUE; } #endif //_TOOLKIT_IN_DLL_ // MacOS X dynamic library loading. ODRX_DEFINE_DYNAMIC_MODULE(OdGripPointsModule); OdGripPointsModule::OdGripPointsModule() { } OdGripPointsModule::~OdGripPointsModule() { } void OdGripPointsModule::initApp() { if ( !OdDbEntity::desc() ) { throw OdError(eNotInitializedYet); } ::odrxDynamicLinker()->loadModule(OdDbModuleName, false)->addRef(); OdDbEntity::desc()->addX( OdDbGripPointsPE::desc(), &_egp ); OdDbLine::desc()->addX( OdDbGripPointsPE::desc(), &_lgp ); OdDbLine::desc()->addX( OdDbMultiModesGripPE::desc(), &_lmmg); OdDbMline::desc()->addX( OdDbGripPointsPE::desc(), &_mlgp ); OdDbArc::desc()->addX( OdDbGripPointsPE::desc(), &_agp ); OdDbArc::desc()->addX( OdDbMultiModesGripPE::desc(), &_ammg); OdDbPolyline::desc()->addX( OdDbGripPointsPE::desc(), &_plgp ); OdDbPolyline::desc()->addX( OdDbMultiModesGripPE::desc(), &_plmmg ); if (OdDbMPolygon::desc()) OdDbMPolygon::desc()->addX(OdDbGripPointsPE::desc(), &_mpolgp); OdDbRotatedDimension::desc()->addX( OdDbGripPointsPE::desc(), &_rdgp ); OdDbRotatedDimension::desc()->addX(OdDbMultiModesGripPE::desc(), &_dimmmg); OdDbAlignedDimension::desc()->addX( OdDbGripPointsPE::desc(), &_adgp ); OdDbAlignedDimension::desc()->addX( OdDbMultiModesGripPE::desc(), &_dimmmg ); OdDbRadialDimension::desc()->addX( OdDbGripPointsPE::desc(), &_rcdgp ); OdDbRadialDimension::desc()->addX( OdDbMultiModesGripPE::desc(), &_dimmmg); OdDbDiametricDimension::desc()->addX( OdDbGripPointsPE::desc(), &_dcdgp ); OdDbDiametricDimension::desc()->addX(OdDbMultiModesGripPE::desc(), &_dimmmg); OdDb3PointAngularDimension::desc()->addX( OdDbGripPointsPE::desc(), &_3padgp ); OdDb3PointAngularDimension::desc()->addX( OdDbMultiModesGripPE::desc(), &_dimmmg); OdDbOrdinateDimension::desc()->addX( OdDbGripPointsPE::desc(), &_odgp ); OdDbOrdinateDimension::desc()->addX(OdDbMultiModesGripPE::desc(), &_dimmmg); OdDb2LineAngularDimension::desc()->addX( OdDbGripPointsPE::desc(), &_2ladgp ); OdDb2LineAngularDimension::desc()->addX(OdDbMultiModesGripPE::desc(), &_dimmmg); OdDbArcDimension::desc()->addX( OdDbGripPointsPE::desc(), &_arcdgp ); OdDbArcDimension::desc()->addX(OdDbMultiModesGripPE::desc(), &_dimmmg); OdDbRadialDimensionLarge::desc()->addX( OdDbGripPointsPE::desc(), &_rdlgp ); OdDbBlockReference::desc()->addX( OdDbGripPointsPE::desc(), &_insertgp ); OdDbMLeader::desc()->addX( OdDbGripPointsPE::desc(), &_mleadgp ); OdDbMLeader::desc()->addX(OdDbMultiModesGripPE::desc(), &_mleadmmg); OdDbPolygonMesh::desc()->addX( OdDbPolygonMeshGripPointsPE::desc(), &_mmeshdgp ); OdDbPdfReference::desc()->addX( OdDbPdfUnderlayGripPointsPE::desc(), &_pdfunderlaygp ); OdDbViewport::desc()->addX( OdDbViewportGripPointsPE::desc(), &_vptgp ); OdDb2dPolyline::desc()->addX( OdDbGripPointsPE::desc(), &_2dplgp ); OdDbRasterImage::desc()->addX( OdDbRasterImageGripPointsPE::desc(), &_rimggp ); OdDbTrace::desc()->addX( OdDbTraceGripPointsPE::desc(), &_trcgp ); OdDbSolid::desc()->addX( OdDbSolidGripPointsPE::desc(), &_sldgp ); OdDb3dPolyline::desc()->addX( OdDbGripPointsPE::desc(), &_3dplgp ); OdDbCamera::desc()->addX( OdDbGripPointsPE::desc(), &_camgp ); OdDbCircle::desc()->addX( OdDbGripPointsPE::desc(), &_cgp ); OdDbEllipse::desc()->addX(OdDbGripPointsPE::desc(), &_elgp); OdDbText::desc()->addX( OdDbGripPointsPE::desc(), &_txtgp ); OdDbGeoPositionMarker::desc()->addX( OdDbGeoPositionMarkerPE::desc(), &_geoposmarkgp ); OdDbUnderlayReference::desc()->addX( OdDbDgnUnderlayGripPointsPE::desc(), &_dgnunderlaygp ); OdDbOle2Frame::desc()->addX( OdDbOleGripPointsPE::desc(), &_olegp ); OdDbWipeout::desc()->addX( OdDbWipeOutGripPointsPE::desc(), &_wipeoutgp ); OdDbFace::desc()->addX(OdDbGripPointsPE::desc(), &_fgp); OdDbMText::desc()->addX(OdDbMTextGripPointsPE::desc(), &_mtxtgp); OdDbPoint::desc()->addX(OdDbPointGripPointsPE::desc(), &_pgp); OdDbBlockGripAppData::rxInit(); OdGripLineMultiModeAppData::rxInit(); OdGripArcMultiModeAppData::rxInit(); OdGripMLeaderMultiModeAppData::rxInit(); OdGripPolylineMultiModeAppData::rxInit(); OdGripDimMultiModeAppData::rxInit(); OdGripAlignedDimMultiModeAppData::rxInit(); OdGripRotatedDimMultiModeAppData::rxInit(); OdGrip3PointAngularDimMultiModeAppData::rxInit(); OdGrip2LineAngularDimMultiModeAppData::rxInit(); OdGripArcDimMultiModeAppData::rxInit(); OdGripOrdDimMultiModeAppData::rxInit(); OdGripRadialDimMultiModeAppData::rxInit(); OdGripDiametricDimMultiModeAppData::rxInit(); } void OdGripPointsModule::uninitApp() { OdGripDiametricDimMultiModeAppData::rxUninit(); OdGripRadialDimMultiModeAppData::rxUninit(); OdGripOrdDimMultiModeAppData::rxUninit(); OdGripArcDimMultiModeAppData::rxUninit(); OdGrip3PointAngularDimMultiModeAppData::rxUninit(); OdGrip2LineAngularDimMultiModeAppData::rxUninit(); OdGripRotatedDimMultiModeAppData::rxUninit(); OdGripAlignedDimMultiModeAppData::rxUninit(); OdGripDimMultiModeAppData::rxUninit(); OdGripPolylineMultiModeAppData::rxUninit(); OdGripMLeaderMultiModeAppData::rxUninit(); OdGripArcMultiModeAppData::rxUninit(); OdGripLineMultiModeAppData::rxUninit(); OdDbBlockGripAppData::rxUninit(); OdDbPoint::desc()->delX(OdDbPointGripPointsPE::desc()); OdDbMText::desc()->delX(OdDbMTextGripPointsPE::desc()); OdDbFace::desc()->delX(OdDbFaceGripPointsPE::desc()); OdDbWipeout::desc()->delX( OdDbWipeOutGripPointsPE::desc() ); OdDbOle2Frame::desc()->delX( OdDbOleGripPointsPE::desc() ); OdDbGeoPositionMarker::desc()->delX( OdDbGeoPositionMarkerPE::desc() ); OdDbGeoPositionMarker::desc()->delX( OdDbGeoPositionMarkerPE::desc() ); OdDbText::desc()->delX( OdDbGripPointsPE::desc() ); OdDbEllipse::desc()->delX(OdDbGripPointsPE::desc()); OdDbCircle::desc()->delX( OdDbGripPointsPE::desc() ); OdDbCamera::desc()->delX( OdDbGripPointsPE::desc() ); OdDb3dPolyline::desc()->delX( OdDbGripPointsPE::desc() ); OdDbSolid::desc()->delX( OdDbSolidGripPointsPE::desc() ); OdDbTrace::desc()->delX( OdDbTraceGripPointsPE::desc() ); OdDbViewport::desc()->delX( OdDbViewportGripPointsPE::desc() ); OdDbPdfReference::desc()->delX( OdDbPdfUnderlayGripPointsPE::desc() ); OdDbPolyline::desc()->delX( OdDbGripPointsPE::desc() ); OdDbPolyline::desc()->delX(OdDbMultiModesGripPE::desc() ); if (OdDbMPolygon::desc()) OdDbMPolygon::desc()->delX(OdDbGripPointsPE::desc()); OdDbLine::desc()->delX( OdDbGripPointsPE::desc() ); OdDbLine::desc()->delX( OdDbMultiModesGripPE::desc() ); OdDbMline::desc()->delX( OdDbGripPointsPE::desc() ); OdDbArc::desc()->delX( OdDbGripPointsPE::desc() ); OdDbArc::desc()->delX( OdDbMultiModesGripPE::desc() ); OdDbEntity::desc()->delX( OdDbGripPointsPE::desc() ); OdDbRotatedDimension::desc()->delX( OdDbGripPointsPE::desc() ); OdDbRotatedDimension::desc()->delX( OdDbMultiModesGripPE::desc() ); OdDbAlignedDimension::desc()->delX( OdDbGripPointsPE::desc() ); OdDbAlignedDimension::desc()->delX( OdDbMultiModesGripPE::desc() ); OdDbRadialDimension::desc()->delX( OdDbGripPointsPE::desc() ); OdDbRadialDimension::desc()->delX(OdDbMultiModesGripPE::desc() ); OdDbDiametricDimension::desc()->delX( OdDbGripPointsPE::desc() ); OdDbDiametricDimension::desc()->delX( OdDbMultiModesGripPE::desc() ); OdDb3PointAngularDimension::desc()->delX( OdDbGripPointsPE::desc() ); OdDb3PointAngularDimension::desc()->delX( OdDbMultiModesGripPE::desc() ); OdDbOrdinateDimension::desc()->delX( OdDbGripPointsPE::desc() ); OdDbOrdinateDimension::desc()->delX( OdDbMultiModesGripPE::desc() ); OdDb2LineAngularDimension::desc()->delX( OdDbGripPointsPE::desc() ); OdDb2LineAngularDimension::desc()->delX(OdDbMultiModesGripPE::desc() ); OdDbArcDimension::desc()->delX( OdDbGripPointsPE::desc() ); OdDbArcDimension::desc()->delX(OdDbMultiModesGripPE::desc() ); OdDbRadialDimensionLarge::desc()->delX( OdDbGripPointsPE::desc() ); OdDbBlockReference::desc()->delX( OdDbGripPointsPE::desc() ); OdDbMLeader::desc()->delX( OdDbGripPointsPE::desc() ); OdDbMLeader::desc()->delX(OdDbMultiModesGripPE::desc() ); OdDbPolygonMesh::desc()->delX( OdDbPolygonMeshGripPointsPE::desc() ); OdDb2dPolyline::desc()->delX( OdDbGripPointsPE::desc() ); OdDbRasterImage::desc()->delX( OdDbRasterImageGripPointsPE::desc() ); OdDbUnderlayReference::desc()->delX( OdDbDgnUnderlayGripPointsPE::desc() ); ::odrxDynamicLinker()->loadModule(OdDbModuleName, false)->release(); } bool projectOffset(const OdDbDatabase* pDb, const OdGeVector3d& vNormal, OdGeVector3d& vOffset) { if(!pDb) return false; OdDbObjectId idVp = pDb->activeViewportId(); OdDbObjectPtr pVp(idVp.openObject()); OdAbstractViewPEPtr pAVp(pVp); if (!pAVp.isNull()) { OdGeVector3d vViewDir = pAVp->direction(pVp); if (!vViewDir.isPerpendicularTo(vNormal)) { OdGePlane pln(OdGePoint3d::kOrigin, vNormal); OdGeMatrix3d mProj; mProj.setToProjection(pln, vViewDir); vOffset.transformBy(mProj); return true; } } return false; }