//---------------------------------------------------------------------------- // 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) ;