EgtMachKernel 1.6f2 :
- aggiunto UserObj CamData per rappresentare dati tipo CL in entità geometriche - possibilità di ruotare i sottopezzi - aggiunto calcolo percorsi di lavorazione di fori - aggiunte prime versioni parziali di taglio con lama e fresatura.
This commit is contained in:
+463
@@ -0,0 +1,463 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2015-2015
|
||||
//----------------------------------------------------------------------------
|
||||
// File : CamData.cpp Data : 10.06.15 Versione : 1.6f2
|
||||
// Contenuto : Implementazione informazioni Cam di ogni movimento.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 10.06.15 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//--------------------------- Include ----------------------------------------
|
||||
#include "stdafx.h"
|
||||
#include "CamData.h"
|
||||
#include "/EgtDev/Include/EGkGeomDB.h"
|
||||
#include "/EgtDev/Include/EGkUserObjFactory.h"
|
||||
#include "/EgtDev/Include/EGkStringUtils3d.h"
|
||||
#include "/EgtDev/Include/EGnStringKeyVal.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static int CAM_TOTPARAM = 8 ;
|
||||
static std::string CAM_ORID = "OrId" ;
|
||||
static std::string CAM_CORR = "Corr" ;
|
||||
static std::string CAM_TDIR = "TDir" ;
|
||||
static std::string CAM_CDIR = "CDir" ;
|
||||
static std::string CAM_ADIR = "ADir" ;
|
||||
static std::string CAM_PBAS = "PBas" ;
|
||||
static std::string CAM_FEED = "Feed" ;
|
||||
static std::string CAM_FLAG = "Flg" ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
USEROBJ_REGISTER( "EMkCamData", CamData) ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
const string&
|
||||
CamData::GetClassName( void) const
|
||||
{
|
||||
return USEROBJ_GETNAME( CamData) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
CamData*
|
||||
CamData::Clone( void) const
|
||||
{
|
||||
// alloco oggetto
|
||||
CamData* pCam = new(nothrow) CamData ;
|
||||
// eseguo copia dei dati
|
||||
if ( pCam != nullptr) {
|
||||
try {
|
||||
pCam->m_nOwnerId = GDB_ID_NULL ;
|
||||
pCam->m_pGeomDB = nullptr ;
|
||||
pCam->m_OriId = m_OriId ;
|
||||
pCam->m_nCorre = m_nCorre ;
|
||||
pCam->m_vtTool = m_vtTool ;
|
||||
pCam->m_vtCorr = m_vtCorr ;
|
||||
pCam->m_vtAux = m_vtAux ;
|
||||
pCam->m_dFeed = m_dFeed ;
|
||||
pCam->m_nFlag = m_nFlag ;
|
||||
}
|
||||
catch( ...) {
|
||||
delete pCam ;
|
||||
return nullptr ;
|
||||
}
|
||||
}
|
||||
// ritorno l'oggetto
|
||||
return pCam ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::Dump( string& sOut, const char* szNewLine) const
|
||||
{
|
||||
sOut += GetClassName() + szNewLine ;
|
||||
sOut += CAM_ORID + "=" + ToString( m_OriId) + szNewLine ;
|
||||
sOut += CAM_CORR + "=" + ToString( m_nCorre) + szNewLine ;
|
||||
sOut += CAM_TDIR + "=" + ToString( m_vtTool) + szNewLine ;
|
||||
sOut += CAM_CDIR + "=" + ToString( m_vtCorr) + szNewLine ;
|
||||
sOut += CAM_ADIR + "=" + ToString( m_vtAux) + szNewLine ;
|
||||
sOut += CAM_PBAS + "=" + ToString( m_ptBase) + szNewLine ;
|
||||
sOut += CAM_FEED + "=" + ToString( m_dFeed) + szNewLine ;
|
||||
sOut += CAM_FLAG + "=" + ToString( m_nFlag) + szNewLine ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::SetOwner( int nId, IGeomDB* pGDB)
|
||||
{
|
||||
m_nOwnerId = nId ;
|
||||
m_pGeomDB = pGDB ;
|
||||
return ( m_nOwnerId != GDB_ID_NULL && m_pGeomDB != nullptr) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
CamData::GetOwner( void) const
|
||||
{
|
||||
return m_nOwnerId ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
IGeomDB*
|
||||
CamData::GetGeomDB( void) const
|
||||
{
|
||||
return m_pGeomDB ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::Save( STRVECTOR& vString) const
|
||||
{
|
||||
try {
|
||||
vString.insert( vString.begin(), CAM_TOTPARAM, "") ;
|
||||
int k = - 1 ;
|
||||
vString[++k] = CAM_ORID + "=" + ToString( m_OriId) ;
|
||||
vString[++k] = CAM_CORR + "=" + ToString( m_nCorre) ;
|
||||
vString[++k] = CAM_TDIR + "=" + ToString( m_vtTool) ;
|
||||
vString[++k] = CAM_CDIR + "=" + ToString( m_vtCorr) ;
|
||||
vString[++k] = CAM_ADIR + "=" + ToString( m_vtAux) ;
|
||||
vString[++k] = CAM_PBAS + "=" + ToString( m_ptBase) ;
|
||||
vString[++k] = CAM_FEED + "=" + ToString( m_dFeed) ;
|
||||
vString[++k] = CAM_FLAG + "=" + ToString( m_nFlag) ;
|
||||
}
|
||||
catch( ...) {
|
||||
return false ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::Load( const STRVECTOR& vString)
|
||||
{
|
||||
if ( int( vString.size()) < CAM_TOTPARAM)
|
||||
return false ;
|
||||
int k = - 1 ;
|
||||
if ( ! GetVal( vString[++k], CAM_ORID, m_OriId) ||
|
||||
! GetVal( vString[++k], CAM_CORR, m_nCorre) ||
|
||||
! GetVal( vString[++k], CAM_TDIR, m_vtTool) ||
|
||||
! GetVal( vString[++k], CAM_CDIR, m_vtCorr) ||
|
||||
! GetVal( vString[++k], CAM_ADIR, m_vtAux) ||
|
||||
! GetVal( vString[++k], CAM_PBAS, m_ptBase) ||
|
||||
! GetVal( vString[++k], CAM_FEED, m_dFeed) ||
|
||||
! GetVal( vString[++k], CAM_FLAG, m_nFlag))
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::GetDrawPolyLines( POLYLINELIST& lstPL) const
|
||||
{
|
||||
bool bToDraw = false ;
|
||||
// se vettore fresa non nullo
|
||||
if ( ! m_vtTool.IsSmall()) {
|
||||
bToDraw = true ;
|
||||
// aggiungo polilinea alla lista
|
||||
lstPL.emplace_back() ;
|
||||
PolyLine& PL = lstPL.back() ;
|
||||
// dimensioni
|
||||
const double TLEN = 40 ;
|
||||
const double ALEN = 4 ;
|
||||
// inserisco disegno nella polilinea
|
||||
PL.AddUPoint( 0, m_ptBase) ;
|
||||
Point3d ptTip = m_ptBase + m_vtTool * TLEN ;
|
||||
PL.AddUPoint( 1, ptTip) ;
|
||||
// aggiungo simil-freccia
|
||||
Frame3d frF ;
|
||||
frF.Set( ptTip, m_vtTool) ;
|
||||
Point3d ptP2 = ORIG + Vector3d( ALEN, 0, -ALEN) ;
|
||||
ptP2.ToGlob( frF) ;
|
||||
PL.AddUPoint( 2, ptP2) ;
|
||||
Point3d ptP3 = ORIG + Vector3d( -ALEN, 0, -ALEN) ;
|
||||
ptP3.ToGlob( frF) ;
|
||||
PL.AddUPoint( 3, ptP3) ;
|
||||
PL.AddUPoint( 4, ptTip) ;
|
||||
Point3d ptP5 = ORIG + Vector3d( 0, ALEN, -ALEN) ;
|
||||
ptP5.ToGlob( frF) ;
|
||||
PL.AddUPoint( 5, ptP5) ;
|
||||
Point3d ptP6 = ORIG + Vector3d( 0, -ALEN, -ALEN) ;
|
||||
ptP6.ToGlob( frF) ;
|
||||
PL.AddUPoint( 6, ptP6) ;
|
||||
PL.AddUPoint( 6, ptTip) ;
|
||||
}
|
||||
// se vettore correzione non nullo
|
||||
if ( ! m_vtCorr.IsSmall()) {
|
||||
bToDraw = true ;
|
||||
// aggiungo polilinea alla lista
|
||||
lstPL.emplace_back() ;
|
||||
PolyLine& PL = lstPL.back() ;
|
||||
// dimensioni
|
||||
const double CLEN = 20 ;
|
||||
const double ALEN = 2 ;
|
||||
// inserisco disegno nella polilinea
|
||||
PL.AddUPoint( 0, m_ptBase) ;
|
||||
Point3d ptTip = m_ptBase + m_vtCorr * CLEN ;
|
||||
PL.AddUPoint( 1, ptTip) ;
|
||||
// aggiungo simil-freccia
|
||||
Frame3d frF ;
|
||||
if ( m_vtTool. IsSmall())
|
||||
frF.Set( ptTip, m_vtCorr) ;
|
||||
else
|
||||
frF.Set( ptTip, m_vtCorr, m_vtTool) ;
|
||||
Point3d ptP2 = ORIG + Vector3d( 0, ALEN, 0) ;
|
||||
ptP2.ToGlob( frF) ;
|
||||
PL.AddUPoint( 2, ptP2) ;
|
||||
Point3d ptP3 = ORIG + Vector3d( 0, ALEN, - ALEN) ;
|
||||
ptP3.ToGlob( frF) ;
|
||||
PL.AddUPoint( 3, ptP3) ;
|
||||
Point3d ptP4 = ORIG + Vector3d( 0, 0, - ALEN) ;
|
||||
ptP4.ToGlob( frF) ;
|
||||
PL.AddUPoint( 4, ptP4) ;
|
||||
}
|
||||
// se vettore ausiliario non nullo
|
||||
if ( ! m_vtAux.IsSmall()) {
|
||||
bToDraw = true ;
|
||||
// aggiungo polilinea alla lista
|
||||
lstPL.emplace_back() ;
|
||||
PolyLine& PL = lstPL.back() ;
|
||||
// dimensioni
|
||||
const double CLEN = 20 ;
|
||||
const double ALEN = 2 ;
|
||||
// inserisco disegno nella polilinea
|
||||
PL.AddUPoint( 0, m_ptBase) ;
|
||||
Point3d ptTip = m_ptBase + m_vtAux * CLEN ;
|
||||
PL.AddUPoint( 1, ptTip) ;
|
||||
// aggiungo simil-freccia
|
||||
Frame3d frF ;
|
||||
if ( m_vtTool. IsSmall())
|
||||
frF.Set( ptTip, m_vtAux) ;
|
||||
else
|
||||
frF.Set( ptTip, m_vtAux, m_vtTool) ;
|
||||
Point3d ptP2 = ORIG + Vector3d( 0, ALEN, - 0.5 * ALEN) ;
|
||||
ptP2.ToGlob( frF) ;
|
||||
PL.AddUPoint( 2, ptP2) ;
|
||||
Point3d ptP3 = ORIG + Vector3d( 0, 0, - ALEN) ;
|
||||
ptP3.ToGlob( frF) ;
|
||||
PL.AddUPoint( 3, ptP3) ;
|
||||
}
|
||||
|
||||
return bToDraw ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::Translate( const Vector3d& vtMove)
|
||||
{
|
||||
m_ptBase.Translate( vtMove) ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng)
|
||||
{
|
||||
if ( ! m_ptBase.Rotate( ptAx, vtAx, dCosAng, dSinAng))
|
||||
return false ;
|
||||
if ( ! m_vtTool.Rotate( vtAx, dCosAng, dSinAng))
|
||||
return false ;
|
||||
if ( ! m_vtCorr.Rotate( vtAx, dCosAng, dSinAng))
|
||||
return false ;
|
||||
if ( ! m_vtAux.Rotate( vtAx, dCosAng, dSinAng))
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ)
|
||||
{
|
||||
if ( ! m_ptBase.Scale( frRef, dCoeffX, dCoeffY, dCoeffZ))
|
||||
return false ;
|
||||
if ( ! m_vtTool.IsSmall()) {
|
||||
if ( ! m_vtTool.Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) || ! m_vtTool.Normalize())
|
||||
return false ;
|
||||
}
|
||||
if ( ! m_vtCorr.IsSmall()) {
|
||||
double dLen = m_vtCorr.Len() ;
|
||||
if ( ! m_vtCorr.Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) || ! m_vtCorr.Normalize())
|
||||
return false ;
|
||||
m_vtCorr *= dLen ;
|
||||
}
|
||||
if ( ! m_vtAux.IsSmall()) {
|
||||
if ( ! m_vtAux.Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) || ! m_vtAux.Normalize())
|
||||
return false ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::Mirror( const Point3d& ptOn, const Vector3d& vtNorm)
|
||||
{
|
||||
if ( ! m_ptBase.Mirror( ptOn, vtNorm))
|
||||
return false ;
|
||||
if ( ! m_vtTool.Mirror( vtNorm))
|
||||
return false ;
|
||||
if ( ! m_vtCorr.Mirror( vtNorm))
|
||||
return false ;
|
||||
if ( ! m_vtAux.Mirror( vtNorm))
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::Shear( const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff)
|
||||
{
|
||||
if ( ! m_ptBase.Shear( ptOn, vtNorm, vtDir, dCoeff))
|
||||
return false ;
|
||||
if ( ! m_vtTool.IsSmall()) {
|
||||
if ( ! m_vtTool.Shear( vtNorm, vtDir, dCoeff) || ! m_vtTool.Normalize())
|
||||
return false ;
|
||||
}
|
||||
if ( ! m_vtCorr.IsSmall()) {
|
||||
double dLen = m_vtCorr.Len() ;
|
||||
if ( ! m_vtCorr.Shear( vtNorm, vtDir, dCoeff) || ! m_vtCorr.Normalize())
|
||||
return false ;
|
||||
m_vtCorr *= dLen ;
|
||||
}
|
||||
if ( ! m_vtAux.IsSmall()) {
|
||||
if ( ! m_vtAux.Shear( vtNorm, vtDir, dCoeff) || ! m_vtAux.Normalize())
|
||||
return false ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::ToGlob( const Frame3d& frRef)
|
||||
{
|
||||
if ( ! m_ptBase.ToGlob( frRef))
|
||||
return false ;
|
||||
if ( ! m_vtTool.ToGlob( frRef))
|
||||
return false ;
|
||||
if ( ! m_vtCorr.ToGlob( frRef))
|
||||
return false ;
|
||||
if ( ! m_vtAux.ToGlob( frRef))
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::ToLoc( const Frame3d& frRef)
|
||||
{
|
||||
if ( ! m_ptBase.ToLoc( frRef))
|
||||
return false ;
|
||||
if ( ! m_vtTool.ToLoc( frRef))
|
||||
return false ;
|
||||
if ( ! m_vtCorr.ToLoc( frRef))
|
||||
return false ;
|
||||
if ( ! m_vtAux.ToLoc( frRef))
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::LocToLoc( const Frame3d& frOri, const Frame3d& frDest)
|
||||
{
|
||||
if ( ! m_ptBase.LocToLoc( frOri, frDest))
|
||||
return false ;
|
||||
if ( ! m_vtTool.LocToLoc( frOri, frDest))
|
||||
return false ;
|
||||
if ( ! m_vtCorr.LocToLoc( frOri, frDest))
|
||||
return false ;
|
||||
if ( ! m_vtAux.LocToLoc( frOri, frDest))
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//----------------------------------------------------------------------------
|
||||
CamData::CamData( void)
|
||||
{
|
||||
m_nOwnerId = GDB_ID_NULL ;
|
||||
m_pGeomDB = nullptr ;
|
||||
m_OriId = SelData() ;
|
||||
m_nCorre = 0 ;
|
||||
m_dFeed = 0 ;
|
||||
m_nFlag = 0 ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::SetOrigId( SelData Id)
|
||||
{
|
||||
m_OriId = Id ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::SetToolDir( const Vector3d& vtDir)
|
||||
{
|
||||
m_vtTool = vtDir ;
|
||||
ResetObjGraphics() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::SetCorrDir( const Vector3d& vtDir)
|
||||
{
|
||||
m_vtCorr = vtDir ;
|
||||
ResetObjGraphics() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::SetAuxDir( const Vector3d& vtDir)
|
||||
{
|
||||
m_vtAux = vtDir ;
|
||||
ResetObjGraphics() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::SetBasePoint( const Point3d& ptBase)
|
||||
{
|
||||
m_ptBase = ptBase ;
|
||||
ResetObjGraphics() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::SetFeed( double dFeed)
|
||||
{
|
||||
m_dFeed = dFeed ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CamData::SetFlag( int nFlag)
|
||||
{
|
||||
m_nFlag = nFlag ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void
|
||||
CamData::ResetObjGraphics( void)
|
||||
{
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return ;
|
||||
IGeoObj* pGeo = m_pGeomDB->GetGeoObj( m_nOwnerId) ;
|
||||
if ( pGeo == nullptr)
|
||||
return ;
|
||||
IObjGraphics* pGraph = pGeo->GetObjGraphics() ;
|
||||
if ( pGraph == nullptr)
|
||||
return ;
|
||||
pGraph->Reset() ;
|
||||
}
|
||||
Reference in New Issue
Block a user