private void LoadRobotPart(RobotParts robotPart) { if (robotPart == RobotParts.None) { return; } string partName = robotPart.ToString(); string fileName = _rootFolder + string.Format(_robotModelFileName, partName); string texturesFolder = _rootFolder + string.Format(_texturesSubfolder, partName); Mouse.OverrideCursor = Cursors.Wait; try { if (robotPart == RobotParts.Main) { ModelPlaceholder.Content = null; ModelPlaceholder.Children.Clear(); InfoTextBlock.Text = ""; } Dictionary <string, Model3D> namedObjects; var readModel3D = LoadModel3D(fileName, texturesFolder, out namedObjects); if (readModel3D == null) { return; } // Add RotateTransform3D objects to robot parts AddRobotTransformations(robotPart, namedObjects); if (robotPart == RobotParts.Main) { // Show the model ModelPlaceholder.Content = readModel3D; // Setup camera Camera1.TargetPosition = readModel3D.Bounds.GetCenterPosition(); Camera1.Distance = 1.0 * readModel3D.Bounds.GetDiagonalLength(); // Manually call Refresh to update the scene (create DirectX resources) while we are still showing Wait cursor MainDXViewportView.Refresh(); _namedObjects = namedObjects; } else { Model3D toolConnectorModel3D; if (_namedObjects == null || !_namedObjects.TryGetValue("Helper_Extras", out toolConnectorModel3D)) { return; } var toolConnectorModel3DGroup = (Model3DGroup)toolConnectorModel3D; toolConnectorModel3DGroup.Children.Clear(); Ab3d.Utilities.ModelUtils.PositionModel3D(readModel3D, new Point3D(0, 0, 0), PositionTypes.Bottom); toolConnectorModel3DGroup.Children.Add(readModel3D); //var geometryModel3D = Ab3d.Models.Line3DFactory.CreateWireCross3D(new Point3D(0, 0, 0), 1000, 2, Colors.Orange, MainViewport); //toolConnectorModel3DGroup.Children.Add(geometryModel3D); } } catch (Exception ex) { MessageBox.Show(string.Format("Error loading robot part {0}:\r\n{1}", robotPart, ex.Message)); } finally { Mouse.OverrideCursor = null; } }