Iwao Dev

気付いたことをメモしています.

この画面は、簡易表示です

2012 / 10月

operator[]

以下の様なコードで,配列の要素として書き戻す部分がうまく機能してなかった.
BOOL d3D_PgonsA::SetUniqueName (void) {
  { // 空の場合 “Pgons_0x” を設定
    for (int index=0 ; index<this->GetCount() ; index++) {
      d3D_Pgons1 pgons = (*this)[index] ;
      CString name = pgons.GetName().c_str() ;
      if (name.IsEmpty()) {
        name.Format(_T(“Pgons1_%03d”),index+1) ;
        pgons.SetName(name) ;
        (*this)[index] = pgons ;
        continue ;
        }
      }
    }
  // …
  }
原因は, d3D_Pgons1& operator[] (const int index) が定義されてなかったためだが,未だにここら辺がよくわかってない.


  にほんブログ村 IT技術ブログへ


VEyeChgV を改良予定

共通のコードはまだ手を付けられないので,テスト的に,VOpGLS のビューに修正を加えた. VOpGLS.zip


ID_V_EYE_DRAG を追加.
マウスのイベントを追加.
  void CVOpGLSView::OnLButtonDown(UINT nFlags, CPoint point)   {
    SetDragAnchor(point) ;
    if (CanMouseEyeChange()) {
      SetDragMoveEye() ;
      DrgLastEye = GetEyeChg().GetEye() ;
      return ;
      }
    VOpGLView::OnLButtonDown(nFlags, point);
    }
  void CVOpGLSView::OnLButtonUp(UINT nFlags, CPoint point)   {
    if (CanMouseEyeChange()) {
      SetDragMoveEye(FALSE) ;
      this->InvalidateRect(NULL) ;
      return ;
      }
    VOpGLView::OnLButtonUp(nFlags, point);
    }
  void CVOpGLSView::OnMouseMove(UINT nFlags, CPoint point)   {
    if (CanDragEyeChange()) {
      Eye newEye = DrgLastEye ;
      CRect rect ;
      GetClientRect(&rect) ;
      double newAngleXY = rad(Anchor.x-point.x)*180/rect.Width () ;
      double newAngleZ =-rad(Anchor.y-point.y)*120/rect.Height() ;
      newEye = newEye.GetSpinXY(newAngleXY) ;
      newEye = newEye.GetSpinZ (newAngleZ) ;
      GetEyeChgP()->SetEye(newEye) ;
      this->InvalidateRect(NULL) ;
      return ;
      }
    VOpGLView::OnMouseMove(nFlags, point);
    }


2012/10/04 追記
同様に改良. ToPAm.zip


  にほんブログ村 IT技術ブログへ



    top

    %d人のブロガーが「いいね」をつけました。