0028599: Replacement of old Boolean operations with new ones in BRepProj_Projection...
[occt.git] / dox / dev_guides / upgrade / upgrade.md
index 35d1f6b..2029e70 100644 (file)
@@ -324,6 +324,15 @@ The methods *V3d_View::Convert* and *V3d_View::ConvertWithProj()* have ceased to
 
 Porting of user applications from an earlier OCCT version to version 7.0.0 requires taking into account the following major changes.
 
+Building OCCT now requires compiler supporting some C++11 features.
+The supported compilers are:
+- MSVC: version 10 (Visual Studio 2010) or later
+- GCC: version 4.3 or later
+- CLang: version 3.6 or later
+- ICC: version XE 2013 SP 1 or later
+
+When compiling code that uses OCCT with GCC and CLang compilers, it is necessary to use compiler option -std=c++0x (or its siblings) to enable C++11 features.
+
 @subsection upgrade_700_persist Removal of legacy persistence
 
 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.
@@ -1147,6 +1156,13 @@ The following obsolete features have been removed:
 * The method Perform of the *ShapeConstruct_ProjectCurveOnSurface* class is modified:
   - input arguments *continuity*, *maxdeg*, *nbinterval* have been removed as unused;
   - input arguments *TolFirst*, *TolLast* have been added at the end of arguments' list.
+* Typedefs Quantity_Factor, Quantity_Parameter, Quantity_Ratio, Quantity_Coefficient, Quantity_PlaneAngle, Quantity_Length, V3d_Parameter and V3d_Coordinate have been removed; Standard_Real should be used instead.
+
+@subsection upgrade_occt720_reshape_oriented_removed Corrections in BRepOffset API
+
+In classes *BRepTools_ReShape* and *ShapeBuild_ReShape*, the possibility to process shapes different only by orientation in different ways has been removed.
+Thus methods *Remove()* and *Replace()* do not have any more the last argument 'oriented'; they work always as if *Standard_False* was passed before (default behavior).
+Methods *ModeConsiderLo()* and *Apply()* with three arguments have been removed.
 
 @subsection upgrade_occt720_correction_of_Offset_API Corrections in BRepOffset API
 
@@ -1194,12 +1210,17 @@ Management of highlight attributes has been revised and might require modificati
   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.
+  Note that *AIS_InteractiveObject::HilightAttributes()* and *AIS_InteractiveObject::DynamicHilightAttributes()* override highlighting properties for both - entire object and for part coming from decomposition.
+  This includes Z-layer settings, which will be the same when overriding properties through AIS_InteractiveObject, while *AIS_InteractiveContext::HighlightStyle()* allows customizing properties for local and global selection independently
+  (with Graphic3d_ZLayerId_Top used for dynamic highlighting of entire object and Graphic3d_ZLayerId_Topmost for dynamic highlighting of object part by default).
 * 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.
+* The methods taking/returning *Quantity_NameOfColor* (predefined list of colors) and duplicating methods operating with *Quantity_Color* (definition of arbitrary RGB color) in AIS have been removed.
+  *Quantity_Color* should be now used instead.
 
 @subsection upgrade_720_implicit_viewer_update Elimination of implicit 3D Viewer updates
 
@@ -1213,7 +1234,7 @@ To avoid such issues, the interface has been modified and default value has been
 Therefore, old application code should be updated to set the flag theToUpdateViewer explicitly
 to desired value (TRUE to preserve old previous behavior), if it was not already set.
 
-The follow AIS_InteractiveContext methods have been changed:
+The following AIS_InteractiveContext methods have been changed:
   Display, Erase, EraseAll, DisplayAll, EraseSelected, DisplaySelected, ClearPrs, Remove, RemoveAll, Hilight,
   HilightWithColor, Unhilight, Redisplay, RecomputePrsOnly, Update, SetDisplayMode, UnsetDisplayMode, SetColor,
   UnsetColor, SetWidth, UnsetWidth, SetMaterial, UnsetMaterial, SetTransparency, UnsetTransparency,
@@ -1246,17 +1267,22 @@ In most cases this change should be transparent, however applications implementi
 
 @subsection upgrade_720_changes_methods Other changes
 
+* *MMgt_TShared* class definition has been removed - Standard_Transient should be used instead (MMgt_TShared is marked as deprecated typedef of Standard_Transient for smooth migration).
 * Class GeomPlate_BuildPlateSurface accepts base class Adaptor3d_HCurve (instead of inherited Adaptor3d_HCurveOnSurface accepted earlier).
 * Types GeomPlate_Array1OfHCurveOnSurface and GeomPlate_HArray1OfHCurveOnSurface have been replaced with GeomPlate_Array1OfHCurve and GeomPlate_HArray1OfHCurve correspondingly (accept base class Adaptor3d_HCurve instead of Adaptor3d_HCurveOnSurface).
 * Enumeration *Image_PixMap::ImgFormat*, previously declared as nested enumeration within class *Image_PixMap*, has been moved to global namespace as *Image_Format* following OCCT coding rules.
   The enumeration values have suffix Image_Format_ and preserve previous name scheme for easy renaming of old values - e.g. Image_PixMap::ImgGray become Image_Format_Gray.
   Old definitions are preserved as depreacated aliases to the new ones;
+* Methods *Image_PixMap::PixelColor()* and *Image_PixMap::SetPixelColor()* now take/return Quantity_ColorRGBA instead of Quantity_Color/NCollection_Vec4.
 * The method BOPAlgo_Builder::Origins() returns BOPCol_DataMapOfShapeListOfShape instead of BOPCol_DataMapOfShapeShape.
 * The methods BOPDS_DS::IsToSort(const Handle(BOPDS_CommonBlock)&, Standard_Integer&) and BOPDS_DS::SortPaveBlocks(const Handle(BOPDS_CommonBlock)&) have been removed. The sorting is now performed during the addition of the Pave Blocks into Common Block.
 * The methods BOPAlgo_Tools::MakeBlocks() and BOPAlgo_Tools::MakeBlocksCnx() have been replaced with the single template method BOPAlgo_Tools::MakeBlocks(). The chains of connected elements are now stored into the list of list instead of data map.
 * The methods BOPAlgo_Tools::FillMap() have been replaced with the single template method BOPAlgo_Tools::FillMap().
 * Package BVH now uses opencascade::handle instead of NCollection_Handle (for classes BVH_Properties, BVH_Builder, BVH_Tree, BVH_Object).
   Application code using BVH package directly should be updated accordingly.
+* AIS_Shape now computes UV texture coordinates for AIS_Shaded presentation in case if texture mapping is enabled within Shaded Attributes.
+  Therefore, redundant class *AIS_TexturedShape is now deprecated* - applications can use *AIS_Shape* directly (texture mapping should be defined through AIS_Shape::Attributes()).
+* Methods for managing active texture within OpenGl_Workspace class (ActiveTexture(), DisableTexture(), EnableTexture()) have been moved to *OpenGl_Context::BindTextures()*.
 
 @subsection upgrade_720_BOP_DataStructure BOP - Pairs of interfering indices
 
@@ -1281,14 +1307,14 @@ In most cases this change should be transparent, however applications implementi
 
 
 @subsection upgrade_720_persistence Restore OCCT 6.9.1 persistence
-  
-The capability of reading / writing files in old format using *Storage_ShapeSchema* functionality from OCCT 6.9.1 has been restored in OCCT 7.2.0. 
+
+The capability of reading / writing files in old format using *Storage_ShapeSchema* functionality from OCCT 6.9.1 has been restored in OCCT 7.2.0.
 
 One can use this functionality in two ways:
 - invoke DRAW Test Harness commands *fsdread / fsdwrite* for shapes;
 - call *StdStorage* class *Read / Write* functions in custom code.
 
-The code example below demonstrates how to read shapes from a storage driver using *StdStorage* class. 
+The code example below demonstrates how to read shapes from a storage driver using *StdStorage* class.
 
 ~~~~
 // aDriver should be created and opened for reading
@@ -1336,7 +1362,7 @@ NCollection_Handle<Storage_BaseDriver> aFileDriver(new FSD_File());
 try
 {
   OCC_CATCH_SIGNALS
-  PCDM_ReadWriter::Open(*aFileDriver, TCollection_ExtendedString(CStringA(filename).GetBuffer()), Storage_VSWrite);
+  PCDM_ReadWriter::Open (*aFileDriver, TCollection_ExtendedString(theFilename), Storage_VSWrite);
 }
 catch (Standard_Failure& e)
 {
@@ -1344,7 +1370,7 @@ catch (Standard_Failure& e)
 }
 
 // Create a storage data instance
-Handle(StdStorage_Data) aData = new StdStorage_Data;
+Handle(StdStorage_Data) aData = new StdStorage_Data();
 // Set an axiliary application name (optional)
 aData->HeaderData()->SetApplicationName(TCollection_ExtendedString("Application"));
 
@@ -1363,8 +1389,7 @@ for (Standard_Integer i = 1; i <= shapes.Length(); ++i)
   }
 
   // Construct a root name
-  TCollection_AsciiString aName = "Shape_";
-  aName += i;
+  TCollection_AsciiString aName = TCollection_AsciiString("Shape_") + i;
 
   // Add a root to storage data
   Handle(StdStorage_Root) aRoot = new StdStorage_Root(aName, aPShape);
@@ -1381,17 +1406,129 @@ if (anError != Storage_VSOk)
 
 @subsection upgrade_720_Change_In_BRepLib_MakeFace_Algo Change in BRepLib_MakeFace algorithm
 
-  Previously, *BRepLib_MakeFace* algorithm changed orientation of the source wire in order to avoid creation of face as a hole (i.e. it is impossible to create the entire face as a hole; the hole can be created in context of another face only). New algorithm does not reverse the wire if it is open. Material of the face for the open wire will be located on the left side from the source wire.
+Previously, *BRepLib_MakeFace* algorithm changed orientation of the source wire in order to avoid creation of face as a hole (i.e. it is impossible to create the entire face as a hole; the hole can be created in context of another face only). New algorithm does not reverse the wire if it is open. Material of the face for the open wire will be located on the left side from the source wire.
 
 @subsection upgrade_720_Change_In_BRepFill_OffsetWire Change in BRepFill_OffsetWire algorithm
 
-  From now on, the offset  will always be directed to the outer region in case of positive offset value and to the inner region in case of negative offset value.
-  Inner/Outer region for an open wire is defined by the following rule:
-    when we go along the wire (taking into account edges orientation) the outer region will be on the right side, the inner region will be on the left side.
-  In case of a closed wire, the inner region will always be inside the wire (at that, the edges orientation is not taken into account).
-  
+From now on, the offset  will always be directed to the outer region in case of positive offset value and to the inner region in case of negative offset value.
+Inner/Outer region for an open wire is defined by the following rule:
+when we go along the wire (taking into account edges orientation) the outer region will be on the right side, the inner region will be on the left side.
+In case of a closed wire, the inner region will always be inside the wire (at that, the edges orientation is not taken into account).
+
 @subsection upgrade_720_Change_In_GeomAdaptor_Curve Change in Geom(2d)Adaptor_Curve::IsPeriodic
-  
+
 Since 7.2.0 version, method *IsPeriodic()* returns the corresponding status of periodicity of the basis curve regardless of closure status of the adaptor curve (see method *IsClosed()*).
 Method *IsClosed()* for adaptor can return false even on periodic curve, in the case if its parametric range is not full period, e.g. for adaptor on circle in range [0, @f$ \pi @f$].
 In previous versions, *IsPeriodic()* always returned false if *IsClosed()* returned false.
