Научно-исследовательская лаборатория систем ЧПУ
Научно-исследовательская лаборатория систем ЧПУ

Поиск по сайту:
 

Расписание курсов "Программирование SINUMERIK 810D/840D/840Di"



Компонент DrwGLCom ActiveX

Автор: Мартинов Г. М.
Попов А. Ю.
Кафедра КСУ, МГТУ "СТАНКИН"
Опубликовано: 09.08.2003
Версия текста: 1.0

Скачать компонент и тестовое приложение DrwGLCom  размер файла: 137,2 Kб
Скачать документацию  размер файла: 36,6 Kб

DrwGLCom - это ActiveX компонент, позволяющий отображать траекторию управляющей программы в пространстве. Траектория складывается из различных примитивов, в качестве которых может выступать точка, линия или дуга. Более сложные траектории можно разложить на эти составляющие. Получившееся изображение траектории является трехмерным, его можно масштабировать, вращать и перемещать, используя клавиатуру или мышку. Работа с изображением траектории возможна в нескольких режимах переключение между которыми осуществляется нажатием правой кнопки мыши. Для управления изображением перемещайте мышь, удерживая нажатой левую кнопку. В режиме MOVE осущствляется перемещение изображения в плоскости экрана вне зависимости от положения координатных осей. В режиме ROTATE осуществляется вращение изображения, в режиме ZOOM осуществляется масштабирование изображения. В режиме INFO осуществляется перемещение информационного окна в пределах окна отображения траектории инструмента.

Пример использования ActiveX компонента DrwGLCOM на базе диалогового приложения

В первую очередь необходимо зарегистрировать в системе DrwGLCOM ActiveX (например, из командной строки: "regsvr32 DrwGLCOM.ocx").

Затем добавим поддержку DrwGLCOM в диалоговом приложении. Для этого необходимо:

Добавить элемент DrwGLCOM Control в проект, для чего в меню Project выбрать пункт Add to Project и команду Components and Controls, далее в появившемся диалоговом окне выбрать папку Registered ActiveX Controls и найти в ней элемент DrwGLCOM Control.

Найти на панели Controls объект DrwGLCOM и перетащить его в необходимое место вашего диалогового окна.

Добавить переменную, которая отвечает за элемент управления, для чего в меню View вызвать команду Class Wizard, перейти на вкладку Member Variables и нажать кнопку Add Variable, убедившись, что в поле Class Name выбран класс CApplicationDlg. В новом диалоговом окне в поле Member Variable Name указать имя новой переменной (например, m_DrwGL).

Методы компонента DrwGLCom

  • У ActiveX компонента DrwGLCom можно использовать следующие методы:
  • Для отрисовки дуги:
BOOL DrawArc(long lPrimitiveIndex, short nFIndex, short nGIndex, double dRadius, 
             double dStartAngle, double dRelEndAngle, double dFEndPtn, double dGEndPtn);
// где lPrimitiveIndex - номер примитива, по которому в дальнейшем можно определить кадр,
// nFIndex и nGIndex - задают начальную точку дуги,
// dRadius - радиус дуги,
// dStartAngle и dRelAngle - задают угол касательных к начальной и конечной точке дуги,
// dFEndPtn и dGEndPtn - задают конечную точку дуги.
  • Для отрисовки линии:
BOOL DrawLineTo(long lPrimitiveIndex, double dX, double dY, double dZ, short nType);
  • В нашем тестовом приложении для рисования линий используются кнопки XY-, YZ+, ZX+, YZ- и соответствующие им функции, каждая из которых изменяет положение текущей точки на 10 пикселей в соответсвующем направлении.
void CDrwGLDemoDlg::OnButtonXY_Negative() 
{
    m_DrwGL.DrawLineTo(++m_lPrimitiveIndex, m_dCoordinateX-=10,
m_dCoordinateY-=10, m_dCoordinateZ, 1);
}



void CDrwGLDemoDlg::OnButtonYZ_Positive()
{
    m_DrwGL.DrawLineTo(++m_lPrimitiveIndex, m_dCoordinateX,
m_dCoordinateY+=10, m_dCoordinateZ+=10, 1);
}

void CDrwGLDemoDlg::OnButtonYZ_Negative()
{
    m_DrwGL.DrawLineTo(++m_lPrimitiveIndex, m_dCoordinateX,
m_dCoordinateY-=10, m_dCoordinateZ-=10, 1);
}
void CDrwGLDemoDlg::OnButtonZX_Positive() 
{
    m_DrwGL.DrawLineTo(++m_lPrimitiveIndex, m_dCoordinateX+=10,
m_dCoordinateY, m_dCoordinateZ+=10, 1);
}
  • Для перерисовки графики:
