Beispiel #1
0
    public string[] GetMultiTargetNames(string dataSetName)
    {
        ConfigData dataSetData = ConfigDataManager.Instance.GetConfigData(dataSetName);

        string[] itNames = new string[dataSetData.NumMultiTargets + 1];
        itNames[0] = QCARUtilities.GlobalVars.DEFAULT_TRACKABLE_NAME;
        dataSetData.CopyMultiTargetNames(itNames, 1);
        return(itNames);
    }
Beispiel #2
0
    public string[] GetMultiTargetNames(string dataSetName)
    {
        ConfigData configData = ConfigDataManager.Instance.GetConfigData(dataSetName);

        string[] arrayToFill = new string[configData.NumMultiTargets + 1];
        arrayToFill[0] = "--- EMPTY ---";
        configData.CopyMultiTargetNames(arrayToFill, 1);
        return(arrayToFill);
    }
    public override void OnInspectorGUI()
    {
        EditorGUIUtility.LookLikeInspector();
        base.DrawDefaultInspector();
        MultiTargetAbstractBehaviour target     = (MultiTargetAbstractBehaviour)base.target;
        IEditorMultiTargetBehaviour  behaviour2 = target;

        if (QCARUtilities.GetPrefabType(target) == PrefabType.Prefab)
        {
            GUILayout.Label("You can't choose a target for a prefab.", new GUILayoutOption[0]);
        }
        else if (ConfigDataManager.Instance.NumConfigDataObjects > 1)
        {
            string[] configDataNames = new string[ConfigDataManager.Instance.NumConfigDataObjects];
            ConfigDataManager.Instance.GetConfigDataNames(configDataNames);
            int indexFromString = QCARUtilities.GetIndexFromString(behaviour2.DataSetName, configDataNames);
            if (indexFromString < 0)
            {
                indexFromString = 0;
            }
            int        index       = EditorGUILayout.Popup("Data Set", indexFromString, configDataNames, new GUILayoutOption[0]);
            string     dataSetName = configDataNames[index];
            ConfigData configData  = ConfigDataManager.Instance.GetConfigData(dataSetName);
            string[]   arrayToFill = new string[configData.NumMultiTargets];
            configData.CopyMultiTargetNames(arrayToFill, 0);
            int selectedIndex = QCARUtilities.GetIndexFromString(behaviour2.TrackableName, arrayToFill);
            if (selectedIndex < 0)
            {
                selectedIndex = 0;
            }
            int num4 = EditorGUILayout.Popup("Multi Target", selectedIndex, arrayToFill, new GUILayoutOption[0]);
            if ((arrayToFill.Length > 0) && ((index != indexFromString) || (num4 != selectedIndex)))
            {
                behaviour2.SetDataSetPath("QCAR/" + configDataNames[index] + ".xml");
                behaviour2.SetNameForTrackable(arrayToFill[num4]);
            }
            behaviour2.SetExtendedTracking(EditorGUILayout.Toggle("Extended tracking", behaviour2.ExtendedTracking, new GUILayoutOption[0]));
        }
        else if (GUILayout.Button("No targets defined. Press here for target creation!", new GUILayoutOption[0]))
        {
            SceneManager.Instance.GoToTargetManagerPage();
        }
        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
            TrackableAccessor accessor = AccessorFactory.Create(target);
            if (accessor != null)
            {
                accessor.ApplyDataSetProperties();
            }
            SceneManager.Instance.SceneUpdated();
        }
    }
Beispiel #4
0
 private static string GetLatestMTName(ConfigData backlog)
 {
     if (backlog == null)
     {
         return(null);
     }
     string[] arrayToFill = new string[backlog.NumMultiTargets];
     try
     {
         backlog.CopyMultiTargetNames(arrayToFill, 0);
     }
     catch
     {
         return(null);
     }
     return(arrayToFill[backlog.NumMultiTargets - 1]);
 }
