xsi_nurbscurve.h
Go to the documentation of this file.
00001 //*****************************************************************************
00011 //*****************************************************************************
00012 
00013 #if (_MSC_VER > 1000) || defined(SGI_COMPILER)
00014 #pragma once
00015 #endif
00016 
00017 #ifndef __XSINURBSCURVE_H__
00018 #define __XSINURBSCURVE_H__
00019 
00020 #include <xsi_siobject.h>
00021 #include <xsi_math.h>
00022 #include <xsi_nurbsdata.h>
00023 
00024 namespace XSI {
00025 
00026 class CKnotArray;
00027 class SubComponent;
00028 class CControlPointRefArray;
00029 class CNurbsSampleRefArray;
00030 
00031 
00032 //*****************************************************************************
00064 //*****************************************************************************
00065 
00066 class SICPPSDKDECL NurbsCurve : public SIObject
00067 {
00068 public:
00070     NurbsCurve();
00071 
00073     ~NurbsCurve();
00074 
00078     NurbsCurve(const CRef& in_ref);
00079 
00083     NurbsCurve(const NurbsCurve& in_obj);
00084 
00089     bool IsA( siClassID in_ClassID) const;
00090 
00094     siClassID GetClassID() const;
00095 
00101     NurbsCurve& operator=(const NurbsCurve& in_obj);
00102 
00108      NurbsCurve& operator=(const CRef& in_ref);
00109 
00113     CKnotArray GetKnots()const;
00114 
00118     CControlPointRefArray GetControlPoints()const;
00119 
00120 
00127     CStatus Get
00128     (
00129         siNurbsFormat           in_siNurbsFormat,
00130         CNurbsCurveData&        out_curve
00131     )const;
00132 
00133 
00142     CStatus Set
00143     (
00144         const CNurbsCurveData&  in_curve,
00145         siNurbsFormat           in_siNurbsFormat = siSINurbs
00146     );
00147 
00157     CStatus EvaluatePosition
00158     (
00159         double                  in_dUValue,
00160         MATH::CVector3&         out_vPosition,
00161         MATH::CVector3&         out_vTangent,
00162         MATH::CVector3&         out_vNormal,
00163         MATH::CVector3&         out_vBiNormal
00164     )const;
00165 
00175     CStatus EvaluateNormalizedPosition
00176     (
00177         double                  in_dUNormalizedValue,
00178         MATH::CVector3&         out_vPosition,
00179         MATH::CVector3&         out_vTangent,
00180         MATH::CVector3&         out_vNormal,
00181         MATH::CVector3&         out_vBiNormal
00182     )const;
00183 
00194     CStatus EvaluatePositionFromPercentage
00195     (
00196         double                  in_dPercentage,
00197         MATH::CVector3&         out_vPosition,
00198         MATH::CVector3&         out_vTangent,
00199         MATH::CVector3&         out_vNormal,
00200         MATH::CVector3&         out_vBiNormal
00201     )const;
00202 
00208     CStatus GetDegree(LONG& out_lDegree)const;
00209 
00215     CStatus GetLength(double& out_dLength)const;
00216 
00223     CStatus GetNormalizedUFromU
00224     (
00225         double                  in_dUValue,
00226         double&                 out_dNormalizedUValue
00227     )const;
00228 
00235     CStatus GetUFromNormalizedU
00236     (
00237         double                  in_dNormalizedUValue,
00238         double&                 out_dUValue
00239     )const;
00240 
00247     CStatus GetUFromPercentage
00248     (
00249         double                  in_dPercentage,
00250         double&                 out_dUValue
00251     )const;
00252 
00259     CStatus GetPercentageFromU
00260     (
00261         double                  in_dUValue,
00262         double&                 out_dPercentage
00263     )const;
00264 
00269     LONG GetIndex() const;
00270 
00274     SubComponent GetSubComponent() const;
00275 
00281     NurbsCurve Navigate(siNavigateComponentType in_siNavigate) const;
00282 
00283     private:
00284     NurbsCurve * operator&() const;
00285     NurbsCurve * operator&();
00286 };
00287 
00288 //*****************************************************************************
00313 //*****************************************************************************
00314 class SICPPSDKDECL CNurbsCurveRefArray : public CRefArray
00315 {
00316 public:
00318     CNurbsCurveRefArray();
00319 
00321     ~CNurbsCurveRefArray();
00322 
00326     CNurbsCurveRefArray( const CNurbsCurveRefArray& in_array );
00327 
00332     CRef GetItem( LONG in_index ) const;
00333 
00338     CRef GetItem( const CString& in_name ) const;
00339 
00343     LONG GetCount() const;
00344 
00348     bool IsValid() const;
00349 
00353     CLongArray GetIndexArray() const;
00354 
00358     SubComponent GetSubComponent() const;
00359 
00365     CNurbsCurveRefArray Navigate(siNavigateComponentType in_siNavigate) const;
00366 
00367     private:
00368     void* m_ptr;
00369 };
00370 
00371 };
00372 
00373 #endif // __XSINURBSCURVE_H__