View Issue Details

IDProjectCategoryView StatusLast Update
0025124CommunityOCCT:Modeling Algorithmspublic2020-03-14 13:34
ReporterRoman Lygin Assigned Tobugmaster  
PrioritynormalSeverityfeature 
Status closedResolutionfixed 
Target Version6.9.0Fixed in Version6.9.0 
Summary0025124: [Feature request] Removal of continuity checks for offset geometries
DescriptionProblem statement:
Open CASCADE offset geometries (surfaces and 3D/2D curves) may only be constructed on C1 underlying geometries. This is enforced by the respective constructors (e.g. Geom_OffsetSurface) which throw an exception if the condition is not respected. Verification of C1 continuity is performed with the help of Geom_Surface::Continuity(). In the case of B-Spline surface, Geom_BSplineSurface::Continuity() simply uses multiplicity of the knots. If any knot has a multiplicity equal to degree then it returns C0. However even when multiplicity of the knot equals degree the surface can still be G1 (if the normal/tangent direction is continuous) or even C1 (if additionally the magnitude is continuous).

As an example, often offset surfaces coming from the Parasolid or ACIS-based CAD systems lie on the B-Spline surfaces which OCC considers to be C0 (see a couple of examples attached). Thus, although the definition of the offset surface is common in all systems, the underlying surfaces valid in one kernel may be considered invalid in OCC. This creates necessity to modify the underlying surface what changes the original design intent and may have adverse consequences downstream (e.g. the edge curve becomes located farther from the surface leading to edge tolerance increase what may lead to further loss of accuracy and so on).

The suggestion is to remove the enforced check for C1 continuity of the underlying surface. Of course, the requirement for sufficient smoothness is still to be documented and it must be a user responsibility to supply appropriate underlying geometries. This requirement will still be enforced in run-time during evaluation of the respective coordinates and derivatives. For instance, today to compute the first derivative the underlying surface must be C2-continuous however this is not enforced during construction.
Thus, no safety will be compromised - evaluation of the surface (D0, D1,...) may still throw an exception (Geom_UndefinedValue) if the respective value cannot be computed. However this will enable creation of topological faces which would lie within a fully defined and Cn-continuous domain of the underlying and offset surface.

This functionality may be relevant in OCC importers (IGES, STEP, etc) and in customer projects requiring this functionality.

Implementation will likely simply require a removal of the checks/exceptions in the constructor (and removed attempt to upgrade continuity made by Ms. ika in 0023683).
Steps To ReproduceOffset must be built and must be different from source shape.

  SCRIPT # 1
Draw[]> restore a_2999_draw a1
Draw[]> getsurfcontinuity a1
a1 has C0 continuity.

Draw[]> offset o1 a1 20
Draw[]> fit


  SCRIPT # 2
Draw[]> restore a_15592_draw a2
Draw[]> getsurfcontinuity a2
a2 has C0 continuity.

Draw[]> offset o2 a2 20



In additional, please use scripts from message http://tracker.dev.opencascade.org/view.php?id=25124#c32001 for new test creation.
TagsNo tags attached.
Test case numberbugs modalg_5(010) bug25124_1, bug25124_2, bug25124_3, bug25124_4, bug25124_5, bug25124_6, bug25124_7

Attached Files

  • underlying_surfaces_for_offset.zip (1,611 bytes)

Relationships

related to 0031430 closedbugmaster Modeling Data - Offset surfaces on C1 surfaces (with multiplicity equal to degree) may still throw exception 

Activities

Roman Lygin

2014-08-04 14:21

developer  

underlying_surfaces_for_offset.zip (1,611 bytes)

git

2014-08-19 12:44

administrator   ~0030875

Branch CR25124 has been created by nbv.

SHA-1: 29fa55f23d37f29eaddbb91350dbe0bad945e06b


This branch includes the following new commits:

       new 29fa55f 0025124: [Feature request] Removal of continuity checks for offset geometries


Detailed log of new commits:

commit 29fa55f23d37f29eaddbb91350dbe0bad945e06b
Author: nbv
Date: Tue Aug 19 12:23:41 2014 +0400

    0025124: [Feature request] Removal of continuity checks for offset geometries
    
    Sometimes curve or surface, which is defined as C0, has continuity G1 or above. Offset can be built from these shapes.
    Therefore, this extended checking was added into SetBasisCurve and SetBasisSurface methods.
    
    Test cases was changed according to their new behavior.

git

2014-08-19 16:05

administrator   ~0030890

Branch CR25124 has been updated forcibly by nbv.

SHA-1: 0be6fbcb9054776192efa8f1dea8bded538c9528

git

2014-08-19 18:21

administrator   ~0030902

Branch CR25124 has been updated forcibly by nbv.

SHA-1: 5dd00eae94c0b2cc7cbe6c4223c9880674ce639f

nbv

2014-08-20 09:12

developer   ~0030911

CR25124 is ready to review.

ifv

2014-08-20 11:02

developer   ~0030916

1. It is necessary to treat correctly trimmed curves and surfaces.
2. Checking G1 for surfaces does not seem to be optimal - it is not necessary to use nested loops.

git

2014-08-21 12:23

administrator   ~0030987

Branch CR25124_1 has been created by nbv.

SHA-1: 26d6619aa91dd96f8234c0852f2123a6a24eb8df


Detailed log of new commits:

Author: nbv
Date: Thu Aug 21 12:21:56 2014 +0400

    0025124: [Feature request] Removal of continuity checks for offset geometries
    
    Sometimes curve or surface, which is defined as C0, has continuity G1 or above. Offset can be built from these shapes.
    Therefore, this extended checking was added into SetBasisCurve and SetBasisSurface methods.
    
    Main changes in function BRepOffset_Tool::ExtentFace(...):
    * "return" is added if intersection (in 2D-space) between two edges in a face cannot be found.
    
    Test cases was changed according to their new behavior.

