Files
Extern/C3d/Include/iges_structure.h
T
SaraP 3ab0db8937 Extern :
- C3d aggiornamento librerie ( 118015).
2024-10-29 15:01:17 +01:00

538 lines
19 KiB
C++

////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////
#ifndef __IGES_STRUCTURES_H
#define __IGES_STRUCTURES_H
#include <system_dependency.h>
#include <templ_s_array.h>
#include <templ_sp_array.h>
#include "iges_basic.h"
//-------------------------------------------------------------------------------
// функции сравнения двух наследников от BasicIGES, которые не содержат
// динамических данных
// ---
template <class Type>
inline bool Eq( const Type * t, const BasicIGES & o ) {
if ( !t->Eq( o ) )
return false;
const Type * r = dynamic_cast<const Type*>(&o);
if ( !r )
return false;
return ::IsEqualSArrayItems( t, r );
}
//-------------------------------------------------------------------------------
// функции сравнения двух наследников от BasicIGES, которые не содержат
// динамических данных
// ---
template <class Type>
inline bool Less( const Type * t, const BasicIGES & o ) {
if ( !t->Eq( o ) )
return t->Less( o );
const Type * r = dynamic_cast<const Type*>(&o);
if ( !r )
return false;
return t < r ;
}
//-------------------------------------------------------------------------------
// структура для сохранения типов линий
// ---
struct CONV_CLASS LTypeNameIGES {
uint16 number; // номер стиля в чертеже C3D
ptrdiff_t colorOrStr; // цвет или номер строки цвета в файле IGES
ptrdiff_t width; // толщина линии на бумаге * 1000
ptrdiff_t numOrStr; // номер IGES-типа линии или номер строки типа в файле IGES
LTypeNameIGES() : number(0), colorOrStr( 0 ), width(1), numOrStr(0){}
bool operator == (const LTypeNameIGES & o) const { return number == o.number; }
bool operator < (const LTypeNameIGES & o) const { return number < o.number; }
void Assign( const LTypeNameIGES & o );
};
//-------------------------------------------------------------------------------
// структура цвета и места его хранения
// ---
struct CONV_CLASS ColorIGES : public BasicIGES {
int32 trueColor;
ColorIGES( int32 _color = 0 );
virtual bool operator == ( const BasicIGES & o ) const;
virtual bool operator < ( const BasicIGES & o ) const;
};
//-------------------------------------------------------------------------------
//
// ---
typedef ColorIGES * PCOLORIGES;
typedef const ColorIGES * PCCOLORIGES;
//-------------------------------------------------------------------------------
//
// ---
#ifdef _MSC_VER // C3D_WINDOWS
inline bool IsLessThanSArrayItems ( const PCCOLORIGES &obj1, const PCCOLORIGES &obj2 ) { return obj1 < obj2; }
#else // C3D_WINDOWS
template<> bool IsLessThanSArrayItems< ColorIGES const* > ( ColorIGES const* const& obj1, ColorIGES const* const& obj2 );
#endif // C3D_WINDOWS
//------------------------------------------------------------------------------
//
// ---
struct CONV_CLASS ColourIGES : public BasicIGES {
double red, green, blue;
ColourIGES( double, double, double );
};
//-------------------------------------------------------------------------------
// точка
// ---
struct CONV_CLASS PointIGES : public BasicIGES {
double x, y, z;
PointIGES( double _x, double _y, double _z );
PointIGES();
virtual bool operator == ( const BasicIGES & o ) const;
virtual bool operator < ( const BasicIGES & o ) const;
};
//-------------------------------------------------------------------------------
//
// ---
typedef PointIGES * PPOINTIGES;
typedef const PointIGES * PCPOINTIGES;
//-------------------------------------------------------------------------------
//
// ---
#ifdef _MSC_VER // C3D_WINDOWS
inline bool IsLessThanSArrayItems ( const PCPOINTIGES &obj1, const PCPOINTIGES &obj2 ) { return obj1 < obj2; }
#else // C3D_WINDOWS
template<> bool IsLessThanSArrayItems< PointIGES const* > ( PointIGES const* const& obj1, PointIGES const* const& obj2 );
#endif // C3D_WINDOWS
//-------------------------------------------------------------------------------
// базовый curve примитив
// ---
struct CONV_CLASS BasicCurveIGES : public BasicIGES {
LTypeNameIGES lt; // стиль
BasicCurveIGES( int32 _numType, int32 _form = 0 ) : BasicIGES( _numType, _form ), lt(){}
};
//-------------------------------------------------------------------------------
// структура отрезка
// ---
struct CONV_CLASS LineSegIGES : public BasicCurveIGES {
double x1, y1, z1; // координаты 1 точки
double x2, y2, z2; // координаты 2 точки
LineSegIGES();
LineSegIGES( double x1, double y1, double z1, // 3D
double x2, double y2, double z2 );
LineSegIGES( double x1, double y1, // 2D
double x2, double y2 );
virtual bool operator == ( const BasicIGES & o ) const;
virtual bool operator < ( const BasicIGES & o ) const;
};
//-------------------------------------------------------------------------------
// структура дуги и окружности
// ---
struct CONV_CLASS ArcOrCircleIGES : public BasicCurveIGES {
double dir; // напрвление
double xc, yc; // координаты центра
double x1, y1; // координаты 1 точки
double x2, y2; // координаты 2 точки
ArcOrCircleIGES();
virtual bool operator == ( const BasicIGES & o ) const;
virtual bool operator < ( const BasicIGES & o ) const;
};
//-------------------------------------------------------------------------------
// 104 IGS_CONIC_ARC коническая кривая ( эллипс, гипербола, парабола )
// ---
struct CONV_CLASS EllipsIGES : public BasicCurveIGES {
double A, B, C, D, E, F, X1, Y1, X2, Y2, ZT;
EllipsIGES();
virtual bool operator == ( const BasicIGES & o ) const;
virtual bool operator < ( const BasicIGES & o ) const;
};
//-------------------------------------------------------------------------------
//
// ---
typedef EllipsIGES * PELLIPSIGES;
typedef const EllipsIGES * PCELLIPSIGES;
//-------------------------------------------------------------------------------
//
// ---
#ifdef _MSC_VER // C3D_WINDOWS
inline bool IsLessThanSArrayItems ( const PCELLIPSIGES &obj1, const PCELLIPSIGES &obj2 ) { return obj1 < obj2; }
#else // C3D_WINDOWS
template<> bool IsLessThanSArrayItems< EllipsIGES const* > ( EllipsIGES const* const& obj1, EllipsIGES const* const& obj2 );
#endif // C3D_WINDOWS
//-------------------------------------------------------------------------------
// структура элемента текста
// ---
struct CONV_CLASS TextItemIGES {
double width; // ширина
double height; // высота
int32 fontCode; // код шрифта
double angleChar; // угол наклона букв
double angleStr; // угол наклона строки
int32 flagMirror;// флаг зеркальности
int32 horizont; // 0 - отсчет от горизонали 1 - от вертикали
double x, y, z; // координаты
std::string text; // текст
TextItemIGES();
bool operator == ( const TextItemIGES & o ) const;
bool operator < ( const TextItemIGES & o ) const;
};
//-------------------------------------------------------------------------------
// структура текста
// ---
struct CONV_CLASS TextIGES : public BasicIGES {
std::vector <TextItemIGES*> arr;
TextIGES();
virtual bool operator == ( const BasicIGES & o ) const;
virtual bool operator < ( const BasicIGES & o ) const;
private:
TextIGES( const TextIGES& );
};
//-------------------------------------------------------------------------------
//
// ---
typedef TextIGES * PTEXTIGES;
typedef const TextIGES * PCTEXTIGES;
//-------------------------------------------------------------------------------
//
// ---
#ifdef _MSC_VER // C3D_WINDOWS
inline bool IsLessThanSArrayItems ( const PCTEXTIGES &obj1, const PCTEXTIGES &obj2 ) { return obj1 < obj2; }
#else // C3D_WINDOWS
template<> bool IsLessThanSArrayItems< TextIGES const* > ( TextIGES const* const& obj1, TextIGES const* const& obj2 );
#endif // C3D_WINDOWS
//-------------------------------------------------------------------------------
// 123 IGS_DIRECTION - вектор
// ---
struct CONV_CLASS DirectionIGES: public BasicIGES {
double x, y, z;
DirectionIGES( double _x, double _y, double _z );
virtual bool operator == ( const BasicIGES & o ) const;
virtual bool operator < ( const BasicIGES & o ) const;
};
//-------------------------------------------------------------------------------
//
// ---
typedef DirectionIGES * PDIRECTIONIGES;
typedef const DirectionIGES * PCDIRECTIONIGES;
//-------------------------------------------------------------------------------
//
// ---
#ifdef _MSC_VER // C3D_WINDOWS
inline bool IsLessThanSArrayItems ( const PCDIRECTIONIGES &obj1, const PCDIRECTIONIGES &obj2 ) { return obj1 < obj2; }
#else // C3D_WINDOWS
template<> bool IsLessThanSArrayItems< DirectionIGES const* > ( DirectionIGES const* const& obj1, DirectionIGES const* const& obj2 );
#endif // C3D_WINDOWS
//-------------------------------------------------------------------------------
// 124 матрица трансформации
// ---
struct CONV_CLASS MatrixIGES : public BasicIGES {
std::vector<double> matr;
MatrixIGES();
virtual bool operator == ( const BasicIGES & o ) const;
virtual bool operator < ( const BasicIGES & o ) const;
};
//-------------------------------------------------------------------------------
// 126 IGS_RATIONAL_B_SPLINE_CURVE
// ---
struct CONV_CLASS RationalBSplineCurveIGES : public BasicCurveIGES {
ptrdiff_t upperIndexSum; // верхний индекс суммы
ptrdiff_t degree; // степень базовой функции
int32 planar; // 0 - пространственная 1 - плоская
int32 closed; // 1 - замкнутая 0 - незамкнутая
int32 polynominal; // 1 - Polynominal
// 0 - Rational
int32 periodic; // 1 - Периодическая
// 0 - Непериодическая
// Значения последовательностей узлов
std::vector<double> sequence; // значения от -degree до 1 + upperIndexSum
// массив весовых коэффициентов размером 1 + upperIndexSum
std::vector<double> weight;
// массив координат контрольных точек размером 1 + upperIndexSum
std::vector<double> x;
std::vector<double> y;
std::vector<double> z;
double u0, u1; // начальное и конечное значение параметрических координат
double xNorm, yNorm, zNorm;
RationalBSplineCurveIGES();
virtual bool operator == ( const BasicIGES & o ) const;
virtual bool operator < ( const BasicIGES & o ) const;
};
//-------------------------------------------------------------------------------
// стрелка( или линия выноски ) IGS_LEADER
// ---
struct CONV_CLASS LeaderIGES : public BasicCurveIGES {
double arrowLen; // длина стрелки IGS_LENGTH_ARROW
double arrowWidth;// ширина стрелки IGS_WIDTH_ARROW
double zDepth; // глубина по z
// координаты стрелки
double xHead, yHead;
// координаты конца линии
std::vector<double> x;
std::vector<double> y;
int formArrow; // 0,4 никакой 1,2,3,11 обычная стрелка 9,10 засечка 5,6,7,8 точка
LeaderIGES();
virtual bool operator == ( const BasicIGES & o ) const;
virtual bool operator < ( const BasicIGES & o ) const;
};
//-------------------------------------------------------------------------------
//
// ---
typedef LeaderIGES * PLEADERIGES;
typedef const LeaderIGES * PCLEADERIGES;
//-------------------------------------------------------------------------------
//
// ---
#ifdef _MSC_VER // C3D_WINDOWS
inline bool IsLessThanSArrayItems ( const PCLEADERIGES &obj1, const PCLEADERIGES &obj2 ) { return obj1 < obj2; }
#else // C3D_WINDOWS
template<> bool IsLessThanSArrayItems< LeaderIGES const* > ( LeaderIGES const* const& obj1, LeaderIGES const* const& obj2 );
#endif // C3D_WINDOWS
//-------------------------------------------------------------------------------
// вспомогательная линия
// ---
struct CONV_CLASS WitnessLineIGES : public BasicCurveIGES {
int32 interpretFlag;
double z; // displacement
// координаты конца линии N >= 3 и нечетное
std::vector<double> x;
std::vector<double> y;
WitnessLineIGES();
virtual bool operator == ( const BasicIGES & o ) const;
virtual bool operator < ( const BasicIGES & o ) const;
};
//-------------------------------------------------------------------------------
//
// ---
typedef WitnessLineIGES * PWITNESSLINEIGES;
typedef const WitnessLineIGES * PCWITNESSLINEIGES;
//-------------------------------------------------------------------------------
//
// ---
#ifdef _MSC_VER // C3D_WINDOWS
inline bool IsLessThanSArrayItems ( const PCWITNESSLINEIGES &obj1, const PCWITNESSLINEIGES &obj2 ) { return obj1 < obj2; }
#else // C3D_WINDOWS
template<> bool IsLessThanSArrayItems< WitnessLineIGES const* > ( WitnessLineIGES const* const& obj1, WitnessLineIGES const* const& obj2 );
#endif // C3D_WINDOWS
//-------------------------------------------------------------------------------
// структура линейного размера
// ---
struct CONV_CLASS LinDimensionIGES : public BasicIGES {
int32 text; // указатель на текст
int32 firstArrow; // первая стрелка( половина размерной линии )
int32 secondArrow; // вторая стрелка( половина размерной линии )
int32 firstLine; // первая выносная линия
int32 secondLine; // вторая выносная линия
LinDimensionIGES();
virtual bool operator == ( const BasicIGES & o ) const;
virtual bool operator < ( const BasicIGES & o ) const;
};
//-------------------------------------------------------------------------------
//
// ---
typedef LinDimensionIGES * PLINDIMENSIONIGES;
typedef const LinDimensionIGES * PCLINDIMENSIONIGES;
//-------------------------------------------------------------------------------
//
// ---
#ifdef _MSC_VER // C3D_WINDOWS
inline bool IsLessThanSArrayItems ( const PCLINDIMENSIONIGES &obj1, const PCLINDIMENSIONIGES &obj2 ) { return obj1 < obj2; }
#else // C3D_WINDOWS
template<> bool IsLessThanSArrayItems< LinDimensionIGES const* > ( LinDimensionIGES const* const& obj1, LinDimensionIGES const* const& obj2 );
#endif // C3D_WINDOWS
//-------------------------------------------------------------------------------
// структура диаметрального размера
// ---
struct CONV_CLASS DimDimensionIGES : public BasicIGES {
int32 text; // указатель на текст
int32 firstArrow; // первая стрелка( половина размерной линии )
int32 secondArrow; // вторая стрелка( половина размерной линии )
double x, y;
DimDimensionIGES();
virtual bool operator == ( const BasicIGES & o ) const;
virtual bool operator < ( const BasicIGES & o ) const;
};
//-------------------------------------------------------------------------------
//
// ---
typedef DimDimensionIGES * PDIMDIMENSIONIGES;
typedef const DimDimensionIGES * PCDIMDIMENSIONIGES;
//-------------------------------------------------------------------------------
//
// ---
#ifdef _MSC_VER // C3D_WINDOWS
inline bool IsLessThanSArrayItems ( const PCDIMDIMENSIONIGES &obj1, const PCDIMDIMENSIONIGES &obj2 ) { return obj1 < obj2; }
#else // C3D_WINDOWS
template<> bool IsLessThanSArrayItems< DimDimensionIGES const* > ( DimDimensionIGES const* const& obj1, DimDimensionIGES const* const& obj2 );
#endif // C3D_WINDOWS
//-------------------------------------------------------------------------------
// структура диаметрального размера
// ---
struct CONV_CLASS RadDimensionIGES : public BasicIGES {
int32 text; // указатель на текст
int32 arrow; // первая стрелка( половина размерной линии )
double x, y;
RadDimensionIGES();
virtual bool operator == ( const BasicIGES & o ) const;
virtual bool operator < ( const BasicIGES & o ) const;
};
//-------------------------------------------------------------------------------
//
// ---
typedef RadDimensionIGES * PRADDIMENSIONIGES;
typedef const RadDimensionIGES * PCRADDIMENSIONIGES;
//-------------------------------------------------------------------------------
//
// ---
#ifdef _MSC_VER // C3D_WINDOWS
inline bool IsLessThanSArrayItems ( const PCRADDIMENSIONIGES &obj1, const PCRADDIMENSIONIGES &obj2 ) { return obj1 < obj2; }
#else // C3D_WINDOWS
template<> bool IsLessThanSArrayItems< RadDimensionIGES const* > ( RadDimensionIGES const* const& obj1, RadDimensionIGES const* const& obj2 );
#endif // C3D_WINDOWS
//-------------------------------------------------------------------------------
// структура углового размера
// ---
struct CONV_CLASS AngDimensionIGES : public BasicIGES {
int32 text; // указатель на текст
int32 firstLine; // первая выносная линия
int32 secondLine; // вторая выносная линия
double x, y, r;
int32 firstArrow; // первая стрелка( половина размерной линии )
int32 secondArrow; // вторая стрелка( половина размерной линии )
AngDimensionIGES();
virtual bool operator == ( const BasicIGES & o ) const;
virtual bool operator < ( const BasicIGES & o ) const;
};
//-------------------------------------------------------------------------------
//
// ---
typedef AngDimensionIGES * PANGDIMENSIONIGES;
typedef const AngDimensionIGES * PCANGDIMENSIONIGES;
//-------------------------------------------------------------------------------
//
// ---
#ifdef _MSC_VER // C3D_WINDOWS
inline bool IsLessThanSArrayItems ( const PCANGDIMENSIONIGES &obj1, const PCANGDIMENSIONIGES &obj2 ) { return obj1 < obj2; }
#else // C3D_WINDOWS
template<> bool IsLessThanSArrayItems< AngDimensionIGES const* > ( AngDimensionIGES const* const& obj1, AngDimensionIGES const* const& obj2 );
#endif // C3D_WINDOWS
#endif // __IGES_STRUCTURES_H