EgtGeomKernel 1.5f1 :
- aggiunta entità testo (con font Nfe e di sistema) - in tutte le rotate ora l'angolo è in gradi - aggiunta trasformazione Shear (scorrimento) - aggiunta trsformazione LocToLoc - Set/GetInfo specializzate per i diversi tipi di informazioni - Copy e Relocate con possibilità di indicare l'entità di riferimento rispetto a cui inserire - aggiunte trasformazioni a PolyLine.
This commit is contained in:
+301
-10
@@ -31,6 +31,7 @@
|
||||
#include "/EgtDev/Include/EgkCurveComposite.h"
|
||||
#include "/EgtDev/Include/EgkDistPointCurve.h"
|
||||
#include "/EgtDev/Include/EgkSurfTriMesh.h"
|
||||
#include "/EgtDev/Include/EgkExtText.h"
|
||||
#include "/EgtDev/Include/EgtPointerOwner.h"
|
||||
#include "/EgtDev/Include/EGkStmFromTriangleSoup.h"
|
||||
|
||||
@@ -73,6 +74,7 @@ GdbExecutor::GdbExecutor( void)
|
||||
m_ExecMgr.Insert( "CURVECOMPO", &GdbExecutor::ExecuteCurveCompo) ;
|
||||
m_ExecMgr.Insert( "STM", &GdbExecutor::ExecuteSurfTriMesh) ;
|
||||
m_ExecMgr.Insert( "SURFTRIMESH", &GdbExecutor::ExecuteSurfTriMesh) ;
|
||||
m_ExecMgr.Insert( "TEXT", &GdbExecutor::ExecuteText) ;
|
||||
m_ExecMgr.Insert( "LEV", &GdbExecutor::ExecuteLevel) ;
|
||||
m_ExecMgr.Insert( "LEVEL", &GdbExecutor::ExecuteLevel) ;
|
||||
m_ExecMgr.Insert( "MOD", &GdbExecutor::ExecuteMode) ;
|
||||
@@ -103,6 +105,7 @@ GdbExecutor::GdbExecutor( void)
|
||||
m_ExecMgr.Insert( "SCALE", &GdbExecutor::ExecuteScale) ;
|
||||
m_ExecMgr.Insert( "MIR", &GdbExecutor::ExecuteMirror) ;
|
||||
m_ExecMgr.Insert( "MIRROR", &GdbExecutor::ExecuteMirror) ;
|
||||
m_ExecMgr.Insert( "SHEAR", &GdbExecutor::ExecuteShear) ;
|
||||
m_ExecMgr.Insert( "INVC", &GdbExecutor::ExecuteInvertCurve) ;
|
||||
m_ExecMgr.Insert( "INVERTCURVE", &GdbExecutor::ExecuteInvertCurve) ;
|
||||
m_ExecMgr.Insert( "INVS", &GdbExecutor::ExecuteInvertSurf) ;
|
||||
@@ -1904,6 +1907,186 @@ GdbExecutor::SurfTriMeshDoSewing( const STRVECTOR& vsParams)
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::ExecuteText( const string& sCmd2, const STRVECTOR& vsParams)
|
||||
{
|
||||
// testo nel piano locale
|
||||
if ( sCmd2 == "XY" || sCmd2 == "PLANEXY") {
|
||||
if ( vsParams.size() == 6)
|
||||
return TextSimple( vsParams) ;
|
||||
else
|
||||
return TextComplete( vsParams) ;
|
||||
}
|
||||
// flip del testo
|
||||
else if ( sCmd2 == "FLIP") {
|
||||
return TextFlip( vsParams) ;
|
||||
}
|
||||
// auto-mirror del testo
|
||||
else if ( sCmd2 == "MIR") {
|
||||
return TextMir( vsParams) ;
|
||||
}
|
||||
// estrazione dei contorni
|
||||
else if ( sCmd2 == "OUTLINE")
|
||||
return TextOutline( vsParams) ;
|
||||
else
|
||||
return false ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::TextSimple( const STRVECTOR& vsParams)
|
||||
{
|
||||
// parametri : Id, ParentId, Text, Point, AngDeg, H
|
||||
if ( vsParams.size() != 6)
|
||||
return false ;
|
||||
// recupero il riferimento in cui è immerso
|
||||
Frame3d frRef ;
|
||||
if ( ! m_pGDB->GetGroupGlobFrame( GetIdParam( vsParams[1]), frRef))
|
||||
return false ;
|
||||
// recupero il punto di inserimento
|
||||
Point3d ptP ;
|
||||
if ( ! GetPointParam( vsParams[3], frRef, ptP))
|
||||
return false ;
|
||||
// recupero l'angolo di rotazione
|
||||
double dAngRotDeg ;
|
||||
if ( ! FromString( vsParams[4], dAngRotDeg))
|
||||
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( vsParams[2], ptP, dAngRotDeg, dH))
|
||||
return false ;
|
||||
// inserisco il testo nel DB
|
||||
return AddGeoObj( vsParams[0], vsParams[1], Release( pTXT)) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::TextComplete( const STRVECTOR& vsParams)
|
||||
{
|
||||
// parametri : Id, ParentId, Text, Point, AngDeg, Font, W, Italic, H, Rat, AddAdv
|
||||
if ( vsParams.size() != 11)
|
||||
return false ;
|
||||
// recupero il riferimento in cui è immerso
|
||||
Frame3d frRef ;
|
||||
if ( ! m_pGDB->GetGroupGlobFrame( GetIdParam( vsParams[1]), frRef))
|
||||
return false ;
|
||||
// recupero il punto di inserimento
|
||||
Point3d ptP ;
|
||||
if ( ! GetPointParam( vsParams[3], frRef, ptP))
|
||||
return false ;
|
||||
// recupero l'angolo di rotazione
|
||||
double dAngRotDeg ;
|
||||
if ( ! FromString( vsParams[4], dAngRotDeg))
|
||||
return false ;
|
||||
// font
|
||||
// recupero il peso (larghezza del filamento)
|
||||
int nW ;
|
||||
if ( ! FromString( vsParams[6], nW))
|
||||
return false ;
|
||||
// recupero il flag di italico
|
||||
bool bItl = ( vsParams[7] == "I" || vsParams[7] == "i") ;
|
||||
// recupero l'altezza del carattere
|
||||
double dH ;
|
||||
if ( ! FromString( vsParams[8], dH))
|
||||
return false ;
|
||||
// rapporto larghezza/altezza del carattere
|
||||
double dRat ;
|
||||
if ( ! FromString( vsParams[9], dRat))
|
||||
return false ;
|
||||
// avanzamento aggiuntivo
|
||||
double dAddAdv ;
|
||||
if ( ! FromString( vsParams[10], dAddAdv))
|
||||
return false ;
|
||||
// creo il testo
|
||||
PtrOwner<IExtText> pTXT( CreateExtText()) ;
|
||||
if ( ! IsValid( pTXT))
|
||||
return false ;
|
||||
// lo riempio
|
||||
if ( ! pTXT->Set( vsParams[2], ptP, dAngRotDeg, vsParams[5], nW, bItl, dH, dRat, dAddAdv))
|
||||
return false ;
|
||||
// inserisco il testo nel DB
|
||||
return AddGeoObj( vsParams[0], vsParams[1], Release( pTXT)) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::TextFlip( const STRVECTOR& vsParams)
|
||||
{
|
||||
// 1 parametro : Id
|
||||
if ( vsParams.size() != 1)
|
||||
return false ;
|
||||
// recupero il testo
|
||||
IExtText* pTXT = GetExtText( m_pGDB->GetGeoObj( GetIdParam( vsParams[0]))) ;
|
||||
if ( pTXT == nullptr)
|
||||
return false ;
|
||||
// eseguo l'operazione
|
||||
return pTXT->Flip() ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::TextMir( const STRVECTOR& vsParams)
|
||||
{
|
||||
// 1 o 2 parametri : Id [, LorH]
|
||||
if ( vsParams.size() != 1 && vsParams.size() != 2)
|
||||
return false ;
|
||||
// calcolo il flag
|
||||
bool bOnL = true ;
|
||||
if ( vsParams.size() == 2)
|
||||
bOnL = ( vsParams[1] != "H" && vsParams[1] != "h") ;
|
||||
// recupero il testo
|
||||
IExtText* pTXT = GetExtText( m_pGDB->GetGeoObj( GetIdParam( vsParams[0]))) ;
|
||||
if ( pTXT == nullptr)
|
||||
return false ;
|
||||
// eseguo l'operazione
|
||||
return pTXT->Mir( bOnL) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::TextOutline( const STRVECTOR& vsParams)
|
||||
{
|
||||
// 2 parametri : Id , IdDest
|
||||
if ( vsParams.size() != 2)
|
||||
return false ;
|
||||
// recupero il testo
|
||||
int nIdTXT = GetIdParam( vsParams[0]) ;
|
||||
IExtText* pTXT = GetExtText( m_pGDB->GetGeoObj( nIdTXT)) ;
|
||||
if ( pTXT == nullptr)
|
||||
return false ;
|
||||
// recupero il suo outline
|
||||
ICURVEPLIST lstPCRV ;
|
||||
pTXT->GetOutline( lstPCRV) ;
|
||||
// recupero il riferimento del testo
|
||||
Frame3d frTXT ;
|
||||
if ( ! m_pGDB->GetGlobFrame( nIdTXT, frTXT))
|
||||
return false ;
|
||||
// recupero il riferimento del gruppo destinazione
|
||||
int nIdDest = GetIdParam( vsParams[1]) ;
|
||||
Frame3d frDest ;
|
||||
if ( ! m_pGDB->GetGroupGlobFrame( nIdDest, frDest))
|
||||
return false ;
|
||||
// inserisco le curve nel gruppo destinazione dopo aver sistemato il cambio di riferimento
|
||||
bool bOk = true ;
|
||||
ICURVEPLIST::iterator iIter ;
|
||||
for ( iIter = lstPCRV.begin() ; iIter != lstPCRV.end() ; ++ iIter) {
|
||||
(*iIter)->LocToLoc( frTXT, frDest) ;
|
||||
if ( ! m_pGDB->AddGeoObj( GDB_ID_NULL, nIdDest, (*iIter))) {
|
||||
delete (*iIter) ;
|
||||
bOk = false ;
|
||||
}
|
||||
}
|
||||
return bOk ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::AddGeoObj( const string& sId, const string& sIdParent, IGeoObj* pGeoObj)
|
||||
@@ -2257,8 +2440,29 @@ GdbExecutor::GetPointParam( const string& sParam, const Frame3d& frPnt, Point3d&
|
||||
case 'O' : // origine
|
||||
ptP = pGF->GetFrame().Orig() ;
|
||||
return ptP.LocToLoc( frEnt, frPnt) ;
|
||||
default :
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
// se testo
|
||||
else if ( pGObj->GetType() == EXT_TEXT) {
|
||||
// recupero il testo
|
||||
const IExtText* pTxt = GetExtText( pGObj) ;
|
||||
switch ( cType) {
|
||||
case 'S' : // punto iniziale
|
||||
if ( ! pTxt->GetStartPoint( ptP))
|
||||
return false ;
|
||||
return ptP.LocToLoc( frEnt, frPnt) ;
|
||||
case 'E' : // punto finale
|
||||
if ( ! pTxt->GetEndPoint( ptP))
|
||||
return false ;
|
||||
return ptP.LocToLoc( frEnt, frPnt) ;
|
||||
case 'M' : // punto medio
|
||||
if ( ! pTxt->GetMidPoint( ptP))
|
||||
return false ;
|
||||
return ptP.LocToLoc( frEnt, frPnt) ;
|
||||
case 'C' : // centro
|
||||
if ( ! pTxt->GetCenterPoint( ptP))
|
||||
return false ;
|
||||
return ptP.LocToLoc( frEnt, frPnt) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3109,18 +3313,28 @@ GdbExecutor::ExecuteMatLibrary( const string& sCmd2, const STRVECTOR& vsParams)
|
||||
bool
|
||||
GdbExecutor::ExecuteCopy( const string& sCmd2, const STRVECTOR& vsParams)
|
||||
{
|
||||
// 3 parametri ( IdSou, IdDest, ParentIdDest)
|
||||
if ( vsParams.size() != 3)
|
||||
// 3 o 4 parametri : IdSou, IdDest, RefIdDest [, SonBeforeAfter]
|
||||
if ( vsParams.size() != 3 && vsParams.size() != 4)
|
||||
return false ;
|
||||
// recupero tipo di inserimento della copia
|
||||
int nSonBeforeAfter = GDB_SON ;
|
||||
if ( vsParams.size() == 4) {
|
||||
string sFlag = vsParams[3] ;
|
||||
ToUpper( sFlag) ;
|
||||
if ( sFlag == "BEFORE")
|
||||
nSonBeforeAfter = GDB_BEFORE ;
|
||||
else if ( sFlag == "AFTER")
|
||||
nSonBeforeAfter = GDB_AFTER ;
|
||||
}
|
||||
// recupero flag per globale
|
||||
bool bGlob = ( sCmd2 == "GLOB" || sCmd2 == "G") ;
|
||||
// esecuzione copia
|
||||
int nIdDest = GetIdParam( vsParams[1], true) ;
|
||||
int nIdNew ;
|
||||
if ( bGlob)
|
||||
nIdNew = m_pGDB->CopyGlob( GetIdParam( vsParams[0]), nIdDest, GetIdParam( vsParams[2])) ;
|
||||
nIdNew = m_pGDB->CopyGlob( GetIdParam( vsParams[0]), nIdDest, GetIdParam( vsParams[2]), nSonBeforeAfter) ;
|
||||
else
|
||||
nIdNew = m_pGDB->Copy( GetIdParam( vsParams[0]), nIdDest, GetIdParam( vsParams[2])) ;
|
||||
nIdNew = m_pGDB->Copy( GetIdParam( vsParams[0]), nIdDest, GetIdParam( vsParams[2]), nSonBeforeAfter) ;
|
||||
// se IdDest da calcolare, può essere una variabili a cui cambiare il valore
|
||||
if ( nIdDest == GDB_ID_NULL)
|
||||
m_pParser->SetVariable( vsParams[1], nIdNew) ;
|
||||
@@ -3132,24 +3346,34 @@ GdbExecutor::ExecuteCopy( const string& sCmd2, const STRVECTOR& vsParams)
|
||||
bool
|
||||
GdbExecutor::ExecuteRelocate( const string& sCmd2, const STRVECTOR& vsParams)
|
||||
{
|
||||
// 2 parametri ( Id, NewParentId)
|
||||
if ( vsParams.size() != 2)
|
||||
// 2 o 3 parametri : Id, NewRefId [, SonBeforeAfter]
|
||||
if ( vsParams.size() != 2 && vsParams.size() != 3)
|
||||
return false ;
|
||||
// recupero lista nomi
|
||||
INTVECTOR vnNames ;
|
||||
if ( ! GetNamesParam( vsParams[0], vnNames))
|
||||
return false ;
|
||||
// recupero tipo di inserimento
|
||||
int nSonBeforeAfter = GDB_SON ;
|
||||
if ( vsParams.size() == 3) {
|
||||
string sFlag = vsParams[2] ;
|
||||
ToUpper( sFlag) ;
|
||||
if ( sFlag == "BEFORE")
|
||||
nSonBeforeAfter = GDB_BEFORE ;
|
||||
else if ( sFlag == "AFTER")
|
||||
nSonBeforeAfter = GDB_AFTER ;
|
||||
}
|
||||
// recupero flag per globale
|
||||
bool bGlob = ( sCmd2 == "GLOB" || sCmd2 == "G") ;
|
||||
// esecuzione rilocazioni
|
||||
INTVECTOR::iterator Iter ;
|
||||
for ( Iter = vnNames.begin() ; Iter != vnNames.end() ; ++Iter) {
|
||||
if ( bGlob) {
|
||||
if ( ! m_pGDB->RelocateGlob( *Iter, GetIdParam( vsParams[1])))
|
||||
if ( ! m_pGDB->RelocateGlob( *Iter, GetIdParam( vsParams[1]), nSonBeforeAfter))
|
||||
return false ;
|
||||
}
|
||||
else {
|
||||
if ( ! m_pGDB->Relocate( *Iter, GetIdParam( vsParams[1])))
|
||||
if ( ! m_pGDB->Relocate( *Iter, GetIdParam( vsParams[1]), nSonBeforeAfter))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
@@ -3426,6 +3650,73 @@ GdbExecutor::ExecuteMirror( const string& sCmd2, const STRVECTOR& vsParams)
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::ExecuteShear( const string& sCmd2, const STRVECTOR& vsParams)
|
||||
{
|
||||
// 5 parametri ( Nome, Punto, VettNorm, VettDir, Coeff)
|
||||
if ( vsParams.size() != 5)
|
||||
return false ;
|
||||
// recupero lista nomi
|
||||
INTVECTOR vnNames ;
|
||||
if ( ! GetNamesParam( vsParams[0], vnNames))
|
||||
return false ;
|
||||
// recupero flag e riferimento per globale/gruppo/locale
|
||||
enum { MIR_LOC = 0, MIR_GLOB = 1, MIR_GROUP = 2} ;
|
||||
int nMirType ;
|
||||
Frame3d frRef ;
|
||||
if ( sCmd2 == "GLOB" || sCmd2 == "G") {
|
||||
nMirType = MIR_GLOB ;
|
||||
frRef = GLOB_FRM ;
|
||||
}
|
||||
else if ( sCmd2 == "GROUP" || sCmd2 == "GR") {
|
||||
nMirType = MIR_GROUP ;
|
||||
if ( ! m_pGDB->GetGroupGlobFrame( vnNames[0], frRef))
|
||||
return false ;
|
||||
}
|
||||
else {
|
||||
nMirType = MIR_LOC ;
|
||||
if ( ! m_pGDB->GetGlobFrame( vnNames[0], frRef))
|
||||
return false ;
|
||||
}
|
||||
// recupero il punto
|
||||
Point3d ptPC ;
|
||||
if ( ! GetPointParam( vsParams[1], frRef, ptPC))
|
||||
return false ;
|
||||
// recupero il versore normale
|
||||
Vector3d vtNorm ;
|
||||
if ( ! GetVectorParam( vsParams[2], frRef, vtNorm))
|
||||
return false ;
|
||||
// recupero il versore direzione
|
||||
Vector3d vtDir ;
|
||||
if ( ! GetVectorParam( vsParams[3], frRef, vtDir))
|
||||
return false ;
|
||||
// recupero il coefficiente
|
||||
double dCoeff ;
|
||||
if ( ! FromString( vsParams[4], dCoeff))
|
||||
return false ;
|
||||
// esecuzione scorrimenti
|
||||
INTVECTOR::iterator Iter ;
|
||||
for ( Iter = vnNames.begin() ; Iter != vnNames.end() ; ++Iter) {
|
||||
switch ( nMirType) {
|
||||
case MIR_LOC :
|
||||
if ( ! m_pGDB->Shear( *Iter, ptPC, vtNorm, vtDir, dCoeff))
|
||||
return false ;
|
||||
break ;
|
||||
case MIR_GLOB :
|
||||
if ( ! m_pGDB->ShearGlob( *Iter, ptPC, vtNorm, vtDir, dCoeff))
|
||||
return false ;
|
||||
break ;
|
||||
case MIR_GROUP :
|
||||
if ( ! m_pGDB->ShearGroup( *Iter, ptPC, vtNorm, vtDir, dCoeff))
|
||||
return false ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::ExecuteInvertCurve( const string& sCmd2, const STRVECTOR& vsParams)
|
||||
|
||||
Reference in New Issue
Block a user