//////////////////////////////////////////////////////////////////////////////// // // gayka.h - Конструкторский элемент на Visual C++ - гайка // //////////////////////////////////////////////////////////////////////////////// #ifndef __GAYKA_H #define __GAYKA_H #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #ifndef __LIBTOOL_H #include #endif // Используемая структура struct HotPointDescription; //------------------------------------------------------------------------------- // Название колонок для спецификации // --- #define SPC_FORMAT 1 // Формат #define SPC_ZONA 2 // Зона #define SPC_POSITION 3 // Позиция #define SPC_MARKER 4 // Обозначение #define SPC_NAME 5 // Наименование #define SPC_COUNT 6 // Количество #define SPC_NOTE 7 // Примечание //------------------------------------------------------------------------------- // Маски настройки // --- #define AXIS_OFF 0x1 // FALSE - рисовать, TRUE - не рисовать #define PITCH 0x2 // FALSE - крупный шаг, TRUE - мелкий шаг #define SIMPLE 0x10 // FALSE - нормальная отрисовка, TRUE - упрощенная отрисовка #define ISPOLN 0x80 // FALSE - исполнение 1, TRUE - исполнение 2 //------------------------------------------------------------------------------- // Дополнительные маски // --- #define KEY_S_ON 0x1 // TRUE - включены дополнитеоьные размеры под ключ, FALSE - выключены #define KEY_S 0x2 // TRUE - дополнительный размер под ключ, FALSE - обычный размер под ключ #define KEY_S_GRAY 0x8 // TRUE - греить "Дополнитеоьные размеры под ключ" #define PITCHOFF 0x800 // TRUE - есть только крупный шаг, FALSE - есть крупный и мелкий шаг //------------------------------------------------------------------------------- // Насроечная информация // --- #define SPC_CLEAR_GEOM FALSE // Очищать геометрию при редактировании объекта спецификации #define STANDART_SECTION 25 // Номер раздела и подраздела спецификации #define COUNT_MASSA 1000 // Количество деталей масса которых лежит в ГОСТ-е #define LIB_HELPFILE "gayka.hlp" // Имя файла помощи //------------------------------------------------------------------------------- // Параметры макрообъекта // --- struct BaseMacroParam { float angle; // Угол поворота bool flagSpcCreate; // Создать объект спецификации short drawType; // Тип отрисовки bool typeSwitch; // Тип запроса положения базовой точки элемента 0 - Placement, 1 - Cursor // Placement - точка и направление оси 0X, // Cursor - точка ( направление совпадает с осью 0X текущей СК ) }; //------------------------------------------------------------------------------- // Параметры гайки ГОСТ 5915 // --- struct GAYKA5915 { float dr; float s; float D; float da; float h; float d2; float p; short maskAdjustment; // Битовые маски настройки short classAccuracy; // Класс точности float hatchAngle; float hatchStep; short version; // Версия макрообъекта float massa; short indexMassa; // 0 - металл, 1 - алюмин сплав, 2 - латунь short maskAdditional; // Битовые маски дополнительные }; //------------------------------------------------------------------------------- // Указатели на отношения к БД // --- struct SimpleBase { reference bg; // Указатель базы reference rg1, rg2; // Указатель отношения }; //////////////////////////////////////////////////////////////////////////////// // // Класс гайки ГОСТ 5915 // //////////////////////////////////////////////////////////////////////////////// class Gayka5915 { protected : BaseMacroParam m_paramMacro; // Параметры макрообъекта GAYKA5915 m_paramGayka; // Параметры гайки ГОСТ 5915 reference m_refMacro; // Указатель на макрообъект bool m_flagMode; // Режим работы метода библиотеки (создание или редактирование макрообъекта) public : static Gayka5915 * m_pCallbackCurrentGayka; static bool m_flagSwitch; // Переключение процессов с Placement на Cursor static reference m_refSpcObject; // Объект спецификации Gayka5915(); Gayka5915( Gayka5915& other ); void Assign( Gayka5915& other ); // Копирование operator void* () { return &m_paramMacro; } // Оператор приведения по умолчанию к void* ( указатель на параметры ) int GetSize() { return sizeof(BaseMacroParam) + sizeof(GAYKA5915); } // Размер параметров GAYKA5915& GetParamGayka() { return m_paramGayka; } // Возврашает параметры гайки BaseMacroParam& GetParamMacro() { return m_paramMacro; } // Возврашает параметры макро short& GetDrawType() { return m_paramMacro.drawType; } // Возврашает тип отрисовки bool MacroElementParam(); // Диалог параметров void Draw(); // Отрисовка гайки void DrawPosLeader( reference spcObj ); // Отрисовать позиционную линию выноски int ChoiceMenuId(); // Меню void SetHatchAngle(); // Параметры штриховки - угол void SetHatchStep(); // Параметры штриховки - шаг void SetParamGr(); // Параметры макро void SetPlacementGr( double x, double y, double angle ); // Положение макро bool DrawSpcObj( reference group ); // Отрисовка объекта спецификации reference StaticEditSpcObj( reference geom ); // Редактирование объекта спецификации void GetGroup( reference &group ); // Отрисовка геометрии void Gayka_Sverhu(); // Отрисовка геометрии гайки ( сверху ) void Gayka_P_K( int j ); // Отрисовка геометрии гайки ( пол-вида/пол-разреза ) void SetFlagMode( bool mode ) { m_flagMode = mode; } // HOT_POINTS ################################################################## // Работа с Hot точками bool GetHotPoints( HotPointDescription* point, int index ); // Параметры для Hot точек bool SetHotPoint( HotPointDescription* point, int index ); // Изменение положения Hot точек bool GetCursorText( int index, char** text ); // Текст для Hot точек bool ExecuteCommand( int id ); // Выполнение команды bool EditComplete( int index, BOOL success ); // Редактирование и вставка объекта спецификации, если он был создан bool ChangeHotPointParam( double d ); // Параметры для Hot точек int GetMenu(); // Меню // HOT_POINTS ################################################################## protected : // Функция обратной связи, вызываемая из Cursor static int WINAPI CALLBACKPROCCURSOR( int comm, double *x, double *y, RequestInfo *info, void *phantom, int dynamic ); // Функция обратной связи, вызываемая из Placement static int WINAPI CALLBACKPROCPLACEMENT( int comm, double *x, double *y, double *angle, RequestInfo *info, void *phantom, int dynamic ); }; //------------------------------------------------------------------------------- // Вспомогательные функции // --- // Отрисовка геометрии гайки ( вид сбоку ) void Gayka_K_Side ( float ls, float s, float D, float d2, float H, int j, int j2 ); // Отрисовка геометрии гайки ( вид - упрощенно ) void Gayka_K_Y ( float ls, GAYKA5915 *tmp, int j ); // Отрисовка геометрии гайки ( вид ) void Gayka_K ( float ls, float l, float d1, float s, float D, float l1, float H, short j, int j1, float d2, int j2 ); // Загрузить строку из ресурса LPTSTR LoadStr ( int id ); // Подключение к базе данных int _ConnectDB( reference bd, char *name ); // Открыть базу данных bool OpenGaykaBase ( SimpleBase &base ); // Читать параметры гайки по диаметру bool ReadGaykaBase ( float d, SimpleBase &base, GAYKA5915 *pGayka ); // Закрыть базу данных void CloseGaykaBase( SimpleBase &base ); //------------------------------------------------------------------------------- // // --- extern AFX_EXTENSION_MODULE StepDLL; #endif // !defined(__GAYKA_H)