106 lines
3.5 KiB
C#
106 lines
3.5 KiB
C#
|
|
using System;
|
||
|
|
using UnityEditor.XR.ARSubsystems;
|
||
|
|
using UnityEngine;
|
||
|
|
using UnityEngine.XR.ARSubsystems;
|
||
|
|
using UnityEngine.XR.ARKit;
|
||
|
|
|
||
|
|
namespace UnityEditor.XR.ARKit
|
||
|
|
{
|
||
|
|
[CustomEditor(typeof(ARKitReferenceObjectEntry))]
|
||
|
|
class ARKitReferenceObjectEntryEditor : Editor
|
||
|
|
{
|
||
|
|
ARObject? m_ARObject;
|
||
|
|
|
||
|
|
bool m_ShouldReadARObject;
|
||
|
|
|
||
|
|
static class Content
|
||
|
|
{
|
||
|
|
public static readonly GUIContent info = new GUIContent(
|
||
|
|
"Metadata",
|
||
|
|
"Metadata included with the object scan");
|
||
|
|
|
||
|
|
public static readonly GUIContent referenceOrigin = new GUIContent(
|
||
|
|
"Reference Origin",
|
||
|
|
"The reference origin of the scanned object.");
|
||
|
|
|
||
|
|
public static readonly GUIContent infoRotation = new GUIContent(
|
||
|
|
"Origin Rotation",
|
||
|
|
"The rotation of the origin for the scanned object.");
|
||
|
|
|
||
|
|
public static readonly GUIContent infoPosition = new GUIContent(
|
||
|
|
"Origin Position",
|
||
|
|
"The position of the origin for the scanned object.");
|
||
|
|
|
||
|
|
public static readonly GUIContent infoVersion = new GUIContent(
|
||
|
|
"Version",
|
||
|
|
"The version of the scanned object file.");
|
||
|
|
}
|
||
|
|
|
||
|
|
void OnEnable()
|
||
|
|
{
|
||
|
|
m_ShouldReadARObject = true;
|
||
|
|
}
|
||
|
|
|
||
|
|
public override void OnInspectorGUI()
|
||
|
|
{
|
||
|
|
var entry = target as ARKitReferenceObjectEntry;
|
||
|
|
|
||
|
|
if (m_ShouldReadARObject)
|
||
|
|
{
|
||
|
|
var path = AssetDatabase.GetAssetPath(entry);
|
||
|
|
m_ARObject = ARObjectImporter.ReadARObject(path);
|
||
|
|
m_ShouldReadARObject = false;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (m_ARObject.HasValue)
|
||
|
|
{
|
||
|
|
var info = m_ARObject.Value.info;
|
||
|
|
EditorGUILayout.LabelField(Content.info);
|
||
|
|
using (new EditorGUI.DisabledScope(true))
|
||
|
|
{
|
||
|
|
EditorGUILayout.IntField(Content.infoVersion, info.version);
|
||
|
|
EditorGUILayout.LabelField(Content.referenceOrigin);
|
||
|
|
using (new EditorGUI.IndentLevelScope())
|
||
|
|
{
|
||
|
|
EditorGUILayout.Vector3Field(Content.infoPosition, info.referenceOrigin.position);
|
||
|
|
EditorGUILayout.Vector3Field(Content.infoRotation, info.referenceOrigin.rotation.eulerAngles);
|
||
|
|
}
|
||
|
|
TextureField(m_ARObject.Value.preview);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
EditorGUILayout.LabelField("Could not read object info.");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
static int s_LastNonZeroWidth;
|
||
|
|
|
||
|
|
static void TextureField(Texture2D texture)
|
||
|
|
{
|
||
|
|
using (var h = new EditorGUILayout.HorizontalScope())
|
||
|
|
{
|
||
|
|
// During other event types, the width is zero.
|
||
|
|
if (Event.current.type == EventType.Repaint)
|
||
|
|
{
|
||
|
|
s_LastNonZeroWidth = (int)h.rect.width;
|
||
|
|
}
|
||
|
|
|
||
|
|
int maxWidth = Mathf.Max(s_LastNonZeroWidth, 64);
|
||
|
|
int width = maxWidth, height = maxWidth;
|
||
|
|
if (texture != null)
|
||
|
|
{
|
||
|
|
height = width * texture.height / texture.width;
|
||
|
|
}
|
||
|
|
|
||
|
|
EditorGUILayout.ObjectField(
|
||
|
|
texture,
|
||
|
|
typeof(Texture2D),
|
||
|
|
false,
|
||
|
|
GUILayout.Width(width),
|
||
|
|
GUILayout.Height(height));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|