三维科学图形包括三维网线图形;三维线状图形;三维坐标设置;填充网状图形;填充颜色的层数;颜色分层的数值条;向顶部和底部投影;边框设置;背景颜色设置;实体图形;等高线图形。给定zij=f(xi,yj)离散数据点,三维图形控件可以绘制出各种精美的图形。三维 图形控件包含的文件有:mesh45.ocx,olch3d32.dll,meshxyz.dll。
|
No |
属性 |
类型 |
缺省值 |
说明 |
|
1 |
Rows |
Integer |
20 |
矩阵的行数,在设计时不能改变,改变此值和Cols之后,应通过MatValues函数重新设置数据。 |
|
2 |
Cols |
Integer |
20 |
矩阵的列数,在设计时不能改变,改变此值和Rows之后,应通过MatValues函数重新设置数据。 |
|
3 |
Meshed |
Boolean |
True |
是否绘制网线 |
|
4 |
XLineVisible |
Boolean |
True |
X轴方向网线是否可见 |
|
5 |
YLineVisible |
Boolean |
True |
Y轴方向网线是否可见 |
|
6 |
Shaded |
Boolean |
False |
是否形成实面 |
|
7 |
Zoned |
Boolean |
False |
是否在Z轴方向分层 |
|
8 |
SolidSurface |
Boolean |
False |
是否绘成实体 |
|
9 |
Zlayers |
Integer |
10 |
Z轴方向的分层数 |
|
10 |
DownProjection |
Boolean |
Integer |
向底部投影的类型 =0 不投影 =1 等高线 =2 分层颜色图 =3 分层等高线 |
|
11 |
UpProjection |
Boolean |
Integer |
向顶部投影的类型 =0 不投影 =1 等高线 =2 分层颜色图 =3 分层等高线 |
|
12 |
Contoured |
Boolean |
False |
是否有等高线 |
|
13 |
XrotateAngle |
Integer |
45 |
绕X轴旋转角度 |
|
14 |
YrotateAngle |
Integer |
0 |
绕Y轴旋转角度 |
|
15 |
ZrotateAngle |
Integer |
45 |
绕Z轴旋转角度 |
|
16 |
ViewDepth |
Single |
2.5 |
观察距离, >=1 |
|
17 |
XAxisVisible |
Boolean |
True |
X轴是否显示 |
|
18 |
YAxisVisible |
Boolean |
True |
Y轴是否显示 |
|
19 |
ZAxisVisible |
Boolean |
True |
Z轴是否显示 |
|
20 |
XTitle |
String |
“” |
X轴的标题 |
|
21 |
Ytitle |
String |
“” |
Y轴的标题 |
|
22 |
Ztitle |
String |
“” |
Z轴的标题 |
|
23 |
XOYGrid |
Boolean |
False |
是否显示XOY平面网格 |
|
24 |
XOZGrid |
Boolean |
False |
是否显示XOZ平面网格 |
|
25 |
YOZGrid |
Boolean |
False |
是否显示YOZ平面网格 |
|
26 |
MeshTopColor |
Long |
0 |
面上网线颜色 |
|
27 |
MeshBottomColor |
Long |
0 |
面下网线颜色 |
|
28 |
SurfaceTopColor |
Long |
0xd3d3d3 |
实面上部颜色 |
|
29 |
SurfaceBottomColor |
Long |
0x707070 |
实面下部颜色 |
|
30 |
PlotBackColor |
Long |
0xFFFFFF |
背景色 |
|
31 |
PlotForeColor |
Long |
0 |
前景色 |
|
32 |
PlotInBorder |
Integer |
0 |
边框类型 =0 None =1 Border3D_In =2 Border3D_Out =3 Frame_In =4 Frame_Out =5 Bevel =6 Shadow =7 Etched_In =8 Etched_Out |
|
33 |
LegendShow |
Boolean |
True |
是否显示颜色表 |
|
34 |
LegendOrient |
Integer |
0 |
颜色表方向,=0垂直排列 =1水平排列 |
|
35 |
LegendStyle |
Integer |
0 |
颜色表风格,=0连续 =1离散 |
☆ Sub MatValues(rv!(), cv!(), matv!())
【功能】设置绘图矩阵数值。在调用此函数之前,事先应设置好矩阵的行数Rows和列数Cols。
【参数】
rv!():行上的坐标值,长度为Rows。
cv!():列上的坐标值,长度为Cols。
matv!():矩阵的数值,其维数为Rows x Cols, 数值存储顺序为:
matv(I*Cols+J), j=0,1, …, Cols-1, I=0, 1, …, Rows-1。
☆ Function MatValue(row%, col%) as single
【功能】取得矩阵中的一点数值。
【参数】
Row%:矩阵的行号。
Col%: 矩阵的列号。
【返回】取得的数值。
☆ Sub ForceRepaint(updateNow as boolean)
【功能】设置更新方式。
【参数】
updateNow: True:实时更新; False:批更新方式,非实时更新。
☆ Sub Load(Filename as string)
【功能】从数据文件中读取并显示图形。
【参数】
Filename: 输入文件名。
☆ Sub Save(Filename as String)
【功能】把图形数据保存到磁盘文件中。
【参数】
Filename: 文件名
☆ Sub PrintGraph(left as long, top as long, w as long, h as long)
【功能】打印图形。
【参数】
left: 打印图形区域离纸张左边的距离。
top: 打印图形区域离纸张上边的距离。
w: 打印图形区域的宽度。
h: 打印图形区域的高度。
☆ Function Zinterpolate(x, y) as single
【功能】计算二维插值。
【参数】
x:插值点上X轴坐标。
y:插值点上Y轴坐标。
【返回】插值结果。
☆ Function GetXmin() as single:
【功能】取得X轴上的最小值。
☆ Function GetXmax() as Single
【功能】取得X轴上的最大值。
☆ Function GetYmin() as Single
取的Y轴上的最小值。
☆ Function GetYmax() as Single
【功能】取得Y轴上的最大值。
☆ Function GetZmin() as Single
【功能】取得Z轴上的最小值。
☆ Function GetZmax() as Single
【功能】取得Z轴上的最大值。
☆ Sub SetXmin(v as Single)
【功能】设置X轴的最小值。
☆ Sub SetXmax(v as Single)
【功能】设置X轴的最大值。
☆ Sub SetYmin(v as Single)
【功能】设置Y轴的最小值。
☆ Sub SetYmax(v as Single)
【功能】设置Y轴的最大值。
☆ Sub SetZmin(v as Single)
【功能】设置Z轴的最小值。
☆ Sub SetZmax(v as Single)
【功能】设置Z轴的最大值。
一
设置矩阵并更新显示
Dim i&, j&, v!
MeshMat1.Rows = 25 ‘行数
MeshMat1.Cols = 20 ‘列数
Dim x(0 To 25) As Single
Dim y(0 To 20) As Single
Dim z(0 To 500) As Single
For i = 0 To 25 - 1
x(i) = CSng(i) / 25 - 0.5
For j = 0 To 20 - 1
If i = 0 Then
y(j) = CSng(j) / 20 - 0.5
End If
v = 1 - x(i) * x(i) - y(j) * y(j)
z(i * 20 + j) = v
Next j
Next i
Call MeshMat1.ForceRepaint(False) ‘变为批处理方式
Call MeshMat1.MatValues(x, y, z) ‘设置矩阵的值
Call MeshMat1.ForceRepaint(True) ‘变为实时更新方式
二
改变矩阵中的值
Dim i%, j%, v As Single
v = MeshMat1.MatValue(0, 0)
v = -v
MeshMat1.MatValue(0, 0) = v
v = MeshMat1.MatValue(1, 1)
v = -v*2
MeshMat1.MatValue(1, 1) = v
Call MeshMat1.ForceRepaint(True)
三
改变观察区域
Private Sub ChangeView()
Dim x1!, x2!, y1!, y2!, z1!, z2!
With MeshMat1
If idm_cview.Checked = False Then
x1 = .GetXmin() / 2
x2 = .GetXmax() / 2
y1 = .GetYmin() / 2
y2 = .GetYmax() / 2
.SetXmin x1
.SetXmax x2
.SetYmin y1
.SetYmax y2
idm_cview.Checked = True
Else
x1 = .GetXmin() * 2
x2 = .GetXmax() * 2
y1 = .GetYmin() * 2
y2 = .GetYmax() * 2
.SetXmin x1
.SetXmax x2
.SetYmin y1
.SetYmax y2
idm_cview.Checked = False
End If
End With
End Sub
四
控件的相关文件
mesh45.ocx,olch3d32.dll,meshxyz.dll。
|
网线图: Meshed=True, Shaded=False, Zoned=False yLineVisible=True, xLineVisible=True, SolidSurface=False upProjection=0e, downProjection=0
|
分层网线图:Shaded=True, Zoned=True, Meshed=True UpProjection=0, downProjection=0, SolidSrface=False XLineVisible=True, yLineVisible=True
|