home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / Terrain_Tr183757172005.psc / fTriangulate.frm < prev    next >
Text File  |  2005-01-07  |  22KB  |  747 lines

  1. VERSION 5.00
  2. Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "mscomctl.ocx"
  3. Begin VB.Form fTriangulate 
  4.    BackColor       =   &H00E0E0E0&
  5.    BorderStyle     =   3  'Fester Dialog
  6.    Caption         =   "3D Terrain Triangulation"
  7.    ClientHeight    =   10485
  8.    ClientLeft      =   45
  9.    ClientTop       =   390
  10.    ClientWidth     =   12705
  11.    FillStyle       =   0  'Ausgefⁿllt
  12.    Icon            =   "fTriangulate.frx":0000
  13.    LinkTopic       =   "Form1"
  14.    LockControls    =   -1  'True
  15.    MaxButton       =   0   'False
  16.    MinButton       =   0   'False
  17.    ScaleHeight     =   10485
  18.    ScaleWidth      =   12705
  19.    ShowInTaskbar   =   0   'False
  20.    StartUpPosition =   2  'Bildschirmmitte
  21.    Begin VB.CheckBox ckPerspective 
  22.       Alignment       =   1  'Rechts ausgerichtet
  23.       Caption         =   "Perspective"
  24.       Height          =   195
  25.       Left            =   6960
  26.       TabIndex        =   21
  27.       TabStop         =   0   'False
  28.       ToolTipText     =   "Add perspective distortion"
  29.       Top             =   300
  30.       Width           =   1140
  31.    End
  32.    Begin VB.CheckBox ckNumbers 
  33.       Alignment       =   1  'Rechts ausgerichtet
  34.       Caption         =   "Numbers"
  35.       Height          =   195
  36.       Left            =   7155
  37.       TabIndex        =   20
  38.       TabStop         =   0   'False
  39.       ToolTipText     =   "Show vertex numbers"
  40.       Top             =   525
  41.       Value           =   1  'Aktiviert
  42.       Width           =   945
  43.    End
  44.    Begin VB.HScrollBar scrY 
  45.       Height          =   270
  46.       LargeChange     =   9
  47.       Left            =   165
  48.       Max             =   360
  49.       SmallChange     =   3
  50.       TabIndex        =   19
  51.       Top             =   9900
  52.       Value           =   180
  53.       Width           =   12090
  54.    End
  55.    Begin VB.VScrollBar scrX 
  56.       Height          =   9090
  57.       LargeChange     =   9
  58.       Left            =   12270
  59.       Max             =   360
  60.       SmallChange     =   3
  61.       TabIndex        =   18
  62.       Top             =   810
  63.       Value           =   180
  64.       Width           =   270
  65.    End
  66.    Begin VB.CheckBox ckSort 
  67.       Alignment       =   1  'Rechts ausgerichtet
  68.       BackColor       =   &H00E0E0E0&
  69.       Caption         =   "Presort"
  70.       Height          =   300
  71.       Left            =   8280
  72.       TabIndex        =   2
  73.       TabStop         =   0   'False
  74.       ToolTipText     =   "Presort vertices"
  75.       Top             =   285
  76.       Value           =   1  'Aktiviert
  77.       Width           =   795
  78.    End
  79.    Begin VB.CheckBox ckDefer 
  80.       Caption         =   "&Defer"
  81.       Height          =   360
  82.       Left            =   9285
  83.       Style           =   1  'Grafisch
  84.       TabIndex        =   3
  85.       TabStop         =   0   'False
  86.       ToolTipText     =   "Defer triangulation"
  87.       Top             =   240
  88.       Width           =   795
  89.    End
  90.    Begin VB.CheckBox ckMesh 
  91.       Alignment       =   1  'Rechts ausgerichtet
  92.       BackColor       =   &H00E0E0E0&
  93.       Caption         =   "&Mesh"
  94.       Height          =   195
  95.       Left            =   7410
  96.       TabIndex        =   1
  97.       TabStop         =   0   'False
  98.       ToolTipText     =   "Show wire mesh"
  99.       Top             =   75
  100.       Value           =   1  'Aktiviert
  101.       Width           =   690
  102.    End
  103.    Begin VB.TextBox txNum 
  104.       Alignment       =   1  'Rechts
  105.       Height          =   285
  106.       Left            =   11790
  107.       MaxLength       =   4
  108.       TabIndex        =   6
  109.       TabStop         =   0   'False
  110.       Text            =   "100"
  111.       ToolTipText     =   "Number of random vertices to generate"
  112.       Top             =   285
  113.       Width           =   480
  114.    End
  115.    Begin MSComctlLib.ProgressBar pgb 
  116.       Align           =   2  'Unten ausrichten
  117.       Height          =   195
  118.       Left            =   0
  119.       TabIndex        =   10
  120.       Top             =   10290
  121.       Width           =   12705
  122.       _ExtentX        =   22410
  123.       _ExtentY        =   344
  124.       _Version        =   393216
  125.       Appearance      =   0
  126.    End
  127.    Begin VB.CommandButton btRandom 
  128.       Caption         =   "&Random"
  129.       Height          =   360
  130.       Left            =   10950
  131.       TabIndex        =   5
  132.       TabStop         =   0   'False
  133.       ToolTipText     =   "Generate random vertices"
  134.       Top             =   240
  135.       Width           =   795
  136.    End
  137.    Begin VB.CommandButton btReset 
  138.       Caption         =   "&Erase"
  139.       Height          =   360
  140.       Left            =   10125
  141.       TabIndex        =   4
  142.       TabStop         =   0   'False
  143.       ToolTipText     =   "Reset"
  144.       Top             =   240
  145.       Width           =   795
  146.    End
  147.    Begin VB.PictureBox picCanvas 
  148.       BackColor       =   &H00FFFFFF&
  149.       DrawMode        =   9  'Stift maskieren invers
  150.       FillColor       =   &H000000FF&
  151.       FillStyle       =   0  'Ausgefⁿllt
  152.       BeginProperty Font 
  153.          Name            =   "Arial"
  154.          Size            =   6.75
  155.          Charset         =   0
  156.          Weight          =   400
  157.          Underline       =   0   'False
  158.          Italic          =   0   'False
  159.          Strikethrough   =   0   'False
  160.       EndProperty
  161.       ForeColor       =   &H00008000&
  162.       Height          =   9075
  163.       Left            =   187
  164.       ScaleHeight     =   601
  165.       ScaleLeft       =   -400
  166.       ScaleMode       =   0  'Benutzerdefiniert
  167.       ScaleTop        =   -300
  168.       ScaleWidth      =   801
  169.       TabIndex        =   0
  170.       Top             =   810
  171.       Width           =   12075
  172.    End
  173.    Begin VB.Label lb 
  174.       AutoSize        =   -1  'True
  175.       BackColor       =   &H00000000&
  176.       BackStyle       =   0  'Transparent
  177.       Height          =   195
  178.       Index           =   4
  179.       Left            =   2910
  180.       TabIndex        =   17
  181.       Top             =   555
  182.       Width           =   45
  183.    End
  184.    Begin VB.Label lbPosY 
  185.       AutoSize        =   -1  'True
  186.       BackColor       =   &H00000000&
  187.       BackStyle       =   0  'Transparent
  188.       Height          =   195
  189.       Left            =   1950
  190.       TabIndex        =   16
  191.       Top             =   555
  192.       Width           =   45
  193.    End
  194.    Begin VB.Label lbPosX 
  195.       AutoSize        =   -1  'True
  196.       BackColor       =   &H00000000&
  197.       BackStyle       =   0  'Transparent
  198.       Height          =   195
  199.       Left            =   1080
  200.       TabIndex        =   15
  201.       Top             =   555
  202.       Width           =   45
  203.    End
  204.    Begin VB.Label lb 
  205.       Alignment       =   2  'Zentriert
  206.       BackColor       =   &H00000000&
  207.       BackStyle       =   0  'Transparent
  208.       Caption         =   "Click into the area below (left to add vertex)  (right to position light)."
  209.       BeginProperty Font 
  210.          Name            =   "MS Sans Serif"
  211.          Size            =   8.25
  212.          Charset         =   0
  213.          Weight          =   700
  214.          Underline       =   0   'False
  215.          Italic          =   0   'False
  216.          Strikethrough   =   0   'False
  217.       EndProperty
  218.       ForeColor       =   &H00008080&
  219.       Height          =   600
  220.       Index           =   3
  221.       Left            =   4830
  222.       TabIndex        =   14
  223.       Top             =   120
  224.       Width           =   2130
  225.    End
  226.    Begin VB.Image imgUMG 
  227.       Height          =   630
  228.       Left            =   150
  229.       Picture         =   "fTriangulate.frx":08CA
  230.       Top             =   60
  231.       Width           =   675
  232.    End
  233.    Begin VB.Label lb 
  234.       Caption         =   "Area in Square Units"
  235.       Height          =   195
  236.       Index           =   2
  237.       Left            =   2925
  238.       TabIndex        =   13
  239.       Top             =   105
  240.       Width           =   1455
  241.    End
  242.    Begin VB.Label lb 
  243.       Caption         =   "Triangles"
  244.       Height          =   195
  245.       Index           =   1
  246.       Left            =   1950
  247.       TabIndex        =   12
  248.       Top             =   90
  249.       Width           =   645
  250.    End
  251.    Begin VB.Label lb 
  252.       Caption         =   "Vertices"
  253.       Height          =   195
  254.       Index           =   0
  255.       Left            =   1095
  256.       TabIndex        =   11
  257.       Top             =   90
  258.       Width           =   570
  259.    End
  260.    Begin VB.Label lbTotalArea 
  261.       AutoSize        =   -1  'True
  262.       BackColor       =   &H00000000&
  263.       BackStyle       =   0  'Transparent
  264.       Height          =   195
  265.       Left            =   2910
  266.       TabIndex        =   9
  267.       Top             =   315
  268.       Width           =   45
  269.    End
  270.    Begin VB.Label lbTriangles 
  271.       AutoSize        =   -1  'True
  272.       BackColor       =   &H00000000&
  273.       BackStyle       =   0  'Transparent
  274.       Height          =   195
  275.       Left            =   1950
  276.       TabIndex        =   8
  277.       Top             =   315
  278.       Width           =   45
  279.    End
  280.    Begin VB.Label lbVertices 
  281.       AutoSize        =   -1  'True
  282.       BackColor       =   &H00000000&
  283.       BackStyle       =   0  'Transparent
  284.       Height          =   195
  285.       Left            =   1095
  286.       TabIndex        =   7
  287.       Top             =   315
  288.       Width           =   45
  289.    End
  290. End
  291. Attribute VB_Name = "fTriangulate"
  292. Attribute VB_GlobalNameSpace = False
  293. Attribute VB_Creatable = False
  294. Attribute VB_PredeclaredId = True
  295. Attribute VB_Exposed = False
  296. Option Explicit
  297.  
  298. Private Declare Sub InitCommonControls Lib "comctl32" ()
  299.  
  300. 'drawing
  301. Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
  302. Private Declare Function Polygon Lib "gdi32" (ByVal hDC As Long, lpPoint As tPoint2D, ByVal nCount As Long) As Long
  303. Private Declare Function Polyline Lib "gdi32" (ByVal hDC As Long, lpPoint As tPoint2D, ByVal nCount As Long) As Long
  304. Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long
  305. 'for polygon and polyline api call
  306. Private hDCCanvas           As Long
  307. Private Type tPoint2D
  308.     x   As Long
  309.     y   As Long
  310. End Type
  311.  
  312. Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)
  313. Private Type MEMORYSTATUS
  314.     dwLength                As Long
  315.     dwMemoryLoad            As Long
  316.     dwTotalPhys             As Long
  317.     dwAvailPhys             As Long
  318.     dwTotalPageFile         As Long
  319.     dwAvailPageFile         As Long
  320.     dwTotalVirtual          As Long
  321.     dwAvailVirtual          As Long
  322. End Type
  323. Private Memstat             As MEMORYSTATUS
  324.  
  325. 'the terrain
  326. Private WithEvents Terrain  As cTerrain
  327. Attribute Terrain.VB_VarHelpID = -1
  328.  
  329. Private DotRad              As Single 'red dot radius
  330.  
  331. 'canvas origin and size
  332. Private CanvasLeft          As Double
  333. Private CanvasTop           As Double
  334. Private CanvasWidth         As Double
  335. Private CanvasHeight        As Double
  336.  
  337. Private LightZ              As Double 'light elevation
  338.  
  339. 'some indicators
  340. Private Rotated             As Boolean
  341. Private Perspective         As Boolean
  342. Private Internal            As Boolean
  343.  
  344. Private Function AvailableMemoryPercentage() As Long
  345.  
  346.     With Memstat
  347.         .dwLength = Len(Memstat)
  348.         GlobalMemoryStatus Memstat
  349.         AvailableMemoryPercentage = .dwMemoryLoad
  350.     End With 'MEMSTAT
  351.  
  352. End Function
  353.  
  354. Private Sub btRandom_Click()
  355.  
  356.   'creates random vertices in the terrain
  357.  
  358.   Dim i     As Long
  359.   Dim n     As Long
  360.   Dim x     As Double
  361.   Dim y     As Double
  362.   Dim Corners2D() As tPoint2D
  363.  
  364.     btReset_Click
  365.     Enabled = False
  366.     Screen.MousePointer = vbHourglass
  367.     n = Val(txNum)
  368.     If n >= 1 Then
  369.         ReDim SortElems(1 To n)
  370.         With picCanvas
  371.             For i = 1 To n
  372.                 x = CDbl(Rnd * (CanvasWidth - 6)) + CanvasLeft + 3
  373.                 y = CDbl(Rnd * (CanvasHeight - 6)) + CanvasTop + 3
  374.                 If Terrain.AddVertex(x, y, Rnd * 100 - 50) = 0 Then
  375.                     'If Terrain.AddVertex(x, y, Rnd * 100 - 2000) = 0 Then 'for test
  376.                     .FillColor = vbRed
  377.                     picCanvas.Circle (x, y), DotRad, vbRed
  378.                 End If
  379.             Next i
  380.         End With 'PICCANVAS
  381.  
  382.         If ckSort = vbChecked Then
  383.             Terrain.PresortVertices
  384.         End If
  385.  
  386.         lbVertices = Terrain.VertexCount
  387.         DoEvents
  388.         Render True
  389.     End If
  390.     Screen.MousePointer = vbDefault
  391.     Enabled = True
  392.  
  393. End Sub
  394.  
  395. Private Sub btReset_Click()
  396.  
  397.   'what it says - it resets variables
  398.  
  399.     picCanvas.SetFocus
  400.     Enabled = False
  401.     Screen.MousePointer = vbHourglass
  402.     Terrain.Reset
  403.     Internal = True
  404.     scrX = 180
  405.     scrY = 180
  406.     Internal = False
  407.     picCanvas.Cls
  408.     DrawGrid
  409.     lbTriangles = vbNullString
  410.     lbVertices = vbNullString
  411.     lbTotalArea = vbNullString
  412.     Screen.MousePointer = vbDefault
  413.     Enabled = True
  414.  
  415. End Sub
  416.  
  417. Private Sub ckDefer_Click()
  418.  
  419.   'option to defer triangulation
  420.  
  421.     If ckDefer = vbUnchecked Then
  422.         Render True
  423.     End If
  424.     picCanvas.SetFocus
  425.  
  426. End Sub
  427.  
  428. Private Sub ckMesh_Click()
  429.  
  430.   'option to defer draw wire mesh or filled triangles
  431.  
  432.     picCanvas.SetFocus
  433.     If ckMesh = vbUnchecked Then
  434.         Internal = True
  435.         scrX = 180
  436.         scrY = 180
  437.         Internal = False
  438.         scrX.Enabled = False
  439.         scrY.Enabled = False
  440.       Else 'NOT CKMESH...
  441.         scrX.Enabled = True
  442.         scrY.Enabled = True
  443.     End If
  444.     Render False
  445.  
  446. End Sub
  447.  
  448. Private Sub ckNumbers_Click()
  449.  
  450.   'option to show vertex nmbers
  451.  
  452.     If ckMesh = vbChecked Then
  453.         picCanvas.SetFocus
  454.         Render False
  455.     End If
  456.  
  457. End Sub
  458.  
  459. Private Sub ckPerspective_Click()
  460.  
  461.   'option to add perspective distortion
  462.  
  463.     Perspective = (ckPerspective = vbChecked)
  464.     picCanvas.SetFocus
  465.     Render False
  466.  
  467. End Sub
  468.  
  469. Private Sub ckSort_Click()
  470.  
  471.   'option to presort vertices
  472.  
  473.     picCanvas.SetFocus
  474.  
  475. End Sub
  476.  
  477. Private Sub Render(NewSamples As Boolean)
  478.  
  479.   'render the triangulated terrain
  480.  
  481.   Dim Triangle          As cTriangle
  482.   Dim i                 As Long
  483.   Dim j                 As Long
  484.   Dim k                 As Long
  485.   Const a               As Long = 0
  486.   Const b               As Long = 1
  487.   Const c               As Long = 2
  488.   Const aa              As Long = 3
  489.  
  490.   Dim Intensity         As Long
  491.   Dim Corners2D(0 To 3) As tPoint2D
  492.  
  493.     Enabled = False
  494.     If Not Rotated Then
  495.         Screen.MousePointer = vbHourglass
  496.     End If
  497.     If ckDefer = vbUnchecked Then
  498.         With Terrain
  499.             If NewSamples Then
  500.                 lbTriangles = .Triangulate
  501.                 lbTotalArea = Format$(Round(.TotalArea, 5), "#,0.0####")
  502.                 If Not .HighestVertex Is Nothing Then
  503.                     .SetLightPosition .HighestVertex.x, .HighestVertex.y, LightZ
  504.                 End If
  505.             End If
  506.             If .TriangleCount Then
  507.                 picCanvas.ForeColor = vbBlack
  508.                 picCanvas.DrawMode = vbCopyPen
  509.                 picCanvas.Cls
  510.                 For i = 1 To .TriangleCount
  511.                     Set Triangle = .Triangles(i)
  512.                     With Triangle
  513.                         Corners2D(a) = MakePoint2D(.CornerA3D) '3 points for polygon drawing
  514.                         Corners2D(b) = MakePoint2D(.CornerB3D)
  515.                         Corners2D(c) = MakePoint2D(.CornerC3D)
  516.                         If ckMesh = vbUnchecked Then 'colorize
  517.                             'draw the shaded triangles
  518.                             Intensity = 255 * Sqr(.LightIntensity)
  519.                             picCanvas.FillColor = RGB(Intensity / 2, Intensity, Intensity / 2)
  520.                             Polygon hDCCanvas, Corners2D(a), 3 'a-b-c and closed automatically
  521.                           Else 'NOT CKMESH...
  522.                             'draw the 3D wire mesh
  523.                             Corners2D(aa) = Corners2D(a) '4th point for wire mesh
  524.                             Polyline hDCCanvas, Corners2D(a), 4 'a-b-c-a
  525.                             If Not (Rotated Or Perspective) Then
  526.                                 'draw the red dots and print vertex numbers
  527.                                 picCanvas.FillColor = vbRed
  528.                                 With .CornerA3D
  529.                                     picCanvas.Circle (.x, .y), DotRad, vbRed
  530.                                     If ckNumbers = vbChecked Then
  531.                                         picCanvas.ForeColor = &HB00000
  532.                                         picCanvas.Print .Number
  533.                                     End If
  534.                                 End With '.CORNERA3D
  535.                                 With .CornerB3D
  536.                                     picCanvas.Circle (.x, .y), DotRad, vbRed
  537.                                     If ckNumbers = vbChecked Then
  538.                                         picCanvas.Print .Number
  539.                                     End If
  540.                                 End With '.CORNERB3D
  541.                                 With .CornerC3D
  542.                                     picCanvas.Circle (.x, .y), DotRad, vbRed
  543.                                     If ckNumbers = vbChecked Then
  544.                                         picCanvas.Print .Number
  545.                                         picCanvas.ForeColor = vbBlack
  546.                                     End If
  547.                                 End With '.CORNERC3D
  548.                             End If
  549.                         End If
  550.                     End With 'TRIANGLE
  551.                 Next i
  552.                 If ckMesh = vbUnchecked Then
  553.                     'draw light
  554.                     picCanvas.FillColor = vbYellow
  555.                     picCanvas.Circle (.LightPosition.xRot, .LightPosition.yRot), DotRad + DotRad, vbRed
  556.                 End If
  557.                 DrawGrid
  558.             End If
  559.         End With 'TERRAIN
  560.         pgb = 0
  561.     End If
  562.     Screen.MousePointer = vbDefault
  563.     Enabled = True
  564.  
  565. End Sub
  566.  
  567. Private Sub DrawGrid()
  568.  
  569.   'draws the grid
  570.  
  571.   Dim i     As Long
  572.  
  573.     If Not Rotated Then
  574.         picCanvas.DrawMode = vbMaskPen
  575.         For i = CanvasLeft To CanvasWidth - CanvasLeft Step 10
  576.             If i Mod 100 Then
  577.                 picCanvas.Line (i, CanvasTop)-(i, CanvasHeight - CanvasTop), &HE8E8E8
  578.                 picCanvas.Line (CanvasLeft, i)-(CanvasWidth - CanvasLeft, i), &HE8E8E8
  579.               Else 'NOT I...
  580.                 picCanvas.Line (i, CanvasTop)-(i, CanvasHeight), &HD0D0D0
  581.                 picCanvas.Line (CanvasLeft, i)-(CanvasWidth, i), &HD0D0D0
  582.             End If
  583.         Next i
  584.         lb(4) = "Memory used " & AvailableMemoryPercentage & "%"
  585.     End If
  586.  
  587. End Sub
  588.  
  589. Private Sub Form_Initialize()
  590.  
  591.     InitCommonControls
  592.  
  593. End Sub
  594.  
  595. Private Sub Form_Load()
  596.  
  597.     Set Terrain = New cTerrain
  598.     DotRad = 2
  599.     LightZ = 500
  600.     Rnd -1 'make sure the randomizer has initial seed
  601.     With picCanvas
  602.         hDCCanvas = GetDC(.hWnd)
  603.         CanvasLeft = .ScaleLeft
  604.         CanvasTop = .ScaleTop
  605.         CanvasWidth = .ScaleWidth
  606.         CanvasHeight = .ScaleHeight
  607.     End With 'PICCANVAS
  608.  
  609. End Sub
  610.  
  611. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
  612.  
  613.     lbPosX = vbNullString
  614.     lbPosY = vbNullString
  615.  
  616. End Sub
  617.  
  618. Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  619.  
  620.     Hide
  621.  
  622. End Sub
  623.  
  624. Private Sub Form_Unload(Cancel As Integer)
  625.  
  626.   'tidy up
  627.  
  628.     ReleaseDC picCanvas.hWnd, hDCCanvas
  629.     Set Terrain = Nothing
  630.  
  631. End Sub
  632.  
  633. Private Function MakePoint2D(Vert As cVertex) As tPoint2D
  634.  
  635.   'makes a 2D point from a 3D vertex optionally taking into account perspective distortion
  636.   'according to z-coord
  637.  
  638.   'the 2D points are then used in API-calls
  639.  
  640.   Dim PerspectiveDistortionFactor As Double
  641.   Const Sqr2    As Double = 1.4142135623731
  642.  
  643.     With Vert
  644.         If Perspective Then
  645.             PerspectiveDistortionFactor = 1# + .zRot / CanvasWidth / Sqr2
  646.             MakePoint2D.x = .xRot * PerspectiveDistortionFactor - CanvasLeft
  647.             MakePoint2D.y = .yRot * PerspectiveDistortionFactor - CanvasTop
  648.           Else 'PERSPECTIVE = FALSE/0
  649.             MakePoint2D.x = .xRot - CanvasLeft
  650.             MakePoint2D.y = .yRot - CanvasTop
  651.         End If
  652.     End With 'VERT
  653.  
  654. End Function
  655.  
  656. Private Sub picCanvas_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  657.  
  658.   'adds a vertex to the vertex set or sets the light position
  659.  
  660.     Internal = True
  661.     scrX = 180
  662.     scrY = 180
  663.     Internal = False
  664.     If Button = vbLeftButton Then
  665.         Terrain.AddVertex CDbl(x), CDbl(y), 0, False
  666.         lbVertices = Terrain.VertexCount
  667.         picCanvas.FillColor = vbRed
  668.         picCanvas.Circle (x, y), DotRad, vbRed
  669.         Render True
  670.       Else 'NOT BUTTON...
  671.         If ckMesh = vbUnchecked Then
  672.             Terrain.SetLightPosition CDbl(x), CDbl(y), LightZ
  673.         End If
  674.         Render False
  675.     End If
  676.  
  677. End Sub
  678.  
  679. Private Sub picCanvas_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
  680.  
  681.     lbPosX = "x " & Round(x)
  682.     lbPosY = "y " & Round(y)
  683.  
  684. End Sub
  685.  
  686. Private Sub picCanvas_Paint()
  687.  
  688.     DrawGrid
  689.  
  690. End Sub
  691.  
  692. Private Sub scrX_Change()
  693.  
  694.   'rotate around x-axis - sets camera postion / viewing angle
  695.  
  696.     Rotated = Not Internal
  697.     Terrain.SetCameraPosition scrX, scrY, 180
  698.     If Rotated Then
  699.         Render False
  700.     End If
  701.  
  702. End Sub
  703.  
  704. Private Sub scrX_Scroll()
  705.  
  706.     scrX_Change
  707.  
  708. End Sub
  709.  
  710. Private Sub scrY_Change()
  711.  
  712.   'rotate around y-axis - sets camera postion / viewing angle
  713.  
  714.     Rotated = Not Internal
  715.     Terrain.SetCameraPosition scrX, scrY, 180
  716.     If Rotated Then
  717.         Render False
  718.     End If
  719.  
  720. End Sub
  721.  
  722. Private Sub scrY_Scroll()
  723.  
  724.     scrY_Change
  725.  
  726. End Sub
  727.  
  728. Private Sub Terrain_Progress(ByVal PercentCompleted As Long)
  729.  
  730.   'events fired during triangulation
  731.  
  732.     pgb = PercentCompleted
  733.     lb(4) = "Memory used " & AvailableMemoryPercentage & "%"
  734.     DoEvents
  735.  
  736. End Sub
  737.  
  738. Private Sub txNum_GotFocus()
  739.  
  740.     txNum.SelStart = 0
  741.     txNum.SelLength = 4
  742.  
  743. End Sub
  744.  
  745. ':) Ulli's VB Code Formatter V2.18.3 (2005-Jan-07 13:59)  Decl: 46  Code: 404  Total: 450 Lines
  746. ':) CommentOnly: 27 (6%)  Commented: 22 (4,9%)  Empty: 106 (23,6%)  Max Logic Depth: 10
  747.