Files
Dario Sassi 45803fb2d7 Extern :
- C3d aggiornamento delle librerie.
2020-12-24 11:59:30 +00:00

354 lines
17 KiB
C++

////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////
#ifndef __IGES_BASIC_H
#define __IGES_BASIC_H
#include <math_define.h>
#include <string>
#define IGS_DOUBLE_TO_STRING_NDEC 15
//------------------------------------------------------------------------------
// типы IGS псевдо объектов
// ---
typedef enum {
igs_CopiousData11 = 11,
igs_MetalHatch = 31,
igs_CeramicHatch = 32,
igs_Hatch33 = 33,
igs_Hatch34 = 34,
igs_Hatch35 = 35,
igs_Hatch36 = 36,
igs_NonMetalHatch = 37,
igs_BrickHatch = 38,
igs_WitnesLine = 40,
igs_ItArcOrCircleIGES = 100,
igs_ItContourIGES = 102,
igs_ItConicIGES = 104,
igs_ItCopiousDataIGES = 106,
igs_ItPlaneIGES = 108,
igs_ItLineSegIGES = 110,
igs_ItSplineIGES = 112,
igs_ItParametricSplineSurfaceIGES = 114,
igs_ItPointIGES = 116,
igs_ItRuledSurfaceIGES = 118,
igs_ItSurfaceOfRevolutionIGES = 120,
igs_ItTabulatedCylinderIGES = 122,
igs_ItDirectionIGES = 123,
igs_ItTransformMatrixIGES = 124,
igs_ItRationalBSplineCurveIGES = 126,
igs_ItRationalBSplineSurfaceIGES = 128,
igs_ItOffsetSurfaceIGES = 140,
igs_ItBoundaryIGES = 141,
igs_ItCurveOnParametricSurfaceIGES = 142,
igs_ItBoundedSurfaceIGES = 143,
igs_ItTrimmedParametricSurfaceIGES = 144,
igs_ItManifoldSolidBRepIGES = 186,
igs_ItPlaneSurfaceIGES = 190,
igs_ItRCCylindricalSurfaceIGES = 192,
igs_ItRCConicalSurfaceIGES = 194,
igs_ItSphericalSurfaceIGES = 196,
igs_ItToroidalSurfaceIGES = 198,
igs_AngularDim = 202,
igs_DiamDim = 206,
igs_Text = 212,
igs_Leader = 214,
igs_LinDim = 216,
igs_RadDim = 222,
igs_ItSubfigureIGES = 308,
igs_ItColorIGES = 314,
igs_ItBlockIGES = 402,
igs_ItPropertyIGES = 406,
igs_ItSingularSubfigureInstanceIGES = 408,
igs_ItExternalReferenceIGES = 416,
igs_ItVertexListIGES = 502,
igs_ItEdgeListIGES = 504,
igs_ItLoopIGES = 508,
igs_ItFaceIGES = 510,
igs_ItShellIGES = 514,
igs_Surface,
igs_SpaceCurve,
} IGSGConverterType;
//-----------------------------------------------------------------------------
//
// ---
typedef enum { // секция
UndefSection,
FlagSection, // not always present
StartSection,
GlobalSection,
DirectoryEntrySection,
ParametrDataSection,
TerminateSection
} NameSectionIGES;
#define LENGTH_STRING_FILE 80
#define LENGTH_STRING_IGES 72
#define IGS_WIDTH 1000 // число градаций толщины
#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS 58
#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS_GOST 6
//#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS1001 30
#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS1001 29
#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS1002 34
#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS1003 32
#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS800 7
#define IGS_BLOCK_GROUP 1 // + форма блока 1
#define IGS_BLOCK_GROUP_WO_BACK_POINTERS 7 // + форма блока 7 - без обратных указателей
#define IGS_DOUBLE_UNDEF -1e32 //
#define ENTITY_LABEL_COUNT 8 ///< Длина поля entityLabel
#define VDE_VISIBLE_YES 0 ///< Объект видим
#define VDE_VISIBLE_NO 1 ///< Объект невидим
#define VDE_DEPEND_NO 0 ///< Объект независим
#define VDE_DEPEND_PHYS 1 ///< Объект зависим физически
#define VDE_DEPEND_LOG 2 ///< Объект зависим логически
#define VDE_DEPEND_BOTH 3 ///< Зависим физически и логически
#define VDE_USE_GEOMETRY 0 ///< Объект геометрический
#define VDE_USE_ANNOT 1 ///< Объект аннотационный
#define VDE_USE_DEF 2 ///< Объект определение
#define VDE_USE_OTHER 3 ///< Объект вне классификации
#define VDE_USE_LOG_POS 4 ///< Объект логический / позиционирование
#define VDE_USE_2D_PARAM 5 ///< Объект параметрический 2D
#define VDE_USE_CONSTR_GM 6 ///< Объект конструктивной геометрии
#define VDE_HIER_TOP_DOWN 0 ///< Сверху вниз
#define VDE_HIER_GLOB_DEFER 1 ///< Глобально
#define VDE_HIER_PROPERTY 2 ///< Свойство
//-------------------------------------------------------------------------------
//
// ---
struct VectorDE{
unsigned short visible : 1;// 9 вектор состояния
unsigned short depend : 2;// 9
unsigned short geometry : 3;// 9
unsigned short hierarchy : 2;// 9
};
//-----------------------------------------------------------------------------
//
// ---
struct DirEntryParameter {
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// горячо рекомендую все изменения в структуре согласовывать с процедурой чтения
// ProcessingOneEntityDirEntrySection(), иначе есть очень реальный шанс все порушить,
// еще рекомендую крепко подумать, прежде чем делать виртуальные функции и наследников
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
int32 typeNumber; // 1 номер типа
// поле typeNumber должно идти первым - см. функцию Init этой структуры
// !!!!!!!!!!!!!!!!!!!!
ptrdiff_t numbParDataString; // 2 номер строки данных в секции Parametr Data
ptrdiff_t structure; // 3 инвертированный указатель на на строку в секции DirEntry обычно 0
ptrdiff_t lineFontPattern; // 4 номер стандартного типа линии или указатель на строку с описанием нестандартного
ptrdiff_t level; // 5 номер слоя или указатель на строку с описанием слоя в секции DirEntry
ptrdiff_t view; // 6 указатель на строку с описанием вида в секции DirEntry
ptrdiff_t transformMatrix; // 7 указатель на строку с описанием матрицы преобразования в секции DirEntry
ptrdiff_t labelDisplayAssociativ;// 8 указатель на строку с ???? в секции DirEntry
// 9 вектор состояния
union {
VectorDE def;
unsigned short vector;
};
ptrdiff_t numbString; // 10 номер строки
ptrdiff_t lineWeight; // 12 - 11 пропущен - градация толщины
ptrdiff_t color; // 13 номер цвета или указатель на строку с описанием цвета
ptrdiff_t lineCount; // 14 число строк под описание параметров в секции Parametr Data
int32 formNumber; // 15
std::string entityLabel; // 18 метка
// SpAG K14 BUG_65022 - избавляемся от низкоуровневых абстракций
ptrdiff_t numerLabel; // 19 числовая метка
DirEntryParameter( int32 type = 0 ): typeNumber( type ), numbParDataString( 0 ), structure( 0 ), lineFontPattern( 0 ), level( 0 ),
view( 0 ), transformMatrix( 0 ), labelDisplayAssociativ( 0 ), numbString( 0 ), lineWeight( 0 ),
color( 0 ), lineCount( 0 ), formNumber( 0 ), entityLabel( ENTITY_LABEL_COUNT, ' ' ), numerLabel( 0 ) { Init(); } // SpAG K13 SP1 анализаторы кода
void Init() {
// SpAG - С точки зрения cppCheck должно быть гораздо более пристойно
def.visible = VDE_VISIBLE_YES;
def.depend = VDE_DEPEND_NO;
def.geometry = VDE_USE_DEF;
def.hierarchy = VDE_HIER_TOP_DOWN;
}
void operator = ( const DirEntryParameter & o ) {
typeNumber = o.typeNumber;
numbParDataString = o.numbParDataString;
structure = o.structure;
lineFontPattern = o.lineFontPattern;
level = o.level;
view = o.view;
transformMatrix = o.transformMatrix;
labelDisplayAssociativ = o.labelDisplayAssociativ;
numbString = o.numbString; // BUG_71099
lineWeight = o.lineWeight;
color = o.color;
lineCount = o.lineCount;
formNumber = o.formNumber;
entityLabel = o.entityLabel; // SpAG K14 BUG_65022
numerLabel = o.numerLabel;
vector = o.vector;
}
void Zero() {
typeNumber = 0;
numbParDataString = structure = lineFontPattern = level = view = transformMatrix = labelDisplayAssociativ = numbString = lineWeight = color = lineCount = numerLabel = 0;
formNumber = 0;
vector = 0;
entityLabel.assign( ENTITY_LABEL_COUNT, ' ' );
}
bool operator == ( DirEntryParameter & o ) const { return numbString == o.numbString; }
bool operator < ( DirEntryParameter & o ) const { return numbString < o.numbString; }
};
//-----------------------------------------------------------------------------
// Данные общей секции.
// ---
struct GlobalSectionParameter {
int32 delimiter; // ограничитель параметров 1
int32 recordDelimiter; // ограничитель записей 2
std::string identifSendingSystem; // версия системы откуда 3
std::string fileName; // 4
std::string systemID; // идентификатор системы откуда 5
std::string verPreProc; // версия препроцессора( на хрен она упала?) 6
int32 numbBitsOnInt; // разрядность целого откуда 7
int32 maxPowerFloat; // максимальная степень float откуда 8
int32 numbSignFloat; // число значащих цифр float откуда 9
int32 maxPowerDouble; // максимальная степень double откуда 10
int32 numbSignDouble; // число значащих цифр double откуда 11
std::string identifReceivngSystem;// версия системы куда 12
double scale; // масштаб 13
int32 unitFlag; // 14 1- дюймы 2 -мм 3- 4 -футы 5 -мили 6 -м 7 -км 8 -милидюймы 9- мкм 10- см 11 - микродюйм
std::string nameUnit; // 15
int32 maxNumberOfLineWeightGrad; // 16
double widthOfMaxLineWeight; // 17
std::string dateAndTime; // 18 YYMMMDD.HHNNSS
double minResolution; // 19 - мин. разрешение системы
double maxAbsCoord; // 20 максимальное координата по модулю
std::string nameOfAuthor; // 21 автор
std::string authorsOrg; // 22 организация
int32 intVer; // 23
int32 intDraftStandart; // 24
std::string dateAndTimeMod; // 25 YYMMMDD.HHNNSS
GlobalSectionParameter () { Init(); }
void Init() {
delimiter = ','; // ограничитель параметров 1
recordDelimiter = ';'; // ограничитель записей 2
identifSendingSystem = " "; // версия системы откуда 3
fileName = " "; // 4
systemID = " "; // идентификатор системы откуда 5
verPreProc = " "; // версия препроцессора( на хрен она упала?) 6
numbBitsOnInt = 32; // разрядность целого откуда 7 //-V112
maxPowerFloat = 38; // максимальная степень float откуда 8
numbSignFloat = 6; // число значащих цифр float откуда 9
maxPowerDouble = 307; // максимальная степень double откуда 10
numbSignDouble = 15; // число значащих цифр double откуда 11
identifReceivngSystem = " "; // версия системы куда 12
scale = 1.0; // масштаб 13
unitFlag = 2; // 14 1- дюймы 2 -мм 3- 4 -футы 5 -мили 6 -м 7 -км 8 -милидюймы 9- мкм 10- см 11 - микродюйм
nameUnit = "MM"; // 15
maxNumberOfLineWeightGrad = IGS_WIDTH;// 16
widthOfMaxLineWeight = 1; // 17
dateAndTime = ""; // 18 YYMMMDD.HHNNSS
minResolution = 0.001; // 19 - мин. разрешение системы
maxAbsCoord = 10000; // 20 максимальное координата по модулю
nameOfAuthor = " "; // 21 автор
authorsOrg = " "; // 22 организация
intVer = 0/*3*/; // 23
intDraftStandart = 0; // 24
dateAndTimeMod = " "; // 25
}
};
//-------------------------------------------------------------------------------
// структура для формирования отчета о записи в IGES
// ---
struct ReportEntity {
int32 kompasResNumHigh; // номер в ресурсе строки наименования того, что пришло из Компаса
int32 kompasResNumBase; // номер в ресурсе строки наименования подложки, которая пришла из Компаса
ptrdiff_t igesResNum; // номер в ресурсе строки наименования того, чем записали в IGES
ReportEntity( ptrdiff_t _igesResNum = 0 )
: kompasResNumHigh( 0 )
, kompasResNumBase( 0 )
, igesResNum( _igesResNum )
{}
};
//-------------------------------------------------------------------------------
/// Базовый класс для IGES объектов
// ---
class CONV_CLASS BasicIGES {
public :
ptrdiff_t numStr; ///< место хранения - номер строки в секции DE
union {
VectorDE def;
unsigned short vector;
};
ptrdiff_t color;
ptrdiff_t level;
ptrdiff_t matrix;
ptrdiff_t form;
ReportEntity report;
private:
ptrdiff_t numType; // номер типа
public :
BasicIGES( ptrdiff_t _numType, ptrdiff_t _form = 0 )
: numStr (0)
, vector (0)
, color (0)
, level (0)
, matrix (0)
, form ( _form )
, report ( _numType )
, numType( _numType )
{}
BasicIGES( const BasicIGES & o )
: numStr ( o.numStr )
, vector ( o.vector )
, color ( o.color )
, level ( o.level )
, matrix ( o.matrix )
, form ( o.form )
, report ( o.numType )
, numType( o.numType )
{}
virtual ~BasicIGES() {}
bool Less( const BasicIGES & o ) const { return numType < o.numType ? true : numType > o.numType ? false : form < o.form ? true : form > o.form ? false : matrix < o.matrix;}
bool Eq ( const BasicIGES & o ) const { return numType == o.numType && form == o.form && matrix == o.matrix;}
const ptrdiff_t GetTypeIGES() const { return numType; }
const ptrdiff_t GetFormIGES() const { return form; }
virtual bool operator == ( const BasicIGES & o ) const { return Eq( o ); }
virtual bool operator < ( const BasicIGES & o ) const { return Less( o ); }
};
#endif // __IGES_BASIC_H