1c49379ee1
- aggiunta modalità per IntersLineCyl - spostate funzioni relative - cambiuo versione.
72 lines
3.6 KiB
C
72 lines
3.6 KiB
C
//----------------------------------------------------------------------------
|
|
// EgalTech 2023-2023
|
|
//----------------------------------------------------------------------------
|
|
// File : IntersLineCyl.h Data : 16.05.23 Versione : 2.5e3
|
|
// Contenuto : Dichiarazione funzioni base per intersezione linea/cilindro.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 16.05.23 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "/EgtDev/Include/EGkPoint3d.h"
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Linea e cilindro sono nel medesimo riferimento.
|
|
// Il cilindro è centrato sull'asse Z e appoggiato sul piano XY.
|
|
// Con intersezione viene restituito true e i parametri in dU1 e dU2.
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
IntersLineCyl( const Point3d& ptP, const Vector3d& vtV, double dH, double dRad, bool bTapLow, bool bTapUp,
|
|
double& dU1, Point3d& ptInt1, Vector3d& vtN1, double& dU2, Point3d& ptInt2, Vector3d& vtN2, bool bIgnoreTap = false, bool bInvertNormals = false) ;
|
|
|
|
// come sopra ma passo il riferimento intrinseco del cilindro in cui portare la linea
|
|
bool
|
|
IntersLineCyl( const Point3d& ptLineSt, const Vector3d& vtLineDir,
|
|
const Frame3d& CylFrame, double dH, double dRad, bool bTapLow, bool bTapUp,
|
|
double& dU1, Point3d& ptInt1, Vector3d& vtN1, double& dU2, Point3d& ptInt2, Vector3d& vtN2, bool bIgnoreTap = false, bool bInvertNormals = false) ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
inline bool
|
|
TestIntersLineCyl( const Point3d& ptL, const Vector3d& vtL,
|
|
double dRad, double dHeight)
|
|
{
|
|
Point3d ptInt1, ptInt2 ;
|
|
Vector3d vtN1, vtN2 ;
|
|
double dU1, dU2 ;
|
|
bool bTapLow = false, bTapUp = false ;
|
|
bool bIgnoreTap = true ;
|
|
return IntersLineCyl( ptL, vtL, dHeight, dRad, bTapLow, bTapUp, dU1, ptInt1, vtN1, dU2, ptInt2, vtN2, bIgnoreTap) ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Linea e cilindro sono nel medesimo riferimento.
|
|
// Il cilindro è definito con centro della base, asse raggio e altezza.
|
|
// In caso di intersezione viene restituito true e i parametri in dU1 e dU2.
|
|
//----------------------------------------------------------------------------
|
|
bool IntersLineCyl( const Point3d& ptL, const Vector3d& vtL,
|
|
const Point3d& ptCyl, const Vector3d& vtCyl, double dRad, double dHeight,
|
|
double& dU1, double& dU2) ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Linea e cilindro sono nel medesimo riferimento.
|
|
// Il cilindro è definito con centri delle due basi, e raggio.
|
|
// In caso di intersezione viene restituito true e i parametri in dU1 e dU2.
|
|
//----------------------------------------------------------------------------
|
|
bool IntersLineCyl( const Point3d& ptL, const Vector3d& vtL,
|
|
const Point3d& ptCyl1, const Point3d& ptCyl2, double dRad,
|
|
double& dU1, double& dU2) ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// // Linea e cilindro sono nel medesimo riferimento.
|
|
// Il cilindro è definito con raggio e altezza. ( la linea è già nel riferimento intrinseco del cilindro)
|
|
// In caso di intersezione viene restituito true e i parametri in dU1 e dU2.
|
|
//----------------------------------------------------------------------------
|
|
bool IntersLineCyl( const Point3d& ptL, const Vector3d& vtL,
|
|
double dRad, double dHeight,
|
|
double& dU1, double& dU2) ;
|