feat: basic dependency graph cooking, updating viewport
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#include "gui/Interface.h"
|
||||
#include "Engine/Network/NetworkManager.h"
|
||||
#include "gui/viewport/Viewport.h"
|
||||
#include "gui/network/Network.h"
|
||||
#include <qpushbutton.h>
|
||||
@@ -42,9 +43,7 @@ EnzoUI::EnzoUI()
|
||||
|
||||
mainLayout_->addWidget(viewportSplitter_);
|
||||
|
||||
QTimer::singleShot(100, this, [=] {
|
||||
std::cout << "Viewport size: " << viewport->width() << " x " << viewport->height() << std::endl;
|
||||
std::cout << "Network size: " << network->width() << " x " << network->height() << std::endl;
|
||||
});
|
||||
// connect signals
|
||||
connect(enzo::nt::NetworkManager::getInstance(), &enzo::nt::NetworkManager::updateDisplay, viewport, &Viewport::geometryChanged);
|
||||
|
||||
}
|
||||
|
||||
@@ -114,6 +114,7 @@ void Network::leftMousePressed(QMouseEvent *event)
|
||||
else if(QGraphicsItem* clickedNode = itemOfType<NodeGraphic>(clickedItems))
|
||||
{
|
||||
nodeMoveDelta_=clickedNode->pos()-view_->mapToScene(event->pos());
|
||||
std::cout << "move delta: " << nodeMoveDelta_.x() << " " << nodeMoveDelta_.y() << "\n";
|
||||
state_=State::MOVING_NODE;
|
||||
moveNodeBuffer.clear();
|
||||
moveNodeBuffer.push_back(clickedNode);
|
||||
@@ -190,7 +191,7 @@ void Network::mouseMoved(QMouseEvent *event)
|
||||
|
||||
if(state_==State::MOVING_NODE)
|
||||
{
|
||||
moveNodes(nodeMoveDelta_+view_->mapToScene(event->pos()));
|
||||
moveNodes(view_->mapToScene(event->pos())+nodeMoveDelta_);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -52,8 +52,6 @@ void SocketGraphic::initBoundingBox()
|
||||
|
||||
void SocketGraphic::posChanged(QPointF pos)
|
||||
{
|
||||
std::cout << "socket pos changed\n";
|
||||
//
|
||||
for(auto* edge : edges_)
|
||||
{
|
||||
// edge->setPos(startSocket_->scenePos(), socket->scenePos());
|
||||
|
||||
@@ -46,12 +46,15 @@ void GLMesh::initBuffers()
|
||||
void GLMesh::setPosBuffer(std::vector<enzo::bt::Vector3> data)
|
||||
{
|
||||
bind();
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
|
||||
vertexPosData.clear();
|
||||
std::cout << "pos data\n-------\n";
|
||||
for(auto vector : data)
|
||||
{
|
||||
vertexPosData.push_back(vector.x());
|
||||
vertexPosData.push_back(vector.y());
|
||||
vertexPosData.push_back(vector.z());
|
||||
std::cout << vector.x() << " " << vector.y() << " " << vector.z() << "\n";
|
||||
}
|
||||
|
||||
glBufferData(GL_ARRAY_BUFFER, vertexPosData.size()*sizeof(GLfloat), vertexPosData.data(), GL_STATIC_DRAW);
|
||||
@@ -61,12 +64,15 @@ void GLMesh::setPosBuffer(std::vector<enzo::bt::Vector3> data)
|
||||
void GLMesh::setIndexBuffer(std::vector<int> data)
|
||||
{
|
||||
bind();
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
|
||||
indexData.clear();
|
||||
std::cout << "index data\n-------\n";
|
||||
for(int i=1;i+1<data.size();++i)
|
||||
{
|
||||
indexData.push_back(data.at(0));
|
||||
indexData.push_back(data.at(i));
|
||||
indexData.push_back(data.at(i+1));
|
||||
std::cout << data.at(0) << " " << data.at(i) << " " << data.at(i+1) << "\n";
|
||||
}
|
||||
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexData.size()*sizeof(GLint), indexData.data(), GL_STATIC_DRAW);
|
||||
|
||||
@@ -27,6 +27,11 @@ Viewport::Viewport(QWidget *parent, Qt::WindowFlags f)
|
||||
|
||||
}
|
||||
|
||||
void Viewport::geometryChanged(enzo::geo::Geometry& geometry)
|
||||
{
|
||||
openGLWidget_->geometryChanged(geometry);
|
||||
}
|
||||
|
||||
void Viewport::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
QPainterPath path;
|
||||
|
||||
@@ -23,4 +23,6 @@ private:
|
||||
QPointF leftStartPos_;
|
||||
bool rightMouseDown_=false;
|
||||
QPointF rightStartPos_;
|
||||
public slots:
|
||||
void geometryChanged(enzo::geo::Geometry& geometry);
|
||||
};
|
||||
|
||||
@@ -20,8 +20,9 @@ void ViewportGLWidget::initializeGL()
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glEnable(GL_MULTISAMPLE);
|
||||
|
||||
auto geo = std::make_unique<enzo::geo::Geometry>();
|
||||
triangleMesh_ = meshFromGeo(geo);
|
||||
enzo::geo::Geometry geo = enzo::geo::Geometry();
|
||||
// triangleMesh_ = meshFromGeo(geo);
|
||||
triangleMesh_ = std::make_unique<GLMesh>();
|
||||
gridMesh_ = std::make_unique<GLGrid>();
|
||||
|
||||
QSurfaceFormat fmt = context()->format();
|
||||
@@ -141,13 +142,13 @@ void ViewportGLWidget::paintGL()
|
||||
|
||||
}
|
||||
|
||||
std::unique_ptr<GLMesh> ViewportGLWidget::meshFromGeo(std::unique_ptr<enzo::geo::Geometry>& geometry)
|
||||
std::unique_ptr<GLMesh> ViewportGLWidget::meshFromGeo(enzo::geo::Geometry& geometry)
|
||||
{
|
||||
using namespace enzo;
|
||||
|
||||
auto mesh = std::make_unique<GLMesh>();
|
||||
|
||||
std::shared_ptr<ga::Attribute> PAttr = geometry->getAttribByName(ga::AttrOwner::POINT, "P");
|
||||
std::shared_ptr<ga::Attribute> PAttr = geometry.getAttribByName(ga::AttrOwner::POINT, "P");
|
||||
ga::AttributeHandleVector3 PAttrHandle = ga::AttributeHandleVector3(PAttr);
|
||||
PAttrHandle.addValue(bt::Vector3(1.0f, -1.0f, 0.0f));
|
||||
PAttrHandle.addValue(bt::Vector3(-1.0f, -1.0f, 0.0f));
|
||||
@@ -157,7 +158,7 @@ std::unique_ptr<GLMesh> ViewportGLWidget::meshFromGeo(std::unique_ptr<enzo::geo:
|
||||
|
||||
mesh->setPosBuffer(PAttrHandle.getData());
|
||||
|
||||
std::shared_ptr<ga::Attribute> pointAttr = geometry->getAttribByName(ga::AttrOwner::VERTEX, "point");
|
||||
std::shared_ptr<ga::Attribute> pointAttr = geometry.getAttribByName(ga::AttrOwner::VERTEX, "point");
|
||||
ga::AttributeHandleInt pointAttrHandle = ga::AttributeHandleInt(pointAttr);
|
||||
pointAttrHandle.addValue(0);
|
||||
pointAttrHandle.addValue(1);
|
||||
@@ -170,3 +171,16 @@ std::unique_ptr<GLMesh> ViewportGLWidget::meshFromGeo(std::unique_ptr<enzo::geo:
|
||||
return mesh;
|
||||
}
|
||||
|
||||
void ViewportGLWidget::geometryChanged(enzo::geo::Geometry& geometry)
|
||||
{
|
||||
using namespace enzo;
|
||||
std::shared_ptr<ga::Attribute> PAttr = geometry.getAttribByName(ga::AttrOwner::POINT, "P");
|
||||
ga::AttributeHandleVector3 PAttrHandle = ga::AttributeHandleVector3(PAttr);
|
||||
|
||||
triangleMesh_->setPosBuffer(PAttrHandle.getData());
|
||||
|
||||
std::shared_ptr<ga::Attribute> pointAttr = geometry.getAttribByName(ga::AttrOwner::VERTEX, "point");
|
||||
ga::AttributeHandleInt pointAttrHandle = ga::AttributeHandleInt(pointAttr);
|
||||
|
||||
triangleMesh_->setIndexBuffer(pointAttrHandle.getData());
|
||||
}
|
||||
|
||||
@@ -18,10 +18,13 @@ public:
|
||||
std::unique_ptr<GLMesh> triangleMesh_ ;
|
||||
std::unique_ptr<GLGrid> gridMesh_ ;
|
||||
|
||||
std::unique_ptr<GLMesh> meshFromGeo(std::unique_ptr<enzo::geo::Geometry>& geometry);
|
||||
std::unique_ptr<GLMesh> meshFromGeo(enzo::geo::Geometry& geometry);
|
||||
|
||||
protected:
|
||||
void initializeGL() override;
|
||||
void resizeGL(int w, int h) override;
|
||||
void paintGL() override;
|
||||
|
||||
public slots:
|
||||
void geometryChanged(enzo::geo::Geometry& geometry);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user