Beispiel #5
0
    // Lets the user choose a Multi Target from a drop down list. Multi Target
    // must be defined in the "config.xml" file.
    public override void OnInspectorGUI()
    {
        EditorGUIUtility.LookLikeInspector();

        DrawDefaultInspector();

        MultiTargetBehaviour        mtb       = (MultiTargetBehaviour)target;
        IEditorMultiTargetBehaviour editorMtb = mtb;

        if (QCARUtilities.GetPrefabType(mtb) ==
            PrefabType.Prefab)
        {
            GUILayout.Label("You can't choose a target for a prefab.");
        }
        else if (ConfigDataManager.Instance.NumConfigDataObjects > 1)
        {
            // Draw list for choosing a data set.
            string[] dataSetList = new string[ConfigDataManager.Instance.NumConfigDataObjects];
            ConfigDataManager.Instance.GetConfigDataNames(dataSetList);
            int currentDataSetIndex =
                QCARUtilities.GetIndexFromString(editorMtb.DataSetName, dataSetList);

            // If name is not in array we automatically choose default name;
            if (currentDataSetIndex < 0)
            {
                currentDataSetIndex = 0;
            }

            int newDataSetIndex = EditorGUILayout.Popup("Data Set",
                                                        currentDataSetIndex,
                                                        dataSetList);

            string chosenDataSet = dataSetList[newDataSetIndex];

            ConfigData dataSetData = ConfigDataManager.Instance.GetConfigData(chosenDataSet);

            // Draw list for choosing a Trackable.
            string[] namesList = new string[dataSetData.NumMultiTargets];
            dataSetData.CopyMultiTargetNames(namesList, 0);
            int currentTrackableIndex =
                QCARUtilities.GetIndexFromString(editorMtb.TrackableName, namesList);

            // If name is not in array we automatically choose default name;
            if (currentTrackableIndex < 0)
            {
                currentTrackableIndex = 0;
            }

            int newTrackableIndex = EditorGUILayout.Popup("Multi Target",
                                                          currentTrackableIndex,
                                                          namesList);

            if (namesList.Length > 0)
            {
                if (newDataSetIndex != currentDataSetIndex || newTrackableIndex != currentTrackableIndex)
                {
                    editorMtb.SetDataSetPath("QCAR/" + dataSetList[newDataSetIndex] + ".xml");

                    editorMtb.SetNameForTrackable(namesList[newTrackableIndex]);
                }
            }
        }
        else
        {
            if (GUILayout.Button("No targets defined. Press here for target " +
                                 "creation!"))
            {
                SceneManager.Instance.GoToARPage();
            }
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(mtb);

            // If name has changed we apply the correct values from the config
            // file.
            TrackableAccessor accessor = AccessorFactory.Create(mtb);
            if (accessor != null)
            {
                accessor.ApplyDataSetProperties();
            }

            SceneManager.Instance.SceneUpdated();
        }
    }
Beispiel #6
0
    // Returns the name of the Multi Target that has been parsed the latest.
    // Returns null if no Image Target has been parsed yet.
    private static string GetLatestMTName(ConfigData backlog)
    {
        if (backlog == null)
            return null;

        string[] mtNames = new string[backlog.NumMultiTargets];
        try
        {
            backlog.CopyMultiTargetNames(mtNames, 0);
        }
        catch
        {
            return null;
        }

        return mtNames[backlog.NumMultiTargets - 1];
    }
