1 #ifndef __DALI_MODEL_DATA_H__
2 #define __DALI_MODEL_DATA_H__
5 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
26 #include <dali/public-api/modeling/model-animation-map.h>
27 #include <dali/public-api/object/base-handle.h>
29 namespace Dali DALI_IMPORT_API
37 namespace Internal DALI_INTERNAL
43 * @brief Encapsulates a Dali 3D model/scene.
45 * This is usually generated by an external model loader (and is also
46 * used internally with the default model loader).
48 class ModelData : public BaseHandle
53 * @brief Constructs an uninitialized handle.
58 * @brief Create an initialized ModelData.
60 * @param[in] name The name of the model.
61 * @return A handle to a newly allocated Dali resource.
63 static ModelData New(const std::string& name);
66 * @brief Downcast an Object handle to ModelData handle.
68 * If handle points to a ModelData object the downcast produces
69 * valid handle. If not the returned handle is left uninitialized.
71 * @param[in] handle to An object
72 * @return handle to a ModelData object or an uninitialized handle
74 static ModelData DownCast( BaseHandle handle );
79 * This is non-virtual since derived Handle types must not contain data or virtual methods.
84 * @copydoc Dali::BaseHandle::operator=
86 using BaseHandle::operator=;
89 * @brief Returns the name of the model.
91 * @return The model name
93 const std::string& GetName() const;
96 * @brief Set the root Entity of the model.
98 * @param root A handle to the root entity
100 void SetRootEntity(Entity root);
103 * @brief Get the root Entity of the model.
105 * @return The root entity
107 Entity GetRootEntity() const;
110 * @brief Add a mesh to the model.
112 * @param mesh The mesh data to add.
114 void AddMesh(MeshData& mesh);
117 * @brief Get a mesh by index.
119 * @param[in] index The zero based index to a mesh
122 const MeshData& GetMesh(unsigned int index) const;
125 * @brief Get a mesh by index.
127 * @param[in] index The zero based index to a mesh
130 MeshData& GetMesh(unsigned int index);
133 * @brief Get Mesh count.
135 * @returns number of meshes
137 unsigned int NumberOfMeshes() const;
140 * @brief Add material to the model.
142 * @param[in] material - the material to add to the model
144 void AddMaterial(Material material);
147 * @brief Get a material by index.
149 * @param[in] index The index to a material
150 * @return A handle to a material, or NULL.
152 Material GetMaterial(unsigned int index) const;
155 * @brief Get material count.
157 * @return The Number of materials
159 unsigned int NumberOfMaterials() const;
162 * @brief Get animation map container.
164 * @return reference to the animation map container.
166 ModelAnimationMapContainer& GetAnimationMapContainer();
169 * @brief Get an animation map from the model data.
171 * @deprecated Use ModelActorFactory to generate animations
172 * @param[in] index The index of the animation map.
173 * @return a pointer to model animation map.
175 const ModelAnimationMap* GetAnimationMap (unsigned int index) const;
178 * @brief Get the animation for the given name.
180 * @deprecated Use ModelActorFactory to generate animations
181 * @param[in] name The name of an animation map to search for.
182 * @return a pointer to model animation map.
184 const ModelAnimationMap* GetAnimationMap (const std::string& name) const;
187 * @brief Find the index for the given animation name.
189 * @param[in] name The name of the animation map to search for.
190 * @param[out] index The index of the found map
191 * @return true if the name was found, false otherwise.
193 bool FindAnimation (const std::string& name, unsigned int& index) const;
196 * @return the number of animations defined for this model
198 unsigned int NumberOfAnimationMaps() const;
201 * @brief Add a light to the model.
203 * @param light - the light to add to the model
205 void AddLight(Light light);
208 * @brief Get a light by index.
210 * @param[in] index The zero based index to a light
211 * @return A pointer to a light, or NULL.
213 Light GetLight(unsigned int index) const;
216 * @brief Get the number of lights contained in the model.
218 * @return The number of lights contained in the model.
220 unsigned int NumberOfLights() const;
223 * @brief Read the model data from an open streambuf.
225 * @param[in] buf A streambuf opened for reading
226 * @return true if data was read successfully.
228 bool Read(std::streambuf& buf);
231 * @brief Write the model data to an open streambuf.
233 * @param[in] buf A streambuf opened for writing
234 * @return true if data was written successfully.
236 bool Write(std::streambuf& buf) const;
238 public: // Not intended for application developers
240 * @brief This constructor is used by Dali New() methods.
242 * @param[in] modelData A pointer to a newly allocated modelData
244 explicit DALI_INTERNAL ModelData(Internal::ModelData* modelData);
246 }; // Class ModelData
250 #endif // __DALI_MODEL_DATA_H__