#ifndef GledCore_PupilInfo_H
#define GledCore_PupilInfo_H
#include <Glasses/SubShellInfo.h>
#include <Glasses/CameraInfo.h>
#include <Glasses/ZNode.h>
#include <Gled/GCondition.h>
#include <Eye/Ray.h>
#include <Stones/ZColor.h>
class PupilInfo : public SubShellInfo
{
MAC_RNR_FRIENDS(PupilInfo);
friend class Pupil;
public:
enum Projection_e { P_Perspective, P_Orthographic };
enum PrivRayQN_e { PRQN_offset = RayNS::RQN_user_0,
PRQN_resize_window,
PRQN_camera_home,
PRQN_smooth_camera_home,
PRQN_redraw,
PRQN_dump_image
};
private:
void _init();
protected:
Int_t mMaxRnrDepth;
Bool_t bAutoRedraw;
Int_t mWidth;
Int_t mHeight;
ZColor mClearColor;
ZLink<ZNode> mCameraBase;
ZLink<ZNode> mLookAt;
Float_t mLookAtMinDist;
ZLink<ZNode> mUpReference;
UChar_t mUpRefAxis;
Bool_t bUpRefLockDir;
Float_t mUpRefMinAngle;
Projection_e mProjMode;
Float_t mZFov;
Float_t mZSize;
Float_t mYFac;
Float_t mXDist;
Float_t mNearClip;
Float_t mFarClip;
Float_t mZoomFac;
Float_t mDefZFov;
Float_t mDefZSize;
Float_t mMinZFov;
Float_t mMaxZFov;
Int_t mFrontMode;
Int_t mBackMode;
Bool_t bLiMo2Side;
Bool_t bBlend;
Float_t mMSRotFac;
Float_t mMSMoveFac;
Float_t mMoveOM;
Float_t mAccelExp;
Float_t mCHSize;
Float_t mMPSize;
Float_t mHomeAnimTime;
Bool_t bShowRPS;
Bool_t bShowView;
Bool_t bRnrNames;
Bool_t bRnrFakeOverlayInCapture;
UInt_t mBuffSize;
Int_t mPickR;
UChar_t mPickDisp;
Int_t mPickMaxN;
Int_t mPopupDx;
Int_t mPopupDy;
Float_t mPopupFx;
Float_t mPopupFy;
ZLink<ZGlass> mOverlay;
FID_t mOverlay_fid;
ZLink<ZGlass> mEventHandler;
FID_t mEventHandler_fid;
Bool_t bAllowHandlerSwitchInPupil;
Bool_t bStereo;
Double_t mStereoZeroParallax;
Double_t mStereoEyeOffsetFac;
Double_t mStereoFrustumAsymFac;
ZTrans* mRnrCamFix;
Int_t mRnrScreenW;
Int_t mRnrScreenH;
Int_t mMouseX;
Int_t mMouseY;
Int_t mMouseDragDX;
Int_t mMouseDragDY;
TVector3 mMouseRayPos;
TVector3 mMouseRayDir;
GCondition mDirectDumpCond;
public:
PupilInfo(const Text_t* n="PupilInfo", const Text_t* t=0) :
SubShellInfo(n,t) { _init(); }
void SetCameraBase(ZNode* camerabase);
void SetLookAt(ZNode* lookat);
void SetUpReference(ZNode* upreference);
void ImportCameraInfo(CameraInfo* cam_info);
void SmoothCameraHome(ZNode* new_base=0);
void Zoom(Float_t delta);
void ZoomFac(Float_t fac);
void Home(Bool_t smooth=false);
void SetupZFov (Float_t zfov);
void SetupZSize(Float_t zsize);
ZTrans* ToPupilFrame(ZNode* node);
ZTrans* ToCameraFrame(ZNode* node);
Bool_t TransformMouseRayVectors(ZNode* ref, TVector3& pos, TVector3& dir);
void EmitResizeRay();
void EmitCameraHomeRay();
void EmitSmoothCameraHomeRay();
void EmitRedrawRay(Bool_t signal_p=false);
void EmitDumpImageRay(const TString& filename, Int_t n_tiles=1,
Bool_t copy_p=false, Bool_t signal_p=false);
void Redraw();
void RedrawWaitSignal();
void DumpImage(const TString& filename="screenshot", Int_t n_tiles=1,
Bool_t copy_p=false);
void DumpImageWaitSignal(const TString& filename="screenshot", Int_t n_tiles=1,
Bool_t copy_p=false);
void ReceiveDumpFinishedSignal();
static Bool_t sStereoDefault;
#include "PupilInfo.h7"
ClassDef(PupilInfo, 1);
};
#endif