EgtExecutor 1.9g1 :

- aggiunta gestione import punti in Exe e LUA
- corretta gestione regione sotto con lati inclinati interni di pezzi piatti (flatParts)
- aggiunta funzione Exe e Lua CAvGetToolOutline per avere profilo di utensile in uso nella CollisionAvoidance.
This commit is contained in:
Dario Sassi
2018-07-05 10:28:52 +00:00
parent aaeeab4d83
commit be54bcf382
9 changed files with 326 additions and 147 deletions
+19 -3
View File
@@ -1,13 +1,13 @@
//----------------------------------------------------------------------------
// EgalTech 2015-2015
// EgalTech 2015-2018
//----------------------------------------------------------------------------
// File : DllExchange.cpp Data : 27.03.15 Versione : 1.6c9
// File : DllExchange.cpp Data : 03.07.18 Versione : 1.9g1
// Contenuto : Funzioni di gestione della libreria opzionale EgtExchange.
//
//
//
// Modifiche : 27.03.15 DS Creazione modulo.
//
// 03.07.18 DS Aggiunto ImportPnt.
//
//----------------------------------------------------------------------------
@@ -40,6 +40,7 @@ static const char* EEX_CREATEIMPORTBTL = "CreateImportBtl" ;
static const char* EEX_CREATEIMPORTCNC = "CreateImportCnc" ;
static const char* EEX_CREATEIMPORTCSF = "CreateImportCsf" ;
static const char* EEX_CREATEIMPORTDXF = "CreateImportDxf" ;
static const char* EEX_CREATEIMPORTPNT = "CreateImportPnt" ;
static const char* EEX_CREATEIMPORTSTL = "CreateImportStl" ;
static const char* EEX_CREATEEXPORTDXF = "CreateExportDxf" ;
static const char* EEX_CREATEEXPORTSTL = "CreateExportStl" ;
@@ -197,6 +198,21 @@ MyCreateImportDxf( void)
return pFun() ;
}
//-----------------------------------------------------------------------------
IImportPnt*
MyCreateImportPnt( void)
{
// verifico caricamento libreria EgtExchange
if ( s_hEEx == nullptr)
return nullptr ;
// recupero funzione creazione oggetto
typedef IImportPnt* (* PF_CreateImportPnt) ( void) ;
PF_CreateImportPnt pFun = (PF_CreateImportPnt)GetProcAddress( s_hEEx, EEX_CREATEIMPORTPNT) ;
if ( pFun == nullptr)
return nullptr ;
return pFun() ;
}
//-----------------------------------------------------------------------------
IImportStl*
MyCreateImportStl( void)
+4 -2
View File
@@ -1,7 +1,7 @@
//----------------------------------------------------------------------------
// EgalTech 2015-2015
// EgalTech 2015-2018
//----------------------------------------------------------------------------
// File : DllGraphics.h Data : 27.03.15 Versione : 1.6c9
// File : DllGraphics.h Data : 03.07.18 Versione : 1.9g1
// Contenuto : Dichiarazioni funzioni per libreria opzionale EgtGraphics.
//
//
@@ -20,6 +20,7 @@ class IImportBtl ;
class IImportCnc ;
class IImportCsf ;
class IImportDxf ;
class IImportPnt ;
class IImportStl ;
class IExportDxf ;
class IExportStl ;
@@ -36,6 +37,7 @@ IImportBtl* MyCreateImportBtl( void) ;
IImportCnc* MyCreateImportCnc( void) ;
IImportCsf* MyCreateImportCsf( void) ;
IImportDxf* MyCreateImportDxf( void) ;
IImportPnt* MyCreateImportPnt( void) ;
IImportStl* MyCreateImportStl( void) ;
IExportDxf* MyCreateExportDxf( void) ;
IExportStl* MyCreateExportStl( void) ;
+23
View File
@@ -66,6 +66,29 @@ ExeCAvSetGenTool( int nToolSectId)
return s_pCAvTlStm->SetGenTool( pCC) ;
}
//----------------------------------------------------------------------------
int
ExeCAvGetToolOutline( int nDestGrpId)
{
if ( IsNull( s_pCAvTlStm))
return GDB_ID_NULL ;
// verifico DB geometrico
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
// recupero outline dell'utensile
const ICurveComposite* pCC = s_pCAvTlStm->GetToolOutline() ;
if ( pCC == nullptr || ! pCC->IsValid())
return GDB_ID_NULL ;
// ne faccio una copia
PtrOwner<ICurveComposite> pCopy( pCC->Clone()) ;
if ( IsNull( pCopy))
return GDB_ID_NULL ;
// inserisco la copia nel DB geometrico
int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, Release( pCopy)) ;
ExeSetModified() ;
return nId ;
}
//----------------------------------------------------------------------------
double
ExeCAvToolPosStm( const Point3d& ptP, const Vector3d& vtAx, int nSurfTmId, const Vector3d& vtMove, int nRefType)
+4 -2
View File
@@ -30,10 +30,12 @@ const std::string CRV_ORIG = "ORIG" ;
const std::string NST_PARTREG_LAYER = "Region" ;
const std::string NST_PARTUPREG_LAYER = "UpReg" ;
const std::string NST_PARTDOWNREG_LAYER = "DwnReg" ;
const std::string NST_EXT_LAYER = "OutLoop" ;
const std::string NST_EXT_ORIG_LAYER = "OutLoop.orig" ;
const std::string NST_OUT_LAYER = "OutLoop" ;
const std::string NST_OUT_ORIG_LAYER = "OutLoop.orig" ;
const std::string NST_IN_LAYER = "InLoop" ;
const std::string NST_IN_ORIG_LAYER = "InLoop.orig" ;
const std::string NST_ON_LAYER = "OnPath" ;
const std::string NST_KEY_COPY = "Copy" ;
const std::string NST_KEY_SIDEANG = "SideAng" ;
const std::string NST_KEY_OFFSET = "Offset" ;
const std::string NST_KEY_DEPTH = "Depth" ;
+81 -48
View File
@@ -26,6 +26,7 @@
#include "/EgtDev/Include/EExImportBtl.h"
#include "/EgtDev/Include/EExExportStl.h"
#include "/EgtDev/Include/EExExportDxf.h"
#include "/EgtDev/Include/EExImportPnt.h"
#include "/EgtDev/Include/EGnStringUtils.h"
#include "/EgtDev/Include/EgtStringConverter.h"
#include "/EgtDev/Include/EgtPointerOwner.h"
@@ -61,6 +62,8 @@ ExeGetFileType( const string& sFilePath)
return FT_BTL ;
else if ( sFileExt == "PNG" || sFileExt == "JPG" || sFileExt == "JPEG" || sFileExt == "BMP")
return FT_IMG ;
else if ( sFileExt == "PNT" || sFileExt == "XYZ")
return FT_PNT ;
else if ( sFileExt == "TSC")
return FT_TSC ;
else if ( sFileExt == "LUA")
@@ -75,58 +78,25 @@ ExeGetFileType( const string& sFilePath)
//-----------------------------------------------------------------------------
bool
ExeImportDxf( const string& sFilePath, double dScaleFactor)
ExeImportBtl( const string& sFilePath, int nFlag)
{
GseContext* pGseCtx = GetCurrGseContext() ;
VERIFY_CTX_GEOMDB( pGseCtx, false)
bool bOk = true ;
// importo il file DXF
// aggiungo un gruppo pezzo
int nPartId = pGseCtx->m_pGeomDB->AddGroup( GDB_ID_NULL, GDB_ID_ROOT, Frame3d()) ;
// importo il file BTL
// preparo l'importatore
PtrOwner<IImportDxf> pImpDxf( MyCreateImportDxf()) ;
bOk = bOk && ! IsNull( pImpDxf) ;
// eseguo l'importazione
bOk = bOk && pImpDxf->Import( sFilePath, pGseCtx->m_pGeomDB, nPartId, dScaleFactor) ;
PtrOwner<IImportBtl> pImpBtl( MyCreateImportBtl()) ;
bOk = bOk && ! IsNull( pImpBtl) ;
// eseguo l'importazione (direttamente nella radice)
bOk = bOk && pImpBtl->Import( sFilePath, pGseCtx->m_pGeomDB, nFlag) ;
// aggiorno stato file corrente
if ( pGseCtx->m_sFilePath.empty())
pGseCtx->m_sFilePath = sFilePath ;
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
string sLua = "EgtImportDxf('" + StringToLuaString( sFilePath) + "'," +
ToString( dScaleFactor) + ")" +
" -- Ok=" + ToString( bOk) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
}
// restituisco il risultato
return bOk ;
}
//-----------------------------------------------------------------------------
bool
ExeImportStl( const string& sFilePath, double dScaleFactor)
{
GseContext* pGseCtx = GetCurrGseContext() ;
VERIFY_CTX_GEOMDB( pGseCtx, false)
bool bOk = true ;
// importo il file STL
// aggiungo un gruppo pezzo e un gruppo layer
int nPartId = pGseCtx->m_pGeomDB->AddGroup( GDB_ID_NULL, GDB_ID_ROOT, Frame3d()) ;
int nLayerId = pGseCtx->m_pGeomDB->AddGroup( GDB_ID_NULL, nPartId, Frame3d()) ;
// preparo l'importatore
PtrOwner<IImportStl> pImpStl( MyCreateImportStl()) ;
bOk = bOk && ! IsNull( pImpStl) ;
// eseguo l'importazione
bOk = bOk && pImpStl->Import( sFilePath, pGseCtx->m_pGeomDB, nLayerId, dScaleFactor) ;
// aggiorno stato file corrente
if ( pGseCtx->m_sFilePath.empty())
pGseCtx->m_sFilePath = sFilePath ;
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
string sLua = "EgtImportStl('" + StringToLuaString( sFilePath) + "'," +
ToString( dScaleFactor) + ")" +
string sLua = "EgtImportBtl('" + StringToLuaString( sFilePath) + "'," +
ToString( nFlag) + ")" +
" -- Ok=" + ToString( bOk) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
}
@@ -193,24 +163,56 @@ ExeImportCsf( const string& sFilePath)
//-----------------------------------------------------------------------------
bool
ExeImportBtl( const string& sFilePath, int nFlag)
ExeImportDxf( const string& sFilePath, double dScaleFactor)
{
GseContext* pGseCtx = GetCurrGseContext() ;
VERIFY_CTX_GEOMDB( pGseCtx, false)
bool bOk = true ;
// importo il file BTL
// importo il file DXF
// aggiungo un gruppo pezzo
int nPartId = pGseCtx->m_pGeomDB->AddGroup( GDB_ID_NULL, GDB_ID_ROOT, Frame3d()) ;
// preparo l'importatore
PtrOwner<IImportBtl> pImpBtl( MyCreateImportBtl()) ;
bOk = bOk && ! IsNull( pImpBtl) ;
// eseguo l'importazione (direttamente nella radice)
bOk = bOk && pImpBtl->Import( sFilePath, pGseCtx->m_pGeomDB, nFlag) ;
PtrOwner<IImportDxf> pImpDxf( MyCreateImportDxf()) ;
bOk = bOk && ! IsNull( pImpDxf) ;
// eseguo l'importazione
bOk = bOk && pImpDxf->Import( sFilePath, pGseCtx->m_pGeomDB, nPartId, dScaleFactor) ;
// aggiorno stato file corrente
if ( pGseCtx->m_sFilePath.empty())
pGseCtx->m_sFilePath = sFilePath ;
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
string sLua = "EgtImportBtl('" + StringToLuaString( sFilePath) + "'," +
string sLua = "EgtImportDxf('" + StringToLuaString( sFilePath) + "'," +
ToString( dScaleFactor) + ")" +
" -- Ok=" + ToString( bOk) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
}
// restituisco il risultato
return bOk ;
}
//-----------------------------------------------------------------------------
bool
ExeImportPnt( const string& sFilePath, int nFlag)
{
GseContext* pGseCtx = GetCurrGseContext() ;
VERIFY_CTX_GEOMDB( pGseCtx, false)
bool bOk = true ;
// importo il file PNT
// aggiungo un gruppo pezzo
int nPartId = pGseCtx->m_pGeomDB->AddGroup( GDB_ID_NULL, GDB_ID_ROOT, Frame3d()) ;
// preparo l'importatore
PtrOwner<IImportPnt> pImpPnt( MyCreateImportPnt()) ;
bOk = bOk && ! IsNull( pImpPnt) ;
// eseguo l'importazione
bOk = bOk && pImpPnt->Import( sFilePath, pGseCtx->m_pGeomDB, nPartId, nFlag) ;
// aggiorno stato file corrente
if ( pGseCtx->m_sFilePath.empty())
pGseCtx->m_sFilePath = sFilePath ;
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
string sLua = "EgtImportPnt('" + StringToLuaString( sFilePath) + "'," +
ToString( nFlag) + ")" +
" -- Ok=" + ToString( bOk) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
@@ -219,6 +221,37 @@ ExeImportBtl( const string& sFilePath, int nFlag)
return bOk ;
}
//-----------------------------------------------------------------------------
bool
ExeImportStl( const string& sFilePath, double dScaleFactor)
{
GseContext* pGseCtx = GetCurrGseContext() ;
VERIFY_CTX_GEOMDB( pGseCtx, false)
bool bOk = true ;
// importo il file STL
// aggiungo un gruppo pezzo e un gruppo layer
int nPartId = pGseCtx->m_pGeomDB->AddGroup( GDB_ID_NULL, GDB_ID_ROOT, Frame3d()) ;
int nLayerId = pGseCtx->m_pGeomDB->AddGroup( GDB_ID_NULL, nPartId, Frame3d()) ;
// preparo l'importatore
PtrOwner<IImportStl> pImpStl( MyCreateImportStl()) ;
bOk = bOk && ! IsNull( pImpStl) ;
// eseguo l'importazione
bOk = bOk && pImpStl->Import( sFilePath, pGseCtx->m_pGeomDB, nLayerId, dScaleFactor) ;
// aggiorno stato file corrente
if ( pGseCtx->m_sFilePath.empty())
pGseCtx->m_sFilePath = sFilePath ;
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
string sLua = "EgtImportStl('" + StringToLuaString( sFilePath) + "'," +
ToString( dScaleFactor) + ")" +
" -- Ok=" + ToString( bOk) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
}
// restituisco il risultato
return bOk ;
}
//-----------------------------------------------------------------------------
bool
ExeExportDxf( int nId, const string& sFilePath)
+131 -62
View File
@@ -520,7 +520,7 @@ VerifyAndAdjustFlatParts( void)
if ( ! IsNull( pOutCrv)) {
int nOutLoopId = ExeCreateGroup( pPar->GetId(), Frame3d(), RTY_GLOB) ;
bOk = bOk && nOutLoopId != GDB_ID_NULL ;
bOk = bOk && pGeomDB->SetName( nOutLoopId, NST_EXT_LAYER) ;
bOk = bOk && pGeomDB->SetName( nOutLoopId, NST_OUT_LAYER) ;
pGeomDB->AddGeoObj( GDB_ID_NULL, nOutLoopId, Release( pOutCrv)) ;
}
// creo nuovi layer in cui copiare gli eventuali contorni interni
@@ -832,7 +832,7 @@ ExeCalcFlatPartUpRegion( int nPartId, bool bCalc)
return true ;
// recupero il layer esterno
int nOlId = pGeomDB->GetFirstNameInGroup( nPartId, NST_EXT_LAYER) ;
int nOlId = pGeomDB->GetFirstNameInGroup( nPartId, NST_OUT_LAYER) ;
if ( nOlId == GDB_ID_NULL)
return false ;
// se il pezzo non ha lati esterni con offset negativo non devo fare alcunchè
@@ -926,60 +926,31 @@ ExeCalcFlatPartUpRegion( int nPartId, bool bCalc)
}
//----------------------------------------------------------------------------
bool
ExeCalcFlatPartDownRegion( int nPartId, double dH)
static bool
AdjustLayerForSideAngle( IGeomDB* pGeomDB, int nLayOrigId, const string& sLayOrig, int nLayReg, double dH)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, false)
// ripristino lo stato originale
pGeomDB->Erase( pGeomDB->GetFirstNameInGroup( nPartId, NST_PARTDOWNREG_LAYER)) ;
int nOlOrigId = pGeomDB->GetFirstNameInGroup( nPartId, NST_EXT_ORIG_LAYER) ;
if ( nOlOrigId != GDB_ID_NULL) {
pGeomDB->Erase( pGeomDB->GetFirstNameInGroup( nPartId, NST_EXT_LAYER)) ;
pGeomDB->SetName( nOlOrigId, NST_EXT_LAYER) ;
pGeomDB->SetStatus( nOlOrigId, GDB_ST_ON) ;
}
// se spessore nullo, non devo fare altro
if ( dH < EPS_SMALL)
return true ;
// recupero il layer esterno
int nOlId = pGeomDB->GetFirstNameInGroup( nPartId, NST_EXT_LAYER) ;
if ( nOlId == GDB_ID_NULL)
// creo una copia del layer
int nLayId = pGeomDB->Copy( nLayOrigId, GDB_ID_NULL, nLayOrigId, GDB_AFTER) ;
if ( nLayId == GDB_ID_NULL)
return false ;
// se il pezzo non ha lati esterni inclinati non devo fare alcunchè
bool bAllVertSides = true ;
int nCrvId = pGeomDB->GetFirstInGroup( nOlId) ;
while ( nCrvId != GDB_ID_NULL) {
double dSideAng ;
if ( pGeomDB->GetInfo( nCrvId, NST_KEY_SIDEANG, dSideAng) && abs( dSideAng) > EPS_ANG_SMALL) {
bAllVertSides = false ;
break ;
}
nCrvId = pGeomDB->GetNext( nCrvId) ;
}
if ( bAllVertSides)
return true ;
// creo una copia del layer esterno
nOlOrigId = pGeomDB->Copy( nOlId, GDB_ID_NULL, nOlId, GDB_AFTER) ;
if ( nOlOrigId == GDB_ID_NULL)
pGeomDB->SetName( nLayOrigId, sLayOrig) ;
pGeomDB->SetInfo( nLayOrigId, NST_KEY_COPY, nLayId) ;
pGeomDB->SetStatus( nLayOrigId, GDB_ST_OFF) ;
// creo un layer temporaneo
const string sTmpLayName = "TmpLay" ;
Frame3d frLay ;
pGeomDB->GetGroupFrame( nLayId, frLay) ;
int nTmpLayId = pGeomDB->AddGroup( GDB_ID_NULL, pGeomDB->GetParentId( nLayId), frLay) ;
if ( nTmpLayId == GDB_ID_NULL)
return false ;
pGeomDB->SetName( nOlOrigId, NST_EXT_ORIG_LAYER) ;
pGeomDB->SetStatus( nOlOrigId, GDB_ST_OFF) ;
// creo il layer per la regione sotto (con il medesimo riferimento del layer esterno)
Frame3d frOl ;
pGeomDB->GetGroupFrame( nOlId, frOl) ;
int nDwnRegId = pGeomDB->AddGroup( GDB_ID_NULL, nPartId, frOl) ;
if ( nDwnRegId == GDB_ID_NULL)
return false ;
pGeomDB->SetName( nDwnRegId, NST_PARTDOWNREG_LAYER) ;
pGeomDB->SetName( nTmpLayId, sTmpLayName) ;
pGeomDB->SetLevel( nTmpLayId, GDB_LV_TEMP) ;
// copio le entità del contorno esterno e le offsetto opportunamente
nCrvId = pGeomDB->GetFirstInGroup( nOlId) ;
int nCrvId = pGeomDB->GetFirstInGroup( nLayId) ;
while ( nCrvId != GDB_ID_NULL) {
// copio la curva nel gruppo downregion
int nNewId = pGeomDB->CopyGlob( nCrvId, GDB_ID_NULL, nDwnRegId) ;
// copio la curva nel gruppo temporaneo
int nNewId = pGeomDB->CopyGlob( nCrvId, GDB_ID_NULL, nTmpLayId) ;
if ( nNewId == GDB_ID_NULL)
return false ;
// determino ed eseguo offset
@@ -997,7 +968,7 @@ ExeCalcFlatPartDownRegion( int nPartId, double dH)
nCrvId = pGeomDB->GetNext( nCrvId) ;
}
// aggiusto tra loro le entità offsettate
int nFirstCrvId = pGeomDB->GetFirstInGroup( nDwnRegId) ;
int nFirstCrvId = pGeomDB->GetFirstInGroup( nTmpLayId) ;
ICurve* pCrv1 = GetCurve( pGeomDB->GetGeoObj( nFirstCrvId)) ;
int nNextCrvId = pGeomDB->GetNext( nFirstCrvId) ;
ICurve* pCrv2 = GetCurve( pGeomDB->GetGeoObj( nNextCrvId)) ;
@@ -1015,8 +986,8 @@ ExeCalcFlatPartDownRegion( int nPartId, double dH)
if ( pCrv1 == nullptr || pCrv2 == nullptr || ! AdjustCurves( pCrv1, pCrv2))
return false ;
// eventuali allungamenti per le curve del loop esterno
for ( int nCrvId = pGeomDB->GetFirstInGroup( nOlId) ;
// eventuali allungamenti/accorciamenti per le curve del loop
for ( int nCrvId = pGeomDB->GetFirstInGroup( nLayId) ;
nCrvId != GDB_ID_NULL ;
nCrvId = pGeomDB->GetNext( nCrvId)) {
// recupero il nome
@@ -1024,7 +995,7 @@ ExeCalcFlatPartDownRegion( int nPartId, double dH)
if ( ! pGeomDB->GetName( nCrvId, sName))
continue ;
// recupero curva con lo stesso nome nel gruppo della regione sotto
int nCrvDrId = pGeomDB->GetFirstNameInGroup( nDwnRegId, sName) ;
int nCrvDrId = pGeomDB->GetFirstNameInGroup( nTmpLayId, sName) ;
if ( nCrvDrId == GDB_ID_NULL)
continue ;
// verifico siano curve
@@ -1072,24 +1043,122 @@ ExeCalcFlatPartDownRegion( int nPartId, double dH)
}
}
}
// creo la regione
// concateno le curve del layer temporaneo
PtrOwner<ICurveComposite> pCompo( CreateCurveComposite()) ;
if ( IsNull( pCompo))
return false ;
for ( int nCrvId = pGeomDB->GetFirstInGroup( nTmpLayId) ;
nCrvId != GDB_ID_NULL ;
nCrvId = pGeomDB->GetFirstInGroup( nTmpLayId)) {
ICurve* pCrv = GetCurve( pGeomDB->RemoveGeoObjAndErase( nCrvId)) ;
if ( pCrv != nullptr)
pCompo->AddCurve( pCrv) ;
else
pGeomDB->Erase( nCrvId) ;
}
// cancello il layer temporaneo
pGeomDB->Erase( nTmpLayId) ;
// inserisco la curva concatenata nel layer della regione
if ( pGeomDB->AddGeoObj( GDB_ID_NULL, nLayReg, Release( pCompo)) == GDB_ID_NULL)
return false ;
return true ;
}
//----------------------------------------------------------------------------
bool
ExeCalcFlatPartDownRegion( int nPartId, double dH)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, false)
// ripristino lo stato originale
pGeomDB->Erase( pGeomDB->GetFirstNameInGroup( nPartId, NST_PARTDOWNREG_LAYER)) ;
int nOlOrigId = pGeomDB->GetFirstNameInGroup( nPartId, NST_OUT_ORIG_LAYER) ;
if ( nOlOrigId != GDB_ID_NULL) {
pGeomDB->Erase( pGeomDB->GetFirstNameInGroup( nPartId, NST_OUT_LAYER)) ;
pGeomDB->SetName( nOlOrigId, NST_OUT_LAYER) ;
pGeomDB->SetStatus( nOlOrigId, GDB_ST_ON) ;
}
for ( int nIlOrigId = pGeomDB->GetFirstNameInGroup( nPartId, NST_IN_ORIG_LAYER) ;
nIlOrigId != GDB_ID_NULL ;
nIlOrigId = pGeomDB->GetFirstNameInGroup( nPartId, NST_IN_ORIG_LAYER)) {
int nCopyId = GDB_ID_NULL ;
pGeomDB->GetInfo( nIlOrigId, NST_KEY_COPY, nCopyId) ;
if ( nCopyId != GDB_ID_NULL)
pGeomDB->Erase( nCopyId) ;
pGeomDB->SetName( nIlOrigId, NST_IN_LAYER) ;
pGeomDB->SetStatus( nIlOrigId, GDB_ST_ON) ;
}
// se spessore nullo, non devo fare altro
if ( dH < EPS_SMALL)
return true ;
// recupero i layer esterno ed interni (primo sempre esterno)
INTVECTOR vLayId ;
int nOlId = pGeomDB->GetFirstNameInGroup( nPartId, NST_OUT_LAYER) ;
if ( nOlId == GDB_ID_NULL)
return false ;
vLayId.push_back( nOlId) ;
for ( int nIlId = pGeomDB->GetFirstNameInGroup( nPartId, NST_IN_LAYER) ;
nIlId != GDB_ID_NULL ;
nIlId = pGeomDB->GetNextName( nIlId, NST_IN_LAYER))
vLayId.push_back( nIlId) ;
// se il pezzo non ha lati esterni o interni inclinati all'infuori non devo fare alcunchè
bool bAllVertSides = true ;
for ( size_t i = 0 ; i < vLayId.size() ; ++ i) {
int nCrvId = pGeomDB->GetFirstInGroup( vLayId[i]) ;
while ( nCrvId != GDB_ID_NULL) {
double dSideAng ;
if ( pGeomDB->GetInfo( nCrvId, NST_KEY_SIDEANG, dSideAng) && abs( dSideAng) > EPS_ANG_SMALL) {
bAllVertSides = false ;
break ;
}
nCrvId = pGeomDB->GetNext( nCrvId) ;
}
}
if ( bAllVertSides)
return true ;
// assegno un nome alle curve dei layer che ne sono prive
for ( size_t i = 0 ; i < vLayId.size() ; ++ i) {
int nCnt = 0 ;
for ( int nCrvId = pGeomDB->GetFirstInGroup( vLayId[i]) ;
nCrvId != GDB_ID_NULL ;
nCrvId = pGeomDB->GetNext( nCrvId)) {
if ( ! pGeomDB->ExistsName( nCrvId) && ( pGeomDB->GetGeoType( nCrvId) & GEO_CURVE) != 0) {
++ nCnt ;
pGeomDB->SetName( nCrvId, "B" + ToString( nCnt)) ;
}
}
}
// creo il layer per la regione sotto (con il medesimo riferimento del layer esterno)
Frame3d frOl ;
pGeomDB->GetGroupFrame( nOlId, frOl) ;
int nDwnRegId = pGeomDB->AddGroup( GDB_ID_NULL, nPartId, frOl) ;
if ( nDwnRegId == GDB_ID_NULL)
return false ;
pGeomDB->SetName( nDwnRegId, NST_PARTDOWNREG_LAYER) ;
// modifico i layer e creo i contorni per la nuova regione
for ( size_t i = 0 ; i < vLayId.size() ; ++ i) {
string sLayOrig = ( i == 0 ? NST_OUT_ORIG_LAYER : NST_IN_ORIG_LAYER) ;
if ( ! AdjustLayerForSideAngle( pGeomDB, vLayId[i], sLayOrig, nDwnRegId, dH))
return false ;
}
// creo la regione
SurfFlatRegionByContours SfrCntr( false) ;
for ( int nCrvId = pGeomDB->GetFirstInGroup( nDwnRegId) ;
nCrvId != GDB_ID_NULL ;
nCrvId = pGeomDB->GetFirstInGroup( nDwnRegId)) {
ICurve* pCrv = GetCurve( pGeomDB->RemoveGeoObjAndErase( nCrvId)) ;
if ( pCrv != nullptr) {
pCompo->AddCurve( pCrv) ;
pGeomDB->RemoveGeoObjAndErase( nCrvId) ;
}
if ( pCrv != nullptr)
SfrCntr.AddCurve( pCrv) ;
else
pGeomDB->Erase( nCrvId) ;
}
SurfFlatRegionByContours SfrCntr( false) ;
SfrCntr.AddCurve( Release( pCompo)) ;
int nSfrId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDwnRegId, SfrCntr.GetSurf()) ;
if ( nSfrId == GDB_ID_NULL)
return false ;
BIN
View File
Binary file not shown.
+17 -1
View File
@@ -44,7 +44,7 @@ LuaCAvSetStdTool( lua_State* L)
static int
LuaCAvSetAdvTool( lua_State* L)
{
// 5 parametri : dToolLen, dToolDiam, dToolCornR
// 5 parametri : dToolLen, dToolDiam, dTipLen, dTipDiam, dToolCornR
double dToolLen ;
LuaCheckParam( L, 1, dToolLen)
double dToolDiam ;
@@ -78,6 +78,21 @@ LuaCAvSetGenTool( lua_State* L)
return 1 ;
}
//-------------------------------------------------------------------------------
static int
LuaCAvGetToolOutline( lua_State* L)
{
// 1 parametro : nDestGrpId
int nDestGrpId ;
LuaCheckParam( L, 1, nDestGrpId)
LuaClearStack( L) ;
// recupero profilo dell'utensile per Collision Avoidance
int nId = ExeCAvGetToolOutline( nDestGrpId) ;
// restituisco il risultato
LuaSetParam( L, nId) ;
return 1 ;
}
//-------------------------------------------------------------------------------
static int
LuaCAvToolPosStm( lua_State* L)
@@ -134,6 +149,7 @@ LuaInstallCAvTool( LuaMgr& luaMgr)
bOk = bOk && luaMgr.RegisterFunction( "EgtCAvSetStdTool", LuaCAvSetStdTool) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtCAvSetAdvTool", LuaCAvSetAdvTool) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtCAvSetGenTool", LuaCAvSetGenTool) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtCAvGetToolOutline", LuaCAvGetToolOutline) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtCAvToolPosStm", LuaCAvToolPosStm) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtCAvToolPathStm", LuaCAvToolPathStm) ;
return bOk ;
+47 -29
View File
@@ -23,33 +23,16 @@ using namespace std ;
//-------------------------------------------------------------------------------
static int
LuaImportDxf( lua_State* L)
LuaImportBtl( lua_State* L)
{
// 1 o 2 parametri : path del file da importare [, Fattore di scala]
// 1 o 2 : FilePath [, Flag]
string sFilePath ;
LuaCheckParam( L, 1, sFilePath)
double dScaleFactor = 1.0 ;
LuaGetParam( L, 2, dScaleFactor) ;
int nFlag = EIB_FLAG_NONE ;
LuaGetParam( L, 2, nFlag) ;
LuaClearStack( L) ;
// apro il file
bool bOk = ExeImportDxf( sFilePath, dScaleFactor) ;
// restituisco il risultato
LuaSetParam( L, bOk) ;
return 1 ;
}
//-------------------------------------------------------------------------------
static int
LuaImportStl( lua_State* L)
{
// 1 o 2 parametri : path del file da importare [, Fattore di scala]
string sFilePath ;
LuaCheckParam( L, 1, sFilePath)
double dScaleFactor = 1.0 ;
LuaGetParam( L, 2, dScaleFactor) ;
LuaClearStack( L) ;
// apro il file
bool bOk = ExeImportStl( sFilePath, dScaleFactor) ;
bool bOk = ExeImportBtl( sFilePath, nFlag) ;
// restituisco il risultato
LuaSetParam( L, bOk) ;
return 1 ;
@@ -89,16 +72,50 @@ LuaImportCsf( lua_State* L)
//-------------------------------------------------------------------------------
static int
LuaImportBtl( lua_State* L)
LuaImportDxf( lua_State* L)
{
// 1 o 2 : FilePath [, Flag]
// 1 o 2 parametri : path del file da importare [, Fattore di scala]
string sFilePath ;
LuaCheckParam( L, 1, sFilePath)
int nFlag = EIB_FLAG_NONE ;
double dScaleFactor = 1.0 ;
LuaGetParam( L, 2, dScaleFactor) ;
LuaClearStack( L) ;
// apro il file
bool bOk = ExeImportDxf( sFilePath, dScaleFactor) ;
// restituisco il risultato
LuaSetParam( L, bOk) ;
return 1 ;
}
//-------------------------------------------------------------------------------
static int
LuaImportPnt( lua_State* L)
{
// 1 o 2 parametri : FilePath [, Flag]
string sFilePath ;
LuaCheckParam( L, 1, sFilePath)
int nFlag = 0 ;
LuaGetParam( L, 2, nFlag) ;
LuaClearStack( L) ;
// apro il file
bool bOk = ExeImportBtl( sFilePath, nFlag) ;
bool bOk = ExeImportPnt( sFilePath, nFlag) ;
// restituisco il risultato
LuaSetParam( L, bOk) ;
return 1 ;
}
//-------------------------------------------------------------------------------
static int
LuaImportStl( lua_State* L)
{
// 1 o 2 parametri : path del file da importare [, Fattore di scala]
string sFilePath ;
LuaCheckParam( L, 1, sFilePath)
double dScaleFactor = 1.0 ;
LuaGetParam( L, 2, dScaleFactor) ;
LuaClearStack( L) ;
// apro il file
bool bOk = ExeImportStl( sFilePath, dScaleFactor) ;
// restituisco il risultato
LuaSetParam( L, bOk) ;
return 1 ;
@@ -143,11 +160,12 @@ bool
LuaInstallExchange( LuaMgr& luaMgr)
{
bool bOk = ( &luaMgr != nullptr) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtImportDxf", LuaImportDxf) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtImportStl", LuaImportStl) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtImportBtl", LuaImportBtl) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtImportCnc", LuaImportCnc) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtImportCsf", LuaImportCsf) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtImportBtl", LuaImportBtl) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtImportDxf", LuaImportDxf) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtImportPnt", LuaImportPnt) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtImportStl", LuaImportStl) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtExportDxf", LuaExportDxf) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtExportStl", LuaExportStl) ;
return bOk ;