Apply the new doxygen tagging rule for @SINCE
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / public-api / controls / model3d-view / model3d-view.h
1 #ifndef __DALI_TOOLKIT_MODEL3D_VIEW_H__
2 #define __DALI_TOOLKIT_MODEL3D_VIEW_H__
3
4 /*
5  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // INTERNAL INCLUDES
22 #include <dali-toolkit/public-api/controls/control.h>
23
24 namespace Dali
25 {
26
27 namespace Toolkit
28 {
29
30 namespace Internal DALI_INTERNAL
31 {
32 class Model3dView;
33 }
34 /**
35  * @brief Model3dView is a control for displaying 3d geometry.
36  *
37  * All the geometry loaded with the control is automatically centered and scaled to fit
38  * the size of all the other controls. So the max is (0.5,0.5) and the min is (-0.5,-0.5)
39  *
40  * @SINCE_1_1.4
41  */
42 class DALI_IMPORT_API Model3dView : public Control
43 {
44 public:
45
46   /**
47    * @brief The start and end property ranges for this control.
48    * @SINCE_1_1.4
49    */
50   enum PropertyRange
51   {
52     PROPERTY_START_INDEX = Control::CONTROL_PROPERTY_END_INDEX + 1,  ///< @SINCE_1_1.4
53     PROPERTY_END_INDEX =   PROPERTY_START_INDEX + 1000,              ///< Reserve property indices @SINCE_1_1.4
54
55     ANIMATABLE_PROPERTY_START_INDEX = ANIMATABLE_PROPERTY_REGISTRATION_START_INDEX,                    ///< @SINCE_1_1.4
56     ANIMATABLE_PROPERTY_END_INDEX =   ANIMATABLE_PROPERTY_REGISTRATION_START_INDEX + 1000              ///< Reserve animatable property indices @SINCE_1_1.4
57   };
58
59   /**
60    * @brief An enumeration of properties belonging to the TextLabel class.
61    * @SINCE_1_1.4
62    */
63   struct Property
64   {
65     enum
66     {
67       GEOMETRY_URL = PROPERTY_START_INDEX,  ///< name "geometryUrl",       The path to the geometry file,    type STRING @SINCE_1_1.4
68       MATERIAL_URL,                         ///< name "materialUrl",       The path to the material file,    type STRING @SINCE_1_1.4
69       IMAGES_URL,                           ///< name "imagesUrl",         The path to the images directory, type STRING @SINCE_1_1.4
70       ILLUMINATION_TYPE,                    ///< name "illuminationType",  The type of illumination,         type INTEGER @SINCE_1_1.4
71       TEXTURE0_URL,                         ///< name "texture0Url",       The path to first texture,        type STRING @SINCE_1_1.4
72       TEXTURE1_URL,                         ///< name "texture1Url",       The path to second texture,       type STRING @SINCE_1_1.4
73       TEXTURE2_URL,                         ///< name "texture2Url",       The path to third texture,        type STRING @SINCE_1_1.4
74
75       LIGHT_POSITION = ANIMATABLE_PROPERTY_START_INDEX    ///< name "lightPosition",     The coordinates of the light,     type Vector3 @SINCE_1_1.4
76     };
77   };
78
79   enum IlluminationType
80   {
81     DIFFUSE,
82     DIFFUSE_WITH_TEXTURE,
83     DIFFUSE_WITH_NORMAL_MAP
84   };
85
86
87   /**
88    * @brief Create a new instance of a Model3dView control.
89    *
90    * @SINCE_1_1.4
91    * @return A handle to the new Model3dView control.
92    */
93   static Model3dView New();
94
95   /**
96    * @brief Create a new instance of a Model3dView control.
97    *
98    * @SINCE_1_1.4
99    * @return A handle to the new Model3dView control.
100    */
101   static Model3dView New( const std::string& objUrl, const std::string& mtlUrl, const std::string& imagesUrl );
102
103
104   /**
105    * @brief Create an uninitialized Model3dView
106    *
107    * Only derived versions can be instantiated.  Calling member
108    * functions with an uninitialized Dali::Object is not allowed.
109    * @SINCE_1_1.4
110    */
111   Model3dView();
112
113   /**
114    * @brief Destructor
115    *
116    * This is non-virtual since derived Handle types must not contain data or virtual methods.
117    * @SINCE_1_1.4
118    */
119   ~Model3dView();
120
121   /**
122    * @brief Copy constructor.
123    * @SINCE_1_1.4
124    */
125   Model3dView( const Model3dView& model3dView );
126
127   /**
128    * @brief Assignment operator.
129    * @SINCE_1_1.4
130    */
131   Model3dView& operator=( const Model3dView& model3dView );
132
133   /**
134    * @brief Downcast an Object handle to Model3dView.
135    *
136    * If handle points to a Model3dView the downcast produces valid
137    * handle. If not the returned handle is left uninitialized.
138    *
139    * @SINCE_1_1.4
140    * @param[in] handle Handle to an object
141    * @return handle to a Model3dView or an uninitialized handle
142    */
143   static Model3dView DownCast( BaseHandle handle );
144
145 public: // Not intended for application developers
146
147   /**
148    * @brief Creates a handle using the Toolkit::Internal implementation.
149    *
150    * @SINCE_1_1.4
151    * @param[in]  implementation  The Control implementation.
152    */
153   DALI_INTERNAL Model3dView( Internal::Model3dView& implementation );
154
155   /**
156    * @brief Allows the creation of this Control from an Internal::CustomActor pointer.
157    *
158    * @SINCE_1_1.4
159    * @param[in]  internal  A pointer to the internal CustomActor.
160    */
161   DALI_INTERNAL Model3dView( Dali::Internal::CustomActor* internal );
162
163 };
164
165 } // namespace Toolkit
166
167 } // namespace Dali
168
169 #endif // __DALI_TOOLKIT_MODEL3D_VIEW_H__