00001 #ifndef COIN_SOEXTSELECTION_H
00002 #define COIN_SOEXTSELECTION_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <Inventor/nodes/SoSubNode.h>
00028 #include <Inventor/nodes/SoSelection.h>
00029 #include <Inventor/fields/SoSFEnum.h>
00030 #include <stddef.h>
00031
00032 class SbColor;
00033 class SoPrimitiveVertex;
00034
00035
00036
00037
00038 class SoExtSelectionP;
00039
00040
00041 typedef SbBool SoExtSelectionTriangleCB(void * userdata,
00042 SoCallbackAction * action,
00043 const SoPrimitiveVertex * v1,
00044 const SoPrimitiveVertex * v2,
00045 const SoPrimitiveVertex * v3);
00046
00047 typedef SbBool SoExtSelectionLineSegmentCB(void * userdata,
00048 SoCallbackAction * action,
00049 const SoPrimitiveVertex * v1,
00050 const SoPrimitiveVertex * v2);
00051
00052 typedef SbBool SoExtSelectionPointCB(void * userdata,
00053 SoCallbackAction * action,
00054 const SoPrimitiveVertex * v1);
00055
00056 typedef SoPath * SoLassoSelectionFilterCB(void * userdata, const SoPath * path);
00057
00058
00059 class COIN_DLL_API SoExtSelection : public SoSelection {
00060 typedef SoSelection inherited;
00061
00062 SO_NODE_HEADER(SoExtSelection);
00063
00064 public:
00065 static void initClass(void);
00066 SoExtSelection(void);
00067
00068 enum LassoType {
00069 NOLASSO, LASSO, RECTANGLE
00070 };
00071
00072 enum LassoPolicy {
00073 FULL_BBOX, PART_BBOX, FULL, PART
00074 };
00075
00076 enum LassoMode {
00077 ALL_SHAPES,
00078 VISIBLE_SHAPES
00079 };
00080
00081 SoSFEnum lassoType;
00082 SoSFEnum lassoPolicy;
00083 SoSFEnum lassoMode;
00084
00085 void useOverlay(SbBool overlay = TRUE);
00086 SbBool isUsingOverlay(void);
00087 SoSeparator * getOverlaySceneGraph(void);
00088 void setOverlayLassoColorIndex(const int index);
00089 int getOverlayLassoColorIndex(void);
00090 void setLassoColor(const SbColor & color);
00091 const SbColor & getLassoColor(void);
00092 void setLassoWidth(const float width);
00093 float getLassoWidth(void);
00094 void setOverlayLassoPattern(const unsigned short pattern);
00095 unsigned short getOverlayLassoPattern(void);
00096 void animateOverlayLasso(const SbBool animate = TRUE);
00097 SbBool isOverlayLassoAnimated(void);
00098
00099 virtual void handleEvent(SoHandleEventAction * action);
00100 virtual void GLRenderBelowPath(SoGLRenderAction * action);
00101
00102 void setLassoFilterCallback(SoLassoSelectionFilterCB * f, void * userdata = NULL,
00103 const SbBool callonlyifselectable = TRUE);
00104
00105 void setTriangleFilterCallback(SoExtSelectionTriangleCB * func,
00106 void * userdata = NULL);
00107 void setLineSegmentFilterCallback(SoExtSelectionLineSegmentCB * func,
00108 void * userdata = NULL);
00109 void setPointFilterCallback(SoExtSelectionPointCB * func,
00110 void * userdata = NULL);
00111 SbBool wasShiftDown(void) const;
00112
00113 protected:
00114 virtual ~SoExtSelection();
00115
00116 private:
00117 void draw(SoGLRenderAction * action);
00118
00119 friend class SoExtSelectionP;
00120 class SoExtSelectionP * pimpl;
00121 };
00122
00123 #endif // !COIN_SOEXTSELECTION_H