Beispiel #7
0
    // This method reads a config.xml file at the given path and fills the
    // ConfigData object with the data.
    public bool structToFile(string configXMLPath, ConfigData configData)
    {
        // If there are no trackables in the data set we don't write a config file.
        if (configData.NumTrackables <= 0)
            return false;

        XmlWriterSettings configWriterSettings = new XmlWriterSettings();
        configWriterSettings.Indent = true;
        using (XmlWriter configWriter =
            XmlWriter.Create(configXMLPath, configWriterSettings))
        {
            configWriter.WriteStartDocument();

            configWriter.WriteStartElement("QCARConfig");
            configWriter.WriteAttributeString("xmlns", "xsi", null,
                "http://www.w3.org/2001/XMLSchema-instance");
            configWriter.WriteAttributeString("xsi",
                "noNamespaceSchemaLocation", null, "qcar_config.xsd");

            configWriter.WriteStartElement("Tracking");

            // Writing Image Target elements into config.xml file.
            string[] imageTargetNames = new string[configData.NumImageTargets];
            configData.CopyImageTargetNames(imageTargetNames, 0);
            for (int i = 0; i < imageTargetNames.Length; ++i)
            {
                ConfigData.ImageTarget it;

                configData.GetImageTarget(imageTargetNames[i], out it);

                configWriter.WriteStartElement("ImageTarget");
                string imageTargetSize = it.size.x.ToString() + " " +
                                         it.size.y.ToString();
                configWriter.WriteAttributeString("size", imageTargetSize);
                configWriter.WriteAttributeString("name", imageTargetNames[i]);

                // Writing Virtual Button elements into config.xml file per
                // Image Target.
                List<ConfigData.VirtualButton> vbs = it.virtualButtons;
                for (int j = 0; j < vbs.Count; j++)
                {
                    configWriter.WriteStartElement("VirtualButton");
                    configWriter.WriteAttributeString("name", vbs[j].name);
                    string virtualButtonRectangle =
                        vbs[j].rectangle.x.ToString() + " " +
                        vbs[j].rectangle.y.ToString() + " " +
                        vbs[j].rectangle.z.ToString() + " " +
                        vbs[j].rectangle.w.ToString();
                    configWriter.WriteAttributeString("rectangle",
                        virtualButtonRectangle);
                    if (vbs[j].enabled)
                        configWriter.WriteAttributeString("enabled",
                                                          "true");
                    else
                        configWriter.WriteAttributeString("enabled",
                                                          "false");
                    if (vbs[j].sensitivity ==
                        VirtualButtonBehaviour.Sensitivity.LOW)
                        configWriter.WriteAttributeString("sensitivity",
                                                          "low");
                    else if (vbs[j].sensitivity ==
                        VirtualButtonBehaviour.Sensitivity.MEDIUM)
                        configWriter.WriteAttributeString("sensitivity",
                                                          "medium");
                    else if (vbs[j].sensitivity ==
                        VirtualButtonBehaviour.Sensitivity.HIGH)
                        configWriter.WriteAttributeString("sensitivity",
                                                          "high");
                    configWriter.WriteEndElement(); // VirtualButton
                }
                configWriter.WriteEndElement(); // ImageTarget
            }

            // Writing Multi Target elements into config.xml file
            string[] multiTargetNames = new string[configData.NumMultiTargets];
            configData.CopyMultiTargetNames(multiTargetNames, 0);
            for (int i = 0; i < multiTargetNames.Length; i++)
            {
                ConfigData.MultiTarget mt;

                configData.GetMultiTarget(multiTargetNames[i], out mt);

                configWriter.WriteStartElement("MultiTarget");
                configWriter.WriteAttributeString("name", multiTargetNames[i]);

                // Writing Multi Target Part elements into config.xml file
                List<ConfigData.MultiTargetPart> prts = mt.parts;
                for (int j = 0; j < prts.Count; j++)
                {
                    configWriter.WriteStartElement("Part");
                    configWriter.WriteAttributeString("name", prts[j].name);
                    string multiTargetTranslation =
                        prts[j].translation.x.ToString() + " " +
                        prts[j].translation.z.ToString() + " " +
                        prts[j].translation.y.ToString();
                    configWriter.WriteAttributeString("translation",
                                                      multiTargetTranslation);
                    float rotationAngle;
                    Vector3 rotationAxis;
                    prts[j].rotation.ToAngleAxis(out rotationAngle,
                                                 out rotationAxis);
                    string multiTargetRotation =
                        "AD: " +
                        (-rotationAxis.x).ToString() + " " +
                        (-rotationAxis.z).ToString() + " " +
                        rotationAxis.y.ToString() + " " +
                        rotationAngle.ToString();
                    configWriter.WriteAttributeString("rotation",
                        multiTargetRotation);
                    configWriter.WriteEndElement(); // Part
                }

                configWriter.WriteEndElement(); // MultiTarget
            }

            configWriter.WriteEndElement(); // Tracking

            configWriter.WriteEndElement(); // QCARConfig

            configWriter.WriteEndDocument();
        }

        return true;
    }
Beispiel #8
0
    // This method takes a configData object and creates a config.xml file at
    // the given path out of it.
    public bool structToFile(string configXMLPath, ConfigData configData)
    {
        // If there are no trackables in the data set we don't write a config file.
        if ((configData == null) || (configData.NumTrackables <= 0))
        {
            return(false);
        }

        XmlWriterSettings configWriterSettings = new XmlWriterSettings();

        configWriterSettings.Indent = true;
        using (XmlWriter configWriter =
                   XmlWriter.Create(configXMLPath, configWriterSettings))
        {
            configWriter.WriteStartDocument();

            configWriter.WriteStartElement("QCARConfig");
            configWriter.WriteAttributeString("xmlns", "xsi", null,
                                              "http://www.w3.org/2001/XMLSchema-instance");
            configWriter.WriteAttributeString("xsi",
                                              "noNamespaceSchemaLocation", null, "qcar_config.xsd");

            configWriter.WriteStartElement("Tracking");

            // Writing Image Target elements into config.xml file.
            string[] imageTargetNames = new string[configData.NumImageTargets];
            configData.CopyImageTargetNames(imageTargetNames, 0);
            for (int i = 0; i < imageTargetNames.Length; ++i)
            {
                ConfigData.ImageTargetData it;

                configData.GetImageTarget(imageTargetNames[i], out it);

                configWriter.WriteStartElement("ImageTarget");
                string imageTargetSize = it.size.x.ToString() + " " +
                                         it.size.y.ToString();
                configWriter.WriteAttributeString("size", imageTargetSize);
                configWriter.WriteAttributeString("name", imageTargetNames[i]);

                // Writing Virtual Button elements into config.xml file per
                // Image Target.
                List <ConfigData.VirtualButtonData> vbs = it.virtualButtons;
                for (int j = 0; j < vbs.Count; j++)
                {
                    configWriter.WriteStartElement("VirtualButton");
                    configWriter.WriteAttributeString("name", vbs[j].name);
                    string virtualButtonRectangle =
                        vbs[j].rectangle.x.ToString() + " " +
                        vbs[j].rectangle.y.ToString() + " " +
                        vbs[j].rectangle.z.ToString() + " " +
                        vbs[j].rectangle.w.ToString();
                    configWriter.WriteAttributeString("rectangle",
                                                      virtualButtonRectangle);
                    if (vbs[j].enabled)
                    {
                        configWriter.WriteAttributeString("enabled",
                                                          "true");
                    }
                    else
                    {
                        configWriter.WriteAttributeString("enabled",
                                                          "false");
                    }
                    if (vbs[j].sensitivity ==
                        VirtualButton.Sensitivity.LOW)
                    {
                        configWriter.WriteAttributeString("sensitivity",
                                                          "low");
                    }
                    else if (vbs[j].sensitivity ==
                             VirtualButton.Sensitivity.MEDIUM)
                    {
                        configWriter.WriteAttributeString("sensitivity",
                                                          "medium");
                    }
                    else if (vbs[j].sensitivity ==
                             VirtualButton.Sensitivity.HIGH)
                    {
                        configWriter.WriteAttributeString("sensitivity",
                                                          "high");
                    }
                    configWriter.WriteEndElement(); // VirtualButton
                }
                configWriter.WriteEndElement();     // ImageTarget
            }

            // Writing Multi Target elements into config.xml file
            string[] multiTargetNames = new string[configData.NumMultiTargets];
            configData.CopyMultiTargetNames(multiTargetNames, 0);
            for (int i = 0; i < multiTargetNames.Length; i++)
            {
                ConfigData.MultiTargetData mt;

                configData.GetMultiTarget(multiTargetNames[i], out mt);

                configWriter.WriteStartElement("MultiTarget");
                configWriter.WriteAttributeString("name", multiTargetNames[i]);

                // Writing Multi Target Part elements into config.xml file
                List <ConfigData.MultiTargetPartData> prts = mt.parts;
                for (int j = 0; j < prts.Count; j++)
                {
                    configWriter.WriteStartElement("Part");
                    configWriter.WriteAttributeString("name", prts[j].name);
                    string multiTargetTranslation =
                        prts[j].translation.x.ToString() + " " +
                        prts[j].translation.z.ToString() + " " +
                        prts[j].translation.y.ToString();
                    configWriter.WriteAttributeString("translation",
                                                      multiTargetTranslation);
                    float   rotationAngle;
                    Vector3 rotationAxis;
                    prts[j].rotation.ToAngleAxis(out rotationAngle,
                                                 out rotationAxis);
                    string multiTargetRotation =
                        "AD: " +
                        (-rotationAxis.x).ToString() + " " +
                        (-rotationAxis.z).ToString() + " " +
                        rotationAxis.y.ToString() + " " +
                        rotationAngle.ToString();
                    configWriter.WriteAttributeString("rotation",
                                                      multiTargetRotation);
                    configWriter.WriteEndElement(); // Part
                }

                configWriter.WriteEndElement(); // MultiTarget
            }

            configWriter.WriteEndElement(); // Tracking

            configWriter.WriteEndElement(); // QCARConfig

            configWriter.WriteEndDocument();
        }

        return(true);
    }
Beispiel #9
0
    public bool structToFile(string configXMLPath, ConfigData configData)
    {
        if ((configData == null) || (configData.NumTrackables <= 0))
        {
            return(false);
        }
        XmlWriterSettings settings = new XmlWriterSettings {
            Indent = true
        };

        using (XmlWriter writer = XmlWriter.Create(configXMLPath, settings))
        {
            writer.WriteStartDocument();
            writer.WriteStartElement("QCARConfig");
            writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
            writer.WriteAttributeString("xsi", "noNamespaceSchemaLocation", null, "qcar_config.xsd");
            writer.WriteStartElement("Tracking");
            string[] arrayToFill = new string[configData.NumImageTargets];
            configData.CopyImageTargetNames(arrayToFill, 0);
            for (int i = 0; i < arrayToFill.Length; i++)
            {
                ConfigData.ImageTargetData data;
                configData.GetImageTarget(arrayToFill[i], out data);
                writer.WriteStartElement("ImageTarget");
                string str = data.size.x.ToString() + " " + data.size.y.ToString();
                writer.WriteAttributeString("size", str);
                writer.WriteAttributeString("name", arrayToFill[i]);
                List <ConfigData.VirtualButtonData> virtualButtons = data.virtualButtons;
                for (int k = 0; k < virtualButtons.Count; k++)
                {
                    writer.WriteStartElement("VirtualButton");
                    writer.WriteAttributeString("name", virtualButtons[k].name);
                    string str2 = virtualButtons[k].rectangle.x.ToString() + " " + virtualButtons[k].rectangle.y.ToString() + " " + virtualButtons[k].rectangle.z.ToString() + " " + virtualButtons[k].rectangle.w.ToString();
                    writer.WriteAttributeString("rectangle", str2);
                    if (virtualButtons[k].enabled)
                    {
                        writer.WriteAttributeString("enabled", "true");
                    }
                    else
                    {
                        writer.WriteAttributeString("enabled", "false");
                    }
                    if (virtualButtons[k].sensitivity == VirtualButton.Sensitivity.LOW)
                    {
                        writer.WriteAttributeString("sensitivity", "low");
                    }
                    else if (virtualButtons[k].sensitivity == VirtualButton.Sensitivity.MEDIUM)
                    {
                        writer.WriteAttributeString("sensitivity", "medium");
                    }
                    else if (virtualButtons[k].sensitivity == VirtualButton.Sensitivity.HIGH)
                    {
                        writer.WriteAttributeString("sensitivity", "high");
                    }
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
            }
            string[] strArray2 = new string[configData.NumMultiTargets];
            configData.CopyMultiTargetNames(strArray2, 0);
            for (int j = 0; j < strArray2.Length; j++)
            {
                ConfigData.MultiTargetData data2;
                configData.GetMultiTarget(strArray2[j], out data2);
                writer.WriteStartElement("MultiTarget");
                writer.WriteAttributeString("name", strArray2[j]);
                List <ConfigData.MultiTargetPartData> parts = data2.parts;
                for (int m = 0; m < parts.Count; m++)
                {
                    float   num5;
                    Vector3 vector;
                    writer.WriteStartElement("Part");
                    writer.WriteAttributeString("name", parts[m].name);
                    string str3 = parts[m].translation.x.ToString() + " " + parts[m].translation.z.ToString() + " " + parts[m].translation.y.ToString();
                    writer.WriteAttributeString("translation", str3);
                    parts[m].rotation.ToAngleAxis(out num5, out vector);
                    string[] strArray5 = new string[] { "AD: ", (-vector.x).ToString(), " ", (-vector.z).ToString(), " ", vector.y.ToString(), " ", num5.ToString() };
                    string   str4      = string.Concat(strArray5);
                    writer.WriteAttributeString("rotation", str4);
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
            }
            writer.WriteEndElement();
            writer.WriteEndElement();
            writer.WriteEndDocument();
        }
        return(true);
    }