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.

204 lines
4.4 KiB
C

1 month ago
#pragma once
#include <osg/Geode>
#include <osg/Group>
#include <osg/Switch>
#include <osgGA/GUIEventAdapter>
#include <osgGA/GUIActionAdapter>
#include "../Assist/XJOSGCommon.h"
#include "XJObjectManager/XJObject.h"
#include "ViewCommon.h"
//ģ<>͵<EFBFBD>ά<EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>ά
enum ModelDimension {MODEL_2D, MODEL_3D};
class CXJOSGObject : public /*osg::Group*/osg::Geode
{
public:
enum {OSG_BASE_KEY = 10000};
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CXJOSGObject();
CXJOSGObject(CXJObject * pobj);
//<2F><EFBFBD><E9B9B9><EFBFBD><EFBFBD>
virtual ~CXJOSGObject();
/***************<2A><EFBFBD><E9BAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>д********************/
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
virtual osg::Geode* CreateObject() = 0;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
virtual int Update(EOSGUpdateType updateType = UPDATE_ALL);
virtual int SetValue(CXJObject *obj);
//<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
void SetColor(const osg::Vec4& color){m_color = color;}
osg::Vec4& GetColor(){return m_color;}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰһ<C7B0><D2BB><EFBFBD><EFBFBD>ɫ
void SetPreColor(const osg::Vec4& color){m_preColor = color;}
osg::Vec4& GetPreColor(){return m_preColor;}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>ɫ
void SetHilightColor(const osg::Vec4& color) {m_hilightColor = color;}
osg::Vec4 GetHilightColor() {return m_hilightColor;}
int GetKey(){return m_3dKey;}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void SetType(EXJObjectType type){m_type = type;}
EXJObjectType GetType(){return m_type;}
//<2F><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ״̬
void SetVisible(bool visible)
{
if(m_pObject)
{
m_pObject->SetVisibility(visible);
m_visible = visible;
}
}
bool GetVisible(){return m_visible;}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
void SetTransparencyLevel(float translevel);
float GetTransparencyLevel() {return m_color[3];}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>
void SetTransparency(bool transparent)
{
if(m_pObject)
{
m_pObject->SetTransparent(transparent);
m_transparent = transparent;
m_nTransparent = m_pObject->GetTransparentDegree();
}
if (transparent)
{
m_color[3] = m_nTransparent;
m_hilightColor[3] = m_nTransparent;
}
else
{
m_color[3] = 1.0;
m_hilightColor[3] = 1.0;
}
}
//<2F><>ȡ<EFBFBD><C8A1>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>״̬
bool GetTransparencyStatus();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>ʾ״̬
void SetWireframe(bool wireframe)
{
if(m_pObject)
{
m_pObject->SetWireframe(wireframe);
m_wireframe = wireframe;
}
}
bool GetWireframe(){return m_wireframe;}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>״̬<D7B4><CCAC>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false
bool GetHilightStatus() const {return m_bHiLightStatus;}
void SetHilightStatus(bool _status) {m_bHiLightStatus = _status;}
void SetSwitchParent(osg::Switch *parent){m_switch = parent;}
osg::Switch* GetSwitchParent() {return m_switch;}
void SetMatrixTransformParent(osg::MatrixTransform *parent){m_mt = parent;}
osg::MatrixTransform* GetMatrixTransformParent() {return m_mt;}
void SetRoot(osg::Group *root){m_root = root;}
osg::Group* GetRoot() {return m_root;}
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD>͵<EFBFBD>ά<EFBFBD><CEAC>
ModelDimension GetModelDimesion() {return m_2Dor3D;}
//ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
virtual void DeleteTempOSGObject() {}
//<2F><>ȡ<EFBFBD><C8A1>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CXJObject* GetOmObject() const {return m_pObject;}
void SetOmObject(CXJObject* pObj) {m_pObject = pObj;}
/*******************<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>************************/
virtual bool selectedAndMove(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa ) {return true;}
//Hilight selected obj with color
void HilightWithColor(osg::Vec4& color = osg::Vec4(0.7, 0.0, 0.0, 1.0));
//unlight selected color;
void UnHilight();
virtual void HilightWithShowSize() {}
virtual void UnHlightWithShowSize() {}
void SetHilightIdx(unsigned idx) { m_hilightIdx = idx; }
protected:
virtual void UpdatePosition();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
virtual void UpdateColor();
//<2F><><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD>
virtual void UpdateWireframe();
//<2F><><EFBFBD>µ<EFBFBD>ֵ<EFBFBD><D6B5>
virtual void UpdateIsopleth();
//<2F><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>
virtual void UpdateVisible();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void UpdateMeshPoint();
virtual void UpdateWell();
virtual void UpdateFault();
private:
//<2F><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3dKey
int Generate3DKey();
protected:
//ÿ<><C3BF>CXJOSGObj<62><6A><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>CXJObject*
CXJObject* m_pObject;
osg::Group* m_root;
osg::Switch* m_switch;
osg::MatrixTransform* m_mt;
int m_3dKey;
//ģ<>͵<EFBFBD>ά<EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><32><CEAC><EFBFBD><EFBFBD><33><CEAC>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>
ModelDimension m_2Dor3D;
EXJObjectType m_type;
//m_colorΪ<72><CEAA>ǰ<EFBFBD><C7B0>ɫ<EFBFBD><C9AB>m_preColorΪ<72><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ɫ
osg::Vec4 m_color;
osg::Vec4 m_preColor;
osg::Vec4 m_hilightColor;
bool m_bHiLightStatus; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>Ĭ<EFBFBD><C4AC>Ϊfalse
//bool m_bSelected;
bool m_visible;
bool m_wireframe;
bool m_transparent;
float m_nTransparent;
EDisplayModel m_displayModel;
unsigned int m_hilightIdx;
};