4b8f8ee87e
- aggiunto parametro nRefType a funzione VolZMapRemoveFins.
648 lines
27 KiB
C++
648 lines
27 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2015-2016
|
|
//----------------------------------------------------------------------------
|
|
// File : EXE_ModifyVol.cpp Data : 27.10.16 Versione : 1.6v7
|
|
// Contenuto : Funzioni di modifica dei solidi per EXE.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 27.10.16 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
//--------------------------- Include ----------------------------------------
|
|
#include "stdafx.h"
|
|
#include "EXE.h"
|
|
#include "EXE_Macro.h"
|
|
#include "AuxTools.h"
|
|
#include "GeoTools.h"
|
|
#include "/EgtDev/Include/EXeExecutor.h"
|
|
#include "/EgtDev/Include/EXeConst.h"
|
|
#include "/EgtDev/Include/EGkVolZmap.h"
|
|
#include "/EgtDev/Include/EGkStringUtils3d.h"
|
|
|
|
using namespace std ;
|
|
|
|
//-------------------------------------------------------------------------------
|
|
static int
|
|
MyExplodeVolZmap( int nId, int* pnCount)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero il solido VolZmap
|
|
const IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( nId)) ;
|
|
if ( pVZM == nullptr)
|
|
return GDB_ID_NULL ;
|
|
// recupero il numero di parti connesse
|
|
int nPart = pVZM->GetPartCount() ;
|
|
// se c'è una sola parte o non definibile, non devo fare alcunché
|
|
if ( nPart == 1 || nPart == - 1) {
|
|
if ( pnCount != nullptr)
|
|
*pnCount = 1 ;
|
|
return nId ;
|
|
}
|
|
// copio tutti i componenti connessi (parti)
|
|
int nFirstId = GDB_ID_NULL ;
|
|
int nCount = 0 ;
|
|
for ( int i = 0 ; i < nPart ; ++ i) {
|
|
IVolZmap* pPrt = pVZM->ClonePart( i) ;
|
|
if ( pPrt == nullptr)
|
|
continue ;
|
|
// inserisco il solido nello stesso gruppo e nello stesso posto del GeomDB
|
|
int nNewId = pGeomDB->InsertGeoObj( GDB_ID_NULL, nId, GDB_BEFORE, pPrt) ;
|
|
if ( nNewId == GDB_ID_NULL)
|
|
return GDB_ID_NULL ;
|
|
// copio gli attributi
|
|
if ( ! pGeomDB->CopyAttributes( nId, nNewId))
|
|
return GDB_ID_NULL ;
|
|
// aggiorno contatori
|
|
if ( nFirstId == GDB_ID_NULL)
|
|
nFirstId = nNewId ;
|
|
++ nCount ;
|
|
}
|
|
// elimino il solido originale
|
|
pGeomDB->Erase( nId) ;
|
|
// restituisco risultati
|
|
if ( pnCount != nullptr)
|
|
*pnCount = nCount ;
|
|
return nFirstId ;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
int
|
|
ExeExplodeVolume( int nId, int* pnCount)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero il tipo di solido
|
|
int nFirstId = GDB_ID_NULL ;
|
|
int nCount = 0 ;
|
|
switch ( pGeomDB->GetGeoType( nId)) {
|
|
case VOL_ZMAP :
|
|
nFirstId = MyExplodeVolZmap( nId, &nCount) ;
|
|
break ;
|
|
}
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtExplodeVolume(" + ToString( nId) + ")" +
|
|
" -- Id1=" + ToString( nFirstId) + ",Nbr=" + ToString( nCount) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultati
|
|
if ( pnCount != nullptr)
|
|
*pnCount = nCount ;
|
|
return nFirstId ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeVolZmapChangeResolution( int nId, int nNewRes)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero lo Zmap
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( nId)) ;
|
|
bool bOk = ( pVZM != nullptr) ;
|
|
// cambio la risoluzione (rapporto Voxel/Dexel, valori ammessi 1 e 2)
|
|
bOk = bOk && pVZM->ChangeResolution( nNewRes) ;
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZmapChangeResolution(" + ToString( nId) + "," +
|
|
ToString( nNewRes) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExeVolZmapSetShowEdges( int nId, bool bShow)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero lo Zmap
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( nId)) ;
|
|
bool bOk = ( pVZM != nullptr) ;
|
|
// imposto lo stato di visualizzazione degli spigoli vivi
|
|
if ( bOk)
|
|
pVZM->SetShowEdges( bShow) ;
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZmapSetShowEdges(" + ToString( nId) + "," +
|
|
ToString( bShow) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
return bOk ;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
bool
|
|
ExeRemoveVolZmapPart( int nId, int nPart)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero lo Zmap e rimuovo la parte indicata
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( nId)) ;
|
|
bool bOk = ( pVZM != nullptr && pVZM->RemovePart( nPart)) ;
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtRemoveVolZmapPart(" + ToString( nId) + "," +
|
|
ToString( nPart) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExeVolZmapSetStdTool( const INTVECTOR& vIds, const string& sToolName,
|
|
double dLen, double dDiam, double dCornR, double dCutterH, int nFlag, bool bFirst)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero gli Zmap e assegno i dati dell'utensile
|
|
bool bOk = true ;
|
|
for ( int i = 0 ; i < int( vIds.size()) ; ++ i) {
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( vIds[i])) ;
|
|
bOk = ( pVZM != nullptr && pVZM->SetStdTool( sToolName, dLen, 0.5 * dDiam, dCornR, dCutterH, nFlag, bFirst)) && bOk ;
|
|
}
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZmapSetStdTool({" + IdListToString( vIds) + "}," +
|
|
sToolName + "," +
|
|
ToString( dLen) + "," +
|
|
ToString( dDiam) + "," +
|
|
ToString( dCornR) + "," +
|
|
ToString( dCutterH) + "," +
|
|
ToString( nFlag) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExeVolZmapSetAdvTool( const INTVECTOR& vIds, const string& sToolName,
|
|
double dLen, double dDiam, double dTipLen, double dTipDiam, double dCornR, double dCutterH, int nFlag, bool bFirst)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero gli Zmap e assegno i dati dell'utensile
|
|
bool bOk = true ;
|
|
for ( int i = 0 ; i < int( vIds.size()) ; ++ i) {
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( vIds[i])) ;
|
|
bOk = ( pVZM != nullptr && pVZM->SetAdvTool( sToolName, dLen, dDiam / 2, dTipLen, dTipDiam / 2, dCornR, dCutterH, nFlag, bFirst)) && bOk ;
|
|
}
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZmapSetAdvTool({" + IdListToString( vIds) + "}," +
|
|
sToolName + "," +
|
|
ToString( dLen) + "," +
|
|
ToString( dDiam) + "," +
|
|
ToString( dTipLen) + "," +
|
|
ToString( dTipDiam) + "," +
|
|
ToString( dCornR) + "," +
|
|
ToString( dCutterH) + "," +
|
|
ToString( nFlag) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExeVolZmapSetSawTool( const INTVECTOR& vIds, const string& sToolName,
|
|
double dLen, double dDiam, double dThick, double dStemDiam, double dCornR, int nFlag, bool bFirst)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero gli Zmap e assegno i dati dell'utensile
|
|
bool bOk = true ;
|
|
for ( int i = 0 ; i < int( vIds.size()) ; ++ i) {
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( vIds[i])) ;
|
|
bOk = ( pVZM != nullptr && pVZM->SetSawTool( sToolName, dLen, dDiam / 2, dThick, dStemDiam / 2, dCornR, nFlag, bFirst)) && bOk ;
|
|
}
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZmapSetSawTool({" + IdListToString( vIds) + "}," +
|
|
sToolName + "," +
|
|
ToString( dLen) + "," +
|
|
ToString( dDiam) + "," +
|
|
ToString( dThick) + "," +
|
|
ToString( dStemDiam) + "," +
|
|
ToString( dCornR) + "," +
|
|
ToString( nFlag) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExeVolZmapSetGenTool( const INTVECTOR& vIds, const string& sToolName, int nToolSectId, int nFlag, bool bFirst)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero la sezione dell'utensile
|
|
const ICurveComposite* pCC = GetCurveComposite( pGeomDB->GetGeoObj( nToolSectId)) ;
|
|
bool bOk = ( pCC != nullptr) ;
|
|
// recupero gli Zmap e assegno i dati dell'utensile
|
|
for ( int i = 0 ; i < int( vIds.size()) ; ++ i) {
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( vIds[i])) ;
|
|
bOk = ( pVZM != nullptr && pVZM->SetGenTool( sToolName, pCC, nFlag, bFirst) && bOk) ;
|
|
}
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZmapSetGenTool({" + IdListToString( vIds) + "}," +
|
|
sToolName + "," +
|
|
IdToString( nToolSectId) + "," +
|
|
ToString( nFlag) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExeVolZmapSetMortiserTool( const INTVECTOR& vIds, const string& sToolName,
|
|
double dLen, double dWidth, double dThick, double dCornR, int nFlag, bool bFirst)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero gli Zmap e assegno i dati dell'utensile
|
|
bool bOk = true ;
|
|
for ( int i = 0 ; i < int( vIds.size()) ; ++ i) {
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( vIds[i])) ;
|
|
bOk = ( pVZM != nullptr && pVZM->SetMortiserTool( sToolName, dLen, dWidth, dThick, dCornR, nFlag, bFirst) && bOk) ;
|
|
}
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZmapSetMortiserTool({" + IdListToString( vIds) + "}," +
|
|
sToolName + "," +
|
|
ToString( dLen) + "," +
|
|
ToString( dWidth) + "," +
|
|
ToString( dThick) + "," +
|
|
ToString( dCornR) + "," +
|
|
ToString( nFlag) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExeVolZmapSetChiselTool( const INTVECTOR& vIds, const string& sToolName,
|
|
double dLen, double dWidth, double dThick, int nFlag, bool bFirst)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero gli Zmap e assegno i dati dell'utensile
|
|
bool bOk = true ;
|
|
for ( int i = 0 ; i < int( vIds.size()) ; ++ i) {
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( vIds[i])) ;
|
|
bOk = ( pVZM != nullptr && pVZM->SetChiselTool( sToolName, dLen, dWidth, dThick, nFlag, bFirst) && bOk) ;
|
|
}
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZmapSetChiselTool({" + IdListToString( vIds) + "}," +
|
|
sToolName + "," +
|
|
ToString( dLen) + "," +
|
|
ToString( dWidth) + "," +
|
|
ToString( dThick) + "," +
|
|
ToString( nFlag) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExeVolZmapSetAdditiveTool( const INTVECTOR& vIds, const string& sToolName,
|
|
double dLen, double dDiam, double dCornR, int nFlag, bool bFirst)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero gli Zmap e assegno i dati dell'utensile
|
|
bool bOk = true ;
|
|
for ( int i = 0 ; i < int( vIds.size()) ; ++ i) {
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( vIds[i])) ;
|
|
bOk = ( bOk && pVZM != nullptr && pVZM->SetAdditiveTool( sToolName, dLen, dDiam / 2, dCornR, nFlag, bFirst)) ;
|
|
}
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZmapSetAdditiveTool({" + IdListToString( vIds) + "}," +
|
|
sToolName + "," +
|
|
ToString( dLen) + "," +
|
|
ToString( dDiam) + "," +
|
|
ToString( dCornR) + "," +
|
|
ToString( nFlag) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExeVolZmapResetTools( const INTVECTOR& vIds)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero gli Zmap e assegno i dati dell'utensile
|
|
bool bOk = true ;
|
|
for ( int i = 0 ; i < int( vIds.size()) ; ++ i) {
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( vIds[i])) ;
|
|
bOk = ( pVZM != nullptr && pVZM->ResetTools() && bOk) ;
|
|
}
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZmapResetTool({" + IdListToString( vIds) + "})" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int
|
|
MyVolZmapGetToolOutline( int nId, int nDestGrpId, bool bApprox)
|
|
{
|
|
// verifico DB geometrico
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero lo Zmap e recupero il profilo dell'utensile
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( nId)) ;
|
|
if ( pVZM == nullptr)
|
|
return GDB_ID_NULL ;
|
|
// recupero outline dell'utensile
|
|
const ICurveComposite& CC = pVZM->GetToolOutline( bApprox) ;
|
|
if ( ! CC.IsValid())
|
|
return GDB_ID_NULL ;
|
|
// ne faccio una copia
|
|
PtrOwner<ICurveComposite> pCopy( CC.Clone()) ;
|
|
if ( IsNull( pCopy))
|
|
return GDB_ID_NULL ;
|
|
// inserisco la copia nel DB geometrico
|
|
int nNewId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, Release( pCopy)) ;
|
|
return nNewId ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int
|
|
ExeVolZmapGetToolOutline( int nId, int nDestGrpId, bool bApprox)
|
|
{
|
|
int nNewId = MyVolZmapGetToolOutline( nId, nDestGrpId, bApprox) ;
|
|
if ( nNewId != GDB_ID_NULL)
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZmapGetToolOutline(" + IdToString( nId) + "," +
|
|
IdToString( nDestGrpId) + "," +
|
|
( bApprox ? "true" : "false") + ")" +
|
|
" -- Id=" + IdToString( nNewId) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return nNewId ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExeVolZmapMillingStep( int nId, const Point3d& ptPs, const Vector3d& vtDs,
|
|
const Point3d& ptPe, const Vector3d& vtDe, int nRefType)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero il riferimento locale
|
|
Frame3d frLoc ;
|
|
bool bOk = pGeomDB->GetGlobFrame( nId, frLoc) ;
|
|
// porto in locale i punti e i vettori
|
|
Point3d ptPsL = GetPointLocal( pGeomDB, ptPs, nRefType, frLoc) ;
|
|
Vector3d vtDsL = GetVectorLocal( pGeomDB, vtDs, nRefType, frLoc) ;
|
|
Point3d ptPeL = GetPointLocal( pGeomDB, ptPe, nRefType, frLoc) ;
|
|
Vector3d vtDeL = GetVectorLocal( pGeomDB, vtDe, nRefType, frLoc) ;
|
|
// recupero lo Zmap e eseguo movimento di fresatura con l'utensile già associato
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( nId)) ;
|
|
bOk = bOk && ( pVZM != nullptr && pVZM->MillingStep( 0, ptPsL, vtDsL, ptPeL, vtDeL)) ;
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZmapMillingStep(" + IdToString( nId) + ",{" +
|
|
ToString( ptPs) + "},{" +
|
|
ToString( vtDs) + "},{" +
|
|
ToString( ptPe) + "},{" +
|
|
ToString( vtDe) + "}," +
|
|
RefTypeToString( nRefType) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExeVolZmapMillingStep( int nId, const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& vtAs,
|
|
const Point3d& ptPe, const Vector3d& vtDe, const Vector3d& vtAe, int nRefType)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero il riferimento locale
|
|
Frame3d frLoc ;
|
|
bool bOk = pGeomDB->GetGlobFrame( nId, frLoc) ;
|
|
// porto in locale i punti e i vettori
|
|
Point3d ptPsL = GetPointLocal( pGeomDB, ptPs, nRefType, frLoc) ;
|
|
Vector3d vtDsL = GetVectorLocal( pGeomDB, vtDs, nRefType, frLoc) ;
|
|
Vector3d vtAsL = GetVectorLocal( pGeomDB, vtAs, nRefType, frLoc) ;
|
|
Point3d ptPeL = GetPointLocal( pGeomDB, ptPe, nRefType, frLoc) ;
|
|
Vector3d vtDeL = GetVectorLocal( pGeomDB, vtDe, nRefType, frLoc) ;
|
|
Vector3d vtAeL = GetVectorLocal( pGeomDB, vtAe, nRefType, frLoc) ;
|
|
// recupero lo Zmap e eseguo movimento di fresatura con l'utensile già associato
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( nId)) ;
|
|
bOk = bOk && ( pVZM != nullptr && pVZM->MillingStep( 0, ptPsL, vtDsL, vtAsL, ptPeL, vtDeL, vtAeL)) ;
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZmapMillingStep(" + IdToString( nId) + ",{" +
|
|
ToString( ptPs) + "},{" +
|
|
ToString( vtDs) + "},{" +
|
|
ToString( vtAs) + "},{" +
|
|
ToString( ptPe) + "},{" +
|
|
ToString( vtDe) + "},{" +
|
|
ToString( vtAe) + "}," +
|
|
RefTypeToString( nRefType) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
bool
|
|
ExeCutVolZmapPlane( int nId, const Point3d& ptOn, const Vector3d& vtN, int nRefType)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero lo Zmap
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( nId)) ;
|
|
bool bOk = ( pVZM != nullptr) ;
|
|
// recupero il riferimento locale
|
|
Frame3d frLoc ;
|
|
bOk = bOk && pGeomDB->GetGlobFrame( nId, frLoc) ;
|
|
// porto in locale il punto e la normale del piano
|
|
Point3d ptOnL = GetPointLocal( pGeomDB, ptOn, nRefType, frLoc) ;
|
|
Vector3d vtNL = GetVectorLocal( pGeomDB, vtN, nRefType, frLoc) ;
|
|
// calcolo il piano di taglio
|
|
Plane3d plPlane ;
|
|
bOk = bOk && plPlane.Set( ptOnL, vtNL) ;
|
|
// eseguo il taglio
|
|
bOk = bOk && pVZM->Cut( plPlane) ;
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtCutVolZmapPlane(" + ToString( nId) + ",{" +
|
|
ToString( ptOn) + "},{" +
|
|
ToString( vtN) + "}," +
|
|
RefTypeToString( nRefType) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExeVolZMapOffset( int nId, double dDist, int nType)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero lo Zmap
|
|
IVolZmap* pVolZmap = GetVolZmap( pGeomDB->GetGeoObj( nId)) ;
|
|
bool bOk = ( pVolZmap != nullptr) ;
|
|
// eseguo l'offset
|
|
bOk = bOk && pVolZmap->Offset( dDist, nType) ;
|
|
// se il risultato è vuoto, cancello lo Zmap
|
|
if ( bOk && ! pVolZmap->IsValid())
|
|
pGeomDB->Erase( nId) ;
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZmapOffset(" + ToString( nId) + "," +
|
|
ToString( dDist) + "," +
|
|
ToString( nType) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
return bOk ;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
bool
|
|
ExeUpdateVolZmapByAddingSurfTm( int nVolZmapId, int nStmId)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero lo Zmap
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( nVolZmapId)) ;
|
|
bool bOk = ( pVZM != nullptr) ;
|
|
// recupero la trimesh
|
|
PtrOwner<ISurfTriMesh> pStm( CloneSurfTriMesh( pGeomDB->GetGeoObj( nStmId))) ;
|
|
bOk = bOk && !IsNull( pStm) ;
|
|
// recupero il frame dello Zmap e della Trimesh
|
|
Frame3d frZmap, frStm ;
|
|
bOk = bOk && pGeomDB->GetGlobFrame( nVolZmapId, frZmap) &&
|
|
pGeomDB->GetGlobFrame( nStmId, frStm) ;
|
|
// porto la Stm nel frame dello Zmap
|
|
bOk = bOk && pStm->LocToLoc( frStm, frZmap) ;
|
|
// aggiorno lo Zmap con la nuova superficie
|
|
bOk = bOk && pVZM->AddSurfTm( pStm) ;
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtUpdateVolZmapByAddingSurfTm(" + ToString( nVolZmapId) + "," +
|
|
ToString( nStmId) + ")"
|
|
" -- bOk =" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
return bOk ;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
bool
|
|
ExeVolZmapMakeUniform( int nVolZmapId, double dToler, bool bExtensionFirst, int nToolNum)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero lo Zmap
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( nVolZmapId)) ;
|
|
bool bOk = ( pVZM != nullptr) ;
|
|
// aggiorno lo Zmap
|
|
dToler = max( dToler, EPS_SMALL) ;
|
|
bOk = bOk && pVZM->MakeUniform( dToler, bExtensionFirst, nToolNum) ;
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZmapMakeUniform(" + ToString( nVolZmapId) + "," +
|
|
ToString( dToler) + "," +
|
|
( bExtensionFirst ? "true" : "false") +
|
|
ToString( nToolNum) + ")"
|
|
" -- bOk =" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
return bOk ;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------
|
|
bool
|
|
ExeVolZMapRemoveFins( int nVolZMapId, const Vector3d& vtDir, double dThick, int nRefType)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false) ;
|
|
// Recupero lo ZMap
|
|
IVolZmap* pVZM = GetVolZmap( pGeomDB->GetGeoObj( nVolZMapId)) ;
|
|
bool bOk = ( pVZM != nullptr) ;
|
|
// recupero il riferimento locale
|
|
Frame3d frLoc ;
|
|
bOk = bOk && pGeomDB->GetGlobFrame( nVolZMapId, frLoc) ;
|
|
// porto in locale la normale al piano
|
|
Vector3d vtDirL = GetVectorLocal( pGeomDB, vtDir, nRefType, frLoc) ;
|
|
// Aggiorno lo ZMap mediante rimozione delle alette
|
|
bOk = bOk && pVZM->RemoveFins( vtDirL, dThick) ;
|
|
// Se richiesto salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtVolZMapRemoveFins(" + ToString( nVolZMapId) + "," +
|
|
ToString( vtDir) + "," +
|
|
ToString( dThick) + "," +
|
|
RefTypeToString( nRefType) + ")" +
|
|
" -- bOk =" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
return bOk ;
|
|
}
|