18 Commits

Author SHA1 Message Date
andreja6
e419a4edcd Testing 2020-01-26 15:58:22 -08:00
andreja6
72dcc5ef8e Added a function (Not done) 2019-11-11 23:50:05 -08:00
andreja6
c9e79c2063 Made cylinder tops flatter 2019-11-11 16:05:31 -08:00
andreja6
3035478c77 fixed memory leak 2019-11-11 14:13:36 -08:00
andreja6
152b376c02 Multiselection and Models 2019-11-11 14:05:17 -08:00
DirtPiper
ef2a3bc146 completely fixed cylinder scaling
uwu
2019-11-11 16:15:38 -05:00
andreja6
d781627fff Fixed cylinder scaling 2019-11-11 11:53:35 -08:00
andreja6
02bb8b20fa Removed smoothing for now 2019-11-11 01:06:15 -08:00
andreja6
ec721abdcc Cylinders 2019-11-10 23:36:32 -08:00
andreja6
0269e63af9 Undid commit #1688865, Fixed smooth verticies 2019-11-10 20:16:11 -08:00
andreja6
8926860107 Added a library, tried to make IWebBrowser2 not fail 2019-11-10 20:11:22 -08:00
DirtPiper
da3cdf405e Can now use left control + O to bring up open dialog 2019-11-10 23:02:29 -05:00
DirtPiper
98f4246f17 File importer now supports shapes, camera pan is now locked to 45 degree increments
this was a massive pain in the ass :)
2019-11-10 22:59:08 -05:00
MusicalProgrammer
1f4147fd90 window.external progress? 2019-11-08 23:38:06 -05:00
andreja6
4c51383bce Moved some variables in datamodelinstance from public to private 2019-11-08 17:55:59 -08:00
Vulpovile
f965c82b58 Starting work on cylinder 2019-11-08 15:18:43 -08:00
andreja6
1688865462 slowly optimizing render 2019-11-07 22:30:56 -08:00
andreja6
f99e6cbff7 Turns out raycasting every 1/30th of a second takes a massive hit on performance 2019-11-07 21:52:46 -08:00
22 changed files with 408 additions and 207 deletions

View File

