/*========================================================================= Program: Visualization Toolkit Module: vtkAvatar.h Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ /** * @class vtkAvatar * @brief Renders head and hands for a user in VR * * Set position and orientation for the head and two hands, * shows an observer where the avatar is looking and pointing. */ #ifndef vtkAvatar_h #define vtkAvatar_h #include "vtkActor.h" #include "vtkRenderingCoreModule.h" // For export macro class VTKRENDERINGCORE_EXPORT vtkAvatar : public vtkActor { public: static vtkAvatar* New(); vtkTypeMacro(vtkAvatar, vtkActor); void PrintSelf(ostream& os, vtkIndent indent) override; /** * Set/Get the head and hand transforms. */ vtkGetVector3Macro(HeadPosition, double); vtkSetVector3Macro(HeadPosition, double); vtkGetVector3Macro(HeadOrientation, double); vtkSetVector3Macro(HeadOrientation, double); vtkGetVector3Macro(LeftHandPosition, double); vtkSetVector3Macro(LeftHandPosition, double); vtkGetVector3Macro(LeftHandOrientation, double); vtkSetVector3Macro(LeftHandOrientation, double); vtkGetVector3Macro(RightHandPosition, double); vtkSetVector3Macro(RightHandPosition, double); vtkGetVector3Macro(RightHandOrientation, double); vtkSetVector3Macro(RightHandOrientation, double); /** * Up vector, in world coords. Must be normalized. */ vtkGetVector3Macro(UpVector, double); vtkSetVector3Macro(UpVector, double); //@{ /** * Normally, hand position/orientation is set explicitly. * If set to false, hand and arm will follow the torso * in a neutral position. */ vtkSetMacro(UseLeftHand, bool); vtkGetMacro(UseLeftHand, bool); vtkBooleanMacro(UseLeftHand, bool); vtkSetMacro(UseRightHand, bool); vtkGetMacro(UseRightHand, bool); vtkBooleanMacro(UseRightHand, bool); //@} //@{ /** * Show just the hands. Default false. */ vtkSetMacro(ShowHandsOnly, bool); vtkGetMacro(ShowHandsOnly, bool); vtkBooleanMacro(ShowHandsOnly, bool); //@} protected: vtkAvatar(); ~vtkAvatar() override; double HeadPosition[3]; double HeadOrientation[3]; double LeftHandPosition[3]; double LeftHandOrientation[3]; double RightHandPosition[3]; double RightHandOrientation[3]; enum { TORSO, LEFT_FORE, RIGHT_FORE, LEFT_UPPER, RIGHT_UPPER, NUM_BODY, }; double BodyPosition[NUM_BODY][3]; double BodyOrientation[NUM_BODY][3]; double UpVector[3]; bool UseLeftHand; bool UseRightHand; bool ShowHandsOnly; private: vtkAvatar(const vtkAvatar&) = delete; void operator=(const vtkAvatar&) = delete; }; #endif // vtkAvatar_h