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:
+95
-7
@@ -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 ;
|
||||
|
||||
Reference in New Issue
Block a user