void CDlgInfoPgAnim::DoDataExchange(CDataExchange* pDX)
{
  CModelerView *pModelerView = CModelerView::GetActiveView();
  if( pModelerView == NULL) return;
  CModelerDoc* pDoc = theApp.GetDocument();

  // if dialog is recieving data
  if(pDX->m_bSaveAndValidate == FALSE)
  {                    
    SetAnimPageFromView( pModelerView);
    // mark that the values have been updated to reflect the state of the view
    m_udAllValues.MarkUpdated();
  }
	
  CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgInfoPgAnim)
	DDX_Text(pDX, IDC_ANIM_CURRENT_FRAME, m_strCurrentFrame);
	DDX_Text(pDX, IDC_ANIM_FRAMES, m_strFramesInAnim);
	DDX_Text(pDX, IDC_ANIM_NAME, m_strAnimName); 
	DDX_Text(pDX, IDC_ANIM_TIME_PASSED, m_strTimePassed);
	DDX_Text(pDX, IDC_ANIM_STATE, m_strAnimState);
	DDX_Text(pDX, IDC_ANIMATION_LENGHT, m_strAnimationLenght);
	DDX_Text(pDX, IDC_NO_OF_ANIMATIONS, m_strNoOfAnimations);
	DDX_Text(pDX, IDC_NO_OF_FRAMES, m_strNoOfFrames);
	//}}AFX_DATA_MAP

  CAnimInfo aiInfo;
  INDEX iAnim = pModelerView->m_ModelObject.GetAnim();
  pModelerView->m_ModelObject.GetAnimInfo( iAnim, aiInfo);
  if(pDX->m_bSaveAndValidate == TRUE)
  {
    DDX_SkyFloat(pDX, IDC_ANIM_SPEED, m_fAnimSpeed);
  }
  else if( m_fAnimSpeed != aiInfo.ai_SecsPerFrame)
  {
    m_fAnimSpeed = aiInfo.ai_SecsPerFrame;
    DDX_SkyFloat(pDX, IDC_ANIM_SPEED, m_fAnimSpeed);
  }

  // if dialog is giving data
  if(pDX->m_bSaveAndValidate == TRUE)
  {                    
    if( (m_fAnimSpeed > 0) && (m_fAnimSpeed<100) )
    {
      pDoc->m_emEditModel.edm_md.SetSpeed( iAnim, m_fAnimSpeed);
    }
  }
}
Пример #2
0
void CDlgSnapVertex::DoDataExchange(CDataExchange* pDX)
{
  CWorldEditorDoc* pDoc = theApp.GetActiveDocument();
	CDialog::DoDataExchange(pDX);

  if( pDX->m_bSaveAndValidate == FALSE)
  {
    CBrushVertex *pvtx=pDoc->m_selVertexSelection.GetFirstInSelection();
    FLOAT3D vFirst=pvtx->bvx_vAbsolute;
    m_fX=vFirst(1);
    m_fY=vFirst(2);
    m_fZ=vFirst(3);
  }

	//{{AFX_DATA_MAP(CDlgSnapVertex)
	DDX_SkyFloat(pDX, IDC_VTX_SNAP_X, m_fX);
	DDX_SkyFloat(pDX, IDC_VTX_SNAP_Y, m_fY);
	DDX_SkyFloat(pDX, IDC_VTX_SNAP_Z, m_fZ);
	//}}AFX_DATA_MAP

  // if dialog is recieving data
  if( pDX->m_bSaveAndValidate == FALSE)
  {
    CBrushVertex *pvtx=pDoc->m_selVertexSelection.GetFirstInSelection();
    FLOAT3D vFirst=pvtx->bvx_vAbsolute;
    BOOL bValidX, bValidY, bValidZ;
    bValidX=bValidY=bValidZ=TRUE;
    // for each of the dynamic container
    {FOREACHINDYNAMICCONTAINER( pDoc->m_selVertexSelection, CBrushVertex, itvtx)
    {
      if( itvtx->bvx_vAbsolute(1)!=vFirst(1)) bValidX=FALSE;
      if( itvtx->bvx_vAbsolute(2)!=vFirst(2)) bValidY=FALSE;
      if( itvtx->bvx_vAbsolute(3)!=vFirst(3)) bValidZ=FALSE;
    }}
    if( !bValidX) GetDlgItem(IDC_VTX_SNAP_X)->SetWindowText(L"");
    if( !bValidY) GetDlgItem(IDC_VTX_SNAP_Y)->SetWindowText(L"");
    if( !bValidZ) GetDlgItem(IDC_VTX_SNAP_Z)->SetWindowText(L"");
  }
Пример #3
0
void CPatchPalette::DoDataExchange(CDataExchange* pDX)
{
  CModelerView *pModelerView = CModelerView::GetActiveMappingNormalView();
  
  m_PatchName = "";
  m_strPatchFile = "";
  m_fStretch = 1.0f;
  if( pModelerView != NULL)
  {
    CModelerDoc* pDoc = (CModelerDoc *) pModelerView->GetDocument();
    if( !pDX->m_bSaveAndValidate && 
        (pDoc->m_emEditModel.CountPatches() != 0) )
    {
	    GetDlgItem( IDC_EDIT_PATCH_NAME)->EnableWindow( TRUE);
	    GetDlgItem( IDC_EDIT_PATCH_STRETCH)->EnableWindow( TRUE);
	    GetDlgItem( IDC_PATCH_FILE_T)->EnableWindow( TRUE);
	    GetDlgItem( IDC_PATCH_NAME_T)->EnableWindow( TRUE);
	    GetDlgItem( IDC_PATCH_STRETCH_T)->EnableWindow( TRUE);
      CModelPatch &mp = pDoc->m_emEditModel.edm_md.md_mpPatches[ pModelerView->m_iActivePatchBitIndex];
      m_strPatchFile = mp.mp_toTexture.GetName().FileName();      
      m_PatchName = mp.mp_strName;
      m_fStretch = mp.mp_fStretch;
    }
  }
  
  CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPatchPalette)
	DDX_Control(pDX, IDC_PATCH_BUTTON9, m_PatchButton9);
	DDX_Control(pDX, IDC_PATCH_BUTTON8, m_PatchButton8);
	DDX_Control(pDX, IDC_PATCH_BUTTON7, m_PatchButton7);
	DDX_Control(pDX, IDC_PATCH_BUTTON6, m_PatchButton6);
	DDX_Control(pDX, IDC_PATCH_BUTTON5, m_PatchButton5);
	DDX_Control(pDX, IDC_PATCH_BUTTON4, m_PatchButton4);
	DDX_Control(pDX, IDC_PATCH_BUTTON32, m_PatchButton32);
	DDX_Control(pDX, IDC_PATCH_BUTTON31, m_PatchButton31);
	DDX_Control(pDX, IDC_PATCH_BUTTON30, m_PatchButton30);
	DDX_Control(pDX, IDC_PATCH_BUTTON3, m_PatchButton3);
	DDX_Control(pDX, IDC_PATCH_BUTTON29, m_PatchButton29);
	DDX_Control(pDX, IDC_PATCH_BUTTON28, m_PatchButton28);
	DDX_Control(pDX, IDC_PATCH_BUTTON27, m_PatchButton27);
	DDX_Control(pDX, IDC_PATCH_BUTTON26, m_PatchButton26);
	DDX_Control(pDX, IDC_PATCH_BUTTON25, m_PatchButton25);
	DDX_Control(pDX, IDC_PATCH_BUTTON24, m_PatchButton24);
	DDX_Control(pDX, IDC_PATCH_BUTTON23, m_PatchButton23);
	DDX_Control(pDX, IDC_PATCH_BUTTON22, m_PatchButton22);
	DDX_Control(pDX, IDC_PATCH_BUTTON21, m_PatchButton21);
	DDX_Control(pDX, IDC_PATCH_BUTTON20, m_PatchButton20);
	DDX_Control(pDX, IDC_PATCH_BUTTON2, m_PatchButton2);
	DDX_Control(pDX, IDC_PATCH_BUTTON19, m_PatchButton19);
	DDX_Control(pDX, IDC_PATCH_BUTTON18, m_PatchButton18);
	DDX_Control(pDX, IDC_PATCH_BUTTON17, m_PatchButton17);
	DDX_Control(pDX, IDC_PATCH_BUTTON16, m_PatchButton16);
	DDX_Control(pDX, IDC_PATCH_BUTTON15, m_PatchButton15);
	DDX_Control(pDX, IDC_PATCH_BUTTON14, m_PatchButton14);
	DDX_Control(pDX, IDC_PATCH_BUTTON13, m_PatchButton13);
	DDX_Control(pDX, IDC_PATCH_BUTTON12, m_PatchButton12);
	DDX_Control(pDX, IDC_PATCH_BUTTON11, m_PatchButton11);
	DDX_Control(pDX, IDC_PATCH_BUTTON10, m_PatchButton10);
	DDX_Control(pDX, IDC_PATCH_BUTTON1, m_PatchButton1);
	DDX_Text(pDX, IDC_EDIT_PATCH_NAME, m_PatchName);
	DDX_SkyFloat(pDX, IDC_EDIT_PATCH_STRETCH, m_fStretch);
	DDX_Text(pDX, IDC_PATCH_FILE_T, m_strPatchFile);
	//}}AFX_DATA_MAP
  if( (pDX->m_bSaveAndValidate) && ( pModelerView != NULL) )
  {
    CModelerDoc* pDoc = (CModelerDoc *) pModelerView->GetDocument();
    if( pDoc->m_emEditModel.CountPatches() != 0)
    {
      CModelPatch &mp = pDoc->m_emEditModel.edm_md.md_mpPatches[ pModelerView->m_iActivePatchBitIndex];
      pDoc->m_emEditModel.SetPatchStretch(pModelerView->m_iActivePatchBitIndex, m_fStretch);
      mp.mp_strName = CStringA(m_PatchName);
      pDoc->m_emEditModel.edm_md.md_bPreparedForRendering = FALSE;
      pDoc->SetModifiedFlag();
    }
  }
}
Пример #4
0
void CDlgPgCollision::DoDataExchange(CDataExchange* pDX)
{
  CModelerView *pModelerView = CModelerView::GetActiveView();
  if(pModelerView == NULL) return;
  CModelerDoc* pDoc = pModelerView->GetDocument();  

  // if transfering data from document to dialog
  if( !pDX->m_bSaveAndValidate)
  {
    // get collision min vector
    FLOAT3D vMinCollisionBox = pDoc->m_emEditModel.GetCollisionBoxMin();
    // get collision max vector
    FLOAT3D vMaxCollisionBox = pDoc->m_emEditModel.GetCollisionBoxMax();

    FLOATaabbox3D bboxCollision = FLOATaabbox3D( vMinCollisionBox, vMaxCollisionBox);

    m_fWidth   = bboxCollision.Size()(1);
    m_fHeight  = bboxCollision.Size()(2);
    m_fLenght  = bboxCollision.Size()(3);
    m_fXCenter = bboxCollision.Center()(1);
    m_fYDown   = vMinCollisionBox(2);
    m_fZCenter = bboxCollision.Center()(3);
    
    // set equality radio initial value
    INDEX iEqualityType = pDoc->m_emEditModel.GetCollisionBoxDimensionEquality();

    // get index of curently selected collision box
    char achrString[ 256];
    sprintf( achrString, "%d.", pDoc->m_emEditModel.GetActiveCollisionBoxIndex());
    m_strCollisionBoxIndex = achrString;
    // get name of curently selected collision box
    sprintf( achrString, "%s", pDoc->m_emEditModel.GetCollisionBoxName());
    m_strCollisionBoxName = achrString;

    // enable all controls
    GetDlgItem( IDC_STATIC_WIDTH)->EnableWindow( TRUE);
    GetDlgItem( IDC_EDIT_WIDTH)->EnableWindow( TRUE);
    GetDlgItem( IDC_STATIC_HEIGHT)->EnableWindow( TRUE);
    GetDlgItem( IDC_EDIT_HEIGHT)->EnableWindow( TRUE);
    GetDlgItem( IDC_STATIC_LENGHT)->EnableWindow( TRUE);
    GetDlgItem( IDC_EDIT_LENGHT)->EnableWindow( TRUE);

    m_bCollideAsBox = pDoc->m_emEditModel.edm_md.md_bCollideAsCube;
    // if we are colliding using sphere approximation
    switch( iEqualityType)
    {
      case HEIGHT_EQ_WIDTH:
      {
        m_EqualityRadio = 0;
        if( !m_bCollideAsBox)
        {
          GetDlgItem( IDC_STATIC_HEIGHT)->EnableWindow( FALSE);
          GetDlgItem( IDC_EDIT_HEIGHT)->EnableWindow( FALSE);
          m_fHeight = m_fWidth;
        }
        break;
      }
      case LENGTH_EQ_WIDTH:
      {
        m_EqualityRadio = 1;
        if( !m_bCollideAsBox)
        {
          GetDlgItem( IDC_STATIC_LENGHT)->EnableWindow( FALSE);
          GetDlgItem( IDC_EDIT_LENGHT)->EnableWindow( FALSE);
          m_fLenght = m_fWidth;
        }
        break;
      }
      case LENGTH_EQ_HEIGHT:
      {
        m_EqualityRadio = 2;
        if( !m_bCollideAsBox)
        {
          GetDlgItem( IDC_STATIC_LENGHT)->EnableWindow( FALSE);
          GetDlgItem( IDC_EDIT_LENGHT)->EnableWindow( FALSE);
          m_fLenght = m_fHeight;
        }
        break;
      }
      default:
      {
        ASSERTALWAYS( "None of collision dimensions are the same and that can't be.");
      }
    }
    // mark that the values have been updated to reflect the state of the view
    m_udAllValues.MarkUpdated();
  }
    
  CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgPgCollision)
	DDX_SkyFloat(pDX, IDC_EDIT_WIDTH, m_fWidth);
	DDX_SkyFloat(pDX, IDC_EDIT_HEIGHT, m_fHeight);
	DDX_SkyFloat(pDX, IDC_EDIT_LENGHT, m_fLenght);
	DDX_SkyFloat(pDX, IDC_EDIT_XCENTER, m_fXCenter);
	DDX_SkyFloat(pDX, IDC_EDIT_YDOWN, m_fYDown);
	DDX_SkyFloat(pDX, IDC_EDIT_ZCENTER, m_fZCenter);
	DDX_Radio(pDX, IDC_H_EQ_W, m_EqualityRadio);
	DDX_Text(pDX, IDC_COLLISION_BOX_NAME, m_strCollisionBoxName);
	DDX_Text(pDX, IDC_COLLISION_BOX_INDEX, m_strCollisionBoxIndex);
	DDX_Check(pDX, IDC_COLLIDE_AS_BOX, m_bCollideAsBox);
	//}}AFX_DATA_MAP

  // if transfering data from dialog to document
  if( pDX->m_bSaveAndValidate)
  {
    // if we are colliding using sphere approximation
    if( !pDoc->m_emEditModel.edm_md.md_bCollideAsCube)
    {
      INDEX iEqualityType;
      switch( m_EqualityRadio)
      {
        case 0:
        {
          iEqualityType = HEIGHT_EQ_WIDTH;
          CString strWidth;
          GetDlgItem( IDC_EDIT_WIDTH)->GetWindowText(strWidth);
          GetDlgItem( IDC_EDIT_HEIGHT)->SetWindowText(strWidth);
          break;
        }
        case 1:
        {
          iEqualityType = LENGTH_EQ_WIDTH;
          CString strWidth;
          GetDlgItem( IDC_EDIT_WIDTH)->GetWindowText(strWidth);
          GetDlgItem( IDC_EDIT_LENGHT)->SetWindowText( strWidth );
          break;
        }
        case 2:
        {
          iEqualityType = LENGTH_EQ_HEIGHT;
          CString strHeight;
          GetDlgItem( IDC_EDIT_HEIGHT)->GetWindowText(strHeight);
          GetDlgItem( IDC_EDIT_LENGHT)->SetWindowText( strHeight);
          break;
        }
        default:
        {
          ASSERTALWAYS( "Illegal value found in collision dimensions equality radio.");
        }
      }
      // set collision equality value
      if( pDoc->m_emEditModel.GetCollisionBoxDimensionEquality() != iEqualityType)
      {
        pDoc->m_emEditModel.SetCollisionBoxDimensionEquality( iEqualityType);
      }
    }

    // set name of curently selected collision box
    pDoc->m_emEditModel.SetCollisionBoxName( CTString( m_strCollisionBoxName) );
    
    // get collision min and max vectors
    FLOAT3D vMinCollisionBox;
    FLOAT3D vMaxCollisionBox;
    // get sizing values
    vMinCollisionBox(1) = m_fXCenter-m_fWidth/2.0f;
    vMinCollisionBox(2) = m_fYDown;
    vMinCollisionBox(3) = m_fZCenter-m_fLenght/2.0f;
    // get origin coordinates
    vMaxCollisionBox(1) = m_fXCenter+m_fWidth/2.0f; 
    vMaxCollisionBox(2) = m_fYDown+m_fHeight;
    vMaxCollisionBox(3) = m_fZCenter+m_fLenght/2.0f;
    
    // transfer data from dialog to document
    pDoc->m_emEditModel.SetCollisionBox( vMinCollisionBox, vMaxCollisionBox);

    pDoc->SetModifiedFlag();
    // update all views
    pDoc->UpdateAllViews( NULL);
  }
}