EgtGeomKernel 1.5f7 :

- aggiunta intersezione tra curve composte (e gestione loro topologia)
- corretto salvataggio entità testo
- aggiunto EPS_SMALL a test su box
- aggiunte funzioni di verifica validità e tipo parametro di curve
- aggiunto comando TSC OUTTEXTICCI.
This commit is contained in:
Dario Sassi
2014-07-01 12:30:16 +00:00
parent f119a5a1be
commit 15f819fe31
30 changed files with 1410 additions and 385 deletions
+135 -5
View File
@@ -19,7 +19,7 @@
#include "GeoConst.h"
#include "GeomDB.h"
#include "DllMain.h"
#include "/EgtDev/Include/EgnStringUtils.h"
#include "/EgtDev/Include/EgkStringUtils3d.h"
#include "/EgtDev/Include/EgnStringConverter.h"
#include "/EgtDev/Include/EgnCmdParser.h"
#include "/EgtDev/Include/EgkGeoPoint3d.h"
@@ -127,6 +127,7 @@ GdbExecutor::GdbExecutor( void)
m_ExecMgr.Insert( "NEW", &GdbExecutor::ExecuteNew) ;
m_ExecMgr.Insert( "LOAD", &GdbExecutor::ExecuteLoad) ;
m_ExecMgr.Insert( "SAVE", &GdbExecutor::ExecuteSave) ;
m_ExecMgr.Insert( "OUTTEXTICCI", &GdbExecutor::ExecuteOutTextIcci) ;
m_ExecMgr.Insert( "OUTTSC", &GdbExecutor::ExecuteOutTsc) ;
}
@@ -2438,6 +2439,10 @@ GdbExecutor::TextSimple( const STRVECTOR& vsParams)
Frame3d frRef ;
if ( ! m_pGDB->GetGroupGlobFrame( GetIdParam( vsParams[1]), frRef))
return false ;
// recupero il testo
string sText ;
if ( ! GetTextParam( vsParams[2], sText))
return false ;
// recupero il punto di inserimento
Point3d ptP ;
if ( ! GetPointParam( vsParams[3], frRef, ptP))
@@ -2455,7 +2460,7 @@ GdbExecutor::TextSimple( const STRVECTOR& vsParams)
if ( ! IsValid( pTXT))
return false ;
// lo riempio
if ( ! pTXT->Set( vsParams[2], ptP, dAngRotDeg, dH))
if ( ! pTXT->Set( sText, ptP, dAngRotDeg, dH))
return false ;
// inserisco il testo nel DB
return AddGeoObj( vsParams[0], vsParams[1], Release( pTXT)) ;
@@ -2472,6 +2477,10 @@ GdbExecutor::TextComplete( const STRVECTOR& vsParams)
Frame3d frRef ;
if ( ! m_pGDB->GetGroupGlobFrame( GetIdParam( vsParams[1]), frRef))
return false ;
// recupero il testo
string sText ;
if ( ! GetTextParam( vsParams[2], sText))
return false ;
// recupero il punto di inserimento
Point3d ptP ;
if ( ! GetPointParam( vsParams[3], frRef, ptP))
@@ -2526,7 +2535,7 @@ GdbExecutor::TextComplete( const STRVECTOR& vsParams)
if ( ! IsValid( pTXT))
return false ;
// lo riempio
if ( ! pTXT->Set( vsParams[2], ptP, dAngRotDeg, vsParams[5], nW, bItl, dH, dRat, dAddAdv, nInsPos))
if ( ! pTXT->Set( sText, ptP, dAngRotDeg, vsParams[5], nW, bItl, dH, dRat, dAddAdv, nInsPos))
return false ;
// inserisco il testo nel DB
return AddGeoObj( vsParams[0], vsParams[1], Release( pTXT)) ;
@@ -2539,12 +2548,16 @@ GdbExecutor::TextModifyText( const STRVECTOR& vsParams)
// 2 parametri : Id, NewText
if ( vsParams.size() != 2)
return false ;
// recupero il testo
string sText ;
if ( ! GetTextParam( vsParams[1], sText))
return false ;
// recupero il testo
IExtText* pTXT = GetExtText( m_pGDB->GetGeoObj( GetIdParam( vsParams[0]))) ;
if ( pTXT == nullptr)
return false ;
// eseguo l'operazione
return pTXT->ModifyText( vsParams[1]) ;
return pTXT->ModifyText( sText) ;
}
//----------------------------------------------------------------------------
@@ -2554,12 +2567,16 @@ GdbExecutor::TextChangeFont( const STRVECTOR& vsParams)
// 2 parametri : Id, NewFont
if ( vsParams.size() != 2)
return false ;
// recupero il nome del font
string sFont ;
if ( ! GetTextParam( vsParams[1], sFont))
return false ;
// recupero il testo
IExtText* pTXT = GetExtText( m_pGDB->GetGeoObj( GetIdParam( vsParams[0]))) ;
if ( pTXT == nullptr)
return false ;
// eseguo l'operazione
return pTXT->ChangeFont( vsParams[1]) ;
return pTXT->ChangeFont( sFont) ;
}
//----------------------------------------------------------------------------
@@ -3491,6 +3508,13 @@ GdbExecutor::GetColorParam( const string& sParam, bool& bByParent, Color& cCol)
return false ;
}
//----------------------------------------------------------------------------
bool
GdbExecutor::GetTextParam( const string& sParam, string& sText)
{
return m_pParser->GetTextParam( sParam, sText) ;
}
//----------------------------------------------------------------------------
bool
GdbExecutor::ExecuteLevel( const string& sCmd2, const STRVECTOR& vsParams)
@@ -4491,6 +4515,112 @@ GdbExecutor::ExecuteSave( const string& sCmd2, const STRVECTOR& vsParams)
return m_pGDB->Save( sFile, nFlag) ;
}
//----------------------------------------------------------------------------
bool
GdbExecutor::ExecuteOutTextIcci( const string& sCmd2, const STRVECTOR& vsParams)
{
// devono essere 6 parametri : IdText, IdGroup, IdEnt1, IdEnt2, ptText, hText
if ( vsParams.size() != 6)
return false ;
// recupero l'indice delle entità
int nIdEnt1 = GetIdParam( vsParams[2]) ;
int nIdEnt2 = GetIdParam( vsParams[3]) ;
// verifico siano due curve
const ICurve* pCrv1 = GetCurve( m_pGDB->GetGeoObj( nIdEnt1)) ;
if ( pCrv1 == nullptr)
return false ;
const ICurve* pCrv2 = GetCurve( m_pGDB->GetGeoObj( nIdEnt2)) ;
if ( pCrv2 == nullptr)
return false ;
// recupero i riferimenti in cui sono immerse
Frame3d frEnt1 ;
if ( ! m_pGDB->GetGlobFrame( nIdEnt1, frEnt1))
return false ;
Frame3d frEnt2 ;
if ( ! m_pGDB->GetGlobFrame( nIdEnt2, frEnt2))
return false ;
// se i riferimenti sono diversi, porto la seconda entità nel riferimento della prima
PtrOwner<ICurve> crvTrans( nullptr) ;
if ( ! AreSameFrame( frEnt1, frEnt2)) {
crvTrans.Set( pCrv2->Clone()) ;
if ( ! ::IsValid( crvTrans))
return false ;
crvTrans->LocToLoc( frEnt2, frEnt1) ;
pCrv2 = ::Get( crvTrans) ;
}
// calcolo le intersezioni tra le due curve
IntersCurveCurve intCC( *pCrv1, *pCrv2, true) ;
// preparo il testo con i risultati
string sText = "Inters CrvA=" + ToString( nIdEnt1) + " CrvB=" + ToString( nIdEnt2) ;
sText += "<br/>Nbr=" + ToString( intCC.GetNumInters()) ;
if ( intCC.GetOverlaps())
sText += " Overlaps" ;
for ( int i = 0 ; i < intCC.GetNumInters() ; ++ i) {
IntCrvCrvInfo aInfo ;
intCC.GetIntCrvCrvInfo( i, aInfo) ;
int nMax = ( aInfo.bOverlap ? 2 : 1) ;
for ( int j = 0 ; j < nMax ; ++ j) {
if ( j == 0)
sText += "<br/>" + ToString( i + 1) + "A" ;
else
sText += "<br/> " ;
sText += " U=" + ToString( aInfo.IciA[j].dU,7) + " P=(" + ToString( aInfo.IciA[j].ptI,4) + ")" ;
switch( aInfo.IciA[j].nPrevTy) {
case ICCT_NULL : sText += " ??-" ; break ;
case ICCT_IN : sText += " IN-" ; break ;
case ICCT_OUT : sText += " OUT-" ; break ;
case ICCT_ON : sText += " ON-" ; break ;
}
switch( aInfo.IciA[j].nNextTy) {
case ICCT_NULL : sText += "??" ; break ;
case ICCT_IN : sText += "IN" ; break ;
case ICCT_OUT : sText += "OUT" ; break ;
case ICCT_ON : sText += "ON" ; break ;
}
}
for ( int j = 0 ; j < nMax ; ++ j) {
if ( j == 0)
sText += "<br/>" + ToString( i + 1) + "B" ;
else
sText += string( "<br/>") + ( aInfo.bCBOverEq ? " + " : " - ") ;
sText += " U=" + ToString( aInfo.IciB[j].dU,7) + " P=(" + ToString( aInfo.IciB[j].ptI,4) + ")" ;
switch( aInfo.IciB[j].nPrevTy) {
case ICCT_NULL : sText += " ??-" ; break ;
case ICCT_IN : sText += " IN-" ; break ;
case ICCT_OUT : sText += " OUT-" ; break ;
case ICCT_ON : sText += " ON-" ; break ;
}
switch( aInfo.IciB[j].nNextTy) {
case ICCT_NULL : sText += "??" ; break ;
case ICCT_IN : sText += "IN" ; break ;
case ICCT_OUT : sText += "OUT" ; break ;
case ICCT_ON : sText += "ON" ; break ;
}
}
}
// recupero il riferimento in cui è immerso il testo
Frame3d frText ;
if ( ! m_pGDB->GetGroupGlobFrame( GetIdParam( vsParams[1]), frText))
return false ;
// recupero il punto di inserimento
Point3d ptText ;
if ( ! GetPointParam( vsParams[4], frText, ptText))
return false ;
// recupero l'altezza del carattere
double dH ;
if ( ! FromString( vsParams[5], dH))
return false ;
// creo il testo
PtrOwner<IExtText> pTXT( CreateExtText()) ;
if ( ! IsValid( pTXT))
return false ;
// lo riempio
if ( ! pTXT->Set( sText, ptText, 0, dH))
return false ;
// inserisco il testo nel DB
return AddGeoObj( vsParams[0], vsParams[1], Release( pTXT)) ;
}
//----------------------------------------------------------------------------
bool
GdbExecutor::ExecuteOutTsc( const string& sCmd2, const STRVECTOR& vsParams)