Files
Extern/C3d/Include/cur_nurbs_vector.h
SaraP 4be7d59035 Extern :
- C3d aggiornamento delle librerie ( 117910).
2022-08-09 08:56:28 +02:00

116 lines
3.2 KiB
C++

////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru NURBS вектор 2D.
\en 2D vector of NURBS. \~
*/
////////////////////////////////////////////////////////////////////////////////
#ifndef __CUR_NURBS_VECTOR_H
#define __CUR_NURBS_VECTOR_H
#include <mb_cart_point.h>
#include <reference_item.h>
//------------------------------------------------------------------------------
/** \brief \ru Nurbs-вектор.
\en Nurbs-vecor. \~
\details \ru Двумерный Nurbs-вектор. \n
\en Two-Dimensional Nurbs-vecor. \n \~
\ingroup Data_Structures
*/
// ---
class MbNURBSVector2D {
public:
double * x;
double * y;
double * w;
public:
MbNURBSVector2D() : x( nullptr ), y( nullptr ), w( nullptr ) {}
~MbNURBSVector2D(); // \ru освободить память \en free memory
public:
bool CatchMemory( ptrdiff_t count, bool bWeight ); // \ru выделить память \en allocate memory
void Init( ptrdiff_t i, const MbCartPoint &ip, double iw );
void SetZero( ptrdiff_t i );
void Set( ptrdiff_t i, const MbNURBSVector2D & p, ptrdiff_t ip );
void Dec( ptrdiff_t i, const MbNURBSVector2D & p1, ptrdiff_t ip1, const MbNURBSVector2D & p2, ptrdiff_t ip2, double kk );
void Set( ptrdiff_t i, const MbNURBSVector2D & p, ptrdiff_t ip, double kk );
private:
void FreeMemory(); // \ru освободить память \en free memory
MbNURBSVector2D( const MbNURBSVector2D & ); // \ru не реализовано \en not implemented
void operator = ( const MbNURBSVector2D & ); // \ru не реализовано \en not implemented
};
//------------------------------------------------------------------------------
//
// ---
inline void MbNURBSVector2D::Init( ptrdiff_t i, const MbCartPoint &ip, double iw ) {
if ( w != nullptr ) {
x[i] = ( ip.x * iw );
y[i] = ( ip.y * iw );
w[i] = iw;
}
else {
x[i] = ip.x;
y[i] = ip.y;
}
}
//------------------------------------------------------------------------------
//
// ---
inline void MbNURBSVector2D::SetZero( ptrdiff_t i ) {
x[i] = 0.0;
y[i] = 0.0;
if ( w != nullptr )
w[i] = 0.0;
}
//------------------------------------------------------------------------------
//
// ---
inline void MbNURBSVector2D::Set( ptrdiff_t i, const MbNURBSVector2D &p, ptrdiff_t ip ) {
x[i] = p.x[ip];
y[i] = p.y[ip];
if ( w != nullptr )
w[i] = p.w[ip];
}
//------------------------------------------------------------------------------
//
// ---
inline void MbNURBSVector2D::Dec( ptrdiff_t i,
const MbNURBSVector2D & p1, ptrdiff_t ip1,
const MbNURBSVector2D & p2, ptrdiff_t ip2,
double kk )
{
x[i] = ( (p2.x[ip2] - p1.x[ip1]) * kk );
y[i] = ( (p2.y[ip2] - p1.y[ip1]) * kk );
if ( w != nullptr )
w[i] = ( (p2.w[ip2] - p1.w[ip1]) * kk );
}
//------------------------------------------------------------------------------
//
// ---
inline void MbNURBSVector2D::Set( ptrdiff_t i, const MbNURBSVector2D & p, ptrdiff_t ip, double kk )
{
x[i] = ( p.x[ip] * kk );
y[i] = ( p.y[ip] * kk );
if ( w != nullptr )
w[i] = ( p.w[ip] * kk );
}
#endif // __CUR_NURBS_VECTOR_H