Skip to content

Commit

Permalink
"Sync Vertex Color" option
Browse files Browse the repository at this point in the history
  • Loading branch information
i-saint committed Mar 9, 2017
1 parent e0c39de commit bb2ab13
Show file tree
Hide file tree
Showing 9 changed files with 78 additions and 47 deletions.
19 changes: 10 additions & 9 deletions Plugin/MeshSyncClientMQ/Dialog/Dialog.rc
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ END
// Dialog
//

IDD_MAINDLG DIALOGEX 0, 0, 179, 152
IDD_MAINDLG DIALOGEX 0, 0, 179, 176
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_TOPMOST | WS_EX_TOOLWINDOW
CAPTION "Unity Mesh Sync"
Expand All @@ -58,15 +58,16 @@ BEGIN
RTEXT "Server : Port",IDC_STATIC_SERVER_PORT,6,6,42,8
EDITTEXT IDC_EDIT_SERVER,54,6,84,14,ES_AUTOHSCROLL
EDITTEXT IDC_EDIT_PORT,145,6,27,14,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "Auto Sync",IDC_CHECK_AUTOSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,54,60,10
PUSHBUTTON "Manual Sync",IDC_BUTTON_SYNC,6,66,78,14
PUSHBUTTON "Import Unity Scene",IDC_BUTTON_IMPORT,12,126,78,14
CONTROL "Auto Sync",IDC_CHECK_AUTOSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,78,60,10
PUSHBUTTON "Manual Sync",IDC_BUTTON_SYNC,6,90,78,14
PUSHBUTTON "Import Unity Scene",IDC_BUTTON_IMPORT,12,151,78,14
EDITTEXT IDC_EDIT_SCALEFACTOR,54,24,60,14,ES_AUTOHSCROLL
RTEXT "Scale Factor",IDC_STATIC_SCALEFACTOR,6,24,40,8
CONTROL "Bake Skin",IDC_CHECK_BAKE_SKIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,102,54,10
GROUPBOX "Import Settings",IDC_STATIC_IMPORT_SETTINGS,6,90,156,54
CONTROL "Bake Cloth",IDC_CHECK_BAKE_CLOTH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,114,54,10
CONTROL "Sync Camera",IDC_CHECK_CAMERA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,42,60,10
CONTROL "Bake Skin",IDC_CHECK_BAKE_SKIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,127,54,10
GROUPBOX "Import Settings",IDC_STATIC_IMPORT_SETTINGS,6,114,156,54
CONTROL "Bake Cloth",IDC_CHECK_BAKE_CLOTH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,138,54,10
CONTROL "Sync Camera",IDC_CHECK_CAMERA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,60,60,10
CONTROL "Sync Vertex Color",IDC_CHECK_VCOLOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,48,73,10
END


Expand All @@ -83,7 +84,7 @@ BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 172
TOPMARGIN, 7
BOTTOMMARGIN, 145
BOTTOMMARGIN, 169
END
END
#endif // APSTUDIO_INVOKED
Expand Down
10 changes: 9 additions & 1 deletion Plugin/MeshSyncClientMQ/Dialog/MainDlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ std::string& GetServer(MeshSyncClientPlugin *plugin);
uint16_t& GetPort(MeshSyncClientPlugin *plugin);
float& GetScaleFactor(MeshSyncClientPlugin *plugin);
bool& GetAutoSync(MeshSyncClientPlugin *plugin);
bool& GetSyncVertexColor(MeshSyncClientPlugin *plugin);
bool& GetSyncCamera(MeshSyncClientPlugin *plugin);
bool& GetBakeSkin(MeshSyncClientPlugin *plugin);
bool& GetBakeCloth(MeshSyncClientPlugin *plugin);
Expand Down Expand Up @@ -51,6 +52,7 @@ LRESULT CMainDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam
m_edit_server.Attach(GetDlgItem(IDC_EDIT_SERVER));
m_edit_port.Attach(GetDlgItem(IDC_EDIT_PORT));
m_edit_scale.Attach(GetDlgItem(IDC_EDIT_SCALEFACTOR));
m_check_vcolor.Attach(GetDlgItem(IDC_CHECK_VCOLOR));
m_check_camera.Attach(GetDlgItem(IDC_CHECK_CAMERA));
m_check_autosync.Attach(GetDlgItem(IDC_CHECK_AUTOSYNC));
m_check_bake_skin.Attach(GetDlgItem(IDC_CHECK_BAKE_SKIN));
Expand All @@ -62,6 +64,7 @@ LRESULT CMainDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam
m_edit_port.SetWindowText(buf);
sprintf(buf, "%.3f", GetScaleFactor(m_plugin));
m_edit_scale.SetWindowText(buf);
m_check_vcolor.SetCheck(GetSyncVertexColor(m_plugin));
m_check_camera.SetCheck(GetSyncCamera(m_plugin));
m_check_autosync.SetCheck(GetAutoSync(m_plugin));
m_check_bake_skin.SetCheck(GetBakeSkin(m_plugin));
Expand Down Expand Up @@ -122,10 +125,15 @@ LRESULT CMainDlg::OnEnChangeScaleFactor(WORD, WORD, HWND hWndCtl, BOOL &)
return 0;
}

