From fc7115aef54ac95f12114acafefa36b656585361 Mon Sep 17 00:00:00 2001 From: Hugues Delorme Date: Wed, 15 Mar 2023 11:39:06 +0100 Subject: [PATCH 1/4] Use new OccHandle<> type alias for OpenCascade handles This replaces all occurences of Handle(), Handle_, and opencascade::handle<> --- src/app/dialog_inspect_xde.cpp | 37 ++++++++++--------- src/app/dialog_inspect_xde.h | 5 ++- src/app/dialog_save_image_view.cpp | 2 +- src/app/dialog_save_image_view.h | 5 ++- ...ocument_tree_node_properties_providers.cpp | 4 +- src/app/main.cpp | 4 +- src/app/widget_clip_planes.cpp | 8 ++-- src/app/widget_clip_planes.h | 7 ++-- src/app/widget_gui_document.cpp | 2 +- src/app/widget_occ_view.cpp | 36 +++++++++--------- src/app/widget_occ_view.h | 24 ++++++------ src/app/widget_occ_view_impl.cpp | 25 +++++++------ src/base/application.cpp | 20 +++++----- src/base/application.h | 11 +++--- src/base/application_ptr.h | 3 +- src/base/brep_utils.cpp | 6 +-- src/base/brep_utils.h | 3 +- src/base/caf_utils.cpp | 4 +- src/base/caf_utils.h | 7 ++-- src/base/document.cpp | 2 +- src/base/document_ptr.h | 3 +- src/base/mesh_access.cpp | 8 ++-- src/base/mesh_access.h | 3 +- src/base/mesh_utils.cpp | 22 ++++++----- src/base/mesh_utils.h | 16 ++++---- src/base/point_cloud_data.cpp | 8 ++-- src/base/point_cloud_data.h | 16 ++++---- src/base/string_conv.h | 21 ++++++----- src/base/tkernel_utils.cpp | 2 +- src/base/tkernel_utils.h | 8 ++-- src/base/triangulation_annex_data.cpp | 6 +-- src/base/triangulation_annex_data.h | 9 +++-- src/base/xcaf.cpp | 26 ++++++------- src/base/xcaf.h | 16 ++++---- src/cli/main.cpp | 4 +- src/graphics/ais_text.cpp | 14 +++---- src/graphics/ais_text.h | 14 +++---- src/graphics/graphics_create_driver.cpp | 6 ++- .../graphics_create_virtual_window.cpp | 6 ++- src/graphics/graphics_mesh_data_source.cpp | 5 ++- src/graphics/graphics_mesh_data_source.h | 12 +++--- src/graphics/graphics_mesh_object_driver.cpp | 18 ++++----- src/graphics/graphics_mesh_object_driver.h | 2 +- src/graphics/graphics_object_driver.h | 2 +- src/graphics/graphics_object_ptr.h | 3 +- src/graphics/graphics_owner_ptr.h | 3 +- .../graphics_point_cloud_object_driver.h | 2 +- src/graphics/graphics_scene.cpp | 24 ++++++------ src/graphics/graphics_scene.h | 2 +- src/graphics/graphics_shape_object_driver.cpp | 2 +- src/graphics/graphics_shape_object_driver.h | 2 +- src/graphics/graphics_utils.cpp | 2 +- src/graphics/graphics_utils.h | 17 +++++---- src/gui/gui_document.cpp | 20 +++++----- src/gui/gui_document.h | 8 ++-- src/gui/v3d_view_camera_animation.cpp | 8 ++-- src/gui/v3d_view_camera_animation.h | 19 +++++----- src/gui/v3d_view_controller.cpp | 2 +- src/gui/v3d_view_controller.h | 7 ++-- src/io_dxf/io_dxf.cpp | 20 +++++----- src/io_gmio/io_gmio_amf_writer.cpp | 2 +- src/io_gmio/io_gmio_amf_writer.h | 2 +- src/io_image/io_image.cpp | 18 ++++----- src/io_image/io_image.h | 6 +-- src/io_occ/io_occ_base_mesh.cpp | 2 +- src/io_occ/io_occ_brep.cpp | 6 +-- src/io_occ/io_occ_caf.cpp | 16 ++++---- src/io_occ/io_occ_caf.h | 8 ++-- src/io_occ/io_occ_gltf_writer.cpp | 2 +- src/io_occ/io_occ_obj_writer.cpp | 2 +- src/io_occ/io_occ_step.cpp | 14 ++++--- src/io_occ/io_occ_stl.cpp | 4 +- src/io_occ/io_occ_stl.h | 3 +- src/io_off/io_off_reader.cpp | 2 +- src/io_off/io_off_writer.cpp | 4 +- src/io_ply/io_ply_reader.cpp | 2 +- src/io_ply/io_ply_writer.cpp | 4 +- src/measure/measure_display.cpp | 6 +-- src/measure/measure_display.h | 32 ++++++++-------- src/measure/measure_tool_brep.cpp | 7 ++-- src/qtcommon/qstring_conv.h | 8 ++-- tests/test_base.cpp | 6 +-- 82 files changed, 400 insertions(+), 359 deletions(-) diff --git a/src/app/dialog_inspect_xde.cpp b/src/app/dialog_inspect_xde.cpp index 0edcc896..94ebaa9d 100644 --- a/src/app/dialog_inspect_xde.cpp +++ b/src/app/dialog_inspect_xde.cpp @@ -9,6 +9,7 @@ #include "../base/application.h" #include "../base/brep_utils.h" #include "../base/caf_utils.h" +#include "../base/occ_handle.h" #include "../base/meta_enum.h" #include "../base/settings.h" #include "../base/tkernel_utils.h" @@ -80,7 +81,7 @@ static QStringUtils::TextOptions appDefaultTextOptions() static void loadLabelAttributes(const TDF_Label& label, QTreeWidgetItem* treeItem) { for (TDF_AttributeIterator it(label); it.More(); it.Next()) { - const Handle_TDF_Attribute ptrAttr = it.Value(); + const OccHandle ptrAttr = it.Value(); const Standard_GUID& attrId = ptrAttr->ID(); QString text; QString value; @@ -198,7 +199,7 @@ static QTreeWidgetItem* createPropertyTreeItem(const QString& text, const QStrin return itemProperty; } -static QTreeWidgetItem* createPropertyTreeItem(const QString& text, const Handle(TCollection_HAsciiString)& value) +static QTreeWidgetItem* createPropertyTreeItem(const QString& text, const OccHandle& value) { return createPropertyTreeItem(text, to_QString(value)); } @@ -264,7 +265,7 @@ static QTreeWidgetItem* createPropertyTreeItem(const QString& text, const TopoDS } static void loadLabelMaterialProperties( - const TDF_Label& label, const Handle_XCAFDoc_MaterialTool& materialTool, QTreeWidgetItem* treeItem) + const TDF_Label& label, const OccHandle& materialTool, QTreeWidgetItem* treeItem) { QList listItemProp; auto fnAddItem = [&](QTreeWidgetItem* item) { listItemProp.push_back(item); }; @@ -273,11 +274,11 @@ static void loadLabelMaterialProperties( QStringUtils::TextOptions densityValueTextOptions = appDefaultTextOptions(); densityValueTextOptions.unitDecimals = 6; - Handle(TCollection_HAsciiString) name; - Handle(TCollection_HAsciiString) description; + OccHandle name; + OccHandle description; double density; - Handle(TCollection_HAsciiString) densityName; - Handle(TCollection_HAsciiString) densityValueType; + OccHandle densityName; + OccHandle densityValueType; if (materialTool->GetMaterial(label, name, description, density, densityName, densityValueType)) { fnAddItem(createPropertyTreeItem("Name", to_QString(name))); fnAddItem(createPropertyTreeItem("Description", to_QString(description))); @@ -397,7 +398,7 @@ class ImageFileTreeWidgetItem : public QTreeWidgetItem { mutable std::unordered_map m_mapColumnItemData; }; -static QTreeWidgetItem* createPropertyTreeItem(const QString& text, const Handle(Image_Texture)& imgTexture) +static QTreeWidgetItem* createPropertyTreeItem(const QString& text, const OccHandle& imgTexture) { if (imgTexture.IsNull()) return static_cast(nullptr); @@ -439,7 +440,7 @@ static QTreeWidgetItem* createPropertyTreeItem(const QString& text, const Handle #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 5, 0) static void loadLabelVisMaterialProperties( const TDF_Label& label, - const Handle_XCAFDoc_VisMaterialTool& visMaterialTool, + const OccHandle& visMaterialTool, QTreeWidgetItem* treeItem) { QList listItemProp; @@ -447,7 +448,7 @@ static void loadLabelVisMaterialProperties( fnAddItem(createPropertyTreeItem("IsMaterial", visMaterialTool->IsMaterial(label))); fnAddItem(createPropertyTreeItem("IsSetShapeMaterial", visMaterialTool->IsSetShapeMaterial(label))); - auto fnCreateVisMaterialTreeItem = [](const QString& text, const Handle_XCAFDoc_VisMaterial& material) { + auto fnCreateVisMaterialTreeItem = [](const QString& text, const OccHandle& material) { auto item = new QTreeWidgetItem; item->setText(0, text); item->addChild(createPropertyTreeItem("HasPbrMaterial", material->HasPbrMaterial())); @@ -499,13 +500,13 @@ static void loadLabelVisMaterialProperties( }; if (visMaterialTool->IsMaterial(label)) { - Handle_XCAFDoc_VisMaterial visMaterial = visMaterialTool->GetMaterial(label); + OccHandle visMaterial = visMaterialTool->GetMaterial(label); if (!visMaterial.IsNull() && !visMaterial->IsEmpty()) fnAddItem(fnCreateVisMaterialTreeItem("Material", visMaterial)); } if (visMaterialTool->IsSetShapeMaterial(label)) { - Handle_XCAFDoc_VisMaterial visMaterial = visMaterialTool->GetShapeMaterial(label); + OccHandle visMaterial = visMaterialTool->GetShapeMaterial(label); if (!visMaterial.IsNull() && !visMaterial->IsEmpty()) fnAddItem(fnCreateVisMaterialTreeItem("ShapeMaterial", visMaterial)); } @@ -516,7 +517,7 @@ static void loadLabelVisMaterialProperties( static void loadLabelColorProperties( const TDF_Label& label, - const Handle_XCAFDoc_ColorTool& colorTool, + const OccHandle& colorTool, QTreeWidgetItem* treeItem) { QList listItemProp; @@ -545,7 +546,7 @@ static void loadLabelColorProperties( static void loadLabelShapeProperties( const TDF_Label& label, - const Handle_XCAFDoc_ShapeTool& shapeTool, + const OccHandle& shapeTool, QTreeWidgetItem* treeItem) { QList listItemProp; @@ -588,7 +589,7 @@ static void loadLabelDimensionProperties(const TDF_Label& label, QTreeWidgetItem if (!dimAttr) return; - Handle_XCAFDimTolObjects_DimensionObject dimObject = dimAttr->GetObject(); + OccHandle dimObject = dimAttr->GetObject(); fnAddItem(createPropertyTreeItem("SemanticName", dimObject->GetSemanticName())); fnAddItem(createPropertyTreeItem( "Qualifier", MetaEnum::nameWithoutPrefix(dimObject->GetQualifier(), "XCAFDimTolObjects_"))); @@ -659,7 +660,7 @@ static void loadLabelDatumProperties(const TDF_Label& label, QTreeWidgetItem* tr if (!datumAttr) return; - Handle_XCAFDimTolObjects_DatumObject datumObject = datumAttr->GetObject(); + OccHandle datumObject = datumAttr->GetObject(); fnAddItem(createPropertyTreeItem("SemanticName", datumObject->GetSemanticName())); fnAddItem(createPropertyTreeItem("Name", datumObject->GetName())); { @@ -712,7 +713,7 @@ static void loadLabelGeomToleranceProperties(const TDF_Label& label, QTreeWidget if (!tolAttr) return; - Handle_XCAFDimTolObjects_GeomToleranceObject tolObject = tolAttr->GetObject(); + OccHandle tolObject = tolAttr->GetObject(); fnAddItem(createPropertyTreeItem("SemanticName", tolObject->GetSemanticName())); fnAddItem(createPropertyTreeItem( "Type", MetaEnum::nameWithoutPrefix(tolObject->GetType(), "XCAFDimTolObjects_"))); @@ -796,7 +797,7 @@ DialogInspectXde::~DialogInspectXde() delete m_ui; } -void DialogInspectXde::load(const Handle_TDocStd_Document& doc) +void DialogInspectXde::load(const OccHandle& doc) { m_doc = doc; if (!XCAFDoc_DocumentTool::IsXCAFDocument(doc)) { diff --git a/src/app/dialog_inspect_xde.h b/src/app/dialog_inspect_xde.h index b65c8b6c..cc4a9a5f 100644 --- a/src/app/dialog_inspect_xde.h +++ b/src/app/dialog_inspect_xde.h @@ -6,6 +6,7 @@ #pragma once +#include "../base/occ_handle.h" #include #include class QTreeWidgetItem; @@ -18,13 +19,13 @@ class DialogInspectXde : public QDialog { DialogInspectXde(QWidget* parent = nullptr); ~DialogInspectXde(); - void load(const Handle_TDocStd_Document& doc); + void load(const OccHandle& doc); private: void onLabelTreeWidgetItemClicked(QTreeWidgetItem* item, int column); class Ui_DialogInspectXde* m_ui = nullptr; - Handle_TDocStd_Document m_doc; + OccHandle m_doc; }; } // namespace Mayo diff --git a/src/app/dialog_save_image_view.cpp b/src/app/dialog_save_image_view.cpp index 960229ee..4413ffa4 100644 --- a/src/app/dialog_save_image_view.cpp +++ b/src/app/dialog_save_image_view.cpp @@ -33,7 +33,7 @@ static QImage qtImageTemp(const Image_PixMap& occImg) } // namespace Internal -DialogSaveImageView::DialogSaveImageView(const Handle_V3d_View& view, QWidget* parent) +DialogSaveImageView::DialogSaveImageView(const OccHandle& view, QWidget* parent) : QDialog(parent), m_ui(new Ui_DialogSaveImageView), m_view(view) diff --git a/src/app/dialog_save_image_view.h b/src/app/dialog_save_image_view.h index 66162971..7970fe49 100644 --- a/src/app/dialog_save_image_view.h +++ b/src/app/dialog_save_image_view.h @@ -6,6 +6,7 @@ #pragma once +#include "../base/occ_handle.h" #include #include @@ -16,7 +17,7 @@ namespace Mayo { class DialogSaveImageView : public QDialog { Q_OBJECT public: - DialogSaveImageView(const Handle_V3d_View& view, QWidget* parent = nullptr); + DialogSaveImageView(const OccHandle& view, QWidget* parent = nullptr); ~DialogSaveImageView(); private: @@ -27,7 +28,7 @@ class DialogSaveImageView : public QDialog { bool createImageView(Image_PixMap* img) const; class Ui_DialogSaveImageView* m_ui = nullptr; - Handle_V3d_View m_view; + OccHandle m_view; }; } // namespace Mayo diff --git a/src/app/document_tree_node_properties_providers.cpp b/src/app/document_tree_node_properties_providers.cpp index 70f7950f..8e59aa53 100644 --- a/src/app/document_tree_node_properties_providers.cpp +++ b/src/app/document_tree_node_properties_providers.cpp @@ -104,7 +104,7 @@ class XCaf_DocumentTreeNodePropertiesProvider::Properties : public PropertyGroup // Material { const TDF_Label labelPart = XCaf::isShapeReference(label) ? XCaf::shapeReferred(label) : label; - const Handle_XCAFDoc_Material material = XCaf::shapeMaterial(labelPart); + const OccHandle material = XCaf::shapeMaterial(labelPart); if (material) { m_propertyMaterialDensity.setQuantity(XCaf::shapeMaterialDensity(material)); m_propertyMaterialName.setValue(to_stdString(material->GetName())); @@ -219,7 +219,7 @@ class Mesh_DocumentTreeNodePropertiesProvider::Properties : public PropertyGroup public: Properties(const DocumentTreeNode& treeNode) { - Handle_Poly_Triangulation mesh; + OccHandle mesh; IMeshAccess_visitMeshes(treeNode, [&](const IMeshAccess& access) { mesh = access.triangulation(); }); diff --git a/src/app/main.cpp b/src/app/main.cpp index b08d860c..c06e0ce2 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -65,7 +65,7 @@ namespace Mayo { // Declared in graphics/graphics_create_driver.cpp -void setFunctionCreateGraphicsDriver(std::function fn); +void setFunctionCreateGraphicsDriver(std::function()> fn); // Provides an i18n context for the current file(main.cpp) class Main { @@ -267,7 +267,7 @@ Thumbnail createGuiDocumentThumbnail(GuiDocument* guiDoc, QSize size) params.width = size.width(); params.height = size.height(); params.backgroundColor = QtGuiUtils::toPreferredColorSpace(mayoTheme()->color(Theme::Color::Palette_Window)); - Handle_Image_AlienPixMap pixmap = IO::ImageWriter::createImage(guiDoc, params); + OccHandle pixmap = IO::ImageWriter::createImage(guiDoc, params); if (!pixmap) { qDebug() << "Empty pixmap returned by IO::ImageWriter::createImage()"; return thumbnail; diff --git a/src/app/widget_clip_planes.cpp b/src/app/widget_clip_planes.cpp index fd2387e7..c2e5889a 100644 --- a/src/app/widget_clip_planes.cpp +++ b/src/app/widget_clip_planes.cpp @@ -70,7 +70,7 @@ WidgetClipPlanes::WidgetClipPlanes(GraphicsViewPtr view, QWidget* parent) m_view.redraw(); } else if (property == &appModule->properties()->clipPlanesCappingHatchOn) { - Handle_Graphic3d_TextureMap hatchTexture; + OccHandle hatchTexture; if (m_textureCapping && appModule->properties()->clipPlanesCappingHatchOn) hatchTexture = m_textureCapping; @@ -116,7 +116,7 @@ void WidgetClipPlanes::setClippingOn(bool on) void WidgetClipPlanes::connectUi(ClipPlaneData* data) { UiClipPlane& ui = data->ui; - const Handle_Graphic3d_ClipPlane& gfx = data->graphics; + const OccHandle& gfx = data->graphics; QAbstractSlider* posSlider = ui.posSlider(); QDoubleSpinBox* posSpin = ui.posSpin(); auto signalSpinValueChanged = qOverload(&QDoubleSpinBox::valueChanged); @@ -201,7 +201,7 @@ void WidgetClipPlanes::connectUi(ClipPlaneData* data) } } -void WidgetClipPlanes::setPlaneOn(const Handle_Graphic3d_ClipPlane& plane, bool on) +void WidgetClipPlanes::setPlaneOn(const OccHandle& plane, bool on) { plane->SetOn(on); if (!GraphicsUtils::V3dView_hasClipPlane(m_view.v3dView(), plane)) @@ -242,7 +242,7 @@ void WidgetClipPlanes::createPlaneCappingTexture() const QByteArray fileContents = file.readAll(); const QByteArray filenameUtf8 = file.fileName().toUtf8(); auto fileContentsData = reinterpret_cast(fileContents.constData()); - Handle_Image_AlienPixMap imageCapping = new Image_AlienPixMap; + OccHandle imageCapping = new Image_AlienPixMap; imageCapping->Load(fileContentsData, fileContents.size(), filenameUtf8.constData()); m_textureCapping = new GraphicsTexture2D(imageCapping); m_textureCapping->EnableModulate(); diff --git a/src/app/widget_clip_planes.h b/src/app/widget_clip_planes.h index 13b15625..40cf0f96 100644 --- a/src/app/widget_clip_planes.h +++ b/src/app/widget_clip_planes.h @@ -6,6 +6,7 @@ #pragma once +#include "../base/occ_handle.h" #include "../graphics/graphics_view_ptr.h" #include @@ -47,7 +48,7 @@ class WidgetClipPlanes : public QWidget { }; struct ClipPlaneData { - Handle_Graphic3d_ClipPlane graphics; + OccHandle graphics; UiClipPlane ui; }; @@ -55,7 +56,7 @@ class WidgetClipPlanes : public QWidget { void connectUi(ClipPlaneData* data); - void setPlaneOn(const Handle_Graphic3d_ClipPlane& plane, bool on); + void setPlaneOn(const OccHandle& plane, bool on); void setPlaneRange(ClipPlaneData* data, const Range& range); void createPlaneCappingTexture(); @@ -64,7 +65,7 @@ class WidgetClipPlanes : public QWidget { GraphicsViewPtr m_view; std::vector m_vecClipPlaneData; Bnd_Box m_bndBox; - Handle_Graphic3d_TextureMap m_textureCapping; + OccHandle m_textureCapping; }; } // namespace Mayo diff --git a/src/app/widget_gui_document.cpp b/src/app/widget_gui_document.cpp index 71e56a34..87218f58 100644 --- a/src/app/widget_gui_document.cpp +++ b/src/app/widget_gui_document.cpp @@ -154,7 +154,7 @@ WidgetGuiDocument::WidgetGuiDocument(GuiDocument* guiDoc, QWidget* parent) }); m_guiDoc->viewCameraAnimation()->setBackend(std::make_unique(QEasingCurve::OutExpo)); - m_guiDoc->viewCameraAnimation()->setRenderFunction([=](const Handle_V3d_View& view){ + m_guiDoc->viewCameraAnimation()->setRenderFunction([=](const OccHandle& view){ if (view == m_qtOccView->v3dView()) m_qtOccView->redraw(); }); diff --git a/src/app/widget_occ_view.cpp b/src/app/widget_occ_view.cpp index f907f500..84d6c201 100644 --- a/src/app/widget_occ_view.cpp +++ b/src/app/widget_occ_view.cpp @@ -9,8 +9,8 @@ # include #endif +#include "../base/occ_handle.h" #include "widget_occ_view.h" - #include "occt_window.h" #include @@ -22,7 +22,7 @@ namespace Mayo { static IWidgetOccView::Creator& getWidgetOccViewCreator() { - static IWidgetOccView::Creator fn = [](const Handle_V3d_View& view, QWidget* parent) { + static IWidgetOccView::Creator fn = [](const OccHandle& view, QWidget* parent) { return new QWidgetOccView(view, parent); }; return fn; @@ -33,7 +33,7 @@ void IWidgetOccView::setCreator(IWidgetOccView::Creator fn) getWidgetOccViewCreator() = std::move(fn); } -IWidgetOccView* IWidgetOccView::create(const Handle_V3d_View& view, QWidget* parent) +IWidgetOccView* IWidgetOccView::create(const OccHandle& view, QWidget* parent) { const auto& fn = getWidgetOccViewCreator(); return fn(view, parent); @@ -44,12 +44,12 @@ IWidgetOccView* IWidgetOccView::create(const Handle_V3d_View& view, QWidget* par // Defined in widget_occ_view.cpp bool QOpenGLWidgetOccView_isCoreProfile(); void QOpenGLWidgetOccView_createOpenGlContext(std::function fnCallback); -Handle_Graphic3d_GraphicDriver QOpenGLWidgetOccView_createCompatibleGraphicsDriver(); -bool QOpenGLWidgetOccView_wrapFrameBuffer(const Handle_Graphic3d_GraphicDriver&); -Graphic3d_Vec2i QOpenGLWidgetOccView_getDefaultframeBufferViewportSize(const Handle_Graphic3d_GraphicDriver&); +OccHandle QOpenGLWidgetOccView_createCompatibleGraphicsDriver(); +bool QOpenGLWidgetOccView_wrapFrameBuffer(const OccHandle&); +Graphic3d_Vec2i QOpenGLWidgetOccView_getDefaultframeBufferViewportSize(const OccHandle&); -static Handle_Aspect_NeutralWindow createNativeWindow([[maybe_unused]] QWidget* widget) +static OccHandle createNativeWindow([[maybe_unused]] QWidget* widget) { auto window = new Aspect_NeutralWindow; // On non-Windows systems Aspect_Drawable is aliased to 'unsigned long' so can't init with nullptr @@ -65,7 +65,7 @@ static Handle_Aspect_NeutralWindow createNativeWindow([[maybe_unused]] QWidget* return window; } -QOpenGLWidgetOccView::QOpenGLWidgetOccView(const Handle_V3d_View& view, QWidget* parent) +QOpenGLWidgetOccView::QOpenGLWidgetOccView(const OccHandle& view, QWidget* parent) : QOpenGLWidget(parent), IWidgetOccView(view) { @@ -100,12 +100,12 @@ void QOpenGLWidgetOccView::redraw() this->update(); } -QOpenGLWidgetOccView* QOpenGLWidgetOccView::create(const Handle_V3d_View& view, QWidget* parent) +QOpenGLWidgetOccView* QOpenGLWidgetOccView::create(const OccHandle& view, QWidget* parent) { return new QOpenGLWidgetOccView(view, parent); } -Handle_Graphic3d_GraphicDriver QOpenGLWidgetOccView::createCompatibleGraphicsDriver() +OccHandle QOpenGLWidgetOccView::createCompatibleGraphicsDriver() { return QOpenGLWidgetOccView_createCompatibleGraphicsDriver(); } @@ -115,7 +115,7 @@ void QOpenGLWidgetOccView::initializeGL() const QRect wrect = this->rect(); const Graphic3d_Vec2i viewSize(wrect.right() - wrect.left(), wrect.bottom() - wrect.top()); QOpenGLWidgetOccView_createOpenGlContext([=](Aspect_RenderingContext context) { - auto window = Handle_Aspect_NeutralWindow::DownCast(this->v3dView()->Window()); + auto window = OccHandle::DownCast(this->v3dView()->Window()); if (!window) window = createNativeWindow(this); @@ -129,13 +129,13 @@ void QOpenGLWidgetOccView::paintGL() if (!this->v3dView()->Window()) return; - const Handle(Graphic3d_GraphicDriver)& driver = this->v3dView()->Viewer()->Driver(); + const OccHandle& driver = this->v3dView()->Viewer()->Driver(); if (!QOpenGLWidgetOccView_wrapFrameBuffer(driver)) return; Graphic3d_Vec2i viewSizeOld; const Graphic3d_Vec2i viewSizeNew = QOpenGLWidgetOccView_getDefaultframeBufferViewportSize(driver); - auto window = Handle_Aspect_NeutralWindow::DownCast(this->v3dView()->Window()); + auto window = OccHandle::DownCast(this->v3dView()->Window()); window->Size(viewSizeOld.x(), viewSizeOld.y()); if (viewSizeNew != viewSizeOld) { window->SetSize(viewSizeNew.x(), viewSizeNew.y()); @@ -151,7 +151,7 @@ void QOpenGLWidgetOccView::paintGL() #endif // OCC_VERSION_HEX >= 0x070600 -QWidgetOccView::QWidgetOccView(const Handle_V3d_View& view, QWidget* parent) +QWidgetOccView::QWidgetOccView(const OccHandle& view, QWidget* parent) : QWidget(parent), IWidgetOccView(view) { @@ -165,8 +165,8 @@ QWidgetOccView::QWidgetOccView(const Handle_V3d_View& view, QWidget* parent) } // Defined in widget_occ_view.cpp -Handle_Graphic3d_GraphicDriver QWidgetOccView_createCompatibleGraphicsDriver(); -Handle_Graphic3d_GraphicDriver QWidgetOccView::createCompatibleGraphicsDriver() +OccHandle QWidgetOccView_createCompatibleGraphicsDriver(); +OccHandle QWidgetOccView::createCompatibleGraphicsDriver() { return QWidgetOccView_createCompatibleGraphicsDriver(); } @@ -176,7 +176,7 @@ void QWidgetOccView::redraw() this->v3dView()->Redraw(); } -QWidgetOccView* QWidgetOccView::create(const Handle_V3d_View& view, QWidget* parent) +QWidgetOccView* QWidgetOccView::create(const OccHandle& view, QWidget* parent) { return new QWidgetOccView(view, parent); } @@ -184,7 +184,7 @@ QWidgetOccView* QWidgetOccView::create(const Handle_V3d_View& view, QWidget* par void QWidgetOccView::showEvent(QShowEvent*) { if (this->v3dView()->Window().IsNull()) { - Handle_Aspect_Window hWnd = new OcctWindow(this); + OccHandle hWnd = new OcctWindow(this); this->v3dView()->SetWindow(hWnd); if (!hWnd->IsMapped()) hWnd->Map(); diff --git a/src/app/widget_occ_view.h b/src/app/widget_occ_view.h index 0f7f3e8a..0151c2ed 100644 --- a/src/app/widget_occ_view.h +++ b/src/app/widget_occ_view.h @@ -6,6 +6,8 @@ #pragma once +#include "../base/occ_handle.h" + #include #include #include @@ -23,21 +25,21 @@ namespace Mayo { // IWidgetOccView does not handle input devices interaction like keyboard and mouse class IWidgetOccView { public: - const Handle_V3d_View& v3dView() const { return m_view; } + const OccHandle& v3dView() const { return m_view; } virtual void redraw() = 0; virtual QWidget* widget() = 0; virtual bool supportsWidgetOpacity() const = 0; - using Creator = std::function; + using Creator = std::function&, QWidget*)>; static void setCreator(Creator fn); - static IWidgetOccView* create(const Handle_V3d_View& view, QWidget* parent = nullptr); + static IWidgetOccView* create(const OccHandle& view, QWidget* parent = nullptr); protected: - IWidgetOccView(const Handle_V3d_View& view) : m_view(view) {} + IWidgetOccView(const OccHandle& view) : m_view(view) {} private: - Handle_V3d_View m_view; + OccHandle m_view; }; #if OCC_VERSION_HEX >= 0x070600 @@ -46,14 +48,14 @@ class IWidgetOccView { // QOpenGLWidgetOccView implementation is based on https://github.com/gkv311/occt-samples-qopenglwidget class QOpenGLWidgetOccView : public QOpenGLWidget, public IWidgetOccView { public: - QOpenGLWidgetOccView(const Handle_V3d_View& view, QWidget* parent = nullptr); + QOpenGLWidgetOccView(const OccHandle& view, QWidget* parent = nullptr); void redraw() override; QWidget* widget() override { return this; } bool supportsWidgetOpacity() const override { return true; } - static QOpenGLWidgetOccView* create(const Handle_V3d_View& view, QWidget* parent); - static Handle_Graphic3d_GraphicDriver createCompatibleGraphicsDriver(); + static QOpenGLWidgetOccView* create(const OccHandle& view, QWidget* parent); + static OccHandle createCompatibleGraphicsDriver(); protected: // -- QOpenGLWidget @@ -65,14 +67,14 @@ class QOpenGLWidgetOccView : public QOpenGLWidget, public IWidgetOccView { // Fallback using traditional QWidget wrapper, no translucid background support class QWidgetOccView : public QWidget, public IWidgetOccView { public: - QWidgetOccView(const Handle_V3d_View& view, QWidget* parent = nullptr); + QWidgetOccView(const OccHandle& view, QWidget* parent = nullptr); void redraw() override; QWidget* widget() override { return this; } bool supportsWidgetOpacity() const override { return false; } - static QWidgetOccView* create(const Handle_V3d_View& view, QWidget* parent); - static Handle_Graphic3d_GraphicDriver createCompatibleGraphicsDriver(); + static QWidgetOccView* create(const OccHandle& view, QWidget* parent); + static OccHandle createCompatibleGraphicsDriver(); protected: // -- QWidget diff --git a/src/app/widget_occ_view_impl.cpp b/src/app/widget_occ_view_impl.cpp index 682d7925..9a61c541 100644 --- a/src/app/widget_occ_view_impl.cpp +++ b/src/app/widget_occ_view_impl.cpp @@ -4,6 +4,7 @@ ** See license at https://github.com/fougue/mayo/blob/master/LICENSE.txt ****************************************************************************/ +#include "../base/occ_handle.h" #include "../graphics/graphics_utils.h" #include @@ -34,20 +35,20 @@ class QtOccFrameBuffer : public OpenGl_FrameBuffer { public: QtOccFrameBuffer() {} - void BindBuffer(const Handle(OpenGl_Context)& ctx) override + void BindBuffer(const OccHandle& ctx) override { OpenGl_FrameBuffer::BindBuffer(ctx); ctx->SetFrameBufferSRGB(true, false); // NOTE: commenting the line just above makes the FBO to work on some configs(eg VM Ubuntu 18.04) } - void BindDrawBuffer(const Handle(OpenGl_Context)& ctx) override + void BindDrawBuffer(const OccHandle& ctx) override { OpenGl_FrameBuffer::BindDrawBuffer(ctx); ctx->SetFrameBufferSRGB(true, false); } - void BindReadBuffer(const Handle(OpenGl_Context)& ctx) override + void BindReadBuffer(const OccHandle& ctx) override { OpenGl_FrameBuffer::BindReadBuffer(ctx); } @@ -62,7 +63,7 @@ bool QOpenGLWidgetOccView_isCoreProfile() void QOpenGLWidgetOccView_createOpenGlContext(std::function fnCallback) { - Handle_OpenGl_Context glCtx = new OpenGl_Context; + OccHandle glCtx = new OpenGl_Context; if (!glCtx->Init(QOpenGLWidgetOccView_isCoreProfile())) { Message::SendFail() << "Error: OpenGl_Context is unable to wrap OpenGL context"; return; @@ -72,7 +73,7 @@ void QOpenGLWidgetOccView_createOpenGlContext(std::functionRenderingContext()); } -Handle_Graphic3d_GraphicDriver QOpenGLWidgetOccView_createCompatibleGraphicsDriver() +OccHandle QOpenGLWidgetOccView_createCompatibleGraphicsDriver() { auto gfxDriver = new OpenGl_GraphicDriver(GraphicsUtils::AspectDisplayConnection_create(), false/*dontInit*/); // Let QOpenGLWidget manage buffer swap @@ -85,15 +86,15 @@ Handle_Graphic3d_GraphicDriver QOpenGLWidgetOccView_createCompatibleGraphicsDriv return gfxDriver; } -bool QOpenGLWidgetOccView_wrapFrameBuffer(const Handle_Graphic3d_GraphicDriver& gfxDriver) +bool QOpenGLWidgetOccView_wrapFrameBuffer(const OccHandle& gfxDriver) { // Wrap FBO created by QOpenGLWidget - auto driver = Handle_OpenGl_GraphicDriver::DownCast(gfxDriver); + auto driver = OccHandle::DownCast(gfxDriver); if (!driver) return false; - const Handle_OpenGl_Context& glCtx = driver->GetSharedContext(); - Handle_OpenGl_FrameBuffer defaultFbo = glCtx->DefaultFrameBuffer(); + const OccHandle& glCtx = driver->GetSharedContext(); + OccHandle defaultFbo = glCtx->DefaultFrameBuffer(); if (!defaultFbo) { //defaultFbo = new OpenGl_FrameBuffer; defaultFbo = new QtOccFrameBuffer; @@ -109,15 +110,15 @@ bool QOpenGLWidgetOccView_wrapFrameBuffer(const Handle_Graphic3d_GraphicDriver& return true; } -Graphic3d_Vec2i QOpenGLWidgetOccView_getDefaultframeBufferViewportSize(const Handle_Graphic3d_GraphicDriver& gfxDriver) +Graphic3d_Vec2i QOpenGLWidgetOccView_getDefaultframeBufferViewportSize(const OccHandle& gfxDriver) { - auto driver = Handle_OpenGl_GraphicDriver::DownCast(gfxDriver); + auto driver = OccHandle::DownCast(gfxDriver); return driver->GetSharedContext()->DefaultFrameBuffer()->GetVPSize(); } #endif // OCC_VERSION_HEX >= 0x070600 -Handle_Graphic3d_GraphicDriver QWidgetOccView_createCompatibleGraphicsDriver() +OccHandle QWidgetOccView_createCompatibleGraphicsDriver() { return new OpenGl_GraphicDriver(GraphicsUtils::AspectDisplayConnection_create()); } diff --git a/src/base/application.cpp b/src/base/application.cpp index 8df0ca90..ab953787 100644 --- a/src/base/application.cpp +++ b/src/base/application.cpp @@ -30,7 +30,7 @@ class Document::FormatBinaryRetrievalDriver : public BinXCAFDrivers_DocumentRetr FormatBinaryRetrievalDriver(const ApplicationPtr& app) : m_app(app) {} #if OCC_VERSION_HEX < OCC_VERSION_CHECK(7, 6, 0) - Handle(CDM_Document) CreateDocument() override { return new Document(m_app); } + OccHandle CreateDocument() override { return new Document(m_app); } #endif private: @@ -42,7 +42,7 @@ class Document::FormatXmlRetrievalDriver : public XmlXCAFDrivers_DocumentRetriev FormatXmlRetrievalDriver(const ApplicationPtr& app) : m_app(app) {} #if OCC_VERSION_HEX < OCC_VERSION_CHECK(7, 6, 0) - Handle(CDM_Document) CreateDocument() override { return new Document(m_app); } + OccHandle CreateDocument() override { return new Document(m_app); } #endif private: @@ -94,9 +94,9 @@ DocumentPtr Application::newDocument(Document::Format docFormat) { const char* docNameFormat = Document::toNameFormat(docFormat); #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 6, 0) - Handle(CDM_Document) stdDoc; + OccHandle stdDoc; #else - Handle(TDocStd_Document) stdDoc; + OccHandle stdDoc; #endif this->NewDocument(docNameFormat, stdDoc); return DocumentPtr::DownCast(stdDoc); @@ -104,7 +104,7 @@ DocumentPtr Application::newDocument(Document::Format docFormat) DocumentPtr Application::openDocument(const FilePath& filepath, PCDM_ReaderStatus* ptrReadStatus) { - Handle_TDocStd_Document stdDoc; + OccHandle stdDoc; const PCDM_ReaderStatus readStatus = this->Open(filepathTo(filepath), stdDoc); if (ptrReadStatus) *ptrReadStatus = readStatus; @@ -116,7 +116,7 @@ DocumentPtr Application::openDocument(const FilePath& filepath, PCDM_ReaderStatu DocumentPtr Application::findDocumentByIndex(int docIndex) const { - Handle_TDocStd_Document doc; + OccHandle doc; TDocStd_Application::GetDocument(docIndex + 1, doc); return !doc.IsNull() ? DocumentPtr::DownCast(doc) : DocumentPtr(); } @@ -209,9 +209,9 @@ Span Application::envOpenCascadePaths() return arrayPathName; } #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 6, 0) -void Application::NewDocument(const TCollection_ExtendedString&, Handle(CDM_Document)& outDocument) +void Application::NewDocument(const TCollection_ExtendedString&, OccHandle& outDocument) #else -void Application::NewDocument(const TCollection_ExtendedString&, Handle(TDocStd_Document)& outDocument) +void Application::NewDocument(const TCollection_ExtendedString&, OccHandle& outDocument) #endif { // TODO: check format == "mayo" if not throw exception @@ -224,9 +224,9 @@ void Application::NewDocument(const TCollection_ExtendedString&, Handle(TDocStd_ } #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 6, 0) -void Application::InitDocument(const Handle(CDM_Document)& doc) const +void Application::InitDocument(const OccHandle& doc) const #else -void Application::InitDocument(const Handle(TDocStd_Document)& doc) const +void Application::InitDocument(const OccHandle& doc) const #endif { TDocStd_Application::InitDocument(doc); diff --git a/src/base/application.h b/src/base/application.h index e685d38a..d733ce04 100644 --- a/src/base/application.h +++ b/src/base/application.h @@ -8,6 +8,7 @@ #include "application_ptr.h" #include "document.h" +#include "occ_handle.h" #include "signal.h" #include "span.h" #include "text_id.h" @@ -69,16 +70,16 @@ class Application : public TDocStd_Application { public: // -- from TDocStd_Application #if OCC_VERSION_HEX >= 0x070600 - void NewDocument(const TCollection_ExtendedString& format, Handle(CDM_Document)& outDoc) override; - void InitDocument(const opencascade::handle& doc) const override; + void NewDocument(const TCollection_ExtendedString& format, OccHandle& outDoc) override; + void InitDocument(const OccHandle& doc) const override; #else - void NewDocument(const TCollection_ExtendedString& format, Handle(TDocStd_Document)& outDoc) override; - void InitDocument(const Handle(TDocStd_Document)& doc) const override; + void NewDocument(const TCollection_ExtendedString& format, OccHandle& outDoc) override; + void InitDocument(const OccHandle& doc) const override; #endif // TODO: Redefine TDocStd_Document::BeforeClose() to emit signal documentClosed // class Document : public TDocStd_Document { ... }; -// using DocumentPtr = Handle_Document +// using DocumentPtr = OccHandle // -> Can't do because PCDM_RetrievalDriver subclasses create explicitly "new TDocStd_Document(...)" // This would break TDocStd_Application::Open(...) diff --git a/src/base/application_ptr.h b/src/base/application_ptr.h index c7b0ff22..a8cbbc2a 100644 --- a/src/base/application_ptr.h +++ b/src/base/application_ptr.h @@ -6,12 +6,13 @@ #pragma once +#include "occ_handle.h" #include namespace Mayo { class Application; DEFINE_STANDARD_HANDLE(Application, TDocStd_Application) -using ApplicationPtr = opencascade::handle; +using ApplicationPtr = OccHandle; } // namespace Mayo diff --git a/src/base/brep_utils.cpp b/src/base/brep_utils.cpp index b694f5bc..4aba8bbb 100644 --- a/src/base/brep_utils.cpp +++ b/src/base/brep_utils.cpp @@ -36,7 +36,7 @@ void BRepUtils::addShape(TopoDS_Shape* ptrTargetShape, const TopoDS_Shape& shape builder.Add(*ptrTargetShape, shape); } -TopoDS_Edge BRepUtils::makeEdge(const Handle(Poly_Polygon3D)& polygon) +TopoDS_Edge BRepUtils::makeEdge(const OccHandle& polygon) { TopoDS_Edge edge; BRep_Builder builder; @@ -45,7 +45,7 @@ TopoDS_Edge BRepUtils::makeEdge(const Handle(Poly_Polygon3D)& polygon) return edge; } -TopoDS_Face BRepUtils::makeFace(const Handle(Poly_Triangulation)& mesh) +TopoDS_Face BRepUtils::makeFace(const OccHandle& mesh) { TopoDS_Face face; BRep_Builder builder; @@ -103,7 +103,7 @@ void BRepUtils::computeMesh( const TopoDS_Shape& shape, const OccBRepMeshParameters& params, TaskProgress* progress) { #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 5, 0) - Handle_Message_ProgressIndicator indicator = new OccProgressIndicator(progress); + OccHandle indicator = new OccProgressIndicator(progress); BRepMesh_IncrementalMesh mesher(shape, params, TKernelUtils::start(indicator)); #else BRepMesh_IncrementalMesh mesher(shape, params); diff --git a/src/base/brep_utils.h b/src/base/brep_utils.h index a98dd2e1..57ae6a8f 100644 --- a/src/base/brep_utils.h +++ b/src/base/brep_utils.h @@ -7,6 +7,7 @@ #pragma once #include "occ_brep_mesh_parameters.h" +#include "occ_handle.h" #include #include @@ -32,7 +33,7 @@ struct BRepUtils { static TopoDS_Edge makeEdge(const Handle(Poly_Polygon3D)& polygon); // Creates a non-geometric TopoDS_Face wrapping triangulation 'mesh' - static TopoDS_Face makeFace(const Handle(Poly_Triangulation)& mesh); + static TopoDS_Face makeFace(const OccHandle& mesh); // Iterates with 'explorer' and executes 'fn' for each sub-shape template diff --git a/src/base/caf_utils.cpp b/src/base/caf_utils.cpp index 2a03d760..dea058b4 100644 --- a/src/base/caf_utils.cpp +++ b/src/base/caf_utils.cpp @@ -22,7 +22,7 @@ const TCollection_AsciiString& CafUtils::labelTag(const TDF_Label& label) const TCollection_ExtendedString& CafUtils::labelAttrStdName(const TDF_Label& label) { - Handle_TDataStd_Name attrName; + OccHandle attrName; if (label.FindAttribute(TDataStd_Name::GetID(), attrName)) { return attrName->Get(); } @@ -45,7 +45,7 @@ bool CafUtils::isNullOrEmpty(const TDF_Label& label) bool CafUtils::hasAttribute(const TDF_Label& label, const Standard_GUID& attrGuid) { - Handle_TDF_Attribute attr; + OccHandle attr; return label.FindAttribute(attrGuid, attr); } diff --git a/src/base/caf_utils.h b/src/base/caf_utils.h index 8863aa59..6bf924d6 100644 --- a/src/base/caf_utils.h +++ b/src/base/caf_utils.h @@ -6,6 +6,7 @@ #pragma once +#include "occ_handle.h" #include #include #include @@ -29,7 +30,7 @@ struct CafUtils { // Returns attribute of type 'AttributeType'(result may be null)? template - static opencascade::handle findAttribute(const TDF_Label& label); + static OccHandle findAttribute(const TDF_Label& label); // Is there an attribute of identifier 'attrGuid' attached to 'label'? static bool hasAttribute(const TDF_Label& label, const Standard_GUID& attrGuid); @@ -65,9 +66,9 @@ template<> struct hash { namespace Mayo { template -opencascade::handle CafUtils::findAttribute(const TDF_Label& label) +OccHandle CafUtils::findAttribute(const TDF_Label& label) { - opencascade::handle attr; + OccHandle attr; label.FindAttribute(AttributeType::GetID(), attr); return attr; } diff --git a/src/base/document.cpp b/src/base/document.cpp index 67e51a42..b660860c 100644 --- a/src/base/document.cpp +++ b/src/base/document.cpp @@ -130,7 +130,7 @@ DocumentPtr Document::findFrom(const TDF_Label& label) TDF_Label Document::newEntityLabel() { - Handle_TDF_TagSource tagSrc = CafUtils::findAttribute(this->rootLabel()); + OccHandle tagSrc = CafUtils::findAttribute(this->rootLabel()); Expects(!tagSrc.IsNull()); if (tagSrc->Get() == 0) this->rootLabel().NewChild(); // Reserve label 0:1 for XCAF Main() diff --git a/src/base/document_ptr.h b/src/base/document_ptr.h index 0e2c4011..08af04c9 100644 --- a/src/base/document_ptr.h +++ b/src/base/document_ptr.h @@ -6,12 +6,13 @@ #pragma once +#include "occ_handle.h" #include namespace Mayo { class Document; DEFINE_STANDARD_HANDLE(Document, TDocStd_Document) -using DocumentPtr = Handle(Document); +using DocumentPtr = OccHandle; } // namespace Mayo diff --git a/src/base/mesh_access.cpp b/src/base/mesh_access.cpp index f02255b7..d3fa01d6 100644 --- a/src/base/mesh_access.cpp +++ b/src/base/mesh_access.cpp @@ -66,7 +66,7 @@ class XCafFace_MeshAccess : public IMeshAccess { return m_location; } - const Handle(Poly_Triangulation)& triangulation() const override { + const OccHandle& triangulation() const override { return m_triangulation; } @@ -77,8 +77,8 @@ class XCafFace_MeshAccess : public IMeshAccess { return doc->xcaf().shapeColor(labelShape); #if OCC_VERSION_HEX >= 0x070500 - Handle_XCAFDoc_VisMaterialTool visMaterialTool = doc->xcaf().visMaterialTool(); - Handle_XCAFDoc_VisMaterial visMaterial = visMaterialTool->GetShapeMaterial(labelShape); + OccHandle visMaterialTool = doc->xcaf().visMaterialTool(); + OccHandle visMaterial = visMaterialTool->GetShapeMaterial(labelShape); if (visMaterial) return visMaterial->BaseColor().GetRGB(); #endif @@ -89,7 +89,7 @@ class XCafFace_MeshAccess : public IMeshAccess { std::optional m_faceColor; Span m_nodeColors; TopLoc_Location m_location; - Handle(Poly_Triangulation) m_triangulation; + OccHandle m_triangulation; }; void IMeshAccess_visitMeshes( diff --git a/src/base/mesh_access.h b/src/base/mesh_access.h index db2b4c87..800c3208 100644 --- a/src/base/mesh_access.h +++ b/src/base/mesh_access.h @@ -7,6 +7,7 @@ #pragma once // Base +#include "occ_handle.h" class DocumentTreeNode; // OpenCascade @@ -26,7 +27,7 @@ class IMeshAccess { public: virtual std::optional nodeColor(int i) const = 0; virtual const TopLoc_Location& location() const = 0; - virtual const Handle(Poly_Triangulation)& triangulation() const = 0; + virtual const OccHandle& triangulation() const = 0; }; // Iterates over meshes from `treeNode` and call `fnCallback` for each item. diff --git a/src/base/mesh_utils.cpp b/src/base/mesh_utils.cpp index 04a375ee..621bd78f 100644 --- a/src/base/mesh_utils.cpp +++ b/src/base/mesh_utils.cpp @@ -46,7 +46,7 @@ double triangleArea(const gp_XYZ& p1, const gp_XYZ& p2, const gp_XYZ& p3) return 0.5 * std::sqrt(cx*cx + cy*cy + cz*cz); } -double triangulationVolume(const Handle_Poly_Triangulation& triangulation) +double triangulationVolume(const OccHandle& triangulation) { if (!triangulation) return 0; @@ -59,13 +59,14 @@ double triangulationVolume(const Handle_Poly_Triangulation& triangulation) volume += MeshUtils::triangleSignedVolume( triangulation->Node(v1).Coord(), triangulation->Node(v2).Coord(), - triangulation->Node(v3).Coord()); + triangulation->Node(v3).Coord() + ); } return std::abs(volume); } -double triangulationArea(const Handle_Poly_Triangulation& triangulation) +double triangulationArea(const OccHandle& triangulation) { if (!triangulation) return 0; @@ -78,13 +79,14 @@ double triangulationArea(const Handle_Poly_Triangulation& triangulation) area += MeshUtils::triangleArea( triangulation->Node(v1).Coord(), triangulation->Node(v2).Coord(), - triangulation->Node(v3).Coord()); + triangulation->Node(v3).Coord() + ); } return area; } -void setNode(const Handle_Poly_Triangulation& triangulation, int index, const gp_Pnt& pnt) +void setNode(const OccHandle& triangulation, int index, const gp_Pnt& pnt) { #if OCC_VERSION_HEX >= 0x070600 triangulation->SetNode(index, pnt); @@ -93,7 +95,7 @@ void setNode(const Handle_Poly_Triangulation& triangulation, int index, const gp #endif } -void setTriangle(const Handle_Poly_Triangulation& triangulation, int index, const Poly_Triangle& triangle) +void setTriangle(const OccHandle& triangulation, int index, const Poly_Triangle& triangle) { #if OCC_VERSION_HEX >= 0x070600 triangulation->SetTriangle(index, triangle); @@ -102,7 +104,7 @@ void setTriangle(const Handle_Poly_Triangulation& triangulation, int index, cons #endif } -void setNormal(const Handle_Poly_Triangulation& triangulation, int index, const Poly_Triangulation_NormalType& n) +void setNormal(const OccHandle& triangulation, int index, const Poly_Triangulation_NormalType& n) { #if OCC_VERSION_HEX >= 0x070600 triangulation->SetNormal(index, n); @@ -114,7 +116,7 @@ void setNormal(const Handle_Poly_Triangulation& triangulation, int index, const #endif } -void setUvNode(const Handle_Poly_Triangulation& triangulation, int index, double u, double v) +void setUvNode(const OccHandle& triangulation, int index, double u, double v) { #if OCC_VERSION_HEX >= 0x070600 triangulation->SetUVNode(index, gp_Pnt2d{u, v}); @@ -123,7 +125,7 @@ void setUvNode(const Handle_Poly_Triangulation& triangulation, int index, double #endif } -void allocateNormals(const Handle_Poly_Triangulation& triangulation) +void allocateNormals(const OccHandle& triangulation) { #if OCC_VERSION_HEX >= 0x070600 triangulation->AddNormals(); @@ -133,7 +135,7 @@ void allocateNormals(const Handle_Poly_Triangulation& triangulation) #endif } -const Poly_Array1OfTriangle& triangles(const Handle_Poly_Triangulation& triangulation) +const Poly_Array1OfTriangle& triangles(const OccHandle& triangulation) { #if OCC_VERSION_HEX < 0x070600 return triangulation->Triangles(); diff --git a/src/base/mesh_utils.h b/src/base/mesh_utils.h index 791045fc..08fa0a15 100644 --- a/src/base/mesh_utils.h +++ b/src/base/mesh_utils.h @@ -21,8 +21,8 @@ namespace MeshUtils { double triangleSignedVolume(const gp_XYZ& p1, const gp_XYZ& p2, const gp_XYZ& p3); double triangleArea(const gp_XYZ& p1, const gp_XYZ& p2, const gp_XYZ& p3); -double triangulationVolume(const Handle_Poly_Triangulation& triangulation); -double triangulationArea(const Handle_Poly_Triangulation& triangulation); +double triangulationVolume(const OccHandle& triangulation); +double triangulationArea(const OccHandle& triangulation); #if OCC_VERSION_HEX >= 0x070600 using Poly_Triangulation_NormalType = gp_Vec3f; @@ -30,13 +30,13 @@ using Poly_Triangulation_NormalType = gp_Vec3f; using Poly_Triangulation_NormalType = gp_Vec; #endif -void setNode(const Handle_Poly_Triangulation& triangulation, int index, const gp_Pnt& pnt); -void setTriangle(const Handle_Poly_Triangulation& triangulation, int index, const Poly_Triangle& triangle); -void setNormal(const Handle_Poly_Triangulation& triangulation, int index, const Poly_Triangulation_NormalType& n); -void setUvNode(const Handle_Poly_Triangulation& triangulation, int index, double u, double v); -void allocateNormals(const Handle_Poly_Triangulation& triangulation); +void setNode(const OccHandle& triangulation, int index, const gp_Pnt& pnt); +void setTriangle(const OccHandle& triangulation, int index, const Poly_Triangle& triangle); +void setNormal(const OccHandle& triangulation, int index, const Poly_Triangulation_NormalType& n); +void setUvNode(const OccHandle& triangulation, int index, double u, double v); +void allocateNormals(const OccHandle& triangulation); -const Poly_Array1OfTriangle& triangles(const Handle_Poly_Triangulation& triangulation); +const Poly_Array1OfTriangle& triangles(const OccHandle& triangulation); enum class Orientation { Unknown, diff --git a/src/base/point_cloud_data.cpp b/src/base/point_cloud_data.cpp index 05a11dce..1da1258e 100644 --- a/src/base/point_cloud_data.cpp +++ b/src/base/point_cloud_data.cpp @@ -28,7 +28,7 @@ PointCloudDataPtr PointCloudData::Set(const TDF_Label& label) return data; } -PointCloudDataPtr PointCloudData::Set(const TDF_Label& label, const Handle(Graphic3d_ArrayOfPoints)& points) +PointCloudDataPtr PointCloudData::Set(const TDF_Label& label, const OccHandle& points) { PointCloudDataPtr data = PointCloudData::Set(label); data->m_points = points; @@ -40,19 +40,19 @@ const Standard_GUID& PointCloudData::ID() const return PointCloudData::GetID(); } -void PointCloudData::Restore(const Handle(TDF_Attribute)& attribute) +void PointCloudData::Restore(const OccHandle& attribute) { auto data = PointCloudDataPtr::DownCast(attribute); if (data) m_points = data->m_points; } -Handle(TDF_Attribute) PointCloudData::NewEmpty() const +OccHandle PointCloudData::NewEmpty() const { return new PointCloudData; } -void PointCloudData::Paste(const Handle(TDF_Attribute)& into, const Handle(TDF_RelocationTable)&) const +void PointCloudData::Paste(const OccHandle& into, const OccHandle&) const { auto data = PointCloudDataPtr::DownCast(into); if (data) diff --git a/src/base/point_cloud_data.h b/src/base/point_cloud_data.h index 6c09f063..d2746af0 100644 --- a/src/base/point_cloud_data.h +++ b/src/base/point_cloud_data.h @@ -6,6 +6,8 @@ #pragma once +#include "occ_handle.h" + #include #include @@ -14,28 +16,28 @@ namespace Mayo { // Pre-declarations class PointCloudData; DEFINE_STANDARD_HANDLE(PointCloudData, TDF_Attribute) -using PointCloudDataPtr = Handle(PointCloudData); +using PointCloudDataPtr = OccHandle; // Provides a label attribute to store point cloud data class PointCloudData : public TDF_Attribute { public: static const Standard_GUID& GetID(); static PointCloudDataPtr Set(const TDF_Label& label); - static PointCloudDataPtr Set(const TDF_Label& label, const Handle(Graphic3d_ArrayOfPoints)& points); + static PointCloudDataPtr Set(const TDF_Label& label, const OccHandle& points); - const Handle(Graphic3d_ArrayOfPoints)& points() const { return m_points; } + const OccHandle& points() const { return m_points; } // -- from TDF_Attribute const Standard_GUID& ID() const override; - void Restore(const Handle(TDF_Attribute)& attribute) override; - Handle(TDF_Attribute) NewEmpty() const override; - void Paste(const Handle(TDF_Attribute)& into, const Handle(TDF_RelocationTable)& table) const override; + void Restore(const OccHandle& attribute) override; + OccHandle NewEmpty() const override; + void Paste(const OccHandle& into, const OccHandle& table) const override; Standard_OStream& Dump(Standard_OStream& ostr) const override; DEFINE_STANDARD_RTTI_INLINE(PointCloudData, TDF_Attribute) private: - Handle(Graphic3d_ArrayOfPoints) m_points; + OccHandle m_points; }; } // namespace Mayo diff --git a/src/base/string_conv.h b/src/base/string_conv.h index 6cbd7e0d..f1e134d2 100644 --- a/src/base/string_conv.h +++ b/src/base/string_conv.h @@ -6,6 +6,7 @@ #pragma once +#include "occ_handle.h" #include #include #include @@ -52,8 +53,8 @@ TCollection_AsciiString to_OccAsciiString(const StringType& str) { // X -> Handle(TCollection_HAsciiString) template -Handle(TCollection_HAsciiString) to_OccHandleHAsciiString(const StringType& str) { - return string_conv(str); +OccHandle to_OccHandleHAsciiString(const StringType& str) { + return string_conv>(str); } // X -> TCollection_ExtendedString @@ -132,9 +133,9 @@ template<> struct StringConv { }; // std::string_view -> Handle(TCollection_HAsciiString) -template<> struct StringConv { +template<> struct StringConv> { static auto to(std::string_view str) { - Handle(TCollection_HAsciiString) hnd = new TCollection_HAsciiString(to_OccAsciiString(str)); + OccHandle hnd = new TCollection_HAsciiString(to_OccAsciiString(str)); return hnd; } }; @@ -151,15 +152,15 @@ template<> struct StringConv { // -- // Handle(TCollection_HAsciiString) -> std::string -template<> struct StringConv { - static auto to(const Handle(TCollection_HAsciiString)& str) { +template<> struct StringConv, std::string> { + static auto to(const OccHandle& str) { return string_conv(str ? str->String() : TCollection_AsciiString()); } }; // Handle(TCollection_HAsciiString) -> std::string_view -template<> struct StringConv { - static auto to(const Handle(TCollection_HAsciiString)& str) { +template<> struct StringConv, std::string_view> { + static auto to(const OccHandle& str) { return string_conv(str ? str->String() : TCollection_AsciiString()); } }; @@ -176,9 +177,9 @@ template<> struct StringConv { }; // std::string -> Handle(TCollection_HAsciiString) -template<> struct StringConv { +template<> struct StringConv> { static auto to(const std::string& str) { - Handle(TCollection_HAsciiString) hnd = new TCollection_HAsciiString(str.c_str()); + OccHandle hnd = new TCollection_HAsciiString(str.c_str()); return hnd; } }; diff --git a/src/base/tkernel_utils.cpp b/src/base/tkernel_utils.cpp index 201e63f6..3df933d1 100644 --- a/src/base/tkernel_utils.cpp +++ b/src/base/tkernel_utils.cpp @@ -12,7 +12,7 @@ namespace Mayo { TKernelUtils::ReturnType_StartProgressIndicator -TKernelUtils::start(const opencascade::handle& progress) +TKernelUtils::start(const OccHandle& progress) { #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 5, 0) return Message_ProgressIndicator::Start(progress); diff --git a/src/base/tkernel_utils.h b/src/base/tkernel_utils.h index 4f1d97af..55678134 100644 --- a/src/base/tkernel_utils.h +++ b/src/base/tkernel_utils.h @@ -6,6 +6,8 @@ #pragma once +#include "occ_handle.h" + #include #include #include @@ -29,15 +31,15 @@ namespace Mayo { class TKernelUtils { public: template - static opencascade::handle makeHandle(const TransientType* ptr) { return ptr; } + static OccHandle makeHandle(const TransientType* ptr) { return ptr; } using ReturnType_StartProgressIndicator = #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 5, 0) Message_ProgressRange; #else - const opencascade::handle&; + const OccHandle&; #endif - static ReturnType_StartProgressIndicator start(const opencascade::handle& progress); + static ReturnType_StartProgressIndicator start(const OccHandle& progress); // Encodes 'color' into hexadecimal representation with #RRGGBB format static std::string colorToHex(const Quantity_Color& color); diff --git a/src/base/triangulation_annex_data.cpp b/src/base/triangulation_annex_data.cpp index 5787cb3d..9d7f077b 100644 --- a/src/base/triangulation_annex_data.cpp +++ b/src/base/triangulation_annex_data.cpp @@ -51,19 +51,19 @@ const Standard_GUID& TriangulationAnnexData::ID() const return TriangulationAnnexData::GetID(); } -void TriangulationAnnexData::Restore(const Handle(TDF_Attribute)& attribute) +void TriangulationAnnexData::Restore(const OccHandle& attribute) { auto data = TriangulationAnnexDataPtr::DownCast(attribute); if (data) this->copyNodeColors(data->m_vecNodeColor); } -Handle(TDF_Attribute) TriangulationAnnexData::NewEmpty() const +OccHandle TriangulationAnnexData::NewEmpty() const { return new TriangulationAnnexData; } -void TriangulationAnnexData::Paste(const Handle(TDF_Attribute)& into, const Handle(TDF_RelocationTable)&) const +void TriangulationAnnexData::Paste(const OccHandle& into, const OccHandle&) const { auto data = TriangulationAnnexDataPtr::DownCast(into); if (data) diff --git a/src/base/triangulation_annex_data.h b/src/base/triangulation_annex_data.h index d8c074af..9c082327 100644 --- a/src/base/triangulation_annex_data.h +++ b/src/base/triangulation_annex_data.h @@ -6,6 +6,7 @@ #pragma once +#include "occ_handle.h" #include "span.h" #include @@ -16,7 +17,7 @@ namespace Mayo { class TriangulationAnnexData; DEFINE_STANDARD_HANDLE(TriangulationAnnexData, TDF_Attribute) -using TriangulationAnnexDataPtr = Handle(TriangulationAnnexData); +using TriangulationAnnexDataPtr = OccHandle; class TriangulationAnnexData : public TDF_Attribute { public: @@ -29,9 +30,9 @@ class TriangulationAnnexData : public TDF_Attribute { // -- from TDF_Attribute const Standard_GUID& ID() const override; - void Restore(const Handle(TDF_Attribute)& attribute) override; - Handle(TDF_Attribute) NewEmpty() const override; - void Paste(const Handle(TDF_Attribute)& into, const Handle(TDF_RelocationTable)& table) const override; + void Restore(const OccHandle& attribute) override; + OccHandle NewEmpty() const override; + void Paste(const OccHandle& into, const OccHandle& table) const override; Standard_OStream& Dump(Standard_OStream& ostr) const override; DEFINE_STANDARD_RTTI_INLINE(TriangulationAnnexData, TDF_Attribute) diff --git a/src/base/xcaf.cpp b/src/base/xcaf.cpp index 378974b3..7a892475 100644 --- a/src/base/xcaf.cpp +++ b/src/base/xcaf.cpp @@ -22,7 +22,7 @@ namespace Mayo { bool XCaf::isNull() const { - Handle_TDocStd_Document doc = TDocStd_Document::Get(m_labelMain); + OccHandle doc = TDocStd_Document::Get(m_labelMain); if (!doc.IsNull()) { if (XCAFDoc_DocumentTool::IsXCAFDocument(doc)) return false; @@ -31,28 +31,28 @@ bool XCaf::isNull() const return true; } -Handle_XCAFDoc_ShapeTool XCaf::shapeTool() const +OccHandle XCaf::shapeTool() const { return XCAFDoc_DocumentTool::ShapeTool(m_labelMain); } -Handle_XCAFDoc_LayerTool XCaf::layerTool() const +OccHandle XCaf::layerTool() const { return XCAFDoc_DocumentTool::LayerTool(m_labelMain); } -Handle_XCAFDoc_ColorTool XCaf::colorTool() const +OccHandle XCaf::colorTool() const { return XCAFDoc_DocumentTool::ColorTool(m_labelMain); } -Handle_XCAFDoc_MaterialTool XCaf::materialTool() const +OccHandle XCaf::materialTool() const { return XCAFDoc_DocumentTool::MaterialTool(m_labelMain); } #if OCC_VERSION_HEX >= 0x070500 -Handle_XCAFDoc_VisMaterialTool XCaf::visMaterialTool() const +OccHandle XCaf::visMaterialTool() const { return XCAFDoc_DocumentTool::VisMaterialTool(m_labelMain); } @@ -61,7 +61,7 @@ Handle_XCAFDoc_VisMaterialTool XCaf::visMaterialTool() const TDF_LabelSequence XCaf::topLevelFreeShapes() const { TDF_LabelSequence seq; - Handle_XCAFDoc_ShapeTool tool = this->shapeTool(); + OccHandle tool = this->shapeTool(); if (tool) tool->GetFreeShapes(seq); @@ -176,7 +176,7 @@ bool XCaf::isShapeSubOf(const TDF_Label& lbl, const TopoDS_Shape& shape) bool XCaf::hasShapeColor(const TDF_Label& lbl) const { - Handle_XCAFDoc_ColorTool tool = this->colorTool(); + OccHandle tool = this->colorTool(); if (!tool) return false; @@ -187,7 +187,7 @@ bool XCaf::hasShapeColor(const TDF_Label& lbl) const Quantity_Color XCaf::shapeColor(const TDF_Label& lbl) const { - Handle_XCAFDoc_ColorTool tool = this->colorTool(); + OccHandle tool = this->colorTool(); Quantity_Color color = {}; if (!tool) return color; @@ -271,15 +271,15 @@ QuantityDensity XCaf::shapeMaterialDensity(const TDF_Label& lbl) return XCaf::shapeMaterialDensity(XCaf::shapeMaterial(lbl)); } -QuantityDensity XCaf::shapeMaterialDensity(const Handle_XCAFDoc_Material& material) +QuantityDensity XCaf::shapeMaterialDensity(const OccHandle& material) { const double density = material ? material->GetDensity() : 0.; return density * Quantity_GramPerCubicCentimeter; } -Handle_XCAFDoc_Material XCaf::shapeMaterial(const TDF_Label& lbl) +OccHandle XCaf::shapeMaterial(const TDF_Label& lbl) { - Handle_TDataStd_TreeNode node; + OccHandle node; if (!lbl.FindAttribute(XCAFDoc::MaterialRefGUID(), node) || !node->HasFather()) return {}; @@ -291,7 +291,7 @@ XCaf::ValidationProperties XCaf::validationProperties(const TDF_Label& lbl) { ValidationProperties props = {}; for (TDF_AttributeIterator it(lbl); it.More(); it.Next()) { - const Handle_TDF_Attribute ptrAttr = it.Value(); + const OccHandle ptrAttr = it.Value(); const Standard_GUID& attrId = ptrAttr->ID(); if (&attrId == &XCAFDoc_Centroid::GetID()) { const auto& centroid = static_cast(*ptrAttr); diff --git a/src/base/xcaf.h b/src/base/xcaf.h index 72f45fdc..95f1175f 100644 --- a/src/base/xcaf.h +++ b/src/base/xcaf.h @@ -7,7 +7,9 @@ #pragma once #include "libtree.h" +#include "occ_handle.h" #include "quantity.h" + #include #include #include @@ -35,12 +37,12 @@ class XCaf { bool isNull() const; - Handle_XCAFDoc_ShapeTool shapeTool() const; - Handle_XCAFDoc_LayerTool layerTool() const; - Handle_XCAFDoc_ColorTool colorTool() const; - Handle_XCAFDoc_MaterialTool materialTool() const; + OccHandle shapeTool() const; + OccHandle layerTool() const; + OccHandle colorTool() const; + OccHandle materialTool() const; #if OCC_VERSION_HEX >= 0x070500 - Handle_XCAFDoc_VisMaterialTool visMaterialTool() const; + OccHandle visMaterialTool() const; #endif // -- @@ -102,8 +104,8 @@ class XCaf { // -- static QuantityDensity shapeMaterialDensity(const TDF_Label& lbl); - static QuantityDensity shapeMaterialDensity(const Handle_XCAFDoc_Material& material); - static Handle_XCAFDoc_Material shapeMaterial(const TDF_Label& lbl); + static QuantityDensity shapeMaterialDensity(const OccHandle& material); + static OccHandle shapeMaterial(const TDF_Label& lbl); // -- // -- XCAFDoc_LayerTool helpers diff --git a/src/cli/main.cpp b/src/cli/main.cpp index 1ee9aa6d..bc02e489 100644 --- a/src/cli/main.cpp +++ b/src/cli/main.cpp @@ -53,7 +53,7 @@ namespace Mayo { // Declared in graphics/graphics_create_driver.cpp -void setFunctionCreateGraphicsDriver(std::function fn); +void setFunctionCreateGraphicsDriver(std::function()> fn); // Provides an i18n context for the current file(main.cpp) class Main { @@ -340,7 +340,7 @@ static void initGui(GuiApplication* guiApp) return; guiApp->setAutomaticDocumentMapping(false); // GuiDocument objects aren't needed - setFunctionCreateGraphicsDriver([]() -> Handle_Graphic3d_GraphicDriver { + setFunctionCreateGraphicsDriver([]() -> OccHandle { return new OpenGl_GraphicDriver(GraphicsUtils::AspectDisplayConnection_create()); }); guiApp->addGraphicsObjectDriver(std::make_unique()); diff --git a/src/graphics/ais_text.cpp b/src/graphics/ais_text.cpp index 46d7d838..b4334e3d 100644 --- a/src/graphics/ais_text.cpp +++ b/src/graphics/ais_text.cpp @@ -40,14 +40,14 @@ AIS_Text::AIS_Text(const TCollection_ExtendedString &text, const gp_Pnt& pos) this->setPosition(pos); } -Handle_Prs3d_TextAspect AIS_Text::presentationTextAspect(unsigned i) const +OccHandle AIS_Text::presentationTextAspect(unsigned i) const { - return this->isValidTextIndex(i) ? m_textProps.at(i).m_aspect : Handle_Prs3d_TextAspect(); + return this->isValidTextIndex(i) ? m_textProps.at(i).m_aspect : OccHandle(); } -Handle_Graphic3d_AspectText3d AIS_Text::graphicTextAspect(unsigned i) const +OccHandle AIS_Text::graphicTextAspect(unsigned i) const { - return this->isValidTextIndex(i) ? m_textProps.at(i).m_aspect->Aspect() : Handle_Graphic3d_AspectText3d(); + return this->isValidTextIndex(i) ? m_textProps.at(i).m_aspect->Aspect() : OccHandle(); } gp_Pnt AIS_Text::position(unsigned i) const @@ -143,8 +143,8 @@ void AIS_Text::setDefaultTextStyle(Aspect_TypeOfStyleText style) } void AIS_Text::Compute( - const Handle(PrsMgr_PresentationManager)&, - const Handle(Prs3d_Presentation)& pres, + const OccHandle&, + const OccHandle& pres, const int) { for (unsigned i = 0; i < this->textCount(); ++i) { @@ -161,7 +161,7 @@ void AIS_Text::Compute( } } -void AIS_Text::ComputeSelection(const Handle(SelectMgr_Selection)&, const int) +void AIS_Text::ComputeSelection(const OccHandle&, const int) { } diff --git a/src/graphics/ais_text.h b/src/graphics/ais_text.h index 6c5a0f0a..b622a24a 100644 --- a/src/graphics/ais_text.h +++ b/src/graphics/ais_text.h @@ -31,8 +31,8 @@ class AIS_Text : public AIS_InteractiveObject { AIS_Text() = default; AIS_Text(const TCollection_ExtendedString& text, const gp_Pnt& pos); - Handle_Prs3d_TextAspect presentationTextAspect(unsigned i = 0) const; - Handle_Graphic3d_AspectText3d graphicTextAspect(unsigned i = 0) const; + OccHandle presentationTextAspect(unsigned i = 0) const; + OccHandle graphicTextAspect(unsigned i = 0) const; void setDefaultColor(const Quantity_Color& c); void setDefaultFont(const char* fontName); @@ -54,16 +54,16 @@ class AIS_Text : public AIS_InteractiveObject { unsigned textCount() const; void addText(const TCollection_ExtendedString& text, const gp_Pnt& pos); - void ComputeSelection(const Handle(SelectMgr_Selection)& sel, const int mode) override; + void ComputeSelection(const OccHandle& sel, const int mode) override; protected: void Compute( - const Handle(PrsMgr_PresentationManager)& pm, - const Handle(Prs3d_Presentation)& pres, + const OccHandle& pm, + const OccHandle& pres, const int mode) override; #if OCC_VERSION_HEX < OCC_VERSION_CHECK(7, 5, 0) - void Compute(const Handle(Prs3d_Projector)&, const Handle(Prs3d_Presentation)&) override {} + void Compute(const OccHandle&, const OccHandle&) override {} #endif private: @@ -73,7 +73,7 @@ class AIS_Text : public AIS_InteractiveObject { const char* m_font = nullptr; gp_Pnt m_position; TCollection_ExtendedString m_text; - Handle_Prs3d_TextAspect m_aspect; + OccHandle m_aspect; }; const char* m_defaultFont = "Courrier"; diff --git a/src/graphics/graphics_create_driver.cpp b/src/graphics/graphics_create_driver.cpp index 119465b7..17a29682 100644 --- a/src/graphics/graphics_create_driver.cpp +++ b/src/graphics/graphics_create_driver.cpp @@ -10,13 +10,15 @@ // #defines constants like "None" which causes name clash with GuiDocument::ViewTrihedronMode::None // -- +#include "../base/occ_handle.h" + #include #include #include namespace Mayo { -using FunctionCreateGraphicsDriver = std::function; +using FunctionCreateGraphicsDriver = std::function()>; static FunctionCreateGraphicsDriver& getFunctionCreateGraphicsDriver() { @@ -31,7 +33,7 @@ void setFunctionCreateGraphicsDriver(FunctionCreateGraphicsDriver fn) getFunctionCreateGraphicsDriver() = std::move(fn); } -Handle_Graphic3d_GraphicDriver graphicsCreateDriver() +OccHandle graphicsCreateDriver() { const auto& fn = getFunctionCreateGraphicsDriver(); if (fn) diff --git a/src/graphics/graphics_create_virtual_window.cpp b/src/graphics/graphics_create_virtual_window.cpp index 7b1551a5..39e4a7e6 100644 --- a/src/graphics/graphics_create_virtual_window.cpp +++ b/src/graphics/graphics_create_virtual_window.cpp @@ -16,6 +16,8 @@ # include #endif +#include "../base/occ_handle.h" + #include #include #if defined(MAYO_OS_WINDOWS) @@ -31,12 +33,12 @@ namespace Mayo { -Handle_Aspect_Window graphicsCreateVirtualWindow(const Handle_Graphic3d_GraphicDriver& gfxDriver, int wndWidth, int wndHeight) +OccHandle graphicsCreateVirtualWindow(const OccHandle& gfxDriver, int wndWidth, int wndHeight) { #if defined(MAYO_OS_WINDOWS) MAYO_UNUSED(gfxDriver); // Create a "virtual" WNT window being a pure WNT window redefined to be never shown - static Handle_WNT_WClass wClass; + static OccHandle wClass; if (wClass.IsNull()) { auto cursor = LoadCursor(NULL, IDC_ARROW); wClass = new WNT_WClass("GW3D_Class", nullptr, CS_VREDRAW | CS_HREDRAW, 0, 0, cursor); diff --git a/src/graphics/graphics_mesh_data_source.cpp b/src/graphics/graphics_mesh_data_source.cpp index 607f7155..74b294fc 100644 --- a/src/graphics/graphics_mesh_data_source.cpp +++ b/src/graphics/graphics_mesh_data_source.cpp @@ -16,7 +16,7 @@ namespace Mayo { -GraphicsMeshDataSource::GraphicsMeshDataSource(const Handle_Poly_Triangulation& mesh) +GraphicsMeshDataSource::GraphicsMeshDataSource(const OccHandle& mesh) : m_mesh(mesh) { if (!m_mesh.IsNull()) { @@ -67,7 +67,8 @@ bool GraphicsMeshDataSource::GetGeom( const bool IsElement, TColStd_Array1OfReal& Coords, int& NbNodes, - MeshVS_EntityType& Type) const + MeshVS_EntityType& Type + ) const { if (m_mesh.IsNull()) return false; diff --git a/src/graphics/graphics_mesh_data_source.h b/src/graphics/graphics_mesh_data_source.h index de56223a..93edaa49 100644 --- a/src/graphics/graphics_mesh_data_source.h +++ b/src/graphics/graphics_mesh_data_source.h @@ -10,6 +10,8 @@ // -- Basically the same as XSDRAWSTLVRML_DataSource but it allows to be free of TKXSDRAW // -- +#include "../base/occ_handle.h" + #include #include #include @@ -21,7 +23,7 @@ namespace Mayo { class GraphicsMeshDataSource : public MeshVS_DataSource { public: - GraphicsMeshDataSource(const Handle_Poly_Triangulation& mesh); + GraphicsMeshDataSource(const OccHandle& mesh); bool GetGeom(const int ID, const bool IsElement, TColStd_Array1OfReal& Coords, int& NbNodes, MeshVS_EntityType& Type) const override; bool GetGeomType(const int ID, const bool IsElement, MeshVS_EntityType& Type) const override; @@ -32,12 +34,12 @@ class GraphicsMeshDataSource : public MeshVS_DataSource { bool GetNormal(const int Id, const int Max, double& nx, double& ny, double& nz) const override; private: - Handle_Poly_Triangulation m_mesh; + OccHandle m_mesh; TColStd_PackedMapOfInteger m_nodes; TColStd_PackedMapOfInteger m_elements; - Handle_TColStd_HArray2OfInteger m_elemNodes; - Handle_TColStd_HArray2OfReal m_nodeCoords; - Handle_TColStd_HArray2OfReal m_elemNormals; + OccHandle m_elemNodes; + OccHandle m_nodeCoords; + OccHandle m_elemNormals; }; } // namespace Mayo diff --git a/src/graphics/graphics_mesh_object_driver.cpp b/src/graphics/graphics_mesh_object_driver.cpp index 08b0e496..27ef4c4c 100644 --- a/src/graphics/graphics_mesh_object_driver.cpp +++ b/src/graphics/graphics_mesh_object_driver.cpp @@ -48,13 +48,13 @@ GraphicsMeshObjectDriver::Support GraphicsMeshObjectDriver::supportStatus(const GraphicsObjectPtr GraphicsMeshObjectDriver::createObject(const TDF_Label& label) const { - Handle_Poly_Triangulation polyTri; + OccHandle polyTri; Span spanNodeColor; //const TopLoc_Location* ptrLocationPolyTri = nullptr; if (XCaf::isShape(label)) { const TopoDS_Shape shape = XCaf::shape(label); if (shape.ShapeType() == TopAbs_FACE) { - auto tface = Handle_BRep_TFace::DownCast(shape.TShape()); + auto tface = OccHandle::DownCast(shape.TShape()); if (tface) { polyTri = tface->Triangulation(); //ptrLocationPolyTri = &shape.Location(); @@ -67,7 +67,7 @@ GraphicsObjectPtr GraphicsMeshObjectDriver::createObject(const TDF_Label& label) } if (polyTri) { - Handle_MeshVS_Mesh object = new MeshVS_Mesh; + OccHandle object = new MeshVS_Mesh; object->SetDataSource(new GraphicsMeshDataSource(polyTri)); // meshVisu->AddBuilder(..., false); -> No selection if (!spanNodeColor.empty()) { @@ -124,7 +124,7 @@ class GraphicsMeshObjectDriver::ObjectProperties : public PropertyGroupSignals { int countShowEdges = 0; int countShowNodes = 0; for (const GraphicsObjectPtr& object : spanObject) { - auto meshVisu = Handle_MeshVS_Mesh::DownCast(object); + auto meshVisu = OccHandle::DownCast(object); // Color Quantity_Color color; meshVisu->GetDrawer()->GetColor(MeshVS_DA_InteriorColor, color); @@ -167,7 +167,7 @@ class GraphicsMeshObjectDriver::ObjectProperties : public PropertyGroupSignals { if (prop == &m_propertyShowEdges) { if (m_propertyShowEdges.value() != CheckState::Partially) { - for (const Handle_MeshVS_Mesh& meshVisu : m_vecMeshVisu) { + for (const OccHandle& meshVisu : m_vecMeshVisu) { meshVisu->GetDrawer()->SetBoolean(MeshVS_DA_ShowEdges, m_propertyShowEdges.value() == CheckState::On); fnRedisplay(meshVisu); } @@ -175,20 +175,20 @@ class GraphicsMeshObjectDriver::ObjectProperties : public PropertyGroupSignals { } else if (prop == &m_propertyShowNodes) { if (m_propertyShowNodes.value() != CheckState::Partially) { - for (const Handle_MeshVS_Mesh& meshVisu : m_vecMeshVisu) { + for (const OccHandle& meshVisu : m_vecMeshVisu) { meshVisu->GetDrawer()->SetBoolean(MeshVS_DA_DisplayNodes, m_propertyShowNodes.value() == CheckState::On); fnRedisplay(meshVisu); } } } else if (prop == &m_propertyColor) { - for (const Handle_MeshVS_Mesh& meshVisu : m_vecMeshVisu) { + for (const OccHandle& meshVisu : m_vecMeshVisu) { meshVisu->GetDrawer()->SetColor(MeshVS_DA_InteriorColor, m_propertyColor); fnRedisplay(meshVisu); } } else if (prop == &m_propertyEdgeColor) { - for (const Handle_MeshVS_Mesh& meshVisu : m_vecMeshVisu) { + for (const OccHandle& meshVisu : m_vecMeshVisu) { meshVisu->GetDrawer()->SetColor(MeshVS_DA_EdgeColor, m_propertyEdgeColor); fnRedisplay(meshVisu); } @@ -197,7 +197,7 @@ class GraphicsMeshObjectDriver::ObjectProperties : public PropertyGroupSignals { PropertyGroupSignals::onPropertyChanged(prop); } - std::vector m_vecMeshVisu; + std::vector> m_vecMeshVisu; PropertyOccColor m_propertyColor{ this, GraphicsMeshObjectDriverI18N::textId("color") }; PropertyOccColor m_propertyEdgeColor{ this, GraphicsMeshObjectDriverI18N::textId("edgeColor") }; PropertyCheckState m_propertyShowEdges{ this, GraphicsMeshObjectDriverI18N::textId("showEdges") }; diff --git a/src/graphics/graphics_mesh_object_driver.h b/src/graphics/graphics_mesh_object_driver.h index 175b95b3..9beef59d 100644 --- a/src/graphics/graphics_mesh_object_driver.h +++ b/src/graphics/graphics_mesh_object_driver.h @@ -12,7 +12,7 @@ namespace Mayo { class GraphicsMeshObjectDriver; DEFINE_STANDARD_HANDLE(GraphicsMeshObjectDriver, GraphicsObjectDriver) -using GraphicsMeshObjectDriverPtr = Handle(GraphicsMeshObjectDriver); +using GraphicsMeshObjectDriverPtr = OccHandle; // Provides creation and configuration of graphics objects for meshes(triangulations) class GraphicsMeshObjectDriver : public GraphicsObjectDriver { diff --git a/src/graphics/graphics_object_driver.h b/src/graphics/graphics_object_driver.h index d85dff39..60ef5145 100644 --- a/src/graphics/graphics_object_driver.h +++ b/src/graphics/graphics_object_driver.h @@ -20,7 +20,7 @@ namespace Mayo { class GraphicsObjectDriver; DEFINE_STANDARD_HANDLE(GraphicsObjectDriver, Standard_Transient) -using GraphicsObjectDriverPtr = Handle(GraphicsObjectDriver); +using GraphicsObjectDriverPtr = OccHandle; // Provides creation and configuration of graphics objects of a specific type // Each graphics object "knows" the driver which created it: use function GraphicsObjectDriver::get() diff --git a/src/graphics/graphics_object_ptr.h b/src/graphics/graphics_object_ptr.h index c61a8658..65052fe0 100644 --- a/src/graphics/graphics_object_ptr.h +++ b/src/graphics/graphics_object_ptr.h @@ -6,11 +6,12 @@ #pragma once +#include "../base/occ_handle.h" #include namespace Mayo { -using GraphicsObjectPtr = Handle(AIS_InteractiveObject); +using GraphicsObjectPtr = OccHandle; using GraphicsObjectSelectionMode = int; } // namespace Mayo diff --git a/src/graphics/graphics_owner_ptr.h b/src/graphics/graphics_owner_ptr.h index 81fc98d5..3e747b9a 100644 --- a/src/graphics/graphics_owner_ptr.h +++ b/src/graphics/graphics_owner_ptr.h @@ -6,10 +6,11 @@ #pragma once +#include "../base/occ_handle.h" #include namespace Mayo { -using GraphicsOwnerPtr = Handle(SelectMgr_EntityOwner); +using GraphicsOwnerPtr = OccHandle; } // namespace Mayo diff --git a/src/graphics/graphics_point_cloud_object_driver.h b/src/graphics/graphics_point_cloud_object_driver.h index 86aafac6..bb99a0ee 100644 --- a/src/graphics/graphics_point_cloud_object_driver.h +++ b/src/graphics/graphics_point_cloud_object_driver.h @@ -13,7 +13,7 @@ namespace Mayo { // Pre-declarations class GraphicsPointCloudObjectDriver; DEFINE_STANDARD_HANDLE(GraphicsPointCloudObjectDriver, GraphicsObjectDriver) -using GraphicsPointCloudObjectDriverPtr = Handle(GraphicsPointCloudObjectDriver); +using GraphicsPointCloudObjectDriverPtr = OccHandle; // Provides creation and configuration of graphics objects for point clouds class GraphicsPointCloudObjectDriver : public GraphicsObjectDriver { diff --git a/src/graphics/graphics_scene.cpp b/src/graphics/graphics_scene.cpp index ccede57d..fc28bfd8 100644 --- a/src/graphics/graphics_scene.cpp +++ b/src/graphics/graphics_scene.cpp @@ -19,13 +19,13 @@ namespace Mayo { // Defined in graphics_create_driver.cpp -Handle_Graphic3d_GraphicDriver graphicsCreateDriver(); +OccHandle graphicsCreateDriver(); namespace Internal { -static Handle_V3d_Viewer createOccViewer() +static OccHandle createOccViewer() { - Handle_V3d_Viewer viewer = new V3d_Viewer(graphicsCreateDriver()); + OccHandle viewer = new V3d_Viewer(graphicsCreateDriver()); viewer->SetDefaultViewSize(1000.); viewer->SetDefaultViewProj(V3d_XposYnegZpos); viewer->SetComputedMode(true); @@ -48,7 +48,7 @@ static Handle_V3d_Viewer createOccViewer() viewer->SetLightOn(); #if 0 - for (const Handle(Graphic3d_CLight)& light : viewer->DefinedLights()) { + for (const OccHandle& light : viewer->DefinedLights()) { if (light->Name() == "amblight" || light->Type() == Graphic3d_TypeOfLightSource_Ambient) { light->SetIntensity(1.f); } @@ -70,7 +70,7 @@ namespace { class InteractiveContext : public AIS_InteractiveContext { DEFINE_STANDARD_RTTI_INLINE(InteractiveContext, AIS_InteractiveContext) public: - InteractiveContext(const Handle_V3d_Viewer& viewer) + InteractiveContext(const OccHandle& viewer) : AIS_InteractiveContext(viewer) {} @@ -92,7 +92,7 @@ DEFINE_STANDARD_HANDLE(InteractiveContext, AIS_InteractiveContext) class GraphicsScene::Private { public: - opencascade::handle m_aisContext; + OccHandle m_aisContext; std::unordered_set m_setClipPlaneSensitive; bool m_isRedrawBlocked = false; SelectionMode m_selectionMode = SelectionMode::Single; @@ -114,17 +114,17 @@ GraphicsScene::~GraphicsScene() delete d; } -opencascade::handle GraphicsScene::createV3dView() +OccHandle GraphicsScene::createV3dView() { return this->v3dViewer()->CreateView(); } -const opencascade::handle& GraphicsScene::v3dViewer() const +const OccHandle& GraphicsScene::v3dViewer() const { return d->m_aisContext->CurrentViewer(); } -const opencascade::handle& GraphicsScene::mainSelector() const +const OccHandle& GraphicsScene::mainSelector() const { return d->m_aisContext->MainSelector(); } @@ -134,12 +134,12 @@ bool GraphicsScene::hiddenLineDrawingOn() const return d->m_aisContext->DrawHiddenLine(); } -const opencascade::handle& GraphicsScene::drawerDefault() const +const OccHandle& GraphicsScene::drawerDefault() const { return d->m_aisContext->DefaultDrawer(); } -const opencascade::handle& GraphicsScene::drawerHighlight(Prs3d_TypeOfHighlight style) const +const OccHandle& GraphicsScene::drawerHighlight(Prs3d_TypeOfHighlight style) const { return d->m_aisContext->HighlightStyle(style); } @@ -304,7 +304,7 @@ AIS_InteractiveContext* GraphicsScene::aisContextPtr() const void GraphicsScene::toggleOwnerSelection(const GraphicsOwnerPtr& gfxOwner) { auto gfxObject = GraphicsObjectPtr::DownCast( - gfxOwner ? gfxOwner->Selectable() : Handle_SelectMgr_SelectableObject() + gfxOwner ? gfxOwner->Selectable() : OccHandle() ); if (GraphicsUtils::AisObject_isVisible(gfxObject)) d->m_aisContext->AddOrRemoveSelected(gfxOwner, false); diff --git a/src/graphics/graphics_scene.h b/src/graphics/graphics_scene.h index b15a812f..295acdcc 100644 --- a/src/graphics/graphics_scene.h +++ b/src/graphics/graphics_scene.h @@ -158,7 +158,7 @@ void GraphicsScene::foreachActiveSelectionMode(const GraphicsObjectPtr& object, template void GraphicsScene::foreachOwner(const GraphicsObjectPtr& object, int selectionMode, Function fn) const { - opencascade::handle mapEntityOwner; + OccHandle mapEntityOwner; this->aisContextPtr()->EntityOwners(mapEntityOwner, object, selectionMode); for (auto it = mapEntityOwner->cbegin(); it != mapEntityOwner->cend(); ++it) fn(*it); diff --git a/src/graphics/graphics_shape_object_driver.cpp b/src/graphics/graphics_shape_object_driver.cpp index e63267a9..41e8d9c0 100644 --- a/src/graphics/graphics_shape_object_driver.cpp +++ b/src/graphics/graphics_shape_object_driver.cpp @@ -95,7 +95,7 @@ void GraphicsShapeObjectDriver::applyDisplayMode(GraphicsObjectPtr object, Enume if (object->Attributes()->FaceBoundaryDraw() != showFaceBounds) { object->Attributes()->SetFaceBoundaryDraw(showFaceBounds); - auto aisLink = Handle_AIS_ConnectedInteractive::DownCast(object); + auto aisLink = OccHandle::DownCast(object); if (aisLink && aisLink->HasConnection()) { aisLink->ConnectedTo()->Attributes()->SetFaceBoundaryDraw(showFaceBounds); aisLink->ConnectedTo()->Redisplay(true); diff --git a/src/graphics/graphics_shape_object_driver.h b/src/graphics/graphics_shape_object_driver.h index 6e56acb5..62eeb2d0 100644 --- a/src/graphics/graphics_shape_object_driver.h +++ b/src/graphics/graphics_shape_object_driver.h @@ -12,7 +12,7 @@ namespace Mayo { class GraphicsShapeObjectDriver; DEFINE_STANDARD_HANDLE(GraphicsShapeObjectDriver, GraphicsObjectDriver) -using GraphicsShapeObjectDriverPtr = Handle(GraphicsShapeObjectDriver); +using GraphicsShapeObjectDriverPtr = OccHandle; // Provides creation and configuration of graphics objects for BRep shapes class GraphicsShapeObjectDriver : public GraphicsObjectDriver { diff --git a/src/graphics/graphics_utils.cpp b/src/graphics/graphics_utils.cpp index 4064b0f7..99022d16 100644 --- a/src/graphics/graphics_utils.cpp +++ b/src/graphics/graphics_utils.cpp @@ -189,7 +189,7 @@ Bnd_Box GraphicsUtils::AisObject_boundingBox(const OccHandlePresentations()) { if (pres.Mode() == object->DisplayMode()) { - const Handle_Prs3d_Presentation& pres3d = pres.Presentation()->Presentation(); + const OccHandle& pres3d = pres.Presentation()->Presentation(); if (!pres3d->CStructure()->BoundingBox().IsValid()) pres3d->CalculateBoundBox(); } diff --git a/src/graphics/graphics_utils.h b/src/graphics/graphics_utils.h index 69884bcb..c9a86176 100644 --- a/src/graphics/graphics_utils.h +++ b/src/graphics/graphics_utils.h @@ -45,13 +45,13 @@ struct GraphicsUtils { static void V3dViewer_setGridColors(const OccHandle& viewer, const AspectGridColors& colors); static void AisContext_eraseObject( - const OccHandle& context, - const OccHandle& object + const OccHandle& context, + const OccHandle& object ); static void AisContext_setObjectVisible( - const OccHandle& context, - const OccHandle& object, - bool on + const OccHandle& context, + const OccHandle& object, + bool on ); static AIS_InteractiveContext* AisObject_contextPtr(const OccHandle& object); @@ -64,16 +64,17 @@ struct GraphicsUtils { static OccHandle AspectDisplayConnection_create(); static void Gfx3dClipPlane_setCappingHatch( - const OccHandle& plane, Aspect_HatchStyle hatch + const OccHandle& plane, Aspect_HatchStyle hatch ); static void Gfx3dClipPlane_setNormal( - const OccHandle& plane, const gp_Dir& n + const OccHandle& plane, const gp_Dir& n ); static void Gfx3dClipPlane_setPosition( - const OccHandle& plane, double pos + const OccHandle& plane, double pos ); static bool ImagePixmap_flipY(Image_PixMap& pixmap); + }; } // namespace Mayo diff --git a/src/gui/gui_document.cpp b/src/gui/gui_document.cpp index 5e07c091..66c0a37b 100644 --- a/src/gui/gui_document.cpp +++ b/src/gui/gui_document.cpp @@ -32,10 +32,10 @@ namespace Mayo { namespace Internal { -static Handle_AIS_Trihedron createOriginTrihedron() +static OccHandle createOriginTrihedron() { - Handle_Geom_Axis2Placement axis = new Geom_Axis2Placement(gp::XOY()); - Handle_AIS_Trihedron aisTrihedron = new AIS_Trihedron(axis); + OccHandle axis = new Geom_Axis2Placement(gp::XOY()); + OccHandle aisTrihedron = new AIS_Trihedron(axis); aisTrihedron->SetDatumDisplayMode(Prs3d_DM_WireFrame); aisTrihedron->SetDrawArrows(false); aisTrihedron->Attributes()->DatumAspect()->LineAspect(Prs3d_DP_XAxis)->SetWidth(2.5); @@ -126,7 +126,7 @@ void GuiDocument::setDevicePixelRatio(double ratio) } case ViewTrihedronMode::AisViewCube: { #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 4, 0) - auto viewCube = Handle(AIS_ViewCube)::DownCast(m_aisViewCube); + auto viewCube = OccHandle::DownCast(m_aisViewCube); if (viewCube) { viewCube->SetSize(55 * m_devicePixelRatio, true/*adaptOtherParams*/); viewCube->SetFontHeight(12 * m_devicePixelRatio); @@ -360,7 +360,7 @@ bool GuiDocument::processAction(const GraphicsOwnerPtr& gfxOwner) return false; #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 4, 0) - auto viewCubeOwner = Handle(AIS_ViewCubeOwner)::DownCast(gfxOwner); + auto viewCubeOwner = OccHandle::DownCast(gfxOwner); if (viewCubeOwner) { this->setViewCameraOrientation(viewCubeOwner->MainOrientation()); return true; @@ -372,7 +372,7 @@ bool GuiDocument::processAction(const GraphicsOwnerPtr& gfxOwner) void GuiDocument::setViewCameraOrientation(V3d_TypeOfOrientation projection) { - this->runViewCameraAnimation([=](Handle_V3d_View view) { + this->runViewCameraAnimation([=](OccHandle view) { view->SetProj(projection); GraphicsUtils::V3dView_fitAll(view); }); @@ -426,7 +426,7 @@ void GuiDocument::setViewTrihedronMode(ViewTrihedronMode mode) ); m_gfxScene.addObject(aisViewCube); //aisViewCube->Attributes()->DatumAspect()->LineAspect(Prs3d_DP_XAxis)->SetColor(Quantity_NOC_RED2); - const Handle_Prs3d_DatumAspect& datumAspect = aisViewCube->Attributes()->DatumAspect(); + const OccHandle& datumAspect = aisViewCube->Attributes()->DatumAspect(); datumAspect->ShadingAspect(Prs3d_DP_XAxis)->SetColor(Quantity_NOC_RED2); datumAspect->ShadingAspect(Prs3d_DP_YAxis)->SetColor(Quantity_NOC_GREEN2); datumAspect->ShadingAspect(Prs3d_DP_ZAxis)->SetColor(Quantity_NOC_BLUE2); @@ -475,7 +475,7 @@ int GuiDocument::aisViewCubeBoundingSize() const return 0; #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 4, 0) - auto hnd = opencascade::handle::DownCast(m_aisViewCube); + auto hnd = OccHandle::DownCast(m_aisViewCube); auto size = 2 * (hnd->Size() + hnd->BoxFacetExtension() @@ -495,7 +495,7 @@ int GuiDocument::aisViewCubeBoundingSize() const bool GuiDocument::isAisViewCubeObject([[maybe_unused]] const GraphicsObjectPtr& gfxObject) { #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 4, 0) - return !opencascade::handle::DownCast(gfxObject).IsNull(); + return !OccHandle::DownCast(gfxObject).IsNull(); #else return false; #endif @@ -543,7 +543,7 @@ void GuiDocument::onGraphicsSelectionChanged() std::vector vecSelected; m_gfxScene.foreachSelectedOwner([&](const GraphicsOwnerPtr& gfxOwner) { auto gfxObject = GraphicsObjectPtr::DownCast( - gfxOwner ? gfxOwner->Selectable() : Handle_SelectMgr_SelectableObject() + gfxOwner ? gfxOwner->Selectable() : OccHandle() ); const TreeNodeId nodeId = this->nodeFromGraphicsObject(gfxObject); if (nodeId != 0) { diff --git a/src/gui/gui_document.h b/src/gui/gui_document.h index 17b3f60a..9fa8e8c5 100644 --- a/src/gui/gui_document.h +++ b/src/gui/gui_document.h @@ -43,7 +43,7 @@ class GuiDocument { GuiApplication* guiApplication() const { return m_guiApp; } - const Handle_V3d_View& v3dView() const { return m_v3dView; } + const OccHandle& v3dView() const { return m_v3dView; } GraphicsScene* graphicsScene() { return &m_gfxScene; } GraphicsViewPtr graphicsView() { return GraphicsViewPtr{ &m_gfxScene, m_v3dView }; } const Bnd_Box& graphicsBoundingBox() const { return m_gfxBoundingBox; } @@ -152,14 +152,14 @@ class GuiDocument { GuiApplication* m_guiApp = nullptr; DocumentPtr m_document; GraphicsScene m_gfxScene; - Handle_V3d_View m_v3dView; - Handle_AIS_InteractiveObject m_aisOriginTrihedron; + OccHandle m_v3dView; + OccHandle m_aisOriginTrihedron; double m_devicePixelRatio = 1.; V3dViewCameraAnimation* m_cameraAnimation = nullptr; ViewTrihedronMode m_viewTrihedronMode = ViewTrihedronMode::None; Aspect_TypeOfTriedronPosition m_viewTrihedronCorner = Aspect_TOTP_LEFT_UPPER; - Handle_AIS_InteractiveObject m_aisViewCube; + OccHandle m_aisViewCube; std::vector m_vecGraphicsEntity; Bnd_Box m_gfxBoundingBox; diff --git a/src/gui/v3d_view_camera_animation.cpp b/src/gui/v3d_view_camera_animation.cpp index 45c373d5..1d8edc49 100644 --- a/src/gui/v3d_view_camera_animation.cpp +++ b/src/gui/v3d_view_camera_animation.cpp @@ -25,7 +25,7 @@ void V3dViewCameraAnimation::setBackend(std::unique_ptr anim) } } -void V3dViewCameraAnimation::setView(const Handle_V3d_View& view) +void V3dViewCameraAnimation::setView(const OccHandle& view) { if (this->isRunning()) this->stop(); @@ -57,12 +57,12 @@ void V3dViewCameraAnimation::stop() m_backend->stop(); } -void V3dViewCameraAnimation::setCameraStart(const Handle_Graphic3d_Camera& camera) +void V3dViewCameraAnimation::setCameraStart(const OccHandle& camera) { m_cameraStart->Copy(camera); } -void V3dViewCameraAnimation::setCameraEnd(const Handle_Graphic3d_Camera& camera) +void V3dViewCameraAnimation::setCameraEnd(const OccHandle& camera) { m_cameraEnd->Copy(camera); } @@ -96,7 +96,7 @@ void V3dViewCameraAnimation::updateCurrentTime(QuantityTime currTime) const double t = m_backend ? m_backend->valueForProgress(currTime / m_duration) : 0.; const bool prevImmediateUpdate = m_view->SetImmediateUpdate(false); const Graphic3d_CameraLerp cameraLerp(m_cameraStart, m_cameraEnd); - Handle_Graphic3d_Camera camera = m_view->Camera(); + OccHandle camera = m_view->Camera(); cameraLerp.Interpolate(t, camera); m_view->SetCamera(camera); m_view->ZFitAll(); diff --git a/src/gui/v3d_view_camera_animation.h b/src/gui/v3d_view_camera_animation.h index 0b300664..655f6371 100644 --- a/src/gui/v3d_view_camera_animation.h +++ b/src/gui/v3d_view_camera_animation.h @@ -6,6 +6,7 @@ #pragma once +#include "../base/occ_handle.h" #include "../base/quantity.h" #include @@ -29,7 +30,7 @@ class IAnimationBackend { // Provides animation control for 3D view camera class V3dViewCameraAnimation { public: - using ViewFunction = std::function; + using ViewFunction = std::function&)>; V3dViewCameraAnimation(); ~V3dViewCameraAnimation() = default; @@ -37,8 +38,8 @@ class V3dViewCameraAnimation { bool hasBackend() const { return m_backend.get() != nullptr; } void setBackend(std::unique_ptr anim); - const Handle_V3d_View& view() const { return m_view; } - void setView(const Handle_V3d_View& view); + const OccHandle& view() const { return m_view; } + void setView(const OccHandle& view); QuantityTime duration() const { return m_duration; } void setDuration(QuantityTime t); @@ -47,8 +48,8 @@ class V3dViewCameraAnimation { void start(); void stop(); - void setCameraStart(const Handle_Graphic3d_Camera& camera); - void setCameraEnd(const Handle_Graphic3d_Camera& camera); + void setCameraStart(const OccHandle& camera); + void setCameraEnd(const OccHandle& camera); void configureCameraChange(const ViewFunction& fnViewChange); void setRenderFunction(ViewFunction fnViewRender); @@ -57,11 +58,11 @@ class V3dViewCameraAnimation { void updateCurrentTime(QuantityTime currTime); std::unique_ptr m_backend; - Handle_V3d_View m_view; - Handle_Graphic3d_Camera m_cameraStart; - Handle_Graphic3d_Camera m_cameraEnd; + OccHandle m_view; + OccHandle m_cameraStart; + OccHandle m_cameraEnd; QuantityTime m_duration = 1 * Quantity_Second; - std::function m_fnViewRender; + std::function&)> m_fnViewRender; }; } // namespace Mayo diff --git a/src/gui/v3d_view_controller.cpp b/src/gui/v3d_view_controller.cpp index 16fdbbae..1a2af3cc 100644 --- a/src/gui/v3d_view_controller.cpp +++ b/src/gui/v3d_view_controller.cpp @@ -13,7 +13,7 @@ namespace Mayo { -V3dViewController::V3dViewController(const Handle_V3d_View& view) +V3dViewController::V3dViewController(const OccHandle& view) : m_view(view) { } diff --git a/src/gui/v3d_view_controller.h b/src/gui/v3d_view_controller.h index f89a636f..115e8a97 100644 --- a/src/gui/v3d_view_controller.h +++ b/src/gui/v3d_view_controller.h @@ -6,6 +6,7 @@ #pragma once +#include "../base/occ_handle.h" #include "../base/quantity.h" #include "../base/signal.h" #include "gui_vkey_mouse.h" @@ -33,7 +34,7 @@ class V3dViewController { virtual void setVisible(bool on) = 0; }; - V3dViewController(const Handle_V3d_View& view); + V3dViewController(const OccHandle& view); virtual ~V3dViewController() = default; DynamicAction currentDynamicAction() const; @@ -90,11 +91,11 @@ class V3dViewController { virtual void redrawView(); private: - Handle_V3d_View m_view; + OccHandle m_view; DynamicAction m_dynamicAction = DynamicAction::None; std::unique_ptr m_rubberBand; double m_instantZoomFactor = 5.; - Handle_Graphic3d_Camera m_cameraBackup; + OccHandle m_cameraBackup; Position m_posRubberBandStart = {}; }; diff --git a/src/io_dxf/io_dxf.cpp b/src/io_dxf/io_dxf.cpp index b602f4d4..be17feff 100644 --- a/src/io_dxf/io_dxf.cpp +++ b/src/io_dxf/io_dxf.cpp @@ -80,10 +80,10 @@ const Enumeration& systemFontNames() static Enumeration fontNames; static TColStd_SequenceOfHAsciiString seqFontName; if (fontNames.empty()) { - Handle_Font_FontMgr fontMgr = Font_FontMgr::GetInstance(); + OccHandle fontMgr = Font_FontMgr::GetInstance(); fontMgr->GetAvailableFontsNames(seqFontName); int i = 0; - for (const Handle_TCollection_HAsciiString& fontName : seqFontName) + for (const OccHandle& fontName : seqFontName) fontNames.addItem(i++, { {}, to_stdStringView(fontName->String()) }); } @@ -137,8 +137,8 @@ class DxfReader::Internal : public CDxfRead { void ReportError(const std::string& msg) override; void AddGraphics() const override; - static Handle_Geom_BSplineCurve createSplineFromPolesAndKnots(const Dxf_SPLINE& spline); - static Handle_Geom_BSplineCurve createInterpolationSpline(const Dxf_SPLINE& spline); + static OccHandle createSplineFromPolesAndKnots(const Dxf_SPLINE& spline); + static OccHandle createInterpolationSpline(const Dxf_SPLINE& spline); gp_Pnt toPnt(const DxfCoords& coords) const; void addShape(const TopoDS_Shape& shape); @@ -190,9 +190,9 @@ bool DxfReader::readFile(const FilePath& filepath, TaskProgress* progress) TDF_LabelSequence DxfReader::transfer(DocumentPtr doc, TaskProgress* progress) { TDF_LabelSequence seqLabel; - Handle_XCAFDoc_ShapeTool shapeTool = doc->xcaf().shapeTool(); - Handle_XCAFDoc_ColorTool colorTool = doc->xcaf().colorTool(); - Handle_XCAFDoc_LayerTool layerTool = doc->xcaf().layerTool(); + OccHandle shapeTool = doc->xcaf().shapeTool(); + OccHandle colorTool = doc->xcaf().colorTool(); + OccHandle layerTool = doc->xcaf().layerTool(); std::unordered_map mapLayerNameLabel; std::unordered_map mapAciColorLabel; @@ -694,7 +694,7 @@ void DxfReader::Internal::OnReadSpline(const Dxf_SPLINE& spline) { // https://documentation.help/AutoCAD-DXF/WS1a9193826455f5ff18cb41610ec0a2e719-79e1.htm try { - Handle_Geom_BSplineCurve geom; + OccHandle geom; if (!spline.controlPoints.empty()) geom = createSplineFromPolesAndKnots(spline); else if (!spline.fitPoints.empty()) @@ -887,7 +887,7 @@ TopoDS_Face DxfReader::Internal::makeFace(const Dxf_QuadBase& quad) const } // Excerpted from FreeCad/src/Mod/Import/App/ImpExpDxf -Handle_Geom_BSplineCurve DxfReader::Internal::createSplineFromPolesAndKnots(const Dxf_SPLINE& spline) +OccHandle DxfReader::Internal::createSplineFromPolesAndKnots(const Dxf_SPLINE& spline) { if (spline.weights.size() > spline.controlPoints.size()) return {}; @@ -951,7 +951,7 @@ Handle_Geom_BSplineCurve DxfReader::Internal::createSplineFromPolesAndKnots(cons } // Excerpted from FreeCad/src/Mod/Import/App/ImpExpDxf -Handle_Geom_BSplineCurve DxfReader::Internal::createInterpolationSpline(const Dxf_SPLINE& spline) +OccHandle DxfReader::Internal::createInterpolationSpline(const Dxf_SPLINE& spline) { const auto iNumPoints = CppUtils::safeStaticCast(spline.fitPoints.size()); diff --git a/src/io_gmio/io_gmio_amf_writer.cpp b/src/io_gmio/io_gmio_amf_writer.cpp index 4222c816..9bd77fb7 100644 --- a/src/io_gmio/io_gmio_amf_writer.cpp +++ b/src/io_gmio/io_gmio_amf_writer.cpp @@ -319,7 +319,7 @@ int GmioAmfWriter::createObject(const TDF_Label& labelShape) // Object meshes const int meshCount = int(m_vecMesh.size()); - auto fnAddMesh = [&](const Handle_Poly_Triangulation& polyTri, const TopLoc_Location& loc) { + auto fnAddMesh = [&](const OccHandle& polyTri, const TopLoc_Location& loc) { if (!polyTri.IsNull()) { Mesh mesh; mesh.id = int(m_vecMesh.size()); diff --git a/src/io_gmio/io_gmio_amf_writer.h b/src/io_gmio/io_gmio_amf_writer.h index 39adcc54..7042e5d4 100644 --- a/src/io_gmio/io_gmio_amf_writer.h +++ b/src/io_gmio/io_gmio_amf_writer.h @@ -112,7 +112,7 @@ class GmioAmfWriter : public Writer { struct Mesh { int id = -1; - Handle_Poly_Triangulation triangulation; + OccHandle triangulation; TopLoc_Location location; int materialId = -1; }; diff --git a/src/io_image/io_image.cpp b/src/io_image/io_image.cpp index 88f09b6a..9bd63361 100644 --- a/src/io_image/io_image.cpp +++ b/src/io_image/io_image.cpp @@ -35,7 +35,7 @@ namespace Mayo { // Defined in graphics_create_virtual_window.cpp -Handle_Aspect_Window graphicsCreateVirtualWindow(const Handle_Graphic3d_GraphicDriver&, int , int); +OccHandle graphicsCreateVirtualWindow(const OccHandle&, int , int); namespace IO { @@ -110,7 +110,7 @@ bool ImageWriter::writeFile(const FilePath& filepath, TaskProgress* progress) // Create 3D view GraphicsScene gfxScene; - Handle_V3d_View view = ImageWriter::createV3dView(&gfxScene, m_params); + OccHandle view = ImageWriter::createV3dView(&gfxScene, m_params); const int itemCount = CppUtils::safeStaticCast(m_vecAppItem.size()); // Render application items @@ -134,7 +134,7 @@ bool ImageWriter::writeFile(const FilePath& filepath, TaskProgress* progress) view->Redraw(); GraphicsUtils::V3dView_fitAll(view); - Handle_Image_AlienPixMap pixmap = ImageWriter::createImage(view); + OccHandle pixmap = ImageWriter::createImage(view); if (!pixmap) return false; @@ -159,14 +159,14 @@ void ImageWriter::applyProperties(const PropertyGroup* params) } } -Handle_Image_AlienPixMap ImageWriter::createImage(GuiDocument* guiDoc, const Parameters& params) +OccHandle ImageWriter::createImage(GuiDocument* guiDoc, const Parameters& params) { if (!guiDoc) return {}; const GuiDocument::ViewTrihedronMode onEntryTrihedronMode = guiDoc->viewTrihedronMode(); const bool onEntryOriginTrihedronVisible = guiDoc->isOriginTrihedronVisible(); - Handle_V3d_View view = ImageWriter::createV3dView(guiDoc->graphicsScene(), params); + OccHandle view = ImageWriter::createV3dView(guiDoc->graphicsScene(), params); auto _ = gsl::finally([=]{ guiDoc->graphicsScene()->v3dViewer()->SetViewOff(view); @@ -184,9 +184,9 @@ Handle_Image_AlienPixMap ImageWriter::createImage(GuiDocument* guiDoc, const Par return ImageWriter::createImage(view); } -Handle_Image_AlienPixMap ImageWriter::createImage(Handle_V3d_View view) +OccHandle ImageWriter::createImage(OccHandle view) { - Handle_Image_AlienPixMap pixmap = new Image_AlienPixMap; + OccHandle pixmap = new Image_AlienPixMap; V3d_ImageDumpOptions dumpOptions; dumpOptions.BufferType = Graphic3d_BT_RGB; view->Window()->Size(dumpOptions.Width, dumpOptions.Height); @@ -198,7 +198,7 @@ Handle_Image_AlienPixMap ImageWriter::createImage(Handle_V3d_View view) return pixmap; } -Handle_V3d_View ImageWriter::createV3dView(GraphicsScene* gfxScene, const Parameters& params) +OccHandle ImageWriter::createV3dView(GraphicsScene* gfxScene, const Parameters& params) { auto fnToGfxCamProjection = [](ImageWriter::CameraProjection proj) { switch (proj) { @@ -209,7 +209,7 @@ Handle_V3d_View ImageWriter::createV3dView(GraphicsScene* gfxScene, const Parame }; // Create 3D view - Handle_V3d_View view = gfxScene->createV3dView(); + OccHandle view = gfxScene->createV3dView(); view->ChangeRenderingParams().IsAntialiasingEnabled = true; view->ChangeRenderingParams().NbMsaaSamples = 4; view->SetBackgroundColor(params.backgroundColor); diff --git a/src/io_image/io_image.h b/src/io_image/io_image.h index 66b70076..a2e9ea22 100644 --- a/src/io_image/io_image.h +++ b/src/io_image/io_image.h @@ -59,9 +59,9 @@ class ImageWriter : public Writer { const Parameters& constParameters() const { return m_params; } // Helper - static Handle_Image_AlienPixMap createImage(GuiDocument* guiDoc, const Parameters& params); - static Handle_Image_AlienPixMap createImage(Handle_V3d_View view); - static Handle_V3d_View createV3dView(GraphicsScene* gfxScene, const Parameters& params); + static OccHandle createImage(GuiDocument* guiDoc, const Parameters& params); + static OccHandle createImage(OccHandle view); + static OccHandle createV3dView(GraphicsScene* gfxScene, const Parameters& params); private: class Properties; diff --git a/src/io_occ/io_occ_base_mesh.cpp b/src/io_occ/io_occ_base_mesh.cpp index a4a90592..46f8ff8f 100644 --- a/src/io_occ/io_occ_base_mesh.cpp +++ b/src/io_occ/io_occ_base_mesh.cpp @@ -77,7 +77,7 @@ TDF_LabelSequence OccBaseMeshReader::transfer(DocumentPtr doc, TaskProgress* pro this->applyParameters(); m_reader.SetDocument(doc); const TDF_LabelSequence seqMark = doc->xcaf().topLevelFreeShapes(); - Handle_Message_ProgressIndicator indicator = new OccProgressIndicator(progress); + OccHandle indicator = new OccProgressIndicator(progress); m_reader.Perform(m_filepath.u8string().c_str(), TKernelUtils::start(indicator)); return doc->xcaf().diffTopLevelFreeShapes(seqMark); } diff --git a/src/io_occ/io_occ_brep.cpp b/src/io_occ/io_occ_brep.cpp index f39c7ec3..72630d9e 100644 --- a/src/io_occ/io_occ_brep.cpp +++ b/src/io_occ/io_occ_brep.cpp @@ -28,7 +28,7 @@ bool OccBRepReader::readFile(const FilePath& filepath, TaskProgress* progress) m_shape.Nullify(); m_baseFilename = filepath.stem(); BRep_Builder brepBuilder; - Handle_Message_ProgressIndicator indicator = new OccProgressIndicator(progress); + OccHandle indicator = new OccProgressIndicator(progress); return BRepTools::Read( m_shape, filepath.u8string().c_str(), @@ -41,7 +41,7 @@ TDF_LabelSequence OccBRepReader::transfer(DocumentPtr doc, TaskProgress* /*progr if (m_shape.IsNull()) return {}; - const Handle_XCAFDoc_ShapeTool shapeTool = doc->xcaf().shapeTool(); + const OccHandle shapeTool = doc->xcaf().shapeTool(); const TDF_Label labelShape = shapeTool->NewShape(); shapeTool->SetShape(labelShape, m_shape); TDataStd_Name::Set(labelShape, filepathTo(m_baseFilename)); @@ -79,7 +79,7 @@ bool OccBRepWriter::transfer(Span appItems, TaskProgress* bool OccBRepWriter::writeFile(const FilePath& filepath, TaskProgress* progress) { - Handle_Message_ProgressIndicator indicator = new OccProgressIndicator(progress); + OccHandle indicator = new OccProgressIndicator(progress); return BRepTools::Write(m_shape, filepath.u8string().c_str(), TKernelUtils::start(indicator)); } diff --git a/src/io_occ/io_occ_caf.cpp b/src/io_occ/io_occ_caf.cpp index 269347da..a78d618a 100644 --- a/src/io_occ/io_occ_caf.cpp +++ b/src/io_occ/io_occ_caf.cpp @@ -35,13 +35,13 @@ bool cafGenericReadFile(CafReaderType& reader, const FilePath& filepath, TaskPro template TDF_LabelSequence cafGenericReadTransfer(CafReaderType& reader, DocumentPtr doc, TaskProgress* progress) { - Handle_Message_ProgressIndicator indicator = new OccProgressIndicator(progress); + OccHandle indicator = new OccProgressIndicator(progress); const TDF_LabelSequence seqMark = doc->xcaf().topLevelFreeShapes(); - Handle_TDocStd_Document stdDoc = doc; + OccHandle stdDoc = doc; #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 5, 0) const bool okTransfer = reader.Transfer(stdDoc, indicator->Start()); #else - Handle_XSControl_WorkSession ws = Private::cafWorkSession(reader); + OccHandle ws = Private::cafWorkSession(reader); ws->MapReader()->SetProgress(indicator); auto _ = gsl::finally([&]{ ws->MapReader()->SetProgress(nullptr); }); const bool okTransfer = reader.Transfer(stdDoc); @@ -53,7 +53,7 @@ TDF_LabelSequence cafGenericReadTransfer(CafReaderType& reader, DocumentPtr doc, template bool cafGenericWriteTransfer(CafWriterType& writer, Span appItems, TaskProgress* progress) { - Handle_Message_ProgressIndicator indicator = new OccProgressIndicator(progress); + OccHandle indicator = new OccProgressIndicator(progress); #if OCC_VERSION_HEX < OCC_VERSION_CHECK(7, 5, 0) Private::cafFinderProcess(writer)->SetProgress(indicator); auto _ = gsl::finally([&]{ Private::cafFinderProcess(writer)->SetProgress(nullptr); }); @@ -87,11 +87,11 @@ std::mutex& cafGlobalMutex() return mutex; } -Handle_XSControl_WorkSession cafWorkSession(const STEPCAFControl_Reader& reader) { +OccHandle cafWorkSession(const STEPCAFControl_Reader& reader) { return reader.Reader().WS(); } -Handle_XSControl_WorkSession cafWorkSession(const IGESCAFControl_Reader& reader) { +OccHandle cafWorkSession(const IGESCAFControl_Reader& reader) { return reader.WS(); } @@ -111,11 +111,11 @@ TDF_LabelSequence cafTransfer(STEPCAFControl_Reader& reader, DocumentPtr doc, Ta return cafGenericReadTransfer(reader, doc, progress); } -Handle_Transfer_FinderProcess cafFinderProcess(const IGESCAFControl_Writer& writer) { +OccHandle cafFinderProcess(const IGESCAFControl_Writer& writer) { return writer.TransferProcess(); } -Handle_Transfer_FinderProcess cafFinderProcess(const STEPCAFControl_Writer& writer) { +OccHandle cafFinderProcess(const STEPCAFControl_Writer& writer) { return writer.Writer().WS()->TransferWriter()->FinderProcess(); } diff --git a/src/io_occ/io_occ_caf.h b/src/io_occ/io_occ_caf.h index 2391de69..a00b4dca 100644 --- a/src/io_occ/io_occ_caf.h +++ b/src/io_occ/io_occ_caf.h @@ -36,11 +36,11 @@ std::mutex& cafGlobalMutex(); #define MayoIO_CafGlobalScopedLock(name) \ [[maybe_unused]] std::lock_guard name(Mayo::IO::Private::cafGlobalMutex()); -Handle_XSControl_WorkSession cafWorkSession(const IGESCAFControl_Reader& reader); -Handle_XSControl_WorkSession cafWorkSession(const STEPCAFControl_Reader& reader); +OccHandle cafWorkSession(const IGESCAFControl_Reader& reader); +OccHandle cafWorkSession(const STEPCAFControl_Reader& reader); -Handle_Transfer_FinderProcess cafFinderProcess(const IGESCAFControl_Writer& writer); -Handle_Transfer_FinderProcess cafFinderProcess(const STEPCAFControl_Writer& writer); +OccHandle cafFinderProcess(const IGESCAFControl_Writer& writer); +OccHandle cafFinderProcess(const STEPCAFControl_Writer& writer); bool cafReadFile(IGESCAFControl_Reader& reader, const FilePath& filepath, TaskProgress* progress); bool cafReadFile(STEPCAFControl_Reader& reader, const FilePath& filepath, TaskProgress* progress); diff --git a/src/io_occ/io_occ_gltf_writer.cpp b/src/io_occ/io_occ_gltf_writer.cpp index ca6da673..03cbb836 100644 --- a/src/io_occ/io_occ_gltf_writer.cpp +++ b/src/io_occ/io_occ_gltf_writer.cpp @@ -144,7 +144,7 @@ bool OccGltfWriter::writeFile(const FilePath& filepath, TaskProgress* progress) if (!m_document) return false; - Handle_Message_ProgressIndicator occProgress = new OccProgressIndicator(progress); + OccHandle occProgress = new OccProgressIndicator(progress); const bool isBinary = m_params.format == Format::Binary; RWGltf_CafWriter writer(filepath.u8string().c_str(), isBinary); writer.ChangeCoordinateSystemConverter().SetInputCoordinateSystem(m_params.inputCoordinateSystem); diff --git a/src/io_occ/io_occ_obj_writer.cpp b/src/io_occ/io_occ_obj_writer.cpp index 30123691..4bebcdbf 100644 --- a/src/io_occ/io_occ_obj_writer.cpp +++ b/src/io_occ/io_occ_obj_writer.cpp @@ -68,7 +68,7 @@ bool OccObjWriter::writeFile(const FilePath& filepath, TaskProgress* progress) if (!m_document) return false; - Handle_Message_ProgressIndicator occProgress = new OccProgressIndicator(progress); + OccHandle occProgress = new OccProgressIndicator(progress); RWObj_CafWriter writer(filepath.u8string().c_str()); writer.ChangeCoordinateSystemConverter().SetInputCoordinateSystem(m_params.inputCoordinateSystem); writer.ChangeCoordinateSystemConverter().SetOutputCoordinateSystem(m_params.outputCoordinateSystem); diff --git a/src/io_occ/io_occ_step.cpp b/src/io_occ/io_occ_step.cpp index 85b343af..e67ff7aa 100644 --- a/src/io_occ/io_occ_step.cpp +++ b/src/io_occ/io_occ_step.cpp @@ -8,6 +8,7 @@ #include "io_occ_caf.h" #include "../base/messenger.h" #include "../base/meta_enum.h" +#include "../base/occ_handle.h" #include "../base/occ_static_variables_rollback.h" #include "../base/property_builtins.h" #include "../base/property_enumeration.h" @@ -232,12 +233,14 @@ class OccStepWriter::Properties : public PropertyGroup { this->lengthUnit.setDescription( textIdTr("Defines a unit in which the STEP file should be written. If set to " "unit other than millimeter, the model is converted to these units " - "during the translation")); + "during the translation") + ); this->freeVertexMode.setDescription( textIdTr("Parameter to write all free vertices in one SDR (name and style of " "vertex are lost) or each vertex in its own SDR (name and style of " - "vertex are exported)")); + "vertex are exported)") + ); this->freeVertexMode.setDescriptions({ { FreeVertexMode::Compound, textIdTr("All free vertices are united into one " "compound and exported in one shape definition representation (vertex name " @@ -250,11 +253,13 @@ class OccStepWriter::Properties : public PropertyGroup { this->writePCurves.setDescription( textIdTr("Indicates whether parametric curves (curves in parametric space of surface) should be " "written into the STEP file.\n" - "It can be disabled in order to minimize the size of the resulting file.")); + "It can be disabled in order to minimize the size of the resulting file.") + ); this->writeSubShapesNames.setDescription( textIdTr("Indicates whether to write sub-shape names to 'Name' attributes of " - "STEP Representation Items")); + "STEP Representation Items") + ); this->headerAuthor.setDescription(textIdTr("Author attribute in STEP header")); this->headerOrganization.setDescription(textIdTr("Organization(of author) attribute in STEP header")); @@ -334,7 +339,6 @@ bool OccStepWriter::writeFile(const FilePath& filepath, TaskProgress* /*progress makeHeader.SetOrganizationValue(1, to_OccHandleHAsciiString(m_params.headerOrganization)); makeHeader.SetOriginatingSystem(to_OccHandleHAsciiString(m_params.headerOriginatingSystem)); makeHeader.SetDescriptionValue(1, to_OccHandleHAsciiString(m_params.headerDescription)); - const IFSelect_ReturnStatus err = m_writer->Write(filepath.u8string().c_str()); return err == IFSelect_RetDone; } diff --git a/src/io_occ/io_occ_stl.cpp b/src/io_occ/io_occ_stl.cpp index 869bd3b8..ab661cd1 100644 --- a/src/io_occ/io_occ_stl.cpp +++ b/src/io_occ/io_occ_stl.cpp @@ -73,7 +73,7 @@ class OccStlWriter::Properties : public PropertyGroup { bool OccStlReader::readFile(const FilePath& filepath, TaskProgress* progress) { - Handle_Message_ProgressIndicator indicator = new OccProgressIndicator(progress); + OccHandle indicator = new OccProgressIndicator(progress); m_baseFilename = filepath.stem(); m_mesh = RWStl::ReadFile(filepath.u8string().c_str(), TKernelUtils::start(indicator)); return !m_mesh.IsNull(); @@ -131,7 +131,7 @@ bool OccStlWriter::writeFile(const FilePath& filepath, TaskProgress* progress) writer.ASCIIMode() = m_params.format == Format::Ascii; const std::string strFilepath = filepath.u8string(); #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 5, 0) - Handle_Message_ProgressIndicator indicator = new OccProgressIndicator(progress); + OccHandle indicator = new OccProgressIndicator(progress); return writer.Write(m_shape, strFilepath.c_str(), TKernelUtils::start(indicator)); #else MAYO_UNUSED(progress); diff --git a/src/io_occ/io_occ_stl.h b/src/io_occ/io_occ_stl.h index 90df8723..365ff999 100644 --- a/src/io_occ/io_occ_stl.h +++ b/src/io_occ/io_occ_stl.h @@ -8,6 +8,7 @@ #include "../base/io_reader.h" #include "../base/io_writer.h" +#include "../base/occ_handle.h" #include #include @@ -22,7 +23,7 @@ class OccStlReader : public Reader { void applyProperties(const PropertyGroup*) override {} private: - Handle_Poly_Triangulation m_mesh; + OccHandle m_mesh; FilePath m_baseFilename; }; diff --git a/src/io_off/io_off_reader.cpp b/src/io_off/io_off_reader.cpp index e3572b84..2318d004 100644 --- a/src/io_off/io_off_reader.cpp +++ b/src/io_off/io_off_reader.cpp @@ -315,7 +315,7 @@ TDF_Label OffReader::transferMesh(DocumentPtr doc, TaskProgress* progress) triangleCount += facet.vertexCount - 2; // Create mesh object - Handle_Poly_Triangulation mesh = new Poly_Triangulation(vertexCount, triangleCount, false/*!hasUvNodes*/); + OccHandle mesh = new Poly_Triangulation(vertexCount, triangleCount, false/*!hasUvNodes*/); // Helper function for progress report auto fnUpdateProgress = [=](int current) { diff --git a/src/io_off/io_off_writer.cpp b/src/io_off/io_off_writer.cpp index 19519e65..8c450547 100644 --- a/src/io_off/io_off_writer.cpp +++ b/src/io_off/io_off_writer.cpp @@ -73,7 +73,7 @@ bool OffWriter::writeFile(const FilePath& filepath, TaskProgress* progress) for (const DocumentTreeNode& treeNode : m_vecTreeNode) { IMeshAccess_visitMeshes(treeNode, [&](const IMeshAccess& mesh) { const gp_Trsf& meshTrsf = mesh.location().Transformation(); - const Handle(Poly_Triangulation)& triangulation = mesh.triangulation(); + const OccHandle& triangulation = mesh.triangulation(); for (int i = 1; i <= triangulation->NbNodes(); ++i) { const gp_Pnt pnt = triangulation->Node(i).Transformed(meshTrsf); const std::optional color = mesh.nodeColor(i - 1); @@ -96,7 +96,7 @@ bool OffWriter::writeFile(const FilePath& filepath, TaskProgress* progress) int ifacet = 0; for (const DocumentTreeNode& treeNode : m_vecTreeNode) { IMeshAccess_visitMeshes(treeNode, [&](const IMeshAccess& mesh) { - const Handle(Poly_Triangulation)& triangulation = mesh.triangulation(); + const OccHandle& triangulation = mesh.triangulation(); for (int i = 1; i <= triangulation->NbTriangles(); ++i) { const Poly_Triangle& tri = triangulation->Triangle(i); fstr << "3 " diff --git a/src/io_ply/io_ply_reader.cpp b/src/io_ply/io_ply_reader.cpp index 67930b10..c2662c02 100644 --- a/src/io_ply/io_ply_reader.cpp +++ b/src/io_ply/io_ply_reader.cpp @@ -155,7 +155,7 @@ TDF_Label PlyReader::transferMesh(DocumentPtr doc, TaskProgress* /*progress*/) { // Create target mesh const int triangleCount = CppUtils::safeStaticCast(m_vecIndex.size() / 3); - Handle_Poly_Triangulation mesh = new Poly_Triangulation(m_nodeCount, triangleCount, false/*hasUvNodes*/); + OccHandle mesh = new Poly_Triangulation(m_nodeCount, triangleCount, false/*hasUvNodes*/); if (!m_vecNormalCoord.empty()) MeshUtils::allocateNormals(mesh); diff --git a/src/io_ply/io_ply_writer.cpp b/src/io_ply/io_ply_writer.cpp index 3231db4e..ef4b4743 100644 --- a/src/io_ply/io_ply_writer.cpp +++ b/src/io_ply/io_ply_writer.cpp @@ -260,7 +260,7 @@ void PlyWriter::applyProperties(const PropertyGroup* params) void PlyWriter::addMesh(const IMeshAccess& mesh) { - const Handle(Poly_Triangulation)& triangulation = mesh.triangulation(); + const OccHandle& triangulation = mesh.triangulation(); for (int i = 1; i <= triangulation->NbTriangles(); ++i) { const Poly_Triangle& triangle = triangulation->Triangle(i); const int32_t offset = CppUtils::safeStaticCast(m_vecNode.size()); @@ -286,7 +286,7 @@ void PlyWriter::addMesh(const IMeshAccess& mesh) void PlyWriter::addPointCloud(const PointCloudDataPtr& pntCloud) { - const Handle(Graphic3d_ArrayOfPoints)& points = pntCloud->points(); + const OccHandle& points = pntCloud->points(); const int pntCount = points->VertexNumber(); for (int i = 1; i <= pntCount; ++i) { const Vertex vertex = PlyWriter::toVertex(points->Vertice(i)); diff --git a/src/measure/measure_display.cpp b/src/measure/measure_display.cpp index 6ce4e81e..2ae9a285 100644 --- a/src/measure/measure_display.cpp +++ b/src/measure/measure_display.cpp @@ -130,7 +130,7 @@ std::string BaseMeasureDisplay::graphicsText(const gp_Pnt& pnt, const MeasureDis return BaseMeasureDisplay; } -void BaseMeasureDisplay::adaptScale(const Handle_AIS_TextLabel& gfxText, const MeasureDisplayConfig& config) +void BaseMeasureDisplay::adaptScale(const OccHandle& gfxText, const MeasureDisplayConfig& config) { static const Prs3d_TextAspect defaultTextAspect; gfxText->SetHeight(defaultTextAspect.Height() * config.devicePixelRatio); @@ -141,7 +141,7 @@ void BaseMeasureDisplay::applyGraphicsDefaults(IMeasureDisplay* measureDisplay) for (int i = 0; i < measureDisplay->graphicsObjectsCount(); ++i) { auto gfxObject = measureDisplay->graphicsObjectAt(i); gfxObject->SetZLayer(Graphic3d_ZLayerId_Topmost); - auto gfxText = Handle(AIS_TextLabel)::DownCast(gfxObject); + auto gfxText = OccHandle::DownCast(gfxObject); if (gfxText) { gfxText->SetDisplayType(Aspect_TODT_SUBTITLE); gfxText->SetColorSubTitle(Quantity_NOC_BLACK); @@ -343,7 +343,7 @@ MeasureDisplayAngle::MeasureDisplayAngle(MeasureAngle angle) const gp_Vec vec1(angle.pntCenter, angle.pnt1); const gp_Vec vec2(angle.pntCenter, angle.pnt2); const gp_Ax2 axCircle(angle.pntCenter, vec1.Crossed(vec2), vec1); - Handle_Geom_Circle geomCircle = new Geom_Circle(axCircle, 0.8 * vec1.Magnitude()); + OccHandle geomCircle = new Geom_Circle(axCircle, 0.8 * vec1.Magnitude()); const double param1 = ElCLib::Parameter(geomCircle->Circ(), angle.pnt1); const double param2 = ElCLib::Parameter(geomCircle->Circ(), angle.pnt2); m_gfxAngle = new AIS_Circle(geomCircle, param1, param2); diff --git a/src/measure/measure_display.h b/src/measure/measure_display.h index 4cb70713..8c545726 100644 --- a/src/measure/measure_display.h +++ b/src/measure/measure_display.h @@ -90,7 +90,7 @@ class BaseMeasureDisplay : public IMeasureDisplay { static std::string text(const gp_Pnt& pnt, const MeasureDisplayConfig& config); static std::string text(double value, const MeasureDisplayConfig& config); static std::string graphicsText(const gp_Pnt& pnt, const MeasureDisplayConfig& config); - static void adaptScale(const Handle_AIS_TextLabel& gfxText, const MeasureDisplayConfig& config); + static void adaptScale(const OccHandle& gfxText, const MeasureDisplayConfig& config); static void applyGraphicsDefaults(IMeasureDisplay* measureDisplay); @@ -112,7 +112,7 @@ class MeasureDisplayVertex : public BaseMeasureDisplay { private: gp_Pnt m_pnt; - Handle_AIS_TextLabel m_gfxText; + OccHandle m_gfxText; }; // -- @@ -128,9 +128,9 @@ class MeasureDisplayCircleCenter : public BaseMeasureDisplay { private: gp_Circ m_circle; - Handle_AIS_Point m_gfxPoint; - Handle_AIS_TextLabel m_gfxText; - Handle_AIS_Circle m_gfxCircle; + OccHandle m_gfxPoint; + OccHandle m_gfxText; + OccHandle m_gfxCircle; }; // -- @@ -148,9 +148,9 @@ class MeasureDisplayCircleDiameter : public BaseMeasureDisplay { static gp_Pnt diameterOpposedPnt(const gp_Pnt& pntOnCircle, const gp_Circ& circ); gp_Circ m_circle; - Handle_AIS_Circle m_gfxCircle; - Handle_AIS_Line m_gfxDiameter; - Handle_AIS_TextLabel m_gfxDiameterText; + OccHandle m_gfxCircle; + OccHandle m_gfxDiameter; + OccHandle m_gfxDiameterText; }; // -- @@ -166,10 +166,10 @@ class MeasureDisplayDistance : public BaseMeasureDisplay { private: MeasureDistance m_dist; - Handle_AIS_Line m_gfxLength; - Handle_AIS_TextLabel m_gfxDistText; - Handle_AIS_Point m_gfxPnt1; - Handle_AIS_Point m_gfxPnt2; + OccHandle m_gfxLength; + OccHandle m_gfxDistText; + OccHandle m_gfxPnt1; + OccHandle m_gfxPnt2; }; // -- @@ -185,10 +185,10 @@ class MeasureDisplayAngle : public BaseMeasureDisplay { private: MeasureAngle m_angle; - Handle_AIS_Line m_gfxEntity1; - Handle_AIS_Line m_gfxEntity2; - Handle_AIS_Circle m_gfxAngle; - Handle_AIS_TextLabel m_gfxAngleText; + OccHandle m_gfxEntity1; + OccHandle m_gfxEntity2; + OccHandle m_gfxAngle; + OccHandle m_gfxAngleText; }; // -- diff --git a/src/measure/measure_tool_brep.cpp b/src/measure/measure_tool_brep.cpp index 755ba340..b53dbbb8 100644 --- a/src/measure/measure_tool_brep.cpp +++ b/src/measure/measure_tool_brep.cpp @@ -10,6 +10,7 @@ #include "../base/geom_utils.h" #include "../base/math_utils.h" #include "../base/mesh_utils.h" +#include "../base/occ_handle.h" #include "../base/text_id.h" #include "../graphics/graphics_shape_object_driver.h" @@ -109,7 +110,7 @@ template void throwErrorIf(bool cond) const TopoDS_Shape getShape(const GraphicsOwnerPtr& owner) { static const TopoDS_Shape nullShape; - auto brepOwner = Handle_StdSelect_BRepOwner::DownCast(owner); + auto brepOwner = OccHandle::DownCast(owner); TopLoc_Location ownerLoc = owner->Location(); #if OCC_VERSION_HEX >= 0x070600 // Force scale factor to 1 @@ -307,7 +308,7 @@ MeasureCircle MeasureToolBRep::brepCircleFromGeometricEdge(const TopoDS_Edge& ed MeasureCircle MeasureToolBRep::brepCircleFromPolygonEdge(const TopoDS_Edge& edge) { TopLoc_Location loc; - const Handle(Poly_Polygon3D)& polyline = BRep_Tool::Polygon3D(edge, loc); + const OccHandle& polyline = BRep_Tool::Polygon3D(edge, loc); throwErrorIf(polyline.IsNull() || polyline->NbNodes() < 7); // Try to create a circle from 3 sample points const GC_MakeCircle makeCirc( @@ -463,7 +464,7 @@ MeasureLength MeasureToolBRep::brepLength(const TopoDS_Shape& shape) } else { TopLoc_Location loc; - const Handle(Poly_Polygon3D)& polyline = BRep_Tool::Polygon3D(edge, loc); + const OccHandle& polyline = BRep_Tool::Polygon3D(edge, loc); throwErrorIf(polyline.IsNull()); double len = 0.; // Compute length of the polygon diff --git a/src/qtcommon/qstring_conv.h b/src/qtcommon/qstring_conv.h index c3311a7f..3bcf4d17 100644 --- a/src/qtcommon/qstring_conv.h +++ b/src/qtcommon/qstring_conv.h @@ -65,8 +65,8 @@ template<> struct StringConv { }; // Handle(TCollection_HAsciiString) -> QString -template<> struct StringConv { - static auto to(const Handle(TCollection_HAsciiString)& str) { +template<> struct StringConv, QString> { + static auto to(const OccHandle& str) { return string_conv(str ? str->String() : TCollection_AsciiString()); } }; @@ -126,9 +126,9 @@ template<> struct StringConv { }; // QString -> Handle(TCollection_HAsciiString) -template<> struct StringConv { +template<> struct StringConv> { static auto to(const QString& str) { - Handle(TCollection_HAsciiString) hnd = new TCollection_HAsciiString(qUtf8Printable(str)); + OccHandle hnd = new TCollection_HAsciiString(qUtf8Printable(str)); return hnd; } }; diff --git a/tests/test_base.cpp b/tests/test_base.cpp index 44aef516..e586abd9 100644 --- a/tests/test_base.cpp +++ b/tests/test_base.cpp @@ -848,7 +848,7 @@ void TestBase::MeshUtils_test() int countTriangle = 0; BRepUtils::forEachSubFace(shapeBox, [&](const TopoDS_Face& face) { TopLoc_Location loc; - const Handle_Poly_Triangulation& polyTri = BRep_Tool::Triangulation(face, loc); + const OccHandle& polyTri = BRep_Tool::Triangulation(face, loc); if (!polyTri.IsNull()) { countNode += polyTri->NbNodes(); countTriangle += polyTri->NbTriangles(); @@ -856,13 +856,13 @@ void TestBase::MeshUtils_test() }); // Merge all face triangulations into one - Handle_Poly_Triangulation polyTriBox = new Poly_Triangulation(countNode, countTriangle, false); + OccHandle polyTriBox = new Poly_Triangulation(countNode, countTriangle, false); { int idNodeOffset = 0; int idTriangleOffset = 0; BRepUtils::forEachSubFace(shapeBox, [&](const TopoDS_Face& face) { TopLoc_Location loc; - const Handle_Poly_Triangulation& polyTri = BRep_Tool::Triangulation(face, loc); + const OccHandle& polyTri = BRep_Tool::Triangulation(face, loc); if (!polyTri.IsNull()) { for (int i = 1; i <= polyTri->NbNodes(); ++i) MeshUtils::setNode(polyTriBox, idNodeOffset + i, polyTri->Node(i)); From 93eeabc62bf44ce2e93fafa23c7320ac2fce580f Mon Sep 17 00:00:00 2001 From: Hugues Delorme Date: Tue, 30 Apr 2024 17:30:59 +0200 Subject: [PATCH 2/4] Base: add makeOccHandle() utility --- src/base/occ_handle.h | 9 +++++++++ tests/test_base.cpp | 37 +++++++++++++++++++++++++++++++++++++ tests/test_base.h | 2 ++ 3 files changed, 48 insertions(+) diff --git a/src/base/occ_handle.h b/src/base/occ_handle.h index 387a2243..1a4decbf 100644 --- a/src/base/occ_handle.h +++ b/src/base/occ_handle.h @@ -7,10 +7,19 @@ #pragma once #include +#include // For std::forward() namespace Mayo { // Template alias for OpenCascade handle template using OccHandle = opencascade::handle; +// Constructs an object of 'T' wrapped in an OpenCascade handle +// Note: Standard_Transient must be a base class of 'T' +template +OccHandle makeOccHandle(Args&&... args) +{ + return new T(std::forward(args)...); +} + } // namespace Mayo diff --git a/tests/test_base.cpp b/tests/test_base.cpp index e586abd9..ec9b3834 100644 --- a/tests/test_base.cpp +++ b/tests/test_base.cpp @@ -23,6 +23,7 @@ #include "../src/base/io_system.h" #include "../src/base/occ_static_variables_rollback.h" #include "../src/base/libtree.h" +#include "../src/base/occ_handle.h" #include "../src/base/mesh_utils.h" #include "../src/base/meta_enum.h" #include "../src/base/property_builtins.h" @@ -66,6 +67,7 @@ #include #include #include +#include #include #include #include @@ -310,6 +312,41 @@ void TestBase::FilePath_test() } } +void TestBase::OccHandle_test() +{ + { + struct OccHandleTestClass_0 : public Standard_Transient { + explicit OccHandleTestClass_0() = default; + }; + + auto hnd = makeOccHandle(); + QCOMPARE(typeid(hnd), typeid(OccHandle)); + QVERIFY(hnd.get() != nullptr); + } + + { + struct OccHandleTestClass_1 : public Standard_Transient { + explicit OccHandleTestClass_1() = default; + explicit OccHandleTestClass_1(const std::string& str) : m_str(str) {} + std::string m_str; + }; + + { + auto hnd = makeOccHandle(); + QCOMPARE(typeid(hnd), typeid(OccHandle)); + QVERIFY(hnd.get() != nullptr); + QCOMPARE(hnd->m_str, std::string{}); + } + + { + auto hnd = makeOccHandle("Test string value"); + QCOMPARE(typeid(hnd), typeid(OccHandle)); + QVERIFY(hnd.get() != nullptr); + QCOMPARE(hnd->m_str, "Test string value"); + } + } +} + void TestBase::PropertyValueConversionVariant_doubleToInt_test() { using Variant = PropertyValueConversion::Variant; diff --git a/tests/test_base.h b/tests/test_base.h index 5723fe7e..d90a9f3f 100644 --- a/tests/test_base.h +++ b/tests/test_base.h @@ -26,6 +26,8 @@ private slots: void FilePath_test(); + void OccHandle_test(); + void PropertyValueConversionVariant_doubleToInt_test(); void PropertyValueConversionVariant_doubleToInt_test_data(); From c1fa59b9385ea872ebdeb42eefbf87da83799d3f Mon Sep 17 00:00:00 2001 From: Hugues Delorme Date: Tue, 30 Apr 2024 17:31:19 +0200 Subject: [PATCH 3/4] IO_Assimp: use OccHandle and makeOccHandle() --- src/io_assimp/io_assimp_reader.cpp | 32 +++++++++++++++--------------- src/io_assimp/io_assimp_reader.h | 15 +++++++------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/io_assimp/io_assimp_reader.cpp b/src/io_assimp/io_assimp_reader.cpp index 92a9ae82..7b61b7f8 100644 --- a/src/io_assimp/io_assimp_reader.cpp +++ b/src/io_assimp/io_assimp_reader.cpp @@ -94,7 +94,7 @@ bool deep_aiNodeTransformationHasScaling(const aiNode* node) || scaling.x < 0. || scaling.y < 0. || scaling.z < 0. ) { - //std::cout << "[TRACE] hasScaling: " << scaling.x << " " << scaling.y << " " < createOccTexture(const aiTexture* texture) { const auto textureWidth = texture->mWidth; const auto textureHeight = texture->mHeight; const auto textureSize = textureHeight == 0 ? textureWidth : 4 * textureWidth * textureHeight; - Handle(NCollection_Buffer) buff = new NCollection_Buffer( + auto buff = makeOccHandle( NCollection_BaseAllocator::CommonBaseAllocator(), textureSize ); @@ -151,14 +151,14 @@ Handle(Image_Texture) createOccTexture(const aiTexture* texture) // Create an OpenCascade Poly_Triangulation object from assimp mesh // The input 'mesh' is assumed to contain only triangles -Handle(Poly_Triangulation) createOccTriangulation(const aiMesh* mesh) +OccHandle createOccTriangulation(const aiMesh* mesh) { assert(mesh != nullptr); assert(mesh->mPrimitiveTypes & aiPrimitiveType_TRIANGLE); const unsigned textureIndex = 0; const bool hasUvNodes = mesh->HasTextureCoords(textureIndex) && mesh->mNumUVComponents[textureIndex] == 2; - Handle(Poly_Triangulation) triangulation = new Poly_Triangulation(mesh->mNumVertices, mesh->mNumFaces, hasUvNodes); + auto triangulation = makeOccHandle(mesh->mNumVertices, mesh->mNumFaces, hasUvNodes); for (unsigned i = 0; i < mesh->mNumVertices; ++i) { const aiVector3D& vertex = mesh->mVertices[i]; @@ -340,7 +340,7 @@ TDF_LabelSequence AssimpReader::transfer(DocumentPtr doc, TaskProgress* progress // Add materials in target document auto materialTool = doc->xcaf().visMaterialTool(); - for (const Handle_XCAFDoc_VisMaterial& material : m_vecMaterial) { + for (const OccHandle& material : m_vecMaterial) { const TDF_Label label = materialTool->AddMaterial(material, material->RawName()->String()); m_mapMaterialLabel.insert({ material, label }); } @@ -370,7 +370,7 @@ void AssimpReader::applyProperties(const PropertyGroup* group) } } -Handle(Image_Texture) AssimpReader::findOccTexture( +OccHandle AssimpReader::findOccTexture( const std::string& strFilepath, const FilePath& modelFilepath ) { @@ -378,14 +378,14 @@ Handle(Image_Texture) AssimpReader::findOccTexture( { // Note: aiScene::GetEmbeddedTextureAndIndex() isn't available for version < 5.1 const aiTexture* texture = m_scene->GetEmbeddedTexture(strFilepath.c_str()); - Handle(Image_Texture) occTexture = Cpp::findValue(texture, m_mapEmbeddedTexture); + OccHandle occTexture = Cpp::findValue(texture, m_mapEmbeddedTexture); if (occTexture) return occTexture; } // Texture might have already been loaded from file { - Handle(Image_Texture) texture = CppUtils::findValue(strFilepath, m_mapFileTexture); + OccHandle texture = CppUtils::findValue(strFilepath, m_mapFileTexture); if (texture) return texture; } @@ -410,7 +410,7 @@ Handle(Image_Texture) AssimpReader::findOccTexture( // Could find an existing filepath for the texture if (ptrTextureFilepath) { - Handle(Image_Texture) texture = new Image_Texture(filepathTo(*ptrTextureFilepath)); + auto texture = makeOccHandle(filepathTo(*ptrTextureFilepath)); // Cache texture m_mapFileTexture.insert({ strFilepath, texture }); return texture; @@ -425,11 +425,11 @@ Handle(Image_Texture) AssimpReader::findOccTexture( return {}; } -Handle(XCAFDoc_VisMaterial) AssimpReader::createOccVisMaterial( +OccHandle AssimpReader::createOccVisMaterial( const aiMaterial* material, const FilePath& modelFilepath ) { - Handle(XCAFDoc_VisMaterial) mat = new XCAFDoc_VisMaterial; + auto mat = makeOccHandle(); //mat->SetAlphaMode(Graphic3d_AlphaMode_Opaque); @@ -448,7 +448,7 @@ Handle(XCAFDoc_VisMaterial) AssimpReader::createOccVisMaterial( aiString matName; material->Get(AI_MATKEY_NAME, matName); std::string_view vMatName{ matName.C_Str(), matName.length }; - mat->SetRawName(string_conv(vMatName)); + mat->SetRawName(string_conv>(vMatName)); } // Backface culling diff --git a/src/io_assimp/io_assimp_reader.h b/src/io_assimp/io_assimp_reader.h index 6593b7d9..41845f64 100644 --- a/src/io_assimp/io_assimp_reader.h +++ b/src/io_assimp/io_assimp_reader.h @@ -8,6 +8,7 @@ #include "../base/document_ptr.h" #include "../base/io_reader.h" +#include "../base/occ_handle.h" #include "../base/tkernel_utils.h" #include @@ -42,11 +43,11 @@ class AssimpReader : public Reader { // Create OpenCascade texture object // Parameter 'strFilepath' is the filepath to the texture as specified by the assimp material // Parameter 'modelFilepath' is the filepath to the 3D model being imported with Reader::readFile() - Handle(Image_Texture) findOccTexture(const std::string& strFilepath, const FilePath& modelFilepath); + OccHandle findOccTexture(const std::string& strFilepath, const FilePath& modelFilepath); // Create XCAFDoc_VisMaterial from assimp material // Parameter 'modelFilepath' is the filepath to the 3D model being imported with Reader::readFile() - Handle(XCAFDoc_VisMaterial) createOccVisMaterial(const aiMaterial* material, const FilePath& modelFilepath); + OccHandle createOccVisMaterial(const aiMaterial* material, const FilePath& modelFilepath); void transferSceneNode( const aiNode* node, @@ -64,12 +65,12 @@ class AssimpReader : public Reader { Assimp::Importer m_importer; const aiScene* m_scene = nullptr; - std::vector m_vecTriangulation; - std::vector m_vecMaterial; - std::unordered_map m_mapMaterialLabel; + std::vector> m_vecTriangulation; + std::vector> m_vecMaterial; + std::unordered_map, TDF_Label> m_mapMaterialLabel; std::unordered_map m_mapNodeData; - std::unordered_map m_mapEmbeddedTexture; - std::unordered_map m_mapFileTexture; + std::unordered_map> m_mapEmbeddedTexture; + std::unordered_map> m_mapFileTexture; }; } // namespace IO From 5711be4a61ed5d5b83187ec6969c345dd2494f42 Mon Sep 17 00:00:00 2001 From: Hugues Delorme Date: Tue, 30 Apr 2024 19:16:51 +0200 Subject: [PATCH 4/4] Extensive usage of OccHandle and makeOccHandle() --- src/app/dialog_inspect_xde.cpp | 2 +- src/app/widget_clip_planes.cpp | 2 +- src/app/widget_grid.cpp | 14 +++++------ src/app/widget_gui_document.cpp | 2 +- src/app/widget_occ_view.cpp | 2 +- src/app/widget_occ_view_impl.cpp | 2 +- src/base/brep_utils.cpp | 5 ++-- src/base/brep_utils.h | 2 +- src/base/string_conv.h | 6 ++--- src/cli/main.cpp | 4 ++-- src/graphics/graphics_create_driver.cpp | 2 +- src/graphics/graphics_mesh_object_driver.cpp | 2 +- src/graphics/graphics_scene.cpp | 4 ++-- src/graphics/graphics_scene.h | 4 ++-- src/graphics/graphics_shape_object_driver.cpp | 2 +- src/graphics/graphics_view_ptr.h | 8 +++---- src/gui/gui_document.cpp | 23 ++++++++++--------- src/io_dxf/io_dxf.cpp | 4 ++-- src/io_image/io_image.cpp | 2 +- src/io_occ/io_occ_base_mesh.cpp | 2 +- src/io_occ/io_occ_brep.cpp | 13 ++++++----- src/io_occ/io_occ_caf.cpp | 4 ++-- src/io_occ/io_occ_gltf_writer.cpp | 2 +- src/io_occ/io_occ_obj_writer.cpp | 2 +- src/io_occ/io_occ_stl.cpp | 4 ++-- src/io_off/io_off_reader.cpp | 2 +- src/io_ply/io_ply_reader.cpp | 2 +- src/measure/measure_display.cpp | 8 +++---- src/measure/measure_display.h | 20 ++++++++-------- src/measure/measure_tool_brep.cpp | 2 +- src/qtcommon/qstring_conv.h | 3 +-- tests/test_app.cpp | 2 +- tests/test_base.cpp | 2 +- 33 files changed, 80 insertions(+), 80 deletions(-) diff --git a/src/app/dialog_inspect_xde.cpp b/src/app/dialog_inspect_xde.cpp index 94ebaa9d..56d4ef4f 100644 --- a/src/app/dialog_inspect_xde.cpp +++ b/src/app/dialog_inspect_xde.cpp @@ -429,7 +429,7 @@ static QTreeWidgetItem* createPropertyTreeItem(const QString& text, const OccHan else if (imgTexture->DataBuffer() && !imgTexture->DataBuffer()->IsEmpty()) { // Texture is provided by some embedded data item->setText(1, DialogInspectXde::tr("")); - const Handle(NCollection_Buffer)& buff = imgTexture->DataBuffer(); + const OccHandle& buff = imgTexture->DataBuffer(); item->setImage(1, QByteArray::fromRawData(reinterpret_cast(buff->Data()), buff->Size())); } diff --git a/src/app/widget_clip_planes.cpp b/src/app/widget_clip_planes.cpp index c2e5889a..14b9311c 100644 --- a/src/app/widget_clip_planes.cpp +++ b/src/app/widget_clip_planes.cpp @@ -242,7 +242,7 @@ void WidgetClipPlanes::createPlaneCappingTexture() const QByteArray fileContents = file.readAll(); const QByteArray filenameUtf8 = file.fileName().toUtf8(); auto fileContentsData = reinterpret_cast(fileContents.constData()); - OccHandle imageCapping = new Image_AlienPixMap; + auto imageCapping = makeOccHandle(); imageCapping->Load(fileContentsData, fileContents.size(), filenameUtf8.constData()); m_textureCapping = new GraphicsTexture2D(imageCapping); m_textureCapping->EnableModulate(); diff --git a/src/app/widget_grid.cpp b/src/app/widget_grid.cpp index 3c521680..5501ea1f 100644 --- a/src/app/widget_grid.cpp +++ b/src/app/widget_grid.cpp @@ -37,7 +37,7 @@ WidgetGrid::WidgetGrid(GraphicsViewPtr viewPtr, QWidget* parent) m_ui(new Ui_WidgetGrid), m_viewPtr(viewPtr) { - const Handle_V3d_Viewer& viewer = viewPtr->Viewer(); + const OccHandle& viewer = viewPtr->Viewer(); // Intial configuration m_ui->setupUi(this); @@ -128,7 +128,7 @@ WidgetGrid::WidgetGrid(GraphicsViewPtr viewPtr, QWidget* parent) m_ui->combo_Plane->setCurrentIndex(3); // Install grid draw mode - Handle_Aspect_Grid gridAspect = GraphicsUtils::V3dViewer_grid(viewer); + OccHandle gridAspect = GraphicsUtils::V3dViewer_grid(viewer); if (gridAspect) { if (gridAspect->DrawMode() == Aspect_GDM_Lines) m_ui->combo_DrawMode->setCurrentIndex(0); @@ -248,7 +248,7 @@ const gp_Ax2& WidgetGrid::toPlaneAxis(int comboBoxItemIndex) void WidgetGrid::activateGrid(bool on) { - const Handle_V3d_Viewer& viewer = m_viewPtr->Viewer(); + const OccHandle& viewer = m_viewPtr->Viewer(); if (on) { viewer->ActivateGrid( toGridType(m_ui->combo_Type->currentIndex()), @@ -269,7 +269,7 @@ void WidgetGrid::applyGridParams() auto fnCorrectedGridStep = [](double gridStep) { return !qFuzzyIsNull(gridStep) ? gridStep : 0.01; }; - const Handle_V3d_Viewer& viewer = m_viewPtr->Viewer(); + const OccHandle& viewer = m_viewPtr->Viewer(); auto gridType = toGridType(m_ui->combo_Type->currentIndex()); if (gridType == Aspect_GT_Rectangular) { viewer->SetRectangularGridValues( @@ -295,7 +295,7 @@ void WidgetGrid::applyGridParams() void WidgetGrid::applyGridGraphicsParams() { - const Handle_V3d_Viewer& viewer = m_viewPtr->Viewer(); + const OccHandle& viewer = m_viewPtr->Viewer(); auto gridType = toGridType(m_ui->combo_Type->currentIndex()); if (gridType == Aspect_GT_Rectangular) { viewer->SetRectangularGridGraphicValues( @@ -316,7 +316,7 @@ void WidgetGrid::applyGridGraphicsParams() void WidgetGrid::chooseGridColor(GridColorType colorType) { - const Handle_V3d_Viewer& viewer = m_viewPtr->Viewer(); + const OccHandle& viewer = m_viewPtr->Viewer(); auto gridColors = GraphicsUtils::V3dViewer_gridColors(viewer); // Helper function to apply some base/tenth grid color auto fnApplyGridColor = [=](const Quantity_Color& color) { @@ -356,7 +356,7 @@ void WidgetGrid::chooseGridColor(GridColorType colorType) void WidgetGrid::enableGridColorTenth(bool on) { - const Handle_V3d_Viewer& viewer = m_viewPtr->Viewer(); + const OccHandle& viewer = m_viewPtr->Viewer(); m_ui->label_ColorTenth->setEnabled(on); m_ui->btn_ColorTenth->setEnabled(on); auto gridColors = GraphicsUtils::V3dViewer_gridColors(viewer); diff --git a/src/app/widget_gui_document.cpp b/src/app/widget_gui_document.cpp index 87218f58..21820e96 100644 --- a/src/app/widget_gui_document.cpp +++ b/src/app/widget_gui_document.cpp @@ -117,7 +117,7 @@ WidgetGuiDocument::WidgetGuiDocument(GuiDocument* guiDoc, QWidget* parent) m_widgetBtns = this->createWidgetPanelContainer(widgetBtnsContents); auto gfxScene = m_guiDoc->graphicsScene(); - gfxScene->signalRedrawRequested.connectSlot([=](const Handle_V3d_View& view) { + gfxScene->signalRedrawRequested.connectSlot([=](const OccHandle& view) { if (view == m_qtOccView->v3dView()) m_qtOccView->redraw(); }); diff --git a/src/app/widget_occ_view.cpp b/src/app/widget_occ_view.cpp index 84d6c201..02a80eb5 100644 --- a/src/app/widget_occ_view.cpp +++ b/src/app/widget_occ_view.cpp @@ -184,7 +184,7 @@ QWidgetOccView* QWidgetOccView::create(const OccHandle& view, QWidget* void QWidgetOccView::showEvent(QShowEvent*) { if (this->v3dView()->Window().IsNull()) { - OccHandle hWnd = new OcctWindow(this); + auto hWnd = makeOccHandle(this); this->v3dView()->SetWindow(hWnd); if (!hWnd->IsMapped()) hWnd->Map(); diff --git a/src/app/widget_occ_view_impl.cpp b/src/app/widget_occ_view_impl.cpp index 9a61c541..435fa47a 100644 --- a/src/app/widget_occ_view_impl.cpp +++ b/src/app/widget_occ_view_impl.cpp @@ -63,7 +63,7 @@ bool QOpenGLWidgetOccView_isCoreProfile() void QOpenGLWidgetOccView_createOpenGlContext(std::function fnCallback) { - OccHandle glCtx = new OpenGl_Context; + auto glCtx = makeOccHandle(); if (!glCtx->Init(QOpenGLWidgetOccView_isCoreProfile())) { Message::SendFail() << "Error: OpenGl_Context is unable to wrap OpenGL context"; return; diff --git a/src/base/brep_utils.cpp b/src/base/brep_utils.cpp index 4aba8bbb..ed98d901 100644 --- a/src/base/brep_utils.cpp +++ b/src/base/brep_utils.cpp @@ -100,10 +100,11 @@ bool BRepUtils::isGeometric(const TopoDS_Face& face) } void BRepUtils::computeMesh( - const TopoDS_Shape& shape, const OccBRepMeshParameters& params, TaskProgress* progress) + const TopoDS_Shape& shape, const OccBRepMeshParameters& params, TaskProgress* progress + ) { #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 5, 0) - OccHandle indicator = new OccProgressIndicator(progress); + auto indicator = makeOccHandle(progress); BRepMesh_IncrementalMesh mesher(shape, params, TKernelUtils::start(indicator)); #else BRepMesh_IncrementalMesh mesher(shape, params); diff --git a/src/base/brep_utils.h b/src/base/brep_utils.h index 57ae6a8f..ee710974 100644 --- a/src/base/brep_utils.h +++ b/src/base/brep_utils.h @@ -30,7 +30,7 @@ struct BRepUtils { static void addShape(TopoDS_Shape* ptrTargetShape, const TopoDS_Shape& shape); // Creates a non-geometric TopoDS_Edge wrapping 'polygon' - static TopoDS_Edge makeEdge(const Handle(Poly_Polygon3D)& polygon); + static TopoDS_Edge makeEdge(const OccHandle& polygon); // Creates a non-geometric TopoDS_Face wrapping triangulation 'mesh' static TopoDS_Face makeFace(const OccHandle& mesh); diff --git a/src/base/string_conv.h b/src/base/string_conv.h index f1e134d2..48bc249a 100644 --- a/src/base/string_conv.h +++ b/src/base/string_conv.h @@ -135,8 +135,7 @@ template<> struct StringConv { // std::string_view -> Handle(TCollection_HAsciiString) template<> struct StringConv> { static auto to(std::string_view str) { - OccHandle hnd = new TCollection_HAsciiString(to_OccAsciiString(str)); - return hnd; + return makeOccHandle(to_OccAsciiString(str)); } }; @@ -179,8 +178,7 @@ template<> struct StringConv { // std::string -> Handle(TCollection_HAsciiString) template<> struct StringConv> { static auto to(const std::string& str) { - OccHandle hnd = new TCollection_HAsciiString(str.c_str()); - return hnd; + return makeOccHandle(str.c_str()); } }; diff --git a/src/cli/main.cpp b/src/cli/main.cpp index bc02e489..46a694c9 100644 --- a/src/cli/main.cpp +++ b/src/cli/main.cpp @@ -340,8 +340,8 @@ static void initGui(GuiApplication* guiApp) return; guiApp->setAutomaticDocumentMapping(false); // GuiDocument objects aren't needed - setFunctionCreateGraphicsDriver([]() -> OccHandle { - return new OpenGl_GraphicDriver(GraphicsUtils::AspectDisplayConnection_create()); + setFunctionCreateGraphicsDriver([]{ + return makeOccHandle(GraphicsUtils::AspectDisplayConnection_create()); }); guiApp->addGraphicsObjectDriver(std::make_unique()); guiApp->addGraphicsObjectDriver(std::make_unique()); diff --git a/src/graphics/graphics_create_driver.cpp b/src/graphics/graphics_create_driver.cpp index 17a29682..733e8c63 100644 --- a/src/graphics/graphics_create_driver.cpp +++ b/src/graphics/graphics_create_driver.cpp @@ -23,7 +23,7 @@ using FunctionCreateGraphicsDriver = std::function(new Aspect_DisplayConnection); }; return fn; } diff --git a/src/graphics/graphics_mesh_object_driver.cpp b/src/graphics/graphics_mesh_object_driver.cpp index 27ef4c4c..a7258d72 100644 --- a/src/graphics/graphics_mesh_object_driver.cpp +++ b/src/graphics/graphics_mesh_object_driver.cpp @@ -67,7 +67,7 @@ GraphicsObjectPtr GraphicsMeshObjectDriver::createObject(const TDF_Label& label) } if (polyTri) { - OccHandle object = new MeshVS_Mesh; + auto object = makeOccHandle(); object->SetDataSource(new GraphicsMeshDataSource(polyTri)); // meshVisu->AddBuilder(..., false); -> No selection if (!spanNodeColor.empty()) { diff --git a/src/graphics/graphics_scene.cpp b/src/graphics/graphics_scene.cpp index fc28bfd8..d1e575fb 100644 --- a/src/graphics/graphics_scene.cpp +++ b/src/graphics/graphics_scene.cpp @@ -25,7 +25,7 @@ namespace Internal { static OccHandle createOccViewer() { - OccHandle viewer = new V3d_Viewer(graphicsCreateDriver()); + auto viewer = makeOccHandle(graphicsCreateDriver()); viewer->SetDefaultViewSize(1000.); viewer->SetDefaultViewProj(V3d_XposYnegZpos); viewer->SetComputedMode(true); @@ -176,7 +176,7 @@ void GraphicsScene::redraw() this->signalRedrawRequested.send(itView.Value()); } -void GraphicsScene::redraw(const Handle_V3d_View& view) +void GraphicsScene::redraw(const OccHandle& view) { if (d->m_isRedrawBlocked) return; diff --git a/src/graphics/graphics_scene.h b/src/graphics/graphics_scene.h index 295acdcc..30c2a329 100644 --- a/src/graphics/graphics_scene.h +++ b/src/graphics/graphics_scene.h @@ -47,7 +47,7 @@ class GraphicsScene { void eraseObject(const GraphicsObjectPtr& object); void redraw(); - void redraw(const Handle_V3d_View& view); + void redraw(const OccHandle& view); bool isRedrawBlocked() const; void blockRedraw(bool on); @@ -106,7 +106,7 @@ class GraphicsScene { // Signals Signal<> signalSelectionChanged; Signal<> signalSelectionModeChanged; - Signal signalRedrawRequested; + Signal&> signalRedrawRequested; private: AIS_InteractiveContext* aisContextPtr() const; diff --git a/src/graphics/graphics_shape_object_driver.cpp b/src/graphics/graphics_shape_object_driver.cpp index 41e8d9c0..4111f5e5 100644 --- a/src/graphics/graphics_shape_object_driver.cpp +++ b/src/graphics/graphics_shape_object_driver.cpp @@ -51,7 +51,7 @@ GraphicsObjectPtr GraphicsShapeObjectDriver::createObject(const TDF_Label& label object->SetMaterial(Graphic3d_NOM_PLASTER); object->Attributes()->SetFaceBoundaryDraw(true); object->Attributes()->SetFaceBoundaryAspect( - new Prs3d_LineAspect(Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.) + new Prs3d_LineAspect(Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.) ); object->Attributes()->SetIsoOnTriangulation(true); //object->Attributes()->SetShadingModel(Graphic3d_TypeOfShadingModel_Pbr, true/*overrideDefaults*/); diff --git a/src/graphics/graphics_view_ptr.h b/src/graphics/graphics_view_ptr.h index c0400dd2..72b8a9e0 100644 --- a/src/graphics/graphics_view_ptr.h +++ b/src/graphics/graphics_view_ptr.h @@ -17,12 +17,12 @@ namespace Mayo { // a "redraw requested" signal class GraphicsViewPtr { public: - GraphicsViewPtr(GraphicsScene* scene, const Handle_V3d_View& view) + GraphicsViewPtr(GraphicsScene* scene, const OccHandle& view) : m_scene(scene), m_view(view) {} - const Handle_V3d_View& v3dView() const { + const OccHandle& v3dView() const { return m_view; } @@ -34,11 +34,11 @@ class GraphicsViewPtr { m_scene->redraw(m_view); } - const Handle_V3d_View& operator->() const { return m_view; } + const OccHandle& operator->() const { return m_view; } private: GraphicsScene* m_scene = nullptr; - Handle_V3d_View m_view; + OccHandle m_view; }; } // namespace Mayo diff --git a/src/gui/gui_document.cpp b/src/gui/gui_document.cpp index 66c0a37b..39fe3f48 100644 --- a/src/gui/gui_document.cpp +++ b/src/gui/gui_document.cpp @@ -34,8 +34,8 @@ namespace Internal { static OccHandle createOriginTrihedron() { - OccHandle axis = new Geom_Axis2Placement(gp::XOY()); - OccHandle aisTrihedron = new AIS_Trihedron(axis); + auto axis = makeOccHandle(gp::XOY()); + auto aisTrihedron = makeOccHandle(axis); aisTrihedron->SetDatumDisplayMode(Prs3d_DM_WireFrame); aisTrihedron->SetDrawArrows(false); aisTrihedron->Attributes()->DatumAspect()->LineAspect(Prs3d_DP_XAxis)->SetWidth(2.5); @@ -50,7 +50,7 @@ static OccHandle createOriginTrihedron() //aisTrihedron->SetTextColor(Quantity_NOC_GRAY40); aisTrihedron->SetSize(60); aisTrihedron->SetTransformPersistence( - new Graphic3d_TransformPers(Graphic3d_TMF_ZoomPers, axis->Ax2().Location()) + new Graphic3d_TransformPers(Graphic3d_TMF_ZoomPers, axis->Ax2().Location()) ); aisTrihedron->Attributes()->SetZLayer(Graphic3d_ZLayerId_Topmost); aisTrihedron->SetInfiniteState(true); @@ -90,13 +90,13 @@ GuiDocument::GuiDocument(const DocumentPtr& doc, GuiApplication* guiApp) m_v3dView->ChangeRenderingParams().NbMsaaSamples = 4; m_v3dView->ChangeRenderingParams().CollectedStats = Graphic3d_RenderingParams::PerfCounters_Extended; m_v3dView->ChangeRenderingParams().StatsPosition = new Graphic3d_TransformPers( - Graphic3d_TMF_2d, Aspect_TOTP_RIGHT_UPPER, Graphic3d_Vec2i(20, 20) + Graphic3d_TMF_2d, Aspect_TOTP_RIGHT_UPPER, Graphic3d_Vec2i(20, 20) ); // 3D view - Set gradient background m_v3dView->SetBgGradientColors( - GuiDocument::defaultGradientBackground().color1, - GuiDocument::defaultGradientBackground().color2, - GuiDocument::defaultGradientBackground().fillStyle + GuiDocument::defaultGradientBackground().color1, + GuiDocument::defaultGradientBackground().color2, + GuiDocument::defaultGradientBackground().fillStyle ); //m_v3dView->SetShadingModel(Graphic3d_TOSM_PBR); @@ -419,10 +419,11 @@ void GuiDocument::setViewTrihedronMode(ViewTrihedronMode mode) aisViewCube->SetFontHeight(12); aisViewCube->SetAxesLabels("", "", ""); aisViewCube->SetTransformPersistence( - new Graphic3d_TransformPers( - Graphic3d_TMF_TriedronPers, - m_viewTrihedronCorner, - Graphic3d_Vec2i(85, 85)) + new Graphic3d_TransformPers( + Graphic3d_TMF_TriedronPers, + m_viewTrihedronCorner, + Graphic3d_Vec2i(85, 85) + ) ); m_gfxScene.addObject(aisViewCube); //aisViewCube->Attributes()->DatumAspect()->LineAspect(Prs3d_DP_XAxis)->SetColor(Quantity_NOC_RED2); diff --git a/src/io_dxf/io_dxf.cpp b/src/io_dxf/io_dxf.cpp index be17feff..00e5c208 100644 --- a/src/io_dxf/io_dxf.cpp +++ b/src/io_dxf/io_dxf.cpp @@ -613,7 +613,7 @@ void DxfReader::Internal::OnReadMText(const Dxf_MTEXT& text) const gp_Ax3 locText(pt, extDir, xAxisDir); Font_BRepTextBuilder brepTextBuilder; #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 5, 0) - OccHandle textFormat = new Font_TextFormatter; + auto textFormat = makeOccHandle(); textFormat->SetupAlignment(hAlign, vAlign); textFormat->Append(occTextStr, *brepFont.FTFont()); /* Font_TextFormatter computes weird ResultWidth() so wrapping is currently broken @@ -956,7 +956,7 @@ OccHandle DxfReader::Internal::createInterpolationSpline(cons const auto iNumPoints = CppUtils::safeStaticCast(spline.fitPoints.size()); // Handle poles - Handle_TColgp_HArray1OfPnt fitpoints = new TColgp_HArray1OfPnt(1, iNumPoints); + auto fitpoints = makeOccHandle(1, iNumPoints); for (const DxfCoords& pnt : spline.fitPoints) { const auto iPnt = CppUtils::safeStaticCast(&pnt - &spline.fitPoints.front()); fitpoints->ChangeValue(iPnt + 1) = gp_Pnt{pnt.x, pnt.y, pnt.z}; diff --git a/src/io_image/io_image.cpp b/src/io_image/io_image.cpp index 9bd63361..6d1d8dd8 100644 --- a/src/io_image/io_image.cpp +++ b/src/io_image/io_image.cpp @@ -186,7 +186,7 @@ OccHandle ImageWriter::createImage(GuiDocument* guiDoc, const OccHandle ImageWriter::createImage(OccHandle view) { - OccHandle pixmap = new Image_AlienPixMap; + auto pixmap = makeOccHandle(); V3d_ImageDumpOptions dumpOptions; dumpOptions.BufferType = Graphic3d_BT_RGB; view->Window()->Size(dumpOptions.Width, dumpOptions.Height); diff --git a/src/io_occ/io_occ_base_mesh.cpp b/src/io_occ/io_occ_base_mesh.cpp index 46f8ff8f..4241c679 100644 --- a/src/io_occ/io_occ_base_mesh.cpp +++ b/src/io_occ/io_occ_base_mesh.cpp @@ -77,7 +77,7 @@ TDF_LabelSequence OccBaseMeshReader::transfer(DocumentPtr doc, TaskProgress* pro this->applyParameters(); m_reader.SetDocument(doc); const TDF_LabelSequence seqMark = doc->xcaf().topLevelFreeShapes(); - OccHandle indicator = new OccProgressIndicator(progress); + auto indicator = makeOccHandle(progress); m_reader.Perform(m_filepath.u8string().c_str(), TKernelUtils::start(indicator)); return doc->xcaf().diffTopLevelFreeShapes(seqMark); } diff --git a/src/io_occ/io_occ_brep.cpp b/src/io_occ/io_occ_brep.cpp index 72630d9e..f05c3090 100644 --- a/src/io_occ/io_occ_brep.cpp +++ b/src/io_occ/io_occ_brep.cpp @@ -28,12 +28,13 @@ bool OccBRepReader::readFile(const FilePath& filepath, TaskProgress* progress) m_shape.Nullify(); m_baseFilename = filepath.stem(); BRep_Builder brepBuilder; - OccHandle indicator = new OccProgressIndicator(progress); + auto indicator = makeOccHandle(progress); return BRepTools::Read( - m_shape, - filepath.u8string().c_str(), - brepBuilder, - TKernelUtils::start(indicator)); + m_shape, + filepath.u8string().c_str(), + brepBuilder, + TKernelUtils::start(indicator) + ); } TDF_LabelSequence OccBRepReader::transfer(DocumentPtr doc, TaskProgress* /*progress*/) @@ -79,7 +80,7 @@ bool OccBRepWriter::transfer(Span appItems, TaskProgress* bool OccBRepWriter::writeFile(const FilePath& filepath, TaskProgress* progress) { - OccHandle indicator = new OccProgressIndicator(progress); + auto indicator = makeOccHandle(progress); return BRepTools::Write(m_shape, filepath.u8string().c_str(), TKernelUtils::start(indicator)); } diff --git a/src/io_occ/io_occ_caf.cpp b/src/io_occ/io_occ_caf.cpp index a78d618a..13d0a810 100644 --- a/src/io_occ/io_occ_caf.cpp +++ b/src/io_occ/io_occ_caf.cpp @@ -35,7 +35,7 @@ bool cafGenericReadFile(CafReaderType& reader, const FilePath& filepath, TaskPro template TDF_LabelSequence cafGenericReadTransfer(CafReaderType& reader, DocumentPtr doc, TaskProgress* progress) { - OccHandle indicator = new OccProgressIndicator(progress); + auto indicator = makeOccHandle(progress); const TDF_LabelSequence seqMark = doc->xcaf().topLevelFreeShapes(); OccHandle stdDoc = doc; #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 5, 0) @@ -53,7 +53,7 @@ TDF_LabelSequence cafGenericReadTransfer(CafReaderType& reader, DocumentPtr doc, template bool cafGenericWriteTransfer(CafWriterType& writer, Span appItems, TaskProgress* progress) { - OccHandle indicator = new OccProgressIndicator(progress); + auto indicator = makeOccHandle(progress); #if OCC_VERSION_HEX < OCC_VERSION_CHECK(7, 5, 0) Private::cafFinderProcess(writer)->SetProgress(indicator); auto _ = gsl::finally([&]{ Private::cafFinderProcess(writer)->SetProgress(nullptr); }); diff --git a/src/io_occ/io_occ_gltf_writer.cpp b/src/io_occ/io_occ_gltf_writer.cpp index 03cbb836..9964442c 100644 --- a/src/io_occ/io_occ_gltf_writer.cpp +++ b/src/io_occ/io_occ_gltf_writer.cpp @@ -144,7 +144,7 @@ bool OccGltfWriter::writeFile(const FilePath& filepath, TaskProgress* progress) if (!m_document) return false; - OccHandle occProgress = new OccProgressIndicator(progress); + auto occProgress = makeOccHandle(progress); const bool isBinary = m_params.format == Format::Binary; RWGltf_CafWriter writer(filepath.u8string().c_str(), isBinary); writer.ChangeCoordinateSystemConverter().SetInputCoordinateSystem(m_params.inputCoordinateSystem); diff --git a/src/io_occ/io_occ_obj_writer.cpp b/src/io_occ/io_occ_obj_writer.cpp index 4bebcdbf..f5762a13 100644 --- a/src/io_occ/io_occ_obj_writer.cpp +++ b/src/io_occ/io_occ_obj_writer.cpp @@ -68,7 +68,7 @@ bool OccObjWriter::writeFile(const FilePath& filepath, TaskProgress* progress) if (!m_document) return false; - OccHandle occProgress = new OccProgressIndicator(progress); + auto occProgress = makeOccHandle(progress); RWObj_CafWriter writer(filepath.u8string().c_str()); writer.ChangeCoordinateSystemConverter().SetInputCoordinateSystem(m_params.inputCoordinateSystem); writer.ChangeCoordinateSystemConverter().SetOutputCoordinateSystem(m_params.outputCoordinateSystem); diff --git a/src/io_occ/io_occ_stl.cpp b/src/io_occ/io_occ_stl.cpp index ab661cd1..415aa971 100644 --- a/src/io_occ/io_occ_stl.cpp +++ b/src/io_occ/io_occ_stl.cpp @@ -73,7 +73,7 @@ class OccStlWriter::Properties : public PropertyGroup { bool OccStlReader::readFile(const FilePath& filepath, TaskProgress* progress) { - OccHandle indicator = new OccProgressIndicator(progress); + auto indicator = makeOccHandle(progress); m_baseFilename = filepath.stem(); m_mesh = RWStl::ReadFile(filepath.u8string().c_str(), TKernelUtils::start(indicator)); return !m_mesh.IsNull(); @@ -131,7 +131,7 @@ bool OccStlWriter::writeFile(const FilePath& filepath, TaskProgress* progress) writer.ASCIIMode() = m_params.format == Format::Ascii; const std::string strFilepath = filepath.u8string(); #if OCC_VERSION_HEX >= OCC_VERSION_CHECK(7, 5, 0) - OccHandle indicator = new OccProgressIndicator(progress); + auto indicator = makeOccHandle(progress); return writer.Write(m_shape, strFilepath.c_str(), TKernelUtils::start(indicator)); #else MAYO_UNUSED(progress); diff --git a/src/io_off/io_off_reader.cpp b/src/io_off/io_off_reader.cpp index 2318d004..e3f0e667 100644 --- a/src/io_off/io_off_reader.cpp +++ b/src/io_off/io_off_reader.cpp @@ -315,7 +315,7 @@ TDF_Label OffReader::transferMesh(DocumentPtr doc, TaskProgress* progress) triangleCount += facet.vertexCount - 2; // Create mesh object - OccHandle mesh = new Poly_Triangulation(vertexCount, triangleCount, false/*!hasUvNodes*/); + auto mesh = makeOccHandle(vertexCount, triangleCount, false/*!hasUvNodes*/); // Helper function for progress report auto fnUpdateProgress = [=](int current) { diff --git a/src/io_ply/io_ply_reader.cpp b/src/io_ply/io_ply_reader.cpp index c2662c02..c28e4d85 100644 --- a/src/io_ply/io_ply_reader.cpp +++ b/src/io_ply/io_ply_reader.cpp @@ -155,7 +155,7 @@ TDF_Label PlyReader::transferMesh(DocumentPtr doc, TaskProgress* /*progress*/) { // Create target mesh const int triangleCount = CppUtils::safeStaticCast(m_vecIndex.size() / 3); - OccHandle mesh = new Poly_Triangulation(m_nodeCount, triangleCount, false/*hasUvNodes*/); + auto mesh = makeOccHandle(m_nodeCount, triangleCount, false/*hasUvNodes*/); if (!m_vecNormalCoord.empty()) MeshUtils::allocateNormals(mesh); diff --git a/src/measure/measure_display.cpp b/src/measure/measure_display.cpp index 2ae9a285..f5fe1503 100644 --- a/src/measure/measure_display.cpp +++ b/src/measure/measure_display.cpp @@ -68,16 +68,16 @@ std::unique_ptr BaseMeasureDisplay::createEmptySumFrom(MeasureT } } -void BaseMeasureDisplay::adaptGraphics(const Handle_Graphic3d_GraphicDriver& driver) +void BaseMeasureDisplay::adaptGraphics(const OccHandle& driver) { - const auto openGlDriver = Handle_OpenGl_GraphicDriver::DownCast(driver); + const auto openGlDriver = OccHandle::DownCast(driver); const auto openGlContext = openGlDriver ? openGlDriver->GetSharedContext() : nullptr; if (!openGlContext) return; const bool useVbo = openGlContext->ToUseVbo(); for (int i = 0; i < this->graphicsObjectsCount(); ++i) { - auto gfxText = Handle(AIS_TextLabel)::DownCast(this->graphicsObjectAt(i)); + auto gfxText = OccHandle::DownCast(this->graphicsObjectAt(i)); if (gfxText) { // NOTE // Usage of Aspect_TODT_SUBTITLE is causing a crash when VBO are not available(eg because @@ -343,7 +343,7 @@ MeasureDisplayAngle::MeasureDisplayAngle(MeasureAngle angle) const gp_Vec vec1(angle.pntCenter, angle.pnt1); const gp_Vec vec2(angle.pntCenter, angle.pnt2); const gp_Ax2 axCircle(angle.pntCenter, vec1.Crossed(vec2), vec1); - OccHandle geomCircle = new Geom_Circle(axCircle, 0.8 * vec1.Magnitude()); + auto geomCircle = makeOccHandle(axCircle, 0.8 * vec1.Magnitude()); const double param1 = ElCLib::Parameter(geomCircle->Circ(), angle.pnt1); const double param2 = ElCLib::Parameter(geomCircle->Circ(), angle.pnt2); m_gfxAngle = new AIS_Circle(geomCircle, param1, param2); diff --git a/src/measure/measure_display.h b/src/measure/measure_display.h index 8c545726..db252b50 100644 --- a/src/measure/measure_display.h +++ b/src/measure/measure_display.h @@ -55,7 +55,7 @@ class IMeasureDisplay { // Adapt 3D graphics objects to what is supported by 'driver' // This function must be called before adding the graphical objects to the 3D scene(Mayo::GraphicsScene // or AIS_InteractiveContext) - virtual void adaptGraphics(const Handle_Graphic3d_GraphicDriver& driver) = 0; + virtual void adaptGraphics(const OccHandle& driver) = 0; // Whether "sum" mode is supported by the measure display // This is relevant when multiple measureable 3D objects are selected. The cumulative sum of @@ -76,7 +76,7 @@ class BaseMeasureDisplay : public IMeasureDisplay { static std::unique_ptr createFrom(MeasureType type, const MeasureValue& value); static std::unique_ptr createEmptySumFrom(MeasureType type); - void adaptGraphics(const Handle_Graphic3d_GraphicDriver& driver) override; + void adaptGraphics(const OccHandle& driver) override; bool isSumSupported() const override { return false; } void sumAdd(const IMeasureDisplay& other) override; @@ -207,7 +207,7 @@ class MeasureDisplayLength : public BaseMeasureDisplay { private: MeasureLength m_length; - Handle_AIS_TextLabel m_gfxLenText; + OccHandle m_gfxLenText; }; // -- @@ -226,7 +226,7 @@ class MeasureDisplayArea : public BaseMeasureDisplay { private: MeasureArea m_area; - Handle_AIS_TextLabel m_gfxAreaText; + OccHandle m_gfxAreaText; }; // -- @@ -242,12 +242,12 @@ class MeasureDisplayBoundingBox : public BaseMeasureDisplay { private: MeasureBoundingBox m_bnd; - Handle_AIS_Point m_gfxMinPoint; - Handle_AIS_Point m_gfxMaxPoint; - Handle_AIS_InteractiveObject m_gfxBox; - Handle_AIS_TextLabel m_gfxXLengthText; - Handle_AIS_TextLabel m_gfxYLengthText; - Handle_AIS_TextLabel m_gfxZLengthText; + OccHandle m_gfxMinPoint; + OccHandle m_gfxMaxPoint; + OccHandle m_gfxBox; + OccHandle m_gfxXLengthText; + OccHandle m_gfxYLengthText; + OccHandle m_gfxZLengthText; }; } // namespace Mayo diff --git a/src/measure/measure_tool_brep.cpp b/src/measure/measure_tool_brep.cpp index b53dbbb8..0b5c5a13 100644 --- a/src/measure/measure_tool_brep.cpp +++ b/src/measure/measure_tool_brep.cpp @@ -513,7 +513,7 @@ MeasureArea MeasureToolBRep::brepArea(const TopoDS_Shape& shape) } else { TopLoc_Location loc; - const Handle_Poly_Triangulation& triangulation = BRep_Tool::Triangulation(face, loc); + const OccHandle& triangulation = BRep_Tool::Triangulation(face, loc); throwErrorIf(triangulation.IsNull()); areaResult.value = MeshUtils::triangulationArea(triangulation) * Quantity_SquareMillimeter; diff --git a/src/qtcommon/qstring_conv.h b/src/qtcommon/qstring_conv.h index 3bcf4d17..dc606509 100644 --- a/src/qtcommon/qstring_conv.h +++ b/src/qtcommon/qstring_conv.h @@ -128,8 +128,7 @@ template<> struct StringConv { // QString -> Handle(TCollection_HAsciiString) template<> struct StringConv> { static auto to(const QString& str) { - OccHandle hnd = new TCollection_HAsciiString(qUtf8Printable(str)); - return hnd; + return makeOccHandle(qUtf8Printable(str)); } }; diff --git a/tests/test_app.cpp b/tests/test_app.cpp index 0fae5e22..71933659 100644 --- a/tests/test_app.cpp +++ b/tests/test_app.cpp @@ -261,7 +261,7 @@ void TestApp::StringConv_test() { const QString text = "test_éç²µ§_测试_Тест"; QCOMPARE(to_QString(string_conv(text)), text); - QCOMPARE(to_QString(string_conv(text)), text); + QCOMPARE(to_QString(to_OccHandleHAsciiString(text)), text); QCOMPARE(to_QString(to_stdString(text)), text); QCOMPARE(to_QString(to_OccExtString(text)), text); } diff --git a/tests/test_base.cpp b/tests/test_base.cpp index ec9b3834..eb6fb229 100644 --- a/tests/test_base.cpp +++ b/tests/test_base.cpp @@ -893,7 +893,7 @@ void TestBase::MeshUtils_test() }); // Merge all face triangulations into one - OccHandle polyTriBox = new Poly_Triangulation(countNode, countTriangle, false); + auto polyTriBox = makeOccHandle(countNode, countTriangle, false); { int idNodeOffset = 0; int idTriangleOffset = 0;