1 #ifndef COIN_SOEXTSELECTION_H 2 #define COIN_SOEXTSELECTION_H 3 4 /**************************************************************************\ 5 * Copyright (c) Kongsberg Oil & Gas Technologies AS 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions are 10 * met: 11 * 12 * Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the following disclaimer. 14 * 15 * Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * Neither the name of the copyright holder nor the names of its 20 * contributors may be used to endorse or promote products derived from 21 * this software without specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 27 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 29 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34 \**************************************************************************/ 35 36 #include <Inventor/nodes/SoSubNode.h> 37 #include <Inventor/nodes/SoSelection.h> 38 #include <Inventor/fields/SoSFEnum.h> 39 #include <cstddef> // NULL 40 41 #ifndef COIN_INTERNAL 42 #include <Inventor/actions/SoCallbackAction.h> 43 #endif // !COIN_INTERNAL 44 45 class SbColor; 46 class SbVec3f; 47 class SbVec2f; 48 class SbVec2s; 49 class SbViewportRegion; 50 class SoPrimitiveVertex; 51 52 // This shouldn't strictly be necessary, but the OSF1/cxx compiler 53 // complains if this is left out, while using the "friend class 54 // SoExtSelectionP" statement in the class definition. 55 class SoExtSelectionP; 56 57 58 typedef SbBool SoExtSelectionTriangleCB(void * userdata, 59 SoCallbackAction * action, 60 const SoPrimitiveVertex * v1, 61 const SoPrimitiveVertex * v2, 62 const SoPrimitiveVertex * v3); 63 64 typedef SbBool SoExtSelectionLineSegmentCB(void * userdata, 65 SoCallbackAction * action, 66 const SoPrimitiveVertex * v1, 67 const SoPrimitiveVertex * v2); 68 69 typedef SbBool SoExtSelectionPointCB(void * userdata, 70 SoCallbackAction * action, 71 const SoPrimitiveVertex * v1); 72 73 typedef SoPath * SoLassoSelectionFilterCB(void * userdata, const SoPath * path); 74 75 76 class COIN_DLL_API SoExtSelection : public SoSelection { 77 typedef SoSelection inherited; 78 79 SO_NODE_HEADER(SoExtSelection); 80 81 public: 82 static void initClass(void); 83 SoExtSelection(void); 84 85 enum LassoType { 86 NOLASSO, LASSO, RECTANGLE 87 }; 88 89 enum LassoPolicy { 90 FULL_BBOX, PART_BBOX, FULL, PART 91 }; 92 93 enum LassoMode { 94 ALL_SHAPES, 95 VISIBLE_SHAPES 96 }; 97 98 SoSFEnum lassoType; 99 SoSFEnum lassoPolicy; 100 SoSFEnum lassoMode; 101 102 void useOverlay(SbBool overlay = TRUE); 103 SbBool isUsingOverlay(void); 104 SoSeparator * getOverlaySceneGraph(void); 105 void setOverlayLassoColorIndex(const int index); 106 int getOverlayLassoColorIndex(void); 107 void setLassoColor(const SbColor & color); 108 const SbColor & getLassoColor(void); 109 void setLassoWidth(const float width); 110 float getLassoWidth(void); 111 void setOverlayLassoPattern(const unsigned short pattern); 112 unsigned short getOverlayLassoPattern(void); 113 void animateOverlayLasso(const SbBool animate = TRUE); 114 SbBool isOverlayLassoAnimated(void); 115 116 virtual void handleEvent(SoHandleEventAction * action); 117 virtual void GLRenderBelowPath(SoGLRenderAction * action); 118 119 void select(SoNode * root, int numcoords, SbVec2f * lasso, 120 const SbViewportRegion & vp, SbBool shiftpolicy); 121 void select(SoNode * root, int numcoords, SbVec3f * lasso, 122 const SbViewportRegion & vp, SbBool shiftkeypolicy); 123 const SbVec2s * getLassoCoordsDC(int & numCoords); 124 const SbVec3f * getLassoCoordsWC(int & numCoords); 125 const SoPathList & getSelectionPathList() const; 126 127 void setLassoFilterCallback(SoLassoSelectionFilterCB * f, void * userdata = NULL, 128 const SbBool callonlyifselectable = TRUE); 129 130 void setTriangleFilterCallback(SoExtSelectionTriangleCB * func, 131 void * userdata = NULL); 132 void setLineSegmentFilterCallback(SoExtSelectionLineSegmentCB * func, 133 void * userdata = NULL); 134 void setPointFilterCallback(SoExtSelectionPointCB * func, 135 void * userdata = NULL); 136 SbBool wasShiftDown(void) const; 137 138 protected: 139 virtual ~SoExtSelection(); 140 141 private: 142 void draw(SoGLRenderAction * action); 143 144 friend class SoExtSelectionP; 145 class SoExtSelectionP * pimpl; 146 }; 147 148 #endif // !COIN_SOEXTSELECTION_H 149