LRESULT CMainDlg::OnBnClickedCheckVcolor(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
GetSyncVertexColor(m_plugin) = m_check_vcolor.GetCheck() != 0;
return 0;
}

LRESULT CMainDlg::OnBnClickedCheckCamera(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
GetSyncCamera(m_plugin) = m_check_camera.GetCheck() != 0;

return 0;
}

Expand Down
3 changes: 3 additions & 0 deletions Plugin/MeshSyncClientMQ/Dialog/MainDlg.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,
COMMAND_HANDLER(IDC_CHECK_BAKE_CLOTH, BN_CLICKED, OnBnClickedCheckBakeCloth)
COMMAND_HANDLER(IDC_BUTTON_IMPORT, BN_CLICKED, OnBnClickedButtonImport)
COMMAND_HANDLER(IDC_CHECK_CAMERA, BN_CLICKED, OnBnClickedCheckCamera)
COMMAND_HANDLER(IDC_CHECK_VCOLOR, BN_CLICKED, OnBnClickedCheckVcolor)
END_MSG_MAP()

LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
Expand All @@ -42,6 +43,7 @@ class CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,
LRESULT OnEnChangeEditServer(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnEnChangeEditPort(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnEnChangeScaleFactor(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnBnClickedCheckVcolor(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnBnClickedCheckCamera(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnBnClickedCheckAutosync(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnBnClickedButtonSync(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
Expand All @@ -55,6 +57,7 @@ class CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,
CEdit m_edit_server;
CEdit m_edit_port;
CEdit m_edit_scale;
CButton m_check_vcolor;
CButton m_check_camera;
CButton m_check_autosync;
CButton m_check_bake_skin;
Expand Down
3 changes: 2 additions & 1 deletion Plugin/MeshSyncClientMQ/Dialog/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,15 @@
#define IDC_CHECK_BAKE_SKIN 1009
#define IDC_CHECK_BAKE_CLOTH 1010
#define IDC_CHECK_CAMERA 1011
#define IDC_CHECK_VCOLOR 1012

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 202
#define _APS_NEXT_COMMAND_VALUE 32775
#define _APS_NEXT_CONTROL_VALUE 1006
#define _APS_NEXT_CONTROL_VALUE 1013
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
49 changes: 36 additions & 13 deletions Plugin/MeshSyncClientMQ/DialogMQ4.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,13 @@ SettingsDlg::SettingsDlg(MeshSyncClientPlugin *plugin, MQWindowBase& parent) : M
SetOutSpace(0.4);

wchar_t buf[128];
double margin = 0.3;

MQFrame *frame = CreateVerticalFrame(this);
{
MQFrame *hf = CreateHorizontalFrame(frame);
MQFrame *vf = CreateVerticalFrame(this);
vf->SetOutSpace(margin);

MQFrame *hf = CreateHorizontalFrame(vf);
CreateLabel(hf, L"Server : Port");
m_edit_server = CreateEdit(hf);
m_edit_server->SetText(L(m_plugin->getSync().getClientSettings().server));
Expand All @@ -36,30 +39,44 @@ SettingsDlg::SettingsDlg(MeshSyncClientPlugin *plugin, MQWindowBase& parent) : M
m_edit_port->SetNumeric(MQEdit::NUMERIC_INT);
m_edit_port->SetText(buf);
m_edit_port->AddChangedEvent(this, &SettingsDlg::OnPortChange);
}
{

swprintf(buf, L"%.3f", m_plugin->getSync().getScaleFactor());
MQFrame *hf = CreateHorizontalFrame(frame);
hf = CreateHorizontalFrame(vf);
CreateLabel(hf, L"Scale Factor");
m_edit_scale = CreateEdit(hf);
m_edit_scale->SetNumeric(MQEdit::NUMERIC_DOUBLE);
m_edit_scale->SetText(buf);
m_edit_scale->AddChangedEvent(this, &SettingsDlg::OnScaleChange);
}

m_check_camera = CreateCheckBox(frame, L"Sync Camera");
m_check_camera->SetChecked(m_plugin->getSync().getSyncCamera());
m_check_camera->AddChangedEvent(this, &SettingsDlg::OnSyncCameraChange);
{
MQFrame *vf = CreateVerticalFrame(this);
vf->SetOutSpace(margin);

m_check_vcolor = CreateCheckBox(vf, L"Sync Vertex Color");
m_check_vcolor->SetChecked(m_plugin->getSync().getSyncVertexColor());
m_check_vcolor->AddChangedEvent(this, &SettingsDlg::OnSyncVertexColorChange);

m_check_camera = CreateCheckBox(vf, L"Sync Camera");
m_check_camera->SetChecked(m_plugin->getSync().getSyncCamera());
m_check_camera->AddChangedEvent(this, &SettingsDlg::OnSyncCameraChange);
}

{
MQFrame *vf = CreateVerticalFrame(this);
vf->SetOutSpace(margin);

m_check_autosync = CreateCheckBox(frame, L"Auto Sync");
m_check_autosync->SetChecked(m_plugin->getSync().getAutoSync());
m_check_autosync->AddChangedEvent(this, &SettingsDlg::OnAutoSyncChange);
m_check_autosync = CreateCheckBox(vf, L"Auto Sync");
m_check_autosync->SetChecked(m_plugin->getSync().getAutoSync());
m_check_autosync->AddChangedEvent(this, &SettingsDlg::OnAutoSyncChange);

m_button_sync = CreateButton(frame, L"Manual Sync");
m_button_sync->AddClickEvent(this, &SettingsDlg::OnSyncClicked);
m_button_sync = CreateButton(vf, L"Manual Sync");
m_button_sync->AddClickEvent(this, &SettingsDlg::OnSyncClicked);
}

{
MQFrame *vf = CreateVerticalFrame(this);
vf->SetOutSpace(margin);

CreateLabel(vf, L"Import Settings");

Expand Down Expand Up @@ -108,6 +125,12 @@ BOOL SettingsDlg::OnScaleChange(MQWidgetBase * sender, MQDocument doc)
return 0;
}

BOOL SettingsDlg::OnSyncVertexColorChange(MQWidgetBase *sender, MQDocument doc)
{
m_plugin->getSync().getSyncVertexColor() = m_check_vcolor->GetChecked();
return 0;
}

BOOL SettingsDlg::OnSyncCameraChange(MQWidgetBase * sender, MQDocument doc)
{
m_plugin->getSync().getSyncCamera() = m_check_camera->GetChecked();
Expand Down
2 changes: 2 additions & 0 deletions Plugin/MeshSyncClientMQ/DialogMQ4.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class SettingsDlg : public MQWindow
BOOL OnServerChange(MQWidgetBase *sender, MQDocument doc);
BOOL OnPortChange(MQWidgetBase *sender, MQDocument doc);
BOOL OnScaleChange(MQWidgetBase *sender, MQDocument doc);
BOOL OnSyncVertexColorChange(MQWidgetBase *sender, MQDocument doc);
BOOL OnSyncCameraChange(MQWidgetBase *sender, MQDocument doc);
BOOL OnAutoSyncChange(MQWidgetBase *sender, MQDocument doc);
BOOL OnSyncClicked(MQWidgetBase *sender, MQDocument doc);
Expand All @@ -24,6 +25,7 @@ class SettingsDlg : public MQWindow
MQEdit *m_edit_server = nullptr;
MQEdit *m_edit_port = nullptr;
MQEdit *m_edit_scale = nullptr;
MQCheckBox *m_check_vcolor = nullptr;
MQCheckBox *m_check_camera = nullptr;
MQCheckBox *m_check_autosync = nullptr;
MQButton *m_button_sync = nullptr;
Expand Down
33 changes: 10 additions & 23 deletions Plugin/MeshSyncClientMQ/MQSync.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ ms::ClientSettings& MQSync::getClientSettings() { return m_settings; }
std::string& MQSync::getHostCameraPath() { return m_host_camera_path; }
float& MQSync::getScaleFactor() { return m_scale_factor; }
bool& MQSync::getAutoSync() { return m_auto_sync; }
bool & MQSync::getSyncVertexColor() { return m_sync_vertex_color; }
bool& MQSync::getSyncCamera() { return m_sync_camera; }
bool& MQSync::getBakeSkin() { return m_bake_skin; }
bool& MQSync::getBakeCloth() { return m_bake_cloth; }
Expand Down Expand Up @@ -520,29 +521,15 @@ void MQSync::extractMeshData(MQDocument doc, MQObject obj, ms::Mesh& dst)
}

// copy vertex colors if needed
{
bool copy_vertex_color = false;

auto mids = dst.materialIDs;
mids.erase(std::unique(mids.begin(), mids.end()), mids.end());
for (int mid : mids) {
if (mid >= 0) {
if (doc->GetMaterial(mid)->GetVertexColor() != MQMATERIAL_VERTEXCOLOR_DISABLE) {
copy_vertex_color = true;
break;
}
}
}
if (copy_vertex_color) {
dst.colors.resize(nindices);
dst.flags.has_colors = 1;
auto *colors = dst.colors.data();
for (int fi = 0; fi < nfaces; ++fi) {
int count = dst.counts[fi];
if (count >= 3 /*&& obj->GetFaceVisible(fi)*/) {
for (int ci = 0; ci < count; ++ci) {
*(colors++) = Color32ToFloat4(obj->GetFaceVertexColor(fi, ci));
}
if (m_sync_vertex_color) {
dst.colors.resize(nindices);
dst.flags.has_colors = 1;
auto *colors = dst.colors.data();
for (int fi = 0; fi < nfaces; ++fi) {
int count = dst.counts[fi];
if (count >= 3 /*&& obj->GetFaceVisible(fi)*/) {
for (int ci = 0; ci < count; ++ci) {
*(colors++) = Color32ToFloat4(obj->GetFaceVertexColor(fi, ci));
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions Plugin/MeshSyncClientMQ/MQSync.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class MQSync
std::string& getHostCameraPath();
float& getScaleFactor();
bool& getAutoSync();
bool& getSyncVertexColor();
bool& getSyncCamera();
bool& getBakeSkin();
bool& getBakeCloth();
Expand Down Expand Up @@ -46,6 +47,7 @@ class MQSync
float m_scale_factor = 200.0f;
std::string m_host_camera_path = "/Main Camera";
bool m_auto_sync = false;
bool m_sync_vertex_color = false;
bool m_sync_camera = false;

bool m_bake_skin = false;
Expand Down
4 changes: 4 additions & 0 deletions Plugin/MeshSyncClientMQ/MeshSyncClientMQ3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,10 @@ bool& GetAutoSync(MeshSyncClientPlugin *plugin)
{
return plugin->getSync().getAutoSync();
}
bool& GetSyncVertexColor(MeshSyncClientPlugin *plugin)
{
return plugin->getSync().getSyncVertexColor();
}
bool& GetSyncCamera(MeshSyncClientPlugin *plugin)
{
return plugin->getSync().getSyncCamera();
Expand Down

0 comments on commit bb2ab13

Please sign in to comment.