Ejemplo n.º 1
0
PyObject* py_snapshot(PyObject* self, PyObject* args) {
    static PythonParameterParser tester(1);
    std::string filename, canvasName = "";
    if (tester.parse(args, filename, canvasName)== -1) {
        return nullptr;
    }
    
    CanvasProcessor* canvas = nullptr;

    if (canvasName.size() != 0) {
        canvas = dynamic_cast<CanvasProcessor*>(
            InviwoApplication::getPtr()->getProcessorNetwork()->getProcessorByIdentifier(
                canvasName));
    } else {
        if (InviwoApplication::getPtr() && InviwoApplication::getPtr()->getProcessorNetwork()) {
            std::vector<CanvasProcessor*> canvases = InviwoApplication::getPtr()
                                                         ->getProcessorNetwork()
                                                         ->getProcessorsByType<CanvasProcessor>();

            if (canvases.size() != 0)
                canvas = InviwoApplication::getPtr()
                             ->getProcessorNetwork()
                             ->getProcessorsByType<CanvasProcessor>()[0];
        }
    }

    if (!canvas) {
        PyErr_SetString(PyExc_TypeError, "snapshot() no canvas found");
        return nullptr;
    }

    canvas->saveImageLayer(filename.c_str());
    Py_RETURN_NONE;
}
Ejemplo n.º 2
0
PyObject* py_showTransferFunctionEditor(PyObject* self, PyObject* args) {
    static PythonParameterParser tester;

    std::string path;
    if (tester.parse(args, path) == -1) {
        return nullptr;
    }

    Property* theProperty =
        InviwoApplication::getPtr()->getProcessorNetwork()->getProperty(splitString(path, '.'));

    if (!theProperty) {
        std::string msg =
            std::string("showTransferFunctionEditor() no property with path: ") + path;
        PyErr_SetString(PyExc_TypeError, msg.c_str());
        return nullptr;
    }

    if (!dynamic_cast<TransferFunctionProperty*>(theProperty)) {
        std::string msg =
            std::string("showTransferFunctionEditor() not a transfer function property: ") +
            theProperty->getClassIdentifier();
        PyErr_SetString(PyExc_TypeError, msg.c_str());
        return nullptr;
    }

    for (auto w : theProperty->getWidgets()) {
        auto tfw = dynamic_cast<TransferFunctionPropertyWidgetQt*>(w);
        if (tfw) {
            tfw->openTransferFunctionDialog();
        }
    }
    Py_RETURN_NONE;
}
Ejemplo n.º 3
0
PyObject* py_loadTransferFunction(PyObject* /*self*/, PyObject* args) {
    static PythonParameterParser tester;
    std::string path;
    std::string filename;
    if (tester.parse(args, path, filename) == -1) {
        return nullptr;
    }

    auto tf = getTF(path, "loadTransferFunction");
    if (!tf) { return nullptr; }

    auto app = InviwoApplication::getPtr();

    if (!filesystem::fileExists(filename)) {
        if (filesystem::fileExists(app->getPath(PathType::TransferFunctions, "/" + filename))) {
            filename = app->getPath(PathType::TransferFunctions, "/" + filename);
        } else {
            std::string msg = "loadTransferFunction() file not found (" + filename + ")";
            PyErr_SetString(PyExc_TypeError, msg.c_str());
            return nullptr;
        }
    }

    Deserializer deserializer(app, filename);
    tf->deserialize(deserializer);

    Py_RETURN_NONE;
}
Ejemplo n.º 4
0
PyObject* py_update(PyObject* self, PyObject* args) {
    static PythonParameterParser tester;
    if (tester.parse(args) == -1) {
        return nullptr;
    }
    if (auto qt = dynamic_cast<InviwoApplicationQt*>(InviwoApplication::getPtr())) {
        qt->processEvents();
    }
    Py_RETURN_NONE;
}
Ejemplo n.º 5
0
PyObject* py_getPathCurrentWorkspace(PyObject* self, PyObject* args) {
    static PythonParameterParser tester;
    if (tester.parse(args) == -1) {
        return nullptr;
    }

    if (auto qt = dynamic_cast<InviwoApplicationQt*>(InviwoApplication::getPtr())) {
        if (auto mw = dynamic_cast<InviwoMainWindow*>(qt->getMainWindow())) {
            return PyValueParser::toPyObject(mw->getNetworkEditor()->getCurrentFilename());
        }
    }
    return nullptr;
}
Ejemplo n.º 6
0
PyObject* py_quitInviwo(PyObject* self, PyObject* args) {
    static PythonParameterParser tester;
    if (tester.parse(args) == -1) {
        return nullptr;
    }
    if (auto qt = dynamic_cast<InviwoApplicationQt*>(InviwoApplication::getPtr())) {
        if (auto mw = dynamic_cast<InviwoMainWindow*>(qt->getMainWindow())) {
            mw->getNetworkEditor()->setModified(false);
            mw->close();
        }
    }
    Py_RETURN_NONE;
}
Ejemplo n.º 7
0
PyObject* py_clearTransferfunction(PyObject* /*self*/, PyObject* args) {
    static PythonParameterParser tester;
    std::string path;
    if (tester.parse(args, path) == -1) {
        return nullptr;
    }

    auto tf = getTF(path, "clearTransferfunction");
    if (!tf) { return nullptr; }
    
    tf->get().clearPoints();
    Py_RETURN_NONE;
}
Ejemplo n.º 8
0
PyObject* py_getModulePath(PyObject* self, PyObject* args) {
    static PythonParameterParser tester;
    std::string name;
    if (tester.parse(args, name) == -1) {
        return nullptr;
    }

    if (auto module = InviwoApplication::getPtr()->getModuleByIdentifier(name)) {
        return PyValueParser::toPyObject(module->getPath());
    } else {
        auto err = "Could not find a module with id: " + name;
        PyErr_SetString(PyExc_TypeError, err.c_str());
        return nullptr;
    }
}
Ejemplo n.º 9
0
PyObject* py_saveWorkspace(PyObject* self, PyObject* args) {
    static PythonParameterParser tester(1);
    std::string filename;
    bool setAsFilename;
    if (tester.parse(args, filename , setAsFilename) == -1) {
        return nullptr;
    }
    if (auto qt = dynamic_cast<InviwoApplicationQt*>(InviwoApplication::getPtr())) {
        if (auto mw = dynamic_cast<InviwoMainWindow*>(qt->getMainWindow())) {
            filename = filesystem::cleanupPath(filename);
            mw->getNetworkEditor()->saveNetwork(filename, setAsFilename);
        }
    }

    Py_RETURN_NONE;
}
Ejemplo n.º 10
0
PyObject* py_saveTransferFunction(PyObject* /*self*/, PyObject* args) {
    static PythonParameterParser tester;
    std::string path;
    std::string filename;
    if (tester.parse(args,path,filename) == -1) {
        return nullptr;
    }

    auto tf = getTF(path,"saveTransferFunction");
    if (!tf) { return nullptr; }

    Serializer serializer(filename);
    tf->serialize(serializer);
    serializer.writeFile();
    Py_RETURN_NONE;
}
Ejemplo n.º 11
0
PyObject* py_addPointTransferFunction(PyObject* /*self*/, PyObject* args) {
    static PythonParameterParser tester;
    std::string path;
    vec2 pos;
    vec3 color;
    if (tester.parse(args, path, pos, color) == -1) {
        return nullptr;
    }

    auto tf = getTF(path, "addPointTransferFunction");
    if (!tf) { return nullptr; }
    
    tf->get().addPoint(pos, vec4(color, pos.y));
    tf->setModified(true);
    Py_RETURN_NONE;
}
Ejemplo n.º 12
0
PyObject* py_prompt(PyObject* self, PyObject* args) {
    static PythonParameterParser tester(1);
    std::string title, message, defaultValue = "";
    if (tester.parse(args, title, message, defaultValue) == -1) {
        return nullptr;
    }

    bool ok;
    QString text = QInputDialog::getText(nullptr, title.c_str(), message.c_str(), QLineEdit::Normal,
                                         defaultValue.c_str(), &ok);
    if (ok && !text.isEmpty()) {
        std::string t = text.toLocal8Bit().constData();
        return PyValueParser::toPyObject(t);
    } else if (ok) {
        return PyValueParser::toPyObject(std::string(""));
    }
    Py_RETURN_NONE;
}
Ejemplo n.º 13
0
PyObject* py_snapshotAllCanvases(PyObject* self, PyObject* args) {
    static PythonParameterParser tester(2);
    std::string path, prefix = "", fileEnding = "png";
    if (tester.parse(args, path, prefix, fileEnding) == -1) {
        return nullptr;
    }

    std::vector<CanvasProcessor*> canvases =
        InviwoApplication::getPtr()->getProcessorNetwork()->getProcessorsByType<CanvasProcessor>();

    for (auto& c : canvases) {
        std::stringstream ss;
        ss << path << "/" << prefix << c->getIdentifier() << "." << fileEnding;
        c->saveImageLayer(ss.str());
    }

    Py_RETURN_NONE;
}
Ejemplo n.º 14
0
PyObject* py_snapshotCanvas(PyObject* self, PyObject* args) {
    static PythonParameterParser tester;
    int index;
    std::string filename;
    if (tester.parse(args, index, filename)== -1) {
        return nullptr;
    }
    
    std::vector<CanvasProcessor*> canvases =
        InviwoApplication::getPtr()->getProcessorNetwork()->getProcessorsByType<CanvasProcessor>();

    if (index >= static_cast<int>(canvases.size())) {
        std::string msg = std::string("snapshotCanvas() index out of range with index: ") +
                          toString(index) + " ,canvases avilable: " + toString(canvases.size());
        PyErr_SetString(PyExc_TypeError, msg.c_str());
        return nullptr;
    }

    canvases[index]->saveImageLayer(filename);
    Py_RETURN_NONE;
}
Ejemplo n.º 15
0
PyObject* py_loadWorkspace(PyObject* self, PyObject* args) {
    static PythonParameterParser tester;
    std::string filename;
    if (tester.parse(args, filename) == -1) {
        return nullptr;
    }
    if (!filesystem::fileExists(filename)) {
        filename = filesystem::getPath(PathType::Workspaces) + "/" + filename;

        if (!filesystem::fileExists(filename)) {
            std::string msg = std::string("loadWorkspace() could not find file") + filename;
            PyErr_SetString(PyExc_TypeError, msg.c_str());
            return nullptr;
        }
    }

    if (auto qt = dynamic_cast<InviwoApplicationQt*>(InviwoApplication::getPtr())) {
        if (auto mw = dynamic_cast<InviwoMainWindow*>(qt->getMainWindow())) {
            mw->getNetworkEditor()->loadNetwork(filename);
        }
    }

    Py_RETURN_NONE;
}
Ejemplo n.º 16
0
PyObject* py_resizecanvas(PyObject* /*self*/, PyObject* args) {
    static PythonParameterParser tester;
    PyObject* arg0;
    int w;
    int h;
    if (tester.parse(args,arg0, w, h) == -1) {
        return nullptr;
    }

   

    CanvasProcessor* canvas = nullptr;
    bool argIsString = PyValueParser::is<std::string>(arg0);

    if (argIsString) {
        std::string id = PyValueParser::parse<std::string>(arg0);
        Processor* processor =
            InviwoApplication::getPtr()->getProcessorNetwork()->getProcessorByIdentifier(id);

        if (!processor) {
            std::string msg =
                std::string("resizeCanvas(canvas,width,height) no processor with name: ") + id;
            PyErr_SetString(PyExc_TypeError, msg.c_str());
            return nullptr;
        }

        canvas = dynamic_cast<CanvasProcessor*>(processor);

        if (!canvas) {
            std::string msg =
                std::string("resizeCanvas(canvas,width,height) processor with name: ") + id +
                " is not a canvas processor, it is a" + processor->getClassIdentifier();
            PyErr_SetString(PyExc_TypeError, msg.c_str());
            return nullptr;
        }
    } else {
        int id = PyValueParser::parse<int>(arg0);
        std::vector<CanvasProcessor*> canvases = InviwoApplication::getPtr()
                                                     ->getProcessorNetwork()
                                                     ->getProcessorsByType<CanvasProcessor>();

        if (canvases.size() == 0) {
            std::string msg = std::string(
                "resizeCanvas(canvas,width,height) no canvases found in current network");
            PyErr_SetString(PyExc_TypeError, msg.c_str());
            return nullptr;
        }

        if (static_cast<int>(canvases.size()) <= id) {
            std::string msg =
                std::string(
                    "resizeCanvas(canvas,width,height) index out of bounds, index given: ") +
                toString(id) + ", max index possible: " + toString(canvases.size() - 1);
            PyErr_SetString(PyExc_TypeError, msg.c_str());
            return nullptr;
        }

        canvas = canvases[id];
    }


    if (w <= 0 || h <= 0) {
        std::string msg = std::string(
            "resizeCanvas(canvas,width,height) width and height must have positive non-zero "
            "values");
        PyErr_SetString(PyExc_TypeError, msg.c_str());
        return nullptr;
    }

    canvas->setCanvasSize(ivec2(w, h));
    //canvas->invalidate(InvalidationLevel::InvalidOutput);

    Py_RETURN_NONE;
}