@@ -136,7 +136,7 @@ Application::Application(HWND parentWindow) : _propWindow(NULL) { //: GApp(setti
SetWindowLongPtr(_hwndRenderer,GWL_USERDATA,(LONG)this); SetWindowLongPtr(_hwndRenderer,GWL_USERDATA,(LONG)this);
_propWindow = new PropertyWindow(0, 0, 200, 640, hThisInstance); _propWindow = new PropertyWindow(0, 0, 200, 640, hThisInstance);
IEBrowser* webBrowser = new IEBrowser(_hwndToolbox); IEBrowser* webBrowser = new IEBrowser(_hwndToolbox);
webBrowser->navigateSyncURL(L"http://androdome.com/g3d/toolbox/"); webBrowser->navigateSyncURL(L"http://androdome.com/res/ClientToolbox.php");
} }
@@ -578,7 +578,7 @@ void Application::onGraphics(RenderDevice* rd) {
ScreenToClient(_hWndMain, &mousepos); ScreenToClient(_hWndMain, &mousepos);
} }
LightingParameters lighting(G3D::toSeconds(11, 00, 00, AM)); LightingParameters lighting(G3D::toSeconds(2, 00, 00, PM));
renderDevice->setProjectionAndCameraMatrix(*cameraController.getCamera()); renderDevice->setProjectionAndCameraMatrix(*cameraController.getCamera());
// Cyan background // Cyan background
@@ -603,15 +603,9 @@ void Application::onGraphics(RenderDevice* rd) {
glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_NORMAL_ARRAY);
//if(_dataModel->getWorkspace() != NULL)
_dataModel->getWorkspace()->render(rd);
//else throw std::exception("Workspace not found");
for (unsigned int i = 0; i < _dataModel->getWorkspace()->__pvVector.size(); i++)
{
_dataModel->getWorkspace()->__pvVector[i]->render(rd);
}
//_dataModel->getWorkspace()->render(rd);
glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_NORMAL_ARRAY);
@@ -658,7 +652,7 @@ void Application::onGraphics(RenderDevice* rd) {
glEnable( GL_TEXTURE_2D ); glEnable( GL_TEXTURE_2D );
glEnable(GL_BLEND);// you enable blending function glEnable(GL_BLEND);// you enable blending function
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
/*
std::vector<Instance*> instances = _dataModel->getWorkspace()->getAllChildren(); std::vector<Instance*> instances = _dataModel->getWorkspace()->getAllChildren();
currentcursorid = cursorid; currentcursorid = cursorid;
for(size_t i = 0; i < instances.size(); i++) for(size_t i = 0; i < instances.size(); i++)
@@ -675,7 +669,7 @@ void Application::onGraphics(RenderDevice* rd) {
} }
} }
*/
glBindTexture( GL_TEXTURE_2D, currentcursorid); glBindTexture( GL_TEXTURE_2D, currentcursorid);
@@ -704,13 +698,10 @@ void Application::onKeyPressed(int key)
{ {
deleteInstance(); deleteInstance();
} }
if (GetHoldKeyState(VK_RCONTROL)) if ((GetHoldKeyState(VK_LCONTROL) || GetHoldKeyState(VK_RCONTROL)) && key=='O')
{
if (key=='O')
{ {
_dataModel->getOpen(); _dataModel->getOpen();
} }
}
} }
void Application::onKeyUp(int key) void Application::onKeyUp(int key)
{ {
@@ -722,13 +713,14 @@ void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
//Removed set focus //Removed set focus
std::cout << "Click: " << x << "," << y << std::endl; //std::cout << "Click: " << x << "," << y << std::endl;
bool onGUI = _dataModel->getGuiRoot()->mouseInGUI(renderDevice, x, y); bool onGUI = _dataModel->getGuiRoot()->mouseInGUI(renderDevice, x, y);
if(!onGUI) if(!onGUI)
{ {
Instance * selectedInstance = NULL;
testRay = cameraController.getCamera()->worldRay(_dataModel->mousex, _dataModel->mousey, renderDevice->getViewport()); testRay = cameraController.getCamera()->worldRay(_dataModel->mousex, _dataModel->mousey, renderDevice->getViewport());
float nearest=std::numeric_limits<float>::infinity(); float nearest=std::numeric_limits<float>::infinity();
Vector3 camPos = cameraController.getCamera()->getCoordinateFrame().translation; Vector3 camPos = cameraController.getCamera()->getCoordinateFrame().translation;
@@ -746,8 +738,9 @@ void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
if (nearest>time) if (nearest>time)
{ {
nearest=time; nearest=time;
bool found = false; //bool found = false;
for(size_t i = 0; i < g_selectedInstances.size(); i++) selectedInstance = test;
/*for(size_t i = 0; i < g_selectedInstances.size(); i++)
{ {
if(g_selectedInstances.at(i) == test) if(g_selectedInstances.at(i) == test)
{ {
@@ -760,25 +753,42 @@ void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
} }
if(!found) if(!found)
{ {
g_selectedInstances.clear(); selectedInstance = test;
g_selectedInstances.push_back(test); //if(!GetHoldKeyState(VK_RCONTROL) && !GetHoldKeyState(VK_LCONTROL))
//g_selectedInstances.clear();
//if(std::find(g_selectedInstances.begin(), g_selectedInstances.end(),test)==g_selectedInstances.end())
//g_selectedInstances.push_back(test);
} }
selectInstance(test, _propWindow); //selectInstance(test, _propWindow);
//_message = "Dragging = true."; //_message = "Dragging = true.";
//_messageTime = System::time(); //_messageTime = System::time();
//_dragging = true; //_dragging = true;*/
} }
} }
} }
} }
if(!objFound) if(!objFound)
selectInstance(_dataModel,_propWindow); selectInstance(_dataModel,_propWindow);
else
{
while(selectedInstance->getParent() != g_dataModel->getWorkspace())
{
selectedInstance = selectedInstance->getParent();
}
selectInstance(selectedInstance, _propWindow);
}
} }
} }
void Application::selectInstance(Instance* selectedInstance, PropertyWindow* propWindow) void Application::selectInstance(Instance* selectedInstance, PropertyWindow* propWindow)
{ {
if(!GetHoldKeyState(VK_RCONTROL) && !GetHoldKeyState(VK_LCONTROL))
{
printf("No control key hold \n");
g_selectedInstances.clear(); g_selectedInstances.clear();
}
else printf("Control held\n");
if(std::find(g_selectedInstances.begin(), g_selectedInstances.end(),selectedInstance)==g_selectedInstances.end())
g_selectedInstances.push_back(selectedInstance); g_selectedInstances.push_back(selectedInstance);
propWindow->UpdateSelected(selectedInstance); propWindow->UpdateSelected(selectedInstance);
@@ -854,7 +864,7 @@ void Application::run() {
cursorOvrid = cursorOvr->openGLID(); cursorOvrid = cursorOvr->openGLID();
RealTime now=0, lastTime=0; RealTime now=0, lastTime=0;
double simTimeRate = 1.0f; double simTimeRate = 1.0f;
float fps=3000.0f; float fps=30.0f;
RealTime desiredFrameDuration=1.0/fps; RealTime desiredFrameDuration=1.0/fps;
onInit(); onInit();

View File

@@ -57,6 +57,35 @@ void CameraController::refreshZoom(const CoordinateFrame& frame)
void CameraController::pan(CoordinateFrame* frame,float spdX, float spdY) void CameraController::pan(CoordinateFrame* frame,float spdX, float spdY)
{ {
yaw+=spdX;
pitch+=spdY;
if (pitch>1.4f) pitch=1.4f;
if (pitch<-1.4f) pitch=-1.4f;
frame->translation = Vector3(sin(-yaw)*zoom*cos(pitch),sin(pitch)*zoom,cos(-yaw)*zoom*cos(pitch))+focusPosition;
frame->lookAt(focusPosition);
}
void CameraController::panLock(CoordinateFrame* frame,float spdX, float spdY)
{
int sign = 0;
yaw = toDegrees(yaw);
if((((yaw - fmod(yaw, 45)) / 45) * 45) < 0)
{
sign = 1;
}
yaw = fabs(yaw);
yaw = ((yaw - fmod(yaw, 45)) / 45) * 45;
yaw = toRadians(yaw);
if(sign==1)
{
yaw = yaw * -1;
}
yaw+=spdX; yaw+=spdX;
pitch+=spdY; pitch+=spdY;
@@ -105,14 +134,14 @@ void CameraController::Zoom(short delta)
void CameraController::panLeft() void CameraController::panLeft()
{ {
CoordinateFrame frame = g3dCamera.getCoordinateFrame(); CoordinateFrame frame = g3dCamera.getCoordinateFrame();
pan(&frame,toRadians(-45),0); panLock(&frame,toRadians(-45),0);
setFrame(frame); setFrame(frame);
} }
void CameraController::panRight() void CameraController::panRight()
{ {
CoordinateFrame frame = g3dCamera.getCoordinateFrame(); CoordinateFrame frame = g3dCamera.getCoordinateFrame();
pan(&frame,toRadians(45),0); panLock(&frame,toRadians(45),0);
setFrame(frame); setFrame(frame);
} }

View File

@@ -19,6 +19,7 @@ class CameraController {
void lookAt(const Vector3& position); void lookAt(const Vector3& position);
void refreshZoom(const CoordinateFrame& frame); void refreshZoom(const CoordinateFrame& frame);
void pan(CoordinateFrame* frame,float spdX,float spdY); void pan(CoordinateFrame* frame,float spdX,float spdY);
void panLock(CoordinateFrame* frame,float spdX,float spdY);
void update(Application* app); void update(Application* app);
void centerCamera(Instance* selection); void centerCamera(Instance* selection);
void panLeft(); void panLeft();

View File

@@ -257,6 +257,7 @@ bool DataModelInstance::scanXMLObject(xml_node<> * scanNode)
xml_node<> *propNode = node->first_node(); xml_node<> *propNode = node->first_node();
xml_node<> *cFrameNode=0; xml_node<> *cFrameNode=0;
xml_node<> *sizeNode=0; xml_node<> *sizeNode=0;
xml_node<> *shapeNode=0;
xml_node<> *colorNode=0; xml_node<> *colorNode=0;
xml_node<> *brickColorNode=0; xml_node<> *brickColorNode=0;
xml_node<> *nameNode=0; xml_node<> *nameNode=0;
@@ -276,6 +277,11 @@ bool DataModelInstance::scanXMLObject(xml_node<> * scanNode)
{ {
nameNode = partPropNode; nameNode = partPropNode;
} }
if (xmlValue=="shape")
{
shapeNode = partPropNode;
_legacyLoad=false;
}
if (xmlValue=="Color") if (xmlValue=="Color")
{ {
colorNode=partPropNode; colorNode=partPropNode;
@@ -297,6 +303,11 @@ bool DataModelInstance::scanXMLObject(xml_node<> * scanNode)
{ {
std::string xmlName = attr->name(); std::string xmlName = attr->name();
std::string xmlValue = attr->value(); std::string xmlValue = attr->value();
if (xmlValue=="shape")
{
shapeNode = featureNode;
_legacyLoad=true;
}
if (xmlValue=="size") if (xmlValue=="size")
{ {
sizeNode=featureNode; sizeNode=featureNode;
@@ -328,6 +339,20 @@ bool DataModelInstance::scanXMLObject(xml_node<> * scanNode)
B = getFloatValue(colorNode,"B"); B = getFloatValue(colorNode,"B");
} }
Enum::Shape::Value partshape = Enum::Shape::Block;
std::string pshape = shapeNode->value();
if (shapeNode)
{
if(pshape == "0" || pshape == "Ball"){
partshape = Enum::Shape::Ball;
}
if(pshape == "1" || pshape == "Block"){
partshape = Enum::Shape::Block;
}
if(pshape == "2" || pshape == "Cylinder"){
partshape = Enum::Shape::Cylinder;
}
}
std::string newName = nameNode->value(); std::string newName = nameNode->value();
float X = getFloatValue(cFrameNode,"X"); float X = getFloatValue(cFrameNode,"X");
@@ -353,6 +378,7 @@ bool DataModelInstance::scanXMLObject(xml_node<> * scanNode)
PartInstance* test = makePart(); PartInstance* test = makePart();
test->setParent(getWorkspace()); test->setParent(getWorkspace());
test->color = Color3(R,G,B); test->color = Color3(R,G,B);
test->shape = partshape;
if(brickColorNode) if(brickColorNode)
{ {
test->color = bcToRGB(atoi(brickColorNode->value())); test->color = bcToRGB(atoi(brickColorNode->value()));

View File

@@ -22,10 +22,7 @@ public:
bool readXMLFileStream(std::ifstream* file); bool readXMLFileStream(std::ifstream* file);
void drawMessage(RenderDevice*); void drawMessage(RenderDevice*);
WorkspaceInstance* getWorkspace(); WorkspaceInstance* getWorkspace();
WorkspaceInstance* workspace;
LevelInstance * level;
LevelInstance * getLevel(); LevelInstance * getLevel();
GuiRoot* guiRoot;
std::string message; std::string message;
std::string _loadedFileName; std::string _loadedFileName;
bool showMessage; bool showMessage;
@@ -51,4 +48,7 @@ private:
std::string _errMsg; std::string _errMsg;
bool _legacyLoad; bool _legacyLoad;
float _modY; float _modY;
WorkspaceInstance* workspace;
LevelInstance * level;
GuiRoot* guiRoot;
}; };

View File

@@ -170,7 +170,7 @@
/> />
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="Advapi32.lib UxTheme.lib Comctl32.lib Comdlg32.lib Shell32.lib" AdditionalDependencies="Advapi32.lib UxTheme.lib Comctl32.lib Comdlg32.lib Shell32.lib Urlmon.lib"
OutputFile="./G3DTest-Debug.exe" OutputFile="./G3DTest-Debug.exe"
LinkIncremental="2" LinkIncremental="2"
SuppressStartupBanner="true" SuppressStartupBanner="true"

View File

@@ -36,5 +36,46 @@ void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button)
if(g_selectedInstances.size() > 0) if(g_selectedInstances.size() > 0)
g_usableApp->_propWindow->UpdateSelected(newinst.at(0)); g_usableApp->_propWindow->UpdateSelected(newinst.at(0));
} }
else if(button->name == "Group")
{
GroupInstance * inst = new GroupInstance();
for(size_t i = 0; i < g_selectedInstances.size(); i++)
{
if(g_selectedInstances.at(i)->canDelete)
{
g_selectedInstances.at(i)->setParent(inst);
}
/*tempinst->setPosition(Vector3(tempPos.x, tempPos.y + tempSize.y, tempPos.z));
g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));*/
}
inst->setParent(g_dataModel->getWorkspace());
g_selectedInstances.clear();
g_selectedInstances.push_back(inst);
if(g_selectedInstances.size() > 0)
g_usableApp->_propWindow->UpdateSelected(g_selectedInstances.at(0));
}
else if(button->name == "UnGroup")
{
std::vector<Instance*> newinst;
for(size_t i = 0; i < g_selectedInstances.size(); i++)
{
if(g_selectedInstances.at(i)->canDelete)
{
if(GroupInstance* model = dynamic_cast<GroupInstance*>(g_selectedInstances.at(i)))
{
newinst = model->unGroup();
model->setParent(NULL);
delete model;
model = NULL;
}
}
/*tempinst->setPosition(Vector3(tempPos.x, tempPos.y + tempSize.y, tempPos.z));
g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));*/
}
g_selectedInstances.clear();
g_selectedInstances = newinst;
if(g_selectedInstances.size() > 0)
g_usableApp->_propWindow->UpdateSelected(newinst.at(0));
}
} }
} }

View File

@@ -3,6 +3,7 @@
GroupInstance::GroupInstance(void) GroupInstance::GroupInstance(void)
{ {
PVInstance::PVInstance(); PVInstance::PVInstance();
name = "Model";
className = "GroupInstance"; className = "GroupInstance";
listicon = 12; listicon = 12;
} }
@@ -10,6 +11,8 @@ GroupInstance::GroupInstance(void)
GroupInstance::GroupInstance(const GroupInstance &oinst) GroupInstance::GroupInstance(const GroupInstance &oinst)
{ {
PVInstance::PVInstance(oinst); PVInstance::PVInstance(oinst);
name = "Model";
className = "GroupInstance";
listicon = 12; listicon = 12;
} }
@@ -17,8 +20,6 @@ GroupInstance::~GroupInstance(void)
{ {
} }
std::vector<PROPGRIDITEM> GroupInstance::getProperties() std::vector<PROPGRIDITEM> GroupInstance::getProperties()
{ {
std::vector<PROPGRIDITEM> properties = PVInstance::getProperties(); std::vector<PROPGRIDITEM> properties = PVInstance::getProperties();
@@ -28,3 +29,14 @@ void GroupInstance::PropUpdate(LPPROPGRIDITEM &pItem)
{ {
PVInstance::PropUpdate(pItem); PVInstance::PropUpdate(pItem);
} }
std::vector<Instance *> GroupInstance::unGroup()
{
std::vector<Instance *> child;
while(children.size() > 0)
{
child.push_back(children[0]);
children[0]->setParent(parent);
}
return child;
}

View File

@@ -10,5 +10,5 @@ public:
GroupInstance(const GroupInstance &oinst); GroupInstance(const GroupInstance &oinst);
virtual std::vector<PROPGRIDITEM> getProperties(); virtual std::vector<PROPGRIDITEM> getProperties();
virtual void PropUpdate(LPPROPGRIDITEM &pItem); virtual void PropUpdate(LPPROPGRIDITEM &pItem);
std::vector<Instance *> unGroup();
}; };

View File

@@ -176,7 +176,7 @@ GuiRoot::GuiRoot() : _message(""), _messageTime(0)
button->font = g_fntlighttrek; button->font = g_fntlighttrek;
button->fontLocationRelativeTo = Vector2(10, 0); button->fontLocationRelativeTo = Vector2(10, 0);
button->setParent(this); button->setParent(this);
button->setButtonListener(new GUDButtonListener());
button = makeTextButton(); button = makeTextButton();
button->boxBegin = Vector2(0,240); button->boxBegin = Vector2(0,240);
@@ -192,6 +192,7 @@ GuiRoot::GuiRoot() : _message(""), _messageTime(0)
button->font = g_fntlighttrek; button->font = g_fntlighttrek;
button->fontLocationRelativeTo = Vector2(10, 0); button->fontLocationRelativeTo = Vector2(10, 0);
button->setParent(this); button->setParent(this);
button->setButtonListener(new GUDButtonListener());
button = makeTextButton(); button = makeTextButton();
button->boxBegin = Vector2(0,265); button->boxBegin = Vector2(0,265);

View File

@@ -8,6 +8,7 @@
#include "IEBrowser.h" #include "IEBrowser.h"
#include "Globals.h" #include "Globals.h"
#include "ax.h" #include "ax.h"
//#include "IEDispatcher.h" //#include "IEDispatcher.h"
void IEBrowser::Boop(char* test) void IEBrowser::Boop(char* test)
@@ -41,6 +42,17 @@ IEBrowser::~IEBrowser(void) {
// Something goes here // Something goes here
int IEBrowser::setExternal(IDispatch** ext) int IEBrowser::setExternal(IDispatch** ext)
{ {
std::cout << &m_IEDispatcher;
IInternetHostSecurityManager* spSecMan;
spDocument2->QueryInterface(IID_IInternetHostSecurityManager,
(void **) &spSecMan);
// TODO: hr needs to say: 'S_OK'
//spSecMan->QueryCustomPolicy
HRESULT hr = spSecMan->ProcessUrlAction(URLACTION_ACTIVEX_OVERRIDE_OBJECT_SAFETY,
NULL, 0, NULL, 0, 0, PUAF_WARN_IF_DENIED);
(*ext) = &m_IEDispatcher;
return 1; return 1;
} }
@@ -83,9 +95,9 @@ bool IEBrowser::navigateSyncURL(wchar_t* url)
if (SUCCEEDED(spDocument->QueryInterface(IID_ICustomDoc,(void**)&spCustomDoc))) if (SUCCEEDED(spDocument->QueryInterface(IID_ICustomDoc,(void**)&spCustomDoc)))
{ {
spCustomDoc->SetUIHandler(m_spHandler); spCustomDoc->SetUIHandler(m_spHandler);
m_spHandler->GetExternal(&m_spExternal); m_spHandler->GetExternal(&m_spExternal);
spDocument->QueryInterface(IID_IHTMLDocument2, (void **) &spDocument2);
setExternal(&m_spExternal);
} }
} }
} }

