Files
Extern/C3d/Include/conv_exchange_settings.h
T
Dario Sassi e8f0fa2d27 Extern :
- C3d aggiornamento delle librerie.
2020-09-14 16:42:31 +00:00

503 lines
52 KiB
C++

////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru Настройки импорта и экспорта.
\en Settings of import and export procedure. \~
\details \ru Интерфейс настроек и предопределённая реализация ConvConvertorProperty3D.
\en Interface of settings and pre-defined implementation ConvConvertorProperty3D. \~
*/
////////////////////////////////////////////////////////////////////////////////
#ifndef __CONV_MODEL_PROPERTIES_H
#define __CONV_MODEL_PROPERTIES_H
#include <math_define.h>
#include <mb_placement3d.h>
#include <mb_data.h>
#include <conv_predefined.h>
//------------------------------------------------------------------------------
/** \brief \ru Константы единиц измерения.
\en Length units constants.\~
\ingroup Data_Interface
*/
// ---
/// \ru Миллиметры. \en Millimeters.
#define LENGTH_UNIT_MM 1.0
/// \ru Сантиметры. \en Centimeters.
#define LENGTH_UNIT_CM 10.0
/// \ru Дециметры. \en Decimeters.
#define LENGTH_UNIT_DM 100.0
/// \ru Метры. \en Meters.
#define LENGTH_UNIT_METER 1000.0
/// \ru Дюймы. \en Inches.
#define LENGTH_UNIT_INCH 25.4
//------------------------------------------------------------------------------
/** \brief \ru Прикладной протокол.
\en Applied protocol.\~
\ingroup Data_Interface
*/
// ---
enum MbeImpExpFormat {
ief_STEP203, ///< \ru STEP прикладной протокол 203 ( Проектирование с управляемой конфигурацией ). \en STEP applied protocol STEP 203 (Configuration controlled design).
ief_STEP214, ///< \ru STEP прикладной протокол 214 ( Проектирование автомобилей ). \en STEP applied protocol STEP 214 (Automotive design).
ief_STEP242, ///< \ru STEP прикладной протокол 242 ( Проектирование автомобилей ). \en STEP applied protocol STEP 242 (Automotive design).
};
#define EXPORT_DEFAULT -1 ///< \ru По умолчанию для заданного формата. \en Default for specified format.
#define EXPORT_STEP_203 203 ///< \ru STEP прикладной протокол 203 ( Проектирование с управляемой конфигурацией ). \en STEP applied protocol STEP 203 (Configuration controlled design).
#define EXPORT_STEP_214 214 ///< \ru STEP прикладной протокол 214 ( Проектирование автомобилей ). \en STEP applied protocol STEP 214 (Automotive design).
#define EXPORT_STEP_242 242 ///< \ru STEP прикладной протокол 242. \en STEP applied protocol STEP 242.
#define EXPORT_ACIS_4 4 ///< \ru ACIS версия 4.0. \en ACIS version 4.0.
#define EXPORT_ACIS_7 7 ///< \ru ACIS версия 7.0 (по умолчанию). \en ACIS version 7.0 (default).
#define EXPORT_ACIS_10 10 ///< \ru ACIS версия 10.0. \en ACIS version 10.0.
//------------------------------------------------------------------------------
/** \brief \ru Индексы строк, передаваемых через конвертер.
\en Indices of strings, transmitted through converter.\~
\ingroup Data_Interface
*/
// ---
enum MbeConverterStrings {
cvs_BEGIN = 0, ///< \ru Для удобства перебора. \en For lookup only.
cvs_STEPAuthor, ///< \ru Автор для конвертера STEP. \en Author of the document, in STEP.
cvs_STEPOrganization, ///< \ru Организация для конвертера STEP. \en The organization, the author is related with, in STEP.
cvs_STEPComment, ///< \ru Комментарий файла формата STEP. \en Annotation, in STEP.
cvs_CAD_NAME, ///< \ru Название САПР при экспорте. \en CAD Name for export.
cvs_END ///< \ru Для удобства перебора. \en For lookup only.
};
//------------------------------------------------------------------------------
/** \brief \ru Индексы, управляющие разрешением на чтение или запись объектов.
\en Indeces, which filter imported/exported objects or properties.\~
\ingroup Data_Interface
*/
// ---
enum MbeIOPermiss {
iop_rSolid = 0, ///< \ru Разрешение на чтение твёрдых тел. \en Import solid solids.
iop_wSolid, ///< \ru Разрешение на запись твёрдых тел. \en Export solid solids.
iop_rSurface, ///< \ru Разрешение на чтение поверхностей. \en Import surfaces.
iop_wSurface, ///< \ru Разрешение на запись поверхностей. \en Export surfaces.
iop_rCurve, ///< \ru Разрешение на чтение кривых. \en Import curves.
iop_wCurve, ///< \ru Разрешение на запись кривых. \en Export curves.
iop_rDrafts, ///< \ru Разрешение на чтение эскизов (не применяется). \en Import drafts (ignored).
iop_wDrafts, ///< \ru Разрешение на запись эскизов. \en Export drafts.
iop_rInvisible, ///< \ru Разрешение на чтение невидимых объектов (не применяется). \en Import invisible objects (not applied).
iop_wInvisible, ///< \ru Разрешение на запись невидимых объектов. \en Export invisible objects.
iop_rPoint, ///< \ru Разрешение на чтение точек. \en Import points.
iop_wPoint, ///< \ru Разрешение на запись точек. \en Export points.
iop_rDocInfo, ///< \ru Разрешение на чтение информации о документе (автор, организация, комментарии). \en Import components info ( author, organization, description ).
iop_wDocInfo, ///< \ru Разрешение на запись информации о документе (автор, организация, комментарии). \en Export components info ( author, organization, description ).
iop_rTextDescription, ///< \ru Разрешение на чтение технических требований. \en Import technical requirements.
iop_wTextDescription, ///< \ru Разрешение на запись технических требований. \en Export technical requirements.
iop_rDimensions, ///< \ru Разрешение на чтение размеров. \en Import dimensions.
iop_wDimensions, ///< \ru Разрешение на запись размеров. \en Export dimensions.
iop_rAttributes, ///< \ru Разрешение на чтение атрибутов. \en Import attributes.
iop_wAttributes, ///< \ru Разрешение на запись атрибутов. \en Export attributes.
iop_rBRep, ///< \ru Разрешение на чтение форм изделий в граничном представлении (только в JT). \en Import shapes in boundary representation (JT only).
iop_wBRep, ///< \ru Разрешение на запись форм изделий в граничном представлении (только в JT). \en Export shapes in boundary representation (JT only).
iop_rPolygonal, ///< \ru Разрешение на чтение полигональных форм изделий. \en Import polygonal shapes.
iop_wPolygonal, ///< \ru Разрешение на запись полигональных форм изделий. \en Export polygonal shapes.
iop_rLOD0, ///< \ru Разрешение на чтение полигональных форм изделий уровня детализации 0. \en Import polygonal shapes of the 0-th LOD.
iop_wLOD0, ///< \ru Разрешение на запись полигональных форм изделий уровня детализации 0. \en Export polygonal shapes of the 0-th LOD.
iop_rAssociated, ///< \ru Разрешение на чтение ассоциированной геометрии (резьбы и др). \en Import associated geometry (threads etc).
iop_wAssociated, ///< \ru Разрешение на запись ассоциированной геометрии (резьбы и др). \en Export associated geometry (threads etc).
iop_rDensity, ///< \ru Разрешение на чтение единиц плотности. \en Import density units.
iop_wDensity, ///< \ru Разрешение на запись единиц плотности. \en Export density units.
iop_rValidationProperties, ///< \ru Разрешение на чтение контрольных параметров - объёма, площади поверхности, центра масс. \en Import validation properties - volume, surface area, centroid.
iop_wValidationProperties, ///< \ru Разрешение на запись контрольных параметров - объёма, площади поверхности, центра масс. \en Export validation properties - volume, surface area, centroid.
iop_rStyle, ///< \ru Разрешение на чтение элементов оформления (цвет, начертание, и т.п.). \en Import appearance.
iop_wStyle, ///< \ru Разрешение на запись элементов оформления (цвет, начертание, и т.п.). \en Export appearance.
iop_END
};
//------------------------------------------------------------------------------
/** \brief \ru Тип сообщения об ошибке при выводе в лог.
\en Type of a log message.\~
\ingroup Data_Exchange
*/
// ---
enum eMsgType {
emt_ErrorNoId,///< \ru Ошибка формата. Значение id игнорируется, выводится только текст. \en Error not related with a certain record. The id field is ignored.
emt_TextOnly, ///< \ru Значение id игнорируется, выводится только текст. \en Used to type message only. The id field is ignored.
emt_Info, ///< \ru Рабочая информация. \en Info.
emt_Warning, ///< \ru Предупреждение. \en Warning.
emt_Error ///< \ru Ошибка формата или неустранимая ошибка преобразования. \en Format mismatch or fatal converting error.
};
//------------------------------------------------------------------------------
/** \brief \ru Код подробного сообщения об ошибке при выводе в лог.
\en The key of a detailed log message.\~
\ingroup Data_Interface
*/
// ---
enum eMsgDetail {
emd_Title, ///< \ru Заголовок файла. \en File header.
emd_HEADError, ///< \ru Тип сообщения - ошибка. \en Error.
emd_HEADWarinig, ///< \ru Тип сообщения - Предупреждение. \en Warning.
emd_HEADInfo, ///< \ru Тип сообщения - Информация. \en Info.
emd_HEADDefaultMsg, ///< \ru Тип сообщения - Сообщение. \en Message.
emd_STOPFileOpenError, ///< \ru Ошибка открытия файла. \en Cannot open file.
emd_STOPFileOpenErrorOrEmpty, ///< \ru Ошибка открытия файла или файл пуст. \en Cannot open file or file is empty.
emd_STOPHeaderReadError, ///< \ru Не удалось прочитать заголовок файла. \en Cannot read file header.
emd_STOPNoOrBadData, ///< \ru Файл не содержит данных или их не удалось распознать. \en File body does not exist or incorrect.
emd_STOPIncorrectStructure, ///< \ru Неверная структура файла. \en Incorrect file structure.
emd_STOPAddressConflict, ///< \ru Данный адрес имеют два различных объекта. \en Two or more entities have the same id.
emd_ErrorNoRootObject, ///< \ru Не найден корневой объект. \en Root object not found.
emd_ErrorSyntaxIncorrectFormFloat, ///< \ru Невозможно прочитать действительную константу. \en Error reading floating-point number.
emd_ErrorEmptyLoop, ///< \ru Цикл грани пуст. \en Face has an empty loop.
emd_ErrorEmptyQueriesList, ///< \ru Список запросов пуст. \en
emd_ErrorEmptyObjectsList, ///< \ru Список объектов пуст. \en List of objects is empty.
emd_ErrorEmptyGeomObjectsList, ///< \ru Список геометрических объектов пуст. \en List of geometric objects is empty.
emd_ErrorEmptyShellsList, ///< \ru Список оболочек пуст. \en List of shells is empty.
emd_ErrorEmptyListOfWrieframes, ///< \ru Список каркасов пуст. \en List of frames is empty.
emd_ErrorEmptyCurveCompositesList, ///< \ru Список компонент составной кривой пуст. \en Composite curve has an empty list of composites.
emd_ErrorEmptyBoundCurvesList, ///< \ru Список граничных кривых пуст. \en List of boundary curves is empty.
emd_ErrorEmptyEdgeList, ///< \ru Список рёбер пуст. \en List of edges is empty.
emd_ErrorEmptyFacesList, ///< \ru Список граней пуст. \en List of faces is empty.
emd_ErrorEmptyReferencesList, ///< \ru Список ссылок пуст. \en List of references is empty.
emd_ErrorEmptyOrMore2ReferencesList,///< \ru Список ссылок пуст или содержит более 2 элементов. \en List of references is empty or contains more than 2 items.
emd_ErrorUndefinedFaceSurfaceRef, ///< \ru Ссылка на базовую поверхность грани не определена. \en Invalid reference to base surface.
emd_ErrorUndefinedBaseCurveRef, ///< \ru Ссылка на базовую кривую не определена. \en Invalid reference to base curve.
emd_ErrorRadiusTooCloseToZero, ///< \ru Радиус слишком мал. \en Too small radius.
emd_ErrorRadiusValueNegative, ///< \ru Отрицательное значение радиуса. \en Negative value of radius.
emd_ErrorEllipseAxisTooCloseToZero, ///< \ru Длина полуоси эллипса слишком мала. \en Ellipse axis is too short.
emd_ErrorEllipseAxisNegative, ///< \ru Отрицательная длина полуоси эллипса. \en Ellipse axis length is negative.
emd_ErrorNegativeDegree, ///< \ru Отрицательный порядок сплайна. \en Negative spline order.
emd_ErrorNegativeUDegree, ///< \ru Отрицательный порядок сплайновой поверхности по U. \en Spline surface order along U is negative.
emd_ErrorNegativeVDegree, ///< \ru Отрицательный порядок сплайновой поверхности по V. \en Spline surface order along V is negative.
emd_ErrorDegreeFixImpossible, ///< \ru Невозможно исправить порядок сплайна. \en Cannot fix spline order.
emd_ErrorPolylinePointListLess2, ///< \ru Список точек ломаной содержит менее 2 элементов. \en Polyline contains less then 2 points.
emd_ErrorPointListLess2, ///< \ru Список точек содержит менее 2 элементов. \en List of points contains less then 2 points.
emd_ErrorKnotsListLess2, ///< \ru Список узлов содержит менее 2 элементов. \en List of knots contains less then 2 values.
emd_ErrorWeightsListLess2, ///< \ru Список весов содержит менее 2 элементов. \en List of weights contains less then 2 values.
emd_ErrorUPointListLess2, ///< \ru Список точек по U содержит менее 2 элементов. \en List of points along U contains less then 2 points.
emd_ErrorUKnotsListLess2, ///< \ru Список узлов по U содержит менее 2 элементов. \en List of knots along U contains less then 2 values.
emd_ErrorUWeightsListLess2, ///< \ru Список весов по U содержит менее 2 элементов. \en List of weights along U contains less then 2 values.
emd_ErrorVPointListLess2, ///< \ru Список точек по V содержит менее 2 элементов. \en List of points along V contains less then 2 points.
emd_ErrorVKnotsListLess2, ///< \ru Список узлов по V содержит менее 2 элементов. \en List of knots along V contains less then 2 values.
emd_ErrorVWeightsListLess2, ///< \ru Список весов по V содержит менее 2 элементов. \en List of weights along V contains less then 2 values.
emd_ErrorListsSizeMismatch, ///< \ru Размеры списков не согласуются. \en Lists size mismatch.
emd_ErrorKnotsWeightsListsOrderMismatch, ///< \ru Размеры списков узлов и весов не согласуются с порядком сплайна. \en Sizes of knots and weights lists do not agree with the spline order.
emd_ErrorKnotsWeightsListsSizeMismatch, ///< \ru Размеры списков узлов и весов не согласуются. \en Size of knots list does not agree with the size of the list of weights.
emd_ErrorUKnotsWeightsListsSizeMismatch, ///< \ru Размеры списков узлов и весов по U не согласуются. \en Sizes of knots and weights lists along U do not agree.
emd_ErrorVKnotsWeightsListsSizeMismatch, ///< \ru Размеры списков узлов и весов по V не согласуются. \en Sizes of knots and weights lists along V do not agree.
emd_ErrorSplineCurveNotCreatedUndefinedKnotsVector, ///< \ru Сплайновая кривая не создана - не определёны узлы. \en Cannot create spline, because knots are not defined.
emd_ErrorSplineSurfaceNotCreatedUndefinedKnotsVectors, ///< \ru Сплайновая поверхность не создана - не определёны узлы. \en Cannot create spline surface, because knots are not defined.
emd_ErrorInCorrectSplineSurfaceData, ///< \ru Неверно заданы параметры NURBS поверхности. \en Spline surface parameters are not valid.
emd_WarningNoSectionTerminator, ///< \ru Маркер завершения раздела не обнаружен. \en Section terminator not found.
emd_WarningSyntaxMultipleDotInFloat, ///< \ru Повторяющаяся точка в действительном числе. \en Too many dots in a floating-point number.
emd_WarningSyntaxMultipleEInFloat, ///< \ru Повторяющаяся E в действительном числе. \en Too many E signs in a floating-point number.
emd_WarningLoopNotClosed, ///< \ru Цикл не замкнут. \en Loop is not closed.
emd_WarningContourNotClosed, ///< \ru Контур не замкнут. \en contour is not closed.
emd_WarningUndefinedRef, ///< \ru Ссылка не определена. \en Invalid reference.
emd_WarningToroidalSurfaceDegenerated, ///< \ru Тороидальная поверхность вырождена. \en Toroidal surface is degenerate.
emd_WarningUndefinedBasisCurve, ///< \ru Не определена базовая кривая. \en Base curve not defined.
emd_WarningUndefinedSweptCurve, ///< \ru Не определена образующая кривая. \en Generatrix curve is not defined.
emd_WarningUndefinedExtrusionDirection, ///< \ru Не определено направление выдавливания. \en Extrusion direction is not defined.
emd_WarningUndefinedAxis, ///< \ru Не определена ось. \en Axis is not defined.
emd_WarningUndefinedAxisOfRevolution, ///< \ru Не определена ось вращения. \en Rotation axis is not defined.
emd_WarningUndefinedBasisSurface, ///< \ru Не определена базовая поверхность. \en Base surface is not defined.
emd_WarningUndefinedRepresentation, ///< \ru Не определено представление. \en Representation is not defined.
emd_WarningUndefinedTransformationOperator, ///< \ru Не определён оператор преобразования. \en Transformation is not defined.
emd_WarningUndefinedObjectTransformBy, ///< \ru Не определён объект, по которому ведётся преобразование. \en Basic object of transformation is not defined.
emd_WarningUndefinedObjectToTransform, ///< \ru Не определён преобразуемый объект. \en No object to transform is defined.
emd_WarningUndefinedCurve, ///< \ru Не определена кривая. \en Curve is not defined.
emd_WarningUndefinedCompositeSegment, ///< \ru Не определён сегмент составной кривой. \en Composite curve segment is not defined.
emd_WarningUndefinedDirection, ///< \ru Не определено направление. \en Direction is not defined.
emd_WarningUndefinedAxisDirection, ///< \ru Не определено направление оси. \en Axis direction is not defined.
emd_WarningDegeneratedItemWasSkipped, ///< \ru Проигнорирован (пропущен) вырожденный объект. \en Degenerate object was missed.
emd_WarningFloatParceFailureDefaultUsed, ///< \ru Ошибка разпознавания числа с плавающей точкой, подставлено значение по умолчанию. \en Floating point value couldn't be parced; default value was used.
emd_WarningSameShapeEdgeTwiceInLoop, ///< \ru В цикле дважды встречается одинаковое ребро. \en Edge based on same curves twice enters a loop.
emd_WarningIncorrectFaceWasNotAddedToShell, ///< \ru Некорректная грань не была добавлена в оболочку. \en Incorrect face was not added to shell.
emd_WarningBoundsNotConnectedWithSeams, ///< \ru Границы замкнутой грани не стыкуются со швами. \en Bounds of periodic face not connected with seams.
emd_WarningIntCurveWasReplacedBySegment, ///< \ru Кривая пересечения была заменена отрезком. \en Intersection curve was replaced by segment.
emd_MessageWeightsFilled, ///< \ru Веса заданы. \en Weights are set.
emd_ErrorSTEPEdgeCurveFlagTSingleRedefinition, ///< \ru При создании ребра в конвертере STEP дважды указана грань с флагом .T.. \en Double .T. face inclusion in STEP.
emd_ErrorSTEPEdgeCurveFlagFSingleRedefinition, ///< \ru При создании ребра в конвертере STEP дважды указана грань с флагом .F.. \en Double .F. face inclusion in STEP.
emd_ErrorSTEPEdgeCurveFlagTMultipleRedefinition, ///< \ru При создании ребра в конвертере STEP более чем дважды указана грань с флагом .T.. \en Multiple .T. face inclusion in STEP.
emd_ErrorSTEPEdgeCurveFlagFMultipleRedefinition, ///< \ru При создании ребра в конвертере STEP более чем дважды указана грань с флагом .F.. \en Multiple .F. face inclusion in STEP.
emd_ErrorSTEPUndefinedFaceGeometry, ///< \ru Не определена геометрия грани в конвертере STEP. \en Face geometry is not defined in STEP.
emd_ErrorSTEPSyntaxMultipleDotInEnum, ///< \ru Синтаксическая ошибка в файле формата STEP - в перечислении символ "." встречается более 1 раза подряд. \en Too many dots in a enumeration record in STEP.
emd_WarningSTEPPointCorrection, ///< \ru Скорректированы координаты точки. \en Point location corrected. ( by BUG_73871 )
emd_WarningSTEPEdgeCurveByVertices, ///< \ru Кривая ребра скорректирована с учётом координат вершин. \en Edge curve corrected in accordance with vertices. ( by BUG_73871 )
emd_MessageSTEPFlagChangedToF, ///< \ru Произведена замена флага на .F.. \en Flag was set as .F. in STEP.
emd_MessageSTEPFlagChangedToT, ///< \ru Произведена замена флага на .T.. \en Flag was set as .T. in STEP.
emd_WarningBooleanUndefined, ///< \ru Булево значение не определено. \en Boolean value not defined.
emd_WarningACISUnsupportedInterpoleCurveType, ///< \ru Данный подтип ACIS интерполяционной кривой не поддерживается. \en Interpolation curve type is not supported by SAT converter.
emd_WarningACISUnsupportedParametricCurveType, ///< \ru Данный подтип ACIS параметрической кривой не поддерживается. \en Parametric curve type is not supported by SAT converter.
emd_ErrorACISUnsupportedVersion, ///< \ru Данная версия ACIS NT не поддерживается. \en Th version of file is not supported by SAT converter.
emd_WarningACISCannotImportEntityId, ///< \ru Не удалось импортировать объект с данным Id. \en Cannot import this object by SAT converter.
emd_WarningACISIncorrectIntAttribute, ///< \ru Некорректный целочисленный атрибут. \en Incorrect integer attribute.
emd_WarningVRMLGridDuplicatesInMeshes, ///< \ru Присутствуют дубликаты объектов в сетках. \en There are grid duplicates in meshes.
emd_WarningACISLawIntCurveIsNotCreated, ///< \ru Кривая по закону не создана. \en Law intersection curve is not created.
emd_ErrorIGESIncorrectExternalReference, ///< \ru Неверное имя внешней ссылки. \en Invalid external reference in IGES.
emd_ErrorSTLTooManyTrianglesForBinary, ///< \ru Триангуляция исходной модели содержит больше треугольников, чем допустимо стандартом ( не выражается 32-битным беззнаковым числом ) ( by BUG_71422 ). \en Too many triangles (not represented by unsigned 32-bit number) for export to binary STL.
emd_ErrorXTUnsupportedVersion, ///< \ru Данная версия X_T не поддерживается. \en Th version of file is not supported by X_T converter.
emd_ErrorJTUnsupportedVersion ///< \ru Данная версия JT не поддерживается. \en Th version of file is not supported by JT converter.
};
//------------------------------------------------------------------------------
/** \brief \ru Интерфейс свойств конвертера.
\en Interface of converter's properties. \~
\details \ru Интерфейс свойств конвертера реализует выдачу имени документа и других сведений о нём, таких как автор,
и управление режимами работы - сшивкой поверхностей с возможностью создания твёрдых
тел, фильтрацией объектов, формирование журнала трансляции.
\en Interface of converter's properties realizes getting the document's name and other information about it, such as the author,
and management of modes of operations - stitching of surfaces with possibility of solids creation,
objects filtration, generation of translation journal. \~
\ingroup Exchange_Interface
*/
class IConvertorProperty3D {
public :
virtual ~IConvertorProperty3D() {}
public:
/// \ru Получить имя документа. \en Get document's name.
virtual const std::string GetDocumentName () const = 0; //{ return std::string( GetDocName().get_str() ); };
/// \ru Получить имя файла для конвертирования. \en Get file name for converting.
virtual const c3d::path_string FullFilePath () const = 0 ;//{ return c3d::path_string( GetFileName().c_str() ); };
/// \ru Является ли файл текстовым. \en Whether the file is a text file.
virtual bool IsFileAscii () const = 0;
/// \ru Получить версию формата при экспорте. \en Get the version of format for export.
virtual long int GetFormatVersion () const { return EXPORT_DEFAULT; };
/// \ru Задать формат для экспорта \en Set format for export
DEPRECATE_DECLARE virtual MbeImpExpFormat GetFormat () const { return ief_STEP203; }
/// \ru Следует ли экспортировать только поверхности ( введено для работы конвертера IGES ). \en Whether to export only surfaces (introduced for work with converter IGES ).
virtual bool IsOutOnlySurfaces() const = 0;
/// \ru Является ли экспортируемый документ сборкой. \en Whether the document for export is an assembly.
virtual bool IsAssembling () const = 0;
/// \ru Получить значение разрешения на импорт экспорт объектов определенного типа. \en Get the value of permission for import-export of objects of a certain type.
virtual bool GetIoPermission( MbeIOPermiss nPermission ) const = 0;
/// \ru Получить значения разрешений на импорт экспорт объектов определенных типов. \en Get values of permission for import-export of objects of certain types.
virtual void GetIoPermissions( std::vector<bool>& ioPermissions ) const = 0;
/// \ru Установить разрешение на импорт экспорт объектов определенного типа. \en Set permission for import-export of objects of a certain type.
virtual void SetIoPermission( MbeIOPermiss nPermission, bool set ) = 0;
/// \ru Получить значение специфичной строки для конвертера. \en Get the value of a certain string for the converter.
virtual bool GetPropertyString ( MbeConverterStrings nString, std::string & propertyString ) const = 0;
/// \ru Установить значение специфичной строки для конвертера. \en Set the value of a certain string for the converter.
virtual void SetPropertyString ( MbeConverterStrings nString, const std::string & propertyString ) = 0;
/// \ru Представление текста в аннотационных объектах. \en Text representation in annotation objects.
virtual eTextForm GetAnnotationTextRepresentation () const { return exf_TextOnly; }
/// \ru Следует ли компоненты экспортировать в разные файлы (если позволяет формат). \en Export components into separate files ( if provided in format).
virtual bool ExportComponentsSeparately() const { return false; }
/// \ru Получить ЛСК, относительно которой позиционирована модель. \en Get the location, the model is placed in.
virtual MbPlacement3D GetOriginLocation() const = 0;
/// \ru Заменять ли принудительно СК компонент на правые. \en Replace components' placements to right-oriented.
virtual bool ReplaceLocationsToRight() const = 0;
/** \brief \ru Сшивать ли поверхности автоматически.
\en If surfaces should be stitched automatically. \~
\return \ru true - Сшивать поверхности автоматически, false - Спросить пользователя, сшивать ли поверхности.
\en true - Stitch surfaces automatically, false - Ask user first time. \~
\param[out] stitchPrecision - \ru Точность сшивки.
\en Stitch precision. \~
*/
virtual bool EnableAutoStitch( double& /*stitchPrecision*/ ) const = 0;
/** \brief \ru Получить множитель единиц длины по отношению к миллиметру.
\en Get the factor of the length units to millimeters. \~
\details \ru При импорте, если единицы измерения не заданы явно с помощью средств, предоставляемых обменным форматом,
все размеры (координаты точек, радиусы) умножаются на возвращаемое значение. При экспорте либо с помощью
средств, предоставляемых обменным форматом, задаются единицы измерения, либо все размеры модели (координаты
точек, радиусы) умножаются на возвращаемое значение.
\en During the import all spatial objects (coordinate values, radiuses) are multiplied by the returned value,
unless the scale factor comes from the exchange file. During the export the exchange format facilities are
used to specify the length units or all spatial objects (coordinate values, radiuses) are multiplied by the
returned value. \~
*/
virtual double LengthUnitsFactor() const { return LENGTH_UNIT_MM; }
/** \brief \ru Получить дополнительный множитель единиц длины по отношению к миллиметру в модели приложения.
\en Get addifional factor of the length units to millimeters in the application model. \~
\details \ru При импорте из всех форматов за исключением JT, если единицы измерения, в том числе и заданные
явно с помощью средств, предоставляемых обменным форматом, все размеры (координаты точек, радиусы) умножаются
на возвращаемое значение. При экспорте либо с помощью средств, предоставляемых обменным форматом, задаются
единицы измерения, либо все размеры модели (координаты точек, радиусы) умножаются на возвращаемое значение.
\en During the import from all formats except for JT all spatial objects (coordinate values, radiuses) are
multiplied by the returned value, even if the scale factor comes from the exchange file. During the export the
exchange format facilities are used to specify the length units or all spatial objects (coordinate values,
radiuses) are multiplied by the returned value. \~
*/
virtual double AppLengthUnitsFactor() const { return LENGTH_UNIT_MM; }
/** \brief \ru Сделать запись в журнал конвертирования.
\en Make a record in the converter report. \~
\param[in] id - \ru Идентификатор элемента внутри файла стороннего формата.
\en Identifier of an element inside the file of a foreign format. \~
\param[in] msgType - \ru Тип сообщения.
\en Message type. \~
\param[in] msgText - \ru Код сообщения.
\en Message code. \~
*/
virtual void LogReport( ptrdiff_t id, eMsgType msgType, eMsgDetail msgText ) = 0;
// /** \brief \ru Следует ли показывать сообщения и диалоги пользователю. \en Whether to show messages and dialog to the user. \~
// \details \ru Обеспечивает работу через API. \en Provide possibility for work via API. \~
// \return \ru true - обычная работа, false - через API. \en true - ordinary work, false - via API. \~
// */
virtual bool CanShowMessages() const = 0;
/// \ru Дать данные вычисления триангуляции (для конвертера JT, STL и VRML). \en Get data for step calculation during triangulation (for JT, STL, VRML only).
virtual MbStepData TesselationParameters() const { return MbStepData(); }
/// \ru Дать данные вычисления триангуляции уровня детализации (для конвертера JT). \en Get data for step calculation during triangulation of LOD0 (for JTonly).
virtual MbStepData LOD0TesselationParameters() const { return TesselationParameters(); }
/// \ru Флаг сохранения совпадающих точек швов. (для конвертера STL и VRML). \en Whether to keep coincident points of seams (for STL, VRML only).
virtual bool DualSeams() const { return true; }
/// \ru Флаг сохранения совпадающих точек швов. (для конвертера STL и VRML). \en Whether to keep coincident points of seams (for STL, VRML only).
virtual void DualSeams( bool ) {}
/// \ru Проводить ли аудит траснляции. \en Whether to audit the translation.
virtual bool TotalAudit() { return false; }
/// \ru Выполнять ли слияние подобных граней. \en Whether to join similar faces.
virtual bool JoinSimilarFaces() const { return true; }
/// \ru Добавлять ли удаленные грани в качестве оболочек. \en Whether to add removed faces as shells.
virtual bool AddRemovedFacesAsShells() const { return false; }
}; // IConvertorProperty3D
//------------------------------------------------------------------------------
/** \brief \ru Предопределённая реализация интерфейса свойств конвертера.
\en Pre-defined implementation of converter's properties. \~
\ingroup Exchange_Interface
*/
class CONV_CLASS ConvConvertorProperty3D : public IConvertorProperty3D {
public:
std::string docName; ///< \ru Имя документа. \en Document name.
c3d::path_string fileName; ///< \ru Имя файла. \en File name.
bool fileASCII; ///< \ru Экспортировать ли в текстовый файл (если формат поддерживает двоичный). \en Export to text file (if format supports binary one).
long int formatVersion; /// \ru Версия формата при экспорте. \en The version of format for export.
bool exportIGESTopology; ///< \ru Экспортировать ли топологию в IGES. \en Export topology items into IGES.
std::vector<bool> ioPermissions; ///< \ru Фильтр объектов по типам. \en Type objects filter.
std::map<MbeConverterStrings, std::string> propertyStrings; ///< \ru Особые значения сведений о документе. \en Specific values of documents properties.
eTextForm annotTextReprSTEP; ///< \ru Представление текста элементов аннотации. \en Text representation in annotation items.
MbPlacement3D originLocation; ///< \ru ЛСК документа. \en Own placement of the document.
bool replaceLocationsToRight; ///< \ru Следует ли принудительно преобразовывать ЛСК объектов к правым (для форматов, допускающих левые). \en Force replacement of locations to right ones.
bool enableAutostitch; ///< \ru Сшивать ли поверхности автоматически. \en Automatically stitch surfaces into shells.
double autostitchPrecision; ///< \ru Точность сшивки. \en Stitch precision.
bool showMessages; ///< \ru Отображать ли сообщения. \en Invoke messages show.
MbStepData tesseleationStepData; ///< \ru Параметры триангуляции при экспорте в STL и VRML. \en Tessellation parameters for export into STL and VRML.
MbStepData LOD0StepData; ///< \ru Параметры триангуляции при экспорте в JT. \en Tessellation parameters for export into JT.
bool dualSeams; ///< \ru Признак сдваивания швов при экспорте в STL и VRML. \en Make dual seams when export into STL and VRML.
bool joinSimilarFaces; ///< \ru Выполнять ли слияние подобных граней. \en Whether to join similar faces.
bool addRemovedFacesAsShells; ///< \ru Добавлять ли удаленные грани в качестве отдельных оболочек. \en Whether to add removed faces as shells.
double lengthUnitsFactor; ///< \ru Единицы длины модели. \en Length units of the model.
double appUnitsFactor; ///< \ru Единицы длины модели пользовательского приложения. \en Length units of the model used in user application.
bool auditEnabled;
/// \ru Сведения о сообщениях конвертера. \en Converter message data.
struct LogRecord {
ptrdiff_t id; ///< \ru Идентификатор записи. \en Record id.
eMsgType msgType; ///< \ru Тип сообщения. \en Message type.
eMsgDetail msgText; ///< \ru Код сообщения. \en Message code.
};
std::vector< LogRecord > logRecords; ///< \ru Сообщения конвертера. \en Converter messages.
public:
ConvConvertorProperty3D(); ///< \ru Конструктор. \en Constructor.
/// \ru Получить имя документа. \en Get document's name.
virtual const std::string GetDocumentName () const { return docName; };
/// \ru Получить имя файла для конвертирования. \en Get file name for converting.
virtual const c3d::path_string FullFilePath () const { return fileName; };
/// \ru Является ли файл текстовым. \en Whether the file is a text file.
virtual bool IsFileAscii () const;
/// \ru Получить версию формата при экспорте. \en Get the version of format for export.
virtual long int GetFormatVersion () const;
/// \ru Следует ли экспортировать только поверхности ( введено для работы конвертера IGES ). \en Whether to export only surfaces (introduced for work with converter IGES ).
virtual bool IsOutOnlySurfaces() const;
/// \ru Является ли экспортируемый документ сборкой. \en Whether the document for export is an assembly.
virtual bool IsAssembling () const { return true; };
/// \ru Получить значение разрешения на импорт экспорт объектов определенного типа. \en Get the value of permission for import-export of objects of a certain type.
virtual bool GetIoPermission( MbeIOPermiss nPermission ) const;
/// \ru Получить значения разрешений на импорт экспорт объектов определенных типов. \en Get values of permission for import-export of objects of certain types.
virtual void GetIoPermissions( std::vector<bool>& ioPermissions ) const;
/// \ru Установить разрешение на импорт экспорт объектов определенного типа. \en Set permission for import-export of objects of a certain type.
virtual void SetIoPermission( MbeIOPermiss nPermission, bool isSet );
/// \ru Получить значение специфичной строки для конвертера. \en Get the value of a certain string for the converter.
virtual bool GetPropertyString ( MbeConverterStrings nString, std::string & propertyString ) const;
/// \ru Установить значение специфичной строки для конвертера. \en Set the value of a certain string for the converter.
virtual void SetPropertyString ( MbeConverterStrings nString, const std::string & propertyString );
/// \ru Представление текста в аннотационных объектах. \en Text representation in annotation objects.
virtual eTextForm GetAnnotationTextRepresentation () const;
/// \ru Следует ли компоненты экспортировать в разные файлы (если позволяет формат). \en Export components into separate files ( if provided in format).
virtual bool ExportComponentsSeparately() const;
/// \ru Получить ЛСК, относительно которой позиционирована модель. \en Get the location, the model is placed in.
virtual MbPlacement3D GetOriginLocation() const;
/// \ru Заменять ли принудительно СК компонент на правые. \en Replace components' placements to right-oriented.
virtual bool ReplaceLocationsToRight() const;
/** \brief \ru Сшивать ли поверхности автоматически.
\en If surfaces should be stitched automatically. \~
\return \ru true - Сшивать поверхности автоматически, false - Спросить пользователя, сшивать ли поверхности.
\en true - Stitch surfaces automatically, false - Ask user first time. \~
\param[out] stitchPrecision - \ru Точность сшивки.
\en Stitch precision. \~
*/ virtual bool EnableAutoStitch( double& /*stitchPrecision*/ ) const;
/// \ru Получить множитель единиц длины по отношению к миллиметру. \en Get the factor of the length units to millimeters.
virtual double LengthUnitsFactor() const;
/** \brief \ru Получить множитель единиц длины по отношению к миллиметру в модели приложения.
\en Get the factor of the length units to millimeters in the application model. \~
*/
virtual double AppLengthUnitsFactor() const;
/** \brief \ru Сделать запись в журнал конвертирования.
\en Make a record in the converter report. \~
\param[in] id - \ru Идентификатор элемента внутри файла стороннего формата.
\en Identifier of an element inside the file of a foreign format. \~
\param[in] msgType - \ru Тип сообщения.
\en Message type. \~
\param[in] msgText - \ru Код сообщения.
\en Message code. \~
*/
virtual void LogReport( ptrdiff_t id, eMsgType msgType, eMsgDetail msgText );
// /** \brief \ru Следует ли показывать сообщения и диалоги пользователю. \en Whether to show messages and dialog to the user. \~
// \details \ru Обеспечивает работу через API. \en Provide possibility for work via API. \~
// \return \ru true - обычная работа, false - через API. \en true - ordinary work, false - via API. \~
// */
virtual bool CanShowMessages() const;
/// \ru Дать данные вычисления триангуляции (для конвертера STL и VRML). \en Get data for step calculation during triangulation (for STL, VRML only).
virtual MbStepData TesselationParameters() const;
/// \ru Дать данные вычисления триангуляции уровня детализации (для конвертера JT). \en Get data for step calculation during triangulation of LOD0 (for JTonly).
virtual MbStepData LOD0TesselationParameters() const;
/// \ru Получить флаг сохранения совпадающих точек швов. (для конвертера STL и VRML). \en Whether to keep coincident points of seams (for STL, VRML only).
virtual bool DualSeams() const;
/// \ru Задать флаг сохранения совпадающих точек швов. (для конвертера STL и VRML). \en Whether to keep coincident points of seams (for STL, VRML only).
virtual void DualSeams( bool );
/// \ru Проводить ли аудит траснляции. \en Whether to audit the translation.
virtual bool TotalAudit();
/// \ru Выполнять ли слияние подобных граней. \en Whether to join similar faces.
virtual bool JoinSimilarFaces() const { return joinSimilarFaces; }
/// \ru Добавлять ли удаленные грани в качестве оболочек. \en Whether to add removed faces as shells.
virtual bool AddRemovedFacesAsShells() const { return addRemovedFacesAsShells; }
OBVIOUS_PRIVATE_COPY( ConvConvertorProperty3D )
}; // IConvertorProperty3D
#endif // __CONV_MODEL_PROPERTIES_H