// 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); } }
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 })); } }
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); } } }
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); }
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(); } }