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:
+135
-5
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user