nbv

2014-08-21 12:29

developer   ~0030988

CR25124_1 is ready to review.

ifv

2014-08-21 13:30

developer   ~0030998

Basis curve of Ext and Rev surfaces can be trimmed curve, please take it in account.

git

2014-08-21 13:55

administrator   ~0031002

Branch CR25124_1 has been updated forcibly by nbv.

SHA-1: 59ed4fe7e712b9554d3d03a0ac4c492454c4d8b0

nbv

2014-08-21 13:57

developer   ~0031003

Done in branch CR25124_1.

ifv

2014-08-21 14:04

developer   ~0031005

Ok

nbv

2014-08-21 14:23

developer   ~0031006

Last edited: 2014-08-21 14:23

It is necessary to add this checking for Adaptor Curves (Geom2dAdaptor_Curve::Continuity() method for example).

git

2014-08-21 18:10

administrator   ~0031011

Branch CR25124_1 has been updated forcibly by nbv.

SHA-1: 4b27fc72d778841b7c46346ea8ad795565ec5927

git

2014-08-22 10:07

administrator   ~0031022

Branch CR25124_1 has been updated forcibly by nbv.

SHA-1: e6b187f994e2b5cd279cacb88168b9129e17ac7a

git

2014-08-22 16:10

administrator   ~0031038

Branch CR25124_1 has been updated forcibly by nbv.

SHA-1: 31a210c4fbc0db279db97dc4c3ecf4105cc8c3c3

git

2014-08-22 17:07

administrator   ~0031044

Branch CR25124_1 has been updated forcibly by nbv.

SHA-1: 4b38c62a51ab935f3aae7e6381a63a6388ec9ac9

nbv

2014-08-22 17:13

developer   ~0031045

CR25124_1 is ready to review.

Roman Lygin

2014-08-23 10:46

developer   ~0031056

Folks,

Thank you for your draft version. I had a look at the branch CR25124_1 in git.

1. First off, I believe there is no need for explicit check for G1 continuity in offsets. I referred to G1 in the description as an example of cases when offsets can still be allowed.
Adding this check into offset does not make significant good comparing to existing implementation. For instance, a topological face may be defined outside of the domain where the basis surface is still C0. The new check
will still deny this underlying surface.
Instead my idea was/is to allow creation on any geometry (even on pure C0) and defer the check to run-time (just like it is for D1() computation today).


2. Is support of G1 check can be put into B-Splines instead ?
In that case Geom_BSplineCurve::Continuity() could return G1 (not just C0 or C1 as today). This would eliminate the need to store explicit value in offsets. Perhaps, some algorithms may make implicit assumptions that Continuity() would only return Cn values (e.g. ShapeUpgrade). If so, they could be updated to use
IsCn() instead.


3. Check for point proximity in IsCurveG1() is redundant. The curve is always C0, so the check can be removed:
    if(aP1.SquareDistance(aP2) > Precision::Confusion()*Precision::Confusion())
+ {
+ return Standard_False;
+ }
+

4. Check for G1 continuity is done via hard-coded value (1-1e-15). This can be too rigid or too rough in different scenarios. Instead, for instance you might want to have a static variable that would default to the value of your choide and a possibility to set/get it. Also it would be good to have a static API method that would accept that value explicitly, e.g.
   static Standard_Boolean Geom_BSplineCurve::IsG1 (const Handle_Geom_BSplineCurve& theCurve,
       const double theAngularTolerance);
   (same for 2D curve and surface).
Implementations would just call those methods with static value of angular tolerance. The user would have a possibility to call those methods explicitly in a thread-safe manner.
   
5. Why did you favor the check using a dot product instead of using gp_Vec::IsParallel() ?
   The latter explicitly uses the angular tolerance and can be more streamlined. Performance gain of the former is hardly worth it given that this whole branch is on a cold path.

6. Not certain why other files beyond Geom* need to be updated, but this is up to you. Just in case, is the BRepOffsetAPI_MakeThickSolid affected too ?

Implementation notes:
7. There are 3 copies of IsCurveG1() - Geom_OffsetSurface, _OffsetCurve, Geom2d_OffsetCurve. This is obviously bad for maintenance (risk of discrepancy, size bloat, etc). Please consider creating a single template implementation that would be called.
 
8. A lot of if's in Geom_OffsetSurface (for revs, linear extrusion, trimmed surface/curvces,...).
   As reflected in one of the comments above, there can always be a risk of forgetting some particular cases (e.g. how about a trimmed surface on a surface of linear extrusion built on a trimmed curve on an offset curve on a trimmed curve on a bspline) ?
One efficient technique to deal with such arbitrary nesting is a visitor pattern. In this case you would only need to redefine a method Visit() accepting a bspline curve. The rest of visiting would be a job of either the classes themselves (if the Visit() method is put into the class itself or an external visitor applier). We can talk more face-to-face.

git

2014-08-25 17:02

administrator   ~0031065

Branch CR25124_1 has been updated forcibly by nbv.

SHA-1: 34947164a3b8b68f619a812de08467467d5fbafe

git

2014-08-26 16:46

administrator   ~0031102

Branch CR25124_1 has been updated forcibly by nbv.

SHA-1: 690e964629df291f0f2d7b37bda8fc8a73bda0d4

git

2014-08-27 10:39

administrator   ~0031117

Branch CR25124_1 has been updated forcibly by nbv.

SHA-1: 1ee3cfda2b949cc14a5def2ffe70abda4ce0c1d1

