"Professional CMake" book suggest the following:
"Targets should build successfully with or without compiler support for precompiled headers. It
should be considered an optimization, not a requirement. In particular, do not explicitly include a
precompile header (e.g. stdafx.h) in the source code, let CMake force-include an automatically
generated precompile header on the compiler command line instead. This is more portable across
the major compilers and is likely to be easier to maintain. It will also avoid warnings being
generated from certain code checking tools like iwyu (include what you use)."
Therefore, removed the "#include <PreCompiled.h>" from sources, also
there is no need for the "#ifdef _PreComp_" anymore
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.