home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 8090 / ModelEdit.7z / ModelEditDlg.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-03-08  |  17.3 KB  |  577 lines

  1. // ModelEditDlg.h : header file
  2. //
  3.  
  4. #if !defined(AFX_MODELEDITDLG_H__A24253B6_085F_11D1_B05B_0020AFF7CDC1__INCLUDED_)
  5. #define AFX_MODELEDITDLG_H__A24253B6_085F_11D1_B05B_0020AFF7CDC1__INCLUDED_
  6.  
  7. #if _MSC_VER >= 1000
  8. #pragma once
  9. #endif // _MSC_VER >= 1000
  10.  
  11. #pragma warning(disable : 4018)
  12.  
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CModelEditDlg dialog
  15.  
  16. #include "renderwnd.h"
  17. #include "keyframewnd.h"
  18. #include "bdefs.h"
  19. #include "model.h"
  20. #include "gl_modelrender.h"
  21. #include "myedit.h"
  22. #include "resource.h"
  23. #include "weighteditdlg.h"
  24. #include "win_idle.h"
  25. #include "draglist.h"
  26. #include "animtracker.h"
  27. #include "solidrectwnd.h"
  28. #include "dimensionsdlg.h"
  29. #include "ltwintreemgr.h"
  30. #include "ltwintreeitem.h"
  31. #include <vector>
  32.  
  33.  
  34.  
  35.  
  36. #include "SetFOVDlg.h" 
  37.  
  38. #include "importstringkeysdlg.h"
  39.  
  40. // For GetPlaybackActiveFlags.
  41. #define PA_ACTIVE    (1<<0)
  42. #define PA_VALID    (1<<1)
  43.  
  44.  
  45. typedef enum
  46. {
  47.     RT_ROTATION,
  48.     RT_POSITION,
  49.     RT_SCALE
  50. } RTType;
  51.  
  52. class RectTracker
  53. {
  54. public:
  55.     UINT            m_CtlID;
  56.     CRect            m_Rect;
  57.     COLORREF        m_Color;
  58.     SolidRectWnd    m_Wnd;
  59.     
  60.     // Position/rotation and which axis.
  61.     RTType            m_Type;
  62.     DWORD            m_Axis;    
  63. };
  64.  
  65. // an item in the piece tree control
  66. class PieceListItem : public CLTWinTreeItem
  67. {
  68. public:
  69.     PieceListItem( const char* pszText ) : CLTWinTreeItem( pszText ) {};
  70.  
  71.     int m_PieceNum;            // which piece this item is part of
  72.     int m_LOD;                // which LOD this is.  -1 is the piece as a whole
  73. };
  74.  
  75. // all the info needed to work with a piece LOD
  76. struct PieceLODInfo
  77. {
  78.     PieceLOD* m_PieceLOD;        // pointer to the piece LOD
  79.     ModelPiece* m_ModelPiece;    // pointer to the piece containing this piece LOD
  80.     int m_LODNum;                // which LOD this piece LOD is within the piece
  81. };
  82.  
  83.  
  84. // ------------------------------------------------------------------------
  85. //this is the structure that will be passed into the thread main function that handles
  86. //the loading of the LTA files.
  87.  
  88. // ------------------------------------------------------------------------
  89. class CLoadLTAThreadParams
  90. {
  91. public:
  92.     CLoadLTAThreadParams() :
  93.         m_pAllocCount(NULL),
  94.         m_pModel(NULL),
  95.         m_bChildLoad(false)
  96.         {}
  97.  
  98.     LAllocCount*    m_pAllocCount;
  99.     Model*            m_pModel;
  100.     bool            m_bChildLoad ;
  101.     std::string            m_Filename ;
  102. };
  103.  
  104. // ------------------------------------------------------------------------
  105. // 
  106. // ------------------------------------------------------------------------
  107. class MEAnimInfo
  108. {
  109. public:
  110.  
  111.                     MEAnimInfo();
  112.  
  113.     // Reset everything.
  114.     void            Reset(Model *pModel=NULL);
  115.  
  116.     void            StartPlayback();
  117.     void            StopPlayback();
  118.  
  119.     Model*            GetModel()        {return m_Tracker.GetModel();}
  120.  
  121.     // The animation is valid if:
  122.     // 1. GetModel() returns a non-null value.
  123.     // 2. The animation indices are valid.
  124.     // 3. The keyframe indices are valid.
  125.     // (This just calls thru to AnimTimeRef::IsValid).
  126.     BOOL            IsValid();
  127.  
  128.     // Update the time in the keyframe window.
  129.     void            SetKeyframeWindowTime();
  130.     
  131.     uint32            CurAnimIndex()    {return m_Tracker.m_TimeRef.m_Cur.m_iAnim;}
  132.     uint32            PrevAnimIndex()    {return m_Tracker.m_TimeRef.m_Prev.m_iAnim;}
  133.  
  134.     uint32            CurAnimTime()    {return m_Tracker.m_TimeRef.m_Cur.m_Time;}
  135.     uint32            PrevAnimTime()    {return m_Tracker.m_TimeRef.m_Prev.m_Time;}
  136.  
  137.     uint32            CurKeyframe()    {return m_Tracker.m_TimeRef.m_Cur.m_iFrame;}
  138.     uint32            PrevKeyframe()    {return m_Tracker.m_TimeRef.m_Prev.m_iFrame;}
  139.  
  140.     ModelAnim*        PrevAnim();
  141.     ModelAnim*        CurAnim();
  142.  
  143.     BOOL            IsAnimPlaying()            { return m_bAnimPlayingForward; }
  144.     BOOL            IsAnimPlayingForward()    { return m_bAnimPlayingForward; }
  145.  
  146.     
  147. public:
  148.     
  149.     BOOL            m_bAnimPlayingForward;
  150.     DWORD            m_dwNumTagged;
  151.  
  152.     UINT            m_AnimButtonID;
  153.  
  154.     CKeyframeWnd    m_Wnd;
  155.     SolidRectWnd    m_ActiveFlagsWnd;
  156.     AnimTracker        m_Tracker;
  157. };
  158.  
  159. typedef CMoArray<MEAnimInfo*> MEAnimArray;
  160.  
  161.  
  162. #define IDLE_DIALOG_DELAY    300
  163.  
  164. // The first animation is the only one you can edit.
  165. #define ANIMINFO_MAIN    0
  166.  
  167.  
  168. // ------------------------------------------------------------------------
  169. // 
  170. // ------------------------------------------------------------------------
  171. class CModelEditDlg : public CDialog
  172. {
  173. friend class IdleChanger;
  174.  
  175. // Construction
  176. public:
  177.     CModelEditDlg(CWnd* pParent = NULL);    // standard constructor
  178.     ~CModelEditDlg();
  179.  
  180. // Dialog Data
  181.     //{{AFX_DATA(CModelEditDlg)
  182.     enum { IDD = IDD_MODELEDIT_DIALOG };
  183.     CDragList        m_AnimList;
  184.     CLTWinTreeMgr    m_PieceList;
  185.     CListCtrl        m_NodeList;
  186.     CButton            m_GlobalSpace;
  187.     CListBox        m_SocketList;
  188.     CMyEdit            m_EditFrameTime;
  189.     CMyEdit            m_EditFrameString;
  190.     CListBox        m_ChildModelList;
  191.     BOOL            m_bDrawSkeleton;
  192.     //}}AFX_DATA
  193.  
  194.     // ClassWizard generated virtual function overrides
  195.     //{{AFX_VIRTUAL(CModelEditDlg)
  196.     public:
  197.     virtual BOOL PreTranslateMessage(MSG* pMsg);
  198.     protected:
  199.     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  200.     virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  201.     virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
  202.     //}}AFX_VIRTUAL
  203.  
  204. // Implementation
  205. public:
  206.  
  207.     ModelSocket*    GetSelectedSocket();
  208.     CButton*        GetTransformEdit(UINT id);
  209.     BOOL            IsButtonSelected(UINT id);
  210.  
  211.     void            SetChangesMade()            { m_bChangesMade = TRUE; }
  212.  
  213.     void            InitTaggedArrays();
  214.     void            InitTaggedArray(uint32 iAnimInfo);
  215.  
  216.     void            DeleteModel();
  217.     void            DeleteSocketAttachments();
  218.  
  219.     // dwActive is filled with a combination of the PA_ flags above.
  220.     // If bAllNoKeysDown is TRUE, then if none of the keys are down it considers them all down.
  221.     // NOTE: even if the keys are down, this only returns animations that are valid.
  222.     void            GetPlaybackActiveFlags( DWORD dwActive[NUM_ANIM_INFOS], 
  223.                                             BOOL bAllIfNoKeysDown=TRUE);
  224.  
  225.     void            SetCurrentPosition( DWORD iAnimInfo,
  226.                                         DWORD nKeyframe1, 
  227.                                         DWORD nKeyframe2, 
  228.                                         float nPercentBetween);
  229.  
  230.     void            SetCurrentPosition(    CKeyframeWnd *pWnd,
  231.                                         DWORD nKeyframe1, 
  232.                                         DWORD nKeyframe2, 
  233.                                         float nPercentBetween);
  234.  
  235.     //this will run through each animation in the model, looking for animations that have the X and Z
  236.     //dimensions of the animation not equal. It will then prompt them for how to fix.
  237.     void            CheckValidAnimationDims();
  238.  
  239.     // retrieve a list of the selected pieces (returns number of selected pieces)
  240.     // this does not iterate through children, the piece itself must be explicitly selected in order to be returned
  241.     int GetSelectedPieces( CLTWinTreeMgr* tree, Model* model, std::vector<ModelPiece*>& selection );
  242.  
  243.     // retrieve a list of the selected piece LODs (returns number of selected LODs)
  244.     // if firstIfParentOnly is true, then only the 0th lod will be returned if only the parent piece is selected
  245.     // otherwise all lods will be returned for the selected piece
  246.     int GetSelectedPieceLODs( CLTWinTreeMgr* tree, Model* model, std::vector<PieceLODInfo>& selection, bool firstIfParentOnly=false );
  247.  
  248.     Model*            GetModel() {return m_pModel;}
  249.     void            UpdateEditFrameTime( );
  250.     void            SetEditFrameTime();
  251.     void            UpdateEditFrameString( );
  252.     void            SetEditFrameString();
  253.     void            UpdateEditFrameTimeEnabled();
  254.     void            UpdateEditFrameStringEnabled();
  255.     void            SetCurrentAnimTime( uint32 iAnimInfo, DWORD dwAnimTime );
  256.     BOOL            SetRenderTexture(const char *pFilename, DWORD nTexture = 0);
  257.  
  258.     // Very useful function.  If any of the animations are invalid or are from a base model (and shouldn't
  259.     // be modified), it brings up an error message and returns false.
  260.     BOOL            CheckModifyAnims(int *pAnims, int nAnims, BOOL bParentOnly=TRUE, BOOL bMessage=TRUE);
  261.  
  262.     // Gets a list of selected animations and calls CheckModifyAnims on it.
  263.     BOOL            GetAnimList(int *pAnims, int listSizeBytes, int &nAnims, BOOL bParentOnly=TRUE, BOOL bMessage=TRUE);
  264.     
  265.     void            ProcessCommandString();
  266.  
  267.     void            FillAnimList();
  268.     void            FillChildModelList();
  269.  
  270.     // Used when something is going to change an animation.. makes sure everything is valid
  271.     // and fills in the current animation and keyframe indices.
  272.     BOOL            GetEditAnimInfo(DWORD *pAnimIndex, DWORD *pKeyframeIndex, bool bAllowChildAnims);
  273.  
  274.     bool            DoSave(const char *pFilename);
  275.     void            CompileD3D( bool saveBeforeCompile );
  276.  
  277.     int                DoMessageBox(UINT idString, int style);
  278.     int                DoMessageBox(LPCTSTR pStr, int style);
  279.  
  280.     // Fills the list in with the selected animations that come from parent model
  281.     // (which are the only animations that should ever be modified).
  282.     int                GetSelectedParentAnims(int *pItems, int maxItems);
  283.  
  284.     // These return TRUE if the CModelEditDlg handles it.. FALSE if the caller should handle it.
  285.     // iButton: (0=left, 1=middle, 2=right)
  286.     BOOL            HandleButtonDown(int iButton, CPoint point);
  287.     BOOL            HandleButtonUp(int iButton);
  288.     void            StartTracker(uint32 iTracker, CPoint centerPt);
  289.  
  290.  
  291. public:
  292.  
  293.     void            InterpForward(uint32 iAnimInfo, DWORD msDelta);
  294.  
  295.     BOOL            DoLoadModel(char *pFilename, BOOL bMessage=TRUE);
  296.     void            UpdateMenuChecks();
  297.     void            CheckChildModels(ModelLoadRequest *pRequest);
  298.     
  299.     
  300.     void            FillNodeList();
  301.     void            FillSocketList(BOOL bPreserveSel=FALSE);
  302.     void            InitTheScrollBar(float max_dist);
  303.     void            SetLODText(int nLOD);
  304.  
  305.     // fill a piece list with a given models pieces
  306.     void            FillPieceList( CLTWinTreeMgr* tree, Model* model );
  307.  
  308.     BOOL            VerifyModels( Model *pModel1, Model *pModel2 );
  309.     BOOL            RecurseAndVerifyModels( ModelNode* pNode1, ModelNode* pNode2 );
  310.     
  311.     void            MoveAnims(int dir);
  312.  
  313.     void            OffsetTrans(LTVector vec);
  314.     void            OffsetDims(LTVector vec);
  315.  
  316.     void            DoAnimEdit(LTVector vec);
  317.  
  318.     void            SetCurrentLOD(float fLOD);
  319.     
  320.  
  321.     // note: these really belong somewhere else.
  322.     static    float            CalcFOV();
  323.     static void            SetFOV(float FOV);
  324.  
  325.     MEAnimInfo*        GetAnimInfo(uint32 iAnimInfo);
  326.  
  327.     // Stop playback for some or all animations.
  328.     void            StopAllPlayback();
  329.     void            ResetAnimInfos();
  330.  
  331.     void            DrawActiveAnimRects(BOOL bForce);
  332.  
  333.     // Increments the keyframe position for the active animations (from GetPlaybackActiveAnims).
  334.     void            IncKeyframe(BOOL bForward);
  335.  
  336.     // Bring up a rename dialog for the specified animation.
  337.     void            DoRenameAnim(DWORD iAnim);
  338.  
  339. protected:
  340.     // helper func, loads lta file, pops up while-load feedback dialog.
  341.     Model*            load_LTA_Using_FeedBackDialog( const char *pFilename, bool isChildModel=false );
  342.  
  343.  
  344.  
  345. public:
  346.  
  347.     // Tracks which animations were active last frame so we don't redraw unnecessarily.
  348.     DWORD                    m_LastAnimActiveFlags[NUM_ANIM_INFOS];
  349.  
  350.     // The trackers.
  351.     CMoArray<RectTracker*>    m_Trackers;
  352.  
  353.     // Where the mouse gets centered to.
  354.     CPoint            m_TrackerCenterPt;
  355.     
  356.     // Are we tracking anything in a rect?
  357.     BOOL            m_bTracking;
  358.  
  359.     // Which tracker are we tracking?
  360.     DWORD            m_iCurTracker;
  361.  
  362.     CPoint            m_LastCursorPos;
  363.  
  364.     // Total accumulated mouse tracking.
  365.     int                m_TotalDelta;
  366.  
  367.     CString            m_OldWindowText;
  368.  
  369.     CImportStringKeysDlg    *m_pImportStringKeyDlg;
  370.  
  371. protected:
  372.  
  373.     WeightEditDlg    m_WeightEditDlg;
  374.         
  375.     HICON            m_hIcon;
  376.     
  377.     HACCEL            m_hAccel;
  378.     CString            m_strFilename;
  379.  
  380.     CBitmapButton    m_btnNumber;
  381.     CBitmapButton    m_btnPrevKey;
  382.     CBitmapButton    m_btnStop;
  383.     CBitmapButton    m_btnFPlay;
  384.     CBitmapButton    m_btnNextKey;
  385.     CBitmapButton    m_btnMoveUp;
  386.     CBitmapButton    m_btnMoveDown;
  387.     CBitmapButton    m_btnDelete;
  388.  
  389.     Model            *m_pModel;
  390.     CString            m_sModelPath;
  391.     CString            m_szCurProjectPath ;
  392.  
  393.     bool            m_bConfirmLoadDlg;        // if false, the load log dialog will disappear automatically
  394.  
  395.     LAllocCount        m_AllocCount;
  396.  
  397.     CRenderWnd        m_RenderWnd; // gl render window.
  398.     //CD3DRenderWnd        m_RenderWnd; // d3d render window
  399.  
  400.     CDimensionsDlg    *m_pDimensionDlg;
  401.  
  402.  
  403.     // Animation windows..
  404.     MEAnimInfo        m_AnimInfos[NUM_ANIM_INFOS];
  405.  
  406.     // This is used to track the selected animations so we can know what order they
  407.     // were selected in.
  408.     CMoArray<DWORD>    m_SelectedAnims;
  409.  
  410.     BOOL            m_bEndDialog;
  411.  
  412.     DWORD            m_nCurrentLOD;
  413.     float            m_CurrentLODDist ;
  414.     BOOL            m_bChangesMade;
  415.     BOOL            m_bFillingNodeList;
  416.  
  417.     DWORD            m_LastIdleTime;
  418.  
  419.     CWinIdle        m_cWinIdle;
  420.  
  421.     // Tracks if we're in a string change (so we don't get into it again).
  422.     BOOL            m_bInStringChange;
  423.  
  424.     struct SLittleLODSlider {
  425.         CScrollBar *m_ScrollBar;
  426.         CMyEdit *m_CurrentValue;
  427.         CWnd *m_MinDist, *m_MaxDist;
  428.  
  429.         void SetMinDist( float val ) { char buf[245] ;sprintf(buf,"%.2f",val); m_MinDist->SetWindowText(buf); }
  430.         void SetMaxDist( float val ) { char buf[245] ;sprintf(buf,"%.2f",val); m_MaxDist->SetWindowText(buf); }
  431.         void SetCurrentValue( float val ) { char buf[245] ;sprintf(buf,"%.2f",val); m_CurrentValue->SetWindowText(buf); }
  432.  
  433.     } m_LODSlider ;
  434.  
  435. public:
  436.  
  437.     void            OnIdle();
  438.  
  439.     // Turn off the default enter key behavior
  440.     virtual void    OnOK();
  441.  
  442.     BOOL            UpdateSelectedAnimList();
  443.     void            OnSelChangeAnimList();
  444.     virtual void    OnDropAnimList(int iItem);
  445.  
  446.     // handle updates from the piece tree control
  447.     void PieceSelChanged( CLTWinTreeMgr* tree );
  448.     void PieceEditText( CLTWinTreeMgr* tree, PieceListItem* item );
  449.  
  450.     // Generated message map functions
  451.     //{{AFX_MSG(CModelEditDlg)
  452.     virtual BOOL OnInitDialog();
  453.     afx_msg void OnPaint();
  454.     afx_msg HCURSOR OnQueryDragIcon();
  455.     afx_msg void OnLoadModel();
  456.     virtual void OnCancel();
  457.     afx_msg LONG OnStartIdle(UINT, LONG);
  458.     afx_msg void OnHelpAbout();
  459.     afx_msg void OnPlayForward();
  460.     afx_msg void OnStop();
  461.     afx_msg void OnAnimMoveDown();
  462.     afx_msg void OnAnimMoveUp();
  463.     afx_msg void OnAnimDelete();
  464.     afx_msg void OnNextKeyframe();
  465.     afx_msg void OnPrevKeyframe();
  466.     afx_msg void OnImport();
  467.     afx_msg void OnImportLODs();
  468.     afx_msg void OnSave();
  469.     afx_msg void OnSaveAs();
  470.     afx_msg void OnCompile();
  471.     afx_msg void OnSaveAndCompile();
  472.     afx_msg void OnSetProjwectDir();
  473.     afx_msg void OnCreateSingleFrame();
  474.     afx_msg void OnRenameAnim();
  475.     afx_msg void OnWireframe();
  476.     afx_msg void OnContinuous();
  477.     afx_msg void OnCameraFollow();
  478.     afx_msg void OnDims();
  479.     afx_msg void OnAnimBox();
  480.     afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  481.     afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  482.     afx_msg void OnModelInfo();
  483.     afx_msg void OnCommandString();
  484.     afx_msg void OnDimensions();
  485.     afx_msg void OnAnimationFramerate();
  486.     afx_msg void OnAnimationLength();
  487.     afx_msg void OnAnimationInterpolation();
  488.     afx_msg void OnTranslationButton();
  489.     afx_msg void OnRotationButton();
  490.     afx_msg void OnSetProjectDir();
  491.     afx_msg void OnXsub();
  492.     afx_msg void OnXadd();
  493.     afx_msg void OnYsub();
  494.     afx_msg void OnYadd();
  495.     afx_msg void OnZsub();
  496.     afx_msg void OnZadd();
  497.     afx_msg void OnNumberAnim();
  498.     afx_msg void OnDuplicateAnim();
  499.     afx_msg void OnCreateAnimFromBindPose();
  500.     afx_msg void OnRenameNode();
  501.     afx_msg void OnUnrotateTopNode();
  502.     afx_msg void OnGenerateVertexNormals();
  503.     afx_msg void OnReverseAnimation();
  504.     afx_msg void OnSelectNullNodes();
  505.     afx_msg void OnRemoveNode();
  506.     afx_msg void OnSetTexture();
  507.     afx_msg void OnDrawSkeleton();
  508.     afx_msg void OnShowSockets();
  509.     afx_msg void OnShowTextures();
  510.     afx_msg void OnShowAttachments();
  511.     afx_msg void OnSolidAttachments();
  512.     afx_msg void OnAddChildModel();
  513.     afx_msg void OnRemoveChildModel();
  514.     afx_msg void OnAddSocket();
  515.     afx_msg void OnRemoveSocket();
  516.     afx_msg void OnRenameSocket();
  517.     afx_msg void OnRebuildChildModelTree();
  518.     afx_msg void OnShowNormals();
  519.     afx_msg void OnShowNormalRef();
  520.     afx_msg void OnProfile();
  521.     afx_msg void OnMovementEncoding();
  522.     afx_msg void OnTimer(UINT nIDEvent);
  523.     afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  524.     afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  525.     afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  526.     afx_msg void OnMood();
  527.     afx_msg void OnInternalRadius();
  528.     afx_msg void OnCalcInternalRadius();
  529.     afx_msg void OnEditWeights();
  530.     afx_msg    void OnReCalcOBBExtent();
  531.     afx_msg void OnPieceInfo();
  532.     afx_msg void OnCreateNullLOD();
  533.     afx_msg void OnPieceSelectNone();
  534.     afx_msg void OnPieceRemoveLODs();
  535.     afx_msg void OnPieceBuildLODs();
  536.     afx_msg void OnPieceMerge();
  537.     afx_msg void OnPieceExpandAll();
  538.     afx_msg void OnPieceCollapseAll();
  539.     afx_msg void OnEndlabeleditNodeList(NMHDR* pNMHDR, LRESULT* pResult);
  540.     afx_msg void OnItemChangedNodeList(NMHDR* pNMHDR, LRESULT* pResult);
  541.     afx_msg void OnDestroy();
  542.     afx_msg LRESULT OnTreeSelChanged(WPARAM wParam, LPARAM lParam);
  543.     afx_msg LRESULT OnTreeEditText(WPARAM wParam, LPARAM lParam);
  544.     afx_msg void OnBeginLabelEditAnimList(NMHDR* pNMHDR, LRESULT* pResult);
  545.     afx_msg void OnEndLabelEditAnimList(NMHDR* pNMHDR, LRESULT* pResult);
  546.     afx_msg void OnItemChangingAnimList(NMHDR* pNMHDR, LRESULT* pResult);
  547.     afx_msg void OnBeginDragAnimList(NMHDR* pNMHDR, LRESULT* pResult);
  548.     afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
  549.     afx_msg void OnSortAnimName();
  550.     afx_msg void OnSortAnimRelation();
  551.     afx_msg void OnDblClkSocketList();
  552.     afx_msg void OnFrameStringChange();
  553.     afx_msg void OnFrameTimeChange();
  554.     afx_msg void OnNewBgColor();
  555.     afx_msg void OnLoadConfirm();
  556.     afx_msg void OnOptionsShoworiginalmodel();
  557.     afx_msg void OnChangeFov();
  558.     afx_msg void OnExportModelStringKeys();
  559.     afx_msg void OnImportModelStringKeys();
  560.     afx_msg void OnItemclickNodelist(NMHDR* pNMHDR, LRESULT* pResult);
  561.     afx_msg void OnOptionsShowVertexWeighting();
  562.     afx_msg void OnNodeeditEditobb();
  563.     afx_msg void OnNodeEditRename();
  564.     afx_msg void OnNodeEditLookAt();
  565.     afx_msg void OnSocketEditLookAt();
  566.     afx_msg void OnExportWeightSets();
  567.     afx_msg void OnImportWeightSets();
  568.     //}}AFX_MSG
  569.     DECLARE_MESSAGE_MAP()
  570. };
  571.  
  572.  
  573. //{{AFX_INSERT_LOCATION}}
  574. // Microsoft Developer Studio will insert additional declarations immediately before the previous line.
  575.  
  576. #endif // !defined(AFX_MODELEDITDLG_H__A24253B6_085F_11D1_B05B_0020AFF7CDC1__INCLUDED_)
  577.