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;
            }
        }