You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

538 lines
14 KiB
C

1 month ago
#pragma once
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
#include <osgViewer/api/win32/GraphicsWindowWin32>
#include <osgDB/ReadFile>
#include <osgUtil/Optimizer>
#include <osgManipulator/TrackballDragger>
#include <osgManipulator/TranslateAxisDragger>
#include <osgManipulator/Translate2DDragger>
#include <osgGA/TrackballManipulator>
#include "../Assist/XJOSGCommon.h"
#include "../XJOSGObject/XJOSGObject.h"
#include "XJOSGView/XJOSGView.h"
#include "XJObjectManager/XJObjectManager.h"
#include "XJAlgorithm/XJPoint2D.h"
#include "XJUserEventHandler.h"
#include "XJTrackballManipulator.h"
#include "HUDCamera.h"
#include "XJV3D_Viewer.h"
#include "XJOSGObjManager.h"
#include "BaseOperator/ViewerSelector.h"
#include "BaseOperator/SelectionManager.h"
#include "BaseOperator/OBaseOperator.h"
#include "BaseOperator/XJMouseOperator.h"
#include "BaseOperator/OpPickZValue.h"
#include "BaseOperator/OpMarkupMouse.h"
#include <string>
#include <vector>
#include <map>
using namespace OSGView;
class PromptionHandler;
class BoxPicker;
static int osgCurManagerIndex;
class CXJOSGViewInternal : public CXJObserver
{
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
CXJOSGViewInternal();
virtual ~CXJOSGViewInternal();
enum {MAX_NOTE_LEN = 512};
void SetHWND(void* hWnd) {m_hWnd = (::HWND)hWnd;}
//<2F><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
void Frame();
bool Done();
//<2F><><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD>
void RequestRedraw();
//<2F><>ʼ<EFBFBD><CABC>OSG
void InitOSG(const std::string& bkgFile);
//<2F>ͷ<EFBFBD>OSG<53><47><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
int TerminateOSG();
//<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>UI<55><49><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
void RunEventHandle();
/*<2A><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
int UpdateObjectView(CXJObject *obj, EOSGUpdateType updateType = UPDATE_ALL); //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ActivateEventOperator(CXJMouseOperator* pEventOp);
void DeactiveEventOperator();
/***<2A><>ͼ<EFBFBD>任***/
void TopView();
void LeftView();
void RightView();
void BottonView();
void FrontView();
void BackView();
void ZoomAll();
void TopNoZoomView();
void SetProjViewWithoutZoom(Point3D dir, Point3D up);
void ZoomView(double px, double py, double scale);
void GetViewPos(Point2D& pt, double& scale);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͶӰ<CDB6><D3B0>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>ͶӰ<CDB6><D3B0>
void StartOrthoProjection();
void StartPerspectProjection();
//get the selected list of the obj's omkey
const std::vector<int>& GetSelOmKeyList();
//return the number of selected obj
int NbSelected() const;
//return the CXJObject's omkey selected by index
int SelectedObjOmKey(int index);
//set current operator
void LocalSetOperator(OBaseOperator* op);
//is threr a operator handler;
bool HasOperatorHandler();
//there is no event handle in osgview
void OnNoSelectEvent();
void UnlightDynamicDetectedObject();
int DrawPolygonOnScreen(std::vector<std::vector<Point3D>>& polyList, Point3D curPosition);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD>ϵĶ<CFB5><C4B6><EFBFBD><EFBFBD><EFBFBD>
void ClearPolygonOnScreen();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD>ϵı<CFB5><C4B1><EFBFBD>
void ClearMarkUp();
//Rotate camera by left mouse button
void OnCameraOrbit();
//pan camera by left mouse button
void OnCameraPan();
//use trackball manipulator
void OnCameraTrackball();
//allow trackball throw
void OnCameraContinuousOrbit();
//rotate with axis<69><73>the camera axis need update in real time
void OnCameraVerticalAxisOrbit();
//only hilight obj
void HilightObject(CXJOSGObject* sel);
//select and Hilight a osgobj
int SelectObject(CXJOSGObject* sel);
int PickedObject();
//get the intersection pt
int PickedPoint(osg::Vec3d& pnt, osg::Vec3d& normal);
int PickedDir(osg::Vec3d& dir);
//unselect and unHilight all obj from list
void DeSelectSelList();
//set selected obj's visibility in selList
void InvisibleSelList(bool visible);
//set selected obj's transparency in selList
void TransparentSelList(bool transparent);
//set selected obj's wireframe in selList
void WireframeSelList(bool wireframe);
void SetPolygonOffsets(CXJObject* pobj, float aFactor, float aUnits);
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
void SetViewManipulatorEnable(bool enable);
/****ʰȡ<CAB0><C8A1>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*****/
int PickObject(int x, int y, CXJOSGObject* &obj, bool reverseY = false);
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>ģʽ
void SetPickMode(int pickMode = 0);
/*******ģ<><C4A3><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*******/
//<2F><>ģʽ<C4A3>µ<EFBFBD><C2B5>ϷŲ<CFB7><C5B2><EFBFBD>
void TrackBallDragger(CXJObject *obj);
void SetRotateDraggerStep(double step);
void TranslateAxisDragger(CXJObject *obj);
void TranslateDirDragger(std::vector<CXJObject*> objList, Point3D dir);
void TranslateDirAndRotateDragger(std::vector<CXJObject*> objList, Point3D dir);
void RotateDirDragger(CXJObject *obj,Point3D dir);
void SetTranslationDraggerStep(double step);
void Translate2DDragger(CXJObject *obj);
void TranslateLocalCordDragger(CXJObject* obj, const Point3D& localCorX,
const Point3D& localCorY, const Point3D& localCorZ);
void TrackBallLocalCordDragger(CXJObject* obj, const Point3D& localCorX,
const Point3D& localCorY, const Point3D& localCorZ);
//<2F><><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ClearDraggerObject();
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Dragger
bool IsExistDragger();
/**********ģ<><C4A3><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>;<EFBFBD><CDBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*************/
//ƽ<><C6BD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>󣬸<EFBFBD><F3A3ACB8><EFBFBD>x,y,z<><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void TranslateObject(CXJObject *obj,float x,float y,float z);
//<2F><>תָ<D7AA><D6B8><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>󣬸<EFBFBD><F3A3ACB8><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><E3A1A2>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƕ<EFBFBD>
void RotateObject(CXJObject* obj,Point3D basePt,Point3D rotateDir,float angle);
//<2F>任ָ<E4BBBB><D6B8><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>󣬴ӳ<F3A3ACB4>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBBB>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
//<2F><><EFBFBD><EFBFBD>ʸת<CAB8><D7AA>Ϊ<EFBFBD><CEAA>ת<EFBFBD><D7AA><EFBFBD>ͽǶ<CDBD>
void ConvertDirToAngleAxis(const Point3D& dir, Point3D& rotAxis, double& angle);
bool MakeRotationByAxes(const Point3D& xdir, const Point3D& ydir, const Point3D& zdir,
Point3D& rotateAxis, double& angle, const char* priorityOrder = "ZXY");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼλ<CDBC><CEBB>
void ResetObjectViewPos(CXJObject* obj);
void TransformObjectOnce(CXJObject* obj, Point3D originPt, Point3D oriVec, Point3D destVec);
void GetObjectRotation(CXJObject *obj, float &x, float &y, float &z,float &ang);
void GetObjectTranslation(CXJObject *obj, float &x, float &y, float &z);
void TranslatePointW2NP(Point3D& pp, double& r);
void TranslatePointW2NFP(Point3D& p, Point3D& NPoint, Point3D& FPoint);
/***********<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>*************/
//ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>ƫ<EFBFBD><C6AB>ƽ<EFBFBD><C6BD>
void DeleteTempOffsetPlane();
//ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2D<32><44>
void DeleteTempPattern2D();
//<2F><>ʱ<EFBFBD><CAB1>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>߶μ<DFB6>
void ShowLineSet(const std::vector<Point3D>& pts);
void ClearLineSet();
//<2F><>ʱ<EFBFBD><CAB1>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ShowSelPt(osg::Vec3 &pt);
void ClearSelPt();
//<2F><>ʱ<EFBFBD><CAB1>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>
void ShowPointSet(const std::vector<Point3D>& pts);
void ClearPointSet();
/**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ʽ<EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><E1B1BB><EFBFBD><EFBFBD>**/
//<2F><>ʱ<EFBFBD><CAB1>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
int CreateTempObject(CXJObject* obj);
int DeleteTempObject();
//ɾ<><C9BE>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void DeleteTempObject(const CXJObject* pObj);
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>
void GetCameraLookAt(Point3D &eye,Point3D &target,Point3D &up);
void SetCameraLookAt(Point3D a_normal,Point3D a_up);
void SetCameraLookAt(const Point3D& eye, const Point3D& target, const Point3D& up);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<CDBC>洢·<E6B4A2><C2B7>
void SetBackGroudBmpPath(const std::string bmpPath);
void SetBackGroudColor(int r, int g, int b, float a=1);
//<2F><><EFBFBD>÷ָ<C3B7><D6B8><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰ<EFBFBD><C7B0>
void setModelShowInFront(CXJObject* pobj, bool isFront = true);
//<2F><><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD>
int GetPlaneMeshIntersection(CXJObject* pobj, double plnDir[3], double plnPoint[3],
std::vector<std::vector<Point3D>>& pnts, int& PolygonNum );
//<2F><><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
int GetIntersectPt(CXJObject* pobj, const Point3D& start, Point3D& lineDir, Point3D& intersectPt);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>Text<78><74> displayPosΪ<73><CEAA>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
//0---<2D><><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD>ʾ<EFBFBD><CABE> 1--<2D><><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD>ʾ<EFBFBD><CABE> 2--<2D><><EFBFBD>½<EFBFBD><C2BD><EFBFBD>ʾ
void setHUDText(wchar_t* str, HUDTextWinPos displayPos, AlignmentType alighment);
//<2F><><EFBFBD><EFBFBD>HUDText<78><74>һϵ<D2BB><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setHUDTextProperties(float charactersize, osg::Vec4 textColor, std::string font);
//<2F><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
bool setPictureOnBackGround(const std::string& picPath);
//<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>ͼƬ
void setDefaultBackGround();
//<2F><><EFBFBD><EFBFBD>ͼ<EFBFBD>Ͻ<EFBFBD><CFBD>ж<EFBFBD>ά<EFBFBD><CEAC>ͼ
//ʰȡ<CAB0><C8A1>άͼƬ<CDBC>ϵĵ<CFB5>
int Pick2DPoint(int x, int y, osg::Vec2 &pnt2D, osg::Vec3 &pnt3D);
//<2F><><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>µĵ<C2B5>
void ProjectWindowsToObject(int x, int y, osg::Vec3& pt);
//<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA>Ļ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ProjectObjectToWindow(const Point3D& pt, int& x, int& y );
//<2F><><EFBFBD><EFBFBD>λ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ZoomAndShowTopView_Sketch(osg::Vec3 axisZ, osg::Vec3 axisY);
void ZoomAndShowFrontView_Sketch(osg::Vec3 center, osg::Vec3 norml, osg::Vec3 up);
/***<2A><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں˶<DABA><CBB6><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>**/
CXJOSGObject* GetViewPointer(int osgKey);
CXJOSGObject* GetObjectView(const CXJObject * obj);
CXJOSGObject* GetObjectView(int omkey);
int GetViewObject(CXJOSGObject* obj) ;
int GetViewObject(int osgKey);
/**************<2A><>OSG<53><47>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ʾģ<CABE><C4A3>*****************************************/
//<2F><><EFBFBD><EFBFBD>Ļ<EFBFBD>ϻ<EFBFBD><CFBB>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>
int DrawPolylineOnWindow(std::vector<Point3D>& polyline);
int DrawPolylineOnMFCWindow(std::vector<Point3D>& polyline, int state = 0);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>ϻ<EFBFBD><CFBB>ƵĶ<C6B5><C4B6><EFBFBD><EFBFBD><EFBFBD>
int ClearPolylineOnWindow();
//<2F><><EFBFBD><EFBFBD>Ļ<EFBFBD>ϻ<EFBFBD><CFBB><EFBFBD>Բ<EFBFBD><D4B2>ָ<EFBFBD><D6B8>Բ<EFBFBD><D4B2>λ<EFBFBD>úͰ뾶
int DrawCircleOnWindow(int x, int y, float circleRad = 50.0);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>ϻ<EFBFBD><CFBB>Ƶ<EFBFBD>Բ
int ClearCircleOnWindow();
//<2F>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>л<EFBFBD><D0BB>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>
int DrawPolylineOnSceneGraph(std::vector<Point3D>& polyline);
int ClearPolylineOnSceneGraph();
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>osg<73><67><EFBFBD><EFBFBD>
void DeleteAllOSGObjects();
osgViewer::Viewer* getViewer() {return m_viewer;}
//<2F><>Ⱦ<EFBFBD><C8BE>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD>̬<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊȫ<CEAA><C8AB><EFBFBD>߳<EFBFBD>
static void Render(void* ptr);
ViewerSelector* GetViewerSelector() {return m_viewerSelector;}
CXJOSGObjManager* GetOSGObjManager() {return m_osgObjManager;}
//ÿ֡<C3BF><D6A1><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
void PreFrameUpdate(void);
//ÿ֡<C3BF><D6A1><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD>
void PostFrameUpdate(void);
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>
const osgGA::GUIEventHandler* GetActiveOperator() const{ return m_ActiveEventHandler.get();}
//<2F><>ȡ<EFBFBD><C8A1>ɫ<EFBFBD><C9AB>
HUDAnalysis* GetHUDAnalysis() const {return m_hudAnalysis;}
//<2F><><EFBFBD><EFBFBD>ͼƬ
void DrawImage(std::string path);
void TakeObjectPicture(const std::vector<CXJObject*>& objList, std::string path,
const osg::Vec3d& cen,
const osg::Vec3d& dir,
const osg::Vec3d& up,
double rad,
int w, int h);
void EnablePickZValue(CXJObject* pobj, bool bEnable = true);
void EnableOpDrawPolygon(bool bEnable);
void GetOpDrawPolygon(std::vector<Point2D>& polygen);
void EnableAntiAliasing(bool bEnable);
void ShowMouse(int px, int py);
void GetMousePos(int& px, int& py);
1 month ago
bool IsWindows7();
1 month ago
protected:
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
osg::ref_ptr<osg::Camera> CreateBackGround(std::string BmpPath);
//<2F><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
osg::ref_ptr<osg::Camera> CreateHUDCamera(osg::Camera::RenderOrder renderOrder);
private:
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void InitManipulators(void);
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void InitSceneGraph(const std::string& bkgFile);
//<2F><>ʼ<EFBFBD><CABC>2D<32><44><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
void Init2DSceeGraphLayer();
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>϶<EFBFBD><CFB6><EFBFBD>ͼ<EFBFBD><CDBC>
void InitOsgDraggerLayer();
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void InitCameraConfig(void);
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ϵλ<CFB5>úͷ<C3BA><CDB7><EFBFBD>
void InitCoordinateSystem(void);
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>
void InitEventHandlers(void);
//<2F><>ʼ<EFBFBD><CABC>HUD<55><44><EFBFBD><EFBFBD>
void InitHUDText(void);
void UpdateProjectionMatrix();
//friend CXJOSGObjManager* GetOSGObjManager(); //<2F><>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
//friend ViewerSelector* GetViewerSelector(); //<2F><>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
private:
//<2F><><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
HWND m_hWnd;
//<2F>۲<EFBFBD><DBB2><EFBFBD>viewer
XJV3D_Viewer* m_viewer;
//trackball<6C><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
osg::ref_ptr</*osgGA::TrackballManipulator*/CXJTrackballManipulator> m_trackball;
//<2F><><EFBFBD><EFBFBD>KeySwitchѡ<68><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
osg::ref_ptr<CXJManipulator> m_keyswitchManipulator;
//<2F><><EFBFBD><EFBFBD>OMKey<65>Ͷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
//std::map<int, CXJOSGObject* > m_mapOm3D;
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CXJOSGObjManager* m_osgObjManager; //<2F><>̬<EFBFBD><CCAC>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
//<2F><>ͼʰȡ<CAB0><C8A1>
ViewerSelector* m_viewerSelector;
//ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
osg::ref_ptr<SelectionManager> m_selectionManager;
//the current operator
osg::ref_ptr<osgGA::GUIEventHandler> m_ActiveEventHandler;
bool m_bHasOperator; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>־
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ洢·<E6B4A2><C2B7>
std::string m_DebugPath;
osg::Vec4 m_bgColor;
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD>ɫ<EFBFBD><C9AB>Ĭ<EFBFBD><C4AC><EFBFBD>Ǵ<EFBFBD>ɫ
bool m_bIsBackgroundPureColor;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>¼<EFBFBD>
osg::ref_ptr<PromptionHandler> m_KeyboardHandler;
//<2F><>ק<EFBFBD><D7A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
osg::ref_ptr<osgManipulator::TrackballDragger> m_trackballDragger;
osg::ref_ptr<osgManipulator::TranslateAxisDragger> m_translateAxisDragger;
osg::ref_ptr<osgManipulator::Translate2DDragger> m_translate2DDragger;
osg::ref_ptr<osg::Switch> m_trackballDraggerSwitch;
osg::ref_ptr<osg::Switch> m_translateAxisDraggerSwitch;
osg::ref_ptr<osg::Switch> m_translate2DDraggerSwitch;
/*******************<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**************************/
OpPickZValue* m_opPickZValue;
OpMarkupMouse* m_opMarkMouse;
private:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
osg::ref_ptr<osg::Group> m_root;
//<2F><><EFBFBD><EFBFBD>ϵ<EFBFBD>ڵ<EFBFBD>
osg::ref_ptr<osg::Group> m_csysGroup;
//<2F><>ʱ<EFBFBD><CAB1>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
osg::ref_ptr<osg::Group> m_tempObjectGroup;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д洢<D0B4><E6B4A2>CTͼ<54><CDBC><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
osg::ref_ptr<osg::Switch> m_CTImageGroup;
//<2F><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>3D<33>ڵ<EFBFBD><DAB5><EFBFBD>֯
osg::ref_ptr<osg::Switch> m_3DGroup;
CXJPlane* m_2DPlane;
std::vector<CXJPlane*> m_ClipPlanes;
osg::ref_ptr<HUDText> m_hudText;
//<2F><>ɫ<EFBFBD><C9AB>
osg::ref_ptr<HUDAnalysis> m_hudAnalysis;
};
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»ص<C2BB>
class XJSceneGraphUpdateCallBack : public osg::NodeCallback
{
public:
XJSceneGraphUpdateCallBack()
: m_update(false),
m_ViewInternal(NULL),
m_pobj(NULL),
m_updateType(UPDATE_ALL)
{
}
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
{
if (m_update == false)
{
traverse(node,nv);
return;
}
if (NULL != m_ViewInternal && NULL != m_pobj)
{
m_update = false;
traverse(node,nv);
}
}
public:
void SetUpdateRun(bool update) {m_update = update;}
bool GetUpdateRun(){return m_update;}
void SetViewInternal(CXJOSGViewInternal* viewinternal) {m_ViewInternal = viewinternal;}
void UpdateObject(CXJObject* pobj,EOSGUpdateType updateType)
{
m_pobj = pobj;
m_updateType = updateType;
}
private:
bool m_update;
CXJOSGViewInternal* m_ViewInternal;
CXJObject* m_pobj;
EOSGUpdateType m_updateType;
};