MeVisLabToolboxReference
|
00001 // **InsertLicense** code 00002 //---------------------------------------------------------------------------------- 00004 00009 //---------------------------------------------------------------------------------- 00010 00011 #ifndef __SoCSOVisualizationSettings_H 00012 #define __SoCSOVisualizationSettings_H 00013 00014 #include <SoCSODefines.h> 00015 00017 00018 enum CSOPathPointStyle 00019 { 00020 PATH_POINTS_STYLE_NONE = 0, 00021 PATH_POINTS_STYLE_SOLID = 1, 00022 PATH_POINTS_STYLE_DASHED = 2, 00023 PATH_POINTS_STYLE_DOTTED = 3, 00024 PATH_POINTS_STYLE_SHORT_DASHED = 4 00025 }; 00026 00028 00029 enum CSOSeedPointStyle 00030 { 00031 SEED_POINT_STYLE_NONE = 0, 00032 SEED_POINT_STYLE_RECTANGLE = 1, 00033 SEED_POINT_STYLE_CIRCLE = 2, 00034 SEED_POINT_STYLE_FIXED_SIZE_CIRCLE = 3 00035 }; 00036 00038 00040 enum CSOHighlightMode 00041 { 00042 HIGHLIGHT_MODE_RELATIVE = 0, 00043 HIGHLIGHT_MODE_ABSOLUTE = 1 00044 }; 00045 00047 00048 struct CSOPathPointsRenderSettings 00049 { 00050 SbColor color; 00051 float alpha; 00052 float lineWidth; 00053 bool shouldRenderShadow; 00054 unsigned short stipplePattern; 00055 }; 00056 00058 00059 class SoCSOVisualizationSettings; 00060 00062 00063 ML_START_NAMESPACE 00064 00065 #define addMemberAndAccessMethod(type, name) \ 00066 public:\ 00067 type name() const { return _##name; } \ 00068 private: \ 00069 type _##name; 00070 00071 #define addMemberAndAccessMethodWithCSO(type, name) \ 00072 public:\ 00073 type name() const { return _##name; } \ 00074 type name(CSO* cso) const; \ 00075 private: \ 00076 type _##name; 00077 00079 00080 class CSOVisualizationSettings : public Base 00081 { 00082 public: 00084 CSOVisualizationSettings(); 00085 00086 // Smart access methods. They regard the various modes and settings in the network. 00087 void getPathPointsOnSliceColor(CSO* cso, SbColor& color, float& alpha, bool isMouseOver=false) const; 00088 unsigned short getPathPointsOnSliceStipplePattern(CSO* cso) const; 00089 unsigned short getPathPointsOnSliceStipplePattern() const; 00090 float getPathPointsOnSliceLineWidth(CSO* cso, bool isMouseOver=false) const; 00091 void getSeedPointOnSliceColor(CSO* cso, CSOSeedPoint* seedPoint, SbColor& color, float& alpha, bool isMouseOver=false) const; 00092 float getSeedPointOnSliceSize (CSO* cso, CSOSeedPoint* seedPoint, bool isMouseOver=false) const; 00093 00094 void getPathPointsBelowSliceColor(CSO* cso, SbColor& color, float& alpha, bool isMouseOver=false) const; 00095 unsigned short getPathPointsBelowSliceStipplePattern(CSO* cso) const; 00096 unsigned short getPathPointsBelowSliceStipplePattern() const; 00097 float getPathPointsBelowSliceLineWidth(CSO* cso, bool isMouseOver=false) const; 00098 void getSeedPointBelowSliceColor(CSO* cso, CSOSeedPoint* seedPoint, SbColor& color, float& alpha, bool isMouseOver=false) const; 00099 float getSeedPointBelowSliceSize (CSO* cso, CSOSeedPoint* seedPoint, bool isMouseOver=false) const; 00100 00101 void getPathPointsAboveSliceColor(CSO* cso, SbColor& color, float& alpha, bool isMouseOver=false) const; 00102 unsigned short getPathPointsAboveSliceStipplePattern(CSO* cso) const; 00103 unsigned short getPathPointsAboveSliceStipplePattern() const; 00104 float getPathPointsAboveSliceLineWidth(CSO* cso, bool isMouseOver=false) const; 00105 void getSeedPointAboveSliceColor(CSO* cso, CSOSeedPoint* seedPoint, SbColor& color, float& alpha, bool isMouseOver=false) const; 00106 float getSeedPointAboveSliceSize (CSO* cso, CSOSeedPoint* seedPoint, bool isMouseOver=false) const; 00107 00108 // global settings 00109 addMemberAndAccessMethod(bool, shouldUseAntiAliasing); 00110 addMemberAndAccessMethod(float, globalAlphaFactor); 00111 00112 // time points 00113 addMemberAndAccessMethod(bool, showCSOsOnAllTimePoints); 00114 addMemberAndAccessMethod(bool, overwriteCurrentTimePoint); 00115 addMemberAndAccessMethod(int, newCurrentTimePoint); 00116 00117 // parallel to slice 00118 addMemberAndAccessMethod(bool, showOnlyParallelCSOs); 00119 addMemberAndAccessMethod(float, showParallelThickness); 00120 00121 // ghosting 00122 addMemberAndAccessMethod(int, ghostingDepthInVoxel); 00123 00124 // shadow 00125 addMemberAndAccessMethod(bool, shouldRenderShadow); 00126 addMemberAndAccessMethod(SbColor, shadowColor); 00127 addMemberAndAccessMethod(float, shadowLineWidth); 00128 00129 addMemberAndAccessMethod(bool, shouldRenderSeedPoints); 00130 addMemberAndAccessMethod(bool, shouldRenderPathPoints); 00131 00132 // seed points 00133 addMemberAndAccessMethod(bool, shouldOverwriteSeedPointsSettings); 00134 addMemberAndAccessMethod(bool, shouldUsePathPointColorForSeedPoints); 00135 addMemberAndAccessMethod(bool, shouldRenderSeedPointsOnlyForSelectedCSOs); 00136 00137 addMemberAndAccessMethod(bool, useSeedPointBelowSliceStyle); 00138 addMemberAndAccessMethod(bool, useSeedPointBelowSliceSize); 00139 addMemberAndAccessMethod(bool, useSeedPointBelowSliceColor); 00140 addMemberAndAccessMethod(bool, useSeedPointBelowSliceAlpha); 00141 00142 addMemberAndAccessMethod(bool, useSeedPointAboveSliceStyle); 00143 addMemberAndAccessMethod(bool, useSeedPointAboveSliceSize); 00144 addMemberAndAccessMethod(bool, useSeedPointAboveSliceColor); 00145 addMemberAndAccessMethod(bool, useSeedPointAboveSliceAlpha); 00146 00147 // path points 00148 addMemberAndAccessMethod(bool, shouldOverwritePathPointsSettings); 00149 00150 addMemberAndAccessMethod(bool, usePathPointsBelowSliceLineStyle); 00151 addMemberAndAccessMethod(bool, usePathPointsBelowSliceLineWidth); 00152 addMemberAndAccessMethod(bool, usePathPointsBelowSliceColor); 00153 addMemberAndAccessMethod(bool, usePathPointsBelowSliceAlpha); 00154 00155 addMemberAndAccessMethod(bool, usePathPointsAboveSliceLineStyle); 00156 addMemberAndAccessMethod(bool, usePathPointsAboveSliceLineWidth); 00157 addMemberAndAccessMethod(bool, usePathPointsAboveSliceColor); 00158 addMemberAndAccessMethod(bool, usePathPointsAboveSliceAlpha); 00159 00160 addMemberAndAccessMethod(bool, highlightSelectedGroups); 00161 00162 // selection style 00163 addMemberAndAccessMethod(bool, shouldOverwriteSelectionSettings); 00164 00165 // mouse over style 00166 addMemberAndAccessMethod(bool, enableMouseOverHighlighting); 00167 00168 addMemberAndAccessMethod(int, mouseOverPathPointsColorMode); 00169 addMemberAndAccessMethod(int, mouseOverPathPointsLineWidthMode); 00170 addMemberAndAccessMethod(float, mouseOverPathPointsBrightenValue); 00171 addMemberAndAccessMethod(SbColor, mouseOverPathPointsFixedColor); 00172 addMemberAndAccessMethod(float, mouseOverPathPointsWidenValue); 00173 addMemberAndAccessMethod(float, mouseOverPathPointsFixedLineWidth); 00174 00175 addMemberAndAccessMethod(int, mouseOverSeedPointColorMode); 00176 addMemberAndAccessMethod(int, mouseOverSeedPointSizeMode); 00177 addMemberAndAccessMethod(float, mouseOverSeedPointBrightenValue); 00178 addMemberAndAccessMethod(SbColor, mouseOverSeedPointFixedColor); 00179 addMemberAndAccessMethod(float, mouseOverSeedPointEnlargeValue); 00180 addMemberAndAccessMethod(float, mouseOverSeedPointFixedSize); 00181 00182 private: 00183 float _mouseOverPathPointsAlpha; 00184 float _mouseOverSeedPointAlpha; 00185 float _shadowAlpha; 00186 public: 00187 float mouseOverPathPointsAlpha() const { return _mouseOverPathPointsAlpha * _globalAlphaFactor; } 00188 float mouseOverSeedPointAlpha() const { return _mouseOverSeedPointAlpha * _globalAlphaFactor; } 00189 float shadowAlpha() const { return _shadowAlpha * _globalAlphaFactor; } 00190 00192 00193 addMemberAndAccessMethodWithCSO(int, seedPointOnSliceStyle); 00194 addMemberAndAccessMethodWithCSO(float, seedPointOnSliceSize); 00195 addMemberAndAccessMethodWithCSO(SbColor, seedPointOnSliceColor); 00196 addMemberAndAccessMethodWithCSO(float, seedPointOnSliceAlpha); 00197 00198 addMemberAndAccessMethodWithCSO(int, seedPointBelowSliceStyle); 00199 addMemberAndAccessMethodWithCSO(float, seedPointBelowSliceSize); 00200 addMemberAndAccessMethodWithCSO(SbColor, seedPointBelowSliceColor); 00201 addMemberAndAccessMethodWithCSO(float, seedPointBelowSliceAlpha); 00202 00203 addMemberAndAccessMethodWithCSO(int, seedPointAboveSliceStyle); 00204 addMemberAndAccessMethodWithCSO(float, seedPointAboveSliceSize); 00205 addMemberAndAccessMethodWithCSO(SbColor, seedPointAboveSliceColor); 00206 addMemberAndAccessMethodWithCSO(float, seedPointAboveSliceAlpha); 00207 00208 addMemberAndAccessMethodWithCSO(int, pathPointsOnSliceLineStyle); 00209 addMemberAndAccessMethodWithCSO(float, pathPointsOnSliceLineWidth); 00210 addMemberAndAccessMethodWithCSO(SbColor, pathPointsOnSliceColor); 00211 addMemberAndAccessMethodWithCSO(float, pathPointsOnSliceAlpha); 00212 00213 addMemberAndAccessMethodWithCSO(int, pathPointsBelowSliceLineStyle); 00214 addMemberAndAccessMethodWithCSO(float, pathPointsBelowSliceLineWidth); 00215 addMemberAndAccessMethodWithCSO(SbColor, pathPointsBelowSliceColor); 00216 addMemberAndAccessMethodWithCSO(float, pathPointsBelowSliceAlpha); 00217 00218 addMemberAndAccessMethodWithCSO(float, pathPointsAboveSliceLineWidth); 00219 addMemberAndAccessMethodWithCSO(SbColor, pathPointsAboveSliceColor); 00220 addMemberAndAccessMethodWithCSO(float, pathPointsAboveSliceAlpha); 00221 addMemberAndAccessMethodWithCSO(int, pathPointsAboveSliceLineStyle); 00222 00223 addMemberAndAccessMethodWithCSO(int, selectedPathPointsColorMode); 00224 addMemberAndAccessMethodWithCSO(int, selectedPathPointsLineWidthMode); 00225 addMemberAndAccessMethodWithCSO(float, selectedPathPointsBrightenValue); 00226 addMemberAndAccessMethodWithCSO(SbColor, selectedPathPointsFixedColor); 00227 addMemberAndAccessMethodWithCSO(float, selectedPathPointsAlpha); 00228 addMemberAndAccessMethodWithCSO(float, selectedPathPointsWidenValue); 00229 addMemberAndAccessMethodWithCSO(float, selectedPathPointsFixedLineWidth); 00230 00231 addMemberAndAccessMethodWithCSO(int, selectedSeedPointColorMode); 00232 addMemberAndAccessMethodWithCSO(int, selectedSeedPointSizeMode); 00233 addMemberAndAccessMethodWithCSO(float, selectedSeedPointBrightenValue); 00234 addMemberAndAccessMethodWithCSO(SbColor, selectedSeedPointFixedColor); 00235 addMemberAndAccessMethodWithCSO(float, selectedSeedPointAlpha); 00236 addMemberAndAccessMethodWithCSO(float, selectedSeedPointEnlargeValue); 00237 addMemberAndAccessMethodWithCSO(float, selectedSeedPointFixedSize); 00238 00239 private: 00240 00242 bool isSelected(CSO* cso) const { return cso->getCSOList()->isSelected(cso); } 00244 bool isSelected(CSO* cso, CSOSeedPoint* seedPoint) const { return cso->isSelectedSeedPoint(seedPoint); } 00245 00247 SbColor sbColor(const Vector3& color) const { return SbColor(color[0], color[1], color[2]); } 00249 // components' values to [0..1]. 00250 void multiplyColorAndClamp(SbColor& color, float factor) const; 00253 void multiplyValueAndClamp(float& value, float factor, float maxValue=1.0f) const; 00255 void addValueAndClamp(float& value, float factor, float maxValue=8.0f) const; 00257 unsigned short stipplePattern(int enumIndex) const 00258 { 00259 switch (enumIndex) 00260 { 00261 case 0: return LINE_PATTERN_NONE; 00262 case 1: return LINE_PATTERN_SOLID; 00263 case 2: return LINE_PATTERN_DASHED; 00264 case 3: return LINE_PATTERN_DOTTED; 00265 case 4: return LINE_PATTERN_SHORT_DASHED; 00266 default: return LINE_PATTERN_SOLID; 00267 } 00268 } 00269 00271 friend class ::SoCSOVisualizationSettings; 00272 00273 ML_CLASS_HEADER(CSOVisualizationSettings); 00274 }; 00275 00276 #undef addMemberAndAccessMethodWithCSO 00277 #undef addMemberAndAccessMethod 00278 00279 ML_END_NAMESPACE 00280 00282 00283 class SoCSOVisualizationSettings : public SoNode 00284 { 00285 SO_NODE_HEADER(SoCSOVisualizationSettings); 00286 00287 public: 00288 00290 SoCSOVisualizationSettings(); 00291 00293 static void initClass(); 00294 00296 00297 // Output settings 00298 SoSFMLBase outVisualizationSettings; 00299 00300 SoSFBool autoApply; 00301 SoSFTrigger apply; 00302 00303 // global settings 00304 SoSFBool shouldUseAntiAliasing; 00305 SoSFFloat globalAlphaFactor; 00306 00307 // time points 00308 SoSFBool showCSOsOnAllTimePoints; 00309 SoSFBool overwriteCurrentTimePoint; 00310 SoSFInt32 newCurrentTimePoint; 00311 00312 // parallel to slice 00313 SoSFBool showOnlyParallelCSOs; 00314 SoSFFloat showParallelThickness; 00315 00316 // ghosting 00317 SoSFInt32 ghostingDepthInVoxel; 00318 00319 // shadow 00320 SoSFBool shouldRenderShadow; 00321 00322 SoSFColor shadowColor; 00323 SoSFFloat shadowAlpha; 00324 SoSFFloat shadowLineWidth; 00325 00326 SoSFBool shouldRenderSeedPoints; 00327 SoSFBool shouldRenderPathPoints; 00328 00329 // seed points 00330 SoSFBool shouldOverwriteSeedPointsSettings; 00331 SoSFBool shouldUsePathPointColorForSeedPoints; 00332 SoSFBool shouldRenderSeedPointsOnlyForSelectedCSOs; 00333 00334 SoSFEnum seedPointOnSliceStyle; 00335 SoSFFloat seedPointOnSliceSize; 00336 SoSFColor seedPointOnSliceColor; 00337 SoSFFloat seedPointOnSliceAlpha; 00338 00339 SoSFBool useSeedPointBelowSliceStyle; 00340 SoSFBool useSeedPointBelowSliceSize; 00341 SoSFBool useSeedPointBelowSliceColor; 00342 SoSFBool useSeedPointBelowSliceAlpha; 00343 00344 SoSFEnum seedPointBelowSliceStyle; 00345 SoSFFloat seedPointBelowSliceSize; 00346 SoSFColor seedPointBelowSliceColor; 00347 SoSFFloat seedPointBelowSliceAlpha; 00348 00349 SoSFBool useSeedPointAboveSliceStyle; 00350 SoSFBool useSeedPointAboveSliceSize; 00351 SoSFBool useSeedPointAboveSliceColor; 00352 SoSFBool useSeedPointAboveSliceAlpha; 00353 00354 SoSFEnum seedPointAboveSliceStyle; 00355 SoSFFloat seedPointAboveSliceSize; 00356 SoSFColor seedPointAboveSliceColor; 00357 SoSFFloat seedPointAboveSliceAlpha; 00358 00359 // path points 00360 SoSFBool shouldOverwritePathPointsSettings; 00361 00362 SoSFFloat pathPointsOnSliceLineWidth; 00363 SoSFColor pathPointsOnSliceColor; 00364 SoSFFloat pathPointsOnSliceAlpha; 00365 SoSFEnum pathPointsOnSliceLineStyle; 00366 00367 SoSFBool usePathPointsBelowSliceLineWidth; 00368 SoSFBool usePathPointsBelowSliceColor; 00369 SoSFBool usePathPointsBelowSliceAlpha; 00370 SoSFBool usePathPointsBelowSliceLineStyle; 00371 00372 SoSFFloat pathPointsBelowSliceLineWidth; 00373 SoSFColor pathPointsBelowSliceColor; 00374 SoSFFloat pathPointsBelowSliceAlpha; 00375 SoSFEnum pathPointsBelowSliceLineStyle; 00376 00377 SoSFBool usePathPointsAboveSliceLineWidth; 00378 SoSFBool usePathPointsAboveSliceColor; 00379 SoSFBool usePathPointsAboveSliceAlpha; 00380 SoSFBool usePathPointsAboveSliceLineStyle; 00381 00382 SoSFFloat pathPointsAboveSliceLineWidth; 00383 SoSFColor pathPointsAboveSliceColor; 00384 SoSFFloat pathPointsAboveSliceAlpha; 00385 SoSFEnum pathPointsAboveSliceLineStyle; 00386 00387 // selection misc 00388 SoSFBool highlightSelectedGroups; 00389 00390 // selection style 00391 SoSFBool shouldOverwriteSelectionSettings; 00392 00393 SoSFEnum selectedPathPointsColorMode; 00394 SoSFEnum selectedPathPointsLineWidthMode; 00395 SoSFFloat selectedPathPointsBrightenValue; 00396 SoSFColor selectedPathPointsFixedColor; 00397 SoSFFloat selectedPathPointsAlpha; 00398 SoSFFloat selectedPathPointsWidenValue; 00399 SoSFFloat selectedPathPointsFixedLineWidth; 00400 00401 SoSFEnum selectedSeedPointColorMode; 00402 SoSFEnum selectedSeedPointSizeMode; 00403 SoSFFloat selectedSeedPointBrightenValue; 00404 SoSFColor selectedSeedPointFixedColor; 00405 SoSFFloat selectedSeedPointAlpha; 00406 SoSFFloat selectedSeedPointEnlargeValue; 00407 SoSFFloat selectedSeedPointFixedSize; 00408 00409 // mouse over style 00410 SoSFBool enableMouseOverHighlighting; 00411 00412 SoSFEnum mouseOverPathPointsColorMode; 00413 SoSFEnum mouseOverPathPointsLineWidthMode; 00414 SoSFFloat mouseOverPathPointsBrightenValue; 00415 SoSFColor mouseOverPathPointsFixedColor; 00416 SoSFFloat mouseOverPathPointsAlpha; 00417 SoSFFloat mouseOverPathPointsWidenValue; 00418 SoSFFloat mouseOverPathPointsFixedLineWidth; 00419 00420 SoSFEnum mouseOverSeedPointColorMode; 00421 SoSFEnum mouseOverSeedPointSizeMode; 00422 SoSFFloat mouseOverSeedPointBrightenValue; 00423 SoSFColor mouseOverSeedPointFixedColor; 00424 SoSFFloat mouseOverSeedPointAlpha; 00425 SoSFFloat mouseOverSeedPointEnlargeValue; 00426 SoSFFloat mouseOverSeedPointFixedSize; 00428 00429 protected: 00430 00432 ~SoCSOVisualizationSettings(); 00433 00434 private: 00435 00436 SoNodeSensor *_nodeSensor; 00437 static void nodeChangedCB(void *data, SoDataSensor* a); 00438 void nodeChanged(SoDataSensor* sensor); 00439 00440 void setSettingsToFieldValues(); 00441 00442 ml::CSOVisualizationSettings _visualizationSettings; 00443 }; 00444 00446 00447 #endif // __SoCSOVisualizationSettings_H