Skip to content

Commit

Permalink
MacOSX対応
Browse files Browse the repository at this point in the history
  • Loading branch information
devil-tamachan committed Nov 13, 2017
1 parent 6858ee9 commit e813d0c
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 113 deletions.
38 changes: 26 additions & 12 deletions CMakeLists.txt
Expand Up @@ -22,22 +22,36 @@ INCLUDE_DIRECTORIES( "${MQSDK_INCLUDE_DIR}" )

set(MQTENTEN_TENUCHI 0 CACHE BOOL "Enable Ten-uchi (GPL License Warning!)")

add_library(MQTenTen SHARED
MQTenTen.cpp
${MQSDK_INCLUDE_DIR}/MQInit.cpp
${MQSDK_INCLUDE_DIR}/MQPlugin.cpp
${MQSDK_INCLUDE_DIR}/MQWidget.cpp
${MQSDK_INCLUDE_DIR}/MQBasePlugin.cpp
${MQSDK_INCLUDE_DIR}/MQSetting.cpp
${MQSDK_INCLUDE_DIR}/MQ3DLib.cpp
)
target_link_libraries( MQTenTen ${GMP_LIBRARIES} )
target_link_libraries( MQTenTen ${MPFR_LIBRARIES} )

IF(WIN32)
add_library(MQTenTen SHARED
MQTenTen.cpp
${MQSDK_INCLUDE_DIR}/MQInit.cpp
${MQSDK_INCLUDE_DIR}/MQPlugin.cpp
${MQSDK_INCLUDE_DIR}/MQWidget.cpp
${MQSDK_INCLUDE_DIR}/MQBasePlugin.cpp
${MQSDK_INCLUDE_DIR}/MQSetting.cpp
${MQSDK_INCLUDE_DIR}/MQ3DLib.cpp
)
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /OPT:REF")
ELSE()
add_library(MQTenTen MODULE
MQTenTen.cpp
${MQSDK_INCLUDE_DIR}/MQInit.cpp
${MQSDK_INCLUDE_DIR}/MQPlugin.cpp
${MQSDK_INCLUDE_DIR}/MQWidget.cpp
${MQSDK_INCLUDE_DIR}/MQBasePlugin.cpp
${MQSDK_INCLUDE_DIR}/MQSetting.cpp
${MQSDK_INCLUDE_DIR}/MQ3DLib.cpp
${MQSDK_INCLUDE_DIR}/osx/StringUtil.mm
)
target_link_libraries(MQTenTen "-framework CoreFoundation")
target_link_libraries(MQTenTen "-framework Cocoa")
set_target_properties(MQTenTen PROPERTIES BUNDLE TRUE)
ENDIF()

target_link_libraries( MQTenTen ${GMP_LIBRARIES} )
target_link_libraries( MQTenTen ${MPFR_LIBRARIES} )

if(CMAKE_CL_64)
set_target_properties(MQTenTen PROPERTIES OUTPUT_NAME "MQTenTen64")
endif()
Expand Down
130 changes: 46 additions & 84 deletions MQTenten.cpp
@@ -1,12 +1,16 @@



// TODO:
// ・Arcがおかしいときがある
// ・点打ちの完成
// ・対GPL対策
// ・Arcがおかしいときがある
// ・点打ちの完成
// ・対GPL対策

#if defined _WIN32 || defined __CYGWIN__
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#else
#define _MAX_PATH PATH_MAX
#endif
#include <stdio.h>
#include <math.h>
#include <vector>
Expand Down Expand Up @@ -71,11 +75,17 @@ typedef CGAL::Delaunay_triangulation_2<K, Tds> DT;
#include "TamaGraphLib.h"


#if defined _WIN32 || defined __CYGWIN__
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
//プラグインとしては特に必要な処理はないので、何もせずにTRUEを返す
//プラグインとしては特に必要な処理はないので、何もせずにTRUEを返す
return TRUE;
}
#else
__attribute__((constructor)) void DllMain()
{
}
#endif

