⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 contou.bas

📁 用VB6.0MapINfo绘等值线及表面图
💻 BAS
📖 第 1 页 / 共 5 页
字号:

End Sub


'
'
Public Sub Wcs(Xorig As Single, Yorig As Single, Xlen As Single, Ylen As Single)
'1mm=56.7twip
WcsX = Xorig ' * 56.7
WcsY = PaperHeight - Yorig ' * 56.7
Xleng = Xlen ' * 56.7
Yleng = Ylen ' * 56.7
Iinit = 0
End Sub

'
'
Public Sub Ucs(Xmin As Single, Ymin As Single, Xmax As Single, Ymax As Single)

If (Xleng * Yleng * (Xmax - Xmin) * (Ymax - Ymin) <= 0#) Then
        Iinit = 0
Else
        Iinit = 1
End If
Xminp = Xmin
Xmaxp = Xmax
Yminp = Ymin
Ymaxp = Ymax
''If (Xmaxp - Xminp > 0#) Then XFact = Xleng / (Xmaxp - Xminp)
''If (Ymaxp - Yminp > 0#) Then Yfact = Yleng / (Ymaxp - Yminp)
If (Xmaxp - Xminp > 0 And Ymaxp - Yminp > 0) Then
    XYFact = (Xleng / (Xmaxp - Xminp) + Yleng / (Ymaxp - Yminp)) / 2#
    WcsX0 = WcsX - Xminp * XYFact
    WcsY0 = WcsY + Yminp * XYFact
End If
End Sub
'绘三维边框
Private Sub Border3D(Vmin As Single, NX As Integer, NY As Integer)
Dim I As Integer, J As Integer
Dim Xo As Single, Yo As Single, Xot As Single, Yot As Single
Dim Px As Single, Py As Single, PZ As Single
Dim XX(1 To 5) As Single, YY(1 To 5) As Single, ZZ(1 To 2) As Single
Dim X(0 To 3) As Single, Y(0 To 3) As Single, Z(0 To 3) As Single
Dim LonLat(1 To 2, 1 To 4) As Single
Dim Mark As String, PZTemp As Single
Dim jMapType As Integer
Dim hRgnClose As Long, hBrush As Long
Dim P(0 To 5) As POINTAPI

PictureMesh.DrawWidth = 1
PictureMesh.Font = "宋体"
PictureMesh.Font.Size = 10
Hslz = 10

Cd = 45# / Atn(1#)

XX(1) = 1
YY(1) = 1
LonLat(1, 1) = LonMin
LonLat(2, 1) = LatMin

XX(2) = NX
YY(2) = 1
LonLat(1, 2) = LonMax
LonLat(2, 2) = LatMin

XX(3) = NX
YY(3) = NY
LonLat(1, 3) = LonMax
LonLat(2, 3) = LatMax

XX(4) = 1
YY(4) = NY
LonLat(1, 4) = LonMin
LonLat(2, 4) = LatMax

XX(5) = XX(1)
YY(5) = YY(1)

ZZ(1) = Vmin
ZZ(2) = Vmax


If (iMapType = 0) Then
    jMapType = 1
Else
    jMapType = 0
End If

If (iMapType = 0) Then
    PZTemp = Vmax
Else
    PZTemp = Vmin
End If

'绘上下边框
CurForeColor = QBColor(0)
PictureMesh.ForeColor = CurForeColor
PictureMesh.DrawWidth = 2
For I = 1 To 2
    For J = 1 To 4
        Px = (XX(J) - 1) * DX
        Py = (YY(J) - 1) * DY
        PZ = ZZ(I)
        Call Project(Px, Py, PZ, Xo, Yo)

        Px = (XX(J + 1) - 1) * DX
        Py = (YY(J + 1) - 1) * DY
        PZ = ZZ(I)
        Call Project(Px, Py, PZ, Xot, Yot)
        Call PlotCurve(Xo, Yo, 3)
        Call PlotCurve(Xot, Yot, 2)
    Next J
Next I
'绘立柱
For J = 1 To 4
    Px = (XX(J) - 1) * DX
    Py = (YY(J) - 1) * DY
    PZ = Vmin
    Call Project(Px, Py, PZ, Xo, Yo)

    Px = (XX(J) - 1) * DX
    Py = (YY(J) - 1) * DY
    PZ = Vmax
    Call Project(Px, Py, PZ, Xot, Yot)
    Call PlotCurve(Xo, Yo, 3)
    Call PlotCurve(Xot, Yot, 2)
Next J

For J = 1 To 4
    Px = (XX(J) - 1) * DX
    Py = (YY(J) - 1) * DY
    PZ = Vmin
    Call Project(Px, Py, PZ, Xo, Yo)
    Xo = WcsX0 + Xo * XYFact
    Yo = WcsY0 - Yo * XYFact
    
    Mark = Format(LonLat(1, J), "###.0# ") + Format(LonLat(2, J), "###.0#")

    PictureMesh.CurrentX = Xo - PictureMesh.TextWidth(Mark) / 2
    PictureMesh.CurrentY = Yo
    PictureMesh.Print Mark
Next J

PictureMesh.DrawWidth = 1
PictureMesh.ForeColor = 0
If (AngXY > 0 And AngXY < 90) Then
    If (iMapType = 0) Then
        '左面
        X(0) = 0
        Y(0) = 0
        Z(0) = Vmax
    
        X(1) = 0
        Y(1) = 0
        Z(1) = Vmin
    
        X(2) = 0
        Y(2) = (NY - 1) * DY
        Z(2) = Vmin
    
        X(3) = 0
        Y(3) = (NY - 1) * DY
        Z(3) = Vmax
    
        For I = 0 To 3
            Call Project(X(I), Y(I), Z(I), Xo, Yo)
        
            P(I).X = WcsX0 + Xo * XYFact
            P(I).Y = WcsY0 - Yo * XYFact
        Next I
        P(4) = P(0)
                
        hRgnClose = CreatePolygonRgn(P(1), 4, WINDING) '创建多边形区域
        hBrush = CreateSolidBrush(&HC0FFC0)
        FillRgn PictureMesh.hdc, hRgnClose, hBrush
        DeleteObject (hBrush)
        DeleteObject (hRgnClose)
        
        '前面
        X(0) = 0
        Y(0) = 0
        Z(0) = Vmax
    
        X(1) = 0
        Y(1) = 0
        Z(1) = Vmin
    
        X(2) = (NX - 1) * DX
        Y(2) = 0
        Z(2) = Vmin
    
        X(3) = (NX - 1) * DX
        Y(3) = 0
        Z(3) = Vmax
    
        For I = 0 To 3
            Call Project(X(I), Y(I), Z(I), Xo, Yo)
        
            P(I).X = WcsX0 + Xo * XYFact
            P(I).Y = WcsY0 - Yo * XYFact
        Next I
        P(4) = P(0)
                
        hRgnClose = CreatePolygonRgn(P(1), 4, WINDING) '创建多边形区域
        hBrush = CreateSolidBrush(&HC0C0FF)
        FillRgn PictureMesh.hdc, hRgnClose, hBrush
        DeleteObject (hBrush)
        DeleteObject (hRgnClose)
        
        
        X(0) = 0
        Y(0) = 0
        Z(0) = Vmax
    
        X(1) = (NX - 1) * DX
        Y(1) = 0
        Z(1) = Vmax
    
        X(2) = (NX - 1) * DX
        Y(2) = (NY - 1) * DY
        Z(2) = Vmax
    
        X(3) = 0
        Y(3) = (NY - 1) * DY
        Z(3) = Vmax
    
        For I = 0 To 3
            Call Project(X(I), Y(I), Z(I), Xo, Yo)
        
            P(I).X = WcsX0 + Xo * XYFact
            P(I).Y = WcsY0 - Yo * XYFact
        Next I
        P(4) = P(0)
                
        hRgnClose = CreatePolygonRgn(P(1), 4, WINDING) '创建多边形区域
        hBrush = CreateSolidBrush(&HFFC0C0)
        FillRgn PictureMesh.hdc, hRgnClose, hBrush
        DeleteObject (hBrush)
        DeleteObject (hRgnClose)
    End If

    For I = 1 To NY
        Px = iMapType * (NX - 1) * DX
        Py = (I - 1) * DY
        PZ = Vmin
        Call Project(Px, Py, PZ, Xo, Yo)
    
        Px = iMapType * (NX - 1) * DX
        Py = (I - 1) * DY
        PZ = Vmax
        Call Project(Px, Py, PZ, Xot, Yot)
    
        Call PlotCurve(Xo, Yo, 3)
        Call PlotCurve(Xot, Yot, 2)
    Next I
    
    For I = 1 To NX
        Px = (I - 1) * DX
        Py = iMapType * (NY - 1) * DY
        PZ = Vmin
        Call Project(Px, Py, PZ, Xo, Yo)
    
        Px = (I - 1) * DX
        Py = iMapType * (NY - 1) * DY
        PZ = Vmax
        Call Project(Px, Py, PZ, Xot, Yot)
    
        Call PlotCurve(Xo, Yo, 3)
        Call PlotCurve(Xot, Yot, 2)
    Next I
    
    For I = 1 To NH + 1
        Px = 0
        Py = iMapType * (NY - 1) * DY
        PZ = (I - 1) * HStep
        Call Project(Px, Py, PZ, Xo, Yo)

        Px = (NX - 1) * DX
        Py = iMapType * (NY - 1) * DY
        PZ = (I - 1) * HStep
        Call Project(Px, Py, PZ, Xot, Yot)
    
        Call PlotCurve(Xo, Yo, 3)
        Call PlotCurve(Xot, Yot, 2)
    Next I
    
    For I = 1 To NH + 1
        Px = iMapType * (NX - 1) * DX
        Py = 0
        PZ = (I - 1) * HStep
        Call Project(Px, Py, PZ, Xo, Yo)


        Px = iMapType * (NX - 1) * DX
        Py = (NY - 1) * DY
        PZ = (I - 1) * HStep
        Call Project(Px, Py, PZ, Xot, Yot)
    
        Call PlotCurve(Xo, Yo, 3)
        Call PlotCurve(Xot, Yot, 2)
    Next I
    
    For I = 2 To NH + 1
        Px = 0
        Py = (NY - 1) * DY
        PZ = (I - 1) * HStep
        Call Project(Px, Py, PZ, Xo, Yo)
        Xo = WcsX0 + Xo * XYFact
        Yo = WcsY0 - Yo * XYFact
    
        Mark = Format(Vmax - PZ, "##0 ")
        
        PictureMesh.CurrentX = Xo - PictureMesh.TextWidth(Mark)
        PictureMesh.CurrentY = Yo - PictureMesh.TextHeight(Mark) / 2
        PictureMesh.Print Mark
    Next I
    
    For I = 2 To NH + 1
        Px = (NX - 1) * DX
        Py = 0
        PZ = (I - 1) * HStep
        Call Project(Px, Py, PZ, Xo, Yo)
        Xo = WcsX0 + Xo * XYFact
        Yo = WcsY0 - Yo * XYFact
    
        Mark = Format(Vmax - PZ, "##0 ")
        
        PictureMesh.CurrentX = Xo + PictureMesh.TextWidth(" ")
        PictureMesh.CurrentY = Yo - PictureMesh.TextHeight(Mark) / 2
        PictureMesh.Print Mark
    Next I
ElseIf (AngXY < 180) Then
    If (iMapType = 0) Then
        '左面
        X(0) = 0
        Y(0) = 0
        Z(0) = Vmax
    
        X(1) = 0
        Y(1) = 0
        Z(1) = Vmin
    
        X(2) = 0
        Y(2) = (NY - 1) * DY
        Z(2) = Vmin
    
        X(3) = 0
        Y(3) = (NY - 1) * DY
        Z(3) = Vmax
    
        For I = 0 To 3
            Call Project(X(I), Y(I), Z(I), Xo, Yo)
        
            P(I).X = WcsX0 + Xo * XYFact
            P(I).Y = WcsY0 - Yo * XYFact
        Next I
        P(4) = P(0)
                
        hRgnClose = CreatePolygonRgn(P(1), 4, WINDING) '创建多边形区域
        hBrush = CreateSolidBrush(&HC0FFC0)
        FillRgn PictureMesh.hdc, hRgnClose, hBrush
        DeleteObject (hBrush)
        DeleteObject (hRgnClose)
        
        '后面
        X(0) = 0
        Y(0) = (NY - 1) * DY
        Z(0) = Vmax
    
        X(1) = 0
        Y(1) = (NY - 1) * DY
        Z(1) = Vmin
    
        X(2) = (NX - 1) * DX
        Y(2) = (NY - 1) * DY
        Z(2) = Vmin
    
        X(3) = (NX - 1) * DX
        Y(3) = (NY - 1) * DY
        Z(3) = Vmax
    
        For I = 0 To 3
            Call Project(X(I), Y(I), Z(I), Xo, Yo)
        
            P(I).X = WcsX0 + Xo * XYFact
            P(I).Y = WcsY0 - Yo * XYFact
        Next I
        P(4) = P(0)
                
        hRgnClose = CreatePolygonRgn(P(1), 4, WINDING) '创建多边形区域
        hBrush = CreateSolidBrush(&HC0C0FF)
        FillRgn PictureMesh.hdc, hRgnClose, hBrush
        DeleteObject (hBrush)
        DeleteObject (hRgnClose)
        
        
        X(0) = 0
        Y(0) = 0
        Z(0) = Vmax
    
        X(1) = (NX - 1) * DX
        Y(1) = 0
        Z(1) = Vmax
    
        X(2) = (NX - 1) * DX
        Y(2) = (NY - 1) * DY
        Z(2) = Vmax
    
        X(3) = 0
        Y(3) = (NY - 1) * DY
        Z(3) = Vmax
    
        For I = 0 To 3
            Call Project(X(I), Y(I), Z(I), Xo, Yo)
        
            P(I).X = WcsX0 + Xo * XYFact
            P(I).Y = WcsY0 - Yo * XYFact
        Next I
        P(4) = P(0)
                
        hRgnClose = CreatePolygonRgn(P(1), 4, WINDING) '创建多边形区域
        hBrush = CreateSolidBrush(&HFFC0C0)
        FillRgn PictureMesh.hdc, hRgnClose, hBrush
        DeleteObject (hBrush)
        DeleteObject (hRgnClose)
    End If

    For I = 1 To NY
        Px = iMapType * (NX - 1) * DX
        Py = (I - 1) * DY

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -