Skip to content

Commit

Permalink
start corebase solution.
Browse files Browse the repository at this point in the history
  • Loading branch information
legobadman committed Feb 2, 2022
1 parent 6618251 commit 9212d49
Show file tree
Hide file tree
Showing 3 changed files with 147 additions and 5 deletions.
65 changes: 60 additions & 5 deletions editor/graphsmanagment.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,30 @@
#include <zenoio/reader/zsgreader.h>
#include <zenoio/acceptor/modelacceptor.h>
#include <zenoui/util/uihelper.h>
#include <io/zsgwriter.h>
#include <zeno.h>
#include <zeno/core/Session.h>
#include <extra/GlobalState.h>
#include "launch/serialize.h"
#include "launch/corelaunch.h"


GraphsManagment::GraphsManagment(QObject* parent)
: QObject(parent)
, m_model(nullptr)
{

#ifdef Q_OS_WIN
LoadLibrary("zeno_ZenoFX.dll");
LoadLibrary("zeno_oldzenbase.dll");
#else
void* dp = nullptr;
dp = dlopen("libzeno_ZenoFX.so", RTLD_NOW);
if (dp == nullptr)
return;
dp = dlopen("libzeno_oldzenbase.so", RTLD_NOW);
if (dp == nullptr)
return;
#endif
}

GraphsModel* GraphsManagment::currentModel()
Expand All @@ -20,10 +37,48 @@ GraphsModel* GraphsManagment::currentModel()

GraphsModel* GraphsManagment::openZsgFile(const QString& fn)
{
m_model = new GraphsModel(this);
ModelAcceptor acceptor(m_model);
ZsgReader::getInstance().loadZsgFile(fn, &acceptor);
m_model->clearDirty();
cleanIOPath();
QTemporaryDir dir("zenvis-");
dir.setAutoRemove(false);
if (dir.isValid())
{
g_iopath = dir.path();
QByteArray bytes = g_iopath.toLatin1();
zeno::state = zeno::GlobalState();
zeno::state.setIOPath(bytes.data());

QFile file(fn);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return nullptr;

bytes = file.readAll();
QJsonDocument doc = QJsonDocument::fromJson(bytes);
QJsonArray ret = serializeScene(doc["graph"].toObject());

QJsonDocument doc2(ret);
QString strJson(doc2.toJson(QJsonDocument::Compact));
bytes = strJson.toUtf8();

zeno::loadScene(bytes.data());
zeno::switchGraph("main");

m_model = new GraphsModel(this);
const zeno::Session& sess = zeno::getSession();
for (auto it = sess.defaultScene->graphs.begin(); it != sess.defaultScene->graphs.end(); it++)
{
SubGraphModel* pSubModel = new SubGraphModel(m_model);
const std::string& name = it->first;
pSubModel->setName(QString::fromStdString(name));
for (auto it2 = it->second->nodes.begin(); it2 != it->second->nodes.end(); it2++)
{
it2->second;
int j;
j = 0;
}
m_model->appendSubGraph(pSubModel);
}
m_model->clear();
}
return m_model;
}

Expand Down
83 changes: 83 additions & 0 deletions editor/launch/serialize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -157,4 +157,87 @@ void serializeGraph(SubGraphModel* pModel, const QStringList& graphNames, QJsonA

ret.push_back(QJsonArray({"completeNode", ident}));
}
}

QJsonArray serializeScene(const QJsonObject& graphs)
{
QJsonArray item = { "clearAllState" };
QJsonArray arr;
arr.push_back(item);

const QStringList& graphsNames = graphs.keys();
for (const QString& name : graphsNames)
{
const QJsonObject& graphObj = graphs[name].toObject();
serializeGraph(graphObj["nodes"].toObject(), graphsNames, arr);
}
return arr;
}

QJsonArray serializeGraphs(const QJsonObject& graphs, bool has_subgraphs)
{
return QJsonArray();
}

void serializeGraph(const QJsonObject& nodes, const QStringList& subgkeys, QJsonArray& ret)
{
for (const QString& nodeId : nodes.keys())
{
const QJsonObject& nodeObj = nodes[nodeId].toObject();
if (nodeObj.find("special") != nodeObj.end())
continue;
QString name = nodeObj["name"].toString();
const QJsonObject& inputs = nodeObj["inputs"].toObject();
QJsonObject params = nodeObj["params"].toObject();
const QJsonArray& options = nodeObj["options"].toArray();
const QJsonArray& uipos = nodeObj["uipos"].toArray();

if (subgkeys.contains(name))
{
params["name"] = name;
name = "Subgraph";
}
else if (name == "ExecutionOutput")
{
name = "Route";
}
ret.push_back(QJsonArray({ "addNode", name, nodeId }));

for (const QString& inputSock : inputs.keys())
{
QJsonObject inputObj = inputs[inputSock].toObject();
if (inputObj.isEmpty()) {
continue;
}
else {
QJsonArray inputArr = inputs[inputSock].toArray();
QJsonValue srcIdent = inputArr[0];
QJsonValue srcSockName = inputArr[1];
QJsonValue sockDeflVal;
if (inputArr.size() > 2)
sockDeflVal = inputArr[2];
if (srcIdent.isNull())
{
if (!sockDeflVal.isNull())
{
ret.push_back(QJsonArray({ "setNodeInput", srcIdent, srcSockName, sockDeflVal }));
}
}
else
{
ret.push_back(QJsonArray({ "bindNodeInput", srcIdent, inputSock, sockDeflVal, srcSockName }));
}
}
}

for (const QString& paramName : params.keys())
{
ret.push_back(QJsonArray({"setNodeParam", nodeId, paramName, params[paramName] }));
}
for (auto option : options)
{
ret.push_back(QJsonArray({"setNodeOption", nodeId, option.toString()}));
}
ret.push_back(QJsonArray({ "completeNode", nodeId }));
}
}
4 changes: 4 additions & 0 deletions editor/launch/serialize.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,8 @@ void serializeScene(GraphsModel* pModel, QJsonArray& ret);
QJsonArray serializeGraphs(GraphsModel* pModel);
void serializeGraph(SubGraphModel* pModel, const QStringList& graphNames, QJsonArray& ret);

QJsonArray serializeScene(const QJsonObject& graphs);
QJsonArray serializeGraphs(const QJsonObject& graphs, bool has_subgraphs = true);
void serializeGraph(const QJsonObject& graphs, const QStringList& graphNames, QJsonArray& ret);

#endif

0 comments on commit 9212d49

Please sign in to comment.