EgtInterface :
- aggiunta gestione selezione per percorso.
This commit is contained in:
@@ -16,6 +16,8 @@
|
||||
#include "API.h"
|
||||
#include "API_Macro.h"
|
||||
#include "/EgtDev/Include/EInAPI.h"
|
||||
#include "/EgtDev/Include/EgkCurve.h"
|
||||
#include "/EgtDev/Include/EgkChainCurves.h"
|
||||
#include "/EgtDev/Include/EGkStringUtils3d.h"
|
||||
|
||||
using namespace std ;
|
||||
@@ -321,3 +323,75 @@ __stdcall EgtDeselectLayerObjs( int nLayerId)
|
||||
// restituisco risultato
|
||||
return ( bOk ? TRUE : FALSE) ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL
|
||||
__stdcall EgtSelectPathObjs( int nId, BOOL bHaltOnFork)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
||||
bool bOk = true ;
|
||||
// verifico appartenga ad un layer
|
||||
int nIdLayer = pGeomDB->GetParentId( nId) ;
|
||||
int nIdPart = pGeomDB->GetParentId( nIdLayer) ;
|
||||
int nIdRoot = pGeomDB->GetParentId( nIdPart) ;
|
||||
bOk = bOk && ( nIdLayer != GDB_ID_NULL && nIdPart != GDB_ID_NULL && nIdRoot == GDB_ID_ROOT) ;
|
||||
// seleziono percorso a partire da entità indicata usando tutte le curve del pezzo
|
||||
const int CHAIN_SIZE = 1000 ;
|
||||
const double CHAIN_TOLER = 10 * EPS_SMALL ;
|
||||
Point3d ptNear ;
|
||||
ChainCurves chainC ;
|
||||
bOk = bOk && chainC.Init( true, CHAIN_TOLER, CHAIN_SIZE) ;
|
||||
// ciclo sui layer del pezzo
|
||||
for ( int nLayId = pGeomDB->GetFirstGroupInGroup( nIdPart) ;
|
||||
nLayId != GDB_ID_NULL ;
|
||||
nLayId = pGeomDB->GetNextGroup( nLayId)) {
|
||||
// ciclo sulle entità del layer
|
||||
for ( int nEntId = pGeomDB->GetFirstInGroup( nLayId) ;
|
||||
nEntId != GDB_ID_NULL ;
|
||||
nEntId = pGeomDB->GetNext( nEntId)) {
|
||||
// non deve essere nascosta
|
||||
int nEntStat ;
|
||||
pGeomDB->GetCalcStatus( nEntId, nEntStat) ;
|
||||
if ( nEntStat == GDB_ST_OFF)
|
||||
continue ;
|
||||
// recupero la curva e il suo riferimento
|
||||
ICurve* pCrv = GetCurve( pGeomDB->GetGeoObj( nEntId)) ;
|
||||
if ( pCrv == nullptr)
|
||||
continue ;
|
||||
Frame3d frCrv ;
|
||||
if ( ! pGeomDB->GetGlobFrame( nEntId, frCrv))
|
||||
continue ;
|
||||
// recupero i dati della curva necessari al concatenamento e li assegno
|
||||
Point3d ptStart, ptEnd ;
|
||||
Vector3d vtStart, vtEnd ;
|
||||
if ( ! pCrv->GetStartPoint( ptStart) || ! pCrv->GetStartDir( vtStart) ||
|
||||
! pCrv->GetEndPoint( ptEnd) || ! pCrv->GetEndDir( vtEnd))
|
||||
return GDB_ID_NULL ;
|
||||
ptStart.ToGlob( frCrv) ;
|
||||
vtStart.ToGlob( frCrv) ;
|
||||
ptEnd.ToGlob( frCrv) ;
|
||||
vtEnd.ToGlob( frCrv) ;
|
||||
if ( nEntId == nId)
|
||||
ptNear = ptStart + vtStart ;
|
||||
if ( ! chainC.AddCurve( nEntId, ptStart, vtStart, ptEnd, vtEnd))
|
||||
continue ;
|
||||
}
|
||||
}
|
||||
// recupero il primo percorso concatenato
|
||||
int nFirstId = GDB_ID_NULL ;
|
||||
INTVECTOR vId2s ;
|
||||
bOk = bOk && chainC.GetChainFromNear( ptNear, ( bHaltOnFork != FALSE), vId2s) ;
|
||||
for ( size_t i = 0 ; i < vId2s.size() ; ++i) {
|
||||
pGeomDB->SetStatus( abs( vId2s[i]), GDB_ST_SEL) ;
|
||||
}
|
||||
// se richiesto, salvo il comando Lua equivalente
|
||||
if ( IsCmdLog()) {
|
||||
string sLua = "EgtSelectPathObjs(" + ToString( nId) + "," +
|
||||
( bHaltOnFork ? "true" : "false") + ")" +
|
||||
" -- Ok=" + ToString( bOk) ;
|
||||
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
||||
}
|
||||
// restituisco risultato
|
||||
return ( bOk ? TRUE : FALSE) ;
|
||||
}
|
||||
Reference in New Issue
Block a user