diff --git a/EXE_GdbObjects.cpp b/EXE_GdbObjects.cpp index 881bf6c..9c79875 100644 --- a/EXE_GdbObjects.cpp +++ b/EXE_GdbObjects.cpp @@ -44,13 +44,23 @@ ExeGetParent( int nId) return pGeomDB->GetParentId( nId) ; } +//----------------------------------------------------------------------------- +bool +ExeGetGlobFrame( int nId, Frame3d& frGlob) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, false) + // recupero il riferimento globale in cui è immerso l'oggetto + return pGeomDB->GetGlobFrame( nId, frGlob) ; +} + //----------------------------------------------------------------------------- bool ExeGetGroupGlobFrame( int nId, Frame3d& frGlob) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, false) - // recupero il riferimento globale del gruppo + // recupero il riferimento globale del gruppo (in cui sono immersi i suoi oggetti figli) return pGeomDB->GetGroupGlobFrame( nId, frGlob) ; } diff --git a/EXE_GeoSnap.cpp b/EXE_GeoSnap.cpp index 7103ad5..f8d428e 100644 --- a/EXE_GeoSnap.cpp +++ b/EXE_GeoSnap.cpp @@ -510,10 +510,8 @@ ExeCurveDomain( int nId, double* pdStart, double* pdEnd) return false ; // recupero la curva ICurve* pCurve = GetCurve( pGeomDB->GetGeoObj( nId)) ; - if ( pCurve == nullptr) - return false ; // recupero il dominio - return pCurve->GetDomain( *pdStart, *pdEnd) ; + return ( pCurve != nullptr && pCurve->GetDomain( *pdStart, *pdEnd)) ; } //---------------------------------------------------------------------------- @@ -527,10 +525,8 @@ ExeCurveLength( int nId, double* pdLen) return false ; // recupero la curva ICurve* pCurve = GetCurve( pGeomDB->GetGeoObj( nId)) ; - if ( pCurve == nullptr) - return false ; // recupero la lunghezza - return pCurve->GetLength( *pdLen) ; + return ( pCurve != nullptr && pCurve->GetLength( *pdLen)) ; } //---------------------------------------------------------------------------- @@ -586,7 +582,7 @@ ExeCurveIsClosed( int nId) // recupero la curva ICurve* pCurve = GetCurve( pGeomDB->GetGeoObj( nId)) ; // verifico se chiusa - return pCurve->IsClosed() ; + return ( pCurve != nullptr && pCurve->IsClosed()) ; } //---------------------------------------------------------------------------- @@ -601,7 +597,7 @@ ExeCurveIsFlat( int nId, Plane3d& Plane) // recupero la curva ICurve* pCurve = GetCurve( pGeomDB->GetGeoObj( nId)) ; // ne verifico la planarità - return pCurve->IsFlat( Plane) ; + return ( pCurve != nullptr && pCurve->IsFlat( Plane)) ; } //---------------------------------------------------------------------------- @@ -616,7 +612,7 @@ ExeCurveAreaXY( int nId, double& dArea) // recupero la curva ICurve* pCurve = GetCurve( pGeomDB->GetGeoObj( nId)) ; // determino l'area nel piano XY - return pCurve->GetAreaXY( dArea) ; + return ( pCurve != nullptr && pCurve->GetAreaXY( dArea)) ; } //---------------------------------------------------------------------------- @@ -631,7 +627,7 @@ ExeCurveArea( int nId, Plane3d& Plane, double& dArea) // recupero la curva ICurve* pCurve = GetCurve( pGeomDB->GetGeoObj( nId)) ; // determino il piano medio della curva e la sua area su di esso (deve essere chiusa) - return pCurve->GetArea( Plane, dArea) ; + return ( pCurve != nullptr && pCurve->GetArea( Plane, dArea)) ; } //---------------------------------------------------------------------------- diff --git a/EgtExecutor.rc b/EgtExecutor.rc index eb58aab..944ba9c 100644 Binary files a/EgtExecutor.rc and b/EgtExecutor.rc differ diff --git a/LUA_GdbObjects.cpp b/LUA_GdbObjects.cpp index bd6ae46..7f84ca2 100644 --- a/LUA_GdbObjects.cpp +++ b/LUA_GdbObjects.cpp @@ -68,6 +68,40 @@ LuaGetType( lua_State* L) return 1 ; } +//------------------------------------------------------------------------------- +static int +LuaGetGlobFrame( lua_State* L) +{ + // 1 parametro : Id + int nId = GDB_ID_NULL ; + LuaGetParam( L, 1, nId) ; + LuaClearStack( L) ; + // recupero il frame + Frame3d frFrame ; + if ( ExeGetGlobFrame( nId, frFrame)) + LuaSetParam( L, frFrame) ; + else + LuaSetParam( L) ; + return 1 ; +} + +//------------------------------------------------------------------------------- +static int +LuaGetGroupGlobFrame( lua_State* L) +{ + // 1 parametro : Id + int nId = GDB_ID_NULL ; + LuaGetParam( L, 1, nId) ; + LuaClearStack( L) ; + // recupero il frame + Frame3d frFrame ; + if ( ExeGetGroupGlobFrame( nId, frFrame)) + LuaSetParam( L, frFrame) ; + else + LuaSetParam( L) ; + return 1 ; +} + //------------------------------------------------------------------------------- static int LuaGetGroupObjs( lua_State* L) @@ -525,6 +559,8 @@ LuaInstallGdbObjects( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtExistsObj", LuaExistsObj) ; bOk = bOk && luaMgr.RegisterFunction( "EgtGetParent", LuaGetParent) ; bOk = bOk && luaMgr.RegisterFunction( "EgtGetType", LuaGetType) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtGetGlobFrame", LuaGetGlobFrame) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtGetGroupGlobFrame", LuaGetGroupGlobFrame) ; bOk = bOk && luaMgr.RegisterFunction( "EgtGetGroupObjs", LuaGetGroupObjs) ; bOk = bOk && luaMgr.RegisterFunction( "EgtGetFirstInGroup", LuaGetFirstInGroup) ; bOk = bOk && luaMgr.RegisterFunction( "EgtGetNext", LuaGetNext) ;