/
ArtemNech
/
simpleOpenGL
Обзор
Документация
Войти
/
ArtemNech
/
simpleOpenGL
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
backend/CBacking.h
129 строк
4 KB
Artem Nechitaylenko
All objects are works and draggable
20 май 2026, 09:40
20 май 2026, 09:40
bf16523
Код
Авторство
О чём код?
// // Created by artem on 1/2/25. // #ifndef NYM_PROJECT_CBACKING_H #define NYM_PROJECT_CBACKING_H #include <QPointF> #include <utility> #include "diagram/IDiagram.h" #include "diagram/IDiagramObjects.h" #include "graphics-units/NColor.h" #include "ogl_sys/NTransform.h" #include "diagram/ndrag.h" class CVSubproject; class CPalette; class CInteractionController; namespace elem { class CTechDiagram; } namespace NCore { class CComponent; } /** * Подложка на которой по "абсолютным" координатам располагаются компоненты и прочее. "Смотровой люк" (QOpenGLWidget) * елозит по подложке и показывает то, что вместилось. Подложка выдаёт на печать (экран) * векторы объектов */ class CBacking { public: CBacking(); ~CBacking(); // Привязка к диаграмме //void setDiagram(elem::IDiagram* diagram); [[nodiscard]] elem::IDiagram* diagram() const; void setInteractionController(CInteractionController* controller); // Данные для отрисовки [[nodiscard]] const std::vector<const elem::IDiagramObject*>& getVisibleObjects() ; [[nodiscard]] const std::vector<elem::STextElement>& getVisibleTextElements() const; [[nodiscard]] const std::vector<elem::IConnectingLine*> getVisibleConnections() ; const NDrag * draggingObjects(); // Геометрия вида void setViewportRect(const ngraph::NRectF& viewport); [[nodiscard]] ngraph::NRectF getViewportRect() const; void setViewTransform(const ngraph::NTransform& transform); [[nodiscard]] const ngraph::NTransform & getViewTransform(); // Сетка void setGridEnabled(bool enabled); [[nodiscard]] bool isGridEnabled() const; // Подсветка [[nodiscard]] const std::vector<std::pair<ngraph::NRectF, ngraph::NColor>>& getHighlightData() const; void setHighlightData(const std::vector<std::pair<ngraph::NRectF, ngraph::NColor>>& highlightData); // Навигация void setZoom(double zoom) { m_zoom = std::clamp(zoom, 0.1, 10.0); updateViewTransform(); updateVisibleData(); } [[nodiscard]] double zoom() const { return m_zoom; } void setPanOffset(const ngraph::NPointF& offset); [[nodiscard]] ngraph::NPointF panOffset() const { return m_panOffset; } void zoomToRect(const ngraph::NRectF& rect); // Приблизить к области void fitToView(); // Вписать всю диаграмму в вид void updateViewTransform(); // Обновление видимых данных void updateVisibleData(); // Панорамирование через скроллбары void setHorizontalScroll(int position, int maxValue); void setVerticalScroll(int position, int maxValue); // Получить текущие позиции скроллбаров [[nodiscard]] int horizontalScrollPosition() const; [[nodiscard]] int verticalScrollPosition() const; [[nodiscard]] int horizontalScrollMaximum() const; [[nodiscard]] int verticalScrollMaximum() const; template<typename F> void setCameraCallback(F&& callback) { m_cameraCallback = std::forward<F>(callback); } void setSizeCallback(std::function<void(ngraph::NSizeF)> callback) { m_sizeCallback = std::move(callback); } private: std::function<void(ngraph::NSizeF)> m_sizeCallback; std::function<void(ngraph::NPointF)> m_cameraCallback; elem::IDiagram* m_diagram; CInteractionController *m_controller{nullptr}; ngraph::NRectF m_viewportRect; ngraph::NTransform m_viewTransform; bool m_gridEnabled{true}; NDrag *m_drag{nullptr}; double m_zoom{1.0}; ngraph::NPointF m_panOffset{0, 0}; std::vector<const elem::IDiagramObject*> m_visibleObjects; std::vector<elem::STextElement> m_visibleTextElements; std::vector<std::pair<ngraph::NRectF, ngraph::NColor>> m_highlightData; bool isObjectVisible(const elem::IDiagramObject* obj) const; bool isTextVisible(const elem::STextElement &text) const; void updateScrollRanges(); // Обновить диапазоны скроллбаров }; #endif //NYM_PROJECT_CBACKING_H