git

2014-08-28 17:23

administrator   ~0031165

Branch CR25124_1 has been updated forcibly by nbv.

SHA-1: f90fa2de324c0ee11ed8c66001d2b48826906e8c

git

2014-09-19 16:27

administrator   ~0031913

Branch CR25124_1 has been updated forcibly by nbv.

SHA-1: 17dbe3e4d3bd2b3b48f0f8b1294b28501934a4df

nbv

2014-09-19 17:53

developer   ~0031922

Branch CR25124_1 is ready to be reviewed.

ifv

2014-09-19 18:34

developer   ~0031923

There are some part of code to be corrected

git

2014-09-23 13:59

administrator   ~0031999

Branch CR25124_1 has been updated forcibly by nbv.

SHA-1: fb371da1f3e4f993b7905d439e7dce8d1ab573f2

nbv

2014-09-23 14:26

developer   ~0032001

Dear Igor!
Please review branch CR25124_1.

Dear Testers!
Ask to take into consideration following three scripts when you will create tests (ask to pay attention on the output of DUMP command).

--- SCRIPT 0000001
Draw[]> point pp 0 0 1
Draw[]> circle cc 20 40 30 20
Draw[]> trim cc cc 1 6
Draw[]> offsetcurve oc cc 10 pp
Draw[]> trim cc oc 2 5

Draw[]> dump cc


*********** Dump of cc *************
Trimmed curve
Parameters : 2 5
Basis curve :
OffsetCurveOffset : 10
Direction : 0, 0, 1
Basis curve :
Trimmed curve
Parameters : 1 6
Basis curve :
Circle...

Draw[]> offsetcurve oc cc 10 pp

Draw[]> dump oc


*********** Dump of oc *************
OffsetCurveOffset : 20
Direction : 0, 0, 1
Basis curve :
Trimmed curve
Parameters : 2 5
Basis curve :
Circle...


--- SCRIPT 0000002
Draw[]> circle cc 20 40 20
Draw[]> trim cc cc 1 6
Draw[]> offset2dcurve oc cc 10
Draw[]> trim cc oc 2 5

Draw[]> dump cc


*********** Dump of cc *************
Trimmed curve
Parameters : 2 5
Basis curve :
OffsetCurveOffset : 10
Basis curve :
Trimmed curve
Parameters : 1 6
Basis curve :
Circle...
  
Draw[]> offset2dcurve oc cc 10
Draw[]> dump oc


*********** Dump of oc *************
OffsetCurveOffset : 20
Basis curve :
Trimmed curve
Parameters : 2 5
Basis curve :
Circle...



--- SCRIPT #3
Draw[]> sphere ss 30
Draw[]> trim ss ss 0.5 6 -1 1
Draw[]> offset os ss 10
Draw[]> trim ss os 1 5.5 -0.8 0.5

Draw[]> dump ss


*********** Dump of ss *************
RectangularTrimmedSurface
Parameters : 1 5.5 -0.8 0.5
BasisSurface :
OffsetSurface
Offset : 10
BasisSurface :
RectangularTrimmedSurface
Parameters : 1 5.5 -0.8 0.5
BasisSurface :
SphericalSurface...

Draw[]> offset os ss 10
Draw[]> dump os


*********** Dump of os *************
OffsetSurface
Offset : 20
BasisSurface :
RectangularTrimmedSurface
Parameters : 1 5.5 -0.8 0.5
BasisSurface :
SphericalSurface...



CONCLUSION:
Basis curve/surface for offset curve/surface cannot have OFFSET-type or TRIMMED from OFFSET-type.



--- SCRIPT #4 (Only surface of linear extrusion participates into this script. But analogical script should be created for surface of revolution)
Draw[]> point pp 0 0 1
Draw[]> circle cc 20 40 30 20
Draw[]> convert bc cc
Draw[]> trim bc bc 1 6
Draw[]> offsetcurve oc bc 10 pp
Draw[]> trim bc oc 2 5
Draw[]> extsurf se bc 0 0 1
Draw[]> offset os se 15
Draw[]> dump os


*********** Dump of os *************
OffsetSurface
Offset : 15
BasisSurface :
SurfaceOfLinearExtrusion
  Direction :0, 0, 1
  Basis curve :
Trimmed curve
Parameters : 2 5
Basis curve :
OffsetCurveOffset : 10
Direction : 0, 0, 1
Basis curve :
Trimmed curve
Parameters : 1 6
Basis curve :
BSplineCurve rational periodic
  Degree 2, 6 Poles, 4 Knots
Poles : ...

Knots :

   1 : 0 2
   2 : 2.0943951023932 2
   3 : 4.18879020478639 2
   4 : 6.28318530717959 2



Into this script the offset from surface of linear extrusion was built. But basis curve for this surface has C0-continuity.

git

2014-11-18 11:50

administrator   ~0034469

Branch CR25124_2 has been created by ifv.

SHA-1: d2e1325cc8c2934fcfd4b7d897bce57cce7a0bcf


Detailed log of new commits:

Author: ifv
Date: Mon Nov 17 17:06:04 2014 +0300

    Fix for 0024621 added

Author: ifv
Date: Mon Nov 17 15:22:48 2014 +0300

    New implementation

Author: ifv
Date: Thu Nov 13 10:16:31 2014 +0300

    Merge branch 'master' of git.dev.opencascade.org:occt into CR25124_2

Author: ifv
Date: Thu Nov 6 11:47:50 2014 +0300

    Merge branch 'master' into CR25124_2
    
    Conflicts:
        src/IntPatch/IntPatch_ImpImpIntersection_4.gxx

git

