LAMPCAE/src/PluginWBFZExchangePlugin/OCCViewer/DocumentCommon.h

210 lines
7.1 KiB
C++

// Copyright (c) 2020 OPEN CASCADE SAS
//
// This file is part of the examples of the Open CASCADE Technology software library.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
#ifndef DOCUMENT_COMMON_OVERVIEW_H
#define DOCUMENT_COMMON_OVERVIEW_H
#include "WBFZExchangePluginAPI.h"
#include "AllHead.h"
#include <qDebug>
#include "TaskTreeClass.h"
#include "TaskNodeList.h"
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 文件模型控制
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//! Implements visualization of samples content
class DocumentCommon : public QTreeWidget
{
Q_OBJECT
public:
Q_INVOKABLE DocumentCommon(QWidget*);
~DocumentCommon() { }
//=========================================
// 任务节点管理
//=========================================
public: // 数据管理层次
QTreeWidgetItem* dataRoot; // 根节点
QTreeWidgetItem* taskRoot;
QTreeWidgetItem* modelRoot; // 数据类型
QTreeWidgetItem* imageRoot;
QTreeWidgetItem* pointCloudRoot;
QTreeWidgetItem* atriTableRoot;
QTreeWidgetItem* fekoSimulationRoot; // 任务类型
QTreeWidgetItem* exportScatteringRoot;
QTreeWidgetItem* fekoScatteringRoot;
QMap<QString, QTreeWidgetItem*> dataMap; // 数据名-节点项绑定
public slots:
void initTaskTreeRootNode(); //初始化任务树
TaskNode* getItemByName(QString name);// 场景节点
void addTaskNode(TaskNode*); // 添加节点
void removeTaskNode(QString itemName); // 移除节点
bool addUniqueNode(QTreeWidgetItem* item); // 添加唯一性节点
QTreeWidgetItem* newQTaskTreeWidgetItem(TaskNode* node); // 创建任务节点
void renameTaskNode(QString olditemName,QString newitemName); // 重命名节点
void copyNewNode(TaskNode* newNode);
void UpdateItemParantNode(QTreeWidgetItem* n, QTreeWidgetItem* p = nullptr);// 更变父节点,如果是空指针,标识提升为根节点
public slots: // 添加 文件节点分布
void addOCCTObjectItem(TaskNode*); // 加载数据
void addImageObjectItem(TaskNode*);
void addPointCloudObjectItem(TaskNode*); // 功能待实现
void addAtriTableObjectItem(TaskNode*); // 功能待实现
void addScatterSettingTaskItem(TaskNode*); // 加载任务
void addFEKOResultDataConvertItem(TaskNode*);
void addFEKOSimulationImageSettingItem(TaskNode*);
void addOCCTObjItem(TopoDS_Shape shape, QString name, bool ishow = true);// 添加模型
void addShapeDsItem(QString filepath); // 加载模型
public slots: // 移除节点
void removeTaskNode(QTreeWidgetItem*);
public slots: // 任务节点,共有内容
void ContentListContextMenu_UndoAction(); // 撤销
void ContentListContextMenu_RedoAction(); // 重做
void ContentListContextMenu_BatchExportAction();
public slots:
void initDocumentCommonContextMenu(); // 初始化右键菜单
void ShowContentListContextMenu(QPoint p);
//=========================================
// 模型操作
//=========================================
private:// 私有变量
bool isActivateGridMesh ;
bool isActivateAxisGrid;
Graphic3d_GraduatedTrihedron aTrihedron_aixs;
public:// 公开变量
Handle(V3d_Viewer) myViewer;
Handle(AIS_InteractiveContext) myContext;
bool myContextIsEmpty;
NCollection_Vector<Handle(AIS_InteractiveObject)> myObject3d; // 控制器列表
QUndoStack* m_undoStack;
QSet<QString> ItemSets;
QMenu* ContentListContextMenu;
OCCTopoShapeTreeViewer* ShapeInfomationWindows; //展示被选择的模型
public:
Handle(AIS_InteractiveObject) ShowTopoDS_Shape(TopoDS_Shape& shape); // 显示模型
bool HideTopoDS_Shape(Handle(AIS_InteractiveObject) aShape); // 隐藏模型
bool ShowTopoDs_ShapeAIS(Handle(AIS_InteractiveObject) aShape); // 显示模型
bool RemoveTopoDS_Shape(Handle(AIS_InteractiveObject) aShape); // 移除模型
const Handle(AIS_InteractiveContext)& getContext() { return myContext; }
const Handle(V3d_Viewer)& getViewer() { return myViewer; }
void setViewer(const Handle(V3d_Viewer)& theViewer) { myViewer = theViewer; }
void SetObjects(const NCollection_Vector<Handle(AIS_InteractiveObject)>& theObjects, Standard_Boolean theDisplayShaded = Standard_False);
void ClearShape(); // 清除模型
bool IsEmpty() const { return myContextIsEmpty; }
void AppendCube(); // 增加视觉立方体
void InitAixs(); // 增加三维坐标轴
std::shared_ptr<Bnd_Box> getSenceExtend(); // 场景数据获取
std::shared_ptr<Bnd_Box> getSenceExtend(QString name);
signals:
void selectionChanged();
void sendCloseDocument(DocumentCommon*);
private:
Handle(V3d_Viewer) Viewer(const Standard_ExtString theName,
const Standard_CString theDomain,
const Standard_Real theViewSize,
const V3d_TypeOfOrientation theViewProj,
const Standard_Boolean theComputedMode,
const Standard_Boolean theDefaultComputedMode);
public slots:
void ShowOrHideActivateGridMesh();
void ShowOrHideActivateAxisGris();
bool getActivateGridMesh();
bool getActivateAxisGrid();
void VerticesSelect3dSample();
void EdgesSelect3dSample();
void FacesSelect3dSample();
void NeutralPointSelect3dSample();
//void ShapeModifyShape(OCCTShapeModelNode* dataItem); // 模型修改
public:
void OpenOCCTShapeFile();
void SaveModelFile();
void oncheckBoxStateChanged(int state);
TopoDS_Shape MergeCOntextAllModels();
public slots: // 模型窗口右键菜单
///////////////////////////////////////////////////
// 获取view窗体中的 选择模型
///////////////////////////////////////////////////
signals:
void SelectObjectList(const TopoDS_Shape& selectShape);
void ShowSelectItemFullExtend(const TopoDS_Shape& shape);
public slots:
void ViewerMousePressEvent(QMouseEvent* theEvent);
void ViewerMouseReleaseEvent(QMouseEvent* theEvent);
void SelectItemFullShow(const TopoDS_Shape& shape);
void setShapeInfomationWindows(OCCTopoShapeTreeViewer* ShapeInfomationWindows);
public:
TopoDS_Shape getTopoDSShape(const Handle(AIS_InteractiveObject)& aisObject);
void showSelectShape(const TopoDS_Shape& selectShape);
};
#endif