00001
00011
00012
00013 #if (_MSC_VER > 1000) || defined(SGI_COMPILER)
00014 #pragma once
00015 #endif
00016
00017 #ifndef __XSIVECTOR3_H__
00018 #define __XSIVECTOR3_H__
00019
00020 #include "sicppsdk.h"
00021 #include "xsi_status.h"
00022 #include "xsi_matrix3.h"
00023 #include "xsi_matrix4.h"
00024 #include <math.h>
00025
00026
00027
00028
00029 #ifdef _DEBUG_NonInitialized_CVector3
00030 #define MAGIC_DEBUG_VALUE ((double)0x5555555555555555)
00031 #define XSI_DEBUG_VECTOR3 SelfDebug();
00032 #else
00033 #define XSI_DEBUG_VECTOR3
00034 #endif
00035
00036
00037 namespace XSI {
00038
00039 namespace MATH {
00040
00041 class CTransformation;
00042 class CMatrix3;
00043 class CMatrix4;
00044
00045
00099
00100 class SICPPSDKDECL CVector3
00101 {
00102 public:
00104 SICPPSDK_INLINE CVector3();
00105
00111 SICPPSDK_INLINE CVector3(double in_dX, double in_dY, double in_dZ);
00112
00116 SICPPSDK_INLINE CVector3( const CVector3& in_vector3);
00117
00119 SICPPSDK_INLINE ~CVector3();
00120
00125 SICPPSDK_INLINE CVector3 & operator=( const CVector3 & in_vector3 );
00126
00132 SICPPSDK_INLINE bool operator ==(const CVector3 & in_vector3 )const;
00133
00139 SICPPSDK_INLINE bool operator !=(const CVector3 & in_vector3 )const;
00140
00145 SICPPSDK_INLINE CVector3& operator ~();
00146
00152 SICPPSDK_INLINE CVector3& operator +=(const CVector3& in_vector3);
00153
00159 SICPPSDK_INLINE CVector3& operator -=(const CVector3 & in_vector3);
00160
00161
00167 SICPPSDK_INLINE CVector3& operator *=(const CMatrix3& in_matrix3);
00168
00174 SICPPSDK_INLINE CVector3& operator *=(const CMatrix4& in_matrix4);
00175
00181 SICPPSDK_INLINE CVector3& operator *=(const CTransformation& in_transformation);
00182
00188 SICPPSDK_INLINE CVector3& operator *=(const double& in_dAlpha);
00189
00195 SICPPSDK_INLINE double operator[](const short& in_sIndex);
00196
00201 SICPPSDK_INLINE CVector3& MulByMatrix3InPlace(const CMatrix3& in_matrix3);
00202
00208 SICPPSDK_INLINE CVector3& MulByMatrix3
00209 (
00210 const CVector3& in_vector3,
00211 const CMatrix3& in_matrix3
00212 );
00213
00218 SICPPSDK_INLINE CVector3& MulByMatrix4InPlace(const CMatrix4& in_matrix4);
00219
00225 SICPPSDK_INLINE CVector3& MulByMatrix4
00226 (
00227 const CVector3& in_vector3,
00228 const CMatrix4& in_matrix4
00229 );
00230
00235 SICPPSDK_INLINE CVector3& MulByTransformationInPlace
00236 (
00237 const CTransformation& in_transformation
00238 );
00239
00245 CVector3& MulByTransformation
00246 (
00247 const CVector3& in_vector3,
00248 const CTransformation& in_transformation
00249 );
00250
00254 SICPPSDK_INLINE CVector3& PutNull();
00255
00259 SICPPSDK_INLINE short GetMaxComponentIndex()const;
00260
00264 SICPPSDK_INLINE double GetMaxComponent()const;
00265
00269 SICPPSDK_INLINE short GetMinComponentIndex()const;
00270
00274 SICPPSDK_INLINE double GetMinComponent()const;
00275
00279 SICPPSDK_INLINE double GetLength()const;
00280
00284 SICPPSDK_INLINE double GetLengthSquared()const;
00285
00289 CStatus NormalizeInPlace();
00290
00295 CStatus Normalize(const CVector3& in_vector3);
00296
00301 SICPPSDK_INLINE double Dot(const CVector3& in_vector3)const;
00302
00303
00309 SICPPSDK_INLINE CVector3& Cross(const CVector3& in_vector3A, const CVector3& in_vector3B);
00310
00315 double GetAngle(const CVector3& in_vector3 )const;
00316
00325 SICPPSDK_INLINE CVector3& LinearlyInterpolate
00326 (
00327 const CVector3& in_vector3A,
00328 const CVector3& in_vector3B,
00329 double in_dAlpha
00330 );
00331
00335 CVector3& AbsoluteInPlace();
00336
00342 CVector3& Absolute(const CVector3& in_vector3);
00343
00349 CVector3& ClampInPlace(double in_dMinValue, double in_dMaxValue);
00350
00358 SICPPSDK_INLINE CVector3& Clamp
00359 (
00360 double in_dMinValue,
00361 double in_dMaxValue,
00362 const CVector3& in_vector3
00363 );
00364
00371 SICPPSDK_INLINE bool EpsilonEquals
00372 (
00373 const CVector3& in_vector3,
00374 double in_dEpsilon
00375 )const;
00376
00381 SICPPSDK_INLINE bool Equals(const CVector3& in_vector3)const;
00382
00383
00390 SICPPSDK_INLINE CVector3& ScaleAddInPlace(double in_dS,const CVector3& in_vector3);
00391
00399 SICPPSDK_INLINE CVector3& ScaleAdd
00400 (
00401 double in_dS,
00402 const CVector3& in_vector3A,
00403 const CVector3& in_vector3B
00404 );
00405
00410 SICPPSDK_INLINE CVector3& ScaleInPlace(double in_dAlpha);
00411
00417 SICPPSDK_INLINE CVector3& Scale(double in_dAlpha, const CVector3& in_vector3);
00418
00422 SICPPSDK_INLINE CVector3& NegateInPlace();
00423
00428 SICPPSDK_INLINE CVector3& Negate(const CVector3& in_vector3);
00429
00434 SICPPSDK_INLINE CVector3& SubInPlace(const CVector3&in_vector3);
00435
00442 SICPPSDK_INLINE CVector3& Sub(const CVector3& in_vector3A, const CVector3& in_vector3B);
00443
00448 SICPPSDK_INLINE CVector3& AddInPlace(const CVector3& in_vector3);
00449
00455 SICPPSDK_INLINE CVector3& Add(const CVector3& in_vector3A,const CVector3& in_vector3B);
00456
00462 void Get(double& io_dX, double& io_dY, double& io_dZ)const;
00463
00470 SICPPSDK_INLINE CVector3& Set(double in_dX, double in_dY, double in_dZ);
00471
00475 SICPPSDK_INLINE double GetZ()const;
00476
00481 SICPPSDK_INLINE CVector3& PutZ(double in_dZ);
00482
00486 SICPPSDK_INLINE double GetY()const;
00487
00492 SICPPSDK_INLINE CVector3& PutY(double in_dY);
00493
00497 SICPPSDK_INLINE double GetX()const;
00498
00503 SICPPSDK_INLINE CVector3& PutX(double in_dX);
00504
00505 #ifdef _DEBUG_NonInitialized_CVector3
00506 void DoDebugInit()
00507 {
00508 m_dX = MAGIC_DEBUG_VALUE;
00509 m_dY = MAGIC_DEBUG_VALUE;
00510 m_dZ = MAGIC_DEBUG_VALUE;
00511 }
00512
00513
00514 void SelfDebug() const
00515 {
00516 assert( m_dX != MAGIC_DEBUG_VALUE && m_dY != MAGIC_DEBUG_VALUE && m_dZ != MAGIC_DEBUG_VALUE );
00517 }
00518 #endif
00519
00520 private:
00521 double m_dX,m_dY,m_dZ;
00522 };
00523
00524
00525 SICPPSDK_INLINE CVector3::CVector3()
00526 {
00527 #ifdef _DEBUG_NonInitialized_CVector3
00528 DoDebugInit();
00529 #else
00530 m_dX = 0;
00531 m_dY = 0;
00532 m_dZ = 0;
00533 #endif
00534 }
00535
00536 SICPPSDK_INLINE CVector3::CVector3( const CVector3& in_vct )
00537 {
00538 in_vct.Get(m_dX,m_dY,m_dZ);
00539 }
00540
00541 SICPPSDK_INLINE CVector3::CVector3
00542 (
00543 double in_dX, double in_dY, double in_dZ
00544 ):m_dX(in_dX),m_dY(in_dY),m_dZ(in_dZ)
00545 {}
00546
00547 SICPPSDK_INLINE CVector3::~CVector3()
00548 {}
00549
00550 SICPPSDK_INLINE CVector3& CVector3::operator=( const CVector3 & in_vct )
00551 {
00552 in_vct.Get(m_dX,m_dY,m_dZ);
00553 return (*this);
00554 }
00555
00556 SICPPSDK_INLINE bool CVector3::operator ==(const CVector3 & in_vector3 )const
00557 {
00558 return Equals(in_vector3);
00559 }
00560
00561
00562 SICPPSDK_INLINE bool CVector3::operator !=(const CVector3 & in_vector3 )const
00563 {
00564 return ! Equals(in_vector3);
00565 }
00566
00567 SICPPSDK_INLINE CVector3& CVector3::operator ~()
00568 {
00569 return NegateInPlace();
00570 }
00571
00572 SICPPSDK_INLINE CVector3& CVector3::operator +=(const CVector3& in_vector3)
00573 {
00574 return AddInPlace(in_vector3);
00575 }
00576
00577 SICPPSDK_INLINE CVector3& CVector3::operator -=(const CVector3& in_vector3)
00578 {
00579 return SubInPlace(in_vector3);
00580 }
00581
00582 SICPPSDK_INLINE CVector3& CVector3::operator *=(const CMatrix3& in_matrix3)
00583 {
00584 return MulByMatrix3InPlace(in_matrix3);
00585 }
00586
00587 SICPPSDK_INLINE CVector3& CVector3::operator *=(const CMatrix4& in_matrix4)
00588 {
00589 return MulByMatrix4InPlace(in_matrix4);
00590 }
00591
00592 SICPPSDK_INLINE CVector3& CVector3::operator *=(const CTransformation& in_transformation)
00593 {
00594 return MulByTransformationInPlace(in_transformation);
00595 }
00596
00597 SICPPSDK_INLINE CVector3& CVector3::operator *=(const double& in_dAlpha)
00598 {
00599 return ScaleInPlace(in_dAlpha);
00600 }
00601
00602 SICPPSDK_INLINE double CVector3::operator[](const short& in_sIndex)
00603 {
00604 XSI_DEBUG_VECTOR3;
00605 assert(in_sIndex >= 0 && in_sIndex < 3);
00606 switch(in_sIndex)
00607 {
00608 case 0:
00609 return m_dX;
00610 break;
00611 case 1:
00612 return m_dY;
00613 break;
00614 case 2:
00615 return m_dZ;
00616 break;
00617 }
00618 return DBL_MAX;
00619 }
00620
00621 SICPPSDK_INLINE CVector3& CVector3::MulByMatrix3InPlace
00622 (
00623 const CMatrix3& in_matrix3
00624 )
00625 {
00626 XSI_DEBUG_VECTOR3;
00627 return MulByMatrix3((*this),in_matrix3);
00628 }
00629
00630 SICPPSDK_INLINE CVector3& CVector3::MulByMatrix3
00631 (
00632 const CVector3& in_vector3,
00633 const CMatrix3& in_matrix3
00634 )
00635 {
00636 double l_dX, l_dY,l_dZ;
00637 l_dX = in_vector3.GetX() * in_matrix3.GetValue(0,0) +
00638 in_vector3.GetY() * in_matrix3.GetValue(1,0) +
00639 in_vector3.GetZ() * in_matrix3.GetValue(2,0);
00640 l_dY = in_vector3.GetX() * in_matrix3.GetValue(0,1) +
00641 in_vector3.GetY() * in_matrix3.GetValue(1,1) +
00642 in_vector3.GetZ() * in_matrix3.GetValue(2,1);
00643 l_dZ = in_vector3.GetX() * in_matrix3.GetValue(0,2) +
00644 in_vector3.GetY() * in_matrix3.GetValue(1,2) +
00645 in_vector3.GetZ() * in_matrix3.GetValue(2,2);
00646
00647 return Set(l_dX,l_dY,l_dZ);
00648 }
00649
00650 SICPPSDK_INLINE CVector3& CVector3::MulByMatrix4InPlace
00651 (
00652 const CMatrix4& in_matrix4
00653 )
00654 {
00655 XSI_DEBUG_VECTOR3;
00656 return MulByMatrix4((*this),in_matrix4);
00657 }
00658
00659
00660 SICPPSDK_INLINE CVector3& CVector3::MulByMatrix4
00661 (
00662 const CVector3& in_vector3,
00663 const CMatrix4& in_matrix4
00664 )
00665 {
00666 double l_dX, l_dY, l_dZ, l_dW;
00667
00668 l_dX = in_vector3.GetX() * in_matrix4.GetValue( 0, 0 ) +
00669 in_vector3.GetY() * in_matrix4.GetValue( 1, 0 ) +
00670 in_vector3.GetZ() * in_matrix4.GetValue( 2, 0 ) +
00671 in_matrix4.GetValue( 3, 0 );
00672 l_dY = in_vector3.GetX() * in_matrix4.GetValue( 0, 1 ) +
00673 in_vector3.GetY() * in_matrix4.GetValue( 1, 1 ) +
00674 in_vector3.GetZ() * in_matrix4.GetValue( 2, 1 ) +
00675 in_matrix4.GetValue( 3, 1 );
00676 l_dZ = in_vector3.GetX() * in_matrix4.GetValue( 0, 2 ) +
00677 in_vector3.GetY() * in_matrix4.GetValue( 1, 2 ) +
00678 in_vector3.GetZ() * in_matrix4.GetValue( 2, 2 ) +
00679 in_matrix4.GetValue( 3, 2 );
00680 l_dW = in_vector3.GetX() * in_matrix4.GetValue( 0, 3 ) +
00681 in_vector3.GetY() * in_matrix4.GetValue( 1, 3 ) +
00682 in_vector3.GetZ() * in_matrix4.GetValue( 2, 3 ) +
00683 in_matrix4.GetValue( 3, 3 );
00684
00685 return Set(l_dX/l_dW, l_dY/l_dW, l_dZ/l_dW);
00686 }
00687
00688
00689 SICPPSDK_INLINE CVector3& CVector3::MulByTransformationInPlace
00690 (
00691 const CTransformation& in_crTrans
00692 )
00693 {
00694 XSI_DEBUG_VECTOR3;
00695 return MulByTransformation((*this), in_crTrans);;
00696 }
00697
00698
00699 SICPPSDK_INLINE CVector3& CVector3::PutNull()
00700 {
00701 m_dX = m_dY = m_dZ = 0.0;
00702 return (*this);
00703 }
00704
00705 SICPPSDK_INLINE short CVector3::GetMaxComponentIndex()const
00706 {
00707 XSI_DEBUG_VECTOR3;
00708 if( m_dX > m_dY )
00709 {
00710 return (short)(( m_dX > m_dZ ) ? 0 : 2);
00711 }
00712 else
00713 {
00714 return (short)(( m_dY > m_dZ ) ? 1 : 2);
00715 }
00716 }
00717
00718 SICPPSDK_INLINE double CVector3::GetMaxComponent()const
00719 {
00720 XSI_DEBUG_VECTOR3;
00721 if( m_dX > m_dY )
00722 {
00723 return ( m_dX > m_dZ ) ? m_dX : m_dZ;
00724 }
00725 else
00726 {
00727 return ( m_dY > m_dZ ) ? m_dY : m_dZ;
00728 }
00729 }
00730
00731 SICPPSDK_INLINE short CVector3::GetMinComponentIndex()const
00732 {
00733 XSI_DEBUG_VECTOR3;
00734 if( m_dX < m_dY )
00735 {
00736 return (short)(( m_dX < m_dZ ) ? 0 : 2);
00737 }
00738 else
00739 {
00740 return (short)(( m_dY < m_dZ ) ? 1 : 2);
00741 }
00742 }
00743
00744 SICPPSDK_INLINE double CVector3::GetMinComponent()const
00745 {
00746 XSI_DEBUG_VECTOR3;
00747 if( m_dX < m_dY )
00748 {
00749 return ( m_dX < m_dZ ) ? m_dX : m_dZ;
00750 }
00751 else
00752 {
00753 return ( m_dY < m_dZ ) ? m_dY : m_dZ;
00754 }
00755 }
00756
00757 SICPPSDK_INLINE double CVector3::GetLength()const
00758 {
00759 XSI_DEBUG_VECTOR3;
00760 return sqrt( GetLengthSquared() );
00761 }
00762
00763 SICPPSDK_INLINE double CVector3::GetLengthSquared()const
00764 {
00765 XSI_DEBUG_VECTOR3;
00766 return(m_dX*m_dX + m_dY*m_dY + m_dZ*m_dZ );
00767 }
00768
00769 SICPPSDK_INLINE double CVector3::Dot(const CVector3& io_vec3)const
00770 {
00771 XSI_DEBUG_VECTOR3;
00772 return ( m_dX*io_vec3.GetX() + m_dY*io_vec3.GetY() + m_dZ*io_vec3.GetZ() );
00773 }
00774
00775 SICPPSDK_INLINE CVector3& CVector3::Cross
00776 (
00777 const CVector3& in_vec3A,
00778 const CVector3& in_vec3B
00779 )
00780 {
00781 double dX, dY, dZ;
00782
00783 dX = in_vec3A.GetY() * in_vec3B.GetZ() -
00784 in_vec3A.GetZ() * in_vec3B.GetY();
00785 dY = -in_vec3A.GetX() * in_vec3B.GetZ() +
00786 in_vec3A.GetZ() * in_vec3B.GetX();
00787 dZ = in_vec3A.GetX() * in_vec3B.GetY() -
00788 in_vec3A.GetY() * in_vec3B.GetX();
00789
00790 return( Set( dX, dY, dZ ) );
00791 }
00792
00793 SICPPSDK_INLINE CVector3& CVector3::LinearlyInterpolate
00794 (
00795 const CVector3& in_vec3A,
00796 const CVector3& in_vec3B,
00797 const double in_dAlpha
00798 )
00799 {
00800 m_dX = (1 - in_dAlpha) * in_vec3A.GetX() + in_dAlpha * in_vec3B.GetX();
00801 m_dY = (1 - in_dAlpha) * in_vec3A.GetY() + in_dAlpha * in_vec3B.GetY();
00802 m_dZ = (1 - in_dAlpha) * in_vec3A.GetZ() + in_dAlpha * in_vec3B.GetZ();
00803
00804 return (*this);
00805 }
00806
00807 SICPPSDK_INLINE bool CVector3::EpsilonEquals
00808 (
00809 const CVector3& in_cVec3,
00810 double in_dEpsilon
00811 )const
00812 {
00813 XSI_DEBUG_VECTOR3;
00814 return (this == &in_cVec3) ? true :
00815 (fabs( m_dX - in_cVec3.GetX() ) < ::fabs(in_dEpsilon) &&
00816 fabs( m_dY - in_cVec3.GetY() ) < ::fabs(in_dEpsilon) &&
00817 fabs( m_dZ - in_cVec3.GetZ() ) < ::fabs(in_dEpsilon) );
00818 }
00819
00820
00821 SICPPSDK_INLINE bool CVector3::Equals(const CVector3& in_vec3)const
00822 {
00823 XSI_DEBUG_VECTOR3;
00824 return (this == &in_vec3) ? true :
00825 ( ( m_dX == in_vec3.GetX() ) &&
00826 ( m_dY == in_vec3.GetY() ) &&
00827 ( m_dZ == in_vec3.GetZ() ) );
00828 }
00829
00830 SICPPSDK_INLINE CVector3& CVector3::ScaleAddInPlace
00831 (
00832 double in_dScalingFactor,
00833 const CVector3& in_vec3
00834 )
00835 {
00836 ScaleInPlace(in_dScalingFactor);
00837 return AddInPlace(in_vec3);
00838 }
00839
00840
00841 SICPPSDK_INLINE CVector3& CVector3::ScaleAdd
00842 (
00843 const double in_dScalingFactor,
00844 const CVector3& in_vec3A,
00845 const CVector3& in_vec3B
00846 )
00847 {
00848 Scale(in_dScalingFactor, in_vec3A);
00849 return AddInPlace(in_vec3B);
00850 }
00851
00852 SICPPSDK_INLINE CVector3& CVector3::ScaleInPlace(double in_dScalingFactor)
00853 {
00854 XSI_DEBUG_VECTOR3;
00855 m_dX *= in_dScalingFactor;
00856 m_dY *= in_dScalingFactor;
00857 m_dZ *= in_dScalingFactor;
00858 return (*this);
00859 }
00860
00861 SICPPSDK_INLINE CVector3& CVector3::Scale
00862 (
00863 double in_dScalingFactor,
00864 const CVector3& in_vec3
00865 )
00866 {
00867 m_dX = in_vec3.GetX() * in_dScalingFactor;
00868 m_dY = in_vec3.GetY() * in_dScalingFactor;
00869 m_dZ = in_vec3.GetZ() * in_dScalingFactor;
00870 return (*this);
00871 }
00872
00873 SICPPSDK_INLINE CVector3& CVector3::NegateInPlace()
00874 {
00875 XSI_DEBUG_VECTOR3;
00876 m_dX = -m_dX;
00877 m_dY = -m_dY;
00878 m_dZ = -m_dZ;
00879 return (*this);
00880 }
00881
00882 SICPPSDK_INLINE CVector3& CVector3::Negate(const CVector3& in_vec3 )
00883 {
00884 m_dX = -in_vec3.GetX();
00885 m_dY = -in_vec3.GetY();
00886 m_dZ = -in_vec3.GetZ();
00887 return (*this);
00888 }
00889
00890 SICPPSDK_INLINE CVector3& CVector3::SubInPlace(const CVector3& in_vec3)
00891 {
00892 XSI_DEBUG_VECTOR3;
00893 m_dX -= in_vec3.GetX();
00894 m_dY -= in_vec3.GetY();
00895 m_dZ -= in_vec3.GetZ();
00896 return (*this);
00897 }
00898
00899 SICPPSDK_INLINE CVector3& CVector3::Sub
00900 (
00901 const CVector3& in_vec3A,
00902 const CVector3& in_vec3B
00903 )
00904 {
00905 m_dX = in_vec3A.GetX() - in_vec3B.GetX();
00906 m_dY = in_vec3A.GetY() - in_vec3B.GetY();
00907 m_dZ = in_vec3A.GetZ() - in_vec3B.GetZ();
00908 return (*this);
00909 }
00910
00911 SICPPSDK_INLINE CVector3& CVector3::AddInPlace(const CVector3& in_vec3)
00912 {
00913 XSI_DEBUG_VECTOR3;
00914 m_dX += in_vec3.GetX();
00915 m_dY += in_vec3.GetY();
00916 m_dZ += in_vec3.GetZ();
00917 return (*this);
00918 }
00919
00920 SICPPSDK_INLINE CVector3& CVector3::Add
00921 (
00922 const CVector3& in_vec3A,
00923 const CVector3& in_vec3B
00924 )
00925 {
00926 m_dX = in_vec3A.GetX() + in_vec3B.GetX();
00927 m_dY = in_vec3A.GetY() + in_vec3B.GetY();
00928 m_dZ = in_vec3A.GetZ() + in_vec3B.GetZ();
00929 return (*this);
00930 }
00931
00932
00933 SICPPSDK_INLINE void CVector3::Get(double& io_rdX, double& io_rdY, double& io_rdZ)const
00934 {
00935 XSI_DEBUG_VECTOR3;
00936 io_rdX = m_dX;
00937 io_rdY = m_dY;
00938 io_rdZ = m_dZ;
00939 }
00940
00941 SICPPSDK_INLINE CVector3& CVector3::Set(double in_dX, double in_dY, double in_dZ)
00942 {
00943 m_dX = in_dX;
00944 m_dY = in_dY;
00945 m_dZ = in_dZ;
00946 return (*this);
00947 }
00948
00949 SICPPSDK_INLINE double CVector3::GetZ()const
00950 {
00951 XSI_DEBUG_VECTOR3;
00952 return m_dZ;
00953 }
00954
00955 SICPPSDK_INLINE CVector3& CVector3::PutZ(double in_dZ)
00956 {
00957 m_dZ = in_dZ;
00958 return (*this);
00959 }
00960
00961 SICPPSDK_INLINE double CVector3::GetY()const
00962 {
00963 XSI_DEBUG_VECTOR3;
00964 return m_dY;
00965 }
00966
00967 SICPPSDK_INLINE CVector3& CVector3::PutY(double in_dY)
00968 {
00969 m_dY = in_dY;
00970 return (*this);
00971 }
00972
00973 SICPPSDK_INLINE double CVector3::GetX()const
00974 {
00975 XSI_DEBUG_VECTOR3;
00976 return m_dX;
00977 }
00978
00979 SICPPSDK_INLINE CVector3& CVector3::PutX(double in_dX)
00980 {
00981 m_dX = in_dX;
00982 return (*this);
00983 }
00984
00985
00999
01000 class SICPPSDKDECL CVector3Array
01001 {
01002 public:
01006 CVector3Array( LONG in_size=0);
01007
01011 CVector3Array(const CVector3Array& in_Array);
01012
01014 ~CVector3Array();
01015
01020 CVector3Array& operator=( const CVector3Array& in_array );
01021
01025 LONG GetCount() const;
01026
01031 CStatus Add( const CVector3& in_item );
01032
01036 CStatus Clear();
01037
01043 CStatus Resize( LONG in_size);
01044
01051 const CVector3& operator[]( LONG in_index ) const;
01052
01058 CVector3& operator[]( LONG in_index );
01059
01065 bool operator==(const CVector3Array& in_array) const;
01066
01072 bool operator!=(const CVector3Array& in_array) const;
01073
01074
01075 private:
01076
01077 void* m_ptr;
01078 };
01079
01080 };
01081 };
01082
01083 #endif // __XSIVECTOR3_H__