EgtExecutor 1.6f3 :

- eliminata ExeCreateCurveCompoByApprox
- le diverse ExeApproxCurve riunite in una sola
- aggiunta ExeMergeCurvesInCurveCompo
- riportate le medesime modifiche in lua.
This commit is contained in:
Dario Sassi
2015-06-21 17:01:26 +00:00
parent 7f9a18849b
commit ff53dcb8e3
8 changed files with 99 additions and 186 deletions
+47 -69
View File
@@ -469,23 +469,6 @@ ExeTrimExtendCurveByLen( int nId, double dLen, const Point3d& ptNear, int nRefTy
bOk = pCurve->ExtendEndByLen( dLen) ;
}
}
//Point3d ptStart, ptEnd ;
//if ( bOk && pCurve->GetStartPoint( ptStart) && pCurve->GetEndPoint( ptEnd)) {
// if ( SqDist( ptStart, ptNearL) < SqDist( ptEnd, ptNearL)) {
// if ( dLen < - EPS_SMALL)
// bOk = pCurve->TrimStartAtLen( - dLen) ;
// else if ( dLen > EPS_SMALL)
// bOk = pCurve->ExtendStartByLen( dLen) ;
// }
// else {
// if ( dLen < - EPS_SMALL) {
// double dCrvLen ;
// bOk = pCurve->GetLength( dCrvLen) && pCurve->TrimEndAtLen( dCrvLen + dLen) ;
// }
// else if ( dLen > EPS_SMALL)
// bOk = pCurve->ExtendEndByLen( dLen) ;
// }
//}
else
bOk = false ;
ExeSetModified() ;
@@ -764,76 +747,71 @@ ExeExplodeCurveCompo( int nId, int* pnCount)
}
//-------------------------------------------------------------------------------
int
ExeApproxCurveArc( int nId, double dLinTol)
bool
ExeMergeCurvesInCurveCompo( int nId, double dLinTol)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
// recupero l'arco
ICurveArc* pArc = GetCurveArc( pGeomDB->GetGeoObj( nId)) ;
bool bOk = ( pArc != nullptr) ;
// eseguo l'approssimazione con segmenti di linea
// recupero la curva composita
ICurveComposite* pCompo = GetCurveComposite( pGeomDB->GetGeoObj( nId)) ;
bool bOk = ( pCompo != nullptr) ;
// lancio il merge delle curve componenti
const double ANG_TOL_STD_DEG = 15 ;
bOk = bOk && pCompo->MergeCurves( dLinTol, ANG_TOL_STD_DEG) ;
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
string sLua = "EgtMergeCurvesInCurveCompo(" + ToString( nId) + ")" +
" -- Ok=" + ToString( bOk) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
}
return bOk ;
}
//-------------------------------------------------------------------------------
int
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 ;
PtrOwner<ICurveComposite> pCC( CreateCurveComposite()) ;
bOk = bOk && ! IsNull( pCC) ;
PolyLine PL ;
bOk = bOk && pArc->ApproxWithLines( dLinTol, ANG_TOL_STD_DEG, PL) && pCC->FromPolyLine( PL) ;
if ( nApprType == APP_LINES || nApprType == APP_LEFT_LINES || nApprType == APP_RIGHT_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->ApproxWithArcs( dLinTol, ANG_TOL_MAX_DEG, PA) && pCC->FromPolyArc( PA) ;
}
// copio estrusione e spessore
Vector3d vtExtr ;
if ( bOk && pCurve->GetExtrusion( vtExtr))
pCC->SetExtrusion( vtExtr) ;
double dThick ;
if ( bOk && pCurve->GetThickness( dThick))
pCC->SetThickness(dThick) ;
// inserisco la curva composita nello stesso posto del GeomDB
int nCrvId = ( bOk ? pGeomDB->InsertGeoObj( GDB_ID_NULL, nId, GDB_BEFORE, Release( pCC)) : GDB_ID_NULL) ;
bOk = bOk && ( nCrvId != GDB_ID_NULL) ;
// copio gli attributi
bOk = bOk && pGeomDB->CopyAttributes( nId, nCrvId) ;
// elimino l'arco
// elimino la curva originale
bOk = bOk && pGeomDB->Erase( nId) ;
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
string sLua = "EgtApproxCurveArc(" + ToString( nId) + "," +
ToString( dLinTol) + ")" +
string sLua = "EgtApproxCurve(" + ToString( nId) + "," +
ApproxTypeToString( nApprType) + "," +
ToString( dLinTol) + ")" +
" -- Id=" + ToString( nCrvId) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
}
// restituisco risultato
return nCrvId ;
}
//-------------------------------------------------------------------------------
int
ExeApproxCurveBezier( int nId, bool bArcsVsLines, double dLinTol)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
// recupero la curva di Bezier
ICurveBezier* pCBezier = GetCurveBezier( pGeomDB->GetGeoObj( nId)) ;
bool bOk = ( pCBezier != nullptr) ;
// eseguo l'approssimazione
const double ANG_TOL_STD_DEG = 15 ;
PtrOwner<ICurveComposite> pCC( CreateCurveComposite()) ;
bOk = bOk && ! IsNull( pCC) ;
if ( bArcsVsLines) { // con bi-archi
PolyArc PA ;
bOk = bOk && pCBezier->ApproxWithArcs( dLinTol, ANG_TOL_STD_DEG, PA) && pCC->FromPolyArc( PA) ;
}
else { // con linee
PolyLine PL ;
bOk = bOk && pCBezier->ApproxWithLines( dLinTol, ANG_TOL_STD_DEG, PL) && pCC->FromPolyLine( PL) ;
}
// inserisco la curva composita nello stesso posto del GeomDB
int nCrvId = ( bOk ? pGeomDB->InsertGeoObj( GDB_ID_NULL, nId, GDB_BEFORE, Release( pCC)) : GDB_ID_NULL) ;
bOk = bOk && ( nCrvId != GDB_ID_NULL) ;
// copio gli attributi
bOk = bOk && pGeomDB->CopyAttributes( nId, nCrvId) ;
// elimino la curva di Bezier
bOk = bOk && pGeomDB->Erase( nId) ;
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
string sLua = "EgtApproxCurveBezier(" + ToString( nId) + "," +
( bArcsVsLines ? "GDB_CA.ARCS" : "GDB_CA.LINES") + "," +
ToString( dLinTol) + ")" +
" -- Id=" + ToString( nCrvId) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
}
// restituisco risultato
return nCrvId ;
}