|
Katana Plug-in APIs 0.1
|
00001 00002 // Copyright (c) 2017 The Foundry Visionmongers Ltd. All Rights Reserved. 00003 00004 #ifndef GLMANIPULATOR_H_ 00005 #define GLMANIPULATOR_H_ 00006 00007 #include <FnViewer/plugin/FnManipulator.h> 00008 #include <FnViewer/plugin/FnManipulatorHandle.h> 00009 #include <FnViewer/plugin/FnMathTypes.h> 00010 #include <FnViewer/plugin/FnEventWrapper.h> 00011 #include <FnViewer/utils/FnGLShaderProgram.h> 00012 00013 #include <stdint.h> 00014 #include <string> 00015 00016 namespace Foundry 00017 { 00018 namespace Katana 00019 { 00020 namespace ViewerUtils 00021 { 00022 00024 enum RenderMode 00025 { 00026 kPicking = 0, 00027 kShadingFlat = 1, 00028 kShading3D = 2, 00029 kLineStipple = 3, 00030 kTextured = 4, 00031 }; 00032 00033 // A lot of entities from the ViewerAPI namespace will be accessed. 00034 using namespace Foundry::Katana::ViewerAPI; 00035 00047 class GLManipulator : public Manipulator 00048 { 00049 public: 00050 00052 GLManipulator(); 00053 00055 virtual ~GLManipulator(); 00056 00063 static const std::string kTechnology; 00064 }; 00065 00079 class GLManipulatorHandle : public ManipulatorHandle 00080 { 00081 public: 00082 00084 GLManipulatorHandle(); 00085 00087 virtual ~GLManipulatorHandle(); 00088 00095 virtual void cancelManipulation(); 00096 00107 virtual void draw(); 00108 00123 virtual void pickerDraw(int64_t pickerID); 00124 00134 virtual bool event(const FnEventWrapper& eventData); 00135 00141 virtual FnAttribute::Attribute getOption( 00142 Foundry::Katana::ViewerAPI::OptionIdGenerator::value_type); 00143 00144 protected: 00146 GLManipulator* getGLManipulator(); 00147 00149 ViewportWrapperPtr getViewport(); 00150 00152 ViewerDelegateWrapperPtr getViewerDelegate(); 00153 00155 bool isDragging(); 00156 00158 bool hasBeenDragged(); 00159 00167 virtual bool getDraggingPlane(Vec3d& origin, Vec3d& normal); 00168 00178 virtual void startDrag(const Vec3d& initialPointOnPlane, 00179 const Vec2i& initialMousePosition); 00180 00199 virtual void drag(const Vec3d& initialPointOnPlane, 00200 const Vec3d& previousPointOnPlane, 00201 const Vec3d& currentPointOnPlane, 00202 const Vec2i& initialMousePosition, 00203 const Vec2i& previousMousePosition, 00204 const Vec2i& currentMousePosition, 00205 bool isFinal); 00206 00212 virtual void endDrag(); 00213 00222 virtual bool canProcessKeyboardModifiers(int modifiers) const 00223 { 00224 return modifiers == FnEventWrapper::kNoModifier; 00225 } 00226 00228 void useDrawingShader(const Matrix44d& xform, const Vec4f& color, 00229 bool isFlat); 00230 00231 void useSnappingShader(const Matrix44d& xform); 00232 00239 void useLineStippleDrawingShader(const Matrix44d& xform, 00240 const Vec4f& color, int pattern, 00241 float factor); 00242 00244 void usePickingShader(const Matrix44d& xform, int handleId, 00245 int handlePriority); 00246 00249 int getLatestKeyboardModifiers() const 00250 { 00251 return m_latestKeyboardModifiers; 00252 } 00253 00256 const Vec2i& getLatestMousePosition() const 00257 { 00258 return m_latestMousePosition; 00259 } 00260 00261 const Matrix44d& getInitialHandleXform() const { 00262 return m_initialHandleXform; 00263 } 00264 const Vec3d& getInitialPointOnPlane() const { 00265 return m_initialPointOnPlane; 00266 } 00267 const Vec3d& getLastPointOnPlane() const { 00268 return m_previousPointOnPlane; 00269 } 00270 const Vec2i& getInitialMousePosition() const { 00271 return m_initialMousePosition; 00272 } 00273 const Vec2i& getLastMousePosition() const { 00274 return m_previousMousePosition; 00275 } 00276 00277 private: 00279 static void useShader(ViewportWrapperPtr viewport, const Matrix44d& xform, 00280 RenderMode renderMode, 00281 GLShaderProgram& shaderProgram); 00282 00285 bool m_processingManipulation; 00286 00288 Matrix44d m_localXform; 00289 00291 GLShaderProgram m_shaderProgram; 00292 GLShaderProgram m_shaderProgramLineStipple; 00293 00295 Vec2i m_latestMousePosition; 00296 00298 int m_latestKeyboardModifiers; 00299 00301 Matrix44d m_initialHandleXform; 00302 00304 Vec3d m_initialPointOnPlane; 00305 Vec3d m_previousPointOnPlane; 00306 00308 Vec2i m_initialMousePosition; 00309 Vec2i m_previousMousePosition; 00310 00312 bool m_isDragging; 00313 00315 bool m_hasBeenDragged; 00316 }; 00317 00318 00319 } 00320 } 00321 } 00322 00323 #endif /* GLMANIPULATOR_H_ */
1.7.3