diff --git a/src/Tizen.NUI.Avatar/Properties/AssemblyInfo.cs b/src/Tizen.NUI.Avatar/Properties/AssemblyInfo.cs
new file mode 100755
index 00000000000..37e3f1f4a91
--- /dev/null
+++ b/src/Tizen.NUI.Avatar/Properties/AssemblyInfo.cs
@@ -0,0 +1,4 @@
+using Tizen.NUI;
+
+// Xamarin.Forms.Loader.dll Xamarin.Forms.Xaml.XamlLoader.Load(object, string), kzu@microsoft.com
+[assembly: XmlnsDefinition("http://tizen.org/Tizen.NUI/2018/XAML", "Tizen.NUI.Avatar")]
\ No newline at end of file
diff --git a/src/Tizen.NUI.Avatar/Tizen.NUI.Avatar.csproj b/src/Tizen.NUI.Avatar/Tizen.NUI.Avatar.csproj
new file mode 100755
index 00000000000..89e2515f85c
--- /dev/null
+++ b/src/Tizen.NUI.Avatar/Tizen.NUI.Avatar.csproj
@@ -0,0 +1,14 @@
+
+
+
+ net6.0
+ $(NoWarn);CS0618;CA1054;CA1056
+
+
+
+
+
+
+
+
+
diff --git a/src/Tizen.NUI.Avatar/Tizen.NUI.Avatar.sln b/src/Tizen.NUI.Avatar/Tizen.NUI.Avatar.sln
new file mode 100755
index 00000000000..0d87c5d8403
--- /dev/null
+++ b/src/Tizen.NUI.Avatar/Tizen.NUI.Avatar.sln
@@ -0,0 +1,85 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.31515.178
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI.Avatar", "Tizen.NUI.Avatar.csproj", "{C6CEE887-775A-4623-8BF8-DCA18C363D63}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI.Scene3D", "..\Tizen.NUI.Scene3D\Tizen.NUI.Scene3D.csproj", "{F6CEE887-775A-4623-8BF8-DCA18C363D62}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI", "..\Tizen.NUI\Tizen.NUI.csproj", "{F9DAA9C3-593D-467E-B02C-FFF51F1BC8CD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Applications.Common", "..\Tizen.Applications.Common\Tizen.Applications.Common.csproj", "{CE90CD24-82F7-45A3-96B2-2E3C97D25C30}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.System.SystemSettings", "..\Tizen.System.SystemSettings\Tizen.System.SystemSettings.csproj", "{D726EEB8-6382-4BA3-BE0C-D9E61B5D8374}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen", "..\Tizen\Tizen.csproj", "{6D5FFD69-6DCC-4953-85E9-C23AC18B190E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.System.Information", "..\Tizen.System.Information\Tizen.System.Information.csproj", "{A951EAFE-D191-4F45-9AEF-7D97C382A747}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Log", "..\Tizen.Log\Tizen.Log.csproj", "{E1E30AEC-AD46-4E53-B9B1-780A68B59963}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Applications.ComponentBased", "..\Tizen.Applications.ComponentBased\Tizen.Applications.ComponentBased.csproj", "{70341AA2-1324-4215-9DB8-BFB13389D932}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Applications.ThemeManager", "..\Tizen.Applications.ThemeManager\Tizen.Applications.ThemeManager.csproj", "{F6A776BF-6743-4C1D-A8AF-F3E9F8CEFA0A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Tracer", "..\Tizen.Tracer\Tizen.Tracer.csproj", "{6DABE78F-1816-4F2E-8966-F909173194C8}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C6CEE887-775A-4623-8BF8-DCA18C363D63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C6CEE887-775A-4623-8BF8-DCA18C363D63}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C6CEE887-775A-4623-8BF8-DCA18C363D63}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C6CEE887-775A-4623-8BF8-DCA18C363D63}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F6CEE887-775A-4623-8BF8-DCA18C363D62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F6CEE887-775A-4623-8BF8-DCA18C363D62}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F6CEE887-775A-4623-8BF8-DCA18C363D62}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F6CEE887-775A-4623-8BF8-DCA18C363D62}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F9DAA9C3-593D-467E-B02C-FFF51F1BC8CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F9DAA9C3-593D-467E-B02C-FFF51F1BC8CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F9DAA9C3-593D-467E-B02C-FFF51F1BC8CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F9DAA9C3-593D-467E-B02C-FFF51F1BC8CD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CE90CD24-82F7-45A3-96B2-2E3C97D25C30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CE90CD24-82F7-45A3-96B2-2E3C97D25C30}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CE90CD24-82F7-45A3-96B2-2E3C97D25C30}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CE90CD24-82F7-45A3-96B2-2E3C97D25C30}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D726EEB8-6382-4BA3-BE0C-D9E61B5D8374}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D726EEB8-6382-4BA3-BE0C-D9E61B5D8374}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D726EEB8-6382-4BA3-BE0C-D9E61B5D8374}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D726EEB8-6382-4BA3-BE0C-D9E61B5D8374}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6D5FFD69-6DCC-4953-85E9-C23AC18B190E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6D5FFD69-6DCC-4953-85E9-C23AC18B190E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6D5FFD69-6DCC-4953-85E9-C23AC18B190E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6D5FFD69-6DCC-4953-85E9-C23AC18B190E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A951EAFE-D191-4F45-9AEF-7D97C382A747}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A951EAFE-D191-4F45-9AEF-7D97C382A747}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A951EAFE-D191-4F45-9AEF-7D97C382A747}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A951EAFE-D191-4F45-9AEF-7D97C382A747}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E1E30AEC-AD46-4E53-B9B1-780A68B59963}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E1E30AEC-AD46-4E53-B9B1-780A68B59963}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E1E30AEC-AD46-4E53-B9B1-780A68B59963}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E1E30AEC-AD46-4E53-B9B1-780A68B59963}.Release|Any CPU.Build.0 = Release|Any CPU
+ {70341AA2-1324-4215-9DB8-BFB13389D932}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {70341AA2-1324-4215-9DB8-BFB13389D932}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {70341AA2-1324-4215-9DB8-BFB13389D932}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {70341AA2-1324-4215-9DB8-BFB13389D932}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F6A776BF-6743-4C1D-A8AF-F3E9F8CEFA0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F6A776BF-6743-4C1D-A8AF-F3E9F8CEFA0A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F6A776BF-6743-4C1D-A8AF-F3E9F8CEFA0A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F6A776BF-6743-4C1D-A8AF-F3E9F8CEFA0A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6DABE78F-1816-4F2E-8966-F909173194C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6DABE78F-1816-4F2E-8966-F909173194C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6DABE78F-1816-4F2E-8966-F909173194C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6DABE78F-1816-4F2E-8966-F909173194C8}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {83C85CFB-3AB8-403A-9F6D-CC2783C6C559}
+ EndGlobalSection
+EndGlobal
diff --git a/src/Tizen.NUI.Avatar/src/internal/Common/AREmojiDefaultBlendShapeNameMapper.cs b/src/Tizen.NUI.Avatar/src/internal/Common/AREmojiDefaultBlendShapeNameMapper.cs
new file mode 100644
index 00000000000..df09f9ab705
--- /dev/null
+++ b/src/Tizen.NUI.Avatar/src/internal/Common/AREmojiDefaultBlendShapeNameMapper.cs
@@ -0,0 +1,106 @@
+using System.Collections.Generic;
+namespace Tizen.NUI.Avatar
+{
+ internal class AREmojiDefaultBlendShapeNameMapper : AvatarPropertyNameMapper
+ {
+ public AREmojiDefaultBlendShapeNameMapper() : base()
+ {
+ customIndexCounter = (uint)arEmojiBlendShapeNameList.Count;
+ foreach (var indexNamePair in arEmojiBlendShapeNameList)
+ {
+ base.SetPropertyName((uint)indexNamePair.Item1, indexNamePair.Item2);
+ }
+ foreach (var customName in arEmojiCustomBlendShapeNameList)
+ {
+ // We can ensure that default name list is always unique
+ base.SetPropertyName(customIndexCounter++, customName);
+ }
+ }
+
+ #region AR Emoji BlendShape name list
+ private static readonly List<(BlendShapeType, string)> arEmojiBlendShapeNameList = new()
+ {
+ (BlendShapeType.EyeBlinkLeft, "EyeBlink_Left"),
+ (BlendShapeType.EyeSquintLeft, "EyeSquint_Left"),
+ (BlendShapeType.EyeDownLeft, "EyeDown_Left"),
+ (BlendShapeType.EyeInLeft, "EyeIn_Left"),
+ (BlendShapeType.EyeOpenLeft, "EyeOpen_Left"),
+ (BlendShapeType.EyeOutLeft, "EyeOut_Left"),
+ (BlendShapeType.EyeUpLeft, "EyeUp_Left"),
+
+ (BlendShapeType.EyeBlinkRight, "EyeBlink_Right"),
+ (BlendShapeType.EyeSquintRight, "EyeSquint_Right"),
+ (BlendShapeType.EyeDownRight, "EyeDown_Right"),
+ (BlendShapeType.EyeInRight, "EyeIn_Right"),
+ (BlendShapeType.EyeOpenRight, "EyeOpen_Right"),
+ (BlendShapeType.EyeOutRight, "EyeOut_Right"),
+ (BlendShapeType.EyeUpRight, "EyeUp_Right"),
+
+ (BlendShapeType.JawForward, "JawFwd"),
+ (BlendShapeType.JawOpen, "JawOpen"),
+ (BlendShapeType.JawChew, "JawChew"),
+ (BlendShapeType.JawLeft, "JawLeft"),
+ (BlendShapeType.JawRight, "JawRight"),
+
+ (BlendShapeType.MouthLeft, "MouthLeft"),
+ (BlendShapeType.MouthFrownLeft, "MouthFrown_Left"),
+ (BlendShapeType.MouthSmileLeft, "MouthSmile_Left"),
+ (BlendShapeType.MouthDimpleLeft, "MouthDimple_Left"),
+
+ (BlendShapeType.MouthRight, "MouthRight"),
+ (BlendShapeType.MouthFrownRight, "MouthFrown_Right"),
+ (BlendShapeType.MouthSmileRight, "MouthSmile_Right"),
+ (BlendShapeType.MouthDimpleRight, "MouthDimple_Right"),
+
+ (BlendShapeType.LipsStretchLeft, "LipsStretch_Left"),
+ (BlendShapeType.LipsStretchRight, "LipsStretch_Right"),
+ (BlendShapeType.LipsUpperClose, "LipsUpperClose"),
+ (BlendShapeType.LipsLowerClose, "LipsLowerClose"),
+ (BlendShapeType.LipsUpperUp, "LipsUpperUp"),
+ (BlendShapeType.LipsLowerDown, "LipsLowerDown"),
+ (BlendShapeType.LipsUpperOpen, "LipsUpperOpen"),
+ (BlendShapeType.LipsLowerOpen, "LipsLowerOpen"),
+ (BlendShapeType.LipsFunnel, "LipsFunnel"),
+ (BlendShapeType.LipsPucker, "LipsPucker"),
+
+ (BlendShapeType.BrowDownLeft, "BrowsDown_Left"),
+ (BlendShapeType.BrowDownRight, "BrowsDown_Right"),
+ (BlendShapeType.BrowUpCenter, "BrowsUp_Center"),
+ (BlendShapeType.BrowUpLeft, "BrowsUp_Left"),
+ (BlendShapeType.BrowUpRight, "BrowsUp_Right"),
+ (BlendShapeType.CheekSquintLeft, "CheekSquint_Left"),
+ (BlendShapeType.CheekSquintRight, "CheekSquint_Right"),
+ (BlendShapeType.ChinLowerRaise, "ChinLowerRaise"),
+ (BlendShapeType.ChinUpperRaise, "ChinUpperRaise"),
+
+ (BlendShapeType.TongueOut, "Tongue_Out"),
+ (BlendShapeType.TongueUp, "Tongue_Up"),
+ (BlendShapeType.TongueDown, "Tongue_Down"),
+ (BlendShapeType.TongueLeft, "Tongue_Left"),
+ (BlendShapeType.TongueRight, "Tongue_Right"),
+
+ (BlendShapeType.Sneer, "Sneer"),
+ (BlendShapeType.Puff, "Puff"),
+ (BlendShapeType.PuffLeft, "Puff_Left"),
+ (BlendShapeType.PuffRight, "Puff_Right"),
+ };
+ private static readonly List arEmojiCustomBlendShapeNameList = new List
+ {
+ "HAPPY_48",
+ "HAPPY_49",
+ "HAPPY_50",
+ "HAPPY_51",
+ "HAPPY_52",
+ "ANGRY_53",
+ "ANGRY_54",
+ "ANGRY_55",
+ "DISGUST_56",
+ "DISGUST_57",
+ "SAD_58",
+ "SURPRISE_59",
+ "SURPRISE_60",
+ };
+ #endregion
+
+ }
+}
\ No newline at end of file
diff --git a/src/Tizen.NUI.Avatar/src/internal/Common/AREmojiDefaultJointNameMapper.cs b/src/Tizen.NUI.Avatar/src/internal/Common/AREmojiDefaultJointNameMapper.cs
new file mode 100644
index 00000000000..05a0349fbf6
--- /dev/null
+++ b/src/Tizen.NUI.Avatar/src/internal/Common/AREmojiDefaultJointNameMapper.cs
@@ -0,0 +1,85 @@
+using System.Collections.Generic;
+namespace Tizen.NUI.Avatar
+{
+ internal class AREmojiDefaultJointNameMapper : AvatarPropertyNameMapper
+ {
+ public AREmojiDefaultJointNameMapper() : base()
+ {
+ customIndexCounter = (uint)arEmojiJointNameList.Count;
+ foreach (var indexNamePair in arEmojiJointNameList)
+ {
+ base.SetPropertyName((uint)indexNamePair.Item1, indexNamePair.Item2);
+ }
+ }
+
+ #region AR Emoji Joint name list
+ private static readonly List<(JointType, string)> arEmojiJointNameList = new()
+ {
+ (JointType.Head, "head_JNT"),
+ (JointType.Neck, "neck_JNT"),
+ (JointType.EyeLeft, "l_eye_JNT"),
+ (JointType.EyeRight, "r_eye_JNT"),
+
+ (JointType.ShoulderLeft, "l_arm_JNT"),
+ (JointType.ElbowLeft, "l_forearm_JNT"),
+ (JointType.WristLeft, "l_hand_JNT"),
+
+ (JointType.ShoulderRight, "r_arm_JNT"),
+ (JointType.ElbowRight, "r_forearm_JNT"),
+ (JointType.WristRight, "r_hand_JNT"),
+
+ (JointType.HipLeft, "l_upleg_JNT"),
+ (JointType.KneeLeft, "l_leg_JNT"),
+ (JointType.AnkleLeft, "l_foot_JNT"),
+ (JointType.ForeFootLeft, "l_toebase_JNT"),
+
+ (JointType.HipRight, "r_upleg_JNT"),
+ (JointType.KneeRight, "r_leg_JNT"),
+ (JointType.AnkleRight, "r_foot_JNT"),
+ (JointType.ForeFootRight, "r_toebase_JNT"),
+
+ (JointType.FingerThumb1Left, "l_handThumb1_JNT"),
+ (JointType.FingerThumb2Left, "l_handThumb2_JNT"),
+ (JointType.FingerThumb3Left, "l_handThumb3_JNT"),
+ (JointType.FingerThumb4Left, "l_handThumb4_JNT"),
+ (JointType.FingerIndex1Left, "l_handIndex1_JNT"),
+ (JointType.FingerIndex2Left, "l_handIndex2_JNT"),
+ (JointType.FingerIndex3Left, "l_handIndex3_JNT"),
+ (JointType.FingerIndex4Left, "l_handIndex4_JNT"),
+ (JointType.FingerMiddle1Left, "l_handMiddle1_JNT"),
+ (JointType.FingerMiddle2Left, "l_handMiddle2_JNT"),
+ (JointType.FingerMiddle3Left, "l_handMiddle3_JNT"),
+ (JointType.FingerMiddle4Left, "l_handMiddle4_JNT"),
+ (JointType.FingerRing1Left, "l_handRing1_JNT"),
+ (JointType.FingerRing2Left, "l_handRing2_JNT"),
+ (JointType.FingerRing3Left, "l_handRing3_JNT"),
+ (JointType.FingerRing4Left, "l_handRing4_JNT"),
+ (JointType.FingerPinky1Left, "l_handPinky1_JNT"),
+ (JointType.FingerPinky2Left, "l_handPinky2_JNT"),
+ (JointType.FingerPinky3Left, "l_handPinky3_JNT"),
+ (JointType.FingerPinky4Left, "l_handPinky4_JNT"),
+
+ (JointType.FingerThumb1Right, "r_handThumb1_JNT"),
+ (JointType.FingerThumb2Right, "r_handThumb2_JNT"),
+ (JointType.FingerThumb3Right, "r_handThumb3_JNT"),
+ (JointType.FingerThumb4Right, "r_handThumb4_JNT"),
+ (JointType.FingerIndex1Right, "r_handIndex1_JNT"),
+ (JointType.FingerIndex2Right, "r_handIndex2_JNT"),
+ (JointType.FingerIndex3Right, "r_handIndex3_JNT"),
+ (JointType.FingerIndex4Right, "r_handIndex4_JNT"),
+ (JointType.FingerMiddle1Right, "r_handMiddle1_JNT"),
+ (JointType.FingerMiddle2Right, "r_handMiddle2_JNT"),
+ (JointType.FingerMiddle3Right, "r_handMiddle3_JNT"),
+ (JointType.FingerMiddle4Right, "r_handMiddle4_JNT"),
+ (JointType.FingerRing1Right, "r_handRing1_JNT"),
+ (JointType.FingerRing2Right, "r_handRing2_JNT"),
+ (JointType.FingerRing3Right, "r_handRing3_JNT"),
+ (JointType.FingerRing4Right, "r_handRing4_JNT"),
+ (JointType.FingerPinky1Right, "r_handPinky1_JNT"),
+ (JointType.FingerPinky2Right, "r_handPinky2_JNT"),
+ (JointType.FingerPinky3Right, "r_handPinky3_JNT"),
+ (JointType.FingerPinky4Right, "r_handPinky4_JNT"),
+ };
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Tizen.NUI.Avatar/src/public/Common/AvatarEnums.cs b/src/Tizen.NUI.Avatar/src/public/Common/AvatarEnums.cs
new file mode 100755
index 00000000000..eb617481aaa
--- /dev/null
+++ b/src/Tizen.NUI.Avatar/src/public/Common/AvatarEnums.cs
@@ -0,0 +1,763 @@
+/*
+ * Copyright(c) 2023 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.Runtime.InteropServices;
+using System.ComponentModel;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Scene3D;
+
+namespace Tizen.NUI.Avatar
+{
+ ///
+ /// The type of predefined skeletal joint. We can customize each type name by "TODO_mapper"
+ /// TODO : Explain me
+ /// TODO : Need to check each joint exist in AR Emoji
+ /// Note : This is temperal name of joints.
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public enum JointType
+ {
+ #region Head
+ ///
+ /// Head joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Head = 0,
+
+ ///
+ /// Neck joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Neck,
+
+ ///
+ /// EyeLeft joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeLeft,
+
+ ///
+ /// EyeRight joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeRight,
+ #endregion
+
+ #region Left Upper Body
+ ///
+ /// ShoulderLeft joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ ShoulderLeft,
+
+ ///
+ /// ElbowLeft joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ ElbowLeft,
+
+ ///
+ /// WristLeft joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ WristLeft,
+ #endregion
+
+ #region Right Upper Body
+ ///
+ /// ShoulderRight joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ ShoulderRight,
+
+ ///
+ /// ElbowRight joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ ElbowRight,
+
+ ///
+ /// WristRight joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ WristRight,
+ #endregion
+
+ #region Left Lower Body
+ ///
+ /// HipLeft joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ HipLeft,
+
+ ///
+ /// KneeLeft joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ KneeLeft,
+
+ ///
+ /// AnkleLeft joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ AnkleLeft,
+
+ ///
+ /// ForeFootLeft joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ ForeFootLeft,
+ #endregion
+
+ #region Right Lower Body
+ ///
+ /// HipRight joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ HipRight,
+
+ ///
+ /// KneeRight joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ KneeRight,
+
+ ///
+ /// AnkleRight joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ AnkleRight,
+
+ ///
+ /// ForeFootRight joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ ForeFootRight,
+ #endregion
+
+ #region Left Hand Finger
+ ///
+ /// FingerThumb1Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerThumb1Left,
+
+ ///
+ /// FingerThumb2Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerThumb2Left,
+
+ ///
+ /// FingerThumb3Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerThumb3Left,
+
+ ///
+ /// FingerThumb4Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerThumb4Left,
+
+ ///
+ /// FingerIndex1Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerIndex1Left,
+
+ ///
+ /// FingerIndex2Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerIndex2Left,
+
+ ///
+ /// FingerIndex3Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerIndex3Left,
+
+ ///
+ /// FingerIndex4Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerIndex4Left,
+
+ ///
+ /// FingerMiddle1Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerMiddle1Left,
+
+ ///
+ /// FingerMiddle2Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerMiddle2Left,
+
+ ///
+ /// FingerMiddle3Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerMiddle3Left,
+
+ ///
+ /// FingerMiddle4Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerMiddle4Left,
+
+ ///
+ /// FingerRing1Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerRing1Left,
+
+ ///
+ /// FingerRing2Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerRing2Left,
+
+ ///
+ /// FingerRing3Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerRing3Left,
+
+ ///
+ /// FingerRing4Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerRing4Left,
+
+ ///
+ /// FingerPinky1Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerPinky1Left,
+
+ ///
+ /// FingerPinky2Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerPinky2Left,
+
+ ///
+ /// FingerPinky3Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerPinky3Left,
+
+ ///
+ /// FingerPinky4Left joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerPinky4Left,
+ #endregion
+
+ #region Right Hand Finger
+ ///
+ /// FingerThumb1Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerThumb1Right,
+
+ ///
+ /// FingerThumb2Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerThumb2Right,
+
+ ///
+ /// FingerThumb3Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerThumb3Right,
+
+ ///
+ /// FingerThumb4Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerThumb4Right,
+
+ ///
+ /// FingerIndex1Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerIndex1Right,
+
+ ///
+ /// FingerIndex2Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerIndex2Right,
+
+ ///
+ /// FingerIndex3Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerIndex3Right,
+
+ ///
+ /// FingerIndex4Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerIndex4Right,
+
+ ///
+ /// FingerMiddle1Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerMiddle1Right,
+
+ ///
+ /// FingerMiddle2Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerMiddle2Right,
+
+ ///
+ /// FingerMiddle3Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerMiddle3Right,
+
+ ///
+ /// FingerMiddle4Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerMiddle4Right,
+
+ ///
+ /// FingerRing1Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerRing1Right,
+
+ ///
+ /// FingerRing2Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerRing2Right,
+
+ ///
+ /// FingerRing3Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerRing3Right,
+
+ ///
+ /// FingerRing4Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerRing4Right,
+
+ ///
+ /// FingerPinky1Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerPinky1Right,
+
+ ///
+ /// FingerPinky2Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerPinky2Right,
+
+ ///
+ /// FingerPinky3Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerPinky3Right,
+
+ ///
+ /// FingerPinky4Right joint
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ FingerPinky4Right,
+ #endregion
+
+ ///
+ /// Max value of default joint. It will be used when we determine the motion index is default or custom.
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ DefaultJointMax,
+ }
+
+ ///
+ /// The type of predefined blendshape. We can customize each type name by "TODO_mapper"
+ /// TODO : Explain me
+ /// TODO : Need to check each joint exist in AR Emoji
+ /// Note : This is temperal name of joints.
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public enum BlendShapeType
+ {
+ #region Left Eyes
+ ///
+ /// EyeBlinkLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeBlinkLeft = 0,
+
+ ///
+ /// EyeSquintLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeSquintLeft,
+
+ ///
+ /// EyeDownLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeDownLeft,
+
+ ///
+ /// EyeInLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeInLeft,
+
+ ///
+ /// EyeOpenLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeOpenLeft,
+
+ ///
+ /// EyeOutLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeOutLeft,
+
+ ///
+ /// EyeUpLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeUpLeft,
+ #endregion
+
+ #region Right Eyes
+ ///
+ /// EyeBlinkRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeBlinkRight,
+
+ ///
+ /// EyeSquintRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeSquintRight,
+
+ ///
+ /// EyeDownRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeDownRight,
+
+ ///
+ /// EyeInRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeInRight,
+
+ ///
+ /// EyeOpenRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeOpenRight,
+
+ ///
+ /// EyeOutRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeOutRight,
+
+ ///
+ /// EyeUpRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ EyeUpRight,
+ #endregion
+
+ #region Mouth and Jaw
+ ///
+ /// JawForward blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ JawForward,
+
+ ///
+ /// JawOpen blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ JawOpen,
+
+ ///
+ /// JawChew blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ JawChew,
+
+ ///
+ /// JawLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ JawLeft,
+
+ ///
+ /// JawRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ JawRight,
+
+ ///
+ /// MouthLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ MouthLeft,
+
+ ///
+ /// MouthFrownLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ MouthFrownLeft,
+
+ ///
+ /// MouthSmileLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ MouthSmileLeft,
+
+ ///
+ /// MouthDimpleLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ MouthDimpleLeft,
+
+ ///
+ /// MouthRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ MouthRight,
+
+ ///
+ /// MouthFrownRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ MouthFrownRight,
+
+ ///
+ /// MouthSmileRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ MouthSmileRight,
+
+ ///
+ /// MouthDimpleRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ MouthDimpleRight,
+ #endregion
+
+ #region Lips
+ ///
+ /// LipsStretchLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ LipsStretchLeft,
+
+ ///
+ /// LipsStretchRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ LipsStretchRight,
+
+ ///
+ /// LipsUpperClose blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ LipsUpperClose,
+
+ ///
+ /// LipsLowerClose blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ LipsLowerClose,
+
+ ///
+ /// LipsUpperUp blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ LipsUpperUp,
+
+ ///
+ /// LipsLowerDown blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ LipsLowerDown,
+
+ ///
+ /// LipsUpperOpen blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ LipsUpperOpen,
+
+ ///
+ /// LipsLowerOpen blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ LipsLowerOpen,
+
+ ///
+ /// LipsFunnel blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ LipsFunnel,
+
+ ///
+ /// LipsPucker blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ LipsPucker,
+ #endregion
+
+ #region Eyebrows, Cheeks, and Chin
+ ///
+ /// BrowDownLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ BrowDownLeft,
+
+ ///
+ /// BrowDownRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ BrowDownRight,
+
+ ///
+ /// BrowUpCenter blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ BrowUpCenter,
+
+ ///
+ /// BrowUpLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ BrowUpLeft,
+
+ ///
+ /// BrowUpRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ BrowUpRight,
+
+ ///
+ /// CheekSquintLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ CheekSquintLeft,
+
+ ///
+ /// CheekSquintRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ CheekSquintRight,
+
+ ///
+ /// ChinLowerRaise blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ ChinLowerRaise,
+
+ ///
+ /// ChinUpperRaise blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ ChinUpperRaise,
+ #endregion
+
+ #region Tongue
+ ///
+ /// TongueOut blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ TongueOut,
+
+ ///
+ /// TongueUp blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ TongueUp,
+
+ ///
+ /// TongueDown blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ TongueDown,
+
+ ///
+ /// TongueLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ TongueLeft,
+
+ ///
+ /// TongueRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ TongueRight,
+ #endregion
+
+ #region ETC
+ ///
+ /// Sneer blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Sneer,
+
+ ///
+ /// Puff blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Puff,
+
+ ///
+ /// PuffLeft blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ PuffLeft,
+
+ ///
+ /// PuffRight blendshape
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ PuffRight,
+ #endregion
+ ///
+ /// Max value of default blendshape. It will be used when we determine the motion index is default or custom.
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ DefaultBlendShapeMax,
+ }
+}
diff --git a/src/Tizen.NUI.Avatar/src/public/Common/AvatarPropertyNameMapper.cs b/src/Tizen.NUI.Avatar/src/public/Common/AvatarPropertyNameMapper.cs
new file mode 100755
index 00000000000..1208f9d0468
--- /dev/null
+++ b/src/Tizen.NUI.Avatar/src/public/Common/AvatarPropertyNameMapper.cs
@@ -0,0 +1,169 @@
+using System.Collections.Generic;
+/*
+ * Copyright(c) 2023 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.Runtime.InteropServices;
+using System.ComponentModel;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Scene3D;
+
+namespace Tizen.NUI.Avatar
+{
+ ///
+ /// TODO : Explain more detail
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public class AvatarPropertyNameMapper
+ {
+ ///
+ /// Create an initialized AvatarPropertyNameMapper.
+ ///
+ // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public AvatarPropertyNameMapper()
+ {
+ mapper = new Dictionary();
+ customIndexCounter = 0u;
+ }
+
+ ///
+ /// Copy constructor.
+ ///
+ // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public AvatarPropertyNameMapper(AvatarPropertyNameMapper rhs)
+ {
+ if (rhs != null)
+ {
+ mapper = new Dictionary(rhs.Mapper);
+ customIndexCounter = rhs.customIndexCounter;
+ }
+ else
+ {
+ mapper = new Dictionary();
+ customIndexCounter = 0u;
+ }
+ }
+
+ ///
+ /// Get current mapper information.
+ ///
+ // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public Dictionary Mapper
+ {
+ get
+ {
+ return mapper;
+ }
+ }
+
+ ///
+ /// TODO : Explain me.
+ ///
+ /// The index of property what we want to set
+ /// The index of property, or uint.MaxValue if not exist
+ // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public string this[uint index]
+ {
+ set
+ {
+ SetPropertyName(index, value);
+ }
+ get
+ {
+ return GetPropertyName(index);
+ }
+ }
+
+ ///
+ /// TODO : Explain me.
+ ///
+ /// The name of custom property
+ /// The index of property matched with name.
+ // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public uint RegisterCustomProperty(string name)
+ {
+ uint ret = GetPropertyIndexByName(name);
+ if (ret >= customIndexCounter)
+ {
+ ret = customIndexCounter++;
+ SetPropertyName(ret, name);
+ }
+ return ret;
+ }
+
+ ///
+ /// TODO : Explain me.
+ ///
+ /// The name of property what we want to get index
+ /// The index of property, or uint.MaxValue if not exist
+ // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public uint GetPropertyIndexByName(string name)
+ {
+ // TODO : Do this without iteration
+ foreach (var pair in mapper)
+ {
+ if (pair.Value == name)
+ {
+ return pair.Key;
+ }
+ }
+ return uint.MaxValue;
+ }
+
+ ///
+ /// Mapper between index and property name
+ ///
+ internal Dictionary mapper = null;
+
+ ///
+ /// The counter of index. It will be increased one when we register custom index.
+ ///
+ internal uint customIndexCounter = 0;
+
+ ///
+ /// TODO : Explain me.
+ ///
+ /// The index of property what we want to set
+ /// The name of property what we want to set
+ ///
+ /// New property will be added if we use index that not exist in mapper.
+ ///
+ internal void SetPropertyName(uint index, string name)
+ {
+ mapper.TryAdd(index, name);
+ }
+
+ ///
+ /// TODO : Explain me.
+ ///
+ /// The index of property what we want to set
+ /// The name of property, or null if not exist
+ internal string GetPropertyName(uint index)
+ {
+ string ret = null;
+ mapper.TryGetValue(index, out ret);
+ return ret;
+ }
+ }
+}
diff --git a/src/Tizen.NUI.Avatar/src/public/Controls/AvatarModel.cs b/src/Tizen.NUI.Avatar/src/public/Controls/AvatarModel.cs
new file mode 100755
index 00000000000..f7d022e3542
--- /dev/null
+++ b/src/Tizen.NUI.Avatar/src/public/Controls/AvatarModel.cs
@@ -0,0 +1,80 @@
+/*
+ * Copyright(c) 2023 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.Runtime.InteropServices;
+using System.ComponentModel;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Scene3D;
+
+namespace Tizen.NUI.Avatar
+{
+ ///
+ /// AvatarModel is a Class to show 3D avatar objects.
+ /// It is subclass of Model s.t. we can control Avatar like models animation easly.
+ /// For example,
+ ///
+ /// AvatarModel supports AR Emoji.
+ /// TODO : Explain more detail
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public class AvatarModel : Model
+ {
+ ///
+ /// Create an initialized AvatarModel.
+ ///
+ /// avatar model file url.(e.g. glTF, and DLI).
+ /// The url to derectory containing resources: binary, image etc.
+ ///
+ /// If resourceDirectoryUrl is empty, the parent directory url of avatarModelUrl is used for resource url.
+ ///
+ /// http://tizen.org/privilege/mediastorage for local files in media storage.
+ /// http://tizen.org/privilege/externalstorage for local files in external storage.
+ ///
+ // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public AvatarModel(string avatarModelUrl, string resourceDirectoryUrl = "") : base(avatarModelUrl, resourceDirectoryUrl)
+ {
+ }
+
+ ///
+ /// Create an initialized AvatarModel.
+ ///
+ // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public AvatarModel() : base()
+ {
+ }
+
+ ///
+ /// Copy constructor.
+ ///
+ /// Source object to copy.
+ // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public AvatarModel(AvatarModel avatarModel) : base(avatarModel)
+ {
+ }
+
+ private static readonly AREmojiDefaultJointNameMapper defaultJointNameMapper = new();
+ private static readonly AREmojiDefaultBlendShapeNameMapper defaultBlendShapeNameMapper = new();
+
+ internal AvatarPropertyNameMapper JointMapper { get; set; } = new AvatarPropertyNameMapper(defaultJointNameMapper);
+ internal AvatarPropertyNameMapper BlendShapeMapper { get; set; } = new AvatarPropertyNameMapper(defaultBlendShapeNameMapper);
+ }
+}
diff --git a/src/Tizen.NUI.Avatar/src/public/Controls/AvatarView.cs b/src/Tizen.NUI.Avatar/src/public/Controls/AvatarView.cs
new file mode 100755
index 00000000000..bda756c7f0b
--- /dev/null
+++ b/src/Tizen.NUI.Avatar/src/public/Controls/AvatarView.cs
@@ -0,0 +1,53 @@
+/*
+ * Copyright(c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.Runtime.InteropServices;
+using System.ComponentModel;
+using System.Diagnostics.CodeAnalysis;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Scene3D;
+
+namespace Tizen.NUI.Avatar
+{
+ ///
+ /// AvatarView
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public class AvatarView : SceneView
+ {
+ ///
+ /// Create an initialized AvatarView.
+ ///
+ // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public AvatarView() : base()
+ {
+ }
+
+ ///
+ /// Copy constructor.
+ ///
+ /// The source object.
+ // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public AvatarView(AvatarView avatarView) : base(avatarView)
+ {
+ }
+ }
+}