提交OSGFramework
This commit is contained in:
parent
1b8d989d18
commit
e855edcfa8
224
OSGFramework/include/VecCoordinate.h
Normal file
224
OSGFramework/include/VecCoordinate.h
Normal file
|
|
@ -0,0 +1,224 @@
|
|||
/**
|
||||
* @file VecCoordinate.h
|
||||
* @brief 通用的坐标转换:任意两种坐标之间的转换
|
||||
* @date 2014-5-26
|
||||
* @author: liyonggang
|
||||
*/
|
||||
#ifndef PAI_FRAME_CVECCOORDINATE_H
|
||||
#define PAI_FRAME_CVECCOORDINATE_H
|
||||
#pragma warning( push ,0)
|
||||
#include <QUuid>
|
||||
|
||||
// #include <Vec2d>
|
||||
// #include <Vec3f>
|
||||
// #include <Matrix>
|
||||
|
||||
#include "OSGFramework.h"
|
||||
// #include "VecGeoToGeoNormalCoordinate.h"
|
||||
// #include "VecWindowDocument.h"
|
||||
// #include "2DWindowViewInfo.h"
|
||||
|
||||
#pragma warning( pop )
|
||||
BEGIN_OSGGRAPHICS_NAMESPACE
|
||||
class CVecSceneManager;
|
||||
END_OSGGRAPHICS_NAMESPACE;
|
||||
|
||||
BEGIN_OSGGRAPHICS_NAMESPACE;
|
||||
|
||||
enum eCoordType
|
||||
{
|
||||
//原始的用户业务坐标
|
||||
eCoord_GEO,//深度,工程值
|
||||
|
||||
//归一化的用户业务坐标:统一用户业务坐标到OSG的坐标系
|
||||
eCoord_GEONormal,//对数变换、倒置坐标轴
|
||||
|
||||
// OSG 物体局部坐标系. 就是平常渲染时给OSG::Geometry的顶点坐标
|
||||
eCoord_OSGLocal, //道内横向刻度
|
||||
|
||||
// OSG 全局模型坐标系,( transform by CVecSceneManager Global Model transform)
|
||||
eCoord_OSGGlobal,//窗口中坐标
|
||||
|
||||
//相机坐标系,眼睛坐标系( 视图矩阵变化后)
|
||||
eCoord_OSGCameraEye,
|
||||
|
||||
// 投影矩阵变化后的归一化三维坐标(x,y,z的范围都是(-1,1) )
|
||||
eCoord_OSGNormal,
|
||||
|
||||
// OSG的视口二维像素坐标( Y轴正方向是由下到上 )
|
||||
eCoord_OSGPixel,
|
||||
|
||||
// QT Widget的窗口二维像素坐标( Y轴正方向是由上到下 )
|
||||
eCoord_GDIPixel,
|
||||
|
||||
// 厘米单位坐标( Y轴正方向是由上到下 )
|
||||
eCoord_GDICM,
|
||||
};
|
||||
|
||||
// /**
|
||||
// * @class IVecCoordinate
|
||||
// * @brief 通用的坐标转换:任意两种坐标之间的转换
|
||||
// */
|
||||
// class OSGFRAMEWORK_EXPORT IVecCoordinate
|
||||
// {
|
||||
// public:
|
||||
// IVecCoordinate();
|
||||
|
||||
// virtual ~IVecCoordinate();
|
||||
// /**
|
||||
// * @brief 把点从一个坐标系统转换另外一个坐标系统
|
||||
// * @param ObjectID : Object ID,特别是在转为Well Section Geo坐标时有正确的Objecct ID
|
||||
// * @param eInCoordType: 输入点的坐标系统
|
||||
// * @param inCoord: 输入的顶点
|
||||
// * @param eOutCoordType:输出的坐标系统类型
|
||||
// * @param outCoord: 输出的顶点
|
||||
// */
|
||||
// virtual void ConvertCoord( const QUuid &ObjectID,eCoordType eInCoordType, osg::Vec3f inCoord,
|
||||
// eCoordType eOutCoordType,osg::Vec3f& outCoord) = 0 ;
|
||||
|
||||
// /**
|
||||
// * @brief 把点从一个坐标系统转换另外一个坐标系统
|
||||
// * @param ObjectID : Object ID,特别是在转为Well Section Geo坐标时有正确的Objecct ID
|
||||
// * @param eInCoordType: 输入点的坐标系统
|
||||
// * @param inCoord: 输入的顶点
|
||||
// * @param eOutCoordType:输出的坐标系统类型
|
||||
// * @param outCoord: 输出的顶点
|
||||
// */
|
||||
// virtual void ConvertCoordDouble( const QUuid &ObjectID,eCoordType eInCoordType, osg::Vec3d inCoord,
|
||||
// eCoordType eOutCoordType,osg::Vec3d& outCoord ) = 0 ;
|
||||
|
||||
// /**
|
||||
// * @brief 把"长度"从一个坐标系统转换到另外一个坐标系统
|
||||
// * @param ObjectID : Object ID,特别是在转为Well Section Geo坐标时有正确的Objecct ID
|
||||
// * @param eInCoordType: 输入点的坐标系统
|
||||
// * @param inCoord: 输入的长度
|
||||
// * @param eOutCoordType:输出的坐标系统类型
|
||||
// * @param outCoord: 输出的长度
|
||||
// * @param bAbs: 输出的长度是否取绝对值
|
||||
// */
|
||||
// virtual void ConvertDeltaCoord( const QUuid &ObjectID,eCoordType eInCoordType, osg::Vec3d inCoord,
|
||||
// eCoordType eOutCoordType,osg::Vec3d& outCoord ,bool bAbs) = 0;
|
||||
// };
|
||||
|
||||
// /**
|
||||
// * @class IVecCoordinate
|
||||
// * @brief 通用的坐标转换:任意两种坐标之间的转换
|
||||
// */
|
||||
// class OSGFRAMEWORK_EXPORT CVecCoordinate : public IVecCoordinate
|
||||
// {
|
||||
// public:
|
||||
|
||||
// CVecCoordinate();
|
||||
// virtual void InitSceneManager(CVecSceneManager *ppSceneManager);
|
||||
|
||||
// /**
|
||||
// * @brief 把点从一个坐标系统转换另外一个坐标系统
|
||||
// * @param ObjectID : Object ID,特别是在转为Well Section Geo坐标时有正确的Objecct ID
|
||||
// * @param eInCoordType: 输入点的坐标系统
|
||||
// * @param inCoord: 输入的顶点
|
||||
// * @param eOutCoordType:输出的坐标系统类型
|
||||
// * @param outCoord: 输出的顶点
|
||||
// */
|
||||
// virtual void ConvertCoord( const QUuid &ObjectID,eCoordType eInCoordType, osg::Vec3f inCoord,
|
||||
// eCoordType eOutCoordType,osg::Vec3f& outCoord) ;
|
||||
// virtual void ConvertCoordDoubleNoGEONormal( const QUuid &ObjectID,eCoordType eInCoordType, osg::Vec3d inCoord,
|
||||
// eCoordType eOutCoordType,osg::Vec3d& outCoord );
|
||||
|
||||
// /**
|
||||
// * @brief 把点从一个坐标系统转换另外一个坐标系统
|
||||
// * @param ObjectID : Object ID,特别是在转为Well Section Geo坐标时有正确的Objecct ID
|
||||
// * @param eInCoordType: 输入点的坐标系统
|
||||
// * @param inCoord: 输入的顶点
|
||||
// * @param eOutCoordType:输出的坐标系统类型
|
||||
// * @param outCoord: 输出的顶点
|
||||
// */
|
||||
// virtual void ConvertCoordDouble( const QUuid &ObjectID,eCoordType eInCoordType, osg::Vec3d inCoord,
|
||||
// eCoordType eOutCoordType,osg::Vec3d& outCoord ) ;
|
||||
|
||||
// /**
|
||||
// * @brief 把"长度"从一个坐标系统转换到另外一个坐标系统
|
||||
// * @param ObjectID : Object ID,特别是在转为Well Section Geo坐标时有正确的Objecct ID
|
||||
// * @param eInCoordType: 输入点的坐标系统
|
||||
// * @param inCoord: 输入的长度
|
||||
// * @param eOutCoordType:输出的坐标系统类型
|
||||
// * @param outCoord: 输出的长度
|
||||
// * @param bAbs: 输出的长度是否取绝对值
|
||||
// */
|
||||
// void ConvertDeltaCoord( const QUuid &ObjectID,eCoordType eInCoordType, osg::Vec3d inCoord,
|
||||
// eCoordType eOutCoordType,osg::Vec3d& outCoord ,bool bAbs) ;
|
||||
|
||||
// //同ConvertCoordDouble,只处理X坐标
|
||||
// virtual double ConvertX( const QUuid &ObjectID,eCoordType eInCoordType, double x,
|
||||
// eCoordType eOutCoordType );
|
||||
|
||||
// //同ConvertCoordDouble,只处理Y坐标
|
||||
// virtual double ConvertY( const QUuid &ObjectID,eCoordType eInCoordType, double y,
|
||||
// eCoordType eOutCoordType );
|
||||
|
||||
// //同ConvertDeltaCoord,只处理X方向长度
|
||||
// virtual double ConvertDeltaX( const QUuid &ObjectID,eCoordType eInCoordType, double x,
|
||||
// eCoordType eOutCoordType,bool bAbs ) ;
|
||||
|
||||
// //同ConvertDeltaCoord,只处理Y方向长度
|
||||
// virtual double ConvertDeltaY( const QUuid &ObjectID,eCoordType eInCoordType, double y,
|
||||
// eCoordType eOutCoordType,bool bAbs) ;
|
||||
|
||||
// /**
|
||||
// * @brief 每厘米像素数
|
||||
// */
|
||||
// void SetPixelPerCm(QPrinter *pDC);
|
||||
// void SetPixelPerCm(QPainter *pDC);
|
||||
// void SetPixelPerCm(double PixelPerCm);
|
||||
// double GetPixelPerCm();
|
||||
// /**
|
||||
// * @brief 像素转为厘米
|
||||
// */
|
||||
// double PixelToCM( double fPixel );
|
||||
// /**
|
||||
// * @breif 返回对于指定的坐标系而言每个像素对应的高度
|
||||
// * @param objectID 对象ID,通常为空
|
||||
// * @param eOutCoordType 结果坐标系的类型
|
||||
// */
|
||||
// double HeightPerPixel(const QUuid& objectID,eCoordType eOutCoordType);
|
||||
|
||||
// /**
|
||||
// * @breif 返回对于指定的坐标系而言每个像素对应的高度
|
||||
// * @param objectID 对象ID,通常为空
|
||||
// * @param eOutCoordType 结果坐标系的类型
|
||||
// */
|
||||
// double WidthPerPixel(const QUuid& objectID,eCoordType eOutCoordType);
|
||||
|
||||
// virtual osg::Vec3d TransfromGeo_GeoNormal(const QUuid &ObjectID, osg::Vec3d in, bool bPositive);
|
||||
// bool IsXYSwap( eCoordType eInCoordType,eCoordType eOutCoordType );
|
||||
|
||||
// private:
|
||||
// typedef osg::Vec3d (*TransfromCoordinateFunc)(CVecCoordinate *pCoordinate, const QUuid &ObjectID,osg::Vec3d in, bool bPositive);
|
||||
|
||||
// //坐标系统之间相互转换的函数。每个函数只负责相邻的两个坐标系之间的转换
|
||||
// static osg::Vec3d TransfromGeo_GeoNormal(CVecCoordinate *pCoordinate,const QUuid &ObjectID, osg::Vec3d in, bool bPositive);
|
||||
// static osg::Vec3d TransfromGeoNormal_OSGLocal(CVecCoordinate *pCoordinate,const QUuid &ObjectID, osg::Vec3d in, bool bPositive);
|
||||
// static osg::Vec3d TransfromOSGLocal_Global(CVecCoordinate *pCoordinate, const QUuid &ObjectID,osg::Vec3d in, bool bPositive);
|
||||
// static osg::Vec3d TransfromOSGGlobal_EyePosition(CVecCoordinate *pCoordinate,const QUuid &ObjectID, osg::Vec3d in, bool bPositive);
|
||||
// static osg::Vec3d TransfromEye_NormalizedPosition(CVecCoordinate *pCoordinate,const QUuid &ObjectID, osg::Vec3d in, bool bPositive);
|
||||
// static osg::Vec3d TransfromOSGNormalizedPosition_Pixel(CVecCoordinate *pCoordinate,const QUuid &ObjectID, osg::Vec3d in, bool bPositive);
|
||||
// static osg::Vec3d TransfromOSGPixel_GDIPixel(CVecCoordinate *pCoordinate,const QUuid &ObjectID, osg::Vec3d in, bool bPositive);
|
||||
// static osg::Vec3d TransfromGDIPixel_GDICM(CVecCoordinate *pCoordinate,const QUuid &ObjectID, osg::Vec3d in, bool bPositive);
|
||||
|
||||
// protected:
|
||||
// C2DWindowViewInfo *m_pWindowViewInfo;
|
||||
// bool m_bInitWindowViewInfo;
|
||||
|
||||
// protected:
|
||||
// std::vector< TransfromCoordinateFunc > m_vTransfromCoordinateFunc;// 坐标转换的函数指针数组
|
||||
// public:
|
||||
// CVecSceneManager *m_pSceneManager;
|
||||
// CVecGeoToGeoNormalCoordinate m_GeoToGeoNormalCoordinate;
|
||||
// double dPixelPerCm;
|
||||
// osg::Matrixd m_WindowMatrix;
|
||||
// osg::Matrixd m_ProjectMatrix;
|
||||
// osg::Matrixd m_ViewMatrix;
|
||||
// };
|
||||
|
||||
END_OSGGRAPHICS_NAMESPACE;
|
||||
using namespace pai::graphics;
|
||||
#endif
|
||||
202
OSGFramework/include/VecViewCommand.h
Normal file
202
OSGFramework/include/VecViewCommand.h
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
/**
|
||||
* @file VecViewCommand.h
|
||||
* @brief 窗口工具栏上的Action插件集合管理类
|
||||
* @date 2014-5-26
|
||||
* @author: liyonggang
|
||||
*/
|
||||
#ifndef PAI_FRAME_OSGVIEWCOMMAND_H
|
||||
#define PAI_FRAME_OSGVIEWCOMMAND_H
|
||||
#pragma warning( push ,0)
|
||||
|
||||
#include <QAction>
|
||||
#include "OSGFramework.h"
|
||||
#include "BaseObject.h"
|
||||
|
||||
#pragma warning( pop )
|
||||
#pragma warning( disable: 4251 )
|
||||
|
||||
|
||||
BEGIN_OSGGRAPHICS_NAMESPACE;
|
||||
class CVecSceneManager;
|
||||
|
||||
/**
|
||||
* @class Action的数据描述
|
||||
*/
|
||||
struct OSGFRAMEWORK_EXPORT sAction
|
||||
{
|
||||
public:
|
||||
sAction();
|
||||
|
||||
sAction( QString strIcon1,std::wstring strText1,bool bChecked1,bool bCheckAble1 ,QUuid DigitizerIDOrBuilderOjectID,QString slotFunctionName1,QKeySequence keyShortcut1 = QKeySequence () );
|
||||
|
||||
public:
|
||||
QString strIcon;
|
||||
std::wstring strText;
|
||||
bool bChecked;
|
||||
bool bCheckAble;
|
||||
QUuid m_DigitizerIDOrBuilderOjectID;//(开关digitizer ID) 或 (显示隐藏UI builder的object ID)
|
||||
QKeySequence keyShortcut;
|
||||
QString slotFunctionName;
|
||||
};
|
||||
|
||||
/**
|
||||
* @class 窗口工具栏上的Action插件集合管理类
|
||||
*/
|
||||
class OSGFRAMEWORK_EXPORT CVecViewCommand : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
||||
/**
|
||||
* @brief 初始化
|
||||
*/
|
||||
CVecViewCommand( );
|
||||
void InitSceneManager( CVecSceneManager *pSceneManager );
|
||||
CVecSceneManager* GetSceneManager();
|
||||
|
||||
/**
|
||||
* @brief 执行Action,模拟用户点击此Actioin
|
||||
* @param viewCommandID : command ID
|
||||
* @bChecked : 如果是Checkable的Action,是否Checked
|
||||
*/
|
||||
bool DoAction( QUuid viewCommandID,bool bChecked );
|
||||
|
||||
/**
|
||||
* @brief 根据Command ID查找QAction
|
||||
*/
|
||||
QAction* GetAction( QUuid viewCommandID,bool bCreateIfNotExist = true );
|
||||
|
||||
/**
|
||||
* @brief Action 是否checked and Enabled
|
||||
*/
|
||||
bool GetActionVisble( QUuid viewCommandID );
|
||||
|
||||
//返回当前视口安装的所有的Action
|
||||
QMap<QUuid,QObject* >& GetAllActions();
|
||||
|
||||
/**
|
||||
* @brief 创建QAction
|
||||
*/
|
||||
static void BuildActionGeneral( CVecViewCommand &viewCommand,QUuid viewCommandID );
|
||||
|
||||
|
||||
/**
|
||||
* @brief 根据view commandID查找Digitizer ID
|
||||
*/
|
||||
static QUuid GetDigitizerIDByViewCommandID( QUuid viewCommandID );
|
||||
// Action槽函数
|
||||
private slots:
|
||||
void slotActionClicked(bool bChecked);
|
||||
|
||||
private:
|
||||
|
||||
//批量的根据插件注册的元数据创建QAction
|
||||
void CreatActions( QList<QUuid> listviewCommandID );
|
||||
|
||||
// Cache Action
|
||||
void AddUIElementToMap( QUuid viewCommandID,QObject *pAction );
|
||||
|
||||
// 根据插件注册的元数据创建QAction
|
||||
QAction* _CreateAction( QUuid viewCommandID );
|
||||
|
||||
private:
|
||||
CVecSceneManager *m_pSceneMgr;
|
||||
QMap<QUuid/*Action ID*/,QObject* /*Action*/ >m_mapUIElement; //cache Action
|
||||
};
|
||||
|
||||
typedef void (*BUILDUIELEMENT_FUNC )(CVecViewCommand &,QUuid);
|
||||
typedef void (*UIELEMENTACTION_FUNC )(CVecViewCommand &,QUuid,bool);
|
||||
|
||||
/**
|
||||
* @class 创建Action函数指针,Action"槽"函数指针
|
||||
*/
|
||||
struct OSGFRAMEWORK_EXPORT sUIELEMENTFunction
|
||||
{
|
||||
public:
|
||||
sUIELEMENTFunction()
|
||||
{
|
||||
buildFunc = NULL;
|
||||
ActionSlot = NULL;
|
||||
}
|
||||
sUIELEMENTFunction( BUILDUIELEMENT_FUNC buildFunc1,UIELEMENTACTION_FUNC ActionSlot1 )
|
||||
{
|
||||
buildFunc = buildFunc1;
|
||||
ActionSlot = ActionSlot1;
|
||||
}
|
||||
BUILDUIELEMENT_FUNC buildFunc;
|
||||
UIELEMENTACTION_FUNC ActionSlot;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief ViewComand的创建和槽的函数指针
|
||||
*/
|
||||
OSGFRAMEWORK_EXPORT QMap< QUuid/*Action ID*/,sUIELEMENTFunction >& GetmapUIElementFunc();
|
||||
|
||||
/**
|
||||
* @brief 注册View Command
|
||||
* @param viewCommandID :Command ID
|
||||
* @param s : Command 的元数据描述(文本,图标等)
|
||||
* @param pSlotAction: Command对应的"槽"函数
|
||||
*/
|
||||
OSGFRAMEWORK_EXPORT void RegisterViewAction( QUuid viewCommandID,sAction s,UIELEMENTACTION_FUNC pSlotAction);
|
||||
|
||||
/**
|
||||
* @brief ViewComand的元数据:图标,文本等
|
||||
*/
|
||||
OSGFRAMEWORK_EXPORT QMap<QUuid/*Action ID*/,sAction >& _GetMapActionData();
|
||||
|
||||
OSGFRAMEWORK_EXPORT CVecViewCommand& GetGlobalCommand();
|
||||
|
||||
/**
|
||||
* @class View Command注册的元数据
|
||||
*/
|
||||
struct OSGFRAMEWORK_EXPORT sRegisterViewAction
|
||||
{
|
||||
QUuid actionID;
|
||||
sAction s;
|
||||
UIELEMENTACTION_FUNC pSlotAction;
|
||||
};
|
||||
|
||||
/**
|
||||
* @class 实现View Command自动注册的辅助类
|
||||
*/
|
||||
class OSGFRAMEWORK_EXPORT CRegisterViewActionAuto
|
||||
{
|
||||
public:
|
||||
CRegisterViewActionAuto( sRegisterViewAction *pRegisterViewAction )
|
||||
{
|
||||
while( pRegisterViewAction )
|
||||
{
|
||||
if( (*pRegisterViewAction).actionID.isNull() ) break;
|
||||
|
||||
RegisterViewAction( pRegisterViewAction->actionID, pRegisterViewAction->s, pRegisterViewAction->pSlotAction );
|
||||
++pRegisterViewAction;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//view Comand 插件注册宏
|
||||
#define BEGIN_REGISTER_VIEWCOMMAND()\
|
||||
sRegisterViewAction g_sRegisterViewActionData[]={\
|
||||
|
||||
|
||||
#define END_REGISTER_VIEWCOMMAND()\
|
||||
,{QUuid(),sAction(),NULL } };\
|
||||
CRegisterViewActionAuto g_CRegisterViewActionAuto( g_sRegisterViewActionData );
|
||||
|
||||
//自动注册示例代码
|
||||
//BEGIN_REGISTER_VIEWCOMMAND()
|
||||
//VIEW_COMMAND_ITEM( GetViewCmdID_ViewAll(),"viewall.png" , "View All",false,false,"",_SlotViewAll)
|
||||
//END_REGISTER_VIEWCOMMAND()
|
||||
#define VIEW_COMMAND_ITEM( viewCommandID,actionIcon,actionText, actionbChecked, actionbCheckAble,DigitizerIDOrBuilderOjectID,slotFunction )\
|
||||
{ viewCommandID,sAction( actionIcon,actionText,actionbChecked,actionbCheckAble,DigitizerIDOrBuilderOjectID,#slotFunction),slotFunction }
|
||||
|
||||
#define VIEW_COMMAND_ITEM_SHORCUT( viewCommandID,actionIcon,actionText, actionbChecked, actionbCheckAble,DigitizerIDOrBuilderOjectID,slotFunction,actionshortcut )\
|
||||
{ viewCommandID,sAction( actionIcon,actionText,actionbChecked,actionbCheckAble,DigitizerIDOrBuilderOjectID,#slotFunction,actionshortcut),slotFunction }
|
||||
|
||||
|
||||
END_OSGGRAPHICS_NAMESPACE;
|
||||
|
||||
using namespace pai::graphics;
|
||||
|
||||
#endif
|
||||
73
OSGFramework/src/OSGFramework.pro
Normal file
73
OSGFramework/src/OSGFramework.pro
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
#-------------------------------------------------
|
||||
#
|
||||
# Project created by QtCreator 2024-07-11T18:44:51
|
||||
#
|
||||
#-------------------------------------------------
|
||||
|
||||
QT += core gui widgets
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
TARGET = OSGFramework
|
||||
TEMPLATE = lib
|
||||
|
||||
# The following define makes your compiler emit warnings if you use
|
||||
# any feature of Qt which has been marked as deprecated (the exact warnings
|
||||
# depend on your compiler). Please consult the documentation of the
|
||||
# deprecated API in order to know how to port your code away from it.
|
||||
DEFINES += OSGFRAMEWORK_LIB
|
||||
DEFINES += _WINDOWS
|
||||
|
||||
# You can also make your code fail to compile if you use deprecated APIs.
|
||||
# In order to do so, uncomment the following line.
|
||||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
CONFIG += console \
|
||||
# static \
|
||||
c++11 \
|
||||
shared\
|
||||
dll
|
||||
|
||||
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
!isEmpty(target.path): INSTALLS += target
|
||||
|
||||
CONFIG(debug, debug|release){
|
||||
DESTDIR = ../../Bin
|
||||
TARGET = $$join(TARGET,,,d) #为debug版本生成的文件增加d的后缀
|
||||
} else {
|
||||
DESTDIR = ../../Bin
|
||||
TARGET = $$join(TARGET,,,)
|
||||
}
|
||||
|
||||
|
||||
FORMS +=
|
||||
|
||||
HEADERS += \
|
||||
../include/VecViewCommand.h \
|
||||
|
||||
SOURCES += \
|
||||
VecViewCommand.cpp
|
||||
|
||||
INCLUDEPATH += ../include
|
||||
INCLUDEPATH += ../CallManage
|
||||
INCLUDEPATH += ../../Slfio/include
|
||||
INCLUDEPATH += ../../common
|
||||
INCLUDEPATH += ../../BaseFun/include
|
||||
INCLUDEPATH += ../../OSGDataModel/include
|
||||
INCLUDEPATH += ../../DataMgr/include
|
||||
|
||||
CONFIG(debug, debug|release){
|
||||
LIBS += -L../../Bin -lslfiod
|
||||
LIBS += -L../../Bin -lBaseFund
|
||||
LIBS += -L../../Bin -lOSGDataModeld
|
||||
LIBS += -L../../Bin -lDataMgrd
|
||||
} else {
|
||||
LIBS += -L../../Bin -lslfio
|
||||
LIBS += -L../../Bin -lBaseFun
|
||||
LIBS += -L../../Bin -lOSGDataModel
|
||||
LIBS += -L../../Bin -lDataMgr
|
||||
}
|
||||
362
OSGFramework/src/VecViewCommand.cpp
Normal file
362
OSGFramework/src/VecViewCommand.cpp
Normal file
|
|
@ -0,0 +1,362 @@
|
|||
#pragma warning(push, 0)
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QColorDialog>
|
||||
|
||||
#include "VecViewCommand.h"
|
||||
// #include "VecSceneManager.h"
|
||||
#include "geometryutils.h"
|
||||
#include "ObjectID.h"
|
||||
// #include "PaiAction.h"
|
||||
#pragma warning(pop)
|
||||
|
||||
BEGIN_OSGGRAPHICS_NAMESPACE;
|
||||
|
||||
sAction::sAction()
|
||||
{
|
||||
bChecked = false;
|
||||
bCheckAble = false;
|
||||
}
|
||||
|
||||
sAction::sAction( QString strIcon1,std::wstring strText1,bool bChecked1,bool bCheckAble1 ,
|
||||
QUuid DigitizerIDOrBuilderOjectID,QString slotFunctionName1,QKeySequence keyShortcut1 )
|
||||
{
|
||||
strIcon = strIcon1;
|
||||
strText = strText1;
|
||||
bChecked = bChecked1;
|
||||
bCheckAble = bCheckAble1;
|
||||
keyShortcut = keyShortcut1;
|
||||
m_DigitizerIDOrBuilderOjectID = DigitizerIDOrBuilderOjectID;
|
||||
slotFunctionName = slotFunctionName1;
|
||||
}
|
||||
|
||||
QMap<QUuid,sAction > *g_pMapAction = NULL;
|
||||
OSGFRAMEWORK_EXPORT QMap<QUuid,sAction >& _GetMapActionData()
|
||||
{
|
||||
if( !g_pMapAction )
|
||||
{
|
||||
g_pMapAction = new QMap<QUuid,sAction >();
|
||||
}
|
||||
|
||||
return *g_pMapAction ;
|
||||
}
|
||||
|
||||
QUuid CVecViewCommand::GetDigitizerIDByViewCommandID( QUuid viewCommandID )
|
||||
{
|
||||
QMap<QUuid,sAction >& map = _GetMapActionData();
|
||||
if( !map.contains( viewCommandID ) )
|
||||
{
|
||||
return QUuid();
|
||||
}
|
||||
|
||||
//得到digitizer ID or Builder object ID
|
||||
QUuid DigitizerID = map[viewCommandID].m_DigitizerIDOrBuilderOjectID;
|
||||
if( DigitizerID.isNull( ) ) return DigitizerID;
|
||||
|
||||
// //是否是digitizer ID
|
||||
// if( !CVecDigitizer::GetFatory().IsSupport( DigitizerID ) )
|
||||
// {
|
||||
// DigitizerID = QUuid();
|
||||
// }
|
||||
return DigitizerID;
|
||||
}
|
||||
|
||||
bool _SlotDigitizerOrBuilder( CVecViewCommand &viewCommand,QUuid viewCommandID,bool bShow )
|
||||
{
|
||||
//无viewCommandID
|
||||
QMap<QUuid,sAction >& map = _GetMapActionData();
|
||||
if( !map.contains( viewCommandID ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//得到digitizer ID or Builder object ID
|
||||
QUuid id = map[viewCommandID].m_DigitizerIDOrBuilderOjectID;
|
||||
if( id.isNull( ) ) return false ;
|
||||
|
||||
bool bSucces(false);
|
||||
|
||||
// //处理digitizer ID
|
||||
// if( CVecDigitizer::GetFatory().IsSupport( id ) )
|
||||
// {
|
||||
// //特殊处理Well Section window pick ID
|
||||
// if( id == GetDigitizerID_Pick() )
|
||||
// {
|
||||
// if(viewCommand.GetSceneManager()->GetVecWindow()->GetWindowType() ==GetWindowTypeID_QtWellSection()) id = GetDigitizerID_QtWellWindowPick();
|
||||
// else if(viewCommand.GetSceneManager()->GetVecWindow()->GetWindowType() == GetWindowTypeID_QtMultiWellSection()) id = GetDigitizerID_MultiWell();
|
||||
// else if(viewCommand.GetSceneManager()->GetVecWindow()->GetWindowType() == GetWindowTypeID_QtGeoGuideSection() ) id = GetDigitizerID_QtWellWindowPick() ;
|
||||
// }
|
||||
// bSucces = true;
|
||||
// if( bShow)
|
||||
// {
|
||||
// viewCommand.GetSceneManager()->GetEventHander().SwitchDigitizer( id,QUuid() );
|
||||
// }else
|
||||
// {
|
||||
// ///此处特殊处理 单井窗口
|
||||
// if(viewCommand.GetSceneManager()->GetVecWindow()->GetWindowType() ==GetWindowTypeID_QtWellSection()) viewCommand.DoAction( GetDigitizerID_QtWellWindowPick(),true );
|
||||
// else if(viewCommand.GetSceneManager()->GetVecWindow()->GetWindowType() == GetWindowTypeID_QtMultiWellSection()) viewCommand.DoAction( GetDigitizerID_MultiWell(),true );
|
||||
// else if(viewCommand.GetSceneManager()->GetVecWindow()->GetWindowType() == GetWindowTypeID_QtGeoGuideSection() ) viewCommand.DoAction( GetDigitizerID_QtWellWindowPick(),true );
|
||||
// else
|
||||
// {
|
||||
// viewCommand.DoAction( GetDigitizerID_Pick(),true );
|
||||
// }
|
||||
// }
|
||||
// }else
|
||||
// {
|
||||
// //处理Builder Object ID
|
||||
// CVecNodeBuilder *pBuilder = viewCommand.GetSceneManager()->GetBuilder( id );
|
||||
// if( pBuilder )
|
||||
// {
|
||||
// bSucces = true;
|
||||
// pBuilder->SetEnable( bShow );
|
||||
// }
|
||||
// }
|
||||
|
||||
return bSucces;
|
||||
}
|
||||
|
||||
void CVecViewCommand::BuildActionGeneral(CVecViewCommand &viewCommand,QUuid viewCommandID)
|
||||
{
|
||||
viewCommand.AddUIElementToMap( viewCommandID,viewCommand._CreateAction(viewCommandID) );
|
||||
}
|
||||
|
||||
CVecSceneManager* CVecViewCommand::GetSceneManager()
|
||||
{
|
||||
return m_pSceneMgr;
|
||||
}
|
||||
|
||||
QMap< QUuid,sUIELEMENTFunction >* g_MapAction = NULL;
|
||||
|
||||
OSGFRAMEWORK_EXPORT QMap< QUuid,sUIELEMENTFunction >& GetmapUIElementFunc()
|
||||
{
|
||||
if( !g_MapAction )
|
||||
{
|
||||
g_MapAction = new QMap< QUuid,sUIELEMENTFunction >();
|
||||
}
|
||||
|
||||
return *g_MapAction;
|
||||
}
|
||||
|
||||
CVecViewCommand::CVecViewCommand()
|
||||
{
|
||||
m_pSceneMgr = NULL;
|
||||
}
|
||||
|
||||
void CVecViewCommand::slotActionClicked(bool bChecked )
|
||||
{
|
||||
QAction *pAction = dynamic_cast<QAction *>( this->sender() );
|
||||
if( pAction )
|
||||
{
|
||||
DoAction( (QUuid)( pAction->data().toString() ),bChecked );
|
||||
}
|
||||
}
|
||||
|
||||
bool CVecViewCommand::DoAction(QUuid viewCommandID,bool bChecked)
|
||||
{
|
||||
QUuid currentid;
|
||||
// if(m_pSceneMgr&&m_pSceneMgr->GetCurrentDigitzer()) currentid=m_pSceneMgr->GetCurrentDigitzer()->GetDigitizerID();
|
||||
//CWaitCursor waitCursor;
|
||||
bool bSuccess(true);
|
||||
|
||||
// set action state
|
||||
QAction* pAction = GetAction( viewCommandID );
|
||||
if( pAction )
|
||||
{
|
||||
pAction->setChecked( bChecked );
|
||||
}
|
||||
|
||||
//执行槽函数
|
||||
UIELEMENTACTION_FUNC pActionSlot = GetmapUIElementFunc().value(viewCommandID).ActionSlot;
|
||||
if( pActionSlot )
|
||||
{
|
||||
bSuccess = true;
|
||||
(*pActionSlot)(*this,viewCommandID,bChecked);
|
||||
}else
|
||||
{
|
||||
bSuccess = _SlotDigitizerOrBuilder( *this,viewCommandID,bChecked );
|
||||
}
|
||||
|
||||
// 收集Action互斥数据
|
||||
QList< QList< QUuid > > listMutexAll;
|
||||
if( listMutexAll.empty() )
|
||||
{
|
||||
QList<QUuid> listViewPostion;
|
||||
listViewPostion << GetViewCmdID_ViewAbove() << GetViewCmdID_ViewBelow() << GetViewCmdID_ViewEast()
|
||||
<< GetViewCmdID_ViewWest()<< GetViewCmdID_ViewSouth()<< GetViewCmdID_ViewNorth();
|
||||
listMutexAll << listViewPostion;
|
||||
|
||||
// digitizer Action互斥
|
||||
QList<QUuid> listDigitizerModel;
|
||||
{
|
||||
QMap<QUuid,sAction >&mapAction = _GetMapActionData();
|
||||
QMap<QUuid,sAction >::Iterator it = mapAction.begin();
|
||||
for( ; it!= mapAction.end() ; ++it )
|
||||
{
|
||||
// if( CVecDigitizer::GetFatory().IsSupport( it.value().m_DigitizerIDOrBuilderOjectID ) )
|
||||
// {
|
||||
// listDigitizerModel << it.key();
|
||||
// }
|
||||
}
|
||||
}
|
||||
listMutexAll << listDigitizerModel;
|
||||
}
|
||||
|
||||
//执行Action互斥
|
||||
if( bChecked )
|
||||
{
|
||||
foreach( QList< QUuid > listMutex,listMutexAll )
|
||||
{
|
||||
if( !listMutex.contains(viewCommandID) ) continue;
|
||||
|
||||
foreach( QUuid eOther,listMutex )
|
||||
{
|
||||
if( eOther != viewCommandID )
|
||||
{
|
||||
QAction *pActionOther = GetAction( eOther );
|
||||
if( pActionOther )
|
||||
{
|
||||
pActionOther->setChecked( false );
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return bSuccess ;
|
||||
}
|
||||
|
||||
QAction* CVecViewCommand::GetAction( QUuid viewCommandID,bool bCreateIfNotExist )
|
||||
{
|
||||
//创建Action
|
||||
if( !m_mapUIElement.contains( viewCommandID ) )
|
||||
{
|
||||
QList< QUuid > listTypes;
|
||||
listTypes << viewCommandID;
|
||||
if( bCreateIfNotExist )
|
||||
{
|
||||
CreatActions( listTypes );
|
||||
}
|
||||
}
|
||||
if(m_mapUIElement.contains( viewCommandID ) )
|
||||
{
|
||||
return dynamic_cast<QAction* >( m_mapUIElement.value( viewCommandID ) );
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void CVecViewCommand::CreatActions( QList<QUuid> listUIElementType )
|
||||
{
|
||||
QMap<QUuid,sAction >&mapAction = _GetMapActionData();
|
||||
foreach( QUuid viewCommandID,listUIElementType )
|
||||
{
|
||||
//已经有了
|
||||
if( m_mapUIElement.contains( viewCommandID ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// 如果是有ID,但Digitizer 或Builder都没有实现,那么就不创建此Action
|
||||
if( mapAction.contains( viewCommandID ) )
|
||||
{
|
||||
QUuid id = mapAction[viewCommandID].m_DigitizerIDOrBuilderOjectID;
|
||||
// if( !id.isNull() )
|
||||
// {
|
||||
// bool bDigitizerID = CVecDigitizer::GetFatory().IsSupport( id ) ;
|
||||
// bool bBuilderID = false;
|
||||
// if( m_pSceneMgr )
|
||||
// {
|
||||
// bBuilderID = m_pSceneMgr->GetBuilder( id ) ? true : false;
|
||||
// }
|
||||
// if( (!bDigitizerID) && (!bBuilderID) )
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
//创建此Action
|
||||
BUILDUIELEMENT_FUNC pCreateFunction = GetmapUIElementFunc().value( viewCommandID).buildFunc;
|
||||
if( pCreateFunction )
|
||||
{
|
||||
(*pCreateFunction)(*this,viewCommandID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QAction* CVecViewCommand::_CreateAction( QUuid viewCommandID )
|
||||
{
|
||||
QMap<QUuid,sAction >&mapAction = _GetMapActionData();
|
||||
if( !mapAction.contains(viewCommandID) ) return NULL;
|
||||
|
||||
// 根据插件注册的元数据创建QAction
|
||||
QAction *pAction( NULL );
|
||||
{
|
||||
sAction &sAction = mapAction[viewCommandID];
|
||||
|
||||
// pAction = new gui::PaiAction( sAction.strIcon.isEmpty() ? QIcon() : QIcon( ::GetImagePath() + sAction.strIcon ),
|
||||
// QStringFromWCharArray(sAction.strText.c_str(),-1 ),m_pSceneMgr ? dynamic_cast<QObject*>(m_pSceneMgr->GetVecViwer()) : (QObject*)this );
|
||||
|
||||
pAction->setData( viewCommandID.toString() );
|
||||
pAction->setCheckable( sAction.bCheckAble );
|
||||
pAction->setChecked( sAction.bChecked );
|
||||
if( !sAction.keyShortcut.isEmpty() )
|
||||
{
|
||||
pAction->setShortcut( sAction.keyShortcut );
|
||||
}
|
||||
|
||||
connect( pAction,SIGNAL(triggered ( bool )),SLOT(slotActionClicked(bool)) );
|
||||
}
|
||||
return pAction ;
|
||||
}
|
||||
|
||||
void CVecViewCommand::AddUIElementToMap( QUuid viewCommandID,QObject *pUI )
|
||||
{
|
||||
m_mapUIElement[viewCommandID] = pUI;
|
||||
|
||||
//Do action
|
||||
QAction *pAction = dynamic_cast<QAction *>(pUI );
|
||||
if( pAction && pAction->isCheckable() )
|
||||
{
|
||||
DoAction( viewCommandID,pAction->isChecked() );
|
||||
}
|
||||
}
|
||||
|
||||
bool CVecViewCommand::GetActionVisble( QUuid viewCommandID )
|
||||
{
|
||||
bool bVisble(false);
|
||||
|
||||
QAction *pAction = GetAction( viewCommandID,false );
|
||||
if( pAction )
|
||||
{
|
||||
bVisble = pAction->isChecked() && pAction->isEnabled();
|
||||
}
|
||||
|
||||
return bVisble ;
|
||||
}
|
||||
|
||||
void CVecViewCommand::InitSceneManager(CVecSceneManager *pSceneManager)
|
||||
{
|
||||
m_pSceneMgr = pSceneManager;
|
||||
}
|
||||
|
||||
QMap<QUuid,QObject* >& CVecViewCommand::GetAllActions()
|
||||
{
|
||||
return m_mapUIElement;
|
||||
}
|
||||
|
||||
OSGFRAMEWORK_EXPORT void RegisterViewAction( QUuid viewCommandID,sAction s,UIELEMENTACTION_FUNC pSlotAction)
|
||||
{
|
||||
_GetMapActionData()[ viewCommandID ] = s;
|
||||
GetmapUIElementFunc()[ viewCommandID ] = sUIELEMENTFunction( CVecViewCommand::BuildActionGeneral,
|
||||
pSlotAction );
|
||||
}
|
||||
|
||||
OSGFRAMEWORK_EXPORT CVecViewCommand& GetGlobalCommand()
|
||||
{
|
||||
static CVecViewCommand s;
|
||||
return s;
|
||||
}
|
||||
|
||||
END_OSGGRAPHICS_NAMESPACE;
|
||||
Loading…
Reference in New Issue
Block a user