MeVisLabToolboxReference
|
00001 // **InsertLicense** code 00002 //---------------------------------------------------------------------------------- 00005 00010 //---------------------------------------------------------------------------------- 00011 00012 00013 #ifndef __SoCSOEditorExtension_H 00014 #define __SoCSOEditorExtension_H 00015 00016 #include <SoCSOSystem.h> 00017 00018 #include "SoCSOVisualizationSettings.h" 00019 00020 #include <Inventor/nodes/SoNode.h> 00021 #include <Inventor/sensors/SoFieldSensor.h> 00022 00023 #include <View2DPosition.h> 00024 #include <SoView2D.h> 00025 #include <SoViewerProxy.h> 00026 00027 00029 00030 class SoView2DCSOExtensibleEditor; 00031 00034 class SOCSO_EXPORT SoCSOEditorExtension : public SoNode 00035 { 00036 SO_NODE_HEADER(SoCSOEditorExtension); 00037 00038 protected: 00040 SoCSOEditorExtension(); 00042 ~SoCSOEditorExtension(); 00043 00044 public: 00045 00047 void setExtensibleEditor(SoView2DCSOExtensibleEditor* extensibleEditor) { _editor = extensibleEditor; } 00048 00050 virtual void startDrawing(View2DSliceList* ) {} 00051 00053 virtual void draw(const CSODrawCSOInfos& csoInfos, const CSODrawView2DInfos& view2DInfos, const CSODrawSliceInformation& sliceInfo, SoView2DCSOExtensibleEditor* editor); 00054 00056 static void initClass(); 00057 00058 virtual void createStartPressAt(const SoPointerPosition& pos) = 0; 00059 virtual void createDragMoveTo(const SoPointerPosition& pos) = 0; 00060 // returns whether to continue with this action 00061 virtual bool createEndPress(int clickCount) = 0; 00062 00063 virtual void selectAndMoveStartPressAt(const SoPointerPosition& pos) = 0; 00064 virtual void selectAndMoveDragMoveTo(const SoPointerPosition& pos) = 0; 00065 virtual SoPointingAction* selectAndMoveEndPress(int clickCount) = 0; 00066 00067 virtual void insertSeedPointStartPressAt(const SoPointerPosition& ) {} 00068 virtual void insertSeedPointDragMoveTo(const SoPointerPosition& ) {} 00069 virtual SoPointingAction* insertSeedPointEndPress(int ) { return NULL; } 00070 00072 virtual void pointerPosition(const SoPointerPosition& ) {} 00074 virtual void pointerLeftWindow() {} 00075 00077 virtual bool isCreationAllowed() const { return allowCreation.getValue() == 1; } 00079 virtual bool isModificationAllowed() const { return allowModification.getValue() == 1; } 00081 virtual bool shouldRenderCSOs() const { return shouldRender.getValue(); } 00083 virtual bool canCreateCSOs() const { return false; } 00084 00085 SbString getCreatorExtensionId() const { return extensionId.getValue(); } 00086 void setActiveCSOList(ml::CSOList* hitCSOList); 00087 void setSelectAndMoveInformation(ml::CSOList* hitCSOList, ml::CSO* hitCSO, ml::CSOSeedPoint* hitSeedPoint, 00088 ml::CSOPathPoints* hitPathPoints, float hitDistance); 00089 void setCSOUnderMouse(ml::CSO* cso) { _csoUnderMouse = cso; } 00090 00092 virtual SbString getSubType() const { return _subType; } 00094 virtual bool shouldRenderSpecific(ml::CSO* cso) const; 00097 virtual bool shouldRenderGeneral(ml::CSO*) const { return false; } 00099 virtual bool isDefaultRenderer() const { return false; } 00100 00102 virtual void resetCache() {} 00103 00105 virtual void cancel() {} 00107 virtual int cursorShape() const { return SoViewerProxy::CROSS_CURSOR; } 00109 virtual bool deleteSeedPoint(ml::CSO* cso, ml::CSOSeedPoint* ); 00112 ml::CSOSeedPoint* getPreviousSeedPoint(ml::CSOSeedPoint* seedPoint) const; 00113 00115 SoSFString extensionId; 00117 SoSFBool allowCreation; 00119 SoSFBool allowModification; 00121 SoSFBool allowSeedPointInteraction; 00123 SoSFBool shouldRender; 00126 SoSFMLBase inVisualizationSettings; 00127 00130 virtual bool evaluateHitPoint(const ml::Vector3& worldPosition, View2DSliceList* slicelist, ml::CSOList* csoList, 00131 const ml::CSOBoundingBox& slabBB, SoView2DCSOExtensibleEditor* editor, 00132 ml::CSO*& localHitCSO, ml::CSOSeedPoint*& localHitSeedPoint, 00133 ml::CSOPathPoints*& localHitPathPoints, float& distance); 00134 00135 00136 protected: 00137 00138 SoView2DCSOExtensibleEditor* _editor; 00139 00141 ml::CSOList* _hitCSOList; 00142 ml::CSO* _hitCSO; 00143 ml::CSOSeedPoint* _hitSeedPoint; 00144 ml::CSOPathPoints* _hitPathPoints; 00145 float _hitDistance; 00146 ml::CSO* _csoUnderMouse; 00147 00149 void sendCSONotificationRepaint(); 00151 void sendCSONotificationMove(); 00153 void sendCSONotificationFinishInteraction(); 00155 void sendCSONotificationResetInteractionState(); 00157 void sendCSONotificationInsertSeedPoint(); 00159 void sendCSONotificationNewCSOStarted(); 00160 00164 void setExtensionIdAsSubType() { _subType = extensionId.getValue().getString(); } 00165 00167 virtual void setCreationData(const SoPointerPosition& pos, ml::CSO* newCSO); 00168 00169 SoFieldSensor* _extensionIdSensor; 00170 static void extensionIdCB(void* data, SoDataSensor* ); 00171 00174 ml::CSOVisualizationSettings* getVisualizationSettings(); 00175 00177 ml::CSOVisualizationSettings _visualizationSettings; 00178 00183 SbString _subType; 00184 00186 void drawPathPoints(const CSODrawCSOInfos& csoInfos, const CSODrawView2DInfos& view2DInfos, const CSODrawSliceInformation& drawSliceInfo, const SbVec2f& shadowOffsetDevice, SoView2DCSOExtensibleEditor* editor); 00188 void renderPathPoints(const CSOPathPointsRenderSettings& renderSettings, const CSODrawCSOInfos& csoInfos, const CSODrawView2DInfos& view2DInfos, const std::vector<CSOSliceCrossing>& pathPointsLists); 00189 00191 void drawPathAndCrossingPoints(const CSODrawCSOInfos& csoInfos, const CSODrawView2DInfos& view2DInfos, const SbVec2f& shadowOffsetDevice, const std::vector<CSOSliceCrossing>& pathAndCrossingPoints); 00192 00194 void drawSeedPoints(const CSODrawCSOInfos& csoInfos, const CSODrawView2DInfos& view2DInfos, const CSODrawSliceInformation& drawSliceInfo, SoView2DCSOExtensibleEditor* editor); 00195 00197 void drawFixedSizeCircleAt(float deviceX, float deviceY); 00198 00200 void glVertex2fForVector3(const CSODrawView2DInfos& view2DInfos, const ml::Vector3& position, const SbVec2f& deviceOffset); 00203 void mapWorldToDeviceViaVoxel(const CSODrawView2DInfos& view2DInfos, const ml::Vector3& position, float& deviceX, float& deviceY); 00204 00207 ml::Vector3 getTransformedPosition(const CSODrawView2DInfos& view2DInfos, const ml::Vector3& position); 00208 00210 void mapWorldToDevice(const SoPointerPosition& pos, const ml::Vector3& worldPosition, float& deviceX, float& deviceY); 00212 ml::Vector3 mapDeviceToWorld(const SoPointerPosition& pos, float deviceX, float deviceY); 00214 ml::Vector3 mapWorldToVoxel(const SoPointerPosition& pos, const ml::Vector3& worldPosition); 00216 ml::Vector3 mapVoxelToWorld(const SoPointerPosition& pos, const ml::Vector3& voxelPosition); 00217 00219 SbVec2f nonShadowOffset() const { return SbVec2f(0,0); } 00221 SbVec2f shadowOffset() const { return SbVec2f(1,1); } 00222 00224 void setupGLForCSO(const CSODrawCSOInfos& csoInfos); 00226 void setupGLAntiAlias(); 00228 void restoreGLAntiAlias(); 00230 void setupGLShadow(float generalAlpha=1.0f); 00232 void glSetAlpha(float alpha); 00234 float getDepthAlpha(int maxSliceDistance, int currentSliceDistance) const; 00235 }; 00236 00238 00239 #endif // __SoCSOEditorExtension_H