"endl" manipulator for Message_Messenger is renamed to "Message_EndLine".
The following entities from std namespace are now used
with std:: explicitly specified (from Standard_Stream.hxx):
std::istream,std::ostream,std::ofstream,std::ifstream,std::fstream,
std::filebuf,std::streambuf,std::streampos,std::ios,std::cout,std::cerr,
std::cin,std::endl,std::ends,std::flush,std::setw,std::setprecision,
std::hex,std::dec.
1. The condition of WLine breaking (in IntWalk_IWalking algorithm) has become more independent of the input tolerance.
2. Currently the algorithm of IntPatch_Points of WLine processing depends on the algorithm of obtaining the WLine.
3. The methods IntSurf_LineOn2S::Add(...) and IntSurf_LineOn2S::SetUV(...) have become not inline (see the message ~0077431 in the issue #29866).
Since now a new WLine is not created if its start point lies in another earlier computed WLine. It allows avoiding creation of duplicate WLines in the intersection result.
<!break>
1. Methods IsOutSurf1Box(...), IsOutSurf2Box(...), IsOutBox(...) for classes IntSurf_LineOn2S and IntPatch_RLine have been created.
The algorithm has been improved for the cases when the intersection line goes through the cone apex.
<!break>
1. All special points are put to the ALine forcefully (if they are true intersection point). Currently this step has not been implemented yet.
2. Now the tolerance of IntPatch_Point (put into ALine) is computed in order to cover the distance between it and the correspond ALine.
3. Test cases have been created.
4. Procedure of trimming IntAna_Curve has been improved.
5. Criterion when the discriminant of IntAna_Curve can be considered to be equal to 0 has been improved.
6. Methods IntAna_Curve::FindParameter(...) (and IntPatch_ALine::FindParameter(...)) currently returns list of all parameters corresponding the given point (IntAna_Curve can be self-interfered curve). Before the fix, this method always returned only one (randomly chosen) parameter.
7. Interfaces of the following methods have been changed: IntAna_Curve::FindParameter(...), IntPatch_ALine::FindParameter(...), IntPatch_ALine::ChangeVertex(...), IntPatch_SpecialPoints::AddPointOnUorVIso(...), IntPatch_SpecialPoints::AddSingularPole(...), IntPatch_WLineTool::ExtendTwoWLines().
8. Following methods have been added: IntAna_Quadric::SpecialPoints(...), IntPatch_ALineToWLine::GetSectionRadius(...), IntPatch_SpecialPoints::ProcessSphere(...), IntPatch_SpecialPoints::ProcessCone(...), IntPatch_SpecialPoints::GetTangentToIntLineForCone(...).
------------------
1) tests/boolean/volumemaker/C5
tests/boolean/volumemaker/C6
tests/boolean/volumemaker/E7
They are real IMPROVEMENTS. In the FIX (in compare with MASTER), section result between pairs of faces f2&f6 (C5), f3&f7 (C6) and f1&f5 (E7) is closed. Separated test cases have been created in order to focus on the problem with section. Bug #28503 has been fixed.
Correction in test cases.
All occurrences of Standard_EXPORT attached to inline methods in OCCT code are eliminated.
Some unused classes and C++ files producing no code are deleted.
Cosmetics - removed redundant semicolons.
Method ::GetMAX() has been renamed to ::GetMax().
Added method ::Add() taking another Bnd_Range as argument.
Added methods ::IsOut() mimicing a Bnd_Box interface.
Methods ::Shift() and ::Shifted() no more modify Void range.
Now, bounded IntPatch_Points are found in case when starting points are used in intersection algorithm. Before the fix, these points were not looked for (even).
Algorithm of processing cases when point of splitting Walking-line is near to the boundary of the intersection domain but does not match this boundary has been improved.
Sometimes the algorithm of purging of extra points in the walking line makes enormous difference in distance between two neighbor segments of the line. This badly impacts the quality of approximation result. This patch balances the difference in distances by forbidding deletion of some points.
1. tests/bugs/modalg_6/bug27615
The reason of the correction is explained in the message ~0072580 (see issue #28557).
2. tests/bugs/modalg_7/bug28892*
tests/bugs/modalg_7/bug28984
The reason of the correction is explained in the message ~0072583 (see issue #28984).
New macro Standard_FALLTHROUGH is defined for use in a switch statement immediately before a case label, if code associated with the previous case label may fall through to that
next label (i.e. does not end with "break" or "return" etc.).
This macro indicates that the fall through is intentional and should not be diagnosed by a compiler that warns on fallthrough.
The macro is inserted in places that currently generate such warning message and where fallthrough is intentional.
Doxygen comments are provided for this and other macros in Standard_Macro.hxx.
1. The reason of exception has been eliminated.
2. Algorithm in IntPatch_WLineTool::JoinWLines(...) method has been modified in order to forbid join curves in the point where more than two intersection lines meet. More over, joining is forbidden if local curvature in the connection point is too big (see function CheckArgumentsToJoin(...) in the file IntPatch_WLineTool.cxx).
3. Interface of IntPatch_WLineTool::JoinWLines(...) method has been modified in order to reduce number of arguments.
4. Small corrections in IsSeamOrBound(...) static function has been made. Namely, check has been added if two boundaries are in the same period region but are too far each to other (see IntPatch_WLineTool.cxx, IsSeamOrBound(...) function, line # 532).
5. "Reversed" flag has been made local. Now, it is pure local characteristic: the algorithm decides itself, shall we reverse the argument order. This correction makes the algorithm more commutative (see issue #25404). However, IntPatch_WLineTool::JoinWLines(...) method can return non-commutative result.
6. Algorithm of searching small intersection curves has been improved.
7. New methods have been added in Bnd_Range class.
Some test cases have been adjusted according to their new behavior.
1. tests\bugs\modalg_6\bug26310_3
tests\bugs\modalg_6\bug26310_4
tests\bugs\moddata_2\bug235
tests\perf\modalg\bug26310_1
tests\bugs\modalg_5\bug24915
Logic of these cases has been changed. Mover over, additional check has been added in "bug26310_1" test case. Therefore, its performance will be slower than on the current MASTER.
2. tests\bugs\modalg_5\bug25292*
Scripts have been rewritten in order to make it more readable. Logic of these cases has not been changed.
1. Modification in static function IntersectionWithAnArc of IntPatch_ImpImpIntersection :
small offset <du> was hardcoded as 1.e-9, now it is adapted to parametric step.
2. Removal of duplicated points of IntPatch_WLine is corrected.
1. Exception in intersection of two analytical faces has been fixed by adding a simple check on number of vertices
in the resulting analytical curve;
2. Projection of the Circle on the Cone now checks if the Circle's normal direction is parallel to the Cone direction.
If it is not, the different, more advanced, algorithm will be used for projection - ProjLib_ComputeApprox;
3. Intersection of the Edge with the Face (IntTools_EdgeFace algorithm) in QuickCoincidenceCheck mode has been fixed to
avoid the checking of the type of the intersection result if the coincidence check gives the positive result;
4. All common IN edges of the intersecting faces has been added for intersection with section edges to avoid self-intersection in the result;
5. Post treatment of the section edges in Boolean operations has been improved with the new stage which treats the possible
common zones, not detected by the intersection algorithm, between faces by intersecting each section edge with all faces,
not participated in its creation, and in case of coincidence putting it as IN edge into FaceInfo structure of the face.
The new function has been implemented for that - BOPAlgo_PaveFiller::PutSEInOtherFaces().
6. Checking for the SameDomain splits of faces in Boolean Operations has been modified to process the pairs of faces in
which both the section curves and common zones are present.
7. Adjustment of the test case boolean gdml_private ZH3 as improvement.
8. Test cases for the issue.
9. Test cases for the parent issue - 0026789.
New method CheckFaceSelfIntersection has been added to BOPAlgo_CheckerSI: now self-intersection of each face is found as well as pairs of intersecting faces;
-method IntPatch_Intersection::Perform(S1,D1,TolArc,TolTang) is modified for more effective search of self-interasections in case of Surface Of Extrusion;
-method IntCurve_IntPolyPolyGen::Perform(C1,D1,TolConf,Tol,NbIter) is modified to detect segments of intersections.
Small correction.
Test cases are corrected.
Correction of compiler error
Fix of regressions
Names of shapes correction
Macro NO_CXX_EXCEPTION was removed from code.
Method Raise() was replaced by explicit throw statement.
Method Standard_Failure::Caught() was replaced by normal C++mechanism of exception transfer.
Method Standard_Failure::Caught() is deprecated now.
Eliminated empty constructors.
Updated samples.
Eliminate empty method ChangeValue from NCollection_Map class.
Removed not operable methods from NCollection classes.
1. Earlier we could not put any IntPatch_Point to the intersection curve. The fix makes the algorithm of IntPatch_Points searching more precise. It is achieved by redetermination of earlier found vertices with help of minimization the distance between boundary of one intersection argument and another intersection argument (surface).
2. Additional check has been added, if IntPatch_Point adjusted to the domain boundary is true intersection point.
3. Method Contap_ArcFunction::Surface() has been added.
4. Method LastComputedPoint() has been added for IntPatch_ArcFunction and Contap_ArcFunction classes.
5. Correction in FindMaxDistance() method (see IntTools_FaceFace.cxx file) according to pure Golden-ratio minimization algorithm. Earlier this function worked wrong with small searching intervals.
6. Insignificant correction in math_BrentMinimum.cxx file (elimination of "defines").
Creation of test case for issues #27221 an #27252.
Adjusting some test cases according to their new behavior.
Correction according to the last remarks.
Small correction of shape names for issue CR27252
Test case for issue 28210
Small correction of test case for issue 28210
1. Algorithm of orthogonalize of the transformation matrix (in gp_Trsf(2d) classes) has been documented.
2. Algorithm of computation of intersection line in case of two intersected cylinders (implemented in the fix for issue #24915) has been documented. Additionally, I would like to tell about some advantages of new algorithm in compare with old one.
2.1. Both algorithm generates intersection points for Walking-line (WL), which will be approximated to B-spline curve(s) in the future. At that, new algo (in compare with old one) uses another method for step computation. It based on attempts to provide equal steps (if it is possible) along V-direction (instead of U-direction used in old algorithm). It allows obtaining set of points, which are more uniform distributed in compare with old algo (this problem is the main reason why case #24915 was failed). Of course, we will get non-uniform distribution along U-direction. However, it can be compensated by small range (its length is less or equal 2*PI) of U-parameter change, whereas range of V-parameter can be very big.
2.2. More simple estimation of curvature "jump". New algo aims at provide equidistant distribution of points along V-direction. If it requires "jump" of U-parameter then we have "jump" of curvature in this point. This check is implemented in function AddPointIntoWL(...) (see place where SeekAdditionalPoints(...) is called).
However, in OCCT 7.1.0, curvature jumping is analyzed (it was not earlier, when the bug #24915 was fixed) - see fix for issue #27431.
2.3. New algorithm allows obtaining 7D-intersection point immediately. At that, old algorithm computed only 2D-intersection point (on some one surface). After that, it computed 3D-intersection point and, finally, projected(!) 3D-point to the second surface in order to obtain second 2D-intersection point. This second projection results in some problems. One problem is described in the issue #27968 (see message ~0058807). Second problem is the process of cases with singularity (significant improvement in this direction has been made in the fix#27431). Third problem is difficulties in projection itself (e.g. if we project point to a sphere when V-coordinate of the projection is near to PI/2 - projection point is found but not precise; the reason is not singularity but small radius of V-isoline).
Method used in new algorithm allows avoiding these problems. However, at present, it is implemented for case of two cylinders intersection (where most of these problems are not actual).
2.4. Algorithm of search of intersection point on surface boundary(ies) has been changed, too. Old algorithm sought point on boundary irrespective of intersection line. It resulted in problems described in the issue #27252 and related. New algorithm looks for intersection point of intersection line with surface boundary. It requires rectangular domain. However, it is not problem for current OCCT-version.
Purger has been disabled (in IntPatch_PrmPrmIntersection algorithm) if some points have been added in the Walking line (it is stupidly, first, to insert some points in the line and, after that, to delete points from this line).
Some improvements in IntWalk_PWalking::SeekPointOnBoundary(...) method have been made (see comments in the code for detail information).
Some test cases have been adjusted according to their new behavior.
The algorithm in WorkWithBoundaries::BoundaryEstimation(...) did not take into account opposite directions of cylindrical axes (when the angle between them is obtuse). After the fix it does it.
Small correction of test cases for issue CR28009
The root of the problem is incorrect processing of cases when intersection line goes through the apex(es) of sphere. The fix improves this situation. The algorithm is taken from DecomposeResult(...) function (see IntPatch_ImpPrmIntersection.cxx file). Before the fix, faltering steps were done to solve this problem. As result, it worked in some particular cases. Now, its possibilities have been extended significantly.
Following changes have been made in the fix:
1. Class IntPatch_ALineToWLine has been rewritten cardinally. It touches as interfaces of existing methods as adding/removing some methods/fields. Correction touches both cases: going through seam of Cone/Sphere and through pole(s) of sphere. Old interface did not allow making some actions with analytical line (ALine), e.g. splitting it on several Walking-lines (WLine).
2. Restriction-line support has been removed from Implicit-Implicit intersection result (see IntPatch_Intersection::GeomGeomPerfom(...) method). It connects with the fact that the intersection algorithm itself returns precise intersection line in analytical cases (in compare with parametric intersector). Therefore, we do not need in additional (restriction) line.
3. New class IntPatch_SpecialPoints has been added. This class contains methods to add some special points (such as apex of cone, pole of sphere, point on surface boundary etc.) in intersection line (IntPatch_PointLine). It is based on the static functions, which already exist in IntPatch_ImpPrmIntersection.cxx file (these functions have been moved to the new class).
4. Method IntPatch_WLineTool::ExtendTwoWlinesToEachOther(...) has been renamed to IntPatch_WLineTool::ExtendTwoWLines(...). It is connected with changing main idea of the method. Now it allows extending WLine to the surface boundary or to the singular point (if it is possible): cone apex, sphere pole etc. Interface of this method has been corrected, too. At that, old functionality (extending to each other) has been kept. For implementation of this algorithm, new enumeration "IntPatchWT_WLsConnectionType" has been created.
5. Method IntPatch_PointLine::CurvatureRadiusOfIntersLine(...) has been added. See IntPatch_PointLine.hxx for detail information. It allows correct step computing depended on the local curvature of the intersection line. This method uses geometrical properties of intersected surfaces to compute local curvature. Therefore, it can be applied in wide range of cases even if the intersection curve is not represented in explicit form (e.g. in case of param-param-intersection).
6. Method IntSurf::SetPeriod(...) has been created.
7. Additional check has been added in Draft_Modification::Perform() method for better choice of correct fragment of intersection line for processing DRAFT operation.
8. New overload method IntPatch_Point::SetValue() has been added.
9. Some refactoring of the code has been made.
Creation of test case for issue #27431.
---------------------------------------------------------------------------------------------
Some test cases have been adjusted according to their new behavior.
tests\bugs\modalg_4\bug62
It is really IMPROVEMENT (but fortuitous).
tests\bugs\modalg_5\bug25838
The behavior of this test has been reverted to the state before fixing the issue #27341. Main problem has not been fixed in #27341. It was fortuitous improvement.
tests\bugs\moddata_2\bug565
Quality of intersection curve was not checked. And the curve is bad on both MASTER and FIX. Input data are really wrong: plane-like-cone. However, on the MASTER, four intersection curves (the quality is insignificant) are expected. On the fix, not empty intersection result is expected simply.
tests\boolean\volumemaker\A8
Differences in images and CPU is expected. Difference in images is expected to be fixed in the issue #26020. Now, we should apply this behavior.
Much CPU time is spent by IntTools_FaceFace::ComputeTolReached3d(...) and GeomInt_IntSS::BuildPCurves(...) methods calling. These methods are not touched by the algorithm. It is the result of change of intersection curve(s) form. However, the new Curve(s) seems to be valid and can be applied. As result, new behavior can be applied, too.
tests\boolean\volumemaker\F8
tests\boolean\volumemaker\F9
tests\boolean\volumemaker\G5
tests\boolean\volumemaker\G6
CPU difference is expected. Much CPU time is spent by IntPatch_PointLine::CurvatureRadiusOfIntersLine(...) method calling. This method is really new (it does not exist on the MASTER) and is really useful. Therefore, we should apply new behavior.
tests\boolean\volumemaker\G1
CPU difference is expected. Much CPU time is spent by IntTools_WLineTool::DecompositionOfWLine(...) and IntTools_FaceFace::ComputeTolReached3d(...) methods calling. These methods are not touched by the algorithm. It is the result of change of intersection curve(s) form. However, the new Curve(s) seems to be valid and can be applied. As result, new behavior can be applied, too.
tests\bugs\modalg_6\bug26619
Differences in images is expected. The test keeps its BAD status on the FIX. But the result on the fix is nearer to expected than on the MASTER. Issue #27014 is still actual. As before, it is not clear, why the number of entities is different. The number of section curves has not been changed. Interfered entities are the same as on the MASTER.
tests\bugs\modalg_5\bug25319_1(2)
The reason is described in the issue #27896.
Small correction in the test case
Method WorkWithBoundaries::BoundaryEstimation(...) has been brought in balance with IsParallel(...) method, which checks if cylinder axes are parallel.
Now, the algorithm tries to estimate U- and V-ranges of future intersection curve(s) on the surface. This information is used in stop-criterium of the algorithm instead of full surface range used earlier. It allows reducing dependencies of intersection result on the surface ranges.
Tuning of test case bugs/modalg_6/bug27937_1
1. VRange of intersection curve has been limited. As result, too oblong intersection curve(s) will be never returned.
2. Now, purger algorithm is not called for lines obtained by Geom-Geom intersection method.
3. New statuses are entered in IntPatch_ImpImpIntersection class. It makes intersection algorithm more informative and flexible for using.
4. Method IntPatch_ImpImpIntersection::GetStatus() has been created.
Tuning of test case bugs modalg_6/bug26894
1. Unification of trimmed and not-trimmed cylinders processing (IntPatch_Intersection::GeomGeomPerfomTrimSurf() method has been removed).
2. Interface of IntPatch_ImpImpIntersection::Perform(...) method has been changed.
3. Now, WLine purging is forbidden for Geom-Geom-Intersection.
4. Bnd_Range class has been created. See Bnd_Range.hxx for detail information.
5. Algorithm of AddBoundaryPoint function has been improved in order to obtain intersection points in both boundaries (VFirst and VLast of every surface).
6. Earlier, method Geom2dConvert::ConcatG1(...) increased resulted B-spline degree (in case of not succession of previous iteration). Now increased value has been limited by Geom2d_BSplineCurve::MaxDegree() value (max degree = 25).
7. Algorithm of B-spline closure definition has been changed in the methods Geom2dConvert::C0BSplineToC1BSplineCurve(...) and Geom2dConvert::C0BSplineToArrayOfC1BSplineCurve(...).
Creation of test case for this issue.
Adjusting test cases according to their new behavior.
Small correction in the code according to KGV's remark.
The algorithm that builds outlines ("silhouettes") makes an outline in 2d parametric space of the surface starting from some previously detected point where normal is orthogonal to direction of view. So, the surface is previously discretized into (m*n) sample points and some of them become starting points for future outlines.
If the surface has non-uniform parametrization and/or some local extremums of curvature, the outlines can not be built without breaks, so there are several groups of consequent outlines in this case. Unfortunately, it leads to the situation when current number of sample points becomes insufficient to build all the parts of outlines.
The idea is to detect the "holes" between already constructed parts of outlines and then complete the construction.
New auxiliary draw command for testing of HLR.
Correction according to the remarks.
Update of test case according to the developer's directive
Code has been updated to remove no-op casts and implicit casts to Standard_Boolean.
Places of inproper use of Standard_Boolean instead of Standard_Integer
have been corrected:
- Bnd_Box, Bnd_Box2d
Bit flags are now defined as private enum
- HLRAlgo_BiPoint, HLRAlgo_EdgesBlock, HLRBRep_EdgeData, HLRBRep_FaceData
Bit flags are now defined as enum
- HLRAlgo_EdgeStatus, HLRBRep_BiPnt2D, HLRBRep_BiPoint
Bit flags are now defined as bool fields
- HLRAlgo_PolyData
Bit flags are now defined as Standard_Integer
- OSD_DirectoryIterator, OSD_FileIterator
Boolean flag is now defined as Standard_Boolean
- ShapeAnalysis_Surface::SurfaceNewton()
now returns Standard_Integer (values 0, 1 or 3)
- ChFi2d_FilletAlgo
now uses TColStd_SequenceOfBoolean instead of TColStd_SequenceOfInteger
for storing boolean flags
Method IFSelect_Dispatch::PacketsCount() has been dropped from interface.
ShapeFix_Solid::Status() has been fixed to decode requested status
instead of returning integer value.
TopOpeBRepBuild_Builder1 now defines map storing Standard_Boolean values
instead of Standard_Integer.
Persistence for Standard_Boolean type has been corrected
to keep backward compatibility:
- BinMDataStd, BinTools, FSD_BinaryFile
Broken Draw Harness commands vdisplaymode and verasemode have been removed.
BRepMesh_FastDiscretFace::initDataStructure() - workaround old gcc limitations
BRepMesh_IncrementalMesh::clear() - avoid ambiguity
The matter was that with starting point paased into intersector the walking line goes one point outside of the surface domain. Then during purging this extra point is removed from the line but its geometry is used for the last vertex. This makes a set of points invalid for approximation, and as a result we obtain the curve with reversed tangent direction at the end.
The API of the method IntPatch_WLineTool::ComputePurgedWLine has been changed to insert a new Boolean parameter RestrictLine. If this parameter is false than the step of removing of outside points is skipped, and the result line is not distorted. This flag is determined inside IntTools_FaceFace to tell the intersector if it is needed to limit intersection line by surface domain.
Test case has been added.
2d-tolerance has been bounded above (earlier it was too big for precise computation).
Creation of the test case for this issue.
Adjusting some test cases according to their new behavior.
Adjusting test case according to its new behavior.
Useless *.cxx files were removed to eliminate linker warning LNK4221.
Package TopOpeBRepDS was cleaned up from old debugging routines.
Merged OSD_signal_WNT.cxx into OSD_signal.cxx
Class Standard_ErrorHandlerCallback was moved into the Standard_ErrorHandler class as nested class Callback
Eliminated warning about unused variable.
Computation of correct offset values in order to make correspondence (with adjusting to periods) between Domain of WLine and surface domain.
Creation of test cases for this issue.
Small correction in the test case.