2014-11-18 18:17

administrator   ~0034490

Branch CR25124_2 has been deleted by ifv.

SHA-1: d2e1325cc8c2934fcfd4b7d897bce57cce7a0bcf

git

2014-11-18 18:24

administrator   ~0034492

Branch CR25124_5 has been created by ifv.

SHA-1: 9fddebe4177b9e47acb97769c719bc8ff94b6375


Detailed log of new commits:

Author: ifv
Date: Tue Nov 18 16:27:16 2014 +0300

    0025124: [Feature request] Removal of continuity checks for offset geometries

ifv

2014-11-18 18:28

developer   ~0034494

Dear msv,
please rewiev branch CR25124_5

msv

2014-11-30 21:44

developer   ~0034858

1. Geom2d_BSplineCurve_1.cxx:100-110 avoid try/catch without real need.
2. Geom2d_BSplineCurve::IsG1 method does not check if the curve is closed/periodic. In this case it is needed to check smoothness at curve begin/end.
3. Geom2d_OffsetCurve.cxx:149 irrelevant name aBasisSurf in the comment
4. Geom_OffsetCurve.cxx:222 irrelevant name aBasisSurf in the comment

git

2014-12-01 12:23

administrator   ~0034862

Branch CR25124_6 has been created by nbv.

SHA-1: addda0c54b43c932d23d9f4dc0dbb27e938d58e3


Detailed log of new commits:

Author: nbv
Date: Mon Dec 1 09:49:40 2014 +0300

    0025124: [Feature request] Removal of continuity checks for offset geometries
    
    Sometimes curve or surface, which is defined as C0, has continuity G1 or above. Offset can be built from these shapes.
    Therefore, this extended checking was added into SetBasisCurve and SetBasisSurface methods.
    
    Main changes in function BRepOffset_Tool::ExtentFace(...):
    * "return" is added if intersection (in 2D-space) between two edges in a face cannot be found.
    
    Basis curve/surface continuity value found (if G1-checking is OK) is set up as BasisContinuity (see myBasisCurveContinuity and myBasisSurfContinuity members which is returned by GetBasisCurveContinuity and GetBasisSurfContinuity() methods). This fact is used in Geom2dAdaptor and in GeomAdaptor classes.
    
    Possibility is entered, which allows for basis elements of offset curve/surface to avoid of C0-checking.
    
    Test cases was changed according to their new behavior.

nbv

2014-12-01 13:13

developer   ~0034870

Dear Mikhail!

Please review branch CR25124_6.

ifv

2014-12-01 13:36

developer   ~0034874

Removal of catching exception causes duble calculation and checking of vector magnitude, which is checked in method Angle().

nbv

2014-12-01 13:45

developer   ~0034876

I agree with Igor to the full extent. But the way offered by Mikhail allow to avoid appearing exception. Therefore, in branch CR25124_6 I have deleted try-catch blocks.

But it leads to double checking, really. That might be no good.

ifv

2014-12-01 13:49

developer   ~0034878

if(!IsPeriodic() && !IsClosed())
    return Standard_True;

It is not necessary to use !IsClosed(): only periodic curves must have smooth end connection.

git

2014-12-01 13:59

administrator   ~0034879

Branch CR25124_6 has been updated forcibly by nbv.

SHA-1: 90c5e92ae1b79d15cb5e95b5307b003b725c9562

nbv

2014-12-01 14:04

developer   ~0034880

Branch CR25124_6 was updated according to latest remark from ifv (IsClosed checking)

nbv

2014-12-01 14:37

developer   ~0034882

It is necessary to analyze, what is the most effective way?

1. Use try-catch;
2. Use Done/Not done flag
3. Use double checking

msv

2014-12-03 12:45

developer   ~0034963

Usage of try/catch is unjustified in our case. It slows execution very much if an exception occurs. To prove this I have written a small program. It measures the time of calculations of two variants, one is with try/catch block, and another is with checking for null vector.

    // using try/catch
    for (int i=1; i <= theNiter; i++)
    {
        try {
            gp_Vec aV1(0,0,1), aV2(1,0,0);
            if (theExcEach && (i % theExcEach) == 0)
                aV1.SetZ(0);
            a = aV1.Angle(aV2);
        }
        catch(Standard_Failure)
        {
            nbexc++;
        }
    }


    // using check for null
    for (int i=1; i <= theNiter; i++)
    {
        gp_Vec aV1(0,0,1), aV2(1,0,0);
        if (theExcEach && (i % theExcEach) == 0)
            aV1.SetZ(0);
        if (aV1.SquareMagnitude() < RealSmall() || aV2.SquareMagnitude() < RealSmall())
        {
            nbexc++;
            continue;
        }
        a = aV1.Angle(aV2);
    }


theNIter is the number of iterations;
theExcEach is the parameter allowing to control the frequency of occurrence of null vector.

Here are the results of testing:

D:\msv\util>test_try.bat 10000000 0
with try: 10000000 iterations, 0 exceptions, 0.436803 sec
no try: 10000000 iterations, 0 nulls, 0.436803 sec

D:\msv\util>test_try.bat 10000000 10000
with try: 10000000 iterations, 1000 exceptions, 0.452403 sec
no try: 10000000 iterations, 1000 nulls, 0.452403 sec

D:\msv\util>test_try.bat 10000000 100
with try: 10000000 iterations, 100000 exceptions, 0.858005 sec
no try: 10000000 iterations, 100000 nulls, 0.452403 sec


We can see that the frequent null vector occurs, the more time program spends using try/catch mechanism, and the same time it spends using checking for null vector.

