From 411df428141d7627e4643787de7ee0df7d944880 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 19 Apr 2016 15:56:35 +0000 Subject: [PATCH] EgtExecutor 1.6p3 : - aggiunta estensione MPF riconosciuta come tipo file CNC - aggiunta ExeExistsTable. --- EXE_Exchange.cpp | 2 +- EXE_GdbModifyCurve.cpp | 210 ++++++++++++++++++++++------------------- EXE_MachMgr.cpp | 12 ++- EgtExecutor.rc | Bin 11694 -> 11694 bytes LUA_GdbModifyCurve.cpp | 38 ++++++++ 5 files changed, 165 insertions(+), 97 deletions(-) diff --git a/EXE_Exchange.cpp b/EXE_Exchange.cpp index 5616da9..e1d6b38 100644 --- a/EXE_Exchange.cpp +++ b/EXE_Exchange.cpp @@ -53,7 +53,7 @@ ExeGetFileType( const string& sFilePath) return FT_DXF ; else if ( sFileExt == "STL") return FT_STL ; - else if ( sFileExt == "CNC" || sFileExt == "XPI") + else if ( sFileExt == "CNC" || sFileExt == "XPI" || sFileExt == "MPF") return FT_CNC ; else if ( sFileExt == "HED" || sFileExt == "ENT" || sFileExt == "ENS") return FT_CSF ; diff --git a/EXE_GdbModifyCurve.cpp b/EXE_GdbModifyCurve.cpp index cf0dba0..27933b1 100644 --- a/EXE_GdbModifyCurve.cpp +++ b/EXE_GdbModifyCurve.cpp @@ -139,6 +139,99 @@ ExeOffsetCurveAdv( int nId, double dDist, int nType, int* pnCount) return nFirstId ; } +//------------------------------------------------------------------------------- +bool +ExeApproxCurve( int nId, int nApprType, double dLinTol) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + // recupero la curva + ICurve* pCurve = GetCurve( pGeomDB->GetGeoObj( nId)) ; + bool bOk = ( pCurve != nullptr) ; + // eseguo l'approssimazione + const double ANG_TOL_MAX_DEG = 90 ; + const double ANG_TOL_STD_DEG = 15 ; + const double LIN_FEA_LEN_STD = 20 ; + PtrOwner pCC( CreateCurveComposite()) ; + bOk = bOk && ! IsNull( pCC) ; + if ( nApprType == APP_LINES || + nApprType == APP_LEFT_LINES || nApprType == APP_LEFT_CONVEX_LINES || + nApprType == APP_RIGHT_LINES || nApprType == APP_RIGHT_CONVEX_LINES) { + PolyLine PL ; + bOk = bOk && pCurve->ApproxWithLines( dLinTol, ANG_TOL_MAX_DEG, nApprType, PL) && pCC->FromPolyLine( PL) ; + } + else { // con bi-archi + PolyArc PA ; + bOk = bOk && pCurve->ApproxWithArcsEx( dLinTol, ANG_TOL_STD_DEG, LIN_FEA_LEN_STD, PA) && pCC->FromPolyArc( PA) ; + // merge di archi identici di biarchi + bOk = bOk && pCC->MergeCurves( 0.5 * dLinTol, ANG_TOL_STD_DEG) ; + } + // copio estrusione e spessore + Vector3d vtExtr ; + if ( bOk && pCurve->GetExtrusion( vtExtr)) + pCC->SetExtrusion( vtExtr) ; + double dThick ; + if ( bOk && pCurve->GetThickness( dThick)) + pCC->SetThickness(dThick) ; + // sostituisco la vecchia curva con la nuova + bOk = bOk && pGeomDB->ReplaceGeoObj( nId, Release( pCC)) ; + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtApproxCurve(" + ToString( nId) + "," + + ApproxTypeToString( nApprType) + "," + + ToString( dLinTol) + ")" + + " -- Ok=" + ToString( bOk) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + // restituisco risultato + return bOk ; +} + +//------------------------------------------------------------------------------- +bool +ExeProjectCurveOnPlane( int nId, const Point3d& ptOn, const Vector3d& vtN, int nRefType) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + // recupero la curva + ICurve* pCurve = GetCurve( pGeomDB->GetGeoObj( nId)) ; + bool bOk = ( pCurve != nullptr) ; + // recupero il riferimento locale + Frame3d frLoc ; + bOk = bOk && pGeomDB->GetGlobFrame( nId, frLoc) ; + // porto in locale il punto e la normale del piano + Point3d ptOnL = GetPointLocal( pGeomDB, ptOn, nRefType, frLoc) ; + Vector3d vtNL = GetVectorLocal( pGeomDB, vtN, nRefType, frLoc) ; + // calcolo il piano di proiezione + Plane3d plPlane ; + bOk = bOk && SetPlane( ptOnL, vtNL, plPlane) ; + // eseguo la proiezione + PtrOwner pProCrv( bOk ? ProjectCurveOnPlane( *pCurve, plPlane) : nullptr) ; + bOk = bOk && ! IsNull( pProCrv) ; + // copio estrusione e spessore + Vector3d vtExtr ; + if ( bOk && pCurve->GetExtrusion( vtExtr)) + pProCrv->SetExtrusion( vtExtr) ; + double dThick ; + if ( bOk && pCurve->GetThickness( dThick)) + pProCrv->SetThickness(dThick) ; + // sostituisco la vecchia curva con la nuova + bOk = bOk && pGeomDB->ReplaceGeoObj( nId, Release( pProCrv)) ; + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtProjectCurveOnPlane(" + ToString( nId) + ",{" + + ToString( ptOn) + "},{" + + ToString( vtN) + "}," + + RefTypeToString( nRefType) + ")" + + " -- Ok=" + ToString( bOk) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + // restituisco risultato + return bOk ; +} + //---------------------------------------------------------------------------- bool ExeChangeClosedCurveStartPoint( int nId, const Point3d& ptP, int nRefType) @@ -1364,99 +1457,6 @@ ExeRemoveCurveCompoUndercutOnY( int nId, double dLinTol) return bOk ; } -//------------------------------------------------------------------------------- -bool -ExeApproxCurve( int nId, int nApprType, double dLinTol) -{ - IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) - // recupero la curva - ICurve* pCurve = GetCurve( pGeomDB->GetGeoObj( nId)) ; - bool bOk = ( pCurve != nullptr) ; - // eseguo l'approssimazione - const double ANG_TOL_MAX_DEG = 90 ; - const double ANG_TOL_STD_DEG = 15 ; - const double LIN_FEA_LEN_STD = 20 ; - PtrOwner pCC( CreateCurveComposite()) ; - bOk = bOk && ! IsNull( pCC) ; - if ( nApprType == APP_LINES || - nApprType == APP_LEFT_LINES || nApprType == APP_LEFT_CONVEX_LINES || - nApprType == APP_RIGHT_LINES || nApprType == APP_RIGHT_CONVEX_LINES) { - PolyLine PL ; - bOk = bOk && pCurve->ApproxWithLines( dLinTol, ANG_TOL_MAX_DEG, nApprType, PL) && pCC->FromPolyLine( PL) ; - } - else { // con bi-archi - PolyArc PA ; - bOk = bOk && pCurve->ApproxWithArcsEx( dLinTol, ANG_TOL_STD_DEG, LIN_FEA_LEN_STD, PA) && pCC->FromPolyArc( PA) ; - // merge di archi identici di biarchi - bOk = bOk && pCC->MergeCurves( 0.5 * dLinTol, ANG_TOL_STD_DEG) ; - } - // copio estrusione e spessore - Vector3d vtExtr ; - if ( bOk && pCurve->GetExtrusion( vtExtr)) - pCC->SetExtrusion( vtExtr) ; - double dThick ; - if ( bOk && pCurve->GetThickness( dThick)) - pCC->SetThickness(dThick) ; - // sostituisco la vecchia curva con la nuova - bOk = bOk && pGeomDB->ReplaceGeoObj( nId, Release( pCC)) ; - ExeSetModified() ; - // se richiesto, salvo il comando Lua equivalente - if ( IsCmdLog()) { - string sLua = "EgtApproxCurve(" + ToString( nId) + "," + - ApproxTypeToString( nApprType) + "," + - ToString( dLinTol) + ")" + - " -- Ok=" + ToString( bOk) ; - LOG_INFO( GetCmdLogger(), sLua.c_str()) ; - } - // restituisco risultato - return bOk ; -} - -//------------------------------------------------------------------------------- -bool -ExeProjectCurveOnPlane( int nId, const Point3d& ptOn, const Vector3d& vtN, int nRefType) -{ - IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) - // recupero la curva - ICurve* pCurve = GetCurve( pGeomDB->GetGeoObj( nId)) ; - bool bOk = ( pCurve != nullptr) ; - // recupero il riferimento locale - Frame3d frLoc ; - bOk = bOk && pGeomDB->GetGlobFrame( nId, frLoc) ; - // porto in locale il punto e la normale del piano - Point3d ptOnL = GetPointLocal( pGeomDB, ptOn, nRefType, frLoc) ; - Vector3d vtNL = GetVectorLocal( pGeomDB, vtN, nRefType, frLoc) ; - // calcolo il piano di proiezione - Plane3d plPlane ; - bOk = bOk && SetPlane( ptOnL, vtNL, plPlane) ; - // eseguo la proiezione - PtrOwner pProCrv( bOk ? ProjectCurveOnPlane( *pCurve, plPlane) : nullptr) ; - bOk = bOk && ! IsNull( pProCrv) ; - // copio estrusione e spessore - Vector3d vtExtr ; - if ( bOk && pCurve->GetExtrusion( vtExtr)) - pProCrv->SetExtrusion( vtExtr) ; - double dThick ; - if ( bOk && pCurve->GetThickness( dThick)) - pProCrv->SetThickness(dThick) ; - // sostituisco la vecchia curva con la nuova - bOk = bOk && pGeomDB->ReplaceGeoObj( nId, Release( pProCrv)) ; - ExeSetModified() ; - // se richiesto, salvo il comando Lua equivalente - if ( IsCmdLog()) { - string sLua = "EgtProjectCurveOnPlane(" + ToString( nId) + ",{" + - ToString( ptOn) + "},{" + - ToString( vtN) + "}," + - RefTypeToString( nRefType) + ")" + - " -- Ok=" + ToString( bOk) ; - LOG_INFO( GetCmdLogger(), sLua.c_str()) ; - } - // restituisco risultato - return bOk ; -} - //------------------------------------------------------------------------------- static bool MyChainCurvesInGroup( int nGroupId, const Point3d& ptNear, bool bAllowInvert, int nRefType) @@ -1516,12 +1516,32 @@ MyChainCurvesInGroup( int nGroupId, const Point3d& ptNear, bool bAllowInvert, in bool ExeChainCurvesInGroup( int nGroupId, const Point3d& ptNear, int nRefType) { - return MyChainCurvesInGroup(nGroupId, ptNear, true, nRefType) ; + bool bOk = MyChainCurvesInGroup(nGroupId, ptNear, true, nRefType) ; + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtChainCurvesInGroup(" + ToString( nGroupId) + "," + + ToString( ptNear) + "}," + + RefTypeToString( nRefType) + ")" + + " -- Ok=" + ToString( bOk) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + return bOk ; } //------------------------------------------------------------------------------- bool ExeReorderCurvesInGroup( int nGroupId, const Point3d& ptNear, int nRefType) { - return MyChainCurvesInGroup(nGroupId, ptNear, false, nRefType) ; + bool bOk = MyChainCurvesInGroup(nGroupId, ptNear, false, nRefType) ; + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtReorderCurvesInGroup(" + ToString( nGroupId) + "," + + ToString( ptNear) + "}," + + RefTypeToString( nRefType) + ")" + + " -- Ok=" + ToString( bOk) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + return bOk ; } diff --git a/EXE_MachMgr.cpp b/EXE_MachMgr.cpp index 2a95542..6cb9654 100644 --- a/EXE_MachMgr.cpp +++ b/EXE_MachMgr.cpp @@ -712,7 +712,17 @@ ExeRotatePartInRawPart( int nPartId, const Vector3d& vtAx, double dAngRotDeg) // Table & Fixtures //----------------------------------------------------------------------------- bool -ExeSetTable( const std::string& sTable) +ExeExistsTable( const string& sTable) +{ + GseContext* pGseCtx = GetCurrGseContext() ; + VERIFY_CTX_MACHMGR( pGseCtx, false) + // verifico esistenza della tavola indicata nella macchina della macchinata corrente + return pGseCtx->m_pMachMgr->ExistsTable( sTable) ; +} + +//----------------------------------------------------------------------------- +bool +ExeSetTable( const string& sTable) { GseContext* pGseCtx = GetCurrGseContext() ; VERIFY_CTX_MACHMGR( pGseCtx, false) diff --git a/EgtExecutor.rc b/EgtExecutor.rc index 5b016ddceadc3b9de732c6dfcdcb9e4726ed54ff..2a1af0353931a8d83fdf11fc13e4e5e6c5b4d736 100644 GIT binary patch delta 97 zcmZ1%y)JsgA2vqg%@@V4Gflq2na5~6Ignd-a{*Tk3sCf++-0W82LxfF21;&>n->Y| cF@rU@0x76sKgP|Iq`|@mn->Y| cF@rU@0x76sKgP|Iq`|@m