private static void DrawMarker(ARTrackedObject to, bool selected) { ARMarker m = to.GetMarker(); if (m == null) { return; } if (!m.gameObject.activeInHierarchy) { return; // Don't attempt to load inactive ARMarkers. } // Attempt to load. Might not work out if e.g. for a single marker, pattern hasn't been // assigned yet, or for an NFT marker, dataset hasn't been specified. if (m.UID == ARMarker.NO_ID) { m.Load(); } Matrix4x4 pose = to.gameObject.transform.localToWorldMatrix; //ARController.Log("pose=" + pose.ToString("F3")); switch (m.MarkerType) { case MarkerType.Square: case MarkerType.SquareBarcode: DrawSingleMarker(m, pose, selected); break; case MarkerType.Multimarker: DrawMultiMarker(m, pose, selected); break; case MarkerType.NFT: DrawNFTMarker(m, pose, selected); break; } }
public override void OnInspectorGUI() { EditorGUILayout.BeginVertical(); // Get the ARMarker that this panel will edit. ARMarker m = (ARMarker)target; if (m == null) { return; } // Attempt to load. Might not work out if e.g. for a single marker, pattern hasn't been // assigned yet, or for an NFT marker, dataset hasn't been specified. if (m.UID == ARMarker.NO_ID) { m.Load(); } // Marker tag m.Tag = EditorGUILayout.TextField("Tag", m.Tag); EditorGUILayout.LabelField("UID", (m.UID == ARMarker.NO_ID ? "Not loaded": m.UID.ToString())); EditorGUILayout.Separator(); // Marker type MarkerType t = (MarkerType)EditorGUILayout.EnumPopup("Type", m.MarkerType); if (m.MarkerType != t) // Reload on change. { m.Unload(); m.MarkerType = t; m.Load(); } // Description of the type of marker EditorGUILayout.LabelField("Description", ARMarker.MarkerTypeNames[m.MarkerType]); switch (m.MarkerType) { case MarkerType.Square: case MarkerType.SquareBarcode: if (m.MarkerType == MarkerType.Square) { // For pattern markers, offer a popup with marker pattern file names. RefreshPatternFilenames(); // Update the list of available markers from the resources dir if (PatternFilenames.Length > 0) { int patternFilenameIndex = EditorGUILayout.Popup("Pattern file", m.PatternFilenameIndex, PatternFilenames); string patternFilename = PatternAssets[patternFilenameIndex].name; if (patternFilename != m.PatternFilename) { m.Unload(); m.PatternFilenameIndex = patternFilenameIndex; m.PatternFilename = patternFilename; m.PatternContents = PatternAssets[m.PatternFilenameIndex].text; m.Load(); } } else { m.PatternFilenameIndex = 0; EditorGUILayout.LabelField("Pattern file", "No patterns available"); m.PatternFilename = ""; m.PatternContents = ""; } } else { // For barcode markers, allow the user to specify the barcode ID. int BarcodeID = EditorGUILayout.IntField("Barcode ID", m.BarcodeID); //EditorGUILayout.LabelField("(in range 0 to " + barcodeCounts[ARController.MatrixCodeType] + ")"); if (BarcodeID != m.BarcodeID) { m.Unload(); m.BarcodeID = BarcodeID; m.Load(); } } float patternWidthPrev = m.PatternWidth; m.PatternWidth = EditorGUILayout.FloatField("Width", m.PatternWidth); if (patternWidthPrev != m.PatternWidth) { m.Unload(); m.Load(); } m.UseContPoseEstimation = EditorGUILayout.Toggle("Cont. pose estimation", m.UseContPoseEstimation); break; case MarkerType.Multimarker: string MultiConfigFile = EditorGUILayout.TextField("Multimarker config.", m.MultiConfigFile); if (MultiConfigFile != m.MultiConfigFile) { m.Unload(); m.MultiConfigFile = MultiConfigFile; m.Load(); } break; case MarkerType.NFT: string NFTDataSetName = EditorGUILayout.TextField("NFT dataset name", m.NFTDataName); if (NFTDataSetName != m.NFTDataName) { m.Unload(); m.NFTDataName = NFTDataSetName; m.Load(); } float nftScalePrev = m.NFTScale; m.NFTScale = EditorGUILayout.FloatField("NFT marker scalefactor", m.NFTScale); if (nftScalePrev != m.NFTScale) { EditorUtility.SetDirty(m); } break; } EditorGUILayout.Separator(); showFilterOptions = EditorGUILayout.Foldout(showFilterOptions, "Filter Options"); if (showFilterOptions) { m.Filtered = EditorGUILayout.Toggle("Filtered:", m.Filtered); m.FilterSampleRate = EditorGUILayout.Slider("Sample rate:", m.FilterSampleRate, 1.0f, 30.0f); m.FilterCutoffFreq = EditorGUILayout.Slider("Cutoff freq.:", m.FilterCutoffFreq, 1.0f, 30.0f); } EditorGUILayout.BeginHorizontal(); // Draw all the marker images if (m.Patterns != null) { for (int i = 0; i < m.Patterns.Length; i++) { GUILayout.Label(new GUIContent("Pattern " + i + ", " + m.Patterns[i].width.ToString("n3") + " m", m.Patterns[i].texture), GUILayout.ExpandWidth(false)); // n3 -> 3 decimal places. } } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); }