当前位置: 首页>>代码示例>>C++>>正文


C++ CNavigator::Pos方法代码示例

本文整理汇总了C++中CNavigator::Pos方法的典型用法代码示例。如果您正苦于以下问题:C++ CNavigator::Pos方法的具体用法?C++ CNavigator::Pos怎么用?C++ CNavigator::Pos使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CNavigator的用法示例。


在下文中一共展示了CNavigator::Pos方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: OnUpdate

BOOL CRVTrackerZoom::OnUpdate(const CUIEvent &cEvent)
{
	// Only move during idle
	if (m_bIdleOnly && (cEvent.GetType() != UIEVENT_NONE))
		return TRUE;

	int32 zDelta = GetWheelDelta();

	if( zDelta == 0 )
		return FALSE;

	BOOL bZoomToCursor = GetApp()->GetOptions().GetControlsOptions()->IsZoomToCursor();

	//clear out the wheel delta
	SetWheelDelta( 0 );

	CNavigator *pNav = &m_pView->Nav();

	// Set the initial speed value
	float fSpeed = (m_bFast) ? 3.0f : 0.5f;

	//see if we are in a parallel viewport
	if( m_pView->IsParallelViewType() )
	{
		

		//see if we want to zoom to the cursor
		if(bZoomToCursor)
		{
			// Convert cursor position to world coordinates:
			CVector vCursor;
			CRect rect;
			m_pView->GetWindowRect( &rect );
			CPoint cursorPt = m_cCurPt;
			m_pView->GetVertexFromPoint( cursorPt, vCursor, FALSE );

			// Zoom:
			m_pView->ViewDef()->m_Magnify += ((CReal)zDelta * m_pView->ViewDef()->m_Magnify) / 300.0f;
			if( m_pView->ViewDef()->m_Magnify < 0.0001f )
				m_pView->ViewDef()->m_Magnify = 0.0001f;

			CVector vCursor2;
			m_pView->GetVertexFromPoint( cursorPt, vCursor2, FALSE );
			// This effectively makes the cursor position the focal point for the zoom.
			pNav->Pos() += vCursor - vCursor2;  
		}
		else
		{
			//we just want to zoom in
			m_pView->ViewDef()->m_Magnify += ((CReal)zDelta * m_pView->ViewDef()->m_Magnify) / 300.0f;
			if( m_pView->ViewDef()->m_Magnify < 0.0001f )
				m_pView->ViewDef()->m_Magnify = 0.0001f;
		}
		
	}
	//Walk-through, meaning that we take a ray through the screen
	else 
	{
		//we are in a perspective viewport.

		if(!bZoomToCursor)
		{
			pNav->Pos() += pNav->Forward() * (float)zDelta * fSpeed;
		}
		else
		{
			CEditRay ray = m_pView->ViewDef()->MakeRayFromScreenPoint( m_cCurPt );
			CVector forward = ray.m_Dir;
			forward.Norm();
			pNav->Pos() += forward * ((CReal)zDelta * fSpeed);
		}
	}

	m_pView->Invalidate();

	return TRUE;
}
开发者ID:Joincheng,项目名称:lithtech,代码行数:77,代码来源:RVTrackerZoom.cpp


注:本文中的CNavigator::Pos方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。