BOOL BeginDraw();
  • В тестовом приложении метод BeginDraw() используется при вызове функции onClear(), очищающей пользовательскую часть вывода:
void CDrwGLDemoDlg::OnClear() 
{
    // Не рисовать пример

    m_bDrawExample = 0;
    UpdateData(FALSE);
    
    // Перерисовка графики
    m_DrwGL.BeginDraw();
    m_DrwGL.Invalidate();
}
  • Для вывода тестового изображения:
void DrawTest();

В тестовом приложении для переключения режима вывода тестового изображения используется функция

void CDrwGLDemoDlg::OnDrawExample() 
{
    if(!UpdateData())
        return;
    if (m_bDrawExample)
     m_DrwGL.DrawTest();
    else
    {
     m_DrwGL.BeginDraw();
     m_DrwGL.Invalidate();
    }
}
  • Для того чтобы показать окно настройки компонента используйте метод:
void ShowPropertyPages();

При помощи него можно менять настройки осей (единицы измерения, толщину осей, их цвет), настройки растеризации, устанавливать координаты центра координат, цвета рабочего и холостого хода, цвет заднего фона, цвет информационного окна, шрифт текста в информационном окне, координаты информационного окна и показываемые в нем параметры, а также в нем можно задать тип линий для рабочего и холостого перемещения и их толщину.

  • Чтобы переместить текущую точку, заданную lPrimitiveIndex, в новую точку, с координатами dX, dY, dZ:
void MoveToPoint(long lPrimitiveIndex, double dX, double dY, double dZ);
  • Чтобы начать рисование с новой точки:
void SetPoint(long lPrimitiveIndex, double dX, double dY, double dZ);
  • Возвращает значение адреса оси по ее индексу. Задается отдельно для каждого кадра.
double GetDAddressVal(short iIndex);
  • Задает значение нового адреса оси по ее старому значению.
void SetDAddressVal(short iIndex, double newValue);
  • Для изменения режима отображения (значения последовательно меняются на: rotate (вращение), move (перемещение), zoom (увеличение), info (информация)):
void ChangeMode();

Свойства компонента DrwGLCom

  • У ActiveX компонента DrwGLCom существуют следующие свойства:
  • Получение значения текущего режима:
short GetSCurrentMode();
  • Изменение значения текущего режима:
void SetSCurrentMode(short propVal);
  • Возвращает название текущего шрифта для вывода текста:
COleFont GetFont();
  • Устанавливает значение шрифта для вывода текста:
void SetFont(LPDISPATCH propVal);
  • Возвращает текущее значение цвета оси X:
unsigned long GetAxis_XColor();
  • Устанавливает новое значение цвета оси X:
void SetAxis_XColor(unsigned long propVal);
  • Возвращает текущее значение цвета оси Y:
unsigned long GetAxis_YColor();
  • Устанавливает новое значение цвета оси Y:
void SetAxis_YColor(unsigned long propVal);
  • Возвращает текущее значение цвета оси Z:
unsigned long GetAxis_ZColor();
  • Устанавливает новое значение цвета оси Z:
void SetAxis_ZColor(unsigned long propVal);
  • Возвращает значение цвета для всех осей (0 - если цвета разные):
unsigned long GetAxisAllColor();
  • Устанавливает один цвет для всех осей:
void SetAxisAllColor(unsigned long propVal);
  • Возвращает цвет для окошка Info:
unsigned long GetInfoColor();
  • Устанавливает цвет для окошка Info:
void SetInfoColor(unsigned long propVal);
  • Возвращает цвет фона:
OLE_COLOR GetBackColor();
  • Устанавливает цвет фона:
void SetBackColor(OLE_COLOR propVal);
  • Возвращает значение цвета, которым выводится рабочее движение:
unsigned long GetWorkMoveColor();
  • Устанавливает значение цвета, которым выводится рабочее движение:
void SetWorkMoveColor(unsigned long propVal);
  • Возвращает значение цвета, которым выводится нерабочее движение:
unsigned long GetFastMoveColor();
  • Устанавливает значение цвета, которым выводится нерабочее движение:
void SetFastMoveColor(unsigned long propVal);
  • Возвращает цвет точек конца движения:
unsigned long GetBlockEndPointColor();
  • Устанавливает цвет точек конца движения:
void SetBlockEndPointColor(unsigned long propVal);
  • Возвращает установлены ли координаты на осях:
