EgtGeomKernel :

- in CAvToolSurfTm eliminata SetMoveDir e aggiunto parametro equivalente in TestPosition e TestPath
- in VolZmap migliorato calcolo BBox del movimento utensile.
This commit is contained in:
Dario Sassi
2019-01-02 18:45:09 +00:00
parent 6a716b84e4
commit 5b2788115c
6 changed files with 138 additions and 207 deletions
+24 -25
View File
@@ -49,13 +49,6 @@ CAvToolSurfTm::SetSurfTm( const ISurfTriMesh& 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)
@@ -86,8 +79,17 @@ CAvToolSurfTm::SetGenTool( const ICurveComposite* pToolOutline)
//----------------------------------------------------------------------------
bool
CAvToolSurfTm::TestPosition( const Point3d& ptT, const Vector3d& vtDir, double& dTotDist)
CAvToolSurfTm::TestPosition( const Point3d& ptT, const Vector3d& vtDir, const Vector3d& vtMove, double& dTotDist)
{
// Se utensile non definito, errore
if ( m_Tool.GetType() == Tool::UNDEF)
return false ;
// Imposto il riferimento di movimento
if ( ! AreSameOrOppositeVectorApprox( vtDir, vtMove))
m_frMove.Set( ORIG, vtMove, vtDir) ;
else
m_frMove.Set( ORIG, vtMove, vtDir) ;
// Eseguo controllo
Point3d ptCurr = ptT ;
dTotDist = MyTestPosition( ptCurr, vtDir) ;
return ( dTotDist > - EPS_SMALL) ;
@@ -95,7 +97,7 @@ CAvToolSurfTm::TestPosition( const Point3d& ptT, const Vector3d& vtDir, double&
//----------------------------------------------------------------------------
bool
CAvToolSurfTm::TestPath( PNTULIST& lPntM, const Vector3d& vtDir, double dLinTol)
CAvToolSurfTm::TestPath( PNTULIST& lPntM, const Vector3d& vtDir, const Vector3d& vtMove, double dLinTol)
{
// Se utensile non definito, errore
if ( m_Tool.GetType() == Tool::UNDEF)
@@ -103,6 +105,11 @@ CAvToolSurfTm::TestPath( PNTULIST& lPntM, const Vector3d& vtDir, double dLinTol)
// Se lista vuota, non devo fare alcunché
if ( lPntM.empty())
return true ;
// Imposto il riferimento di movimento
if ( ! AreSameOrOppositeVectorApprox( vtDir, vtMove))
m_frMove.Set( ORIG, vtMove, vtDir) ;
else
m_frMove.Set( ORIG, vtMove) ;
// Predispongo Hash Grid
if ( ! PrepareHashGrid())
return false ;
@@ -269,32 +276,24 @@ CAvToolSurfTm::MyTestPositionHG( Point3d& ptT, const Vector3d& vtDir)
{
// calcolo box utensile nel riferimento di movimento
BBox3d b3Tool ;
Point3d ptTL = ptT ; ptTL.ToLoc( m_frMove) ;
Vector3d vtDirL = vtDir ; vtDirL.ToLoc( m_frMove) ;
b3Tool.Add( ptTL) ;
b3Tool.Add( ptTL - vtDirL * m_Tool.GetHeigth()) ;
if ( AreSameOrOppositeVectorApprox( vtDir, m_frMove.VersX())) {
Point3d ptTL = ptT ; ptTL.ToLoc( m_frMove) ;
Vector3d vtDirL = vtDir ; vtDirL.ToLoc( m_frMove) ;
b3Tool.Add( ptTL) ;
b3Tool.Add( ptTL - vtDirL * m_Tool.GetHeigth()) ;
b3Tool.Expand( 0, m_Tool.GetRadius(), m_Tool.GetRadius()) ;
}
else if ( AreSameOrOppositeVectorApprox( vtDir, m_frMove.VersY())) {
Point3d ptTL = ptT ; ptTL.ToLoc( m_frMove) ;
Vector3d vtDirL = vtDir ; vtDirL.ToLoc( m_frMove) ;
b3Tool.Add( ptTL) ;
b3Tool.Add( ptTL - vtDirL * m_Tool.GetHeigth()) ;
b3Tool.Expand( m_Tool.GetRadius(), 0, m_Tool.GetRadius()) ;
}
else if ( AreSameOrOppositeVectorApprox( vtDir, m_frMove.VersZ())) {
Point3d ptTL = ptT ; ptTL.ToLoc( m_frMove) ;
Vector3d vtDirL = vtDir ; vtDirL.ToLoc( m_frMove) ;
b3Tool.Add( ptTL) ;
b3Tool.Add( ptTL - vtDirL * m_Tool.GetHeigth()) ;
b3Tool.Expand( m_Tool.GetRadius(), m_Tool.GetRadius(), 0) ;
}
else {
b3Tool.Add( ptT) ;
b3Tool.Add( ptT - vtDir * m_Tool.GetHeigth()) ;
b3Tool.Expand( m_Tool.GetRadius(), m_Tool.GetRadius(), 0) ;
b3Tool.ToLoc( m_frMove) ;
double dExpandX = m_Tool.GetRadius() * sqrt( 1 - vtDirL.x * vtDirL.x) ;
double dExpandY = m_Tool.GetRadius() * sqrt( 1 - vtDirL.y * vtDirL.y) ;
double dExpandZ = m_Tool.GetRadius() * sqrt( 1 - vtDirL.z * vtDirL.z) ;
b3Tool.Expand( dExpandX, dExpandY, dExpandZ) ;
}
// ciclo sui triangoli che intersecano box in 2d
double dTotDist = 0 ;