Files
EgtGeomKernel/CAvToolSurfTm.cpp
T
Dario Sassi 3a3c591771 EgtGeomKernel 1.9e1 :
- prima versione di Collision Avoiding per Utensili rispetto a Superfici TriMesh.
2018-04-30 14:36:00 +00:00

79 lines
2.3 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2018-2018
//----------------------------------------------------------------------------
// File : CAToolSurfTm.cpp Data : 27.04.18 Versione : 1.9e1
// Contenuto : Implementazione della classe CAToolSurfTm.
//
//
//
// Modifiche : 27.04.18 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
#include "stdafx.h"
#include "CAvToolTriangle.h"
#include "CAvToolSurfTm.h"
using namespace std ;
//----------------------------------------------------------------------------
ICAvToolSurfTm*
CreateCAvToolSurfTm( void)
{
return static_cast<ICAvToolSurfTm*> ( new(nothrow) CAvToolSurfTm) ;
}
//----------------------------------------------------------------------------
// CAvToolSurfTm
//----------------------------------------------------------------------------
CAvToolSurfTm::CAvToolSurfTm( void)
: m_pSTm( nullptr)
{
}
//----------------------------------------------------------------------------
bool
CAvToolSurfTm::SetSurfTm( const ISurfTriMesh& Stm)
{
m_pSTm = GetBasicSurfTriMesh( &Stm) ;
return ( m_pSTm != nullptr && m_pSTm->IsValid()) ;
}
//----------------------------------------------------------------------------
bool
CAvToolSurfTm::SetMoveDir( const Vector3d& vtMove)
{
return m_frMove.Set( ORIG, vtMove) ;
}
//----------------------------------------------------------------------------
bool
CAvToolSurfTm::SetStdTool( double dH, double dR, double dCornR)
{
return m_Tool.SetStdTool( "", dH, dR, dCornR, 0) ;
}
//----------------------------------------------------------------------------
double
CAvToolSurfTm::TestPosition( const Point3d& ptT, const Vector3d& vtDir)
{
double dTotDist = 0 ;
Point3d ptCurr = ptT ;
Triangle3d Tria ;
for ( int nTria = m_pSTm->GetFirstTriangle( Tria) ;
nTria != SVT_NULL ;
nTria = m_pSTm->GetNextTriangle( nTria, Tria)) {
double dDist = CAvToolTriangle( m_Tool, ptCurr, vtDir, Tria, m_frMove.VersZ()) ;
if ( dDist < - EPS_SMALL)
return dDist ;
if ( dDist > EPS_SMALL) {
dTotDist += dDist ;
ptCurr += dDist * m_frMove.VersZ() ;
}
}
return dTotDist ;
}