ViewProvider(DocumentObject): new APIs for context aware selection
Context aware selection makes it possible to select the same Coin3D node in different hierarchies (i.e. context) without ambiguity. New/modified APIs in ViewProvider (the first two are the most crucial APIs for context aware selection to work): * getElementPicked(), supercedes getElement(). Given a Coin3D pick point, this function returns a dot separated subname reference as a path leads to the selected object. * getDetailPath(), supercedes getDetail(). Given a subname reference, this function returns an SoFullPath leads to the Coin3D node of the selected object or sub-element (with SoDetail). * (has)HiddenMarker(), check/return a special text marker for context aware override of object visibility. * partialRender(), render only part of the object based on given subname references. It can render, e.g. some faces of a solid, or some children of a container. It uses the 'secondary' extension of SoSelectionElementAction to select which elements to render or hide. The actually rendering functionality will be added in the following patch. * update()/onChanged(), modified to sync Visibility property from DocumentObject. * useNewSelectionModel(), modified to return the default true view parameter. This is for test in the early stage of Link development, probably not needed anymore. * getBoundingBox(), a convenience function to obtain the bounding box of a sub-object/element regardless of object's visibility. It uses getDetailPath() and SoGetBoundingBoxAction to obtain bounding box through Coin3D. It will be used in later sub-element box selection functionality. New/modified APIs in ViewProviderDocumentObject: * getElementPicked()/getDetailPath() provides actual implementation to support container like (sub)object selection without ambiguity. It relies on DocumentObject::getSubObject() to walk the path. * reattach(), called when undo deleteion * forceUpdate()/isUpdateForced(), force update even if object is invisible. These are used by Link to force update the visual of a linked object regardless of its visibility. * getLinkedViewProvider(), return the linked view provider with hierarchy. ViewProviderDocumentObjectPy: * Object attribute is made writtable. Assigning it is equaivalant of calling ViewProviderDocumentObject::attach() in Python.
This commit is contained in:
@@ -24,9 +24,10 @@
|
||||
#ifndef GUI_VIEWPROVIDER_DOCUMENTOBJECT_H
|
||||
#define GUI_VIEWPROVIDER_DOCUMENTOBJECT_H
|
||||
|
||||
#include <Inventor/SoType.h>
|
||||
|
||||
#include "ViewProvider.h"
|
||||
#include <App/DocumentObject.h>
|
||||
#include <Inventor/SoType.h>
|
||||
|
||||
class SoMaterial;
|
||||
class SoDrawStyle;
|
||||
@@ -59,9 +60,12 @@ public:
|
||||
// Display properties
|
||||
App::PropertyEnumeration DisplayMode;
|
||||
App::PropertyBool Visibility;
|
||||
App::PropertyBool ShowInTree;
|
||||
App::PropertyEnumeration OnTopWhenSelected;
|
||||
|
||||
virtual void attach(App::DocumentObject *pcObject);
|
||||
virtual void updateData(const App::Property*);
|
||||
virtual void reattach(App::DocumentObject *);
|
||||
virtual void update(const App::Property*) override;
|
||||
/// Set the active mode, i.e. the first item of the 'Display' property.
|
||||
void setActiveMode();
|
||||
/// Hide the object in the view
|
||||
@@ -69,6 +73,13 @@ public:
|
||||
/// Show the object in the view
|
||||
virtual void show(void);
|
||||
|
||||
virtual bool canDropObjectEx(App::DocumentObject *, App::DocumentObject *,
|
||||
const char *, const std::vector<std::string> &) const override;
|
||||
|
||||
virtual int replaceObject(App::DocumentObject*, App::DocumentObject*) override;
|
||||
|
||||
virtual bool showInTree() const;
|
||||
|
||||
/// Get a list of TaskBoxes associated with this object
|
||||
virtual void getTaskViewContent(std::vector<Gui::TaskView::TaskContent*>&) const;
|
||||
|
||||
@@ -83,6 +94,22 @@ public:
|
||||
/// Get the python wrapper for that ViewProvider
|
||||
PyObject* getPyObject();
|
||||
|
||||
/// return a hit element given the picked point which contains the full node path
|
||||
virtual bool getElementPicked(const SoPickedPoint *, std::string &subname) const override;
|
||||
/// return the coin node detail and path to the node of the subname
|
||||
virtual bool getDetailPath(const char *subname, SoFullPath *pPath, bool append, SoDetail *&det) const override;
|
||||
|
||||
/* Force update visual
|
||||
*
|
||||
* These method exists because some view provider skips visual update when
|
||||
* hidden (e.g. PartGui::ViewProviderPartExt). Call this function to force
|
||||
* visual update.
|
||||
*/
|
||||
//@{
|
||||
virtual void forceUpdate(bool enable = true) {(void)enable;}
|
||||
virtual bool isUpdateForced() const {return false;}
|
||||
//@}
|
||||
|
||||
/** @name Restoring view provider from document load */
|
||||
//@{
|
||||
virtual void startRestoring();
|
||||
@@ -96,6 +123,20 @@ public:
|
||||
const char* group=0, const char* doc=0,
|
||||
short attr=0, bool ro=false, bool hidden=false) override;
|
||||
|
||||
/** Return the linked view object
|
||||
*
|
||||
* This function is mainly used for GUI navigation (e.g.
|
||||
* StdCmdLinkSelectLinked).
|
||||
*
|
||||
* @param subname: output as the subname referencing the linked object
|
||||
* @param recursive: whether to follow the link recursively
|
||||
*
|
||||
* @return Returns the linked view provider. If none, it shall return
|
||||
* itself.
|
||||
*/
|
||||
virtual ViewProviderDocumentObject *getLinkedViewProvider(
|
||||
std::string *subname=0, bool recursive=false) const;
|
||||
|
||||
virtual std::string getFullName() const override;
|
||||
|
||||
protected:
|
||||
|
||||
Reference in New Issue
Block a user