private void CreateSceneObjects() { for (int x = 0; x < 10; x++) { for (int y = 0; y < 4; y++) { var boxVisual3D = new Ab3d.Visuals.BoxVisual3D() { CenterPosition = new Point3D(-100 + 20 * x, 50 + y * 30, 0), Size = new Size3D(10, 10, 10), Material = _standardMaterial }; if (x == 4 && y == 2) { boxVisual3D.Material = _selectedMaterial; _selectedModel = boxVisual3D; } SelectionRootModelVisual3D.Children.Add(boxVisual3D); } } var eventManager3D = new Ab3d.Utilities.EventManager3D(MainViewport); var multiVisualEventSource3D = new MultiVisualEventSource3D(SelectionRootModelVisual3D.Children); multiVisualEventSource3D.MouseEnter += delegate(object sender, Mouse3DEventArgs args) { Mouse.OverrideCursor = Cursors.Hand; }; multiVisualEventSource3D.MouseLeave += delegate(object sender, Mouse3DEventArgs args) { Mouse.OverrideCursor = null; }; multiVisualEventSource3D.MouseClick += delegate(object sender, MouseButton3DEventArgs e) { if (_selectedModel != null) { _selectedModel.Material = _standardMaterial; } var baseModelVisual3D = e.HitObject as Ab3d.Visuals.BaseModelVisual3D; if (baseModelVisual3D != null) { baseModelVisual3D.Material = _selectedMaterial; _selectedModel = baseModelVisual3D; } else { _selectedModel = null; } string logText = string.Format("Camera1.TurnTo(new Point3D({0:0}, {1:0}, {2:0})", e.FinalPointHit.X, e.FinalPointHit.Y, e.FinalPointHit.Z); if (AnimateCheckBox.IsChecked ?? false) { // Animate the camera turn. Animation duration is 0.5 second and use QuadraticEaseInOutFunction for easing. Camera1.TurnTo(position: e.FinalPointHit, animationDurationInMilliseconds: 500, easingFunction: Ab3d.Animation.EasingFunctions.QuadraticEaseInOutFunction); logText += ", 500, QuadraticEaseInOutFunction)"; } else { Camera1.TurnTo(e.FinalPointHit); // Turn immediately logText += ")"; } LogCommandText(logText); // You can also call this with direction vector - for example: //var directionVector = e.FinalPointHit - Camera1.Position; //Camera1.TurnTo(directionVector); }; eventManager3D.RegisterEventSource3D(multiVisualEventSource3D); }