View File

@@ -3,6 +3,7 @@
#include <mshtml.h> #include <mshtml.h>
#include <exdisp.h> #include <exdisp.h>
#include <Mshtmhst.h> #include <Mshtmhst.h>
#include "IEDispatcher.h"
class IEBrowser { class IEBrowser {
public: public:
@@ -18,6 +19,7 @@ class IEBrowser {
IDocHostUIHandler* m_spHandler; IDocHostUIHandler* m_spHandler;
IDispatch* m_spExternal; IDispatch* m_spExternal;
IDispatch* m_newExternal; IDispatch* m_newExternal;
IEDispatcher m_IEDispatcher;
IOleClientSite* m_spDefaultDocHostUIHandler; IOleClientSite* m_spDefaultDocHostUIHandler;
int setExternal(IDispatch** ext); int setExternal(IDispatch** ext);
}; };

View File

@@ -2,11 +2,9 @@
#include "oaidl.h" #include "oaidl.h"
//DEFINE_GUID(CLSID_G3d, 0xB323F8E0L, 0x2E68, 0x11D0, 0x90, 0xEA, 0x00, 0xAA, 0x00, 0x60, 0xF8, 0x6F); //DEFINE_GUID(CLSID_G3d, 0xB323F8E0L, 0x2E68, 0x11D0, 0x90, 0xEA, 0x00, 0xAA, 0x00, 0x60, 0xF8, 0x6F);
/*
class IEDispatcher : public IDispatch class IEDispatcher : public IDispatch
{ {
*/ /*
EXTERN_C const IID IID_IDispatch; EXTERN_C const IID IID_IDispatch;
#if defined(__cplusplus) && !defined(CINTERFACE) #if defined(__cplusplus) && !defined(CINTERFACE)
@@ -14,6 +12,7 @@ EXTERN_C const IID IID_IDispatch;
MIDL_INTERFACE("B323F8E0-2E68-11D0-90EA-00AA0060F86F") MIDL_INTERFACE("B323F8E0-2E68-11D0-90EA-00AA0060F86F")
IEDispatcher : public IDispatch IEDispatcher : public IDispatch
{ {
*/
public: public:
IEDispatcher(void); IEDispatcher(void);
~IEDispatcher(void); ~IEDispatcher(void);
@@ -27,4 +26,4 @@ public:
}; };
#endif //#endif

