在本文中,将探讨如何开发一个基于OpenGL库的ActiveX控件,用于在三维空间中绘制数据。这个控件完全使用ATL/STL编写,不依赖MFC库。将逐步了解控件的功能、如何使用以及如何将其嵌入到应用程序中。
该控件提供了多种功能,包括但不限于:
通过设置Projection属性,用户可以改变视图模式,包括:
通过设置TrackMode属性,用户可以在运行时进行:
要使用此控件,需要将其嵌入到支持ActiveX控件的应用程序中。支持ActiveX控件的应用程序包括:
在开始之前,必须使用Regsvr32.exe将控件注册为COM组件。Regsvr32接受一个参数,即要注册的DLL或控件,以及几个命令行开关,其中最值得注意的是/u,用于卸载控件。默认情况下,仅运行带有dll或ocx的Regsvr32.exe即可注册控件。
注意:必须在将要使用控件的每台计算机上执行此操作!
以下是使用该控件绘制环面的示例代码。
// Plot Torus
void CDemoDlg::OnButton1()
{
m_Graph3D.SetCaption("Torus");
m_Graph3D.ClearGraph(); // Clear all data
m_Graph3D.AddElement(); // Add an element to element list
m_Graph3D.SetElementLineColor(0, RGB(255, 0, 0));
m_Graph3D.SetElementType(0, 3); // draw surface
double x, y, z, ti, tj;
for (int i = 0; i < 41; i++) {
ti = (i - 20.0) / 20.0 * 3.15;
for (int j = 0; j < 41; j++) {
tj = (j - 20.0) / 20.0 * 3.15;
x = (cos(tj) + 3.0) * cos(ti);
y = sin(tj);
z = (cos(tj) + 3.0) * sin(ti);
m_Graph3D.PlotXYZ(x, y, z, 0);
}
}
m_Graph3D.AutoRange();
}
' Plot Torus
Sub Torus
With Graph3D
.ClearGraph
.AddElement
.Caption = "Torus"
.ElementType(0) = 3 ' Draw Surface
For i = 0 To 41
ti = (i - 20.0) / 20.0 * 3.15
For j = 0 To 41
tj = (j - 20.0) / 20.0 * 3.15
x = (cos(tj) + 3.0) * cos(ti)
y = sin(tj)
z = (cos(tj) + 3.0) * sin(ti)
.PlotXYZ x, y, z, 0
Next
Next
.Autorange
End With
End Sub
以下是控件的一些属性列表: