private static void CheckMesh(MultiTargetAbstractBehaviour mtb)
    {
        bool      flag      = false;
        Transform transform = mtb.transform.Find("ChildTargets");

        if (transform == null)
        {
            flag = true;
        }
        else
        {
            for (int i = 0; i < transform.childCount; i++)
            {
                Transform    child     = transform.GetChild(i);
                MeshFilter   component = child.GetComponent <MeshFilter>();
                MeshRenderer renderer  = child.GetComponent <MeshRenderer>();
                if (((component == null) || (component.sharedMesh == null)) || (((renderer == null) || (renderer.sharedMaterials.Length == 0)) || (renderer.sharedMaterials[0] == null)))
                {
                    flag = true;
                }
            }
        }
        if (flag)
        {
            TrackableAccessor accessor = AccessorFactory.Create(mtb);
            if (accessor != null)
            {
                accessor.ApplyDataSetProperties();
            }
        }
    }
    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();
        }
    }
Example #3
0
 private void UpdateTrackableProperties(TrackableBehaviour[] trackables)
 {
     foreach (TrackableBehaviour behaviour in trackables)
     {
         if (behaviour is DataSetTrackableBehaviour)
         {
             DataSetTrackableBehaviour target   = (DataSetTrackableBehaviour)behaviour;
             TrackableAccessor         accessor = AccessorFactory.Create(target);
             if (accessor != null)
             {
                 accessor.ApplyDataSetProperties();
             }
         }
     }
 }
Example #4
0
    // Updates trackables in scene from config data.
    private void UpdateTrackableProperties(TrackableBehaviour[] trackables)
    {
        foreach (TrackableBehaviour tb in trackables)
        {
            // Ignore non-data set trackables.
            if (!(tb is DataSetTrackableBehaviour))
            {
                continue;
            }

            DataSetTrackableBehaviour trackable     = (DataSetTrackableBehaviour)tb;
            TrackableAccessor         configApplier = AccessorFactory.Create(trackable);
            configApplier.ApplyDataSetProperties();
        }
    }
Example #5
0
 private void UpdateTrackableAppearance(TrackableBehaviour[] trackables)
 {
     if (!Application.isPlaying)
     {
         foreach (TrackableBehaviour behaviour in trackables)
         {
             if (behaviour is DataSetTrackableBehaviour)
             {
                 DataSetTrackableBehaviour target   = (DataSetTrackableBehaviour)behaviour;
                 TrackableAccessor         accessor = AccessorFactory.Create(target);
                 if (accessor != null)
                 {
                     accessor.ApplyDataSetAppearance();
                 }
             }
         }
     }
 }
    // Updates trackables in scene from config data.
    private void UpdateTrackableAppearance(TrackableBehaviour[] trackables)
    {
        // do not set appearance in play mode
        if (!Application.isPlaying)
        {
            foreach (TrackableBehaviour tb in trackables)
            {
                // Ignore non-data set trackables.
                if (!(tb is DataSetTrackableBehaviour))
                {
                    continue;
                }

                DataSetTrackableBehaviour trackable     = (DataSetTrackableBehaviour)tb;
                TrackableAccessor         configApplier = AccessorFactory.Create(trackable);
                if (configApplier != null)
                {
                    configApplier.ApplyDataSetAppearance();
                }
            }
        }
    }
    private static void CheckMesh(MultiTargetBehaviour mtb)
    {
        // when copy-pasting targets between scenes, the mesh and materials of
        // the game objects get lost. This checks for them and re-creates them if they are found missing.
        bool updateGeometry = false;

        Transform childTargets = mtb.transform.Find("ChildTargets");

        if (childTargets == null)
        {
            updateGeometry = true;
        }
        else
        {
            for (int i = 0; i < childTargets.childCount; i++)
            {
                Transform    childTarget  = childTargets.GetChild(i);
                MeshFilter   meshFilter   = childTarget.GetComponent <MeshFilter>();
                MeshRenderer meshRenderer = childTarget.GetComponent <MeshRenderer>();
                if (meshFilter == null || meshFilter.sharedMesh == null ||
                    meshRenderer == null || meshRenderer.sharedMaterials.Length == 0 ||
                    meshRenderer.sharedMaterials[0] == null)
                {
                    updateGeometry = true;
                }
            }
        }

        if (updateGeometry)
        {
            TrackableAccessor accessor = AccessorFactory.Create(mtb);
            if (accessor != null)
            {
                accessor.ApplyDataSetProperties();
            }
        }
    }
Example #8
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();
        }
    }