Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Core: Create a SuppressibleExtension to provide the Suppressed property to all the WBs #12412

Merged
merged 2 commits into from Feb 26, 2024

Conversation

FlachyJoe
Copy link
Contributor

@FlachyJoe FlachyJoe commented Feb 14, 2024

Many objects can be suppressed, this extension aims to provide a unique visualization in the tree view.

Fix #12361

@github-actions github-actions bot added Core Issue or PR touches core sections (App, Gui, Base) of FreeCAD WB Part Design Related to the Part Design Workbench labels Feb 14, 2024
@FlachyJoe FlachyJoe force-pushed the suppressibleExt branch 2 times, most recently from 210ee56 to 50aa554 Compare February 15, 2024 18:03
@FlachyJoe
Copy link
Contributor Author

FlachyJoe commented Feb 15, 2024

@wwmayer could you please take a look? ViewProviderSuppressibleExtension::extensionUpdateData is never called.

EDIT: Ok, done. I spent an hour for search and I found when I asked for help 🙄

@FlachyJoe
Copy link
Contributor Author

image

@FlachyJoe
Copy link
Contributor Author

Ready for review.
I have no possibility to debug MacOS nor Windows build, it certainly lacks one new file's mention in a config.

@FlachyJoe FlachyJoe changed the title [WIP] Core: Create a SuppressibleExtension to provide the Suppressed property to all the WBs Core: Create a SuppressibleExtension to provide the Suppressed property to all the WBs Feb 16, 2024
@FlachyJoe FlachyJoe marked this pull request as ready for review February 16, 2024 11:04
@FlachyJoe FlachyJoe marked this pull request as draft February 17, 2024 08:13
@FlachyJoe
Copy link
Contributor Author

Back to draft: a crash occurs at object deletion.

@FlachyJoe
Copy link
Contributor Author

Got it. I was confused by

>>> doc=App.ActiveDocument
>>> doc.Body.addExtension('App::SuppressibleExtension')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: Extension is not a python addable version: 'App::SuppressibleExtension'

But using App::SuppressibleExtensionPython is ok

>>> doc.Body.addExtension('App::SuppressibleExtensionPython')
>>> doc.Body.ViewObject.addExtension('Gui::ViewProviderSuppressibleExtensionPython')
>>> 

image

@FlachyJoe FlachyJoe marked this pull request as ready for review February 17, 2024 10:44
@wwmayer
Copy link
Contributor

wwmayer commented Feb 17, 2024

In how far is this related to #5545?
Original ticket in Mantis: https://tracker.freecad.org/view.php?id=402
Forum thread: https://forum.freecad.org/viewtopic.php?t=1070

@FlachyJoe
Copy link
Contributor Author

@wwmayer I don't think a Suppressed object aims to be a Emancipated one (cut from parents).

@FlachyJoe
Copy link
Contributor Author

I've added a Suppress/Unsuppress action in the tree context menu. This action is only shown if the Suppressed property of the object is not hidden so the action visibility is managed at workbench level.
See https://github.com/FlachyJoe/FreeCAD/blob/7b90aea42915c87eaa643c96fe0758b17727a1e6/src/Mod/PartDesign/App/Feature.cpp#L63

    App::SuppressibleExtension::initExtension(this);
    Suppressed.setStatus(App::Property::Status::Hidden, true); //Todo: remove when TNP fixed

@chennes chennes merged commit d144e85 into FreeCAD:main Feb 26, 2024
9 checks passed
@PaddleStroke
Copy link
Contributor

PaddleStroke commented Feb 27, 2024

Master does not build (Windows/libpack/visual studio) today. Coming from this PR.

