MeVisLabToolboxReference
MeVisLab/Standard/Sources/Inventor/SoCSO/SoView2DCSOEditor/SoView2DCSOExtensibleEditor/SoCSOVisualizationSettings.h
Go to the documentation of this file.
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