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] );
316 mIds[ mComponentId[i] ] = i;
317 mIds[ mComponentId[j] ] = j;
320 void TransformManager::ReorderComponents()
322 mOrderedComponents.Resize(mComponentCount);
324 TransformId parentId;
325 for( size_t i(0); i<mComponentCount; ++i )
327 mOrderedComponents[i].id = mComponentId[i];
328 mOrderedComponents[i].level = 0u;
330 parentId = mParent[i];
331 while( parentId != INVALID_TRANSFORM_ID )
333 mOrderedComponents[i].level++;
334 parentId = mParent[ mIds[parentId] ];
338 std::sort( mOrderedComponents.Begin(), mOrderedComponents.End());
339 for( size_t i(0); i<mComponentCount-1; ++i )
341 SwapComponents( mIds[mOrderedComponents[i].id], i);
345 Vector3& TransformManager::GetVector3PropertyValue( TransformId id, TransformManagerProperty property )
349 case TRANSFORM_PROPERTY_POSITION:
351 unsigned int index( mIds[id] );
352 mComponentDirty[ index ] = true;
353 return mTxComponentAnimatable[ index ].mPosition;
355 case TRANSFORM_PROPERTY_SCALE:
357 unsigned int index( mIds[id] );
358 mComponentDirty[ index ] = true;
359 return mTxComponentAnimatable[ index ].mScale;
361 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
363 unsigned int index( mIds[id] );
364 mComponentDirty[ index ] = true;
365 return mTxComponentStatic[ index ].mParentOrigin;
367 case TRANSFORM_PROPERTY_ANCHOR_POINT:
369 unsigned int index( mIds[id] );
370 mComponentDirty[ index ] = true;
371 return mTxComponentStatic[ index ].mAnchorPoint;
373 case TRANSFORM_PROPERTY_SIZE:
375 unsigned int index( mIds[id] );
376 mComponentDirty[ index ] = true;
377 return mSize[ index ];
381 DALI_ASSERT_ALWAYS(false);
382 return mTxComponentAnimatable[ mIds[id] ].mPosition;
387 const Vector3& TransformManager::GetVector3PropertyValue( TransformId id, TransformManagerProperty property ) const
391 case TRANSFORM_PROPERTY_POSITION:
393 return mTxComponentAnimatable[ mIds[id] ].mPosition;
395 case TRANSFORM_PROPERTY_SCALE:
397 return mTxComponentAnimatable[ mIds[id] ].mScale;
399 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
401 return mTxComponentStatic[ mIds[id] ].mParentOrigin;
403 case TRANSFORM_PROPERTY_ANCHOR_POINT:
405 return mTxComponentStatic[ mIds[id] ].mAnchorPoint;
407 case TRANSFORM_PROPERTY_SIZE:
409 return mSize[ mIds[id] ];
413 DALI_ASSERT_ALWAYS(false);
414 return mTxComponentAnimatable[ mIds[id] ].mPosition;
419 const float& TransformManager::GetVector3PropertyComponentValue(TransformId id, TransformManagerProperty property, unsigned int component ) const
423 case TRANSFORM_PROPERTY_POSITION:
425 return mTxComponentAnimatable[ mIds[id] ].mPosition[component];
427 case TRANSFORM_PROPERTY_SCALE:
429 return mTxComponentAnimatable[ mIds[id] ].mScale[component];
431 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
433 return mTxComponentStatic[ mIds[id] ].mParentOrigin[component];
435 case TRANSFORM_PROPERTY_ANCHOR_POINT:
437 return mTxComponentStatic[ mIds[id] ].mAnchorPoint[component];
439 case TRANSFORM_PROPERTY_SIZE:
441 return mSize[ mIds[id] ][component];
445 DALI_ASSERT_ALWAYS(false);
446 return mTxComponentAnimatable[ mIds[id] ].mPosition[component];
451 void TransformManager::SetVector3PropertyValue( TransformId id, TransformManagerProperty property, const Vector3& value )
453 unsigned int index( mIds[id] );
454 mComponentDirty[ index ] = true;
458 case TRANSFORM_PROPERTY_POSITION:
460 mTxComponentAnimatable[ index ].mPosition = value;
463 case TRANSFORM_PROPERTY_SCALE:
465 mTxComponentAnimatable[ index ].mScale = value;
468 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
470 mTxComponentStatic[ index ].mParentOrigin = value;
473 case TRANSFORM_PROPERTY_ANCHOR_POINT:
475 mTxComponentStatic[ index ].mAnchorPoint = value;
478 case TRANSFORM_PROPERTY_SIZE:
480 mSize[ index ] = value;
485 DALI_ASSERT_ALWAYS(false);
490 void TransformManager::SetVector3PropertyComponentValue( TransformId id, TransformManagerProperty property, float value, unsigned int component )
492 unsigned int index( mIds[id] );
493 mComponentDirty[ index ] = true;
497 case TRANSFORM_PROPERTY_POSITION:
499 mTxComponentAnimatable[ index ].mPosition[component] = value;
502 case TRANSFORM_PROPERTY_SCALE:
504 mTxComponentAnimatable[ index ].mScale[component] = value;
507 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
509 mTxComponentStatic[ index ].mParentOrigin[component] = value;
512 case TRANSFORM_PROPERTY_ANCHOR_POINT:
514 mTxComponentStatic[ index ].mAnchorPoint[component] = value;
517 case TRANSFORM_PROPERTY_SIZE:
519 mSize[ index ][component] = value;
524 DALI_ASSERT_ALWAYS(false);
529 void TransformManager::BakeVector3PropertyValue( TransformId id, TransformManagerProperty property, const Vector3& value )
531 unsigned int index( mIds[id] );
532 mComponentDirty[ index ] = true;
536 case TRANSFORM_PROPERTY_POSITION:
538 mTxComponentAnimatable[ index ].mPosition = mTxComponentAnimatableBaseValue[index].mPosition = value;
541 case TRANSFORM_PROPERTY_SCALE:
543 mTxComponentAnimatable[ index ].mScale = mTxComponentAnimatableBaseValue[index].mScale = value;
546 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
548 mTxComponentStatic[ index ].mParentOrigin = value;
551 case TRANSFORM_PROPERTY_ANCHOR_POINT:
553 mTxComponentStatic[ index ].mAnchorPoint = value;
556 case TRANSFORM_PROPERTY_SIZE:
558 mSize[ index ] = mSizeBase[index] = value;
563 DALI_ASSERT_ALWAYS(false);
568 void TransformManager::BakeRelativeVector3PropertyValue( TransformId id, TransformManagerProperty property, const Vector3& value )
570 unsigned int index( mIds[id] );
571 mComponentDirty[ index ] = true;
575 case TRANSFORM_PROPERTY_POSITION:
577 mTxComponentAnimatable[ index ].mPosition = mTxComponentAnimatableBaseValue[index].mPosition = mTxComponentAnimatable[ index ].mPosition + value;
580 case TRANSFORM_PROPERTY_SCALE:
582 mTxComponentAnimatable[ index ].mScale = mTxComponentAnimatableBaseValue[index].mScale = mTxComponentAnimatable[ index ].mScale + value;
585 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
587 mTxComponentStatic[ index ].mParentOrigin = mTxComponentStatic[ index ].mParentOrigin + value;
590 case TRANSFORM_PROPERTY_ANCHOR_POINT:
592 mTxComponentStatic[ index ].mAnchorPoint = mTxComponentStatic[ index ].mAnchorPoint + value;
595 case TRANSFORM_PROPERTY_SIZE:
597 mSize[ index ] = mSizeBase[index] = mSize[ index ] + value;
602 DALI_ASSERT_ALWAYS(false);
607 void TransformManager::BakeMultiplyVector3PropertyValue( TransformId id, TransformManagerProperty property, const Vector3& value )
609 unsigned int index( mIds[id] );
610 mComponentDirty[ index ] = true;
614 case TRANSFORM_PROPERTY_POSITION:
616 mTxComponentAnimatable[ index ].mPosition = mTxComponentAnimatableBaseValue[index].mPosition = mTxComponentAnimatable[ index ].mPosition * value;
619 case TRANSFORM_PROPERTY_SCALE:
621 mTxComponentAnimatable[ index ].mScale = mTxComponentAnimatableBaseValue[index].mScale = mTxComponentAnimatable[ index ].mScale * value;
624 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
626 mTxComponentStatic[ index ].mParentOrigin = mTxComponentStatic[ index ].mParentOrigin * value;
629 case TRANSFORM_PROPERTY_ANCHOR_POINT:
631 mTxComponentStatic[ index ].mAnchorPoint = mTxComponentStatic[ index ].mAnchorPoint * value;
634 case TRANSFORM_PROPERTY_SIZE:
636 mSize[ index ] = mSizeBase[index] = mSize[ index ] * value;
641 DALI_ASSERT_ALWAYS(false);
646 void TransformManager::BakeVector3PropertyComponentValue( TransformId id, TransformManagerProperty property, float value, unsigned int component )
648 unsigned int index( mIds[id] );
649 mComponentDirty[ index ] = true;
653 case TRANSFORM_PROPERTY_POSITION:
655 mTxComponentAnimatable[ index ].mPosition[component] = mTxComponentAnimatableBaseValue[index].mPosition[component] = value;
658 case TRANSFORM_PROPERTY_SCALE:
660 mTxComponentAnimatable[ index ].mScale[component] = mTxComponentAnimatableBaseValue[index].mScale[component] = value;
663 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
665 mTxComponentStatic[ index ].mParentOrigin[component] = value;
668 case TRANSFORM_PROPERTY_ANCHOR_POINT:
670 mTxComponentStatic[ index ].mAnchorPoint[component] = value;
673 case TRANSFORM_PROPERTY_SIZE:
675 mSize[ index ][component] = mSizeBase[index][component] = value;
680 DALI_ASSERT_ALWAYS(false);
685 void TransformManager::BakeXVector3PropertyValue( TransformId id, TransformManagerProperty property, float value )
687 unsigned int index( mIds[id] );
688 mComponentDirty[ index ] = true;
692 case TRANSFORM_PROPERTY_POSITION:
694 mTxComponentAnimatable[ index ].mPosition.x = mTxComponentAnimatableBaseValue[index].mPosition.x = value;
697 case TRANSFORM_PROPERTY_SCALE:
699 mTxComponentAnimatable[ index ].mScale.x = mTxComponentAnimatableBaseValue[index].mScale.x = value;
702 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
704 mTxComponentStatic[ index ].mParentOrigin.x = value;
707 case TRANSFORM_PROPERTY_ANCHOR_POINT:
709 mTxComponentStatic[ index ].mAnchorPoint.x = value;
712 case TRANSFORM_PROPERTY_SIZE:
714 mSize[ index ].x = mSizeBase[index].x = value;
719 DALI_ASSERT_ALWAYS(false);
724 void TransformManager::BakeYVector3PropertyValue( TransformId id, TransformManagerProperty property, float value )
726 unsigned int index( mIds[id] );
727 mComponentDirty[ index ] = true;
731 case TRANSFORM_PROPERTY_POSITION:
733 mTxComponentAnimatable[ index ].mPosition.y = mTxComponentAnimatableBaseValue[index].mPosition.y = value;
736 case TRANSFORM_PROPERTY_SCALE:
738 mTxComponentAnimatable[ index ].mScale.y = mTxComponentAnimatableBaseValue[index].mScale.y = value;
741 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
743 mTxComponentStatic[ index ].mParentOrigin.y = value;
746 case TRANSFORM_PROPERTY_ANCHOR_POINT:
748 mTxComponentStatic[ index ].mAnchorPoint.y = value;
751 case TRANSFORM_PROPERTY_SIZE:
753 mSize[ index ].y = mSizeBase[index].y = value;
758 DALI_ASSERT_ALWAYS(false);
763 void TransformManager::BakeZVector3PropertyValue( TransformId id, TransformManagerProperty property, float value )
765 unsigned int index( mIds[id] );
766 mComponentDirty[ index ] = true;
770 case TRANSFORM_PROPERTY_POSITION:
772 mTxComponentAnimatable[ index ].mPosition.z = mTxComponentAnimatableBaseValue[index].mPosition.z = value;
775 case TRANSFORM_PROPERTY_SCALE:
777 mTxComponentAnimatable[ index ].mScale.z = mTxComponentAnimatableBaseValue[index].mScale.z = value;
780 case TRANSFORM_PROPERTY_PARENT_ORIGIN:
782 mTxComponentStatic[ index ].mParentOrigin.z = value;
785 case TRANSFORM_PROPERTY_ANCHOR_POINT:
787 mTxComponentStatic[ index ].mAnchorPoint.z = value;
790 case TRANSFORM_PROPERTY_SIZE:
792 mSize[ index ].z = mSizeBase[index].z = value;
797 DALI_ASSERT_ALWAYS(false);
802 Quaternion& TransformManager::GetQuaternionPropertyValue( TransformId id )
804 unsigned int index( mIds[id] );
805 mComponentDirty[ index ] = true;
806 return mTxComponentAnimatable[ index ].mOrientation;
809 const Quaternion& TransformManager::GetQuaternionPropertyValue( TransformId id ) const
811 return mTxComponentAnimatable[ mIds[id] ].mOrientation;
814 void TransformManager::SetQuaternionPropertyValue( TransformId id, const Quaternion& q )
816 unsigned int index( mIds[id] );
817 mTxComponentAnimatable[ index ].mOrientation = q;
818 mComponentDirty[ index ] = true;
821 void TransformManager::BakeQuaternionPropertyValue( TransformId id, const Quaternion& q )
823 unsigned int index( mIds[id] );
824 mTxComponentAnimatable[ index ].mOrientation = mTxComponentAnimatableBaseValue[index].mOrientation = q;
825 mComponentDirty[ index ] = true;
828 void TransformManager::BakeRelativeQuaternionPropertyValue( TransformId id, const Quaternion& q )
830 unsigned int index( mIds[id] );
831 mTxComponentAnimatable[ index ].mOrientation = mTxComponentAnimatableBaseValue[index].mOrientation = mTxComponentAnimatable[ index ].mOrientation * q;
832 mComponentDirty[ index ] = true;
835 const Vector4& TransformManager::GetBoundingSphere( TransformId id ) const
837 return mBoundingSpheres[ mIds[id] ];
840 void TransformManager::GetWorldMatrixAndSize( TransformId id, Matrix& worldMatrix, Vector3& size ) const
842 unsigned int index = mIds[id];
843 worldMatrix = mWorld[index];
847 } //namespace SceneGraph
848 } //namespace Internal