From 680364b1713aad938b6fedbbb806079b5bf1cae3 Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Tue, 18 Jun 2019 20:00:47 +0200 Subject: [PATCH] Part Gui: New ViewProvider extension for overlaying icons related to Part::AttachExtension --- src/Mod/Part/Gui/AppPartGui.cpp | 105 +++++++++--------- src/Mod/Part/Gui/CMakeLists.txt | 2 + .../Part/Gui/ViewProviderAttachExtension.cpp | 94 ++++++++++++++++ .../Part/Gui/ViewProviderAttachExtension.h | 51 +++++++++ 4 files changed, 201 insertions(+), 51 deletions(-) create mode 100644 src/Mod/Part/Gui/ViewProviderAttachExtension.cpp create mode 100644 src/Mod/Part/Gui/ViewProviderAttachExtension.h diff --git a/src/Mod/Part/Gui/AppPartGui.cpp b/src/Mod/Part/Gui/AppPartGui.cpp index de50d31ae0..67d51c5631 100644 --- a/src/Mod/Part/Gui/AppPartGui.cpp +++ b/src/Mod/Part/Gui/AppPartGui.cpp @@ -60,6 +60,7 @@ #include "ViewProviderPrism.h" #include "ViewProviderSpline.h" #include "ViewProviderRegularPolygon.h" +#include "ViewProviderAttachExtension.h" #include "TaskDimension.h" #include "DlgSettingsGeneral.h" #include "DlgSettingsObjectColor.h" @@ -141,58 +142,60 @@ PyMOD_INIT_FUNC(PartGui) Py_INCREF(pAttachEngineTextsModule); PyModule_AddObject(partGuiModule, "AttachEngineResources", pAttachEngineTextsModule); - PartGui::PropertyEnumAttacherItem ::init(); - PartGui::SoBrepFaceSet ::initClass(); - PartGui::SoBrepEdgeSet ::initClass(); - PartGui::SoBrepPointSet ::initClass(); - PartGui::SoFCControlPoints ::initClass(); - PartGui::ViewProviderPartExt ::init(); - PartGui::ViewProviderPart ::init(); - PartGui::ViewProviderEllipsoid ::init(); - PartGui::ViewProviderPython ::init(); - PartGui::ViewProviderBox ::init(); - PartGui::ViewProviderPrism ::init(); - PartGui::ViewProviderRegularPolygon ::init(); - PartGui::ViewProviderWedge ::init(); - PartGui::ViewProviderImport ::init(); - PartGui::ViewProviderCurveNet ::init(); - PartGui::ViewProviderExtrusion ::init(); - PartGui::ViewProvider2DObject ::init(); - PartGui::ViewProvider2DObjectPython ::init(); - PartGui::ViewProviderMirror ::init(); - PartGui::ViewProviderFillet ::init(); - PartGui::ViewProviderChamfer ::init(); - PartGui::ViewProviderRevolution ::init(); - PartGui::ViewProviderLoft ::init(); - PartGui::ViewProviderSweep ::init(); - PartGui::ViewProviderOffset ::init(); - PartGui::ViewProviderOffset2D ::init(); - PartGui::ViewProviderThickness ::init(); - PartGui::ViewProviderCustom ::init(); - PartGui::ViewProviderCustomPython ::init(); - PartGui::ViewProviderBoolean ::init(); - PartGui::ViewProviderMultiFuse ::init(); - PartGui::ViewProviderMultiCommon ::init(); - PartGui::ViewProviderCompound ::init(); - PartGui::ViewProviderSpline ::init(); - PartGui::ViewProviderCircleParametric ::init(); - PartGui::ViewProviderLineParametric ::init(); - PartGui::ViewProviderPointParametric ::init(); - PartGui::ViewProviderEllipseParametric ::init(); - PartGui::ViewProviderHelixParametric ::init(); - PartGui::ViewProviderSpiralParametric ::init(); - PartGui::ViewProviderPlaneParametric ::init(); - PartGui::ViewProviderSphereParametric ::init(); - PartGui::ViewProviderCylinderParametric ::init(); - PartGui::ViewProviderConeParametric ::init(); - PartGui::ViewProviderTorusParametric ::init(); - PartGui::ViewProviderRuledSurface ::init(); - PartGui::ViewProviderFace ::init(); - PartGui::DimensionLinear ::initClass(); - PartGui::DimensionAngular ::initClass(); - PartGui::ArcEngine ::initClass(); + PartGui::PropertyEnumAttacherItem ::init(); + PartGui::SoBrepFaceSet ::initClass(); + PartGui::SoBrepEdgeSet ::initClass(); + PartGui::SoBrepPointSet ::initClass(); + PartGui::SoFCControlPoints ::initClass(); + PartGui::ViewProviderAttachExtension ::init(); + PartGui::ViewProviderAttachExtensionPython ::init(); + PartGui::ViewProviderPartExt ::init(); + PartGui::ViewProviderPart ::init(); + PartGui::ViewProviderEllipsoid ::init(); + PartGui::ViewProviderPython ::init(); + PartGui::ViewProviderBox ::init(); + PartGui::ViewProviderPrism ::init(); + PartGui::ViewProviderRegularPolygon ::init(); + PartGui::ViewProviderWedge ::init(); + PartGui::ViewProviderImport ::init(); + PartGui::ViewProviderCurveNet ::init(); + PartGui::ViewProviderExtrusion ::init(); + PartGui::ViewProvider2DObject ::init(); + PartGui::ViewProvider2DObjectPython ::init(); + PartGui::ViewProviderMirror ::init(); + PartGui::ViewProviderFillet ::init(); + PartGui::ViewProviderChamfer ::init(); + PartGui::ViewProviderRevolution ::init(); + PartGui::ViewProviderLoft ::init(); + PartGui::ViewProviderSweep ::init(); + PartGui::ViewProviderOffset ::init(); + PartGui::ViewProviderOffset2D ::init(); + PartGui::ViewProviderThickness ::init(); + PartGui::ViewProviderCustom ::init(); + PartGui::ViewProviderCustomPython ::init(); + PartGui::ViewProviderBoolean ::init(); + PartGui::ViewProviderMultiFuse ::init(); + PartGui::ViewProviderMultiCommon ::init(); + PartGui::ViewProviderCompound ::init(); + PartGui::ViewProviderSpline ::init(); + PartGui::ViewProviderCircleParametric ::init(); + PartGui::ViewProviderLineParametric ::init(); + PartGui::ViewProviderPointParametric ::init(); + PartGui::ViewProviderEllipseParametric ::init(); + PartGui::ViewProviderHelixParametric ::init(); + PartGui::ViewProviderSpiralParametric ::init(); + PartGui::ViewProviderPlaneParametric ::init(); + PartGui::ViewProviderSphereParametric ::init(); + PartGui::ViewProviderCylinderParametric ::init(); + PartGui::ViewProviderConeParametric ::init(); + PartGui::ViewProviderTorusParametric ::init(); + PartGui::ViewProviderRuledSurface ::init(); + PartGui::ViewProviderFace ::init(); + PartGui::DimensionLinear ::initClass(); + PartGui::DimensionAngular ::initClass(); + PartGui::ArcEngine ::initClass(); - PartGui::Workbench ::init(); + PartGui::Workbench ::init(); // instantiating the commands CreatePartCommands(); diff --git a/src/Mod/Part/Gui/CMakeLists.txt b/src/Mod/Part/Gui/CMakeLists.txt index 64e43fb422..cdebc8a913 100644 --- a/src/Mod/Part/Gui/CMakeLists.txt +++ b/src/Mod/Part/Gui/CMakeLists.txt @@ -181,6 +181,8 @@ SET(PartGui_SRCS SoBrepPointSet.h ViewProvider.cpp ViewProvider.h + ViewProviderAttachExtension.h + ViewProviderAttachExtension.cpp ViewProviderExt.cpp ViewProviderExt.h ViewProviderReference.cpp diff --git a/src/Mod/Part/Gui/ViewProviderAttachExtension.cpp b/src/Mod/Part/Gui/ViewProviderAttachExtension.cpp new file mode 100644 index 0000000000..7267e07147 --- /dev/null +++ b/src/Mod/Part/Gui/ViewProviderAttachExtension.cpp @@ -0,0 +1,94 @@ +/*************************************************************************** + * Copyright (c) 2016 Stefan Tröger * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + + +#include "PreCompiled.h" + +#ifndef _PreComp_ +#endif + +#include "ViewProviderAttachExtension.h" +#include + +#include + +using namespace PartGui; + +EXTENSION_PROPERTY_SOURCE(PartGui::ViewProviderAttachExtension, Gui::ViewProviderExtension) + + +ViewProviderAttachExtension::ViewProviderAttachExtension() +{ + initExtensionType(ViewProviderAttachExtension::getExtensionClassTypeId()); +} + +QIcon ViewProviderAttachExtension::extensionMergeOverlayIcons(const QIcon & orig) const +{ + QIcon mergedicon = orig; + + auto* attach = getExtendedViewProvider()->getObject()->getExtensionByType(); + + if (attach) { + + bool attached = false; + + try{ + attached = attach->positionBySupport(); + } + catch (...) { // We are just trying to get an icon, if no placement can be calculated, set unattached. + // set unattached + } + + if(!attached) { + QPixmap px; + + static const char * const feature_detached_xpm[]={ + "9 9 3 1", + ". c None", + "# c #cc00cc", + "a c #ffffff", + "...###...", + ".##aaa##.", + "##aaaaa##", + "##aaaaa##", + "#########", + "#########", + "#########", + ".##aaa##.", + ".##aaa##.", + "...###..."}; + + px = QPixmap(feature_detached_xpm); + + mergedicon = Gui::BitmapFactoryInst::mergePixmap(mergedicon, px, Gui::BitmapFactoryInst::BottomLeft); + } + } + + return mergedicon; +} + +namespace Gui { + EXTENSION_PROPERTY_SOURCE_TEMPLATE(PartGui::ViewProviderAttachExtensionPython, PartGui::ViewProviderAttachExtension) + +// explicit template instantiation + template class PartGuiExport ViewProviderExtensionPythonT; +} diff --git a/src/Mod/Part/Gui/ViewProviderAttachExtension.h b/src/Mod/Part/Gui/ViewProviderAttachExtension.h new file mode 100644 index 0000000000..b2c730178d --- /dev/null +++ b/src/Mod/Part/Gui/ViewProviderAttachExtension.h @@ -0,0 +1,51 @@ +/*************************************************************************** + * Copyright (c) 2006 Werner Mayer * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + + +#ifndef GUI_VIEWPROVIDERATTACHEXTENSION_H +#define GUI_VIEWPROVIDERATTACHEXTENSION_H + +#include +#include + +namespace PartGui +{ + +class PartGuiExport ViewProviderAttachExtension : public Gui::ViewProviderExtension +{ + EXTENSION_PROPERTY_HEADER_WITH_OVERRIDE(PartGui::ViewProviderAttachExtension); + +public: + /// Constructor + ViewProviderAttachExtension(void); + virtual ~ViewProviderAttachExtension() = default; + + virtual QIcon extensionMergeOverlayIcons(const QIcon & orig) const override; + + +}; + +typedef Gui::ViewProviderExtensionPythonT ViewProviderAttachExtensionPython; + +} //namespace Part::Gui + +#endif // GUI_VIEWPROVIDERATTACHMENTEXTENSION_H