MESH45.OCX 三维图形控件

三维科学图形包括三维网线图形;三维线状图形;三维坐标设置;填充网状图形;填充颜色的层数;颜色分层的数值条;向顶部和底部投影;边框设置;背景颜色设置;实体图形;等高线图形。给定zij=f(xi,yj)离散数据点,三维图形控件可以绘制出各种精美的图形。三维    图形控件包含的文件有:mesh45.ocxolch3d32.dllmeshxyz.dll

 

1  三维图形控件的属性列表

 

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离散

 

2  三维图形控件的方法

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轴的最大值。

 

3  三维图形控件编程举例

      设置矩阵并更新显示

   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.ocxolch3d32.dllmeshxyz.dll

 

4  图形实例

 

 网线图:   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