Fix compilation error on vc12 (MSVC++ 12.0)
[occt.git] / dox / dev_guides / upgrade / upgrade.md
index 4a9f48d..cdbcff0 100644 (file)
@@ -58,7 +58,7 @@ for (Standard_Integer aGr = 1; aGr <= aLen; ++aGr)
 Porting of user applications from an earlier OCCT version to version 6.5.2 requires taking into account the following major changes:
 * Any code that has been generated by WOK from CDL generic classes *Tcollection_DataMap* and *Tcollection_IndexedDataMap* needs to be regenerated by WOK to take into account the change in the interface of these classes.
 * The enumerations *CDF_StoreStatus* and *CDF_RetrievableStatus* have been replaced by the enumerations *PCDM_StoreStatus* and *PCDM_ReaderStatus*. Correspondingly, the methods *Open, Save* and *SaveAs* of the class *TDocStd_Application* have changed their return value. Any code, which uses these enumerations, needs to be updated.
-* *BRepLib_MakeFace* has been modified to accept tolerance value for resolution of degenerated edges. This tolerance parameter has no default value to ensure that the client code takes care of passing a meaningful value, not just *Precision::Confusion*, so some porting overheads are expected. 
+* *BRepLib_MakeFace* has been modified to receive tolerance value for resolution of degenerated edges. This tolerance parameter has no default value to ensure that the client code takes care of passing a meaningful value, not just *Precision::Confusion*, so some porting overheads are expected. 
 * If the callback mechanism in call_togl_redraw function was used in the application code, it is necessary to revise it to take into account the new callback execution and provide a check of reason value of Aspect_GraphicCallbackStruct in callback methods to confirm that the callback code is executed at the right moment. Now the callbacks are executed before redrawing the underlayer, before redrawing the overlayer and at the end of redrawing. The information about the moment when the callback is invoked is provided with the reason value in form of an additional bit flag <i>(OCC_PRE_REDRAW, OCC_PRE_OVERLAY)</i>. The state of OpenGl changed in callback methods will not be restored automatically, which might lead to unwanted behavior in redrawing procedure.
 * The print method used in the application code might need to be revised to take into account the ability to choose between print algorithms: tile and stretch. The stretch algorithm will be selected by default during porting.
 * It is recommended to *BRepMesh_DiscretFactory* users, to check *BRepMesh_DiscretFactory::SetDefault()* return value to determine plugin availability / validity. *BRepMesh_DiscretFactory::Discret()* method now returns handle instead of pointer. The code should be updated in the following manner:
@@ -82,7 +82,7 @@ Porting of user applications from an earlier OCCT version to version 6.5.3 requi
 * Method *HashCode()* has been removed from class *Standard_Transient*. It is advisable to use global function <i>HashCode()</i> for Handle objects instead. 
 * Declaration of operators new/delete for classes has become consistent and is encapsulated in macros.
 * Memory management has been changed to use standard heap <i>(MMGT_OPT=0)</i> and reentrant mode <i>(MMGT_REENTRANT=1)</i> by default.
-* Map classes in *NCollection* package now accept one more argument defining a hash tool.
+* Map classes in *NCollection* package now receive one more argument defining a hash tool.
 
 @section upgrade_654 Upgrade to OCCT 6.5.4
 
@@ -247,6 +247,11 @@ The class *Select3D_Projector* now supports both orientation and projection tran
 
 Porting of user applications from an earlier OCCT version to version 6.9.0 requires taking into account the following major changes.
 
+@subsection upgrade_690_shaders 3D Viewer initialization
+
+3D Viewer now uses GLSL programs for managing frame buffer and stereoscopic output.
+For proper initialization, application should configure **CSF_ShadersDirectory** environment variable pointing to a folder with GLSL resources - files from folder **CASROOT**/src/Shaders.
+*Note that **CSF_ShadersDirectory** become optional since OCCT 7.1.0 release*.
 
 @subsection upgrade_690_selection Changes in Selection
 
@@ -324,13 +329,13 @@ Porting of user applications from an earlier OCCT version to version 7.0.0 requi
 Legacy persistence for shapes and OCAF data based on *Storage_Schema* (toolkits *TKPShape*, *TKPLCAF*, *TKPCAF*, *TKShapeShcema, TLStdLSchema, TKStdSchema*, and *TKXCAFSchema*) has been removed in OCCT 7.0.0.
 The applications that used these data persistence tools need to be updated to use other persistence mechanisms.
 
-@note For compatibility with previous versions, possibility to read standard OCAF data (TKLCAF, TKCAF) from the files stored in old format is preserved (toolkits *TKStdL*, *TKStd*).
+@note For compatibility with previous versions, the possibility to read standard OCAF data (*TKLCAF* and *TKCAF*) from  files stored in the old format is preserved (toolkits *TKStdL* and *TKStd*).
 
 The existing data files in standard formats can be converted using OCCT 6.9.1 or a previous version, as follows.
 
 #### CSFDB files
 
-Files in CSFDB format (usually with extension .csfdb) contain OCCT shape data that can be converted to BRep format. 
+Files in *CSFDB* format (usually with extension .csfdb) contain OCCT shape data that can be converted to BRep format. 
 The easiest way to do that is to use ImportExport sample provided with OCCT 6.9.0 (or earlier):
 
 - Start ImportExport sample;
@@ -343,7 +348,7 @@ The easiest way to do that is to use ImportExport sample provided with OCCT 6.9.
 
 Files containing OCAF data saved in the old format usually have extensions <i>.std, .sgd</i> or <i>.dxc</i> (XDE documents).
 These files can be converted to XML or binary OCAF formats using DRAW Test Harness commands.
-Note that if the file contains only attributes defined in TKLCAF and TKCAF, this action can be performed in OCCT 7.0; otherwise OCCT 6.9.1 or earlier should be used.
+Note that if the file contains only attributes defined in *TKLCAF* and *TKCAF*, this action can be performed in OCCT 7.0; otherwise OCCT 6.9.1 or earlier should be used.
 
 For that, start *DRAWEXE* and perform the following commands: 
 
@@ -503,7 +508,7 @@ This will eliminate the need to include the header *A* in each source file where
 
 #### Ambiguity of calls to overloaded functions
 
-This issue appears in the compilers that do not support default arguments in template functions (known cases are Visual C++ 10 and 11): the compiler reports an ambiguity error if a handle is used in the argument of a call to the function that has two or move overloaded versions, accepting handles to different types. 
+This issue appears in the compilers that do not support default arguments in template functions (known cases are Visual C++ 10 and 11): the compiler reports an ambiguity error if a handle is used in the argument of a call to the function that has two or more overloaded versions, receiving handles to different types. 
 The problem is that operator  <i> const handle<T2>& </i> is defined for any type *T2*, thus the compiler cannot make the right choice.
 
 Example:
@@ -546,7 +551,7 @@ For example:
 Handle(Geom_Geometry) aC = GC_MakeLine (p, v); // compiler error
 ~~~~~
 
-The problem is that the class *GCE2d_MakeSegment* has a user-defined conversion to <i>const Handle(Geom_TrimmedCurve)&,</i> which is not the same as the type of the local variable *aC*.
+The problem is that the class *GC_MakeLine* has a user-defined conversion to <i>const Handle(Geom_TrimmedCurve)&,</i> which is not the same as the type of the local variable *aC*.
 
 To resolve this, use method <i>Value()</i>:
 
@@ -560,7 +565,7 @@ or use variable of the appropriate type:
 Handle(Geom_TrimmedCurve) aC = GC_MakeLine (p, v); // ok
 ~~~~~
 
-With GCC compiler, similar problem appears when const handle to derived type is used to construct handle to base type via assignment (and in some cases in return statement), for instance:
+A similar problem appears with GCC compiler, when *const* handle to derived type is used to construct handle to base type via assignment (and in some cases in return statement), for instance:
 
 ~~~~~
   const Handle(Geom_Line) aLine;
@@ -620,7 +625,7 @@ Call method <i>get()</i> explicitly to output the address of the Handle.
 
 #### Method DownCast for non-base types
 
-Method *DownCast()* in OCCT 7.0 is made templated; if it is used with argument which is not a base class, "deprecated" compiler warning is generated.
+Method *DownCast()* in OCCT 7.0 is made templated; if its argument is not a base class, "deprecated" compiler warning is generated.
 This is done to prevent possible unintended errors like this:
 
 ~~~~~
@@ -631,7 +636,7 @@ Handle(Geom_Line) aLine =
 
 The places where this cast has been used should be corrected manually.
 
-If down casting is used in a template context where argument can have the same or unrelated type so that *DownCast()* may be not available in all cases, use C++ *dynamic_cast<>* instead, e.g.: 
+If down casting is used in a template context where the argument can have the same or unrelated type so that *DownCast()* may be not available in all cases, use C++ *dynamic_cast<>* instead, e.g.: 
 
 ~~~~~
 template <class T>
@@ -664,8 +669,8 @@ aBC->Transform (T); // access violation in OCCT 7.0
 
 @subsubsection upgrade_occt700_cdl_nocast Option to avoid cast of handle to reference to base type
 
-In OCCT 6.x and earlier versions the handle classes formed a hierarchy echoing hierarchy of corresponding object classes.
-This automatically enabled possibility to use handle to derived class in all contexts where handle to base class was needed, e.g. pass it in function by reference without copying:
+In OCCT 6.x and earlier versions the handle classes formed a hierarchy echoing the hierarchy of the corresponding object classes .
+This automatically enabled the possibility to use the handle to a derived class in all contexts where the handle to a base class was needed, e.g. to pass it in a function by reference without copying:
 
 ~~~~
 Standard_Boolean GetCurve (Handle(Geom_Curve)& theCurve);
@@ -677,17 +682,16 @@ if (GetCurve (aLine)) {
 ~~~~
 
 This feature was used in multiple places in OCCT and dependent projects.
-However it is potentially unsafe: in the above example no checks are done at compile time or at run time to ensure that argument handle is assigned a type compatible with the type of handle passed as argument. 
-If object of incompatible type (e.g. Geom_Circle) is assigned to *theCurve*, the behavior will be unpredictable.
+However it is potentially unsafe: in the above example no checks are done at compile time or at run time to ensure that the type assigned to the argument handle is compatible with the type of the handle passed as argument. 
+If an object of incompatible type (e.g. Geom_Circle) is assigned to *theCurve*, the behavior will be unpredictable. 
 
-For compatibility with existing code, by default OCCT 7.0 keeps this possibility, providing operators of type cast to handle to base type.
-Besides being unsafe, in specific situations this feature may cause compile-time or run-time errors as described above.
+For compatibility with the existing code, OCCT 7.0 keeps this possibility by default, providing operators of type cast to the handle to a base type. However, this feature is unsafe and in specific situations it may cause compile-time or run-time errors as described above.
 
-In order to provide safer behavior, this feature can be disabled by defining a compile-time macro *OCCT_HANDLE_NOCAST*.
-When it is defined, constructors and assignment operators are defined (instead of type cast operators) to convert from handle to defived type to handle to base type.
+To provide a safer behavior, this feature can be disabled by a compile-time macro *OCCT_HANDLE_NOCAST*.
+When it is used, constructors and assignment operators are defined (instead of type cast operators) to convert handles to a derived type into handles to a base type.
 This implies creation of temporary objects and hence may be more expensive at run time in some circumstances, however this way is more standard, safer, and in general recommended.
 
-The code that relies on possibility of casting to base should be amended so that handle of argument type is always used in function call, and to use DownCast() to safely convert the result to desired type.
+The code that relies on the possibility of casting to base should be amended to always use the handle of argument type in function call and to use *DownCast()* to safely convert the result to the desired type.
 For instance, the code from the example below can be changed as follows:
 
 ~~~~~
@@ -727,7 +731,7 @@ The upgrade script and sources of a specialized WOK version used for OCCT code u
 
 @subsection upgrade_occt700_bspline Separation of BSpline cache
 
-Implementation of NURBS curves and surfaces has been revised: the cache of polynomial coefficients, which is used to accelerate calculate values of B-spline, has been separated from data objects *Geom2d_BSplineCurve, Geom_BSplineCurve* and *Geom_BSplineSurface* into the dedicated classes *BSplCLib_Cache* and *BSplSLib_Cache*. 
+Implementation of NURBS curves and surfaces has been revised: the cache of polynomial coefficients, which is used to accelerate the calculation of values of a B-spline, has been separated from data objects *Geom2d_BSplineCurve, Geom_BSplineCurve* and *Geom_BSplineSurface* into the dedicated classes *BSplCLib_Cache* and *BSplSLib_Cache*. 
 
 The benefits of this change are:
 * Reduced memory footprint of OCCT shapes (up to 20% on some cases)
@@ -946,6 +950,11 @@ The related classes, e.g. *AIS_LocalContext*, and methods ( <i>AIS_InteractiveCo
 
 The main functionality provided by Local Context - selection of object subparts - can be now used within Neutral Point without opening any Local Context.
 
+The property *::SelectionMode()* has been removed from the class *AIS_InteractiveObject*.
+This property contradicts to selection logic, since it is allowed to activate several Selection modes at once.
+Therefore keeping one selection mode as object field makes no sense.
+Applications that used this method should implement selection mode caching at application level, if it is necessary for some reason.
+
 @subsection upgrade_occt700_separate_caf_visualisation Separation of visualization part from TKCAF
 
 Visualization CAF attributes have been moved into a new toolkit *TKVCAF*. 
@@ -960,14 +969,215 @@ When using documents loaded from a file, make sure to call method *TPrsStd_AISVi
 
 Conversion of *gp_Quaternion* to and from intrinsic Tait-Bryan angles (including *gp_YawPitchRoll*) is fixed.
 
-Before that fix the sequence of rotation axes was opposite to the intended; e.g. *gp_YawPitchRoll* (equivalent to *gp_Intrinsic_ZYX*) actually  defined intrinsic rotations around X, then Y, then Z. Now the rotations are made in correct order.
+Before that fix the sequence of rotation axes was opposite to the intended; e.g. *gp_YawPitchRoll* (equivalent to *gp_Intrinsic_ZYX*) actually  defined intrinsic rotations around X, then Y, then Z. Now the rotations are made in the correct order.
 
-Applications that use *gp_Quaternion* to convert Yaw-Pitch-Roll angles (or other intrinsic Tait-Bryan sequences) may need to be updated to take this change into account.
+The applications that use *gp_Quaternion* to convert Yaw-Pitch-Roll angles (or other intrinsic Tait-Bryan sequences) may need to be updated to take this change into account.
 
 @subsection upgrade_zoom_persistent_selection Zoom Persistent Selection
 
-Zoom persistent selection introduces a new structure *Graphic3d_TransformPers* for transform persistence methods and parameters and a new class *Graphic3d_WorldViewProjState* for referring camera transformation state. You might need to update your code to deal with the new classes if you were using the related features. Please, keep in mind the following: 
+Zoom persistent selection introduces a new structure *Graphic3d_TransformPers* to transform persistence methods and parameters and a new class *Graphic3d_WorldViewProjState* to refer to the camera transformation state. You might need to update your code to deal with the new classes if you were using the related features. Please, keep in mind the following: 
 * *Graphic3d_Camera::ModelViewState* has been renamed to *Graphic3d_Camera::WorldViewState*.
 * Transformation matrix utilities from *OpenGl_Utils* namespace have been moved to *Graphic3d_TransformUtils* and *Graphic3d_TransformUtils.hxx* header respectively.
 * Matrix stack utilities from *OpenGl_Utils* namespace have been moved to *OpenGl_MatrixStack* class and *OpenGl_MatrixStack.hxx* header respectively.
 * *OpenGl_View* methods *Begin/EndTransformPersistence* have been removed. Please, use *Graphic3d_TransformPers::Apply()* instead to apply persistence to perspective and world-view projection matrices.
+
+@subsection upgrade_occt700_correction_of_texture Texture mapping of objects
+
+Textured objects now have the priority over the environment mapping.
+
+Redundant enumerations *V3d_TypeOfSurface* and *Graphic3d_TypeOfSurface*, class *OpenGl_SurfaceDetailState*, the corresponding methods from *Graphic3d_CView, OpenGl_ShaderManager, OpenGl_View, V3d_View* and *V3d_Viewer* have been deleted.
+Draw command *VSetTextureMode* has been deleted.
+
+@subsection upgrade_occt700_wfshape Shape presentation builders
+
+Presentation tools for building Wireframe presentation have been refactored to eliminate duplicated code and interfaces.
+Therefore, the following classes have been modified:
+* *StdPrs_WFDeflectionShape* and *Prs3d_WFShape* have been removed. *StdPrs_WFShape* should be used instead.
+* *StdPrs_ToolShadedShape* has been renamed to *StdPrs_ToolTriangulatedShape*.
+
+@section upgrade_occt710 Upgrade to OCCT 7.1.0
+
+@subsection upgrade_710_aspects Presentation attributes
+
+This section should be considered if application defines custom presentations, i.e. inherited from *AIS_InteractiveObject*.
+The previous versions of OCCT have three levels for defining presentation properties (e.g. colors, materials, etc.):
+
+1. For the entire structure - *Graphic3d_Structure* / *Prs3d_Presentation*.
+2. For a specific group of primitives - *Graphic3d_Group::SetGroupPrimitivesAspect()* overriding structure aspects.
+3. For a specific primitive array within the graphic group - *Graphic3d_Group::SetPrimitivesAspect()*.
+
+The structure level has de facto not been used for a long time since OCCT presentations always define aspects at the graphic group level (overriding any structure aspects).
+Within this OCCT release, structure level of aspects has been completely removed. In most cases the application code should just remove missing methods. In those rare cases, when this functionality was intentionally used, the application should explicitly define aspects to the  appropriate graphic groups.
+
+Note that defining several different aspects within the same graphic group should also be avoided in the application code since it is a deprecated functionality which can be removed in further releases.
+*Graphic3d_Group::SetGroupPrimitivesAspect()* should be the main method defining presentation attributes.
+
+The implementation of *Graphic3d_Group::SetGroupPrimitivesAspect()* has been changed from copying aspect values to keeping the passed object.
+Although it was not documented, previously it was possible to modify a single aspect instance, like *Graphic3d_AspectFillArea3d* and set it to multiple groups.
+Now such code would produce an unexpected result and therefore should be updated to create the dedicated aspect instance.
+
+@subsection upgrade_710_types Typedefs
+
+The following type definitions in OCCT has been modified to use C++11 types:
+- *Standard_Boolean* is now *bool* (previously *unsigned int*).
+- *Standard_ExtCharacter* is now *char16_t* (previously *short*).
+- *Standard_ExtString;* is now *const char16_t* (previously *const short*).
+- *Standard_Utf16Char* is now *char16_t* (previously *uint16_t* for compatibility with old compilers).
+- *Standard_Utf32Char* is now *char32_t* (previously *uint32_t* for compatibility with old compilers).
+
+For most applications this change should be transparent on the level of source code. Binary compatibility is not maintained, as *bool* has a different size in comparison with *unsigned int*.
+
+@subsection upgrade_710_ffp Programmable Pipeline
+
+Fixed-function pipeline has been already deprecated since OCCT 7.0.0.
+Release 7.1.0 disables this functionality by default in favor of Programmable Pipeline (based on GLSL programs).
+
+Method *V3d_View::Export()*, based on *gl2ps* library, requires fixed pipeline and will return error if used with default settings.
+Applications should explicitly enable fixed pipeline by setting *OpenGl_Caps::ffpEnable* flag to TRUE within *OpenGl_GraphicDriver::ChangeOptions()* before creating the viewer to use *V3d_View::Export()*.
+This method is declared as deprecated and will be removed in one of the the next OCCT releases.
+The recommended way to generate a vector image of a 3D model or scene is to use an application-level solution independent from OpenGL.
+
+@subsection upgrade_710_trsfpers Transformation persistence
+
+The behavior of transformation persistence flags *Graphic3d_TMF_ZoomPers* and *Graphic3d_TMF_TriedronPers* has been changed for consistency with a textured fixed-size 2D text.
+An object with these flags is considered as defined in pixel units, and the presentation is no more scaled depending on the view height.
+The applications that need to scale such objects depending on viewport size should update them manually.
+
+Flags *Graphic3d_TMF_PanPers* and *Graphic3d_TMF_FullPers* have been removed.
+*Graphic3d_TMF_TriedronPers* or *Graphic3d_TMF_2d* can be used instead depending on the context.
+
+*Graphic3d_TransModeFlags* is not an integer bitmask anymore - enumeration values should be specified instead.
+Several transformation persistence methods in *PrsMgr_PresentableObject* have been marked deprecated.
+Transformation persistence should be defined using  *Graphic3d_TransformPers* constructor directly and passed by a handle, not value.
+
+@subsection upgrade_710_selprops Dynamic highlight and selection properties
+
+Release 7.1.0 introduces *Graphic3d_HighlightStyle* - an entity that allows flexible customization of highlighting parameters (such as highlighting method, color, and transparency). Therefore, the signatures of the following methods related to highlighting:
+- *AIS_InteractiveContext::Hilight()*;
+- *AIS_InteractiveContext::HilightWithColor()*;
+- *PrsMgr_PresentationManager::Color()*;
+- *SelectMgr_EntityOwner::HilightWithColor()*;
+have been changed to receive *Graphic3d_HighlightStyle* instead of *Quantity_Color*.
+
+Method *AIS_InteractiveContext::Hilight* is now deprecated and highlights the interactive object with selection style.
+
+A group of methods *AIS_InteractiveContext::IsHilighted* has changed its behavior - now they only check highlight flags of the object or the owner in the global status. If the highlight color is required on the application level, it is necessary to use overloaded methods *AIS_InteractiveContext::HighlightStyle* for the owner and the object.
+
+The following methods have been replaced in *AIS_InteractiveContext* class:
+- *HilightColor* and *SetHilightColor* by *HighlightStyle* and *SetHighlightStyle*;
+- *SelectionColor* setter and getter by *SelectionStyle* and *SetSelectionStyle*.
+
+The API of *Prs3d_Drawer* has been extended to allow setting up styles for both dynamic selection and highlighting. Therefore, it is possible to change the highlight style of a particular object on the application level via *SelectMgr_SelectableObject::HilightAttributes()* and process it in the entity owner.
+
+@subsection upgrade_occt710_correction_of_TObj_Model Correction in TObj_Model class
+
+Methods *TObj_Model::SaveAs* and *TObj_Model::Load* now receive *TCollection_ExtendedString* filename arguments instead of char*. UTF-16 encoding can be used to pass file names containing Unicode symbols.
+
+@subsection upgrade_710_env Redundant environment variables
+
+The following environment variables have become redundant:
+
+* *CSF_UnitsLexicon* and *CSF_UnitsDefinition* are no more used.  Units definition (*UnitsAPI/Lexi_Expr.dat* and *UnitsAPI/Units.dat*) is now embedded into source code.
+* *CSF_XSMessage* and *CSF_XHMessage* are now optional.
+  English messages (XSMessage/*XSTEP.us* and SHMessage/*SHAPE.us*) are now embedded into source code
+  and automatically loaded when environment variables are not set.
+* *CSF_ShadersDirectory* is not required any more, though it still can be used to load custom shaders.
+  Mandatory GLSL resources are now embedded into source code.
+* *CSF_PluginDefaults* and other variables pointing to OCAF plugin resources (*CSF_StandardDefaults*, *CSF_XCAFDefaults*, *CSF_StandardLiteDefaults* and *CSF_XmlOcafResource*) are not necessary if method *TDocStd_Application::DefineFormat()* is used to enable persistence of OCAF documents.
+
+Other environment variables still can be used to customize behavior of relevant algorithms but are not necessary any more (all required resources are embedded).
+
+@subsection upgrade_710_removed Removed features
+
+The following obsolete features have been removed:
+* Anti-aliasing API *V3d_View::SetAntialiasingOn()*. This method was intended to activate deprecated OpenGL functionality *GL_POLYGON_SMOOTH, GL_LINE_SMOOTH* and *GL_POINT_SMOOTH*.
+  Instead of the old API, the application should request MSAA buffers for anti-aliasing by assigning *Graphic3d_RenderingParams::NbMsaaSamples* property of the structure returned by *V3d_View::ChangeRenderingParams()*.
+* *Prs3d_Drawer::ShadingAspectGlobal()* flag has been removed as not used. The corresponding calls can be removed safely from the application code.
+* The methods managing ZClipping planes and ZCueing: *V3d_View::SetZClippingType()*, *V3d_View::SetZCueingOn()*, etc. have been removed.  ZClipping planes can be replaced by general-purpose clipping planes (the application should update plane definition manually).
+* The 3D viewer printing API *V3d_View::Print()* has been removed. This functionality was available on Windows platforms only. The applications should use the general image dump API *V3d_View::ToPixMap()* and manage printing using a platform-specific API at the application level.
+  Text resolution can be managed by rendering parameter *Graphic3d_RenderingParams::Resolution*, returned by *V3d_View::ChangeRenderingParams()*.
+* Methods *PrsMgr_PresentationManager::BoundBox*, *PrsMgr_PresentationManager::Hilight* and *SelectMgr_EntityOwner::Hilight* have been removed as not used. The corresponding method in custom implementations of *SelectMgr_EntityOwner* can be removed safely. *PrsMgr_PresentationManager::Color* with the corresponding style must be used instead.
+* Class *NCollection_QuickSort* has been removed. The code that used the tools provided by that class should be corrected manually. The recommended approach is to use sorting algorithms provided by STL (std::sort). See also @ref upgrade_occt700_sorttools above.
+
+* Package *Dico*. The code that used the tools provided by that package should be corrected manually.  The recommended approach is to use *NCollection_DataMap* and *NCollection_IndexedDataMap* classes.
+
+@subsection upgrade_710_changed_methods Other changes
+
+The following classes have been changed:
+
+* *BVH_Sorter* class has become abstract. The list of arguments of both  *Perform* methods has been changed and the methods became pure virtual.
+* *Extrema_FuncExtPS* has been renamed to *Extrema_FuncPSNorm*.
+* The default constructor and the constructor taking a point and a surface have been removed from class *Extrema_GenLocateExtPS*. Now the only constructor takes the surface and optional tolerances in U and V directions. The new method *Perform* takes the point with the start solution and processes it. The class has become not assignable and not copy-constructable.
+* Constructors with arguments *(const gp_Ax22d& D, const gp_Pnt2d& F)* have been removed from *GCE2d_MakeParabola*, *gce_MakeParab2d* and *gp_Parab2d*.  The objects created with some constructors of class *gp_Parab2d*  may differ from the previous version (see the comments in *gp_Parab2d.hxx*). The result returned by *gp_Parab2d::Directrix()* method has an opposite direction in comparison with the previous OCCT versions.
+* *BRepTools_Modifier* class now has two modes of work. They are defined by the boolean parameter *MutableInput*, which is turned off by default. This means that the algorithm always makes a copy of a sub-shape (e.g. vertex) if its tolerance is to be increased in the output shape. The old mode corresponds to *MutableInput* turned on. This change may impact an application if it implements a class derived from *BRepTools_Modifier*.
+* The second parameter *theIsOuterWire* of method *ShapeAnalysis_Wire::CheckSmallArea* has been removed.
+* In class *GeomPlate_CurveConstraint*, two constructors taking boundary curves of different types have been replaced with one constructor taking the curve of an abstract type.
+*  The last optional argument *RemoveInvalidFaces* has been removed from the constructor of class  *BRepOffset_MakeOffset* and method *Initialize*.
+* The public method *BOPDS_DS::VerticesOnIn* has been renamed into *SubShapesOnIn* and the new output parameter *theCommonPB* has been added.
+
+@section upgrade_occt720 Upgrade to OCCT 7.2.0
+
+@subsection upgrade_720_removed Removed features
+
+The following obsolete features have been removed:
+* *AIS_InteractiveContext::PreSelectionColor()*, *::DefaultColor()*, *::WasCurrentTouched()*, *::ZDetection()*.
+  These properties were unused, and therefore application should remove occurrences of these methods.
+* *AIS_InteractiveObject::SelectionPriority()*.
+  These property was not implemented.
+
+@subsection upgrade_occt720_correction_of_Offset_API Corrections in BRepOffset API
+
+Class *BRepOffsetAPI_MakeOffsetShape*:
+* *BRepOffsetAPI_MakeOffsetShape::BRepOffsetAPI_MakeOffsetShape()* - constructor with parameters has been deleted.
+* *BRepOffsetAPI_MakeOffsetShape::PerformByJoin()* - method has been added. This method is old algorithm behaviour. 
+
+The code below shows new calling procedure:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
+    BRepOffsetAPI_MakeOffsetShape OffsetMaker;
+    OffsetMaker.PerformByJoin(Shape, OffsetValue, Tolerance);
+    NewShape = OffsetMaker.Shape();
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Class *BRepOffsetAPI_MakeThickSolid*:
+* *BRepOffsetAPI_MakeThickSolid::BRepOffsetAPI_MakeThickSolid()* - constructor with parameters has been deleted.
+* *BRepOffsetAPI_MakeThickSolid::MakeThickSolidByJoin()* - method has been added. This method is old algorithm behaviour. 
+
+The code below shows new calling procedure:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
+    BRepOffsetAPI_MakeThickSolid BodyMaker;
+    BodyMaker.MakeThickSolidByJoin(myBody, facesToRemove, -myThickness / 50, 1.e-3);
+    myBody = BodyMaker.Shape();
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+@subsection upgrade_720_highlight Highlight style
+
+Management of highlight attributes has been revised and might require modifications from application side:
+* New class *Graphic3d_PresentationAttributes* defining basic presentation attributes has been introduced.
+  It's definition includes properties previously defined by class Graphic3d_HighlightStyle (*Color*, *Transparency*),
+  and new properties (*Display mode*, *ZLayer*, optional *FillArea aspect*).
+* Class *Prs3d_Drawer* now inherits class *Graphic3d_PresentationAttributes*.
+  So that overall presentation attributes are now split into two parts - Basic attributes and Detailed attributes.
+* Class *Graphic3d_HighlightStyle* has been dropped.
+  It is now defined as a typedef to *Prs3d_Drawer*.
+  Therefore, highlight style now also includes not only Basic presentation attributes, but also Detailed attributes
+  which can be used by custom presentation builders.
+* Highlighting style defined by class *Graphic3d_PresentationAttributes* now provides more options:
+  - *Graphic3d_PresentationAttributes::BasicFillAreaAspect()* property providing complete Material definition.
+    This option, when defined, can be used instead of the pair Object Material + Highlight Color.
+  - *Graphic3d_PresentationAttributes::ZLayer()* property specifying the Layer where highlighted presentation should be shown.
+    This property can be set to Graphic3d_ZLayerId_UNKNOWN, which means that ZLayer of main presentation should be used instead.
+  - *Graphic3d_PresentationAttributes::DisplayMode()* property specifying Display Mode for highlight presentation.
+* Since Highlight and Selection styles within *AIS_InteractiveContext* are now defined by *Prs3d_Drawer* inheriting from *Graphic3d_PresentationAttributes*,
+  it is now possible to customize default highlight attributes like *Display Mode* and *ZLayer*, which previously could be defined only on Object level.
+* Properties *Prs3d_Drawer::HighlightStyle()* and *Prs3d_Drawer::SelectionStyle()* have been removed.
+  Instead, *AIS_InteractiveObject* now defines *::DynamicHilightAttributes()* for dynamic highlighting in addition to *::HilightAttributes()* used for highlighting in selected state.
+* The following protected fields have been removed from class *AIS_InteractiveObject*:
+  - *myOwnColor*, replaced by *myDrawer->Color()*
+  - *myTransparency*, replaced by *myDrawer->Transparency()*
+  - *myZLayer*, replaced by *myDrawer->ZLayer()*
+* The method *PrsMgr_PresentationManager::Unhighlight()* taking Display Mode as an argument has been marked deprecated.
+  Implementation now performs unhighlighting of all highlighted presentation mode.
+
+@subsection upgrade_720_Result_Of_BOP_On_Containers Result of Boolean operations on containers
+
+* The result of Boolean operations on arguments of collection types (WIRE/SHELL/COMPSOLID) is now filtered from duplicating containers.
\ No newline at end of file