Esempio n. 1
0
        private void OnGUI()
        {
            //Styles definitions
            GUIStyle titleStyle = new GUIStyle(EditorStyles.boldLabel)
            {
                alignment = TextAnchor.MiddleCenter,
                fontSize  = 13
            };
            GUIStyle buttonStyle = new GUIStyle(EditorStyles.miniButtonRight)
            {
                fixedWidth = 75
            };

            //Window title
            GUILayout.Space(10);
            GUILayout.Label("Export " + urdfRobot.gameObject.name + " to URDF", titleStyle);

            //Select export root folder
            GUILayout.Space(5);
            EditorGUILayout.BeginHorizontal("HelpBox");
            exportRoot = EditorGUILayout.TextField(
                new GUIContent("Export root folder", "Corresponds to ROS package root folder."),
                exportRoot);
            if (GUILayout.Button("Select", buttonStyle))
            {
                exportRoot = EditorUtility.OpenFolderPanel("Select export root folder", exportRoot, "");
            }

            EditorGUILayout.EndHorizontal();

            //Select subfolder
            GUILayout.Space(5);
            selectedSubfolder =
                GUILayout.SelectionGrid(selectedSubfolder, subfolderOptions, 1, EditorStyles.radioButton);

            EditorGUI.BeginDisabledGroup(selectedSubfolder != 1);

            EditorGUILayout.BeginHorizontal();
            GUILayout.Space(30);
            EditorGUILayout.BeginHorizontal("HelpBox");
            subfolder = EditorGUILayout.TextField(
                new GUIContent("Subfolder", "Corresponds to URDF subfolder in ROS package."),
                subfolder);
            if (GUILayout.Button("Select", buttonStyle))
            {
                string subfolderPath = EditorUtility.OpenFolderPanel(
                    "Select export destination for robot asset files (such as meshes, images, etc)",
                    exportRoot,
                    "");

                subfolder = subfolderPath.Contains(exportRoot) ? subfolderPath.Substring(exportRoot.Length) : "";
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndHorizontal();

            EditorGUI.EndDisabledGroup();

            //Choose STL export type
            GUILayout.Space(10);
            EditorGUILayout.BeginHorizontal();
            StlWriter.fileType =
                (StlWriter.FileType)EditorGUILayout.EnumPopup("Export new meshes to", StlWriter.fileType);
            EditorGUILayout.LabelField("   STL files");
            EditorGUILayout.EndHorizontal();

            //Export Robot button
            GUILayout.Space(10);
            if (GUILayout.Button("Export Robot"))
            {
                if (exportRoot == "" || !Directory.Exists(exportRoot))
                {
                    EditorUtility.DisplayDialog("Export Error",
                                                "Export root folder must be defined and folder must exist.", "Ok");
                }
                else
                {
                    if (selectedSubfolder == 0)
                    {
                        subfolder = "";
                    }
                    else
                    {
                        subfolder = subfolder.TrimStart(Path.DirectorySeparatorChar)
                                    .TrimStart(Path.AltDirectorySeparatorChar);
                    }

                    urdfRobot.ExportRobotToUrdf(exportRoot, subfolder);
                    SetEditorPrefs();
                    Close();
                }
            }
        }
Esempio n. 2
0
        public override void OnInspectorGUI()
        {
            if (buttonStyle == null)
            {
                buttonStyle = new GUIStyle(EditorStyles.miniButtonRight)
                {
                    fixedWidth = 75
                }
            }
            ;

            urdfRobot = (UrdfRobot)target;

            EditorGUILayout.PropertyField(axisType, new GUIContent("Axis Type"));
            serializedObject.ApplyModifiedProperties();
            UrdfRobotExtensions.CorrectAxis(urdfRobot.gameObject);

            GUILayout.Space(5);
            GUILayout.Label("All Rigidbodies", EditorStyles.boldLabel);
            DisplaySettingsToggle(new GUIContent("Use Gravity", "If disabled, robot is not affected by gravity."), urdfRobot.SetRigidbodiesUseGravity, UrdfRobot.useGravity);
            DisplaySettingsToggle(new GUIContent("Use Inertia from URDF", "If disabled, Unity will generate new inertia tensor values automatically."), urdfRobot.SetUseUrdfInertiaData,
                                  UrdfRobot.useUrdfInertiaData);
            DisplaySettingsToggle(new GUIContent("Default Space"), urdfRobot.ChangeToCorrectedSpace, UrdfRobot.changetoCorrectedSpace);

            GUILayout.Space(5);
            GUILayout.Label("All Colliders", EditorStyles.boldLabel);
            DisplaySettingsToggle(new GUIContent("Convex"), urdfRobot.SetCollidersConvex, UrdfRobot.collidersConvex);

            GUILayout.Space(5);
            GUILayout.Label("All Joints", EditorStyles.boldLabel);
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("Generate Unique Joint Names");
            if (GUILayout.Button("Generate", new GUIStyle(EditorStyles.miniButton)
            {
                fixedWidth = 155
            }))
            {
                urdfRobot.GenerateUniqueJointNames();
            }
            EditorGUILayout.EndHorizontal();

            GUILayout.Space(5);
            EditorGUILayout.PropertyField(axisType, new GUIContent("Axis Type", "Adjust this if the models that make up your robot are facing the wrong direction."));
            serializedObject.ApplyModifiedProperties();
            UrdfRobotExtensions.CorrectAxis(urdfRobot.gameObject);

            if (urdfRobot.GetComponent <RosSharp.Control.Controller>() == null || urdfRobot.GetComponent <RosSharp.Control.FKRobot>() == null)
            {
                GUILayout.Label("Components", EditorStyles.boldLabel);
                GUILayout.BeginHorizontal();
                if (GUILayout.Button(urdfRobot.GetComponent <RosSharp.Control.Controller>() == null? "Add Controller": "Remove Controller"))
                {
                    urdfRobot.AddController();
                }
                if (urdfRobot.GetComponent <RosSharp.Control.FKRobot>() == null)
                {
                    if (GUILayout.Button("Add Forward Kinematics"))
                    {
                        urdfRobot.gameObject.AddComponent <RosSharp.Control.FKRobot>();
                    }
                }
                GUILayout.EndHorizontal();
            }

            GUILayout.Space(5);
            GUILayout.Label("URDF Files", EditorStyles.boldLabel);
            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Export robot to URDF"))
            {
                exportRoot = EditorUtility.OpenFolderPanel("Select export directory", exportRoot, "");

                if (exportRoot.Length == 0)
                {
                    return;
                }
                else if (!Directory.Exists(exportRoot))
                {
                    EditorUtility.DisplayDialog("Export Error", "Export root folder must be defined and folder must exist.", "Ok");
                }
                else
                {
                    urdfRobot.ExportRobotToUrdf(exportRoot);
                    SetEditorPrefs();
                }
            }

            GUILayout.Space(5);
            if (GUILayout.Button("Compare URDF Files"))
            {
                CompareURDF window = (CompareURDF)EditorWindow.GetWindow(typeof(CompareURDF));
                window.minSize = new Vector2(500, 200);
                window.GetEditorPrefs();
                window.Show();
            }
            GUILayout.EndHorizontal();
        }