2 * Copyright (c) 2023 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali-scene3d/internal/model-components/model-node-impl.h>
22 #include <dali/integration-api/debug.h>
25 #include <dali-scene3d/internal/model-components/model-node-data-impl.h>
33 Dali::Scene3D::ModelNode ModelNode::New()
35 // Create the implementation, temporarily owned on stack
36 IntrusivePtr<ModelNode> nodeImpl = new ModelNode();
38 // Pass ownership to handle
39 Scene3D::ModelNode handle(*nodeImpl);
41 // Second-phase init of the implementation
42 // This can only be done after the CustomActor connection has been made...
43 nodeImpl->Initialize();
48 ModelNode::ModelNode()
49 : CustomActorImpl(ActorFlags::DISABLE_SIZE_NEGOTIATION),
50 mImpl(new Impl(*this))
54 ModelNode::~ModelNode()
58 void ModelNode::Initialize()
63 void ModelNode::OnInitialize()
67 void ModelNode::OnSceneConnection(int depth)
69 mImpl->OnSceneConnection(depth);
72 void ModelNode::OnSceneDisconnection()
74 mImpl->OnSceneDisconnection();
77 void ModelNode::OnChildAdd(Actor& child)
81 void ModelNode::OnChildRemove(Actor& child)
85 void ModelNode::OnPropertySet(Property::Index index, const Property::Value& propertyValue)
89 void ModelNode::OnSizeSet(const Vector3& targetSize)
93 void ModelNode::OnSizeAnimation(Animation& animation, const Vector3& targetSize)
95 // @todo size negotiate background to new size, animate as well?
98 void ModelNode::OnRelayout(const Vector2& size, RelayoutContainer& container)
102 void ModelNode::OnSetResizePolicy(ResizePolicy::Type policy, Dimension::Type dimension)
106 Vector3 ModelNode::GetNaturalSize()
108 return Vector3::ZERO;
111 float ModelNode::CalculateChildSize(const Dali::Actor& child, Dimension::Type dimension)
116 float ModelNode::GetHeightForWidth(float width)
121 float ModelNode::GetWidthForHeight(float height)
126 bool ModelNode::RelayoutDependentOnChildren(Dimension::Type dimension)
131 void ModelNode::OnCalculateRelayoutSize(Dimension::Type dimension)
135 void ModelNode::OnLayoutNegotiated(float size, Dimension::Type dimension)
139 ModelNode& GetImplementation(Dali::Scene3D::ModelNode& handle)
141 CustomActorImpl& customInterface = handle.GetImplementation();
142 ModelNode& impl = dynamic_cast<Internal::ModelNode&>(customInterface);
146 const ModelNode& GetImplementation(const Dali::Scene3D::ModelNode& handle)
148 const CustomActorImpl& customInterface = handle.GetImplementation();
149 // downcast to control
150 const ModelNode& impl = dynamic_cast<const Internal::ModelNode&>(customInterface);
156 uint32_t ModelNode::GetModelPrimitiveCount() const
158 return mImpl->GetModelPrimitiveCount();
161 void ModelNode::AddModelPrimitive(Dali::Scene3D::ModelPrimitive modelPrimitive)
163 mImpl->AddModelPrimitive(modelPrimitive);
166 void ModelNode::RemoveModelPrimitive(Dali::Scene3D::ModelPrimitive modelPrimitive)
168 mImpl->RemoveModelPrimitive(modelPrimitive);
171 void ModelNode::RemoveModelPrimitive(uint32_t index)
173 mImpl->RemoveModelPrimitive(index);
176 Dali::Scene3D::ModelPrimitive ModelNode::GetModelPrimitive(uint32_t index) const
178 return mImpl->GetModelPrimitive(index);
181 Scene3D::ModelNode ModelNode::FindChildModelNodeByName(std::string_view nodeName)
183 Actor childActor = Self().FindChildByName(nodeName);
184 return Scene3D::ModelNode::DownCast(childActor);
187 void ModelNode::SetImageBasedLightTexture(Dali::Texture diffuseTexture, Dali::Texture specularTexture, float iblScaleFactor, uint32_t specularMipmapLevels)
189 mImpl->SetImageBasedLightTexture(diffuseTexture, specularTexture, iblScaleFactor, specularMipmapLevels);
192 void ModelNode::SetImageBasedLightScaleFactor(float iblScaleFactor)
194 mImpl->SetImageBasedLightScaleFactor(iblScaleFactor);
197 void ModelNode::SetBlendShapeData(Scene3D::Loader::BlendShapes::BlendShapeData& data, Scene3D::ModelPrimitive primitive)
199 mImpl->SetBlendShapeData(data, primitive);
202 void ModelNode::SetBoneMatrix(const Matrix& inverseMatrix, Scene3D::ModelPrimitive primitive, Scene3D::Loader::Index& boneIndex)
204 mImpl->SetBoneMatrix(inverseMatrix, primitive, boneIndex);
207 } // namespace Internal
209 } // namespace Scene3D