#pragma once #include #include #include #include #include #include #include #include //#include "../job/FileProcessor.h" #include "BPData.h" using namespace vl; enum RenderMode { RenderMode2D, RenderMode3D }; enum PlatformShape { PS_SQUARE = 0, PS_ROUND, }; class TrackBall; class VLRenderer : public vl::OpenGLContext { friend class TrackBall; public: VLRenderer(); ~VLRenderer(); void makeCurrent() {} void swapBuffers() {} void Init(void); void update(void) { Render(); } unsigned int GetTexture(void) { return mTexture->handle(); } bool UpdateSize(unsigned int w, unsigned int h); void Render(void); void AddActor(vl::ref actor); //void UpdateCurrentLayer(); //void ReloadCurrentLayer(); void InitScene(); void UpdateScene(void); void ClearScene(bool ClearJosb = false); void SetPlatformShape(PlatformShape shape); void SetPlatfromSize(double width, double depth = 100.0, double height = 100.0); void SetCurrentLayer(unsigned int layer); void SetPreviewLayer(unsigned int layer); //void SetJob(FileProcessor * jfp); //FileProcessor* GetJob() { return m_BPData->GetJobFileProcessor(); } void SetRenderMode(RenderMode mode); RenderMode GetRenderMode(void) { return m_RenderMode; } // std::vector* GetParts(void); std::map* GetPartMap(); int PartSelected(void) { return m_PartSelected; } void UpdateGlobalOffset(double offset_x, double offset_y); void ResetCamera(void); //void EnableMove(void); Part* GetSelectedPart(void) { if (!m_BPData) return nullptr; return m_BPData->GetSelectedPart(); } double GetWorldDis(double *p0, double *p1); BPData* GetBPData(void) { return m_BPData; } Part* GetPart(unsigned int index); //void AddPart(MetaData::Part* part); //void DelPart(MetaData::Part* part); //vl::ref VLRenderer::GetVG(void) { return mvg; } public: enum { DATATYPE_UNKNOW = 0, DATATYPE_BP, }; private: const vl::Rendering* rendering() const { return mRendering.get(); } vl::Rendering* rendering() { return mRendering.get(); } const vl::OpenGLContext* openglContext() const { return this; } vl::OpenGLContext* openglContext() { return this; } vl::ref MakePlatform(const vec3& origin, vl::real xside, vl::real yside, int x, int z, bool gen_texcoords = false, fvec2 uv0 = fvec2(0, 0), fvec2 uv1 = fvec2(1, 1), bool center = true); vl::ref MakePlatform(const vec3& origin, vl::real diameter, unsigned int phi); private: BPData* m_BPData; vl::ref mRendering; vl::ref mSceneManager; std::vector > m_framebuffer; vl::ref mTexture; vl::ref mCubeTransform; vl::ref mFBO; vl::ref mFBODB; //vl::ref mvg; int m_Width; int m_Height; int m_PartSelected; RenderMode m_RenderMode; double m_PlatformWidth = 280.0; double m_PlatformDepth = 280.0; double m_PlatformHeight = 280.0; double m_PlatformThickness = 2.0; uint16_t m_GridSize = 10; double m_GlobalOffsetX; double m_GlobalOffsetY; unsigned int m_DataType; std::vector> m_actors; vl::ref trackball; static bool m_IsInit; PlatformShape m_PlatformShape; }; class TrackBall : public TrackballManipulator { public: void mouseDownEvent(EMouseButton btn, int x, int y); void mouseMoveEvent(int x, int y); void mouseWheelEvent(int delta); public: VLRenderer* mVLRenderer; private: int mCurrentX; int mCurrentY; };