本文整理汇总了C++中Transform::ComputeObjectComponents方法的典型用法代码示例。如果您正苦于以下问题:C++ Transform::ComputeObjectComponents方法的具体用法?C++ Transform::ComputeObjectComponents怎么用?C++ Transform::ComputeObjectComponents使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Transform
的用法示例。
在下文中一共展示了Transform::ComputeObjectComponents方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CenterTransform
UndoCommandPtr Curve::CenterTransform()
{
BatchUndoCommandPtr batch = new BatchUndoCommand();
batch->Push( Base::CenterTransform() );
if ( GetNumberControlPoints() == 0 )
{
return batch;
}
//
// We are going to move all control points, so just snap shot
//
batch->Push( SnapShot() );
//
// Compute the centered position
//
Vector3 position = Vector3::Zero;
{
uint32_t controlPointCount = 0;
OS_HierarchyNodeDumbPtr::Iterator childItr = GetChildren().Begin();
OS_HierarchyNodeDumbPtr::Iterator childEnd = GetChildren().End();
for ( ; childItr != childEnd; ++childItr )
{
CurveControlPoint* point = Reflect::SafeCast< CurveControlPoint >( *childItr );
if ( point )
{
++controlPointCount;
position += point->GetPosition();
}
}
position /= (float32_t)controlPointCount;
}
m_GlobalTransform.TransformVertex( position );
//
// Offset the control points
//
Matrix4 m = m_GlobalTransform;
m.t = position;
m = m_GlobalTransform * m.Inverted();
{
OS_HierarchyNodeDumbPtr::Iterator childItr = GetChildren().Begin();
OS_HierarchyNodeDumbPtr::Iterator childEnd = GetChildren().End();
for ( ; childItr != childEnd; ++childItr )
{
CurveControlPoint* point = Reflect::SafeCast< CurveControlPoint >( *childItr );
if ( point )
{
Vector3 p = point->GetPosition();
m.TransformVertex( p );
batch->Push( new PropertyUndoCommand< Vector3 >( new Helium::MemberProperty< CurveControlPoint, Vector3 >( point, &CurveControlPoint::GetPosition, &CurveControlPoint::SetPosition ), p ) );
}
}
}
//
// Recompute global transform
//
// our new global transform is just translated to the new position
m_GlobalTransform.t = position;
// this will recompute the local components
SetGlobalTransform( m_GlobalTransform );
// update the transform object
Evaluate( GraphDirections::Downstream );
// update each child's local transform to stay in the same global position
for ( OS_HierarchyNodeDumbPtr::Iterator itr = m_Children.Begin(), end = m_Children.End(); itr != end; ++itr )
{
HierarchyNode* n = *itr;
Transform* t = Reflect::SafeCast<Transform>( n );
if ( !t )
{
continue;
}
batch->Push( t->ComputeObjectComponents() );
}
//.........这里部分代码省略.........