EgtInterface :

- aggiunta gestione selezione per percorso.
This commit is contained in:
Dario Sassi
2015-03-17 11:10:43 +00:00
parent 10814a2d04
commit 4a618e287b
3 changed files with 94 additions and 2 deletions
+2 -2
View File
@@ -1054,7 +1054,7 @@ __stdcall EgtCreateCurveArc2PVNEx( int nParentId, const double ptStart[3],
ToString( Vector3d( vtDirS)) + "},{" +
ToString( Vector3d( vtNorm)) + "}," +
RefTypeToString( nRefType) + ")" +
" -- Id=" + ToString( nId) ;
" -- Id=" + ToString( nNewId) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
}
// restituisco l'identificativo della nuova entità
@@ -1400,7 +1400,7 @@ MyCreateCurveCompoByChain( int nParentId, const INTVECTOR& vIds,
int nFirstId = GDB_ID_NULL ;
Point3d ptNearL = GetPointLocal( pGeomDB, ptNear.v, nRefType, frDest) ;
INTVECTOR vId2s ;
while ( chainC.GetChainFromNear( ptNearL, vId2s)) {
while ( chainC.GetChainFromNear( ptNearL, false, vId2s)) {
// creo una curva composita
PtrOwner<ICurveComposite> pCrvCompo( CreateCurveComposite()) ;
if ( IsNull( pCrvCompo))
+74
View File
@@ -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) ;
}
+18
View File
@@ -195,6 +195,23 @@ LuaDeselectLayerObjs( lua_State* L)
return 1 ;
}
//-------------------------------------------------------------------------------
static int
LuaSelectPathObjs( lua_State* L)
{
// 2 parametri : nId, bHaltOnFork
int nId ;
LuaCheckParam( L, 1, nId)
bool bHaltOnFork ;
LuaCheckParam( L, 2, bHaltOnFork)
LuaClearStack( L) ;
// eseguo la selezione
bool bOk = ( EgtSelectPathObjs( nId, bHaltOnFork) != FALSE) ;
// restituisco il risultato
LuaSetReturn( L, bOk) ;
return 1 ;
}
//-------------------------------------------------------------------------------
bool
LuaInstallGdbPartLayer( lua_State* L)
@@ -212,6 +229,7 @@ LuaInstallGdbPartLayer( lua_State* L)
lua_register( L, "EgtDeselectPartObjs", LuaDeselectPartObjs) ;
lua_register( L, "EgtSelectLayerObjs", LuaSelectLayerObjs) ;
lua_register( L, "EgtDeselectLayerObjs", LuaDeselectLayerObjs) ;
lua_register( L, "EgtSelectPathObjs", LuaSelectPathObjs) ;
}
catch ( ...) {
return false ;