View File

@@ -114,21 +114,6 @@ std::vector<Instance* > Instance::getAllChildren()
return children; return children;
} }
std::vector<Instance* > Instance::compileAndGetPVVector()
{
std::vector<Instance* > totalchildren;
if(!children.empty())
{
for(size_t i = 0; i < children.size(); i++)
{
std::vector<Instance* > subchildren = children.at(i)->compileAndGetPVVector();
if(!subchildren.empty())
totalchildren.insert(totalchildren.end(), subchildren.begin(), subchildren.end());
}
}
return totalchildren;
}
void Instance::setParent(Instance* newParent) void Instance::setParent(Instance* newParent)
{ {
if(parent != NULL) if(parent != NULL)

View File

@@ -12,12 +12,12 @@ public:
std::string name; std::string name;
virtual void render(RenderDevice*); virtual void render(RenderDevice*);
virtual void update(); virtual void update();
std::vector<Instance*> children; // All children.
std::string getClassName(); std::string getClassName();
Instance* findFirstChild(std::string); Instance* findFirstChild(std::string);
std::vector<Instance* > getChildren(); std::vector<Instance* > getChildren();
std::vector<Instance* > getAllChildren(); std::vector<Instance* > getAllChildren();
std::vector<Instance* > compileAndGetPVVector(); void setParent(Instance*);
virtual void setParent(Instance*);
void setName(std::string newName); void setName(std::string newName);
void addChild(Instance*); void addChild(Instance*);
void removeChild(Instance*); void removeChild(Instance*);
@@ -28,7 +28,6 @@ public:
virtual void PropUpdate(LPPROPGRIDITEM &pItem); virtual void PropUpdate(LPPROPGRIDITEM &pItem);
int listicon; int listicon;
protected: protected:
std::vector<Instance*> children; // All children.
std::string className; std::string className;
Instance* parent; // Another pointer. Instance* parent; // Another pointer.
PROPGRIDITEM createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type, TCHAR choices[] = NULL); PROPGRIDITEM createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type, TCHAR choices[] = NULL);

View File

