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>
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 DALI_IMPORT_API 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 * @brief This copy constructor is required for (smart) pointer semantics.
86 * @param [in] handle A reference to the copied handle
88 ModelData(const ModelData& handle);
91 * @brief This assignment operator is required for (smart) pointer semantics.
93 * @param [in] rhs A reference to the copied handle
94 * @return A reference to this
96 ModelData& operator=(const ModelData& rhs);
99 * @brief Returns the name of the model.
101 * @return The model name
103 const std::string& GetName() const;
106 * @brief Set the root Entity of the model.
108 * @param root A handle to the root entity
110 void SetRootEntity(Entity root);
113 * @brief Get the root Entity of the model.
115 * @return The root entity
117 Entity GetRootEntity() const;
120 * @brief Add a mesh to the model.
122 * @param mesh The mesh data to add.
124 void AddMesh(MeshData& mesh);
127 * @brief Get a mesh by index.
129 * @param[in] index The zero based index to a mesh
132 const MeshData& GetMesh(unsigned int index) const;
135 * @brief Get a mesh by index.
137 * @param[in] index The zero based index to a mesh
140 MeshData& GetMesh(unsigned int index);
143 * @brief Get Mesh count.
145 * @returns number of meshes
147 unsigned int NumberOfMeshes() const;
150 * @brief Add material to the model.
152 * @param[in] material - the material to add to the model
154 void AddMaterial(Material material);
157 * @brief Get a material by index.
159 * @param[in] index The index to a material
160 * @return A handle to a material, or NULL.
162 Material GetMaterial(unsigned int index) const;
165 * @brief Get material count.
167 * @return The Number of materials
169 unsigned int NumberOfMaterials() const;
172 * @brief Get animation map container.
174 * @return reference to the animation map container.
176 ModelAnimationMapContainer& GetAnimationMapContainer();
179 * @brief Find the index for the given animation name.
181 * @param[in] name The name of the animation map to search for.
182 * @param[out] index The index of the found map
183 * @return true if the name was found, false otherwise.
185 bool FindAnimation (const std::string& name, unsigned int& index) const;
188 * @return the number of animations defined for this model
190 unsigned int NumberOfAnimationMaps() const;
193 * @brief Add a light to the model.
195 * @param light - the light to add to the model
197 void AddLight(Light light);
200 * @brief Get a light by index.
202 * @param[in] index The zero based index to a light
203 * @return A pointer to a light, or NULL.
205 Light GetLight(unsigned int index) const;
208 * @brief Get the number of lights contained in the model.
210 * @return The number of lights contained in the model.
212 unsigned int NumberOfLights() const;
215 * @brief Read the model data from an open streambuf.
217 * @param[in] buf A streambuf opened for reading
218 * @return true if data was read successfully.
220 bool Read(std::streambuf& buf);
223 * @brief Write the model data to an open streambuf.
225 * @param[in] buf A streambuf opened for writing
226 * @return true if data was written successfully.
228 bool Write(std::streambuf& buf) const;
230 public: // Not intended for application developers
232 * @brief This constructor is used by Dali New() methods.
234 * @param[in] modelData A pointer to a newly allocated modelData
236 explicit DALI_INTERNAL ModelData(Internal::ModelData* modelData);
238 }; // Class ModelData
242 #endif // __DALI_MODEL_DATA_H__