EgtGeomKernel 1.5h1 :

- aggiunta CurveByInterp per interpolazione di punti con curve
- aggiunto parametro filtro tipo entità su selezione oggetti di gruppo.
This commit is contained in:
Dario Sassi
2014-08-07 07:33:53 +00:00
parent d6756c5054
commit fba20ea93d
12 changed files with 582 additions and 18 deletions
+95 -7
View File
@@ -34,6 +34,7 @@
#include "/EgtDev/Include/EgkIntersCurveCurve.h"
#include "/EgtDev/Include/EgkChainCurves.h"
#include "/EgtDev/Include/EgkBiArcs.h"
#include "/EgtDev/Include/EGkCurveByInterp.h"
#include "/EgtDev/Include/EgkSurfTriMesh.h"
#include "/EgtDev/Include/EgkExtText.h"
#include "/EgtDev/Include/EGkStmFromTriangleSoup.h"
@@ -1567,6 +1568,9 @@ GdbExecutor::ExecuteCurveCompo( const string& sCmd2, const STRVECTOR& vsParams)
// creazione per congiunzione di punti con bulge (segmenti di retta e arco)
else if ( sCmd2 == "PB" || sCmd2 == "FROMPOINTBULGES")
return CurveCompoFromPointBulges( vsParams) ;
// creazione per interpolazione di punti
else if ( sCmd2 == "PINTERP" || sCmd2 == "FROMPOINTINTERPOLATION")
return CurveCompoFromPointInterpolation( vsParams) ;
// creazione da split di curva semplice
else if ( sCmd2 == "S" || sCmd2 == "FROMSPLIT")
return CurveCompoFromSplit( vsParams) ;
@@ -1725,6 +1729,52 @@ GdbExecutor::CurveCompoFromPointBulges( const STRVECTOR& vsParams)
return AddGeoObj( vsParams[0], vsParams[1], Release( pCrvCompo)) ;
}
//----------------------------------------------------------------------------
bool
GdbExecutor::CurveCompoFromPointInterpolation( const STRVECTOR& vsParams)
{
// 5 parametri : Id, ParentId, Points, Method, Type
if ( vsParams.size() != 5)
return false ;
// recupero il riferimento del gruppo destinazione
Frame3d frDest ;
if ( ! m_pGDB->GetGroupGlobFrame( GetIdParam( vsParams[1]), frDest))
return false ;
// recupero i punti
PNTVECTOR vPoints ;
if ( ! GetPointsParam( vsParams[2], frDest, vPoints))
return false ;
// recupero il metodo di interpolazione
string sMethod = vsParams[3] ;
ToUpper( sMethod) ;
int nMethod = 0 ;
if ( sMethod == "BESSEL")
nMethod = CurveByInterp::BESSEL ;
else if ( sMethod == "AKIMA")
nMethod = CurveByInterp::AKIMA ;
else if ( sMethod == "AKIMA_CORNER")
nMethod = CurveByInterp::AKIMA_CORNER ;
// recupero il tipo di risultato di interpolazione
string sType = vsParams[4] ;
ToUpper( sType) ;
int nType = 0 ;
if ( sType == "BIARCS")
nType = CurveByInterp::BIARCS ;
else if ( sType == "CUBIC_BEZIERS")
nType = CurveByInterp::CUBIC_BEZIERS ;
// oggetto interpolatore
CurveByInterp crvByInterp ;
crvByInterp.Start() ;
for ( int i = 0 ; i < int( vPoints.size()) ; ++ i)
crvByInterp.AddPoint( vPoints[i]) ;
crvByInterp.End() ;
PtrOwner<ICurve> pCrv( crvByInterp.GetCurve( nMethod, nType)) ;
if ( ! ::IsValid( pCrv))
return false ;
// inserisco la curva composita nel DB
return AddGeoObj( vsParams[0], vsParams[1], ::Release( pCrv)) ;
}
//----------------------------------------------------------------------------
bool
GdbExecutor::CurveCompoFromSplit( const STRVECTOR& vsParams)
@@ -3221,10 +3271,22 @@ GdbExecutor::GetPointsParam( const string& sParam, const Frame3d& frPnt, PNTVECT
STRVECTOR::iterator Iter ;
for ( Iter = vsPoints.begin() ; Iter != vsPoints.end() ; ++Iter) {
Trim( (*Iter), " \t\r\n") ;
Point3d ptP ;
if ( ! GetPointParam( *Iter, frPnt, ptP))
return false ;
vPoints.push_back( ptP) ;
if ( GetIdParam( *Iter) == ID_SEL) {
int nId = m_pGDB->GetFirstSelectedObj() ;
while ( nId != GDB_ID_NULL) {
Point3d ptP ;
if ( ! GetPointParam( ToString( nId), frPnt, ptP))
return false ;
vPoints.push_back( ptP) ;
nId = m_pGDB->GetNextSelectedObj() ;
}
}
else {
Point3d ptP ;
if ( ! GetPointParam( *Iter, frPnt, ptP))
return false ;
vPoints.push_back( ptP) ;
}
}
return true ;
@@ -3767,17 +3829,43 @@ GdbExecutor::ExecuteSelect( const string& sCmd2, const STRVECTOR& vsParams)
}
// selezione di tutti gli oggetti di un gruppo
else if ( sCmd2 == "GOBJS") {
// deve essere 1 parametro ( Id)
if ( vsParams.size() != 1)
// 1 o 2 parametri : Id/s [, Filter]
if ( vsParams.size() != 1 && vsParams.size() != 2)
return false ;
// recupero lista Id
INTVECTOR vnNames ;
if ( ! GetNamesParam( vsParams[0], vnNames))
return false ;
// recupero eventuale filtro
int nFilter = 0 ;
if ( vsParams.size() >= 2) {
string sFilter = vsParams[1] ;
ToUpper( sFilter) ;
if ( sFilter == "GR" || sFilter == "GROUP")
nFilter = GDB_TY_GROUP ;
if ( sFilter == "V" || sFilter == "VECTOR")
nFilter = GEO_VECT3D ;
else if ( sFilter == "P" || sFilter == "POINT")
nFilter = GEO_PNT3D ;
else if ( sFilter == "FR" || sFilter == "FRAME")
nFilter = GEO_FRAME3D ;
else if ( sFilter == "CL" || sFilter == "CURVELINE")
nFilter = CRV_LINE ;
else if ( sFilter == "CA" || sFilter == "CURVEARC")
nFilter = CRV_ARC ;
else if ( sFilter == "CB" || sFilter == "CURVEBEZIER")
nFilter = CRV_BEZ ;
else if ( sFilter == "CC" || sFilter == "CURVECOMPO")
nFilter = CRV_COMPO ;
else if ( sFilter == "STM" || sFilter == "SURFTRIMESH")
nFilter = SRF_TRIMESH ;
else if ( sFilter == "TEXT")
nFilter = EXT_TEXT ;
}
// esecuzione selezione di tutti gli oggetti di ogni gruppo
INTVECTOR::iterator Iter ;
for ( Iter = vnNames.begin() ; Iter != vnNames.end() ; ++Iter) {
if ( ! m_pGDB->SelectGroupObjs( *Iter))
if ( ! m_pGDB->SelectGroupObjs( *Iter, nFilter))
return false ;
}
return true ;