One more note. You see that the check for null vector uses SquareMagnitude instead of Magnitude method. It allows to avoid call of sqrt function. I have also took an experiment with Magnitude, and it is presented below:

D:\msv\util>test_try.bat 10000000 0
with try: 10000000 iterations, 0 exceptions, 0.436803 sec
no try: 10000000 iterations, 0 nulls, 0.499203 sec


We can see that the time of "no try" way has increased a little.

Resume:
1) it is better to avoid try/catch constructions if it is possible to check for exception condition.
2) it is better to avoid calling Magnitude method if it is enough to evaluate SquareMagnitude.

msv

2014-12-03 12:47

developer   ~0034964

Just in case, here I publish the whole source code of my small program.

#include <gp_Vec.hxx>
#include <OSD_Chronometer.hxx>

void test(int theNiter, int theExcEach)
{
    int nbexc = 0;
    double a;
    OSD_Chronometer aTime;
    aTime.Start();
    // using try/catch
    for (int i=1; i <= theNiter; i++)
    {
        try {
            gp_Vec aV1(0,0,1), aV2(1,0,0);
            if (theExcEach && (i % theExcEach) == 0)
                aV1.SetZ(0);
            a = aV1.Angle(aV2);
        }
        catch(Standard_Failure)
        {
            nbexc++;
        }
    }
    aTime.Stop();
    double t;
    aTime.Show(t);
    cout<<"with try: "<<theNiter<<" iterations, "<<nbexc<<" exceptions, "<<t<<" sec"<< endl;
    aTime.Reset();
    aTime.Start();
    nbexc = 0;
    // using check for null
    for (int i=1; i <= theNiter; i++)
    {
        gp_Vec aV1(0,0,1), aV2(1,0,0);
        if (theExcEach && (i % theExcEach) == 0)
            aV1.SetZ(0);
        if (aV1.Magnitude() < RealSmall() || aV2.Magnitude() < RealSmall())
        {
            nbexc++;
            continue;
        }
        a = aV1.Angle(aV2);
    }
    aTime.Stop();
    aTime.Show(t);
    cout<<"no try: "<<theNiter<<" iterations, "<<nbexc<<" nulls, "<<t<<" sec"<<endl;
}

int main(int n, char** a)
{
  if (n < 3) {
      cout<<"expected args: nb_iter exception_each_n"<<endl;
      return 1;
  }
  test(atoi(a[1]), atoi(a[2]));
  return 0;
}

git

2014-12-04 14:58

administrator   ~0035009

Branch CR25124_6 has been updated forcibly by nbv.

SHA-1: 28d9673706e160d641604871280a41f846fed7cd

nbv

2014-12-04 15:16

developer   ~0035011

In accordance with the result of the discussion, we exclude try-catch block using and try to use SquareMagnitude() method instead of Magnitude.

It was implemented into the updated CR25124_6 branch.



Dear Mikhail!

Please review it.

git

2014-12-04 16:28

administrator   ~0035017

Branch CR25124_6 has been updated forcibly by nbv.

SHA-1: 1650a4be122a616f816d8d20db1a25fdb54597bd

git

2014-12-04 17:11

administrator   ~0035022

Branch CR25124_6 has been updated forcibly by nbv.

SHA-1: 9bb2698bc0345efb50f0e7854195ccf327cd0e2c

git

2014-12-04 17:25

administrator   ~0035025

Branch CR25124_6 has been updated forcibly by nbv.

SHA-1: 437402dcb6d99d6dea1762a3d5b0b9cca7d06300

git

2014-12-05 09:26

administrator   ~0035036

Branch CR25124_6 has been updated forcibly by nbv.

SHA-1: a29c69f25da2d14442802ad1625280ce786d18cc

msv

2014-12-05 09:45

developer   ~0035037

Ready for testing.
Dear nbv, please rebase on master.

git

2014-12-05 10:00

administrator   ~0035038

Branch CR25124_6 has been updated forcibly by nbv.

SHA-1: f4d9c4184819975ee802e770654a285f61c27ead

nbv

2014-12-05 10:01

developer   ~0035039

Last edited: 2014-12-05 10:01

CR25124_6 was rebased on the current master (all commits were squashed).

git

2014-12-05 19:20

administrator   ~0035090

Branch CR25124_6 has been updated forcibly by apv.

SHA-1: f10416a769017895719ef3c2b2ef8ce0c862ba19

apv

2014-12-05 19:21

tester   ~0035091

Branch CR25124_6 has been rebased on the current master

git

2014-12-09 17:05

administrator   ~0035221

Branch CR25124_6 has been updated by apv.

SHA-1: c54baa1b368395c5d1a08865c10fb467ff2bfb22


Detailed log of new commits:

Author: apv
Date: Tue Dec 9 17:05:25 2014 +0300

    Test-cases for issue 0025124

apv

2014-12-09 17:07

tester   ~0035222

Dear nbv,

Please review test-cases for this issue.

git

2014-12-10 10:22

administrator   ~0035242

Branch CR25124_6 has been updated by nbv.

SHA-1: d299027a9637f343093d4f4c58c76ee5c78b6eb5


Detailed log of new commits:

Author: nbv
Date: Wed Dec 10 10:22:07 2014 +0300

    Small correction of test cases after review.

nbv

2014-12-10 10:30

developer   ~0035244

Test cases created were reviewed with small correction. However, There are some remarks:

1. Please show picture in every test cases created. Necessary for showing shapes have already been prepared (donly command was added).

2. Please create test cases with using the shapes attached by Roman Lygin. These scripts should look like bug25124_4 (check, if offset exist and offset surface is not equal to the source surface).

git

2014-12-10 12:42

administrator   ~0035253

Branch CR25124_6 has been updated by apv.

SHA-1: 6a79414615e92cdc9d084b82d65f8d03e250764d


Detailed log of new commits:

Author: apv
Date: Wed Dec 10 12:42:45 2014 +0300

    Update of test-cases for issue

git

2014-12-10 13:37

administrator   ~0035258

Branch CR25124_6 has been updated by nbv.

SHA-1: e16715bb0f05b695732eccfb772c7661fc139db8


Detailed log of new commits:

Author: nbv
Date: Wed Dec 10 13:37:09 2014 +0300

    Update of test-cases after reviewing

nbv

2014-12-10 13:39

developer   ~0035259

Some test cases were changed.

Main remark after reviewing:
It is necessary for test "bugs modalg_5 bug25124_2" to use 2D-viewer instead of 3D used. Please update.

apv

2014-12-10 15:08

tester   ~0035263

Dear BugMaster,

Branch CR25124_6 from occt git-repository (and master from products git-repository) was compiled on Linux, MacOS and Windows platforms and tested.
SHA-1: f10416a769017895719ef3c2b2ef8ce0c862ba19

Number of compiler warnings:
occt component:
   Linux: 18 (18 on master)
   Windows: 0 (0 on master)
products component :
   Linux: 11 (11 on master)
   Windows: 0 (1 on master)

Regressions/Differences:
Not detected

Testing cases:
bugs modalg_5(010) bug25124_1 - OK
http://occt-tests/CR25124-6-master-occt/Debian60-64/bugs/modalg_5/bug25124_1.html
http://occt-tests/CR25124-6-master-occt/Windows-32-VC10/bugs/modalg_5/bug25124_1.html
bugs modalg_5(010) bug25124_2 - OK
http://occt-tests/CR25124-6-master-occt/Debian60-64/bugs/modalg_5/bug25124_2.html
http://occt-tests/CR25124-6-master-occt/Windows-32-VC10/bugs/modalg_5/bug25124_2.html
bugs modalg_5(010) bug25124_3 - OK
http://occt-tests/CR25124-6-master-occt/Debian60-64/bugs/modalg_5/bug25124_3.html
http://occt-tests/CR25124-6-master-occt/Windows-32-VC10/bugs/modalg_5/bug25124_3.html
bugs modalg_5(010) bug25124_1 - OK
http://occt-tests/CR25124-6-master-occt/Debian60-64/bugs/modalg_5/bug25124_4.html
http://occt-tests/CR25124-6-master-occt/Windows-32-VC10/bugs/modalg_5/bug25124_4.html
bugs modalg_5(010) bug25124_5 - OK
http://occt-tests/CR25124-6-master-occt/Debian60-64/bugs/modalg_5/bug25124_5.html
http://occt-tests/CR25124-6-master-occt/Windows-32-VC10/bugs/modalg_5/bug25124_5.html
bugs modalg_5(010) bug25124_6 - OK
http://occt-tests/CR25124-6-master-occt/Debian60-64/bugs/modalg_5/bug25124_6.html
http://occt-tests/CR25124-6-master-occt/Windows-32-VC10/bugs/modalg_5/bug25124_6.html
bugs modalg_5(010) bug25124_7 - OK
http://occt-tests/CR25124-6-master-occt/Debian60-64/bugs/modalg_5/bug25124_7.html
http://occt-tests/CR25124-6-master-occt/Windows-32-VC10/bugs/modalg_5/bug25124_7.html

Testing on Linux:
Total MEMORY difference: 363920196 / 363473864
Total CPU difference: 47466.610000000146 / 47536.8399999999

Testing on Windows:
Total MEMORY difference: 277271144 / 277124952
Total CPU difference: 33895.609375 / 41681.34375

git

2014-12-10 16:18

administrator   ~0035268

Branch CR25124_6 has been updated forcibly by nbv.

SHA-1: f27ebabad68ccb82b175aafe15189f36fd863e40

nbv

2014-12-10 16:19

developer   ~0035269

All commits were squashed.

git

2015-01-26 12:35

administrator   ~0036578

Branch CR25124_6 has been deleted by inv.

SHA-1: f27ebabad68ccb82b175aafe15189f36fd863e40

git

2015-01-26 12:38

administrator   ~0036628

Branch CR25124_5 has been deleted by inv.

SHA-1: 9fddebe4177b9e47acb97769c719bc8ff94b6375

git

2015-01-26 12:38

administrator   ~0036634

Branch CR25124_1 has been deleted by inv.

SHA-1: fb371da1f3e4f993b7905d439e7dce8d1ab573f2

git

2015-01-26 12:38

administrator   ~0036636

Branch CR25124 has been deleted by inv.

SHA-1: 5dd00eae94c0b2cc7cbe6c4223c9880674ce639f

Related Changesets

occt: master 3d58dc49

2014-12-10 13:18:05

nbv


Committer: bugmaster Details Diff
0025124: [Feature request] Removal of continuity checks for offset geometries

Sometimes curve or surface, which is defined as C0, has continuity G1 or above. Offset can be built from these shapes.
Therefore, this extended checking was added into SetBasisCurve and SetBasisSurface methods.

Main changes in function BRepOffset_Tool::ExtentFace(...):
* "return" is added if intersection (in 2D-space) between two edges in a face cannot be found.

Basis curve/surface continuity value found (if G1-checking is OK) is set up as BasisContinuity (see myBasisCurveContinuity and myBasisSurfContinuity members which is returned by GetBasisCurveContinuity and GetBasisSurfContinuity() methods). This fact is used in Geom2dAdaptor and in GeomAdaptor classes.

Possibility is entered, which allows for basis elements of offset curve/surface to avoid of C0-checking.