+
+@subsection upgrade_720_UnifySameDomain Change in algorithm ShapeUpgrade_UnifySameDomain
+
+The history of the changing of the initial shape was corrected:
+* all shapes created by the algorithm are considered as modified shapes instead of generated ones;
+* method Generated was removed and its calls should be replaced by calls of method History()->Modified.
+
+@subsection upgrade_720_Change_In_RWStl Changes in STL Reader / Writer
+
+Class RWStl now uses class Poly_Triangulation for storing triangular mesh instead of StlMesh data classes; the latter have been removed.
+
+@subsection upgrade_720_New_Error_Warning_system_in_BOA Refactoring of the Error/Warning reporting system in Boolean Component
+
+The Error/Warning reporting system of the algorithms in Boolean Component (in all BOPAlgo_* and BRepAlgoAPI_* algorithms) has been refactored.
+The methods returning the status of errors and warnings of the algorithms (ErrorStatus() and WarningStatus()) have been removed.
+Instead use methods HasErrors() and HasWarnings() to check for presence of errors and warnings, respectively.
+The full list of errors and warnings, with associated data such as problematic sub-shapes, can be obtained by method GetReport().
+
+@section upgrade_occt721 Upgrade to OCCT 7.2.1
+
+@subsection upgrade_721_Changes_In_USD Changes in ShapeUpgrade_UnifySameDomain
+
+The following public methods in the class ShapeUpgrade_UnifySameDomain became protected:
+* *UnifyFaces*
+* *UnifyEdges*
+
+The following public method has been removed:
+* *UnifyFacesAndEdges*
+
+@subsection upgrade_721_Move_BuildPCurveForEdgeOnPlane Moving BuildPCurveForEdgeOnPlane from BOPTools_AlgoTools2D to BRepLib
+
+The methods BuildPCurveForEdgeOnPlane and BuildPCurveForEdgesOnPlane have been moved from the class BOPTools_AlgoTools2D
+to the more lower level class BRepLib.
+
+@subsection upgrade_721_removed Removed features
+
+The following obsolete features have been removed:
+* The package BOPCol has been fully removed:
+  - *BOPCol_BaseAllocator* is replaced with *Handle(NCollection_BaseAllocator)*;
+  - *BOPCol_BoxBndTree* is replaced with *BOPTools_BoxBndTree*;
+  - *BOPCol_Box2DBndTree* is removed as unused;
+  - *BOPCol_DataMapOfIntegerInteger* is replaced with *TColStd_DataMapOfIntegerInteger*;
+  - *BOPCol_DataMapOfIntegerListOfInteger* is replaced with *TColStd_DataMapOfIntegerListOfInteger*;
+  - *BOPCol_DataMapOfIntegerListOfShape* is replaced with *TopTools_DataMapOfIntegerListOfShape*;
+  - *BOPCol_DataMapOfIntegerMapOfInteger.hxx* is removed as unused;
+  - *BOPCol_DataMapOfIntegerReal* is replaced with *TColStd_DataMapOfIntegerReal*;
+  - *BOPCol_DataMapOfIntegerShape* is replaced with *TopTools_DataMapOfIntegerShape*;
+  - *BOPCol_DataMapOfShapeBox* is replaced with *TopTools_DataMapOfShapeBox*;
+  - *BOPCol_DataMapOfShapeInteger* is replaced with *TopTools_DataMapOfShapeInteger*;
+  - *BOPCol_DataMapOfShapeListOfShape* is replaced with *TopTools_DataMapOfShapeListOfShape*;
+  - *BOPCol_DataMapOfShapeReal* is replaced with *TopTools_DataMapOfShapeReal*;
+  - *BOPCol_DataMapOfShapeShape* is replaced with *TopTools_DataMapOfShapeShape*;
+  - *BOPCol_DataMapOfTransientAddress* is removed as unused;
+  - *BOPCol_IndexedDataMapOfIntegerListOfInteger* is removed as unused;
+  - *BOPCol_IndexedDataMapOfShapeBox* is removed as unused;
+  - *BOPCol_IndexedDataMapOfShapeInteger* is removed as unused;
+  - *BOPCol_IndexedDataMapOfShapeListOfShape* is replaced with *TopTools_IndexedDataMapOfShapeListOfShape*;
+  - *BOPCol_IndexedDataMapOfShapeReal* is removed as unused;
+  - *BOPCol_IndexedDataMapOfShapeShape* is replaced with *TopTools_IndexedDataMapOfShapeShape*;
+  - *BOPCol_IndexedMapOfInteger* is replaced with *TColStd_IndexedMapOfInteger*;
+  - *BOPCol_IndexedMapOfOrientedShape* is replaced with *TopTools_IndexedMapOfOrientedShape*;
+  - *BOPCol_IndexedMapOfShape* is replaced with *TopTools_IndexedMapOfShape*;
+  - *BOPCol_ListOfInteger* is replaced with *TColStd_ListOfInteger*;
+  - *BOPCol_ListOfListOfShape* is replaced with *TopTools_ListOfListOfShape*;
+  - *BOPCol_ListOfShape* is replaced with *TopTools_ListOfShape*;
+  - *BOPCol_MapOfInteger* is replaced with *TColStd_MapOfInteger*;
+  - *BOPCol_MapOfOrientedShape* is replaced with *TopTools_MapOfOrientedShape*;
+  - *BOPCol_MapOfShape* is replaced with *TopTools_MapOfShape*;
+  - *BOPCol_PListOfInteger* is removed as unused;
+  - *BOPCol_PInteger* is removed as unused
+  - *BOPCol_SequenceOfPnt2d* is replaced with *TColgp_SequenceOfPnt2d*;
+  - *BOPCol_SequenceOfReal* is replaced with *TColStd_SequenceOfReal*;
+  - *BOPCol_SequenceOfShape* is replaced with *TopTools_SequenceOfShape*;
+  - *BOPCol_Parallel* is replaced with *BOPTools_Parallel*;
+  - *BOPCol_NCVector* is replaced with *NCollection_Vector*;
+* The class *BOPDS_PassKey* and containers for it have been removed as unused.
+* The unused containers from *IntTools* package have been removed:
+  - *IntTools_DataMapOfShapeAddress* is removed as unused;
+  - *IntTools_IndexedDataMapOfTransientAddress* is removed as unused;
+* The container *BiTgte_DataMapOfShapeBox* is replaced with *TopTools_DataMapOfShapeBox*;
+* The class *BOPTools* has been removed as duplicate of the class *TopExp*;
+* The method *BOPAlgo_Builder::Splits()* has been removed as excessive. The method *BOPAlgo_Builder::Images()* can be used instead.
+
+@section upgrade_occt730 Upgrade to OCCT 7.3.0
+
+@subsection upgrade_730_lights Light sources
+
+Multiple changes have been applied to lights management within TKV3d and TKOpenGl:
+* V3d_Light class is now an alias to Graphic3d_CLight.
+  Graphic3d_CLight is now a Handle class with refactored methods for managing light source parameters
+  (preserving most methods of V3d_Light sub-classes to simplify porting).
+* Obsolete debugging functionality for drawing lights source has been removed from V3d_Light.
+  Methods and constructors taking parameters for this drawing and not affecting light definition itself has been also removed.
+* Light constructors taking V3d_Viewer has been marked deprecated.
+  Application may call V3d_Viewer::AddLight() explicitly to register new light sources created by new constructors within V3d_Viewer, but this step is now optional.
+* The upper limit of 8 light sources has been removed.
+* Dedicated classes per light source type V3d_AmbientLight, V3d_DirectionalLight, V3d_PositionalLight and V3d_SpotLight have been preserved,
+  but it is now possible defining light of any type by creating base class Graphic3d_CLight directly.
+  Dedicated classes only hides visibility of unrelated light properties depending on its type.
+* Calling V3d_Viewer::UpdateLights() is no more required after modifying light sources properties (color, position, etc.).
+
+@subsection upgrade_730_BOPAlgo_Section Changes in BOPAlgo_Section
+
+The public method *BuildSection()* in the class *BOPAlgo_Section* has became protected. The methods *Perform()* or *PerformWithFiller()* should be called for construction of the result of SECTION operation.
+
+@subsection upgrade_730_BRepAdaptor_CompCurve Changes in BRepAdaptor_CompCurve
+
+The method BRepAdaptor_CompCurve::SetPeriodic has been eliminated.
+Since new version, the method BRepAdaptor_CompCurve::IsPeriodic() will always return FALSE. Earlier, it could return TRUE in case if the wire contained only one edge based on periodic curve. 
+
+@subsection upgrade_730_removed Removed features
+* The methods *SetDeflection*, *SetEpsilonT*, *SetDiscretize* of the class *IntTools_EdgeFace* have been removed as excessive.