3a3c591771
- prima versione di Collision Avoiding per Utensili rispetto a Superfici TriMesh.
79 lines
2.3 KiB
C++
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 ;
|
|
}
|
|
|