您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
88 行
4.0 KiB
88 行
4.0 KiB
using System.Linq;
|
|
using UnityEditorInternal;
|
|
using UnityEngine;
|
|
using UnityEngine.Perception.GroundTruth;
|
|
|
|
namespace UnityEditor.Perception.GroundTruth
|
|
{
|
|
[CustomEditor(typeof(KeypointTemplate))]
|
|
class KeypointTemplateEditor: Editor
|
|
{
|
|
ReorderableList m_KeypointsList;
|
|
ReorderableList m_SkeletonList;
|
|
private const float k_Indent = 10;
|
|
|
|
SerializedProperty keypointsProperty => this.serializedObject.FindProperty(nameof(KeypointTemplate.keypoints));
|
|
SerializedProperty skeletonProperty => this.serializedObject.FindProperty(nameof(KeypointTemplate.skeleton));
|
|
|
|
private KeypointTemplate targetObject => ((KeypointTemplate)serializedObject.targetObject);
|
|
public void OnEnable()
|
|
{
|
|
m_KeypointsList = new ReorderableList(this.serializedObject, keypointsProperty, true, false, true, true);
|
|
m_KeypointsList.drawHeaderCallback = (rect) =>
|
|
{
|
|
EditorGUI.LabelField(rect, "Keypoints", EditorStyles.largeLabel);
|
|
};
|
|
m_KeypointsList.onAddCallback += OnAddKeypointDefinition;
|
|
m_KeypointsList.elementHeightCallback =
|
|
i => EditorGUI.GetPropertyHeight(keypointsProperty.GetArrayElementAtIndex(i));
|
|
m_KeypointsList.drawElementCallback += (rect, index, active, focused) =>
|
|
{
|
|
rect.xMin += k_Indent;
|
|
EditorGUI.PropertyField(rect, keypointsProperty.GetArrayElementAtIndex(index), true);
|
|
};
|
|
m_SkeletonList = new ReorderableList(this.serializedObject, skeletonProperty, true, false, true, true);
|
|
m_SkeletonList.drawHeaderCallback = (rect) =>
|
|
{
|
|
EditorGUI.LabelField(rect, "Skeleton", EditorStyles.largeLabel);
|
|
};
|
|
m_SkeletonList.onAddCallback += OnAddSkeletonDefinition;
|
|
m_SkeletonList.drawElementCallback += (rect, index, active, focused) =>
|
|
{
|
|
rect.xMin += k_Indent;
|
|
EditorGUI.PropertyField(rect, skeletonProperty.GetArrayElementAtIndex(index), true);
|
|
};
|
|
|
|
m_SkeletonList.elementHeightCallback =
|
|
i => EditorGUI.GetPropertyHeight(skeletonProperty.GetArrayElementAtIndex(i));
|
|
}
|
|
public override void OnInspectorGUI()
|
|
{
|
|
EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(KeypointTemplate.templateID)));
|
|
EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(KeypointTemplate.templateName)));
|
|
EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(KeypointTemplate.jointTexture)));
|
|
EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(KeypointTemplate.skeletonTexture)));
|
|
|
|
serializedObject.ApplyModifiedProperties();
|
|
|
|
m_KeypointsList.DoLayoutList();
|
|
m_SkeletonList.DoLayoutList();
|
|
}
|
|
void OnAddKeypointDefinition(ReorderableList list)
|
|
{
|
|
Undo.RegisterCompleteObjectUndo(target, "Add Keypoint Definition");
|
|
AddDefinitionToProperty(keypointsProperty);
|
|
}
|
|
void OnAddSkeletonDefinition(ReorderableList list)
|
|
{
|
|
Undo.RegisterCompleteObjectUndo(target, "Add Skeleton Definition");
|
|
AddDefinitionToProperty(skeletonProperty);
|
|
}
|
|
|
|
private void AddDefinitionToProperty(SerializedProperty property)
|
|
{
|
|
var nextIndex = property.arraySize;
|
|
property.InsertArrayElementAtIndex(nextIndex);
|
|
var arrayElementAtIndex = property.GetArrayElementAtIndex(nextIndex);
|
|
|
|
// set default color to blue because Unity does not instantiate field values based on initializers
|
|
var colorProperty = arrayElementAtIndex.FindPropertyRelative("color");
|
|
if (colorProperty.colorValue == Color.clear)
|
|
colorProperty.colorValue = Color.blue;
|
|
|
|
arrayElementAtIndex.isExpanded = true;
|
|
|
|
serializedObject.ApplyModifiedProperties();
|
|
}
|
|
}
|
|
}
|