PICK3.FRM

VERSION 5.00 
Object = "{34F681D0-3640-11CF-9294-00AA00B8A733}#1.0#0"; "danim.dll"
Begin VB.Form Picking
BorderStyle = 1 'Fixed Single
Caption = "Picking"
ClientHeight = 4665
ClientLeft = 30
ClientTop = 270
ClientWidth = 5055
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 4665
ScaleWidth = 5055
StartUpPosition = 3 'Windows Default
Begin DirectAnimationCtl.DAViewerControlWindowed DAViewerControlWindowed
Height = 4455
Left = 120
OleObjectBlob = "Pick3.frx":0000
TabIndex = 0
Top = 120
Width = 4815
End
End
Attribute VB_Name = "Picking"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'Pick3 Visual Basic Sample
Private Sub Form_Load()
pi = 3.1459

Dim size As DATransform3
Set size = Scale3Uniform(0.25)

Dim speed As DANumber
Set speed = DANumber(0.07)

' Set up relative paths for media imports. Does not work in VB
' debug. Create executable.
Dim mediaBase, geoBase, imgBase As String
mediaBase = CurDir + "\..\..\..\..\..\Media\"
geoBase = mediaBase + "geometry\"
imgBase = mediaBase + "image\"

'Import the geometries.
Dim rawCube As DAGeometry
Set rawCube = ImportGeometry(geoBase + "cube.x").Transform(size)

Dim rawCylinder As DAGeometry
Set rawCylinder = ImportGeometry(geoBase + "cylinder.x").Transform(size)

Dim rawCone As DAGeometry
Set rawCone = ImportGeometry(geoBase + "cone.x").Transform(size)

'Import background.
Dim stillSky As DAImage
Set stillSky = ImportImage(imgBase + "cldtile.jpg")

'Make the geometries pickable.
Set cone1 = activate(rawCone, Green)
Set cube1 = activate(rawCube, Magenta)
Set cube2 = activate(rawCube, ColorHslAnim(Div(LocalTime, DANumber(8)), DANumber(1), DANumber(0.5)))
Set cylinder = activate(rawCylinder, ColorRgb(0.8, 0.4, 0.4))

'Construct the final geometry, scale and rotate it.
Set multigeo = UnionGeometry(cone1.Transform(Translate3(0, 1, 0)), _
UnionGeometry(cube1.Transform(Translate3(0, 0, 1)), _
UnionGeometry(cube2.Transform(Translate3(0, 0, -1)), cylinder)))

Set X = Add(DAStatics.Abs(DAStatics.Sin(Mul(LocalTime, _
DANumber(0.2)))), DANumber(0.5))
Set Y = Add(DAStatics.Abs(DAStatics.Sin(Mul(LocalTime, _
DANumber(0.26)))), DANumber(0.5))
Set Z = Add(DAStatics.Abs(DAStatics.Sin(Mul(LocalTime, _
DANumber(0.14)))), DANumber(0.5))

Set geo = multigeo.Transform(Scale3Anim(X, Y, Z))

Set maxSky = stillSky.BoundingBox().Max()

Set tiledSky = stillSky.Tile()
Set movingSky = tiledSky.Transform(Translate2Anim(Mul(LocalTime, _
Div(maxSky.X, DANumber(8))), Mul(LocalTime, Div(maxSky.X, DANumber(16)))))

Set movingGeoImg = geometryImage(geo.Transform(Compose3(Rotate3Anim(ZVector3, _
Mul(speed, Mul(LocalTime(), DANumber(1.9)))), _
Rotate3Anim(YVector3, Mul(speed, Mul(LocalTime(), DANumber(pi)))))), speed)

Set fs = DefaultFont.size(14).Color(Black)
Set titleIm = StringImage("Left Click on an Object", fs).Transform(Translate2(0, 0.04))

DAViewerControlWindowed.UpdateInterval = 0.2

'Display the final image.
DAViewerControlWindowed.Image = Overlay(titleIm, Overlay(movingGeoImg, movingSky))

'Start the animation.
DAViewerControlWindowed.Start
End Sub

Function activate(unpickedGeo As DAGeometry, col As DAColor) As DAGeometry
Dim pickGeo As DAPickableResult
Set pickGeo = unpickedGeo.Pickable()

Dim pickEvent As DAEvent
Set pickEvent = AndEvent(LeftButtonDown, pickGeo.pickEvent)

Dim numcyc As DANumber
Set numcyc = CreateObject("DirectAnimation.DANumber")
numcyc.Init DAStatics.Until(DANumber(0), pickEvent, DAStatics.Until(DANumber(1), pickEvent, numcyc))

Dim colcyc As DAColor
Set colcyc = CreateObject("DirectAnimation.DAColor")
colcyc.Init DAStatics.Until(White, pickEvent, DAStatics.Until(col, pickEvent, colcyc))

Dim xf As DATransform3
Set xf = Rotate3Anim(XVector3, Integral(numcyc))

Set activate = pickGeo.Geometry.DiffuseColor(colcyc).Transform(xf)
End Function
Function geometryImage(geo As DAGeometry, speed As DANumber) As DAImage
Dim scaleFactor As DANumber
Set scaleFactor = DANumber(0.02)

Dim perspTransform As DATransform3
Set perspTransform = CreateObject("DirectAnimation.DATransform3")
perspTransform.Init DAStatics.Until(Compose3(Rotate3Anim(XVector3, _
Mul(speed, LocalTime)), Translate3(0, 0, 0.2)), RightButtonDown, _
DAStatics.Until(Rotate3Anim(XVector3, Mul(speed, LocalTime)), _
RightButtonDown, perspTransform))

Set light = UnionGeometry(DirectionalLight.Transform(perspTransform), _
DirectionalLight)

Dim strcyl As DAString
Set strcyl = CreateObject("DirectAnimation.DAString")
strcyl.Init DAStatics.Until(DAString("Perspective - Right Click to Switch"), _
RightButtonDown, DAStatics.Until(DAString("Parallel - Right Click to Switch"), _
RightButtonDown, strcyl))

Dim perspectiveCam As DACamera
Set perspectiveCam = PerspectiveCamera(1, 0).Transform(Compose3(Rotate3Anim(XVector3, _
Mul(speed, LocalTime)), Translate3(0, 0, 0.2)))

Dim parallelCam As DACamera
Set parallelCam = ParallelCamera(1).Transform(Rotate3Anim(XVector3, _
Mul(speed, LocalTime)))

Dim camera As DACamera
Set camera = CreateObject("DirectAnimation.DACamera")
camera.Init DAStatics.Until(perspectiveCam, RightButtonDown, _
DAStatics.Until(parallelCam, RightButtonDown, camera))

Dim fs As DAFontStyle
Set fs = DefaultFont.size(14).Color(Red)

Dim txtIm, xltTxt As DAImage
Set txtIm = StringImageAnim(strcyl, fs)
Set xltTxt = txtIm.Transform(Translate2(0, -0.045))

Set geometryImg = UnionGeometry(geo.Transform(Scale3UniformAnim(scaleFactor)), _
light).Render(camera)

Set geometryImage = Overlay(xltTxt, geometryImg)
End Function