void CameraDefaultCtrl::onMouseMove(float x, float y)
	{
		if(m_bLeftDrag)
		{
			Vector2 nowPt(x,y);
			Vector2 delta = nowPt - m_lastDragPt;

			m_yaw += delta.x*2;
			m_pitch += delta.y*2;

			updateViewMat();

			m_lastDragPt.x = x;
			m_lastDragPt.y = y;
		}
		else if(m_bRightDrag)
		{
			Vector3 vX(1, 0, 0);
			Vector3 vZ(0, 0, 1);

			Vector2 nowPt(x,y);
			Vector2 delta = nowPt - m_lastDragPt;


			delta *= m_moveSpeed;
			m_lookAt -= vX*delta.x;
			m_lookAt -= vZ*delta.y;

			updateViewMat();

			m_lastDragPt = nowPt;
		}
	}
Esempio n. 2
0
// mirror a placement of one entity
static void MirrorAndStretchPlacement(CPlacement3D &pl)
{
  ASSERT(_wmtMirror==WMT_X||_wmtMirror==WMT_Y||_wmtMirror==WMT_Z||_wmtMirror==WMT_NONE);

  // if there should be mirror
  if (_wmtMirror!=WMT_NONE) {
    // make rotation matrix for the placement
    FLOATmatrix3D m;
    MakeRotationMatrix(m, pl.pl_OrientationAngle);
    // get row vectors, with object x flipped
    FLOAT3D vX(-m(1,1),m(1,2),m(1,3));
    FLOAT3D vY(-m(2,1),m(2,2),m(2,3));
    FLOAT3D vZ(-m(3,1),m(3,2),m(3,3));

    // flip needed axis
    switch(_wmtMirror) {
    case WMT_X: 
      pl.pl_PositionVector(1) = -pl.pl_PositionVector(1);
      vX = -vX; 
      break;
    case WMT_Y: 
      pl.pl_PositionVector(2) = -pl.pl_PositionVector(2);
      vY = -vY; 
      break;
    case WMT_Z: 
      pl.pl_PositionVector(3) = -pl.pl_PositionVector(3);
      vZ = -vZ; 
      break;
    default: ASSERT(FALSE);
    }

    // compose matrix back from the vectors
    m(1,1) = vX(1); m(2,1) = vY(1); m(3,1) = vZ(1);
    m(1,2) = vX(2); m(2,2) = vY(2); m(3,2) = vZ(2);
    m(1,3) = vX(3); m(2,3) = vY(3); m(3,3) = vZ(3);
    // decompose matrix into angles
    DecomposeRotationMatrix(pl.pl_OrientationAngle, m);
  }

  pl.pl_PositionVector*=_fStretch;
}
Esempio n. 3
0
extern "C" int PASCAL EXPORT Convert( const char* strFile_In , const char* strFile_Out )
{
	AFX_MANAGE_STATE( AfxGetStaticModuleState( ) );
	int bRet = 0;

	TCHAR strFile_In_T[MAX_PATH] = { _T( "" ) };
	TCHAR strFile_Out_T[MAX_PATH] = { _T( "" ) };

	UTF8_TO_WIDE( strFile_In_T , strFile_In );
	UTF8_TO_WIDE( strFile_Out_T , strFile_Out );

	CoInitialize( NULL );
	PPT_Application pApp;
	COleException cErr;
	TCHAR strErr[256] = { _T( "" ) };
	cErr.GetErrorMessage( strErr , 256 );


	vector<int> vPIDs;
	GetPptPID( vPIDs , PROCESS_FACT::INIT );
	int nRet = pApp.CreateDispatch( _T( "Powerpoint.Application" ) , &cErr );
	if( nRet > 0 )
	{
		int nPID = GetPptPID( vPIDs , PROCESS_FACT::FIND );
		pApp.put_Visible( 1 );
		PPT_Presentations pPresentations = pApp.get_Presentations( );
		COleVariant vTrue( ( short ) TRUE ) , vFalse( ( short ) FALSE ) , vOptional( ( long ) DISP_E_PARAMNOTFOUND , VT_ERROR ) , vZ( ( short ) 0 ) ;

		try
		{
			//Open Workbook
			CString strBookPath( strFile_In_T );
			strBookPath.Replace( _T( "//" ) , _T( "\\" ) );
			PPT_Presentation pPresentation = pPresentations.Open( strBookPath , 0 , 0 , 0 );
			if( pPresentation.m_lpDispatch )
			{
				try
				{
					//Convert
					CString strPdfPath( strFile_Out_T );
					strPdfPath.Replace( _T( "//" ) , _T( "\\" ) );
					pPresentation.ExportAsFixedFormat( strPdfPath , ppFixedFormatTypePDF , 0 , 0 , ppPrintHandoutHorizontalFirst
						, ppPrintOutputSlides , 0 , NULL , ppPrintAll , NULL , false , false , true , true , false , vOptional );
					bRet = TASK_STATE::TASK_STATE_SUC;
					pPresentation.Close( );
				}
				catch( ... )
				{
					bRet = TASK_STATE::TASK_STATE_FILE_CONVERT_FAIL;
					pPresentation.Close( );
				}
				pPresentation.ReleaseDispatch( );
			}
		}
		catch( ... )
		{
			bRet = TASK_STATE::TASK_STATE_FILE_OPEN_FAIL;
		}
		pPresentations.ReleaseDispatch( );
		pApp.Quit( );
		pApp.ReleaseDispatch( );
		GetPptPID( vPIDs , PROCESS_FACT::TERMINATE , nPID );
		Sleep( 1000 );
	}
	CoUninitialize( );

	return bRet;
}
Esempio n. 4
0
/*!
 * @discussion Find the time taken to reach a position on z axis
 * @param z
 * @return double
 */
double Path::timeAtZ(double z) const {
  double dest_time = (z - m_origin.Z()) / vZ();
  return dest_time;
}
Esempio n. 5
0
BOOL CmyWord::OpenDocument(CString fileName)  
{  
    if (!m_wdDocs.m_lpDispatch)   
    {  
        AfxMessageBox(_T("Documents为空!"), MB_OK|MB_ICONWARNING);  
        return FALSE;  
    }  
  
    COleVariant vTrue((short)TRUE),      
                vFalse((short)FALSE),  
                vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR),  
                vZ((short)0);  
    COleVariant vFileName(fileName);  
      
	
	//得到document变量  
	//m_wdDoc.AttachDispatch(m_wdDocs.Add(vFileName, vOptional, vOptional, vOptional)) ;                    // Close AttachDispatch  

    //得到document变量  
    m_wdDoc.AttachDispatch(m_wdDocs.Open(  
                                vFileName,        // FileName  
                                vTrue,            // Confirm Conversion.  
                                vFalse,            // ReadOnly.  
                                vFalse,            // AddToRecentFiles.  
                                vOptional,        // PasswordDocument.  
                                vOptional,        // PasswordTemplate.  
                                vOptional,        // Revert.  
                                vOptional,        // WritePasswordDocument.  
                                vOptional,        // WritePasswordTemplate.  
                                vOptional,        // Format. // Last argument for Word 97  
                                vOptional,        // Encoding // New for Word 2000/2002  
                                vOptional,        // Visible  
                                //如下4个是word2003需要的参数。本版本是word2000。  
                                vOptional,    // OpenAndRepair  
                                vZ,            // DocumentDirection wdDocumentDirection LeftToRight  
                                vOptional,    // NoEncodingDialog  
                                vOptional  
                                  
                                )                // Close Open parameters  
                            );                    // Close AttachDispatch  
      
    if (!m_wdDoc.m_lpDispatch)   
    {  
        AfxMessageBox(_T("Document获取失败!"), MB_OK|MB_ICONWARNING);  
        return FALSE;  
    }  
    //得到selection变量  
    m_wdSel = m_wdApp.GetSelection();  
    if (!m_wdSel.m_lpDispatch)   
    {  
        AfxMessageBox(_T("Select获取失败!"), MB_OK|MB_ICONWARNING);  
        return FALSE;  
    }  
    //得到全部DOC的Range变量  
    m_wdRange = m_wdDoc.Range(vOptional,vOptional);  
    if(!m_wdRange.m_lpDispatch)  
    {  
        AfxMessageBox(_T("Range获取失败!"), MB_OK|MB_ICONWARNING);  
        return FALSE;  
    }  
    return TRUE;  
}  
Esempio n. 6
0
void CAM_Render(CEntity *pen, CDrawPort *pdp)
{
  if( cam_bRecord) {
    if (!_bInitialized) {
      _bInitialized = TRUE;
      SetSpeed(1.0f);
      _fStartTime = _pTimer->CurrentTick();
    }
    FLOATmatrix3D m;
    MakeRotationMatrixFast(m, _cp.cp_aRot);
    FLOAT3D vX, vY, vZ;
    vX(1) = m(1,1); vX(2) = m(2,1); vX(3) = m(3,1);
    vY(1) = m(1,2); vY(2) = m(2,2); vY(3) = m(3,2);
    vZ(1) = m(1,3); vZ(2) = m(2,3); vZ(3) = m(3,3);

    _cp.cp_aRot(1)-=_pInput->GetAxisValue(MOUSE_X_AXIS)*0.5f;
    _cp.cp_aRot(2)-=_pInput->GetAxisValue(MOUSE_Y_AXIS)*0.5f;
    
    if( cam_bMoveForward)      { _cp.cp_vPos -= vZ *cam_fSpeed; };
    if( cam_bMoveBackward)     { _cp.cp_vPos += vZ *cam_fSpeed; };
    if( cam_bMoveLeft)         { _cp.cp_vPos -= vX *cam_fSpeed; };
    if( cam_bMoveRight)        { _cp.cp_vPos += vX *cam_fSpeed; };
    if( cam_bMoveUp)           { _cp.cp_vPos += vY *cam_fSpeed; };
    if( cam_bMoveDown)         { _cp.cp_vPos -= vY *cam_fSpeed; };
    if( cam_bTurnBankingLeft)  { _cp.cp_aRot(3) += 10.0f; };
    if( cam_bTurnBankingRight) { _cp.cp_aRot(3) -= 10.0f; };
    if( cam_bZoomIn)           { _cp.cp_aFOV -= 1.0f; };
    if( cam_bZoomOut)          { _cp.cp_aFOV += 1.0f; };
    if( cam_bZoomDefault)      { _cp.cp_aFOV  = 90.0f; };
    Clamp( _cp.cp_aFOV, 10.0f, 150.0f);

    if( cam_bResetToPlayer) {
      _cp.cp_vPos = pen->GetPlacement().pl_PositionVector;
      _cp.cp_aRot = pen->GetPlacement().pl_OrientationAngle;
    }

    if( cam_bSnapshot) {
      cam_bSnapshot = FALSE;
      WritePos(_cp);
    }

  } else {
    if (!_bInitialized) {
      _bInitialized = TRUE;
      ReadPos(_cp0);
      ReadPos(_cp1);
      SetSpeed(_cp0.cp_fSpeed);
      _fStartTime = _pTimer->CurrentTick();
    }
    TIME tmNow = _pTimer->GetLerpedCurrentTick()-_fStartTime;
    if (tmNow>_cp1.cp_tmTick) {
      _cp0 = _cp1;
      ReadPos(_cp1);
      SetSpeed(_cp0.cp_fSpeed);
    }
    FLOAT fRatio = (tmNow-_cp0.cp_tmTick)/(_cp1.cp_tmTick-_cp0.cp_tmTick);

    _cp.cp_vPos = Lerp(_cp0.cp_vPos, _cp1.cp_vPos, fRatio);
    _cp.cp_aRot = Lerp(_cp0.cp_aRot, _cp1.cp_aRot, fRatio);
    _cp.cp_aFOV = Lerp(_cp0.cp_aFOV, _cp1.cp_aFOV, fRatio);
  }

  CPlacement3D plCamera;
  plCamera.pl_PositionVector = _cp.cp_vPos;
  plCamera.pl_OrientationAngle = _cp.cp_aRot;

  // init projection parameters
  CPerspectiveProjection3D prPerspectiveProjection;
  prPerspectiveProjection.FOVL() = _cp.cp_aFOV;
  prPerspectiveProjection.ScreenBBoxL() = FLOATaabbox2D(
    FLOAT2D(0.0f, 0.0f), FLOAT2D((float)pdp->GetWidth(), (float)pdp->GetHeight())
  );
  prPerspectiveProjection.AspectRatioL() = 1.0f;
  prPerspectiveProjection.FrontClipDistanceL() = 0.3f;

  CAnyProjection3D prProjection;
  prProjection = prPerspectiveProjection;

  // set up viewer position
  prProjection->ViewerPlacementL() = plCamera;
  // render the view
  RenderView(*pen->en_pwoWorld, *(CEntity*)NULL, prProjection, *pdp);
}