// Updates the scale values in the transform component from a given size.
    public static void UpdateScale(IEditorMarkerBehaviour marker, Vector2 size)
    {
        // Update the scale.
        float childScaleFactor = marker.transform.localScale.x / size[0];

        marker.transform.localScale = new Vector3(size[0], size[0], size[0]);

        // Check if 3D content should keep its size or if it should be scaled
        // with the target.
        if (marker.PreserveChildSize)
        {
            foreach (Transform child in marker.transform)
            {
                child.localPosition =
                    new Vector3(child.localPosition.x * childScaleFactor,
                                child.localPosition.y * childScaleFactor,
                                child.localPosition.z * childScaleFactor);

                child.localScale =
                    new Vector3(child.localScale.x * childScaleFactor,
                                child.localScale.y * childScaleFactor,
                                child.localScale.z * childScaleFactor);
            }
        }
    }
    public void OnEnable()
    {
        MarkerAbstractBehaviour target = (MarkerAbstractBehaviour)base.target;

        if (QCARUtilities.GetPrefabType(target) != PrefabType.Prefab)
        {
            if (!SceneManager.Instance.SceneInitialized)
            {
                SceneManager.Instance.InitScene();
            }
            IEditorMarkerBehaviour behaviour2 = target;
            if (!behaviour2.InitializedInEditor && !EditorApplication.isPlaying)
            {
                behaviour2.SetMarkerID(SceneManager.Instance.GetNextFrameMarkerID());
                CreateMesh(target);
                behaviour2.SetNameForTrackable("FrameMarker" + behaviour2.MarkerID);
                target.name = "FrameMarker" + behaviour2.MarkerID;
                behaviour2.SetInitializedInEditor(true);
                EditorUtility.SetDirty(target);
                SceneManager.Instance.SceneUpdated();
            }
            else if (!EditorApplication.isPlaying)
            {
                CheckMesh(target);
            }
            behaviour2.SetPreviousScale(target.transform.localScale);
        }
    }
    // Updates the scale values in the transform component from a given size.
    public static void UpdateScale(IEditorMarkerBehaviour marker, Vector2 size)
    {
        // Update the scale.
        float childScaleFactor = marker.transform.localScale.x / size[0];

        marker.transform.localScale = new Vector3(size[0], size[0], size[0]);

        // Check if 3D content should keep its size or if it should be scaled
        // with the target.
        if (marker.PreserveChildSize)
        {
            foreach (Transform child in marker.transform)
            {
                child.localPosition =
                    new Vector3(child.localPosition.x * childScaleFactor,
                                child.localPosition.y * childScaleFactor,
                                child.localPosition.z * childScaleFactor);

                child.localScale =
                    new Vector3(child.localScale.x * childScaleFactor,
                                child.localScale.y * childScaleFactor,
                                child.localScale.z * childScaleFactor);
            }
        }
    }
Beispiel #4
0
    private void InitializeMarkerBehaviour(MarkerAbstractBehaviour markerBehaviour, Marker marker)
    {
        IEditorMarkerBehaviour behaviour = markerBehaviour;

        behaviour.InitializeMarker(marker);
        if (!this.mTrackableBehaviours.ContainsKey(marker.ID))
        {
            this.mTrackableBehaviours[marker.ID] = markerBehaviour;
            Debug.Log(string.Concat(new object[] { "Found Marker named ", marker.Name, " with id ", marker.ID }));
        }
    }
Beispiel #5
0
    private void InitializeMarkerBehaviour(MarkerBehaviour markerBehaviour, Marker marker)
    {
        IEditorMarkerBehaviour editorMarkerBehaviour = markerBehaviour;

        editorMarkerBehaviour.InitializeMarker(marker);
        if (!mTrackableBehaviours.ContainsKey(marker.ID))
        {
            // Add MarkerBehaviour to dictionary.
            mTrackableBehaviours[marker.ID] = markerBehaviour;

            Debug.Log("Found Marker named " + marker.Name +
                      " with id " + marker.ID);
        }
    }
    // Lets the user choose a Marker by specifying an ID.
    public override void OnInspectorGUI()
    {
        EditorGUIUtility.LookLikeInspector();

        DrawDefaultInspector();

        MarkerBehaviour        mb       = (MarkerBehaviour)target;
        IEditorMarkerBehaviour editorMb = mb;

        if (QCARUtilities.GetPrefabType(mb) == PrefabType.Prefab)
        {
            // Only allow initial values for prefabs.
            editorMb.SetMarkerID(-1);
            EditorGUILayout.IntField("Marker ID", editorMb.MarkerID);
            EditorGUILayout.Toggle("Preserve child size",
                                   editorMb.PreserveChildSize);
        }
        else
        {
            int newMarkerID = EditorGUILayout.IntField("Marker ID",
                                                       editorMb.MarkerID);

            if (newMarkerID < 0)
            {
                newMarkerID = 0;
            }
            else if (newMarkerID >=
                     QCARUtilities.GlobalVars.MAX_NUM_FRAME_MARKERS)
            {
                newMarkerID =
                    QCARUtilities.GlobalVars.MAX_NUM_FRAME_MARKERS - 1;
            }

            if (newMarkerID != editorMb.MarkerID)
            {
                editorMb.SetMarkerID(newMarkerID);
                editorMb.SetNameForTrackable("FrameMarker" + newMarkerID);
            }

            editorMb.SetPreserveChildSize(EditorGUILayout.Toggle("Preserve child size",
                                                                 editorMb.PreserveChildSize));
        }

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

            SceneManager.Instance.SceneUpdated();
        }
    }
    public static void UpdateScale(IEditorMarkerBehaviour marker, Vector2 size)
    {
        float num = marker.transform.localScale.x / size[0];

        marker.transform.localScale = new Vector3(size[0], size[0], size[0]);
        if (marker.PreserveChildSize)
        {
            foreach (Transform transform in marker.transform)
            {
                transform.localPosition = new Vector3(transform.localPosition.x * num, transform.localPosition.y * num, transform.localPosition.z * num);
                transform.localScale    = new Vector3(transform.localScale.x * num, transform.localScale.y * num, transform.localScale.z * num);
            }
        }
    }
