Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/ogre/Tools/3dsmaxExport/OgreExport/src/OgreMaxExportTabMesh.cpp @ 24

Last change on this file since 24 was 6, checked in by anonymous, 17 years ago

=…

File size: 6.9 KB
Line 
1#include "OgreExport.h"
2#include "resource.h"
3
4static OgreMaxExport_Mesh* sInst;
5
6void OgreMaxExport_Mesh::onInitDialog(HWND hDlg) {
7        OgreMaxExport_TabPaneHandler::onInitDialog(hDlg);
8
9        // set tab pane initial values
10        CheckDlgButton(hDlg, IDC_RADIO_EXPORT_SUBMESHES, m_config.getExportMultipleFiles() ? BST_UNCHECKED : BST_CHECKED);
11        CheckDlgButton(hDlg, IDC_RADIO_EXPORT_FILES, m_config.getExportMultipleFiles() ? BST_CHECKED : BST_UNCHECKED);
12        CheckDlgButton(hDlg, IDC_CHK_SHARE_SKELETON, m_config.getUseSingleSkeleton() ? BST_CHECKED : BST_UNCHECKED);
13        CheckDlgButton(hDlg, IDC_CHK_REBUILD_NORMALS, m_config.getRebuildNormals() ? BST_CHECKED : BST_UNCHECKED);
14        CheckDlgButton(hDlg, IDC_CHK_INVERT_NORMALS, m_config.getInvertNormals() ? BST_CHECKED : BST_UNCHECKED);
15        CheckDlgButton(hDlg, IDC_CHK_VERTEX_COLORS, m_config.getExportVertexColours() ? BST_CHECKED : BST_UNCHECKED);
16        CheckDlgButton(hDlg, IDC_CHK_MERGE_MESHES, m_config.getMergeMeshes() ? BST_CHECKED : BST_UNCHECKED);
17        CheckDlgButton(hDlg, IDC_CHK_BINARY_MESH, m_config.getExportBinaryMesh() ? BST_CHECKED : BST_UNCHECKED);
18        CheckDlgButton(hDlg, IDC_CHK_GENERATE_TANGENTS, m_config.getGenerateTangents() ? BST_CHECKED : BST_UNCHECKED);
19        CheckDlgButton(hDlg, IDC_CHK_GENERATE_EDGELISTS, m_config.getBuildEdgeLists() ? BST_CHECKED : BST_UNCHECKED);
20        CheckDlgButton(hDlg, IDC_CHK_OPTIMIZE, m_config.getOptmizeBinaryMesh() ? BST_CHECKED : BST_UNCHECKED);
21
22        SendMessage(GetDlgItem(hDlg, IDC_COLOR_FORMAT), CB_ADDSTRING, 0, (LPARAM)_T("Direct3D"));
23        SendMessage(GetDlgItem(hDlg, IDC_COLOR_FORMAT), CB_SETITEMDATA, 0, (LPARAM)(DWORD)OgreMax::DIRECT3D);
24        SendMessage(GetDlgItem(hDlg, IDC_COLOR_FORMAT), CB_ADDSTRING, 0, (LPARAM)_T("OpenGL"));
25        SendMessage(GetDlgItem(hDlg, IDC_COLOR_FORMAT), CB_SETITEMDATA, 1, (LPARAM)(DWORD)OgreMax::OPENGL);
26
27        SendMessage(GetDlgItem(hDlg, IDC_ENDIAN), CB_ADDSTRING, 0, (LPARAM)_T("Native"));
28        SendMessage(GetDlgItem(hDlg, IDC_ENDIAN), CB_SETITEMDATA, 0, (LPARAM)(DWORD)OgreMax::NATIVE);
29        SendMessage(GetDlgItem(hDlg, IDC_ENDIAN), CB_ADDSTRING, 0, (LPARAM)_T("Big Endian"));
30        SendMessage(GetDlgItem(hDlg, IDC_ENDIAN), CB_SETITEMDATA, 1, (LPARAM)(DWORD)OgreMax::BIG);
31        SendMessage(GetDlgItem(hDlg, IDC_ENDIAN), CB_ADDSTRING, 0, (LPARAM)_T("Little Endian"));
32        SendMessage(GetDlgItem(hDlg, IDC_ENDIAN), CB_SETITEMDATA, 2, (LPARAM)(DWORD)OgreMax::LITTLE);
33
34        SendMessage(GetDlgItem(hDlg, IDC_COLOR_FORMAT), CB_SETCURSEL, (WPARAM)m_config.getVertexColourFormat(), 0);
35        SendMessage(GetDlgItem(hDlg, IDC_ENDIAN), CB_SETCURSEL, (WPARAM)m_config.getEndian(), 0);
36
37        CheckDlgButton(hDlg, IDC_CHK_GENERATE_LOD, m_config.getGenerateLod() ? BST_CHECKED : BST_UNCHECKED);
38
39        std::stringstream ss;
40        ss << m_config.getNumLodLevels();
41        SetWindowText(GetDlgItem(hDlg, IDC_LOD_NUM_LEVELS), ss.str().c_str());
42
43        ss.str("");
44        ss << m_config.getLodDistance();
45        SetWindowText(GetDlgItem(hDlg, IDC_LOD_DISTANCE), ss.str().c_str());
46
47        ss.str("");
48        ss << m_config.getLodPercentReduction();
49        SetWindowText(GetDlgItem(hDlg, IDC_LOD_PERCENT), ss.str().c_str());
50
51        ss.str("");
52        ss << m_config.getLodVertexReduction();
53        SetWindowText(GetDlgItem(hDlg, IDC_LOD_VERTEX_COUNT), ss.str().c_str());
54
55        // disable controls that are not "on" in particular modes
56        setControlStates();
57}
58
59void OgreMaxExport_Mesh::onDestroy() {
60        update();
61}
62
63// read the contents from the dialog controls
64void OgreMaxExport_Mesh::update() {
65
66        // get tab pane values
67        m_config.setExportMultipleFiles(BST_CHECKED == IsDlgButtonChecked(m_hDlg, IDC_RADIO_EXPORT_FILES));
68        m_config.setUseSingleSkeleton(BST_CHECKED == IsDlgButtonChecked(m_hDlg, IDC_CHK_SHARE_SKELETON));
69        m_config.setRebuildNormals(BST_CHECKED == IsDlgButtonChecked(m_hDlg, IDC_CHK_REBUILD_NORMALS));
70        m_config.setInvertNormals(BST_CHECKED == IsDlgButtonChecked(m_hDlg, IDC_CHK_INVERT_NORMALS));
71        m_config.setExportVertexColours(BST_CHECKED == IsDlgButtonChecked(m_hDlg, IDC_CHK_VERTEX_COLORS));
72        m_config.setMergeMeshes(BST_CHECKED == IsDlgButtonChecked(m_hDlg, IDC_CHK_MERGE_MESHES));
73        m_config.setExportBinaryMesh(BST_CHECKED == IsDlgButtonChecked(m_hDlg, IDC_CHK_BINARY_MESH));
74        m_config.setGenerateTangents(BST_CHECKED == IsDlgButtonChecked(m_hDlg, IDC_CHK_GENERATE_TANGENTS));
75        m_config.setBuildEdgeLists(BST_CHECKED == IsDlgButtonChecked(m_hDlg, IDC_CHK_GENERATE_EDGELISTS));
76        m_config.setOptmizeBinaryMesh(BST_CHECKED == IsDlgButtonChecked(m_hDlg, IDC_CHK_OPTIMIZE));
77
78        LRESULT item = SendMessage(GetDlgItem(m_hDlg, IDC_COLOR_FORMAT), CB_GETCURSEL, 0, 0);
79        m_config.setVertexColourFormat((OgreMax::VertexColourFormat)SendMessage(GetDlgItem(m_hDlg, IDC_COLOR_FORMAT), CB_GETITEMDATA, item, 0));
80        item = SendMessage(GetDlgItem(m_hDlg, IDC_ENDIAN), CB_GETCURSEL, 0, 0);
81        m_config.setEndian((OgreMax::Endian)SendMessage(GetDlgItem(m_hDlg, IDC_ENDIAN), CB_GETITEMDATA, item, 0));
82
83        m_config.setGenerateLod(BST_CHECKED == IsDlgButtonChecked(m_hDlg, IDC_CHK_GENERATE_LOD));
84
85        char buf[16];
86        GetWindowText(GetDlgItem(m_hDlg, IDC_LOD_NUM_LEVELS), buf, 16);
87        m_config.setNumLodLevels(atoi(buf));
88        GetWindowText(GetDlgItem(m_hDlg, IDC_LOD_DISTANCE), buf, 16);
89        m_config.setLodDistance(atof(buf));
90        GetWindowText(GetDlgItem(m_hDlg, IDC_LOD_PERCENT), buf, 16);
91        m_config.setLodPercentReduction(atof(buf));
92        GetWindowText(GetDlgItem(m_hDlg, IDC_LOD_VERTEX_COUNT), buf, 16);
93        m_config.setLodVertexReduction(atoi(buf));
94}
95
96void OgreMaxExport_Mesh::onClickBinaryMesh() {
97        m_config.setExportBinaryMesh(BST_CHECKED == IsDlgButtonChecked(m_hDlg, IDC_CHK_BINARY_MESH));
98        setControlStates();
99}
100
101// set control enabled/disabled states
102void OgreMaxExport_Mesh::setControlStates() {
103
104        BOOL enable = FALSE;
105        if (m_config.getExportBinaryMesh()) {
106                enable = TRUE;
107        }
108
109        EnableWindow(GetDlgItem(m_hDlg, IDC_CHK_GENERATE_TANGENTS), enable);
110        EnableWindow(GetDlgItem(m_hDlg, IDC_CHK_GENERATE_EDGELISTS), enable);
111        EnableWindow(GetDlgItem(m_hDlg, IDC_CHK_OPTIMIZE), enable);
112        EnableWindow(GetDlgItem(m_hDlg, IDC_LOD_USE_PERCENT), enable);
113        EnableWindow(GetDlgItem(m_hDlg, IDC_LOD_USE_VERTEX), enable);
114        EnableWindow(GetDlgItem(m_hDlg, IDC_COLOR_FORMAT), enable);
115        EnableWindow(GetDlgItem(m_hDlg, IDC_ENDIAN), enable);
116        EnableWindow(GetDlgItem(m_hDlg, IDC_CHK_GENERATE_LOD), enable);
117        EnableWindow(GetDlgItem(m_hDlg, IDC_LOD_NUM_LEVELS), enable);
118        EnableWindow(GetDlgItem(m_hDlg, IDC_LOD_DISTANCE), enable);
119        EnableWindow(GetDlgItem(m_hDlg, IDC_LOD_PERCENT), enable);
120        EnableWindow(GetDlgItem(m_hDlg, IDC_LOD_VERTEX_COUNT), enable);
121}
122
123// for the sake of sanity, keep the dlgproc and the handler class implementation here in the same source file
124INT_PTR CALLBACK MeshTabDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
125
126        switch(message) {
127        case WM_INITDIALOG:
128                sInst = (OgreMaxExport_Mesh*) lParam;
129
130                sInst->onInitDialog(hDlg);
131                SetWindowPos(hDlg, HWND_TOP, 10, 40, 0, 0, SWP_NOSIZE);
132                ShowWindow(hDlg, SW_SHOW);
133                break;
134
135        case WM_COMMAND:
136                switch(HIWORD(wParam)) {
137                case BN_CLICKED:
138                        switch(LOWORD(wParam)) {
139                        case IDC_CHK_BINARY_MESH:
140                                sInst->onClickBinaryMesh();
141                                break;
142                        }
143                        break;
144                }
145                break;
146
147        case WM_DESTROY:
148                sInst->onDestroy();
149                break;
150        }
151        return FALSE;
152}
Note: See TracBrowser for help on using the repository browser.