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:
+52
-11
@@ -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 ;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user