예제 #1
0
    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;
        }
    }
예제 #2
0
    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();
    }