@@ -1,5 +1,4 @@
#include "PVInstance.h" #include "PVInstance.h"
#include "WorkspaceInstance.h"
PVInstance::PVInstance(void) PVInstance::PVInstance(void)
{ {
@@ -22,43 +21,6 @@ void PVInstance::postRender(RenderDevice* rd)
{ {
} }
void PVInstance::render(RenderDevice* rd)
{
}
void PVInstance::setParent(Instance* newParent)
{
if(parent != NULL)
{
Instance* workspace = parent;
while(workspace != NULL)
{
if(WorkspaceInstance* wsp = dynamic_cast<WorkspaceInstance*>(workspace))
{
wsp->removeFromPVector(this);
break;
}
workspace = workspace->getParent();
}
parent->removeChild(this);
}
parent = newParent;
if(newParent != NULL)
{
Instance* workspace = parent;
while(workspace != NULL)
{
if(WorkspaceInstance* wsp = dynamic_cast<WorkspaceInstance*>(workspace))
{
wsp->addToPVector(this);
break;
}
workspace = workspace->getParent();
}
newParent->addChild(this);
}
}
std::vector<PROPGRIDITEM> PVInstance::getProperties() std::vector<PROPGRIDITEM> PVInstance::getProperties()
{ {
std::vector<PROPGRIDITEM> properties = Instance::getProperties(); std::vector<PROPGRIDITEM> properties = Instance::getProperties();

View File

@@ -9,9 +9,7 @@ public:
~PVInstance(void); ~PVInstance(void);
PVInstance(const PVInstance &oinst); PVInstance(const PVInstance &oinst);
virtual void postRender(RenderDevice* rd); virtual void postRender(RenderDevice* rd);
virtual void setParent(Instance* newParent);
virtual std::vector<PROPGRIDITEM> getProperties(); virtual std::vector<PROPGRIDITEM> getProperties();
virtual void PropUpdate(LPPROPGRIDITEM &pItem); virtual void PropUpdate(LPPROPGRIDITEM &pItem);
virtual void render(RenderDevice* rd);
bool nameShown; bool nameShown;
}; };

View File

@@ -244,22 +244,36 @@ void PartInstance::addVertex(Vector3 vertexPos,Color3 color)
addSingularNormal(cross(v1-v3,v2-v3).direction()); addSingularNormal(cross(v1-v3,v2-v3).direction());
} }
void PartInstance::addSmoothTriangle(Vector3 v1,Vector3 v2,Vector3 v3) void PartInstance::addQuad(Vector3 v1,Vector3 v2, Vector3 v3, Vector3 v4)
{
addTriangle(v1, v2, v3);
addTriangle(v1, v3, v4);
}
void PartInstance::genSmoothNormals(int count = -1)
{
if(count < 0)
{
}
}
void PartInstance::addSmoothTriangle(Vector3 v1, Vector3 v2, Vector3 v3)
{ {
addVertex(v1,color); addVertex(v1,color);
addVertex(v2,color); addVertex(v2,color);
addVertex(v3,color); addVertex(v3,color);
//addNormals(cross(v2-v1,v3-v1).direction()); //addNormals(cross(v2-v1,v3-v1).direction());
//addSingularNormal(Vector3(cross(v2-v1,v3-v1) + cross(v3-v2,v1-v2) + cross(v1-v3,v2-v3)).direction());
addSingularNormal(cross(v2-v1,v3-v1).direction()); addSingularNormal(v1.direction());
addSingularNormal(cross(v3-v2,v1-v2).direction()); addSingularNormal(v2.direction());
addSingularNormal(cross(v1-v3,v2-v3).direction()); addSingularNormal(v3.direction());
} }
void PartInstance::addPlus(Vector3 v1) void PartInstance::addPlus(Vector3 v1)
{ {
float renderY = size.y/2 - 0.25f; float renderY = max(size.z, max(size.x, size.y))/2 * 0.775;
Vector3 vx1 = v1 + Vector3(0, -renderY, -0.1f); Vector3 vx1 = v1 + Vector3(0, -renderY, -0.1f);
Vector3 vx2 = v1 + Vector3(0, -renderY, 0.1f); Vector3 vx2 = v1 + Vector3(0, -renderY, 0.1f);
Vector3 vx3 = v1 + Vector3(0, renderY, 0.1f); Vector3 vx3 = v1 + Vector3(0, renderY, 0.1f);
@@ -313,7 +327,7 @@ void PartInstance::addPlus(Vector3 v1)
void PartInstance::addPlus2(Vector3 v1) void PartInstance::addPlus2(Vector3 v1)
{ {
float renderY = max(size.z, max(size.x, size.y))/2 - 0.25f; float renderY = max(size.z, max(size.x, size.y))/2 * 0.775;
Vector3 vx3 = v1 + Vector3(0, -renderY, -0.1f); Vector3 vx3 = v1 + Vector3(0, -renderY, -0.1f);
Vector3 vx2 = v1 + Vector3(0, -renderY, 0.1f); Vector3 vx2 = v1 + Vector3(0, -renderY, 0.1f);
Vector3 vx1 = v1 + Vector3(0, renderY, 0.1f); Vector3 vx1 = v1 + Vector3(0, renderY, 0.1f);
@@ -387,6 +401,19 @@ void PartInstance::addPlus2(Vector3 v1)
addTriangle(Vector3(_vertices[vertex1],_vertices[vertex1+1],_vertices[vertex1+2]), addTriangle(Vector3(_vertices[vertex1],_vertices[vertex1+1],_vertices[vertex1+2]),
Vector3(_vertices[vertex2],_vertices[vertex2+1],_vertices[vertex2+2]), Vector3(_vertices[vertex2],_vertices[vertex2+1],_vertices[vertex2+2]),
Vector3(_vertices[vertex3],_vertices[vertex3+1],_vertices[vertex3+2])); Vector3(_vertices[vertex3],_vertices[vertex3+1],_vertices[vertex3+2]));
}
void PartInstance::fromArrays(float verts[], float norms[], float ind[], unsigned int countVN, unsigned int countInd)
{
for(unsigned int i = 0; i < countVN; i++)
{
_vertices.push_back(verts[i]);
_normals.push_back(norms[i]);
}
for(unsigned int i = 0; i < countInd; i++)
{
_indices.push_back(ind[i]);
}
} }
void PartInstance::makeSmoothFace(int vertex1,int vertex2, int vertex3) void PartInstance::makeSmoothFace(int vertex1,int vertex2, int vertex3)
{ {
@@ -405,7 +432,8 @@ bool PartInstance::isUniqueVertex(Vector3 pos)
} }
return true; return true;
} }
//int rings = 15;
//int sectors = 15;
void PartInstance::render(RenderDevice* rd) { void PartInstance::render(RenderDevice* rd) {
//if(nameShown) //if(nameShown)
//postRenderStack.push_back(this); //postRenderStack.push_back(this);
@@ -422,66 +450,103 @@ void PartInstance::render(RenderDevice* rd) {
{ {
case Enum::Shape::Ball: case Enum::Shape::Ball:
{ {
int obv = _bevelSize; /*float radius = renderSize.y / 2;
_bevelSize = this->size.y / 3.14159F; float const R = 1./(float)(rings-1);
float const S = 1./(float)(sectors-1);
int r, s;
double M_PI = pi();
double M_PI_2 = M_PI/2;
_vertices.resize(rings * sectors * 3);
_normals.resize(rings * sectors * 3);
std::vector<GLfloat>::iterator v = _vertices.begin();
std::vector<GLfloat>::iterator n = _normals.begin();
//std::vector<GLfloat>::iterator t = texcoords.begin();
for(r = 0; r < rings; r++) for(s = 0; s < sectors; s++) {
float const y = sin( -M_PI_2 + M_PI * r * R );
float const x = cos(2*M_PI * s * S) * sin( M_PI * r * R );
float const z = sin(2*M_PI * s * S) * sin( M_PI * r * R );
*v++ = x * radius;
*v++ = y * radius;
*v++ = z * radius;
*n++ = x;
*n++ = y;
*n++ = z;
}
_indices.resize(rings * sectors * 4);
std::vector<GLushort>::iterator i = _indices.begin();
for(r = 0; r < rings; r++) for(s = 0; s < sectors; s++) {
*i++ = r * sectors + s;
*i++ = r * sectors + (s+1);
*i++ = (r+1) * sectors + (s+1);
*i++ = (r+1) * sectors + s;
}
//*/
float sphFace = this->size.y / 3.14159F;
// Front // Front
addSmoothTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,renderSize.z), addSmoothTriangle(Vector3(renderSize.x-sphFace,renderSize.y-sphFace,renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,renderSize.z), Vector3(-renderSize.x+sphFace,-renderSize.y+sphFace,renderSize.z),
Vector3(renderSize.x-_bevelSize,-renderSize.y+_bevelSize,renderSize.z) Vector3(renderSize.x-sphFace,-renderSize.y+sphFace,renderSize.z)
); );
addSmoothTriangle(Vector3(-renderSize.x+_bevelSize,renderSize.y-_bevelSize,renderSize.z), addSmoothTriangle(Vector3(-renderSize.x+sphFace,renderSize.y-sphFace,renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,renderSize.z), Vector3(-renderSize.x+sphFace,-renderSize.y+sphFace,renderSize.z),
Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,renderSize.z) Vector3(renderSize.x-sphFace,renderSize.y-sphFace,renderSize.z)
); );
// Top // Top
addSmoothTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y,renderSize.z-_bevelSize), addSmoothTriangle(Vector3(renderSize.x-sphFace,renderSize.y,renderSize.z-sphFace),
Vector3(renderSize.x-_bevelSize,renderSize.y,-renderSize.z+_bevelSize), Vector3(renderSize.x-sphFace,renderSize.y,-renderSize.z+sphFace),
Vector3(-renderSize.x+_bevelSize,renderSize.y,renderSize.z-_bevelSize) Vector3(-renderSize.x+sphFace,renderSize.y,renderSize.z-sphFace)
); );
addSmoothTriangle(Vector3(-renderSize.x+_bevelSize,renderSize.y,renderSize.z-_bevelSize), addSmoothTriangle(Vector3(-renderSize.x+sphFace,renderSize.y,renderSize.z-sphFace),
Vector3(renderSize.x-_bevelSize,renderSize.y,-renderSize.z+_bevelSize), Vector3(renderSize.x-sphFace,renderSize.y,-renderSize.z+sphFace),
Vector3(-renderSize.x+_bevelSize,renderSize.y,-renderSize.z+_bevelSize) Vector3(-renderSize.x+sphFace,renderSize.y,-renderSize.z+sphFace)
); );
// Back // Back
addSmoothTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,-renderSize.z), addSmoothTriangle(Vector3(renderSize.x-sphFace,renderSize.y-sphFace,-renderSize.z),
Vector3(renderSize.x-_bevelSize,-renderSize.y+_bevelSize,-renderSize.z), Vector3(renderSize.x-sphFace,-renderSize.y+sphFace,-renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,-renderSize.z) Vector3(-renderSize.x+sphFace,-renderSize.y+sphFace,-renderSize.z)
); );
addSmoothTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,-renderSize.z), addSmoothTriangle(Vector3(renderSize.x-sphFace,renderSize.y-sphFace,-renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,-renderSize.z), Vector3(-renderSize.x+sphFace,-renderSize.y+sphFace,-renderSize.z),
Vector3(-renderSize.x+_bevelSize,renderSize.y-_bevelSize,-renderSize.z) Vector3(-renderSize.x+sphFace,renderSize.y-sphFace,-renderSize.z)
); );
// Bottom // Bottom
addSmoothTriangle(Vector3(renderSize.x-_bevelSize,-renderSize.y,-renderSize.z+_bevelSize), addSmoothTriangle(Vector3(renderSize.x-sphFace,-renderSize.y,-renderSize.z+sphFace),
Vector3(renderSize.x-_bevelSize,-renderSize.y,renderSize.z-_bevelSize), Vector3(renderSize.x-sphFace,-renderSize.y,renderSize.z-sphFace),
Vector3(-renderSize.x+_bevelSize,-renderSize.y,renderSize.z-_bevelSize) Vector3(-renderSize.x+sphFace,-renderSize.y,renderSize.z-sphFace)
); );
addSmoothTriangle(Vector3(-renderSize.x+_bevelSize,-renderSize.y,renderSize.z-_bevelSize), addSmoothTriangle(Vector3(-renderSize.x+sphFace,-renderSize.y,renderSize.z-sphFace),
Vector3(-renderSize.x+_bevelSize,-renderSize.y,-renderSize.z+_bevelSize), Vector3(-renderSize.x+sphFace,-renderSize.y,-renderSize.z+sphFace),
Vector3(renderSize.x-_bevelSize,-renderSize.y,-renderSize.z+_bevelSize) Vector3(renderSize.x-sphFace,-renderSize.y,-renderSize.z+sphFace)
); );
// Left // Left
addSmoothTriangle(Vector3(-renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize), addSmoothTriangle(Vector3(-renderSize.x,renderSize.y-sphFace,-renderSize.z+sphFace),
Vector3(-renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize), Vector3(-renderSize.x,-renderSize.y+sphFace,renderSize.z-sphFace),
Vector3(-renderSize.x,renderSize.y-_bevelSize,renderSize.z-_bevelSize) Vector3(-renderSize.x,renderSize.y-sphFace,renderSize.z-sphFace)
); );
addSmoothTriangle(Vector3(-renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize), addSmoothTriangle(Vector3(-renderSize.x,-renderSize.y+sphFace,renderSize.z-sphFace),
Vector3(-renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize), Vector3(-renderSize.x,renderSize.y-sphFace,-renderSize.z+sphFace),
Vector3(-renderSize.x,-renderSize.y+_bevelSize,-renderSize.z+_bevelSize) Vector3(-renderSize.x,-renderSize.y+sphFace,-renderSize.z+sphFace)
); );
// Right // Right
addSmoothTriangle(Vector3(renderSize.x,renderSize.y-_bevelSize,renderSize.z-_bevelSize), addSmoothTriangle(Vector3(renderSize.x,renderSize.y-sphFace,renderSize.z-sphFace),
Vector3(renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize), Vector3(renderSize.x,-renderSize.y+sphFace,renderSize.z-sphFace),
Vector3(renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize) Vector3(renderSize.x,renderSize.y-sphFace,-renderSize.z+sphFace)
); );
addSmoothTriangle(Vector3(renderSize.x,-renderSize.y+_bevelSize,-renderSize.z+_bevelSize), addSmoothTriangle(Vector3(renderSize.x,-renderSize.y+sphFace,-renderSize.z+sphFace),
Vector3(renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize), Vector3(renderSize.x,renderSize.y-sphFace,-renderSize.z+sphFace),
Vector3(renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize) Vector3(renderSize.x,-renderSize.y+sphFace,renderSize.z-sphFace)
); );
@@ -537,7 +602,9 @@ void PartInstance::render(RenderDevice* rd) {
makeSmoothFace(84,174,144); makeSmoothFace(84,174,144);
// Back Left Bottom Corner // Back Left Bottom Corner
makeSmoothFace(174,84,132); makeSmoothFace(174,84,132);
_bevelSize = obv; for (unsigned short i=0;i<_vertices.size()/6;i++) {
_indices.push_back(i);
}
} }
break; break;
case Enum::Shape::Block: case Enum::Shape::Block:
@@ -655,71 +722,76 @@ void PartInstance::render(RenderDevice* rd) {
makeFace(84,174,144); makeFace(84,174,144);
// Back Left Bottom Corner // Back Left Bottom Corner
makeFace(174,84,132); makeFace(174,84,132);
for (unsigned short i=0;i<_vertices.size()/6;i++) {
_indices.push_back(i);
}
} }
break; break;
case Enum::Shape::Cylinder: case Enum::Shape::Cylinder:
{ {
/*int fsize = renderSize.y/(pi()/2);
//makeFace(0,0,48);
// Front // Front
addTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,renderSize.z), addTriangle(Vector3(renderSize.x,renderSize.y-fsize,renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,renderSize.z), Vector3(-renderSize.x,-renderSize.y+fsize,renderSize.z),
Vector3(renderSize.x-_bevelSize,-renderSize.y+_bevelSize,renderSize.z) Vector3(renderSize.x,-renderSize.y+fsize,renderSize.z)
); );
addTriangle(Vector3(-renderSize.x+_bevelSize,renderSize.y-_bevelSize,renderSize.z), addTriangle(Vector3(-renderSize.x,renderSize.y-fsize,renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,renderSize.z), Vector3(-renderSize.x,-renderSize.y+fsize,renderSize.z),
Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,renderSize.z) Vector3(renderSize.x,renderSize.y-fsize,renderSize.z)
); );
// Top // Top
addTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y,renderSize.z-_bevelSize), addTriangle(Vector3(renderSize.x,renderSize.y,renderSize.z-fsize),
Vector3(renderSize.x-_bevelSize,renderSize.y,-renderSize.z+_bevelSize), Vector3(renderSize.x,renderSize.y,-renderSize.z+fsize),
Vector3(-renderSize.x+_bevelSize,renderSize.y,renderSize.z-_bevelSize) Vector3(-renderSize.x,renderSize.y,renderSize.z-fsize)
); );
addTriangle(Vector3(-renderSize.x+_bevelSize,renderSize.y,renderSize.z-_bevelSize), addTriangle(Vector3(-renderSize.x,renderSize.y,renderSize.z-fsize),
Vector3(renderSize.x-_bevelSize,renderSize.y,-renderSize.z+_bevelSize), Vector3(renderSize.x,renderSize.y,-renderSize.z+fsize),
Vector3(-renderSize.x+_bevelSize,renderSize.y,-renderSize.z+_bevelSize) Vector3(-renderSize.x,renderSize.y,-renderSize.z+fsize)
); );
// Back // Back
addTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,-renderSize.z), addTriangle(Vector3(renderSize.x,renderSize.y-fsize,-renderSize.z),
Vector3(renderSize.x-_bevelSize,-renderSize.y+_bevelSize,-renderSize.z), Vector3(renderSize.x,-renderSize.y+fsize,-renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,-renderSize.z) Vector3(-renderSize.x,-renderSize.y+fsize,-renderSize.z)
); );
addTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,-renderSize.z), addTriangle(Vector3(renderSize.x,renderSize.y-fsize,-renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,-renderSize.z), Vector3(-renderSize.x,-renderSize.y+fsize,-renderSize.z),
Vector3(-renderSize.x+_bevelSize,renderSize.y-_bevelSize,-renderSize.z) Vector3(-renderSize.x,renderSize.y-fsize,-renderSize.z)
); );
// Bottom // Bottom
addTriangle(Vector3(renderSize.x-_bevelSize,-renderSize.y,-renderSize.z+_bevelSize), addTriangle(Vector3(renderSize.x,-renderSize.y,-renderSize.z+fsize),
Vector3(renderSize.x-_bevelSize,-renderSize.y,renderSize.z-_bevelSize), Vector3(renderSize.x,-renderSize.y,renderSize.z-fsize),
Vector3(-renderSize.x+_bevelSize,-renderSize.y,renderSize.z-_bevelSize) Vector3(-renderSize.x,-renderSize.y,renderSize.z-fsize)
); );
addTriangle(Vector3(-renderSize.x+_bevelSize,-renderSize.y,renderSize.z-_bevelSize), addTriangle(Vector3(-renderSize.x,-renderSize.y,renderSize.z-fsize),
Vector3(-renderSize.x+_bevelSize,-renderSize.y,-renderSize.z+_bevelSize), Vector3(-renderSize.x,-renderSize.y,-renderSize.z+fsize),
Vector3(renderSize.x-_bevelSize,-renderSize.y,-renderSize.z+_bevelSize) Vector3(renderSize.x,-renderSize.y,-renderSize.z+fsize)
); );
// Left // Left
addTriangle(Vector3(-renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize), /*addTriangle(Vector3(-renderSize.x,renderSize.y-fsize,-renderSize.z+fsize),
Vector3(-renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize), Vector3(-renderSize.x,-renderSize.y+fsize,renderSize.z-fsize),
Vector3(-renderSize.x,renderSize.y-_bevelSize,renderSize.z-_bevelSize) Vector3(-renderSize.x,renderSize.y-fsize,renderSize.z-fsize)
); );
addTriangle(Vector3(-renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize), addTriangle(Vector3(-renderSize.x,-renderSize.y+fsize,renderSize.z-fsize),
Vector3(-renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize), Vector3(-renderSize.x,renderSize.y-fsize,-renderSize.z+fsize),
Vector3(-renderSize.x,-renderSize.y+_bevelSize,-renderSize.z+_bevelSize) Vector3(-renderSize.x,-renderSize.y+fsize,-renderSize.z+fsize)
); );
// Right // Right
addTriangle(Vector3(renderSize.x,renderSize.y-_bevelSize,renderSize.z-_bevelSize), addTriangle(Vector3(renderSize.x,renderSize.y-fsize,renderSize.z-fsize),
Vector3(renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize), Vector3(renderSize.x,-renderSize.y+fsize,renderSize.z-fsize),
Vector3(renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize) Vector3(renderSize.x,renderSize.y-fsize,-renderSize.z+fsize)
);
addTriangle(Vector3(renderSize.x,-renderSize.y+_bevelSize,-renderSize.z+_bevelSize),
Vector3(renderSize.x,renderSize.y-_bevelSize,-renderSize.z+_bevelSize),
Vector3(renderSize.x,-renderSize.y+_bevelSize,renderSize.z-_bevelSize)
); );
addTriangle(Vector3(renderSize.x,-renderSize.y+fsize,-renderSize.z+fsize),
Vector3(renderSize.x,renderSize.y-fsize,-renderSize.z+fsize),
Vector3(renderSize.x,-renderSize.y+fsize,renderSize.z-fsize)
);//*/
// Bevel Top Front /*// Bevel Top Front
makeFace(0,36,48); makeFace(0,36,48);
makeFace(48,18,0); makeFace(48,18,0);
// Bevel Left Front Corner // Bevel Left Front Corner
@@ -770,19 +842,77 @@ void PartInstance::render(RenderDevice* rd) {
makeFace(144,102,84); makeFace(144,102,84);
makeFace(84,174,144); makeFace(84,174,144);
// Back Left Bottom Corner // Back Left Bottom Corner
makeFace(174,84,132); makeFace(174,84,132);*/
float radius = renderSize.y + (renderSize.y * (1 - cos(pi() / 12)));
Vector2 xy[13];
for(int i = 0; i < 13; i++)
{
//Get the next point
float y = radius * cos(((double)i-G3D::toRadians(29)) * pi()/6);
float z = radius * sin(((double)i-G3D::toRadians(29)) * pi()/6);
xy[i] = Vector2(y,z);
}
for(int i = 0; i < 12; i++)
{
//Create a Quad for the face (i to i+1)
addSmoothTriangle(
Vector3(renderSize.x, xy[i].x, xy[i].y),
Vector3(-renderSize.x, xy[i].x, xy[i].y),
Vector3(-renderSize.x, xy[i+1].x, xy[i+1].y));
addSmoothTriangle(
Vector3(renderSize.x, xy[i].x, xy[i].y),
Vector3(-renderSize.x, xy[i+1].x, xy[i+1].y),
Vector3(renderSize.x, xy[i+1].x, xy[i+1].y));
//Cap on the right
addTriangle(
Vector3(renderSize.x, xy[0].x, xy[0].y),
Vector3(renderSize.x, xy[i].x, xy[i].y),
Vector3(renderSize.x, xy[i+1].x, xy[i+1].y));
//Cap on the left
addTriangle(
Vector3(-renderSize.x, xy[i+1].x, xy[i+1].y),
Vector3(-renderSize.x, xy[i].x, xy[i].y),
Vector3(-renderSize.x, xy[0].x, xy[0].y));
}
/*float facetRatio = renderSize.x / (pi() * 0.5F);
addQuad(
Vector3(renderSize.x, renderSize.y, renderSize.z-facetRatio),
Vector3(renderSize.x, renderSize.y, -renderSize.z+facetRatio),
Vector3(-renderSize.x, renderSize.y, -renderSize.z+facetRatio),
Vector3(-renderSize.x, renderSize.y, renderSize.z-facetRatio));
addQuad(
Vector3(renderSize.x, renderSize.y-facetRatio, renderSize.z),
Vector3(-renderSize.x, renderSize.y-facetRatio, renderSize.z),
Vector3(-renderSize.x, -renderSize.y+facetRatio, renderSize.z),
Vector3(renderSize.x, -renderSize.y+facetRatio, renderSize.z));
addQuad(
Vector3(-renderSize.x, -renderSize.y, renderSize.z-facetRatio),
Vector3(-renderSize.x, -renderSize.y, -renderSize.z+facetRatio),
Vector3(renderSize.x, -renderSize.y, -renderSize.z+facetRatio),
Vector3(renderSize.x, -renderSize.y, renderSize.z-facetRatio));
addQuad(
Vector3(renderSize.x, -renderSize.y+facetRatio, -renderSize.z),
Vector3(-renderSize.x, -renderSize.y+facetRatio, -renderSize.z),
Vector3(-renderSize.x, renderSize.y-facetRatio, -renderSize.z),
Vector3(renderSize.x, renderSize.y-facetRatio, -renderSize.z));*/
addPlus(Vector3(-renderSize.x-0.01,0,0)); addPlus(Vector3(-renderSize.x-0.01,0,0));
addPlus2(Vector3(renderSize.x+0.01,0,0)); addPlus2(Vector3(renderSize.x+0.01,0,0));
for (unsigned short i=0;i<_vertices.size()/6;i++) {
_indices.push_back(i);
}
//std::reverse(_vertices.begin(), _vertices.end());
//std::reverse(_normals.begin(), _normals.end());
} }
break; break;
} }
for (unsigned short i=0;i<_vertices.size()/6;i++) {
_indices.push_back(i);
}
changed=false; changed=false;
glNewList(glList, GL_COMPILE); glNewList(glList, GL_COMPILE);

