Multiselection and Models

This commit is contained in:
andreja6
2019-11-11 14:05:17 -08:00
parent ef2a3bc146
commit 152b376c02
6 changed files with 119 additions and 49 deletions

View File

@@ -711,13 +711,14 @@ void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
//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);
if(!onGUI)
{
Instance * selectedInstance = NULL;
testRay = cameraController.getCamera()->worldRay(_dataModel->mousex, _dataModel->mousey, renderDevice->getViewport());
float nearest=std::numeric_limits<float>::infinity();
Vector3 camPos = cameraController.getCamera()->getCoordinateFrame().translation;
@@ -735,8 +736,9 @@ void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
if (nearest>time)
{
nearest=time;
bool found = false;
for(size_t i = 0; i < g_selectedInstances.size(); i++)
//bool found = false;
selectedInstance = test;
/*for(size_t i = 0; i < g_selectedInstances.size(); i++)
{
if(g_selectedInstances.at(i) == test)
{
@@ -749,25 +751,42 @@ void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
}
if(!found)
{
g_selectedInstances.clear();
g_selectedInstances.push_back(test);
selectedInstance = 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.";
//_messageTime = System::time();
//_dragging = true;
//_dragging = true;*/
}
}
}
}
if(!objFound)
selectInstance(_dataModel,_propWindow);
else
{
while(selectedInstance->getParent() != g_dataModel->getWorkspace())
{
selectedInstance = selectedInstance->getParent();
}
selectInstance(selectedInstance, _propWindow);
}
}
}
void Application::selectInstance(Instance* selectedInstance, PropertyWindow* propWindow)
{
if(!GetHoldKeyState(VK_RCONTROL) && !GetHoldKeyState(VK_LCONTROL))
{
printf("No control key hold \n");
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);
propWindow->UpdateSelected(selectedInstance);

View File

@@ -36,5 +36,41 @@ void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button)
if(g_selectedInstances.size() > 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();
}
/*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)
{
PVInstance::PVInstance();
name = "Model";
className = "GroupInstance";
listicon = 12;
}
@@ -10,6 +11,8 @@ GroupInstance::GroupInstance(void)
GroupInstance::GroupInstance(const GroupInstance &oinst)
{
PVInstance::PVInstance(oinst);
name = "Model";
className = "GroupInstance";
listicon = 12;
}
@@ -26,3 +29,14 @@ void GroupInstance::PropUpdate(LPPROPGRIDITEM &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,4 +10,5 @@ public:
GroupInstance(const GroupInstance &oinst);
virtual std::vector<PROPGRIDITEM> getProperties();
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->fontLocationRelativeTo = Vector2(10, 0);
button->setParent(this);
button->setButtonListener(new GUDButtonListener());
button = makeTextButton();
button->boxBegin = Vector2(0,240);
@@ -192,6 +192,7 @@ GuiRoot::GuiRoot() : _message(""), _messageTime(0)
button->font = g_fntlighttrek;
button->fontLocationRelativeTo = Vector2(10, 0);
button->setParent(this);
button->setButtonListener(new GUDButtonListener());
button = makeTextButton();
button->boxBegin = Vector2(0,265);

View File

@@ -479,66 +479,66 @@ void PartInstance::render(RenderDevice* rd) {
}
//*/
int obv = _bevelSize;
_bevelSize = this->size.y / 3.14159F;
float sphFace = this->size.y / 3.14159F;
// Front
addSmoothTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,renderSize.z),
Vector3(renderSize.x-_bevelSize,-renderSize.y+_bevelSize,renderSize.z)
addSmoothTriangle(Vector3(renderSize.x-sphFace,renderSize.y-sphFace,renderSize.z),
Vector3(-renderSize.x+sphFace,-renderSize.y+sphFace,renderSize.z),
Vector3(renderSize.x-sphFace,-renderSize.y+sphFace,renderSize.z)
);
addSmoothTriangle(Vector3(-renderSize.x+_bevelSize,renderSize.y-_bevelSize,renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,renderSize.z),
Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,renderSize.z)
addSmoothTriangle(Vector3(-renderSize.x+sphFace,renderSize.y-sphFace,renderSize.z),
Vector3(-renderSize.x+sphFace,-renderSize.y+sphFace,renderSize.z),
Vector3(renderSize.x-sphFace,renderSize.y-sphFace,renderSize.z)
);
// Top
addSmoothTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y,renderSize.z-_bevelSize),
Vector3(renderSize.x-_bevelSize,renderSize.y,-renderSize.z+_bevelSize),
Vector3(-renderSize.x+_bevelSize,renderSize.y,renderSize.z-_bevelSize)
addSmoothTriangle(Vector3(renderSize.x-sphFace,renderSize.y,renderSize.z-sphFace),
Vector3(renderSize.x-sphFace,renderSize.y,-renderSize.z+sphFace),
Vector3(-renderSize.x+sphFace,renderSize.y,renderSize.z-sphFace)
);
addSmoothTriangle(Vector3(-renderSize.x+_bevelSize,renderSize.y,renderSize.z-_bevelSize),
Vector3(renderSize.x-_bevelSize,renderSize.y,-renderSize.z+_bevelSize),
Vector3(-renderSize.x+_bevelSize,renderSize.y,-renderSize.z+_bevelSize)
addSmoothTriangle(Vector3(-renderSize.x+sphFace,renderSize.y,renderSize.z-sphFace),
Vector3(renderSize.x-sphFace,renderSize.y,-renderSize.z+sphFace),
Vector3(-renderSize.x+sphFace,renderSize.y,-renderSize.z+sphFace)
);
// Back
addSmoothTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,-renderSize.z),
Vector3(renderSize.x-_bevelSize,-renderSize.y+_bevelSize,-renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,-renderSize.z)
addSmoothTriangle(Vector3(renderSize.x-sphFace,renderSize.y-sphFace,-renderSize.z),
Vector3(renderSize.x-sphFace,-renderSize.y+sphFace,-renderSize.z),
Vector3(-renderSize.x+sphFace,-renderSize.y+sphFace,-renderSize.z)
);
addSmoothTriangle(Vector3(renderSize.x-_bevelSize,renderSize.y-_bevelSize,-renderSize.z),
Vector3(-renderSize.x+_bevelSize,-renderSize.y+_bevelSize,-renderSize.z),
Vector3(-renderSize.x+_bevelSize,renderSize.y-_bevelSize,-renderSize.z)
addSmoothTriangle(Vector3(renderSize.x-sphFace,renderSize.y-sphFace,-renderSize.z),
Vector3(-renderSize.x+sphFace,-renderSize.y+sphFace,-renderSize.z),
Vector3(-renderSize.x+sphFace,renderSize.y-sphFace,-renderSize.z)
);
// Bottom
addSmoothTriangle(Vector3(renderSize.x-_bevelSize,-renderSize.y,-renderSize.z+_bevelSize),
Vector3(renderSize.x-_bevelSize,-renderSize.y,renderSize.z-_bevelSize),
Vector3(-renderSize.x+_bevelSize,-renderSize.y,renderSize.z-_bevelSize)
addSmoothTriangle(Vector3(renderSize.x-sphFace,-renderSize.y,-renderSize.z+sphFace),
Vector3(renderSize.x-sphFace,-renderSize.y,renderSize.z-sphFace),
Vector3(-renderSize.x+sphFace,-renderSize.y,renderSize.z-sphFace)
);
addSmoothTriangle(Vector3(-renderSize.x+_bevelSize,-renderSize.y,renderSize.z-_bevelSize),
Vector3(-renderSize.x+_bevelSize,-renderSize.y,-renderSize.z+_bevelSize),
Vector3(renderSize.x-_bevelSize,-renderSize.y,-renderSize.z+_bevelSize)
addSmoothTriangle(Vector3(-renderSize.x+sphFace,-renderSize.y,renderSize.z-sphFace),
Vector3(-renderSize.x+sphFace,-renderSize.y,-renderSize.z+sphFace),
Vector3(renderSize.x-sphFace,-renderSize.y,-renderSize.z+sphFace)
);
// Left
addSmoothTriangle(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)
addSmoothTriangle(Vector3(-renderSize.x,renderSize.y-sphFace,-renderSize.z+sphFace),
Vector3(-renderSize.x,-renderSize.y+sphFace,renderSize.z-sphFace),
Vector3(-renderSize.x,renderSize.y-sphFace,renderSize.z-sphFace)
);
addSmoothTriangle(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)
addSmoothTriangle(Vector3(-renderSize.x,-renderSize.y+sphFace,renderSize.z-sphFace),
Vector3(-renderSize.x,renderSize.y-sphFace,-renderSize.z+sphFace),
Vector3(-renderSize.x,-renderSize.y+sphFace,-renderSize.z+sphFace)
);
// Right
addSmoothTriangle(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)
addSmoothTriangle(Vector3(renderSize.x,renderSize.y-sphFace,renderSize.z-sphFace),
Vector3(renderSize.x,-renderSize.y+sphFace,renderSize.z-sphFace),
Vector3(renderSize.x,renderSize.y-sphFace,-renderSize.z+sphFace)
);
addSmoothTriangle(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)
addSmoothTriangle(Vector3(renderSize.x,-renderSize.y+sphFace,-renderSize.z+sphFace),
Vector3(renderSize.x,renderSize.y-sphFace,-renderSize.z+sphFace),
Vector3(renderSize.x,-renderSize.y+sphFace,renderSize.z-sphFace)
);
@@ -594,7 +594,6 @@ void PartInstance::render(RenderDevice* rd) {
makeSmoothFace(84,174,144);
// Back Left Bottom Corner
makeSmoothFace(174,84,132);
_bevelSize = obv;//*/
for (unsigned short i=0;i<_vertices.size()/6;i++) {
_indices.push_back(i);
}