Open Inventor Release 2024.2.1
 
Loading...
Searching...
No Matches
SoCenterballDragger.h
1/*=======================================================================
2 * Copyright 1991-1996, Silicon Graphics, Inc.
3 * ALL RIGHTS RESERVED
4 *
5 * UNPUBLISHED -- Rights reserved under the copyright laws of the United
6 * States. Use of a copyright notice is precautionary only and does not
7 * imply publication or disclosure.
8 *
9 * U.S. GOVERNMENT RESTRICTED RIGHTS LEGEND:
10 * Use, duplication or disclosure by the Government is subject to restrictions
11 * as set forth in FAR 52.227.19(c)(2) or subparagraph (c)(1)(ii) of the Rights
12 * in Technical Data and Computer Software clause at DFARS 252.227-7013 and/or
13 * in similar or successor clauses in the FAR, or the DOD or NASA FAR
14 * Supplement. Contractor/manufacturer is Silicon Graphics, Inc.,
15 * 2011 N. Shoreline Blvd. Mountain View, CA 94039-7311.
16 *
17 * THE CONTENT OF THIS WORK CONTAINS CONFIDENTIAL AND PROPRIETARY
18 * INFORMATION OF SILICON GRAPHICS, INC. ANY DUPLICATION, MODIFICATION,
19 * DISTRIBUTION, OR DISCLOSURE IN ANY FORM, IN WHOLE, OR IN PART, IS STRICTLY
20 * PROHIBITED WITHOUT THE PRIOR EXPRESS WRITTEN PERMISSION OF SILICON
21 * GRAPHICS, INC.
22**=======================================================================*/
23/*=======================================================================
24** Author : Paul Isaacs (MMM yyyy)
25** Modified by : Howard Look (MMM yyyy)
26**=======================================================================*/
27/*=======================================================================
28 *** THE CONTENT OF THIS WORK IS PROPRIETARY TO FEI S.A.S, (FEI S.A.S.), ***
29 *** AND IS DISTRIBUTED UNDER A LICENSE AGREEMENT. ***
30 *** ***
31 *** REPRODUCTION, DISCLOSURE, OR USE, IN WHOLE OR IN PART, OTHER THAN AS ***
32 *** SPECIFIED IN THE LICENSE ARE NOT TO BE UNDERTAKEN EXCEPT WITH PRIOR ***
33 *** WRITTEN AUTHORIZATION OF FEI S.A.S. ***
34 *** ***
35 *** RESTRICTED RIGHTS LEGEND ***
36 *** USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT OF THE CONTENT OF THIS ***
37 *** WORK OR RELATED DOCUMENTATION IS SUBJECT TO RESTRICTIONS AS SET FORTH IN ***
38 *** SUBPARAGRAPH (C)(1) OF THE COMMERCIAL COMPUTER SOFTWARE RESTRICTED RIGHT ***
39 *** CLAUSE AT FAR 52.227-19 OR SUBPARAGRAPH (C)(1)(II) OF THE RIGHTS IN ***
40 *** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 52.227-7013. ***
41 *** ***
42 *** COPYRIGHT (C) 1996-2020 BY FEI S.A.S, ***
43 *** BORDEAUX, FRANCE ***
44 *** ALL RIGHTS RESERVED ***
45**=======================================================================*/
46/*=======================================================================
47** Modified by : VSG (MMM YYYY)
48**=======================================================================*/
49
50
51#ifndef _SO_CENTERBALL_DRAGGER_
52#define _SO_CENTERBALL_DRAGGER_
53
54#include <Inventor/SbLinear.h>
55#include <Inventor/sensors/SoSensor.h>
56#include <Inventor/draggers/SoDragger.h>
57#include <Inventor/fields/SoSFVec3f.h>
58#include <Inventor/fields/SoSFRotation.h>
59
60class SoFieldSensor;
61class SoInput;
64
66//
67// Class: SoCenterballDragger
68//
69// CenterballDragger - allows user to rotate objects.
70//
72
338
339 SO_KIT_HEADER(SoCenterballDragger);
340
341 // For making the dragger surround what lies above it.
342 SO_KIT_CATALOG_ENTRY_HEADER(surroundScale);
343 // For keeping the dragger even size in all 3 directions
344 SO_KIT_CATALOG_ENTRY_HEADER(antiSquish);
345
346 // Translates whole dragger to location of center.
347 SO_KIT_CATALOG_ENTRY_HEADER(translateToCenter);
348
349 SO_KIT_CATALOG_ENTRY_HEADER(lightModel);
350
351 SO_KIT_CATALOG_ENTRY_HEADER(rotator);
352
353 SO_KIT_CATALOG_ENTRY_HEADER(YRotator);
354 SO_KIT_CATALOG_ENTRY_HEADER(ZCenterChanger);
355 SO_KIT_CATALOG_ENTRY_HEADER(ZAxisSwitch);
356 SO_KIT_CATALOG_ENTRY_HEADER(ZAxis);
357
358 SO_KIT_CATALOG_ENTRY_HEADER(rotX90);
359
360 SO_KIT_CATALOG_ENTRY_HEADER(ZRotator);
361 SO_KIT_CATALOG_ENTRY_HEADER(YCenterChanger);
362 SO_KIT_CATALOG_ENTRY_HEADER(YAxisSwitch);
363 SO_KIT_CATALOG_ENTRY_HEADER(YAxis);
364
365 SO_KIT_CATALOG_ENTRY_HEADER(rotY90);
366
367 SO_KIT_CATALOG_ENTRY_HEADER(XRotator);
368
369 SO_KIT_CATALOG_ENTRY_HEADER(rot2X90);
370
371 SO_KIT_CATALOG_ENTRY_HEADER(XCenterChanger);
372 SO_KIT_CATALOG_ENTRY_HEADER(XAxisSwitch);
373 SO_KIT_CATALOG_ENTRY_HEADER(XAxis);
374
375 public:
380
391
392 private:
393 // Saves the matrix that moves the center relative to the motionMatrix
394 // after it calls the default SoDragger method.
395 virtual void saveStartParameters();
396
397 private:
398 static void initClass(); // initialize the class
399 static void exitClass();
400
401 private:
402
403 SoFieldSensor *rotFieldSensor;
404 SoFieldSensor *centerFieldSensor;
405 static void fieldSensorCB( void *, SoSensor *);
406 static void valueChangedCB( void *, SoDragger *);
407
408 void transferCenterDraggerMotion(SoDragger *childDragger);
409
410 // Differs from SoDragger as follows: If it has a surroundScale node with
411 // 'ignoreInBbox' set to TRUE, this means surroundScale is calculating its
412 // bbox for sizing. So we also need to ignore the 'translateToCenter'
413 // matrix. Take care of this by disabling notification of
414 // 'translateToCenter', changing it to identity, running action,
415 // and then putting everything back.
416 virtual void getBoundingBox(SoGetBoundingBoxAction *action);
417 virtual void getMatrix(SoGetMatrixAction *action);
418
419 static void kidStartCB( void *, SoDragger * );
420 static void kidFinishCB( void *, SoDragger * );
421
422 void setSwitches( SoDragger *activeChild );
423
424 // detach/attach any sensors, callbacks, and/or field connections.
425 // Also set geometry of childDraggers to be our default instead of their
426 // regular default, using our resources.
427 // Called by: start/end of SoBaseKit::readInstance
428 // and on new copy by: start/end of SoBaseKit::copy.
429 // Classes that redefine must call setUpConnections(TRUE,TRUE)
430 // at end of constructor.
431 // Returns the state of the node when this was called.
432 virtual SbBool setUpConnections( SbBool onOff, SbBool doItAlways = FALSE );
433
434 virtual void setDefaultOnNonWritingFields();
435
437
438 private:
439 // Used by centerball to save initial matrix of the 'translateToCenter'
440 // part when the child begins to move.
441 SbMatrix startCenterMatrix;
442
443 // character string from which the shared geometry is read
444 static const char geomBuffer[];
445};
446
447#endif /* _SO_CENTERBALL_DRAGGER_ */
448
4x4 matrix class.
Definition SbMatrix.h:309
Striped ball you rotate and re-center by dragging with the mouse.
SoSFRotation rotation
Orientation of the centerball dragger.
SoCenterballDragger()
Constructor.
SoSFVec3f center
Center of rotation and scale of the centerball dragger.
Base class for nodekits that move in response to click-drag-release mouse events.
Definition SoDragger.h:537
Sensor class that can be attached to Open Inventor fields.
Computes bounding box of a scene.
Computes transformation matrix for a subgraph.
Used to read Open Inventor data files.
Definition SoInput.h:363
Field containing a rotation.
Field containing a three-dimensional vector.
Definition SoSFVec3f.h:80
Abstract base class for Open Inventor sensors.
Definition SoSensor.h:100
int SbBool
Boolean type.
Definition SbBase.h:87