Beispiel #8
0
    internal MarkerAbstractBehaviour CreateNewMarkerBehaviourForMarker(Marker trackable, GameObject gameObject)
    {
        MarkerAbstractBehaviour behaviour = BehaviourComponentFactory.Instance.AddMarkerBehaviour(gameObject);
        float size = trackable.GetSize();

        Debug.Log(string.Concat(new object[] { "Creating Marker with values: \n MarkerID:     ", trackable.MarkerID, "\n TrackableID:  ", trackable.ID, "\n Name:         ", trackable.Name, "\n Size:         ", size, "x", size }));
        IEditorMarkerBehaviour behaviour2 = behaviour;

        behaviour2.SetMarkerID(trackable.MarkerID);
        behaviour2.SetNameForTrackable(trackable.Name);
        behaviour2.transform.localScale = new Vector3(size, size, size);
        behaviour2.InitializeMarker(trackable);
        this.mTrackableBehaviours[trackable.ID] = behaviour;
        return(behaviour);
    }
    /// <summary>
    /// Finds all MarkerBehaviours in the scene and associates them with existing Markers
    /// If a Marker does not exist yet, it is created in native.
    /// </summary>
    public void AssociateMarkerBehaviours()
    {
        MarkerTrackerImpl markerTracker = (MarkerTrackerImpl)TrackerManager.Instance.GetTracker(Tracker.Type.MARKER_TRACKER);

        if (markerTracker != null)
        {
            // go over all MarkerBehaviours in scene:
            MarkerBehaviour[] markerBehaviours = (MarkerBehaviour[])Object.FindObjectsOfType(typeof(MarkerBehaviour));

            foreach (MarkerBehaviour markerBehaviour in markerBehaviours)
            {
                // this trackable has been removed
                if (mBehavioursMarkedForDeletion.Contains(markerBehaviour))
                {
                    mTrackableBehaviours.Remove(markerBehaviour.Trackable.ID);
                    mBehavioursMarkedForDeletion.Remove(markerBehaviour);
                    continue;
                }

                // check if the marker has been created in native yet:
                IEditorMarkerBehaviour editorMarkerBehaviour = markerBehaviour;
                Marker marker = markerTracker.GetMarkerByMarkerID(editorMarkerBehaviour.MarkerID);
                if (marker != null)
                {
                    // if the Marker has already been created, initialize the Behaviour:
                    InitializeMarkerBehaviour(markerBehaviour, marker);
                }
                else
                {
                    // otherwise, create it first:
                    marker = markerTracker.InternalCreateMarker(editorMarkerBehaviour.MarkerID,
                                                                editorMarkerBehaviour.TrackableName,
                                                                editorMarkerBehaviour.transform.localScale.x);

                    if (marker == null)
                    {
                        Debug.LogWarning("Disabling MarkerBehaviour named " + editorMarkerBehaviour.TrackableName);
                        markerBehaviour.enabled = false;
                    }
                    else
                    {
                        InitializeMarkerBehaviour(markerBehaviour, marker);
                        markerBehaviour.enabled = true;
                    }
                }
            }
        }
    }
    // Initializes the Marker when it is drag-dropped into the scene.
    public void OnEnable()
    {
        MarkerBehaviour markerBehaviour = (MarkerBehaviour)target;

        // We don't want to initialize if this is a prefab.
        if (QCARUtilities.GetPrefabType(markerBehaviour) == PrefabType.Prefab)
        {
            return;
        }

        // Initialize scene manager
        if (!SceneManager.Instance.SceneInitialized)
        {
            SceneManager.Instance.InitScene();
        }

        IEditorMarkerBehaviour editorMarkerBehaviour = markerBehaviour;

        // Only setup marker if it has not been set up previously.
        if (!editorMarkerBehaviour.InitializedInEditor && !EditorApplication.isPlaying)
        {
            editorMarkerBehaviour.SetMarkerID(SceneManager.Instance.GetNextFrameMarkerID());

            CreateMesh(markerBehaviour);
            editorMarkerBehaviour.SetNameForTrackable("FrameMarker" + editorMarkerBehaviour.MarkerID);
            markerBehaviour.name = "FrameMarker" + editorMarkerBehaviour.MarkerID;
            editorMarkerBehaviour.SetInitializedInEditor(true);

            // Inform Unity that the behaviour properties have changed.
            EditorUtility.SetDirty(markerBehaviour);

            // Inform the scene manager about the newly added marker (to get validation).
            SceneManager.Instance.SceneUpdated();
        }
        else if (!EditorApplication.isPlaying)
        {
            CheckMesh(markerBehaviour);
        }

        // Cache the current scale of the marker:
        editorMarkerBehaviour.SetPreviousScale(markerBehaviour.transform.localScale);
    }