View File

@@ -1,12 +1,15 @@
#pragma once #pragma once
#include "PVInstance.h" #include "PVInstance.h"
#include "Enum.h" #include "Enum.h"
#define _USE_MATH_DEFINES
#include <cmath>
#define NEW_BOX_RENDER #define NEW_BOX_RENDER
class PartInstance : public PVInstance class PartInstance : public PVInstance
{ {
public: public:
PartInstance(void); PartInstance(void);
PartInstance(const PartInstance &oinst); PartInstance(const PartInstance &oinst);
Instance* clone() const { return new PartInstance(*this); } Instance* clone() const { return new PartInstance(*this); }
@@ -44,12 +47,15 @@ public:
void addNormals(Vector3 normal); void addNormals(Vector3 normal);
void addSingularNormal(Vector3 normal); void addSingularNormal(Vector3 normal);
void addTriangle(Vector3 vertexPos,Vector3 vertexPos2, Vector3 vertexPos3); void addTriangle(Vector3 vertexPos,Vector3 vertexPos2, Vector3 vertexPos3);
void addQuad(Vector3 v1,Vector3 v2, Vector3 v3, Vector3 v4);
void genSmoothNormals(int);
void addSmoothTriangle(Vector3 vertexPos,Vector3 vertexPos2, Vector3 vertexPos3); void addSmoothTriangle(Vector3 vertexPos,Vector3 vertexPos2, Vector3 vertexPos3);
void makeSmoothFace(int vertex1, int vertex2, int vertex3); void makeSmoothFace(int vertex1, int vertex2, int vertex3);
void addPlus(Vector3 v1); void addPlus(Vector3 v1);
void addPlus2(Vector3 v1); void addPlus2(Vector3 v1);
void debugPrintVertexIDs(RenderDevice* rd, GFontRef font, Matrix3 camRot); void debugPrintVertexIDs(RenderDevice* rd, GFontRef font, Matrix3 camRot);
void makeFace(int vertex1, int vertex2, int vertex3); void makeFace(int vertex1, int vertex2, int vertex3);
void fromArrays(float verts[], float norms[], float ind[], unsigned int countVN, unsigned int countInd);
bool isUniqueVertex(Vector3 pos); bool isUniqueVertex(Vector3 pos);
#endif #endif
private: private:

View File

@@ -12,12 +12,3 @@ WorkspaceInstance::WorkspaceInstance(void)
WorkspaceInstance::~WorkspaceInstance(void) WorkspaceInstance::~WorkspaceInstance(void)
{ {
} }
void WorkspaceInstance::removeFromPVector(PVInstance * instance)
{
__pvVector.erase(std::remove(__pvVector.begin(), __pvVector.end(), instance), __pvVector.end());
}
void WorkspaceInstance::addToPVector(PVInstance * instance)
{
__pvVector.push_back(instance);
}

View File

@@ -1,6 +1,5 @@
#pragma once #pragma once
#include "GroupInstance.h" #include "GroupInstance.h"
#include <set>
class WorkspaceInstance : class WorkspaceInstance :
public GroupInstance public GroupInstance
@@ -8,8 +7,4 @@ class WorkspaceInstance :
public: public:
WorkspaceInstance(void); WorkspaceInstance(void);
~WorkspaceInstance(void); ~WorkspaceInstance(void);
void removeFromPVector(PVInstance *);
void addToPVector(PVInstance *);
std::vector<PVInstance*> __pvVector;
std::vector<PVInstance*>* getPVVector();
}; };

View File

@@ -7,6 +7,8 @@
#define _WIN32_WINNT 0x0400 #define _WIN32_WINNT 0x0400
#define _WIN32_WINDOWS 0x0400
#define WINVER 0x0400
#include <G3DAll.h> #include <G3DAll.h>
#include <initguid.h> #include <initguid.h>