diff --git a/EGkTriangle3d.h b/EGkTriangle3d.h index 63cd81e..56e4516 100644 --- a/EGkTriangle3d.h +++ b/EGkTriangle3d.h @@ -52,14 +52,47 @@ class Triangle3d vtV.Normalize() ; return AreSameVectorApprox( vtV, vtN) ; } + void Translate( const Vector3d& vtMove) + { ptP[0].Translate( vtMove) ; + ptP[1].Translate( vtMove) ; + ptP[2].Translate( vtMove) ; + } + bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngDeg) + { double dAngRad = dAngDeg * DEGTORAD ; + return Rotate( ptAx, vtAx, cos( dAngRad), sin( dAngRad)) ; } + bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng) + { ptP[0].Rotate( ptAx, vtAx, dCosAng, dSinAng) ; + ptP[1].Rotate( ptAx, vtAx, dCosAng, dSinAng) ; + ptP[2].Rotate( ptAx, vtAx, dCosAng, dSinAng) ; + vtN.Rotate( vtAx, dCosAng, dSinAng) ; + } + bool Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ) + { ptP[0].Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) ; + ptP[1].Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) ; + ptP[2].Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) ; + Validate( true) ; + } + bool Mirror( const Point3d& ptOn, const Vector3d& vtNorm) + { ptP[0].Mirror( ptOn, vtNorm) ; + ptP[1].Mirror( ptOn, vtNorm) ; + ptP[2].Mirror( ptOn, vtNorm) ; + Validate( true) ; + } + bool Shear( const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff) + { ptP[0].Shear( ptOn, vtNorm, vtDir, dCoeff) ; + ptP[1].Shear( ptOn, vtNorm, vtDir, dCoeff) ; + ptP[2].Shear( ptOn, vtNorm, vtDir, dCoeff) ; + Validate( true) ; + } bool ToGlob( const Frame3d& frRef) - { return ( ptP[0].ToGlob( frRef) && ptP[1].ToGlob( frRef) && ptP[2].ToGlob( frRef)) ; } + { return ( ptP[0].ToGlob( frRef) && ptP[1].ToGlob( frRef) && ptP[2].ToGlob( frRef) && vtN.ToGlob( frRef)) ; } bool ToLoc( const Frame3d& frRef) - { return ( ptP[0].ToLoc( frRef) && ptP[1].ToLoc( frRef) && ptP[2].ToLoc( frRef)) ; } + { return ( ptP[0].ToLoc( frRef) && ptP[1].ToLoc( frRef) && ptP[2].ToLoc( frRef) && vtN.ToLoc( frRef)) ; } bool LocToLoc( const Frame3d& frOri, const Frame3d& frDest) { return ( ptP[0].LocToLoc( frOri, frDest) && ptP[1].LocToLoc( frOri, frDest) && - ptP[2].LocToLoc( frOri, frDest)) ; } + ptP[2].LocToLoc( frOri, frDest) && + vtN.LocToLoc( frOri, frDest)) ; } const Point3d& GetP( int nId) const { if ( nId >= 0 && nId < 3) return ptP[nId] ;