Beispiel #11
0
    internal void AssociateMarkerBehaviours()
    {
        MarkerTrackerImpl tracker = (MarkerTrackerImpl)TrackerManager.Instance.GetTracker <MarkerTracker>();

        if (tracker != null)
        {
            MarkerAbstractBehaviour[] behaviourArray = (MarkerAbstractBehaviour[])UnityEngine.Object.FindObjectsOfType(typeof(MarkerAbstractBehaviour));
            foreach (MarkerAbstractBehaviour behaviour in behaviourArray)
            {
                if (this.mBehavioursMarkedForDeletion.Contains(behaviour))
                {
                    this.mTrackableBehaviours.Remove(behaviour.Trackable.ID);
                    this.mBehavioursMarkedForDeletion.Remove(behaviour);
                }
                else
                {
                    IEditorMarkerBehaviour behaviour2 = behaviour;
                    Marker markerByMarkerID           = tracker.GetMarkerByMarkerID(behaviour2.MarkerID);
                    if (markerByMarkerID != null)
                    {
                        this.InitializeMarkerBehaviour(behaviour, markerByMarkerID);
                    }
                    else
                    {
                        markerByMarkerID = tracker.InternalCreateMarker(behaviour2.MarkerID, behaviour2.TrackableName, behaviour2.transform.localScale.x);
                        if (markerByMarkerID == null)
                        {
                            Debug.LogWarning("Disabling MarkerBehaviour named " + behaviour2.TrackableName);
                            behaviour.enabled = false;
                        }
                        else
                        {
                            this.InitializeMarkerBehaviour(behaviour, markerByMarkerID);
                            behaviour.enabled = true;
                        }
                    }
                }
            }
        }
    }
    /// <summary>
    /// Takes a given GameObject to add a new MarkerBehaviour to. This new Behaviour is associated with the given Marker
    /// </summary>
    public MarkerBehaviour CreateNewMarkerBehaviourForMarker(Marker trackable, GameObject gameObject)
    {
        MarkerBehaviour newMB =
            gameObject.AddComponent <MarkerBehaviour>();

        float markerSize = trackable.GetSize();

        Debug.Log("Creating Marker with values: " +
                  "\n MarkerID:     " + trackable.MarkerID +
                  "\n TrackableID:  " + trackable.ID +
                  "\n Name:         " + trackable.Name +
                  "\n Size:         " + markerSize + "x" + markerSize);

        IEditorMarkerBehaviour newEditorMB = newMB;

        newEditorMB.SetMarkerID(trackable.MarkerID);
        newEditorMB.SetNameForTrackable(trackable.Name);
        newEditorMB.transform.localScale = new Vector3(markerSize, markerSize, markerSize);
        newEditorMB.InitializeMarker(trackable);

        return(newMB);
    }
    public override void OnInspectorGUI()
    {
        EditorGUIUtility.LookLikeInspector();
        base.DrawDefaultInspector();
        MarkerAbstractBehaviour target     = (MarkerAbstractBehaviour)base.target;
        IEditorMarkerBehaviour  behaviour2 = target;

        if (QCARUtilities.GetPrefabType(target) == PrefabType.Prefab)
        {
            behaviour2.SetMarkerID(-1);
            EditorGUILayout.IntField("Marker ID", behaviour2.MarkerID, new GUILayoutOption[0]);
            EditorGUILayout.Toggle("Preserve child size", behaviour2.PreserveChildSize, new GUILayoutOption[0]);
        }
        else
        {
            int markerID = EditorGUILayout.IntField("Marker ID", behaviour2.MarkerID, new GUILayoutOption[0]);
            if (markerID < 0)
            {
                markerID = 0;
            }
            else if (markerID >= 0x200)
            {
                markerID = 0x1ff;
            }
            if (markerID != behaviour2.MarkerID)
            {
                behaviour2.SetMarkerID(markerID);
                behaviour2.SetNameForTrackable("FrameMarker" + markerID);
            }
            behaviour2.SetPreserveChildSize(EditorGUILayout.Toggle("Preserve child size", behaviour2.PreserveChildSize, new GUILayoutOption[0]));
        }
        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
            SceneManager.Instance.SceneUpdated();
        }
    }