Multiselection and Models
This commit is contained in:
@@ -711,13 +711,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;
|
||||||
@@ -735,8 +736,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)
|
||||||
{
|
{
|
||||||
@@ -749,25 +751,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);
|
||||||
|
|
||||||
|
|||||||
@@ -36,5 +36,41 @@ 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();
|
||||||
|
}
|
||||||
|
/*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)
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -26,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;
|
||||||
|
}
|
||||||
@@ -10,4 +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();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
// 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)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -594,7 +594,6 @@ 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++) {
|
for (unsigned short i=0;i<_vertices.size()/6;i++) {
|
||||||
_indices.push_back(i);
|
_indices.push_back(i);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user