2 * Copyright (c) 2016 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/internal/update/manager/transform-manager.h>
26 #include <dali/public-api/common/constants.h>
27 #include <dali/public-api/common/compile-time-assert.h>
28 #include <dali/internal/common/math.h>
41 //Default values for scale (1.0,1.0,1.0), orientation (Identity) and position (0.0,0.0,0.0)
42 static const float gDefaultTransformComponentAnimatableData[] = { 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f };
44 //Default values for anchor point (CENTER) and parent origin (TOP_LEFT)
45 static const float gDefaultTransformComponentStaticData[] = { 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 0.5f };
47 DALI_COMPILE_TIME_ASSERT( sizeof(gDefaultTransformComponentAnimatableData) == sizeof(TransformComponentAnimatable) );
48 DALI_COMPILE_TIME_ASSERT( sizeof(gDefaultTransformComponentStaticData) == sizeof(TransformComponentStatic) );
51 TransformManager::TransformManager()
56 TransformManager::~TransformManager()
59 TransformId TransformManager::CreateTransform()
61 //Get id for the new component
62 TransformId id = mIds.Add(mComponentCount);
64 if( mTxComponentAnimatable.Size() <= mComponentCount )
66 //Make room for another component
67 mTxComponentAnimatable.PushBack(TransformComponentAnimatable());
68 mTxComponentStatic.PushBack(TransformComponentStatic());
69 mInheritanceMode.PushBack(INHERIT_ALL);
70 mComponentId.PushBack(id);
71 mSize.PushBack(Vector3(0.0f,0.0f,0.0f));
72 mParent.PushBack(INVALID_TRANSFORM_ID);
73 mWorld.PushBack(Matrix::IDENTITY);
74 mLocal.PushBack(Matrix::IDENTITY);
75 mBoundingSpheres.PushBack( Vector4(0.0f,0.0f,0.0f,0.0f) );
76 mTxComponentAnimatableBaseValue.PushBack(TransformComponentAnimatable());
77 mSizeBase.PushBack(Vector3(0.0f,0.0f,0.0f));
78 mComponentDirty.PushBack(false);
79 mLocalMatrixDirty.PushBack(false);
84 memcpy( &mTxComponentAnimatable[mComponentCount], &gDefaultTransformComponentAnimatableData, sizeof( TransformComponentAnimatable ) );
85 memcpy( &mTxComponentStatic[mComponentCount], &gDefaultTransformComponentStaticData, sizeof( TransformComponentStatic ) );
86 memcpy( &mTxComponentAnimatableBaseValue[mComponentCount], &gDefaultTransformComponentAnimatableData, sizeof( TransformComponentAnimatable ) );
87 mInheritanceMode[mComponentCount] = INHERIT_ALL;
88 mComponentId[mComponentCount] = id;
89 mSize[mComponentCount] = Vector3(0.0f,0.0f,0.0f);
90 mParent[mComponentCount] = INVALID_TRANSFORM_ID;
91 mLocal[mComponentCount].SetIdentity();
92 mWorld[mComponentCount].SetIdentity();
93 mBoundingSpheres[mComponentCount] = Vector4(0.0f,0.0f,0.0f,0.0f);
94 mSizeBase[mComponentCount] = Vector3(0.0f,0.0f,0.0f);
95 mComponentDirty[mComponentCount] = false;
96 mLocalMatrixDirty[mComponentCount] = false;
103 void TransformManager::RemoveTransform(TransformId id)
105 //Move the last element to the gap
107 unsigned int index = mIds[id];
108 mTxComponentAnimatable[index] = mTxComponentAnimatable[mComponentCount];
109 mTxComponentStatic[index] = mTxComponentStatic[mComponentCount];
110 mInheritanceMode[index] = mInheritanceMode[mComponentCount];
111 mSize[index] = mSize[mComponentCount];
112 mParent[index] = mParent[mComponentCount];
113 mWorld[index] = mWorld[mComponentCount];
114 mLocal[index] = mLocal[mComponentCount];
115 mTxComponentAnimatableBaseValue[index] = mTxComponentAnimatableBaseValue[mComponentCount];
116 mSizeBase[index] = mSizeBase[mComponentCount];
117 mComponentDirty[index] = mComponentDirty[mComponentCount];
118 mLocalMatrixDirty[index] = mLocalMatrixDirty[mComponentCount];
119 mBoundingSpheres[index] = mBoundingSpheres[mComponentCount];
121 TransformId lastItemId = mComponentId[mComponentCount];
122 mIds[ lastItemId ] = index;
123 mComponentId[index] = lastItemId;
129 void TransformManager::SetParent( TransformId id, TransformId parentId )
131 DALI_ASSERT_ALWAYS( id != parentId );
132 unsigned int index = mIds[id];
133 mParent[ index ] = parentId;
134 mComponentDirty[ index ] = true;
138 const Matrix& TransformManager::GetWorldMatrix( TransformId id ) const
140 return mWorld[ mIds[id] ];
143 Matrix& TransformManager::GetWorldMatrix( TransformId id )
145 return mWorld[ mIds[id] ];
148 void TransformManager::SetInheritPosition( TransformId id, bool inherit )
150 unsigned int index = mIds[id];
153 mInheritanceMode[ index ] |= INHERIT_POSITION;
157 mInheritanceMode[ index ] &= ~INHERIT_POSITION;
160 mComponentDirty[index] = true;
163 void TransformManager::SetInheritScale( TransformId id, bool inherit )
165 unsigned int index = mIds[id];
168 mInheritanceMode[ index ] |= INHERIT_SCALE;
172 mInheritanceMode[ index ] &= ~INHERIT_SCALE;
175 mComponentDirty[index] = true;
178 void TransformManager::SetInheritOrientation( TransformId id, bool inherit )
180 unsigned int index = mIds[id];
183 mInheritanceMode[ index ] |= INHERIT_ORIENTATION;
187 mInheritanceMode[ index ] &= ~INHERIT_ORIENTATION;
190 mComponentDirty[index] = true;
193 void TransformManager::ResetToBaseValue()
195 if( mComponentCount )
197 memcpy( &mTxComponentAnimatable[0], &mTxComponentAnimatableBaseValue[0], sizeof(TransformComponentAnimatable)*mComponentCount );
198 memcpy( &mSize[0], &mSizeBase[0], sizeof(Vector3)*mComponentCount );
199 memset( &mLocalMatrixDirty[0], false, sizeof(bool)*mComponentCount );
203 void TransformManager::Update()
207 //If some transform component has change its parent or has been removed since last update
208 //we need to reorder the vectors
213 //Iterate through all components to compute its world matrix
214 Vector3 anchorPosition;
215 Vector3 localPosition;
216 Vector3 half( 0.5f,0.5f,0.5f );
217 for( unsigned int i(0); i<mComponentCount; ++i )
219 if( DALI_LIKELY( mInheritanceMode[i] != DONT_INHERIT_TRANSFORM && mParent[i] != INVALID_TRANSFORM_ID ) )
221 const unsigned int& parentIndex = mIds[mParent[i] ];
222 if( DALI_LIKELY( mInheritanceMode[i] == INHERIT_ALL ) )
224 if( mComponentDirty[i] || mLocalMatrixDirty[parentIndex])
226 //Full transform inherited
227 mLocalMatrixDirty[i] = true;
229 anchorPosition = ( half - mTxComponentStatic[i].mAnchorPoint ) * mSize[i] * mTxComponentAnimatable[i].mScale;
230 anchorPosition *= mTxComponentAnimatable[i].mOrientation;
231 localPosition = mTxComponentAnimatable[i].mPosition + anchorPosition + ( mTxComponentStatic[i].mParentOrigin - half ) * mSize[parentIndex];
232 mLocal[i].SetTransformComponents( mTxComponentAnimatable[i].mScale,mTxComponentAnimatable[i].mOrientation, localPosition );
235 //Update the world matrix
236 Matrix::Multiply( mWorld[i], mLocal[i], mWorld[parentIndex]);
240 //Some components are not inherited
241 Vector3 parentPosition, parentScale;
242 Quaternion parentOrientation;
243 const Matrix& parentMatrix = mWorld[parentIndex];
244 parentMatrix.GetTransformComponents( parentPosition, parentOrientation, parentScale );
246 Vector3 localScale = mTxComponentAnimatable[i].mScale;
247 if( (mInheritanceMode[i] & INHERIT_SCALE) == 0 )
249 //Don't inherit scale
250 localScale /= parentScale;
253 Quaternion localOrientation( mTxComponentAnimatable[i].mOrientation );
254 if( (mInheritanceMode[i] & INHERIT_ORIENTATION) == 0 )
256 //Don't inherit orientation
257 parentOrientation.Invert();
258 localOrientation = parentOrientation * mTxComponentAnimatable[i].mOrientation;
261 if( (mInheritanceMode[i] & INHERIT_POSITION) == 0 )
263 //Don't inherit position
264 mLocal[i].SetTransformComponents( localScale, localOrientation, Vector3::ZERO );
265 Matrix::Multiply( mWorld[i], mLocal[i], parentMatrix );
266 mWorld[i].SetTranslation( mTxComponentAnimatable[i].mPosition);
270 anchorPosition = ( half - mTxComponentStatic[i].mAnchorPoint ) * mSize[i] * mTxComponentAnimatable[i].mScale;
271 anchorPosition *= mTxComponentAnimatable[i].mOrientation;
272 localPosition = mTxComponentAnimatable[i].mPosition + anchorPosition + ( mTxComponentStatic[i].mParentOrigin - half ) * mSize[parentIndex];
273 mLocal[i].SetTransformComponents( localScale, localOrientation, localPosition );
274 Matrix::Multiply( mWorld[i], mLocal[i], parentMatrix );
277 mLocalMatrixDirty[i] = true;
280 else //Component has no parent or doesn't inherit transform
282 anchorPosition = ( half - mTxComponentStatic[i].mAnchorPoint ) * mSize[i] * mTxComponentAnimatable[i].mScale;
283 anchorPosition *= mTxComponentAnimatable[i].mOrientation;
284 localPosition = mTxComponentAnimatable[i].mPosition + anchorPosition;
285 mLocal[i].SetTransformComponents( mTxComponentAnimatable[i].mScale, mTxComponentAnimatable[i].mOrientation, localPosition );
286 mWorld[i] = mLocal[i];
287 mLocalMatrixDirty[i] = true;
290 //Update the bounding sphere
291 Vec3 centerToEdge = { mSize[i].Length() * 0.5f, 0.0f, 0.0f };
292 Vec3 centerToEdgeWorldSpace;
293 TransformVector3( centerToEdgeWorldSpace, mWorld[i].AsFloat(), centerToEdge );
295 mBoundingSpheres[i] = mWorld[i].GetTranslation();
296 mBoundingSpheres[i].w = Length( centerToEdgeWorldSpace );
298 mComponentDirty[i] = false;
302 void TransformManager::SwapComponents( unsigned int i, unsigned int j )
304 std::swap( mTxComponentAnimatable[i], mTxComponentAnimatable[j] );
305 std::swap( mTxComponentStatic[i], mTxComponentStatic[j] );
306 std::swap( mInheritanceMode[i], mInheritanceMode[j] );
307 std::swap( mSize[i], mSize[j] );
308 std::swap( mParent[i], mParent[j] );
309 std::swap( mComponentId[i], mComponentId[j] );
310 std::swap( mTxComponentAnimatableBaseValue[i], mTxComponentAnimatableBaseValue[j] );
311 std::swap( mSizeBase[i], mSizeBase[j] );
312 std::swap( mLocal[i], mLocal[j] );
313 std::swap( mComponentDirty[i], mComponentDirty[j] );
314 std::swap( mBoundingSpheres[i], mBoundingSpheres[j] );
315 std::swap( mWorld[i], mWorld[j] );
317 mIds[ mComponentId[i] ] = i;
318 mIds[ mComponentId[j] ] = j;
321 void TransformManager::ReorderComponents()
323 mOrderedComponents.Resize(mComponentCount);
325 TransformId parentId;
326 for( size_t i(0); i<mComponentCount; ++i )
328 mOrderedComponents[i].id = mComponentId[i];
329 mOrderedComponents[i].level = 0u;
331 parentId = mParent[i];
332 while( parentId != INVALID_TRANSFORM_ID )
334 mOrderedComponents[i].level++;
335 parentId = mParent[ mIds[parentId] ];
339 std::stable_sort( mOrderedComponents.Begin(), mOrderedComponents.End());
340 unsigned int previousIndex = 0;
341 for( size_t newIndex(0); newIndex<mComponentCount-1; ++newIndex )
343 previousIndex = mIds[mOrderedComponents[newIndex].id];
344 if( previousIndex != newIndex )
346 SwapComponents( previousIndex, newIndex);
351 Vector3& TransformManager::GetVector3PropertyValue( TransformId id, TransformManagerProperty property )
355 case TRANSFORM_PROPERTY_POSITION:
357 unsigned int index( mIds[id] );
358 mComponentDirty[ index ] = true;
359 return mTxComponentAnimatable[ index ].mPosition;
361 case TRANSFORM_PROPERTY_SCALE:
363 unsigned int index( mIds[id] );
364 mComponentDirty[ index ] = true;
365 return mTxComponentAnimatable[ index ].mScale;
367 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
369 unsigned int index( mIds[id] );
370 mComponentDirty[ index ] = true;
371 return mTxComponentStatic[ index ].mParentOrigin;
373 case TRANSFORM_PROPERTY_ANCHOR_POINT:
375 unsigned int index( mIds[id] );
376 mComponentDirty[ index ] = true;
377 return mTxComponentStatic[ index ].mAnchorPoint;
379 case TRANSFORM_PROPERTY_SIZE:
381 unsigned int index( mIds[id] );
382 mComponentDirty[ index ] = true;
383 return mSize[ index ];
387 DALI_ASSERT_ALWAYS(false);
388 return mTxComponentAnimatable[ mIds[id] ].mPosition;
393 const Vector3& TransformManager::GetVector3PropertyValue( TransformId id, TransformManagerProperty property ) const
397 case TRANSFORM_PROPERTY_POSITION:
399 return mTxComponentAnimatable[ mIds[id] ].mPosition;
401 case TRANSFORM_PROPERTY_SCALE:
403 return mTxComponentAnimatable[ mIds[id] ].mScale;
405 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
407 return mTxComponentStatic[ mIds[id] ].mParentOrigin;
409 case TRANSFORM_PROPERTY_ANCHOR_POINT:
411 return mTxComponentStatic[ mIds[id] ].mAnchorPoint;
413 case TRANSFORM_PROPERTY_SIZE:
415 return mSize[ mIds[id] ];
419 DALI_ASSERT_ALWAYS(false);
420 return mTxComponentAnimatable[ mIds[id] ].mPosition;
425 const float& TransformManager::GetVector3PropertyComponentValue(TransformId id, TransformManagerProperty property, unsigned int component ) const
429 case TRANSFORM_PROPERTY_POSITION:
431 return mTxComponentAnimatable[ mIds[id] ].mPosition[component];
433 case TRANSFORM_PROPERTY_SCALE:
435 return mTxComponentAnimatable[ mIds[id] ].mScale[component];
437 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
439 return mTxComponentStatic[ mIds[id] ].mParentOrigin[component];
441 case TRANSFORM_PROPERTY_ANCHOR_POINT:
443 return mTxComponentStatic[ mIds[id] ].mAnchorPoint[component];
445 case TRANSFORM_PROPERTY_SIZE:
447 return mSize[ mIds[id] ][component];
451 DALI_ASSERT_ALWAYS(false);
452 return mTxComponentAnimatable[ mIds[id] ].mPosition[component];
457 void TransformManager::SetVector3PropertyValue( TransformId id, TransformManagerProperty property, const Vector3& value )
459 unsigned int index( mIds[id] );
460 mComponentDirty[ index ] = true;
464 case TRANSFORM_PROPERTY_POSITION:
466 mTxComponentAnimatable[ index ].mPosition = value;
469 case TRANSFORM_PROPERTY_SCALE:
471 mTxComponentAnimatable[ index ].mScale = value;
474 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
476 mTxComponentStatic[ index ].mParentOrigin = value;
479 case TRANSFORM_PROPERTY_ANCHOR_POINT:
481 mTxComponentStatic[ index ].mAnchorPoint = value;
484 case TRANSFORM_PROPERTY_SIZE:
486 mSize[ index ] = value;
491 DALI_ASSERT_ALWAYS(false);
496 void TransformManager::SetVector3PropertyComponentValue( TransformId id, TransformManagerProperty property, float value, unsigned int component )
498 unsigned int index( mIds[id] );
499 mComponentDirty[ index ] = true;
503 case TRANSFORM_PROPERTY_POSITION:
505 mTxComponentAnimatable[ index ].mPosition[component] = value;
508 case TRANSFORM_PROPERTY_SCALE:
510 mTxComponentAnimatable[ index ].mScale[component] = value;
513 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
515 mTxComponentStatic[ index ].mParentOrigin[component] = value;
518 case TRANSFORM_PROPERTY_ANCHOR_POINT:
520 mTxComponentStatic[ index ].mAnchorPoint[component] = value;
523 case TRANSFORM_PROPERTY_SIZE:
525 mSize[ index ][component] = value;
530 DALI_ASSERT_ALWAYS(false);
535 void TransformManager::BakeVector3PropertyValue( TransformId id, TransformManagerProperty property, const Vector3& value )
537 unsigned int index( mIds[id] );
538 mComponentDirty[ index ] = true;
542 case TRANSFORM_PROPERTY_POSITION:
544 mTxComponentAnimatable[ index ].mPosition = mTxComponentAnimatableBaseValue[index].mPosition = value;
547 case TRANSFORM_PROPERTY_SCALE:
549 mTxComponentAnimatable[ index ].mScale = mTxComponentAnimatableBaseValue[index].mScale = value;
552 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
554 mTxComponentStatic[ index ].mParentOrigin = value;
557 case TRANSFORM_PROPERTY_ANCHOR_POINT:
559 mTxComponentStatic[ index ].mAnchorPoint = value;
562 case TRANSFORM_PROPERTY_SIZE:
564 mSize[ index ] = mSizeBase[index] = value;
569 DALI_ASSERT_ALWAYS(false);
574 void TransformManager::BakeRelativeVector3PropertyValue( TransformId id, TransformManagerProperty property, const Vector3& value )
576 unsigned int index( mIds[id] );
577 mComponentDirty[ index ] = true;
581 case TRANSFORM_PROPERTY_POSITION:
583 mTxComponentAnimatable[ index ].mPosition = mTxComponentAnimatableBaseValue[index].mPosition = mTxComponentAnimatable[ index ].mPosition + value;
586 case TRANSFORM_PROPERTY_SCALE:
588 mTxComponentAnimatable[ index ].mScale = mTxComponentAnimatableBaseValue[index].mScale = mTxComponentAnimatable[ index ].mScale + value;
591 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
593 mTxComponentStatic[ index ].mParentOrigin = mTxComponentStatic[ index ].mParentOrigin + value;
596 case TRANSFORM_PROPERTY_ANCHOR_POINT:
598 mTxComponentStatic[ index ].mAnchorPoint = mTxComponentStatic[ index ].mAnchorPoint + value;
601 case TRANSFORM_PROPERTY_SIZE:
603 mSize[ index ] = mSizeBase[index] = mSize[ index ] + value;
608 DALI_ASSERT_ALWAYS(false);
613 void TransformManager::BakeMultiplyVector3PropertyValue( TransformId id, TransformManagerProperty property, const Vector3& value )
615 unsigned int index( mIds[id] );
616 mComponentDirty[ index ] = true;
620 case TRANSFORM_PROPERTY_POSITION:
622 mTxComponentAnimatable[ index ].mPosition = mTxComponentAnimatableBaseValue[index].mPosition = mTxComponentAnimatable[ index ].mPosition * value;
625 case TRANSFORM_PROPERTY_SCALE:
627 mTxComponentAnimatable[ index ].mScale = mTxComponentAnimatableBaseValue[index].mScale = mTxComponentAnimatable[ index ].mScale * value;
630 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
632 mTxComponentStatic[ index ].mParentOrigin = mTxComponentStatic[ index ].mParentOrigin * value;
635 case TRANSFORM_PROPERTY_ANCHOR_POINT:
637 mTxComponentStatic[ index ].mAnchorPoint = mTxComponentStatic[ index ].mAnchorPoint * value;
640 case TRANSFORM_PROPERTY_SIZE:
642 mSize[ index ] = mSizeBase[index] = mSize[ index ] * value;
647 DALI_ASSERT_ALWAYS(false);
652 void TransformManager::BakeVector3PropertyComponentValue( TransformId id, TransformManagerProperty property, float value, unsigned int component )
654 unsigned int index( mIds[id] );
655 mComponentDirty[ index ] = true;
659 case TRANSFORM_PROPERTY_POSITION:
661 mTxComponentAnimatable[ index ].mPosition[component] = mTxComponentAnimatableBaseValue[index].mPosition[component] = value;
664 case TRANSFORM_PROPERTY_SCALE:
666 mTxComponentAnimatable[ index ].mScale[component] = mTxComponentAnimatableBaseValue[index].mScale[component] = value;
669 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
671 mTxComponentStatic[ index ].mParentOrigin[component] = value;
674 case TRANSFORM_PROPERTY_ANCHOR_POINT:
676 mTxComponentStatic[ index ].mAnchorPoint[component] = value;
679 case TRANSFORM_PROPERTY_SIZE:
681 mSize[ index ][component] = mSizeBase[index][component] = value;
686 DALI_ASSERT_ALWAYS(false);
691 void TransformManager::BakeXVector3PropertyValue( TransformId id, TransformManagerProperty property, float value )
693 unsigned int index( mIds[id] );
694 mComponentDirty[ index ] = true;
698 case TRANSFORM_PROPERTY_POSITION:
700 mTxComponentAnimatable[ index ].mPosition.x = mTxComponentAnimatableBaseValue[index].mPosition.x = value;
703 case TRANSFORM_PROPERTY_SCALE:
705 mTxComponentAnimatable[ index ].mScale.x = mTxComponentAnimatableBaseValue[index].mScale.x = value;
708 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
710 mTxComponentStatic[ index ].mParentOrigin.x = value;
713 case TRANSFORM_PROPERTY_ANCHOR_POINT:
715 mTxComponentStatic[ index ].mAnchorPoint.x = value;
718 case TRANSFORM_PROPERTY_SIZE:
720 mSize[ index ].x = mSizeBase[index].x = value;
725 DALI_ASSERT_ALWAYS(false);
730 void TransformManager::BakeYVector3PropertyValue( TransformId id, TransformManagerProperty property, float value )
732 unsigned int index( mIds[id] );
733 mComponentDirty[ index ] = true;
737 case TRANSFORM_PROPERTY_POSITION:
739 mTxComponentAnimatable[ index ].mPosition.y = mTxComponentAnimatableBaseValue[index].mPosition.y = value;
742 case TRANSFORM_PROPERTY_SCALE:
744 mTxComponentAnimatable[ index ].mScale.y = mTxComponentAnimatableBaseValue[index].mScale.y = value;
747 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
749 mTxComponentStatic[ index ].mParentOrigin.y = value;
752 case TRANSFORM_PROPERTY_ANCHOR_POINT:
754 mTxComponentStatic[ index ].mAnchorPoint.y = value;
757 case TRANSFORM_PROPERTY_SIZE:
759 mSize[ index ].y = mSizeBase[index].y = value;
764 DALI_ASSERT_ALWAYS(false);
769 void TransformManager::BakeZVector3PropertyValue( TransformId id, TransformManagerProperty property, float value )
771 unsigned int index( mIds[id] );
772 mComponentDirty[ index ] = true;
776 case TRANSFORM_PROPERTY_POSITION:
778 mTxComponentAnimatable[ index ].mPosition.z = mTxComponentAnimatableBaseValue[index].mPosition.z = value;
781 case TRANSFORM_PROPERTY_SCALE:
783 mTxComponentAnimatable[ index ].mScale.z = mTxComponentAnimatableBaseValue[index].mScale.z = value;
786 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
788 mTxComponentStatic[ index ].mParentOrigin.z = value;
791 case TRANSFORM_PROPERTY_ANCHOR_POINT:
793 mTxComponentStatic[ index ].mAnchorPoint.z = value;
796 case TRANSFORM_PROPERTY_SIZE:
798 mSize[ index ].z = mSizeBase[index].z = value;
803 DALI_ASSERT_ALWAYS(false);
808 Quaternion& TransformManager::GetQuaternionPropertyValue( TransformId id )
810 unsigned int index( mIds[id] );
811 mComponentDirty[ index ] = true;
812 return mTxComponentAnimatable[ index ].mOrientation;
815 const Quaternion& TransformManager::GetQuaternionPropertyValue( TransformId id ) const
817 return mTxComponentAnimatable[ mIds[id] ].mOrientation;
820 void TransformManager::SetQuaternionPropertyValue( TransformId id, const Quaternion& q )
822 unsigned int index( mIds[id] );
823 mTxComponentAnimatable[ index ].mOrientation = q;
824 mComponentDirty[ index ] = true;
827 void TransformManager::BakeQuaternionPropertyValue( TransformId id, const Quaternion& q )
829 unsigned int index( mIds[id] );
830 mTxComponentAnimatable[ index ].mOrientation = mTxComponentAnimatableBaseValue[index].mOrientation = q;
831 mComponentDirty[ index ] = true;
834 void TransformManager::BakeRelativeQuaternionPropertyValue( TransformId id, const Quaternion& q )
836 unsigned int index( mIds[id] );
837 mTxComponentAnimatable[ index ].mOrientation = mTxComponentAnimatableBaseValue[index].mOrientation = mTxComponentAnimatable[ index ].mOrientation * q;
838 mComponentDirty[ index ] = true;
841 const Vector4& TransformManager::GetBoundingSphere( TransformId id ) const
843 return mBoundingSpheres[ mIds[id] ];
846 void TransformManager::GetWorldMatrixAndSize( TransformId id, Matrix& worldMatrix, Vector3& size ) const
848 unsigned int index = mIds[id];
849 worldMatrix = mWorld[index];
853 } //namespace SceneGraph
854 } //namespace Internal