home *** CD-ROM | disk | FTP | other *** search
- VERSION 4.00
- Begin VB.Form RotateAroundForm
- Caption = "Rotate Around"
- ClientHeight = 4005
- ClientLeft = 2325
- ClientTop = 780
- ClientWidth = 4215
- Height = 4695
- KeyPreview = -1 'True
- Left = 2265
- LinkTopic = "Form1"
- ScaleHeight = 4005
- ScaleWidth = 4215
- Top = 150
- Width = 4335
- Begin VB.PictureBox Pict
- Height = 3975
- Left = 0
- ScaleHeight = -7
- ScaleLeft = -1
- ScaleMode = 0 'User
- ScaleTop = 6
- ScaleWidth = 7
- TabIndex = 0
- Top = 0
- Width = 4215
- End
- Begin VB.Menu mnuFile
- Caption = "&File"
- Begin VB.Menu mnuFileExit
- Caption = "E&xit"
- End
- End
- Attribute VB_Name = "RotateAroundForm"
- Attribute VB_Creatable = False
- Attribute VB_Exposed = False
- Option Explicit
- Const PI = 3.14159265
- Dim NumSegments As Integer
- Dim Segments() As Segment
- Dim Theta As Single
- Sub CreateData()
- ' Create the axes.
- MakeSegment 0, 0, 5, 0
- MakeSegment 0, 0, 0, 5
- ' Create an object to manipulate.
- MakeSegment 1, 1, 3, 1
- MakeSegment 3, 1, 3, 3
- MakeSegment 3, 3, 1, 3
- MakeSegment 1, 3, 1, 1
- MakeSegment 1, 1, 3, 3
- MakeSegment 3, 1, 1, 3
- End Sub
- Sub DrawSegments(pic As Object)
- Dim T(1 To 3, 1 To 3) As Single
- Dim i As Integer
- Dim x1 As Single
- Dim y1 As Single
- Dim x2 As Single
- Dim y2 As Single
- pic.Cls
- ' Transform the picture.
- m2RotateAround T, Theta, 2, 2
- TransformPicture T
- For i = 1 To NumSegments
- x1 = Segments(i).fr_tr(1)
- y1 = Segments(i).fr_tr(2)
- x2 = Segments(i).to_tr(1)
- y2 = Segments(i).to_tr(2)
- pic.Line (x1, y1)-(x2, y2)
- Next i
- End Sub
- Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
- Const Dtheta = PI / 16
- Select Case KeyCode
- Case vbKeyLeft ' Rotate left.
- Theta = Theta + Dtheta
- Case vbKeyRight ' Rotate right.
- Theta = Theta - Dtheta
- End Select
- Pict.Refresh
- End Sub
- Private Sub Form_Load()
- Theta = 0
- CreateData
- End Sub
- Sub MakeSegment(x1 As Single, y1 As Single, x2 As Single, y2 As Single)
- NumSegments = NumSegments + 1
- ReDim Preserve Segments(1 To NumSegments)
- Segments(NumSegments).fr_pt(1) = x1
- Segments(NumSegments).fr_pt(2) = y1
- Segments(NumSegments).fr_pt(3) = 1
- Segments(NumSegments).to_pt(1) = x2
- Segments(NumSegments).to_pt(2) = y2
- Segments(NumSegments).to_pt(3) = 1
- End Sub
- ' ***********************************************
- ' Transform all segments except the axes.
- ' ***********************************************
- Sub TransformPicture(M() As Single)
- Dim i As Integer
- For i = 1 To 2
- m2PointCopy Segments(i).fr_tr, Segments(i).fr_pt
- m2PointCopy Segments(i).to_tr, Segments(i).to_pt
- Next i
- For i = 3 To NumSegments
- m2Apply Segments(i).fr_pt, M, Segments(i).fr_tr
- m2Apply Segments(i).to_pt, M, Segments(i).to_tr
- Next i
- End Sub
- Private Sub mnuFileExit_Click()
- Unload Me
- End Sub
- Private Sub Pict_Paint()
- DrawSegments Pict
- End Sub
-