EgtExecutor 2.4h2 :

- aggiunte funzioni Exe e Lua CreateCircle2P
- in ExeCreateCurveFillet migliorato trim celle parti rimanenti arrivando anche a cancellazione
- estesa ExeModifyArcRadius per modificare raggio di arco mantenendo gli estremi oppure no da parametro bKeepCenter (default true).
This commit is contained in:
DarioS
2022-08-21 16:20:34 +02:00
parent 5c7ed7e3c1
commit 130f40d2bc
5 changed files with 146 additions and 23 deletions
+52 -11
View File
@@ -1325,7 +1325,7 @@ ExeModifyCircle3P( int nId, const Point3d& ptP1, const Point3d& ptP2, const Poin
// creo l'arco
PtrOwner<ICurveArc> pCrvArc( CreateCurveArc()) ;
if ( IsNull( pCrvArc))
return GDB_ID_NULL ;
return false ;
// recupero il riferimento locale
Frame3d frLoc ;
if ( ! pGeomDB->GetGlobFrame( nId, frLoc))
@@ -1348,24 +1348,65 @@ ExeModifyCircle3P( int nId, const Point3d& ptP1, const Point3d& ptP2, const Poin
}
//-------------------------------------------------------------------------------
bool
ExeModifyArcRadius( int nId, double dRad)
static bool
MyModifyArcRadius( IGeomDB* pGeomDB, int nId, double dRad)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, false)
// recupero l'arco e i suoi dati
ICurveArc* pArc = GetCurveArc( pGeomDB->GetGeoObj( nId)) ;
if ( pArc == nullptr)
return false ;
double dOldRad = pArc->GetRadius() ;
// imposto il nuovo raggio
if ( pArc->ChangeRadius( dRad))
return true ;
// in caso di errore, ripristino i vecchi dati
else {
pArc->ChangeRadius( dOldRad) ;
return pArc->ChangeRadius( dRad) ;
}
//-------------------------------------------------------------------------------
static bool
MyModifyArcRadiusEx( IGeomDB* pGeomDB, int nId, double dRad)
{
// recupero l'arco e i suoi dati
ICurveArc* pArc = GetCurveArc( pGeomDB->GetGeoObj( nId)) ;
if ( pArc == nullptr)
return false ;
// recupero gli estremi dell'arco e la loro distanza nel piano dell'arco
Point3d ptStart, ptEnd ;
if ( ! pArc->GetStartPoint( ptStart) || ! pArc->GetEndPoint( ptEnd))
return false ;
double dPlaneDist = OrthoCompo( ( ptEnd - ptStart), pArc->GetNormVersor()).Len() ;
// se angolo al centro maggiore o uguale ad un giro o estremi coincidenti, conservo il centro
if ( abs( pArc->GetAngCenter()) >= ANG_FULL - EPS_ANG_ZERO || dPlaneDist < 2 * EPS_SMALL)
return MyModifyArcRadius( pGeomDB, nId, dRad) ;
// mantengo i punti estremi (pertanto il nuovo raggio non può essere inferiore a metà della loro distanza nel piano)
if ( dRad < dPlaneDist / 2 - EPS_ZERO)
return false ;
// creo arco con gli stessi estremi, con identica normale e con nuovo raggio
PtrOwner<ICurveArc> pCrvArc( CreateCurveArc()) ;
if ( IsNull( pCrvArc) ||
! pCrvArc->Set2PNRS( ptStart, ptEnd, pArc->GetNormVersor(), dRad, pArc->GetAngCenter() > 0))
return false ;
// lo sostituisco all'originale
return pGeomDB->ReplaceGeoObj( nId, Release( pCrvArc)) ;
}
//-------------------------------------------------------------------------------
bool
ExeModifyArcRadius( int nId, double dRad, bool bKeepCenter)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, false)
bool bOk = ( bKeepCenter ? MyModifyArcRadius( pGeomDB, nId, dRad) : MyModifyArcRadiusEx( pGeomDB, nId, dRad)) ;
if ( bOk)
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
string sLua = "EgtModifyArcRadius(" + IdToString( nId) + "," +
ToString( dRad) + ")" +
" -- Ok=" + ToString( bOk) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
}
return bOk ;
}
//-------------------------------------------------------------------------------