Severity Code Description Project File Line Suppression State
Error C2027 use of undefined type 'Gui::Document' FreeCADGui C:\Users\Sky_l\Desktop\Freecad-Src\src\Gui\ViewProviderSuppressibleExtension.cpp 59
Error C2039 'ActionFunction': is not a member of 'Gui' FreeCADGui C:\Users\Sky_l\Desktop\Freecad-Src\src\Gui\ViewProviderSuppressibleExtension.cpp 110
Error C2065 'ActionFunction': undeclared identifier FreeCADGui C:\Users\Sky_l\Desktop\Freecad-Src\src\Gui\ViewProviderSuppressibleExtension.cpp 110
Error C2065 'func': undeclared identifier FreeCADGui C:\Users\Sky_l\Desktop\Freecad-Src\src\Gui\ViewProviderSuppressibleExtension.cpp 110
Error C2039 'ActionFunction': is not a member of 'Gui' FreeCADGui C:\Users\Sky_l\Desktop\Freecad-Src\src\Gui\ViewProviderSuppressibleExtension.cpp 110
Error C2061 syntax error: identifier 'ActionFunction' FreeCADGui C:\Users\Sky_l\Desktop\Freecad-Src\src\Gui\ViewProviderSuppressibleExtension.cpp 110
Error C2065 'func': undeclared identifier FreeCADGui C:\Users\Sky_l\Desktop\Freecad-Src\src\Gui\ViewProviderSuppressibleExtension.cpp 117
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderPrimitive.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderMirror.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderPython.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderBoolean.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderRuledSurface.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderImport.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderExtrusion.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderScale.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProvider2DObject.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderRegularPolygon.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderTorusParametric.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderCurveNet.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderSpline.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderSphereParametric.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderCylinderParametric.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderConeParametric.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderPrism.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderPointParametric.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderEllipseParametric.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderHelixParametric.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderPlaneParametric.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderBox.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderCompound.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderCircleParametric.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderLineParametric.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\CrossSections.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProvider.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderExt.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) PartGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Part\Gui\ViewProviderReference.obj 1
Error LNK1120 1 unresolved externals PartGui C:\Users\Sky_l\Desktop\FC build\Mod\Part\PartGui.pyd 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) SketcherGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Sketcher\Gui\ViewProviderSketch.obj 1
Error LNK2001 unresolved external symbol "public: virtual bool __cdecl Gui::ViewProvider::acceptReorderingObjects(void)const " (?acceptReorderingObjects@ViewProvider@Gui@@UEBA_NXZ) SketcherGui C:\Users\Sky_l\Desktop\FC build\src\Mod\Sketcher\Gui\ViewProviderPython.obj 1

namespace Gui
{

class ViewProviderSuppressibleExtension : public Gui::ViewProviderExtension
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line should be :
class GuiExport ViewProviderSuppressibleExtension : public ViewProviderExtension

#include "ViewProviderExtensionPython.h"


namespace Gui
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The namespace should not start here. This line should be
using namespace Gui;

private:
bool isSetSuppressedIcon{false};
};

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

namespace Gui should start here. See ViewProviderGroupExtension as example

#include "ActionFunction.h"
#include "Control.h"
#include "Document.h"
#include "PreCompiled.h"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"PreCompiled.h" must be the first...
Building now

@FlachyJoe
Copy link
Contributor Author

Thank you @PaddleStroke for the fix.
Isn't the CI supposed to fail before the merge?

@PaddleStroke
Copy link
Contributor

The CI is not using the precompiled headers. This is something that is being discussed with @adrianinsaval and @chennes if I recall correctly

@FlachyJoe FlachyJoe deleted the suppressibleExt branch March 1, 2024 21:33
@FEA-eng
Copy link
Contributor

FEA-eng commented Mar 5, 2024

@FlachyJoe Is it still in development ? I can't find the Suppress option in Properties or in the tree context menu in Part Design.

OS: Windows 10 build 19045
Word size of FreeCAD: 64-bit
Version: 0.22.0dev.36277 (Git)
Build type: Release
Branch: main
Hash: 9e1903d46112b3660bf10c6a4537d728101d560b
Python 3.10.13, Qt 5.15.8, Coin 4.0.2, Vtk 9.2.6, OCC 7.6.3
Locale: Polish/Poland (pl_PL)

@FlachyJoe
Copy link
Contributor Author

@FEA-eng in PD the Suppress property is hidden (right-click, show all) until the TNP fix is merged due to the problems it can produce in shapes hierarchy.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Core Issue or PR touches core sections (App, Gui, Base) of FreeCAD WB Part Design Related to the Part Design Workbench
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Problem] Suppressed objects are not distinguishable
5 participants