Test cases were changed according to their new behavior.

Test-cases for issue 0025124
Affected Issues
0025124
mod - src/BRepFill/BRepFill_OffsetWire.cxx Diff File
mod - src/BRepOffset/BRepOffset_Inter3d.cxx Diff File
mod - src/BRepOffset/BRepOffset_Tool.cxx Diff File
mod - src/BSplCLib/BSplCLib.cxx Diff File
mod - src/Geom/Geom_BSplineCurve.cdl Diff File
mod - src/Geom/Geom_BSplineCurve_1.cxx Diff File
mod - src/Geom/Geom_OffsetCurve.cdl Diff File
mod - src/Geom/Geom_OffsetCurve.cxx Diff File
mod - src/Geom/Geom_OffsetSurface.cdl Diff File
mod - src/Geom/Geom_OffsetSurface.cxx Diff File
mod - src/Geom/Geom_OsculatingSurface.cxx Diff File
mod - src/Geom2d/Geom2d_BSplineCurve.cdl Diff File
mod - src/Geom2d/Geom2d_BSplineCurve_1.cxx Diff File
mod - src/Geom2d/Geom2d_OffsetCurve.cdl Diff File
mod - src/Geom2d/Geom2d_OffsetCurve.cxx Diff File
mod - src/Geom2dAdaptor/Geom2dAdaptor_Curve.cxx Diff File
mod - src/GeomAdaptor/GeomAdaptor_Curve.cxx Diff File
add - tests/bugs/modalg_5/bug25124_1 Diff File
add - tests/bugs/modalg_5/bug25124_2 Diff File
add - tests/bugs/modalg_5/bug25124_3 Diff File
add - tests/bugs/modalg_5/bug25124_4 Diff File
add - tests/bugs/modalg_5/bug25124_5 Diff File
add - tests/bugs/modalg_5/bug25124_6 Diff File
add - tests/bugs/modalg_5/bug25124_7 Diff File
mod - tests/offset/wire_unclosed_outside_0_005/B3 Diff File
mod - tests/offset/wire_unclosed_outside_0_005/B4 Diff File
mod - tests/offset/wire_unclosed_outside_0_005/B6 Diff File
mod - tests/offset/wire_unclosed_outside_0_025/B2 Diff File
mod - tests/offset/wire_unclosed_outside_0_025/B4 Diff File
mod - tests/offset/wire_unclosed_outside_0_025/B6 Diff File
mod - tests/offset/wire_unclosed_outside_0_075/B1 Diff File
mod - tests/offset/wire_unclosed_outside_0_075/B2 Diff File
mod - tests/offset/wire_unclosed_outside_0_075/B6 Diff File

Issue History

