private CylinderTargetBehaviour CreateCylinderTargetBehaviour(CylinderTarget cylinderTarget) { GameObject cylinderTargetObject = new GameObject(); CylinderTargetBehaviour newCTB = cylinderTargetObject.AddComponent <CylinderTargetBehaviour>(); IEditorCylinderTargetBehaviour newEditorCTB = newCTB; Debug.Log("Creating Cylinder Target with values: " + "\n ID: " + cylinderTarget.ID + "\n Name: " + cylinderTarget.Name + "\n Path: " + newEditorCTB.DataSetPath + "\n Side Length: " + cylinderTarget.GetSideLength() + "\n Top Diameter: " + cylinderTarget.GetTopDiameter() + "\n Bottom Diam.: " + cylinderTarget.GetBottomDiameter()); // Set Cylinder Target attributes. newEditorCTB.SetNameForTrackable(cylinderTarget.Name); newEditorCTB.SetDataSetPath(newEditorCTB.DataSetPath); var sidelength = cylinderTarget.GetSideLength(); newEditorCTB.transform.localScale = new Vector3(sidelength, sidelength, sidelength); newEditorCTB.CorrectScale(); newEditorCTB.SetAspectRatio(cylinderTarget.GetTopDiameter() / sidelength, cylinderTarget.GetBottomDiameter() / sidelength); newEditorCTB.InitializeCylinderTarget(cylinderTarget); return(newCTB); }
public Cup(CylinderTargetBehaviour cupTargetBehaviour, int screenHeight) { this.cupTargetBehaviour = cupTargetBehaviour; this.screenHeight = screenHeight; // Cup Diameter is 1.0f float r = 0.5f; float cos45 = r * 1.4142f / 2.0f; float sin45 = cos45; pointsOnCupLocal = new Vector3[] { new Vector3(r, 1.0f, 0.0f), new Vector3(cos45, 1.0f, sin45), new Vector3(0.0f, 1.0f, r), new Vector3(-cos45, 1.0f, sin45), new Vector3(-r, 1.0f, 0.0f), new Vector3(-cos45, 1.0f, -sin45), new Vector3(0.0f, 1.0f, -r), new Vector3(cos45, 1.0f, -sin45) }; }
private void CreateMissingDataSetTrackableBehaviours(DataSet dataSet) { foreach (Trackable trackable in dataSet.GetTrackables()) { if (!mTrackableBehaviours.ContainsKey(trackable.ID)) { if (trackable is ImageTarget) { ImageTargetBehaviour itb = CreateImageTargetBehaviour((ImageTarget)trackable); // Create Virtual Buttons for this Image Target. ((IEditorImageTargetBehaviour)itb).CreateMissingVirtualButtonBehaviours(); // Add newly created Image Target to dictionary. mTrackableBehaviours[trackable.ID] = itb; mAutomaticallyCreatedBehaviours.Add(trackable.ID); } else if (trackable is MultiTarget) { MultiTargetBehaviour mtb = CreateMultiTargetBehaviour((MultiTarget)trackable); // Add newly created Multi Target to dictionary. mTrackableBehaviours[trackable.ID] = mtb; mAutomaticallyCreatedBehaviours.Add(trackable.ID); } else if (trackable is CylinderTarget) { CylinderTargetBehaviour ctb = CreateCylinderTargetBehaviour((CylinderTarget)trackable); // Add newly created Cylinder Target to dictionary. mTrackableBehaviours[trackable.ID] = ctb; mAutomaticallyCreatedBehaviours.Add(trackable.ID); } } } }
// The one CylinderTargetBehaviour instance this accessor belongs to is set in // the constructor. public CylinderTargetAccessor(CylinderTargetBehaviour target) { mTarget = target; }
// Lets the user choose a Cylinder Target from a drop down list. Cylinder Target // must be defined in the "config.xml" file. public override void OnInspectorGUI() { EditorGUIUtility.LookLikeInspector(); DrawDefaultInspector(); CylinderTargetBehaviour ctb = (CylinderTargetBehaviour)target; IEditorCylinderTargetBehaviour editorCtb = ctb; if (QCARUtilities.GetPrefabType(ctb) == 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(editorCtb.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.NumCylinderTargets]; dataSetData.CopyCylinderTargetNames(namesList, 0); int currentTrackableIndex = QCARUtilities.GetIndexFromString(editorCtb.TrackableName, namesList); // If name is not in array we automatically choose default name; if (currentTrackableIndex < 0) { currentTrackableIndex = 0; } int newTrackableIndex = EditorGUILayout.Popup("Cylinder Target", currentTrackableIndex, namesList); if (namesList.Length > 0) { if (newDataSetIndex != currentDataSetIndex || newTrackableIndex != currentTrackableIndex) { editorCtb.SetDataSetPath("QCAR/" + dataSetList[newDataSetIndex] + ".xml"); editorCtb.SetNameForTrackable(namesList[newTrackableIndex]); ConfigData.CylinderTargetData ctConfig; dataSetData.GetCylinderTarget(ctb.TrackableName, out ctConfig); //geometry has to be updated when a new target has been selected UpdateAspectRatio(editorCtb, ctConfig); UpdateScale(editorCtb, ctConfig.sideLength); } } //Expose editors for setting sideLength and diameterss //these values are not really stored, but instead the scale-factor is updated var sideLength = EditorGUILayout.FloatField("Side Length", ctb.SideLength); if (sideLength != ctb.SideLength) { ctb.SetSideLength(sideLength); } float topDiameter = EditorGUILayout.FloatField("Top Diameter ", ctb.TopDiameter); if (topDiameter != ctb.TopDiameter) { ctb.SetTopDiameter(topDiameter); } float bottomDiameter = EditorGUILayout.FloatField("Bottom Diameter", ctb.BottomDiameter); if (bottomDiameter != ctb.BottomDiameter) { ctb.SetBottomDiameter(bottomDiameter); } // Draw check box to de-/activate "preserve child size" mode. editorCtb.SetPreserveChildSize(EditorGUILayout.Toggle("Preserve child size", editorCtb.PreserveChildSize)); } else { if (GUILayout.Button("No targets defined. Press here for target " + "creation!")) { SceneManager.Instance.GoToTargetManagerPage(); } } if (GUI.changed) { EditorUtility.SetDirty(ctb); SceneManager.Instance.SceneUpdated(); } }
/// <summary> /// Enabled/disabled Extended Tracking mode. /// </summary> /// <param name="ON"></param> public virtual void SwitchExtendedTracking(bool extTrackingEnabled) { StateManager stateManager = TrackerManager.Instance.GetStateManager(); // We iterate over all TrackableBehaviours to start or stop extended tracking for the targets they represent. bool success = true; foreach (var tb in stateManager.GetTrackableBehaviours()) { if (tb is ImageTargetBehaviour) { ImageTargetBehaviour itb = tb as ImageTargetBehaviour; if (extTrackingEnabled) { if (!itb.ImageTarget.StartExtendedTracking()) { success = false; Debug.LogError("Failed to start Extended Tracking on Target " + itb.TrackableName); } } else { itb.ImageTarget.StopExtendedTracking(); } } else if (tb is MultiTargetBehaviour) { MultiTargetBehaviour mtb = tb as MultiTargetBehaviour; if (extTrackingEnabled) { if (!mtb.MultiTarget.StartExtendedTracking()) { success = false; Debug.LogError("Failed to start Extended Tracking on Target " + mtb.TrackableName); } } else { mtb.MultiTarget.StopExtendedTracking(); } } else if (tb is CylinderTargetBehaviour) { CylinderTargetBehaviour ctb = tb as CylinderTargetBehaviour; if (extTrackingEnabled) { if (!ctb.CylinderTarget.StartExtendedTracking()) { success = false; Debug.LogError("Failed to start Extended Tracking on Target " + ctb.TrackableName); } } else { ctb.CylinderTarget.StopExtendedTracking(); } } else if (tb is ObjectTargetBehaviour) { ObjectTargetBehaviour otb = tb as ObjectTargetBehaviour; if (extTrackingEnabled) { if (!otb.ObjectTarget.StartExtendedTracking()) { success = false; Debug.LogError("Failed to start Extended Tracking on Target " + otb.TrackableName); } } else { otb.ObjectTarget.StopExtendedTracking(); } } } mExtTrackingEnabled = success && extTrackingEnabled; }