class TenTenWindow : public MQWindow
{
Expand Down Expand Up @@ -139,17 +149,17 @@ TenTenWindow::TenTenWindow(MQWindowBase& parent) : MQWindow(parent), addvbtn(NUL
//paramFrame->SetMatrixColumn(2);

#ifdef ENABLE_TENUCHI
addvbtn = CreateButton(paramFrame, L"点打ち");
addvbtn = CreateButton(paramFrame, L"点打ち");
addvbtn->SetToggle(true);
addvbtn->SetDown(true);
#endif //#ifdef ENABLE_TENUCHI
delvbtn = CreateButton(paramFrame, L"点消し");
delvbtn = CreateButton(paramFrame, L"点消し");
delvbtn->SetToggle(true);
#ifndef ENABLE_TENUCHI
delvbtn->SetDown(true);
#endif
#ifdef ENABLE_TENUCHI
reEdgebtn = CreateButton(paramFrame, L"辺貼り直し");
reEdgebtn = CreateButton(paramFrame, L"辺貼り直し");
reEdgebtn->SetToggle(true);
#endif //#ifdef ENABLE_TENUCHI

Expand All @@ -159,7 +169,7 @@ TenTenWindow::TenTenWindow(MQWindowBase& parent) : MQWindow(parent), addvbtn(NUL
#endif //#ifdef ENABLE_TENUCHI
delvbtn->AddClickEvent(this, &TenTenWindow::OnClickDelV);

chkArcSplit = CreateCheckBox(paramFrame, L"弧分割");
chkArcSplit = CreateCheckBox(paramFrame, L"弧分割");
chkArcSplit->SetChecked(bArcSplit);
chkArcSplit->AddChangedEvent(this, &TenTenWindow::OnCheckArcSplit);

Expand All @@ -186,11 +196,11 @@ class TenTenPlugin : public MQCommandPlugin

BOOL AddVertexOnTri(MQDocument doc, int oi, int fi, MQPoint &hitpoint, bool bUpdateUndo);

// 左ボタンが押されたとき
// 左ボタンが押されたとき
virtual BOOL OnLeftButtonDown(MQDocument doc, MQScene scene, MOUSE_BUTTON_STATE& state);
// 左ボタンが押されながらマウスが移動したとき
// 左ボタンが押されながらマウスが移動したとき
//virtual BOOL OnLeftButtonMove(MQDocument doc, MQScene scene, MOUSE_BUTTON_STATE& state);
// 左ボタンが離されたとき
// 左ボタンが離されたとき
//virtual BOOL OnLeftButtonUp(MQDocument doc, MQScene scene, MOUSE_BUTTON_STATE& state);

int GetMode()
Expand All @@ -203,6 +213,12 @@ class TenTenPlugin : public MQCommandPlugin
if(win)return win->bArcSplit;
else return false;
}
#if __APPLE__
virtual MQBasePlugin *CreateNewPlugin()
{
return new TenTenPlugin();
}
#endif

private:
BOOL bActive;
Expand All @@ -213,15 +229,15 @@ class TenTenPlugin : public MQCommandPlugin

void TenTenPlugin::GetPlugInID(DWORD *Product, DWORD *ID)
{
// プロダクト名(制作者名)とIDを、全部で64bitの値として返す
// 値は他と重複しないようなランダムなもので良い
// プロダクト名(制作者名)とIDを、全部で64bitの値として返す
// 値は他と重複しないようなランダムなもので良い
*Product = 0xA8BEE201;
*ID = 0x9A9D0493;
}

const char *TenTenPlugin::GetPlugInName(void)
{
// プラグイン名
// プラグイン名
return "MQTenTen Copyright(C) 2017, tamachan";
}

Expand All @@ -232,7 +248,7 @@ const char *TenTenPlugin::EnumString()

BOOL TenTenPlugin::Initialize()
{
// 特に何もしないので、そのままTRUEを返す
// 特に何もしないので、そのままTRUEを返す
return TRUE;
}

Expand All @@ -250,64 +266,6 @@ MQBasePlugin *GetPluginClass()
static TenTenPlugin plugin;
return &plugin;
}
/*
void AABB_AddMQObj2(std::list<Triangle> &triangles, MQDocument doc, MQObject o, int oi)
{
if(o==NULL)return;
int numV = o->GetVertexCount();
int numF = o->GetFaceCount();
for(int k=0;k<numF;k++)
{
if(doc->IsSelectFace(oi, k)==FALSE)continue;
int numFV = o->GetFacePointCount(k);
if(numFV<3)continue;
std::vector<int> index(numFV);
o->GetFacePointArray(k, &(*index.begin()));
int numTri = numFV - 2;
std::vector<int> indices(numTri*3);
if(numFV==3)
{
indices[0] = 0;
indices[1] = 1;
indices[2] = 2;
} else {
std::vector<MQPoint> pts(numFV);
for(int i=0; i<numFV; i++)
{
pts[i] = o->GetVertex(index[i]);
}
doc->Triangulate(&(*pts.begin()), numFV, &(*indices.begin()), numTri*3);
}
for(int m=0;m<numTri;m++)
{
MQPoint p;
p = o->GetVertex(index[indices[m*3+0]]);
Point a(p.x, p.y, p.z);
p = o->GetVertex(index[indices[m*3+1]]);
Point b(p.x, p.y, p.z);
p = o->GetVertex(index[indices[m*3+2]]);
Point c(p.x, p.y, p.z);
triangles.push_back(Triangle(a,b,c));
}
}
}
void AABB_AddMQObjs(std::list<Triangle> &triangles, MQDocument doc)
{
//std::list<Triangle> triangles;
int numobj = doc->GetObjectCount();
for(int oi=0;oi<numobj;oi++)
{
MQObject o = doc->GetObject(oi);
if(o==NULL || o->GetLocking() || o->GetVisible()==0)continue;
AABB_AddMQObj2(triangles, doc, o, oi);
}
Tree tree(triangles.begin(),triangles.end());
}
*/

bool IsVisibleFace(MQScene scene, MQObject o, int fi)
{
Expand Down Expand Up @@ -348,13 +306,14 @@ bool IsFrontTriSelected(MQDocument doc, MQScene scene)

//---------------------------------------------------------------------------
// TenTenPlugin::Activate
// 表示・非表示切り替え要求
// 表示・非表示切り替え要求
//---------------------------------------------------------------------------
BOOL TenTenPlugin::Activate(MQDocument doc, BOOL flag)
{
if(flag)
{
if(win==NULL)win = new TenTenWindow(MQWindow::GetMainWindow());
MQWindow mw = MQWindow::GetMainWindow();
if(win==NULL)win = new TenTenWindow(mw);
if(win)win->SetVisible(true);
} else {
if(win)win->SetVisible(false);
Expand All @@ -369,7 +328,7 @@ BOOL TenTenPlugin::Activate(MQDocument doc, BOOL flag)
}
}*/

// そのままflagを返す
// そのままflagを返す
return flag;
}

Expand All @@ -383,10 +342,10 @@ void TenTenPlugin::OnDraw(MQDocument doc, MQScene scene, int width, int height)
param.Color = MQColor(0,0,0);
param.FontScale = 1.0f;
param.ScreenPos = MQPoint(width/2.0, height/2.0, 0);
CreateDrawingText(doc, L"選択面に裏面ポリゴンがあります", param);
CreateDrawingText(doc, L"選択面に裏面ポリゴンがあります", param);
param.Color = MQColor(1,1,0);
param.FontScale = 1.1f;
CreateDrawingText(doc, L"選択面に裏面ポリゴンがあります", param);
CreateDrawingText(doc, L"選択面に裏面ポリゴンがあります", param);
errMsg = 0;
}
}
Expand Down Expand Up @@ -435,7 +394,10 @@ BOOL TenTenPlugin::AddVertexOnTri(MQDocument doc, int oi, int fi, MQPoint &hitpo
vidxOld[numfv] = vidxOld[0];
vcoordOld[numfv] = vcoordOld[0];
MQCoordinate coord[3];
coord[2] = CalcCoord(o->GetVertex(vidxOld[0]), o->GetVertex(vidxOld[1]), o->GetVertex(vidxOld[2]), hitpoint, vcoordOld);
MQPoint p1 = o->GetVertex(vidxOld[0]);
MQPoint p2 = o->GetVertex(vidxOld[1]);
MQPoint p3 = o->GetVertex(vidxOld[2]);
coord[2] = CalcCoord(p1, p2, p3, hitpoint, vcoordOld);
int matidx = o->GetFaceMaterial(fi);
for(int i=0;i<numfv;i++)
{
Expand All @@ -458,7 +420,7 @@ BOOL TenTenPlugin::AddVertexOnTri(MQDocument doc, int oi, int fi, MQPoint &hitpo
RedrawAllScene();
if(bUpdateUndo)
{
OutputDebugStringA("Undo10\n");
//OutputDebugStringA("Undo10\n");
UpdateUndo();
}

Expand Down Expand Up @@ -643,7 +605,7 @@ A >>>>>>>
A <<<<<<<
...
...
A
Expand Down Expand Up @@ -677,7 +639,7 @@ del_vi >>>>>>>
del_vi <<<<<<<
...
...
...
Expand Down Expand Up @@ -854,7 +816,7 @@ bool DeleteVertex2(MQDocument doc, int del_oi, int del_vi, bool bArcSplit)

std::vector<int> relFi;
relFi.resize(numRelFace);
o->GetVertexRelatedFaces(del_vi, &(relFi[0])); //同じ面番号が複数返る場合があるので注意!
o->GetVertexRelatedFaces(del_vi, &(relFi[0])); //同じ面番号が複数返る場合があるので注意!
std::sort(relFi.begin(), relFi.end());
relFi.erase(std::unique(relFi.begin(), relFi.end()), relFi.end());
numRelFace = relFi.size();
Expand Down

0 comments on commit e813d0c

Please sign in to comment.