Date Modified Username Field Change
2014-08-04 14:21 Roman Lygin New Issue
2014-08-04 14:21 Roman Lygin Assigned To => ifv
2014-08-04 14:21 Roman Lygin File Added: underlying_surfaces_for_offset.zip
2014-08-18 14:04 ifv Assigned To ifv => nbv
2014-08-18 14:04 ifv Status new => assigned
2014-08-19 12:44 git Note Added: 0030875
2014-08-19 16:05 git Note Added: 0030890
2014-08-19 18:21 git Note Added: 0030902
2014-08-20 09:12 nbv Note Added: 0030911
2014-08-20 09:12 nbv Assigned To nbv => ifv
2014-08-20 09:12 nbv Status assigned => resolved
2014-08-20 11:02 ifv Note Added: 0030916
2014-08-20 11:02 ifv Assigned To ifv => nbv
2014-08-20 11:02 ifv Status resolved => feedback
2014-08-21 12:23 git Note Added: 0030987
2014-08-21 12:29 nbv Note Added: 0030988
2014-08-21 12:29 nbv Assigned To nbv => ifv
2014-08-21 12:29 nbv Status feedback => resolved
2014-08-21 13:30 ifv Note Added: 0030998
2014-08-21 13:30 ifv Status resolved => feedback
2014-08-21 13:55 git Note Added: 0031002
2014-08-21 13:57 nbv Note Added: 0031003
2014-08-21 13:57 nbv Status feedback => resolved
2014-08-21 14:04 ifv Note Added: 0031005
2014-08-21 14:04 ifv Status resolved => reviewed
2014-08-21 14:23 nbv Note Added: 0031006
2014-08-21 14:23 nbv Assigned To ifv => nbv
2014-08-21 14:23 nbv Status reviewed => assigned
2014-08-21 14:23 nbv Note Edited: 0031006
2014-08-21 18:10 git Note Added: 0031011
2014-08-22 10:07 git Note Added: 0031022
2014-08-22 16:10 git Note Added: 0031038
2014-08-22 17:07 git Note Added: 0031044
2014-08-22 17:13 nbv Note Added: 0031045
2014-08-22 17:13 nbv Assigned To nbv => ifv
2014-08-22 17:13 nbv Status assigned => resolved
2014-08-22 17:35 nbv Assigned To ifv => nbv
2014-08-22 17:35 nbv Status resolved => assigned
2014-08-23 10:46 Roman Lygin Note Added: 0031056
2014-08-25 17:02 git Note Added: 0031065
2014-08-26 16:46 git Note Added: 0031102
2014-08-27 10:39 git Note Added: 0031117
2014-08-28 17:23 git Note Added: 0031165
2014-09-11 18:26 abv Target Version => 7.1.0
2014-09-19 16:27 git Note Added: 0031913
2014-09-19 17:53 nbv Note Added: 0031922
2014-09-19 17:53 nbv Assigned To nbv => ifv
2014-09-19 17:53 nbv Status assigned => resolved
2014-09-19 18:34 ifv Note Added: 0031923
2014-09-19 18:34 ifv Assigned To ifv => nbv
2014-09-19 18:34 ifv Status resolved => feedback
2014-09-23 13:59 git Note Added: 0031999
2014-09-23 14:26 nbv Note Added: 0032001
2014-09-23 14:26 nbv Assigned To nbv => ifv
2014-09-23 14:26 nbv Status feedback => resolved
2014-11-18 11:50 git Note Added: 0034469
2014-11-18 18:17 git Note Added: 0034490
2014-11-18 18:24 git Note Added: 0034492
2014-11-18 18:27 ifv Assigned To ifv => msv
2014-11-18 18:28 ifv Note Added: 0034494
2014-11-30 21:44 msv Note Added: 0034858
2014-11-30 21:44 msv Assigned To msv => ifv
2014-11-30 21:44 msv Status resolved => assigned
2014-12-01 09:38 nbv Assigned To ifv => nbv
2014-12-01 12:23 git Note Added: 0034862
2014-12-01 13:13 nbv Note Added: 0034870
2014-12-01 13:13 nbv Assigned To nbv => msv
2014-12-01 13:13 nbv Status assigned => resolved
2014-12-01 13:13 nbv Steps to Reproduce Updated
2014-12-01 13:36 ifv Note Added: 0034874
2014-12-01 13:45 nbv Note Added: 0034876
2014-12-01 13:49 ifv Note Added: 0034878
2014-12-01 13:51 nbv Assigned To msv => nbv
2014-12-01 13:51 nbv Status resolved => assigned
2014-12-01 13:59 git Note Added: 0034879
2014-12-01 14:04 nbv Note Added: 0034880
2014-12-01 14:04 nbv Assigned To nbv => msv
2014-12-01 14:04 nbv Status assigned => resolved
2014-12-01 14:37 nbv Note Added: 0034882
2014-12-01 14:37 nbv Assigned To msv => nbv
2014-12-01 14:37 nbv Status resolved => feedback
2014-12-03 12:45 msv Note Added: 0034963
2014-12-03 12:47 msv Note Added: 0034964
2014-12-04 14:58 git Note Added: 0035009
2014-12-04 15:16 nbv Note Added: 0035011
2014-12-04 15:16 nbv Assigned To nbv => msv
2014-12-04 15:16 nbv Status feedback => resolved
2014-12-04 16:28 git Note Added: 0035017
2014-12-04 17:11 git Note Added: 0035022
2014-12-04 17:25 git Note Added: 0035025
2014-12-05 09:26 git Note Added: 0035036
2014-12-05 09:45 msv Note Added: 0035037
2014-12-05 09:45 msv Assigned To msv => bugmaster
2014-12-05 09:45 msv Status resolved => reviewed
2014-12-05 10:00 git Note Added: 0035038
2014-12-05 10:01 nbv Note Added: 0035039
2014-12-05 10:01 nbv Note Edited: 0035039
2014-12-05 16:56 mkv Assigned To bugmaster => apv
2014-12-05 19:20 git Note Added: 0035090
2014-12-05 19:21 apv Note Added: 0035091
2014-12-09 17:05 git Note Added: 0035221
2014-12-09 17:07 apv Note Added: 0035222
2014-12-09 17:07 apv Assigned To apv => nbv
2014-12-09 17:07 apv Status reviewed => feedback
2014-12-09 17:08 apv Test case number => bugs modalg_5 bug25124_1, bug25124_2, bug25124_3, bug25124_4, bug25124_5
2014-12-09 17:08 apv Test case number bugs modalg_5 bug25124_1, bug25124_2, bug25124_3, bug25124_4, bug25124_5 => bugs modalg_5(010) bug25124_1, bug25124_2, bug25124_3, bug25124_4, bug25124_5
2014-12-10 10:22 git Note Added: 0035242
2014-12-10 10:23 nbv Assigned To nbv => Roman Lygin
2014-12-10 10:23 nbv Assigned To Roman Lygin => apv
2014-12-10 10:30 nbv Note Added: 0035244
2014-12-10 12:42 git Note Added: 0035253
2014-12-10 12:44 apv Test case number bugs modalg_5(010) bug25124_1, bug25124_2, bug25124_3, bug25124_4, bug25124_5 => bugs modalg_5(010) bug25124_1, bug25124_2, bug25124_3, bug25124_4, bug25124_5, bug25124_6, bug25124_7
2014-12-10 13:37 git Note Added: 0035258
2014-12-10 13:39 nbv Note Added: 0035259
2014-12-10 13:40 nbv Assigned To apv => nbv
2014-12-10 13:40 nbv Assigned To nbv => apv
2014-12-10 15:08 apv Note Added: 0035263
2014-12-10 15:08 apv Assigned To apv => bugmaster
2014-12-10 15:08 apv Status feedback => tested
2014-12-10 16:18 git Note Added: 0035268
2014-12-10 16:19 nbv Note Added: 0035269
2014-12-16 16:46 bugmaster Changeset attached => occt master 3d58dc49
2014-12-16 16:46 bugmaster Status tested => verified
2014-12-16 16:46 bugmaster Resolution open => fixed
2015-01-19 16:23 bugmaster Target Version 7.1.0 => 6.9.0
2015-01-26 12:35 git Note Added: 0036578
2015-01-26 12:38 git Note Added: 0036628
2015-01-26 12:38 git Note Added: 0036634
2015-01-26 12:38 git Note Added: 0036636
2015-05-14 15:29 aiv Status verified => closed
2015-05-14 15:32 aiv Fixed in Version => 6.9.0
2020-03-14 13:34 Roman Lygin Relationship added related to 0031430