Multiselection and Models
This commit is contained in:
@@ -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,26 +751,43 @@ 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)
|
||||
{
|
||||
g_selectedInstances.clear();
|
||||
g_selectedInstances.push_back(selectedInstance);
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -10,4 +10,5 @@ public:
|
||||
GroupInstance(const GroupInstance &oinst);
|
||||
virtual std::vector<PROPGRIDITEM> getProperties();
|
||||
virtual void PropUpdate(LPPROPGRIDITEM &pItem);
|
||||
std::vector<Instance *> unGroup();
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user