BOOL GetBEnableDivisionsText();
  • Задает устанавливать ли координаты на осях:
void SetBEnableDivisionsText(BOOL propVal);
  • Возвращает количество точек на осях, задающих ее координаты, в каждом направлении оси:
short GetSDivisionsAmount();
  • Устанавливает количество точек на осях, задающих ее координаты, в каждом направлении оси:
void SetSDivisionsAmount(short propVal);
  • Возвращает количество знаков после запятой для координат:
short GetSDivisionsFractionalSings();
  • Устанавливает количество знаков после запятой для координат:
void SetSDivisionsFractionalSings(short propVal);
  • Возвращает название оси X:
short GetSNameXAxis();
  • Устанавливает название оси X:
void SetSNameXAxis(short propVal);
  • Возвращает название оси Y:
short GetSNameYAxis();
  • Устанавливает название оси Y:
void SetSNameYAxis(short propVal);
  • Возвращает название оси Z:
short GetSNameZAxis();
  • Устанавливает название оси Z:
void SetSNameZAxis(short propVal);
  • Возвращает единицу измерения (0 - нет единицы, 1 - мм., 2 - дюймы):
short GetSMeasureUnitType();
  • Устанавливает единицу измерения (0 - нет единицы, 1 - мм., 2 - дюймы):
void SetSMeasureUnitType(short propVal);
  • Возвращает толщину линий, задающих оси (в пикселях):
double GetDAxisLineWeight();
  • Устанавливает толщину линий, задающих оси (в пикселях):
void SetDAxisLineWeight(double propVal);
  • Возвращает размер квадратов, размещаемых в конце пути по рабочему и нерабочему ходу в пикселях:
double GetDBlockEndPointSize();
  • Устанавливает размер квадратов, размещаемых в конце пути по рабочему и нерабочему ходу в пикселях:
void SetDBlockEndPointSize(double propVal);
  • Возвращает тип линий, задающих оси (0 - сплошная, 1 - пунктирная, 2 - пунктирная с уменьшенным промежутком, 3 - штрих-пунктирная, 4 - штрих-пунктирная с двумя точками, 5 - без осей):
short GetSAxisLineType();
  • Задает тип линий, задающих оси (0 - сплошная, 1 - пунктирная, 2 - пунктирная с уменьшенным промежутком, 3 - штрих-пунктирная, 4 - штрих-пунктирная с двумя точками, 5 - без осей):
void SetSAxisLineType(short propVal);
  • Возвращает тип линий, задающих отрезки холостого хода (0 - сплошная, 1 - пунктирная, 2 - пунктирная с уменьшенным промежутком, 3 - штрих-пунктирная, 4 - штрих-пунктирная с двумя точками, 5 - без осей):
short GetSFastMoveLineType();
  • Задает тип линий, задающих отрезки холостого хода (0 - сплошная, 1 - пунктирная, 2 - пунктирная с уменьшенным промежутком, 3 - штрих-пунктирная, 4 - штрих-пунктирная с двумя точками, 5 - без осей):
void SetSFastMoveLineType(short propVal);
  • Возвращает тип линий, задающих отрезки рабочего хода (0 - сплошная, 1 - пунктирная, 2 - пунктирная с уменьшенным промежутком, 3 - штрих-пунктирная, 4 - штрих-пунктирная с двумя точками, 5 - без осей):
short GetSWorkMoveLineType();
  • Задает тип линий, задающих отрезки рабочего хода (0 - сплошная, 1 - пунктирная, 2 - пунктирная с уменьшенным промежутком, 3 - штрих-пунктирная, 4 - штрих-пунктирная с двумя точками, 5 - без осей):
void SetSWorkMoveLineType(short propVal);
  • Возвращает толщину букв в пикселях:
double GetDCharsLineWeight();
  • Задает толщину букв в пикселях:
void SetDCharsLineWeight(double propVal);
  • Проверяет включена ли проверка на взаимное перекрытие объектов.
BOOL GetBEnableDepthTest();
  • Задает включить ли проверку на взаимное перекрытие объектов.
void SetBEnableDepthTest(BOOL propVal);
  • Возвращает степень сглаженности для дуг (число вершин правильного многоугольника):
short GetSCirclesAccuracy();
  • Задает степень сглаженности для дуг (число вершин правильного многоугольника):
void SetSCirclesAccuracy(short propVal);
  • Возвращает уровень сглаженности линий:
short GetSLineSmooth();
  • Задает уровень сглаженности линий:
void SetSLineSmooth(short propVal);
  • Возвращает уровень сглаженности точек:
short GetSPointSmooth();
  • Задает уровень сглаженности точек:
void SetSPointSmooth(short propVal);
  • Возвращает уровень сглаженности многоугольников:
short GetSPolygonSmooth();
  • Задает уровень сглаженности многоугольников:
void SetSPolygonSmooth(short propVal);
  • Возвращает отклонение начертания букв:
double GetDCharDeviation();
  • Задает отклонение начертания букв:
void SetDCharDeviation(double propVal);
  • Возвращает заливать ли пространство между линиями, очерчивающими буквы:
long GetLCharInPolygons();
  • Задает заливать ли пространство между линиями, очерчивающими буквы:
void SetLCharInPolygons(long propVal);
  • Возвращает использовать ли модель сглаживания штриховки:
BOOL GetBEnableSmoothShadingModel();
  • Задает использовать ли модель сглаживания штриховки:
void SetBEnableSmoothShadingModel(BOOL propVal);
  • Возвращает угол наклона оси X (отсчет начинается с горизонтального положения по часовой стрелке):
double GetDAngleX();
  • Задает угол наклона оси X (отсчет начинается с горизонтального положения по часовой стрелке):
void SetDAngleX(double propVal);
  • Возвращает угол наклона оси Y (отсчет начинается с горизонтального положения по часовой стрелке):
double GetDAngleY();
  • Задает угол наклона оси Y (отсчет начинается с горизонтального положения по часовой стрелке):
void SetDAngleY(double propVal);
  • Возвращает угол наклона оси Z (отсчет начинается с горизонтального положения по часовой стрелке):
double GetDAngleZ();
  • Задает угол наклона оси Z (отсчет начинается с горизонтального положения по часовой стрелке):
void SetDAngleZ(double propVal);
  • Возвращает насколько смещен центр оси X относительно оси координат (в единицах измерения):
double GetDCurrentViewPortCenterX();
  • Задает насколько смещен центр оси X относительно оси координат (в единицах измерения):
void SetDCurrentViewPortCenterX(double propVal);
  • Возвращает насколько смещен центр оси Y относительно оси координат (в единицах измерения):
double GetDCurrentViewPortCenterY();
  • Задает насколько смещен центр оси Y относительно оси координат (в единицах измерения):
void SetDCurrentViewPortCenterY(double propVal);
  • Возвращает насколько смещен центр оси Z относительно оси координат (в единицах измерения):
double GetDCurrentViewPortCenterZ();
  • Задает насколько смещен центр оси Z относительно оси координат (в единицах измерения):
void SetDCurrentViewPortCenterZ(double propVal);
  • Возвращает объем доступного для рисования пространства (в единицах измерения):
double GetDCurrent3DSpaceSize();
  • Задает текущий доступный размер поля рисования (в единицах измерения):
void SetDCurrent3DSpaceSize(double propVal);
  • Возвращает текущий доступный размер поля рисования (в единицах измерения):
double GetDAuto3DSpaceSize();
  • Задает текущий доступный размер поля рисования (в единицах измерения):
void SetDAuto3DSpaceSize(double propVal);
  • Возвращает толщину линий, задающих холостой ход (в пикселях):
double GetDFastMoveLineWeight();
  • Задает толщину линий, задающих холостой ход (в пикселях):
void SetDFastMoveLineWeight(double propVal);
  • Возвращает толщину линий, задающих рабочий ход (в пикселях):
double GetDWorkMoveLineWeight();
  • Задает толщину линий, задающих рабочий ход (в пикселях):
void SetDWorkMoveLineWeight(double propVal);
  • Возвращает устанавливать ли точку в конце хода:
BOOL GetBEnableEndLinePoint();
  • Задает устанавливать ли точку в конце хода
void SetBEnableEndLinePoint(BOOL propVal);
  • Возвращает выводится ли в данный момент информационное окно:
BOOL GetBEnableShowInfoWindow();
  • Задает выводится ли в данный момент информационное окно:
void SetBEnableShowInfoWindow(BOOL propVal);
  • Возвращает толщину границы информационного окна (в пикселях):
double GetDInfoWindowBorderLineWeight();
  • Задает толщину границы информационного окна (в пикселях):
void SetDInfoWindowBorderLineWeight(double propVal);
  • Возвращает показывается ли переменная X в информационном окне:
BOOL GetBEnableShowX();
  • Задает показывать ли переменная X в информационном окне:
void SetBEnableShowX(BOOL propVal);
  • Возвращает показывается ли переменная Y в информационном окне:
BOOL GetBEnableShowY();
  • Задает показывать ли переменная Y в информационном окне:
void SetBEnableShowY(BOOL propVal);
  • Возвращает показывается ли переменная Z в информационном окне:
BOOL GetBEnableShowZ();
  • Задает показывать ли переменная Z в информационном окне:
void SetBEnableShowZ(BOOL propVal);
  • Возвращает показывать ли переменную M в информационном окне:
BOOL GetBEnableShowM();
  • Задает показывать ли переменную M в информационном окне:
void SetBEnableShowM(BOOL propVal);
  • Возвращает показывать ли переменную S в информационном окне:
BOOL GetBEnableShowS();
  • Задает показывать ли переменную S в информационном окне:
void SetBEnableShowS(BOOL propVal);
  • Возвращает показывать ли переменную T в информационном окне:
BOOL GetBEnableShowT();
  • Задает показывать ли переменную T в информационном окне:
void SetBEnableShowT(BOOL propVal);
  • Возвращает показывать ли переменную F в информационном окне:
BOOL GetBEnableShowF();
  • Задает показывать ли переменную F в информационном окне:
void SetBEnableShowF(BOOL propVal);
  • Возвращает показывать ли режим в информационном окне (ROTATE, MOVE, ZOOM):
BOOL GetBEnableShowMode();
  • Задает показывать ли режим в информационном окне (ROTATE, MOVE, ZOOM):
void SetBEnableShowMode(BOOL propVal);
  • Возвращает показывать ли переменную Verticles в информационном окне:
BOOL GetBEnableShowVertices();
  • Задает показывать ли переменную Verticles в информационном окне:
void SetBEnableShowVertices(BOOL propVal);
  • Возвращает текущую координату X информационного окна:
double GetDCurrentInfoWindowPosX();
  • Задает текущую координату X информационного окна:
void SetDCurrentInfoWindowPosX(double propVal);
  • Возвращает текущую координату Y информационного окна:
double GetDCurrentInfoWindowPosY();
  • Задает текущую координату Y информационного окна:
void SetDCurrentInfoWindowPosY(double propVal);
  • Возвращает задана ли визуализация рисования:
BOOL GetBVirtualDraw();
  • Возвращает задана ли визуализация рисования:
void SetBVirtualDraw(BOOL propVal);
  • Возвращает текущий режим (ROTATE, MOOV, ZOOM, INFO)
short Get_sCurrentMode();
  • Задает текущий режим:
void Set_sCurrentMode(short propVal);
  • Вовзвращает шаг при перемещении, масштабировании, вращении объекта с клавиатуры:
short GetSKeyboardDelta();
  • Задает шаг при перемещении, масштабировании, вращении объекта с клавиатуры:
void SetSKeyboardDelta(short propVal);
  • В режиме MOVE - перемещение изображение вверх в плоскости экрана, в режиме ROTATE - вращение в вертикальной плоскости перпендикулярной плоскости экрана, в режиме ZOOM - уменьшение изображения, в режиме INFO - перемещение информационного окна вверх.
void KeyAltUp();
  • В режиме MOVE - перемещение изображение вниз в плоскости экрана, в режиме ROTATE - вращение в вертикальной плоскости перпендикулярной плоскости экрана, в режиме ZOOM - увеличение изображения, в режиме INFO - перемещение информационного окна вниз.
void KeyAltDown();
  • В режиме MOVE - перемещение изображение влево в плоскости экрана, в режиме ROTATE - вращение вокруг оси Z против часовой стрелке, в режиме INFO - перемещение информационного окна влево.
void KeyAltLeft();
  • В режиме MOVE - перемещение изображение вправо в плоскости экрана, в режиме ROTATE - вращение вокруг оси Z по часовой стрелке, в режиме INFO - перемещение информационного окна вправо.
void KeyAltRight();
  • В режиме MOVE - удаление изображения, в режиме ROTATE - вращение в плоскости экрана.
void KeyCtrlAltUp();
  • В режиме MOVE - приближение изображения, в режиме ROTATE - вращение в плоскости экрана.
void KeyCtrlAltDown();
  • Возвращает устанавливать ли центр координат в центр ActiveX компонента:
BOOL GetBAutocenter();
  • Задает устанавливать ли центр координат в центр ActiveX компонента:
void SetBAutocenter(BOOL propVal);
  • Возвращает устанавливается ли размер поля рисования автоматически:
BOOL GetBAutosize();
  • Задает устанавливается ли размер поля рисования автоматически:
void SetBAutosize(BOOL propVal);


Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.