diff --git a/EXE_GdbCreateCurve.cpp b/EXE_GdbCreateCurve.cpp index c5d69a5..1198e12 100644 --- a/EXE_GdbCreateCurve.cpp +++ b/EXE_GdbCreateCurve.cpp @@ -737,7 +737,8 @@ ExeCreateCircleCPEx( int nParentId, const Point3d& ptCen, // recupero la curva di tangenza in locale CurveLocal CrvTgLoc( pGeomDB, nIdO, frLoc) ; // calcolo la circonferenza tangente a questa curva - pCrvArc.Set( GetCircleCenTgCurve( ptCenL, vtNL, *CrvTgLoc, ptOnL)) ; + if ( CrvTgLoc.Get() != nullptr) + pCrvArc.Set( GetCircleCenTgCurve( ptCenL, vtNL, *CrvTgLoc, ptOnL)) ; bOk = bOk && ! IsNull( pCrvArc) ; } // altrimenti errore @@ -973,7 +974,8 @@ ExeCreateArcC2PEx( int nParentId, const Point3d& ptCen, // recupero la curva di tangenza in locale CurveLocal CrvTgLoc( pGeomDB, nIdS, frLoc) ; // calcolo l'arco tangente a questa curva - pCrvArc.Set( GetArcCenTgCurvePnt( ptCenL, *CrvTgLoc, ptStartL, ptNearEndL, vtNormL)) ; + if ( CrvTgLoc.Get() != nullptr) + pCrvArc.Set( GetArcCenTgCurvePnt( ptCenL, *CrvTgLoc, ptStartL, ptNearEndL, vtNormL)) ; bOk = bOk && ! IsNull( pCrvArc) ; } // altrimenti errore @@ -1136,7 +1138,8 @@ ExeCreateArc2PDEx( int nParentId, const Point3d& ptStart, // recupero la curva di tangenza in locale CurveLocal CrvTgLoc( pGeomDB, nId, frLoc) ; // calcolo l'arco tangente a questa curva - pCrv.Set( GetArcPntDirTgCurve( ptStartL, vtDirSL, *CrvTgLoc, ptEndL, vtNormL)) ; + if ( CrvTgLoc.Get() != nullptr) + pCrv.Set( GetArcPntDirTgCurve( ptStartL, vtDirSL, *CrvTgLoc, ptEndL, vtNormL)) ; bOk = bOk && ! IsNull( pCrv) ; } // altrimenti errore @@ -1278,7 +1281,8 @@ ExeCreateCurveFillet( int nParentId, int nCrv1, const Point3d& ptNear1, CurveLocal CrvLoc2( pGeomDB, nCrv2, frLoc) ; // calcolo il raccordo double dTrim1, dTrim2 ; - pArc.Set( CreateFillet( *CrvLoc1, ptNear1L, *CrvLoc2, ptNear2L, vtNormL, dRad, dTrim1, dTrim2)) ; + if ( CrvLoc1.Get() != nullptr && CrvLoc2.Get() != nullptr) + pArc.Set( CreateFillet( *CrvLoc1, ptNear1L, *CrvLoc2, ptNear2L, vtNormL, dRad, dTrim1, dTrim2)) ; bOk = bOk && ! IsNull( pArc) ; // assegno il versore estrusione bOk = bOk && pArc->SetExtrusion( vtExtrL) ; @@ -1341,7 +1345,8 @@ ExeCreateCurveChamfer( int nParentId, int nCrv1, const Point3d& ptNear1, CurveLocal CrvLoc2( pGeomDB, nCrv2, frLoc) ; // calcolo lo smusso double dTrim1, dTrim2 ; - pLine.Set( CreateChamfer( *CrvLoc1, ptNear1L, *CrvLoc2, ptNear2L, vtNormL, dDist, dTrim1, dTrim2)) ; + if ( CrvLoc1.Get() != nullptr && CrvLoc2.Get() != nullptr) + pLine.Set( CreateChamfer( *CrvLoc1, ptNear1L, *CrvLoc2, ptNear2L, vtNormL, dDist, dTrim1, dTrim2)) ; bOk = bOk && ! IsNull( pLine) ; // assegno il versore estrusione bOk = bOk && pLine->SetExtrusion( vtExtrL) ; diff --git a/EXE_MachMgr.cpp b/EXE_MachMgr.cpp index d37280d..d62d3ba 100644 --- a/EXE_MachMgr.cpp +++ b/EXE_MachMgr.cpp @@ -97,7 +97,15 @@ ExeSetCurrMachine( const string& sMachineName) IMachMgr* pMachMgr = GetCurrMachMgr() ; VERIFY_MACHMGR( pMachMgr, false) // imposto la macchina corrente - return pMachMgr->SetCurrMachine( sMachineName) ; + bool bOk = pMachMgr->SetCurrMachine( sMachineName) ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtSetCurrMachine('" + sMachineName + "')" + + " -- Ok=" + ToString( bOk) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + // restituisco il risultato + return bOk ; } //----------------------------------------------------------------------------- @@ -2379,10 +2387,20 @@ ExeGetCalcToolDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) { IMachMgr* pMachMgr = GetCurrMachMgr() ; VERIFY_MACHMGR( pMachMgr, false) - // calcolo il tip utensile dagli assi macchina + // calcolo la direzione utensile dagli assi macchina return pMachMgr->GetCalcToolDirFromAngles( dAngA, dAngB, vtDir) ; } +//----------------------------------------------------------------------------- +bool +ExeGetCalcAuxDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) +{ + IMachMgr* pMachMgr = GetCurrMachMgr() ; + VERIFY_MACHMGR( pMachMgr, false) + // calcolo la direzione ausiliaria dagli assi macchina + return pMachMgr->GetCalcAuxDirFromAngles( dAngA, dAngB, vtDir) ; +} + //----------------------------------------------------------------------------- bool ExeVerifyOutstroke( double dX, double dY, double dZ, double dAngA, double dAngB, int& nStat) diff --git a/EgtExecutor.rc b/EgtExecutor.rc index f4c0b6b..863a5ea 100644 Binary files a/EgtExecutor.rc and b/EgtExecutor.rc differ diff --git a/LUA_MachMgr.cpp b/LUA_MachMgr.cpp index 649bbbc..c135822 100644 --- a/LUA_MachMgr.cpp +++ b/LUA_MachMgr.cpp @@ -2755,6 +2755,27 @@ LuaGetCalcToolDirFromAngles( lua_State* L) return 1 ; } +//------------------------------------------------------------------------------- +static int +LuaGetCalcAuxDirFromAngles( lua_State* L) +{ + // 2 parametri : dAngA, dAngB + double dAngA ; + LuaCheckParam( L, 1, dAngA) + double dAngB ; + LuaCheckParam( L, 2, dAngB) + LuaClearStack( L) ; + // Calcolo la direzione ausiliaria dagli angoli macchina + Vector3d vtDir ; + bool bOk = ExeGetCalcAuxDirFromAngles( dAngA, dAngB, vtDir) ; + // restituisco il risultato + if ( bOk && ! vtDir.IsSmall()) + LuaSetParam( L, vtDir) ; + else + LuaSetParam( L) ; + return 1 ; +} + //------------------------------------------------------------------------------- static int LuaVerifyOutstroke( lua_State* L) @@ -3248,6 +3269,7 @@ LuaInstallMachMgr( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtGetCalcPositions", LuaGetCalcPositions) ; bOk = bOk && luaMgr.RegisterFunction( "EgtGetCalcTipFromPositions", LuaGetCalcTipFromPositions) ; bOk = bOk && luaMgr.RegisterFunction( "EgtGetCalcToolDirFromAngles", LuaGetCalcToolDirFromAngles) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtGetCalcAuxDirFromAngles", LuaGetCalcAuxDirFromAngles) ; bOk = bOk && luaMgr.RegisterFunction( "EgtVerifyOutstroke", LuaVerifyOutstroke) ; bOk = bOk && luaMgr.RegisterFunction( "EgtGetOutstrokeInfo", LuaGetOutstrokeInfo) ; // Machine Move