MeVisLabToolboxReference
|
00001 // **InsertLicense** code 00002 //---------------------------------------------------------------------------------- 00004 00009 //---------------------------------------------------------------------------------- 00010 00011 #ifndef __SoView2DCSOEditorTools_H 00012 #define __SoView2DCSOEditorTools_H 00013 00014 #include <CSOBase/CSOBoundingBox.h> 00015 #include <mlLinearAlgebra.h> 00016 #include <SoCSODefines.h> 00017 00018 class View2DSliceList; 00019 class SoCSOTransform; 00020 class SoView2DCSOExtensibleEditor; 00021 00022 namespace ml { 00023 class CSO; 00024 } 00025 00026 namespace SoCSOEditorTools 00027 { 00028 enum RelativeSlicePosition 00029 { 00030 SLICE_BELOW = 0, 00031 SLICE_IN = 1, 00032 SLICE_ABOVE = 2 00033 }; 00034 00035 struct PathPointSlicePosition 00036 { 00037 ml::Vector3 position; 00038 RelativeSlicePosition slicePosition; 00039 }; 00040 00042 ml::CSOBoundingBox computeSlabBoundingBox(float deviceX, float deviceY, View2DSliceList* slicelist); 00044 ml::CSOBoundingBox computeSlabBoundingBox(int voxelZ, View2DSliceList* slicelist); 00046 bool isOnCurrentSlice(ml::CSO* cso, const CSODrawView2DInfos& view2DInfos); 00048 bool isOnCurrentSlice(ml::CSO* cso, View2DSliceList* slicelist, const ml::Vector3& sliceNormalWorld, SoCSOTransform* csoTransform); 00050 bool isApproximatelyParallel(ml::CSO*cso, View2DSliceList* slicelist, float epsilon=-1); 00053 void fillWorldSliceCrossings(const CSODrawCSOInfos& csoInfos, const CSODrawView2DInfos& view2DInfos, 00054 std::vector<CSOSliceCrossing>& belowSlicePositions, 00055 std::vector<CSOSliceCrossing>& inSlicePositions, 00056 std::vector<CSOSliceCrossing>& aboveSlicePositions); 00059 void getWorldSlicePlanes(const CSODrawView2DInfos& view2DInfos, ml::Plane& topPlane, ml::Plane& bottomPlane); 00060 00062 void fillCrossingsOnePlaneCrossed(const ml::Plane& plane, const ml::Vector3& lastPosition, const ml::Vector3& currentPosition, 00063 CSOSliceCrossing& sliceCrossings, std::vector<CSOSliceCrossing>* crossings[3], 00064 int lastSlicePosition); 00066 void fillCrossingsBothPlanesCrossed(const ml::Plane& topPlane, const ml::Plane& bottomPlane, 00067 const ml::Vector3& lastPosition, const ml::Vector3& currentPosition, int relativePosition, 00068 CSOSliceCrossing &sliceCrossings, std::vector<CSOSliceCrossing>* crossings[3]); 00070 void fillWorldToVoxelMatrix(const CSODrawView2DInfos& view2DInfos, ml::Matrix4& worldToVoxelMatrix); 00072 void fillWorldToVoxelMatrix(const SbMatrix& inventorMatrix, ml::Matrix4& worldToVoxelMatrix); 00074 void fillVoxelToWorldMatrix(const CSODrawView2DInfos& view2DInfos, ml::Matrix4& voxelToWorldMatrix); 00076 bool isAbovePlane(const ml::Vector3& worldPosition, const ml::Plane& plane); 00078 bool evaluateHitPoint(const ml::Vector3& worldPosition, View2DSliceList* slicelist, ml::CSOList* csoList, 00079 const ml::CSOBoundingBox& slabBB, const std::string& subType, SoView2DCSOExtensibleEditor* editor, 00080 bool testSeedPoints, 00081 ml::CSO*& localHitCSO, ml::CSOSeedPoint*& localHitSeedPoint, 00082 ml::CSOPathPoints*& localHitPathPoints, float& distance); 00083 00085 bool isEligibleForPicking(ml::CSO* cso, ml::CSOList* csoList, const std::string& subType, View2DSliceList* slicelist, SoView2DCSOExtensibleEditor* editor); 00087 float getSquaredDeviceDistance(const ml::Vector3& worldPosition, View2DSliceList* slicelist, float dMouseX, float dMouseY); 00089 bool isOnSameSlab(const ml::CSOBoundingBox& slabBB, const ml::CSOBoundingBox& csoBB); 00091 bool areOnSamePlane(ml::CSO* cso1, ml::CSO* cso2, float epsilon=0.00001f); 00093 bool areOnSamePlane(ml::CSO* cso, const ml::Vector3& position, const ml::Vector3& normal, float epsilon=0.00001f); 00094 } 00095 00096 00097 00098 #endif // __SoView2DCSOEditorTools_H