1. Intersection curve was not bounded by faces domain. It was the reason of big edge tolerance. This problem has been fixed.
2. Interface bopcurves DRAW-command has been changed in order to make possible to reproduce intersection problem.
Creation of test case for this issue.
theCommands.Add("bsection", "use bsection r s1 s2 [-n2d/-n2d1/-n2d2] [-na]",
__FILE__, bsection, g);
//
- theCommands.Add("bopcurves", "use bopcurves F1 F2 [-2d/-2d1/-2d2]",
+ theCommands.Add("bopcurves", "use bopcurves F1 F2 [-2d/-2d1/-2d2] [-p u1 v1 u2 v2]",
__FILE__, bopcurves, g);
theCommands.Add("mkvolume", "make solids from set of shapes.\nmkvolume r b1 b2 ... [-c] [-ni]",
__FILE__, mkvolume , g);
Standard_Boolean aToApproxC3d, aToApproxC2dOnS1, aToApproxC2dOnS2, anIsDone;
Standard_Integer i, aNbCurves, aNbPoints;
Standard_Real anAppTol, aTolR;
+ IntSurf_ListOfPntOn2S aListOfPnts;
TCollection_AsciiString aNm("c_"), aNp("p_");
//
anAppTol = 0.0000001;
aToApproxC3d = Standard_True;
aToApproxC2dOnS1 = Standard_False;
aToApproxC2dOnS2 = Standard_False;
+
//
- if (n > 3) {
- if (!strcasecmp(a[3],"-2d")) {
+ for(Standard_Integer i = 3; i < n; i++)
+ {
+ if (!strcasecmp(a[i],"-2d")) {
aToApproxC2dOnS1 = Standard_True;
aToApproxC2dOnS2 = Standard_True;
}
- else if (!strcasecmp(a[3],"-2d1")) {
+ else if (!strcasecmp(a[i],"-2d1")) {
aToApproxC2dOnS1 = Standard_True;
}
- else if (!strcasecmp(a[3],"-2d2")) {
+ else if (!strcasecmp(a[i],"-2d2")) {
aToApproxC2dOnS2 = Standard_True;
}
+ else if (!strcasecmp(a[i],"-p")) {
+ IntSurf_PntOn2S aPt;
+ const Standard_Real aU1 = Draw::Atof(a[++i]);
+ const Standard_Real aV1 = Draw::Atof(a[++i]);
+ const Standard_Real aU2 = Draw::Atof(a[++i]);
+ const Standard_Real aV2 = Draw::Atof(a[++i]);
+
+ aPt.SetValue(aU1, aV1, aU2, aV2);
+ aListOfPnts.Append(aPt);
+ }
else {
- di << "Wrong key. To build 2d curves use: bopcurves F1 F2 -2d/-2d1/-2d2 \n";
+ di << "Wrong key. To build 2d curves use: bopcurves F1 F2 [-2d/-2d1/-2d2] [-p u1 v1 u2 v2]\n";
return 1;
}
+
}
+
//
IntTools_FaceFace aFF;
//
aToApproxC2dOnS1,
aToApproxC2dOnS2,
anAppTol);
+ aFF.SetList(aListOfPnts);
//
aFF.Perform (aF1, aF2);
//
Standard_Integer aHashIdx =
Standard_Integer(anIdx * theWLine->NbPnts() / 9);
- //Store this point.
- aNewPointsHash(aHashIdx) = 0;
+ //Vertex must be stored as VERTEX (HASH = -1)
+ if (aNewPointsHash(aHashIdx) != -1)
+ aNewPointsHash(aHashIdx) = 0;
}
}
L = aWLine;
//
- if(!myListOfPnts.IsEmpty()) {
- bAvoidLineConstructor = Standard_True;
- }
+ //if(!myListOfPnts.IsEmpty()) {
+ // bAvoidLineConstructor = Standard_True;
+ //}
Standard_Integer nbp = aWLine->NbPnts();
const IntSurf_PntOn2S& p1 = aWLine->Point(1);
-puts "TODO #OCC26777 ALL: Error : The length of result shape is"
-
restore [locate_data_file GEN758_nofog.rle] a
-explode a
+explode a f
+
+# see issue #26777
+set GoodNbCurv 1
+
+set log [bopcurves a_1 a_2 -2d -p 0.20639206339545224 0.69260832843385300 0.0 0.017002507022347624]
+regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Tolerance_Reached NbCurv
+
+set expected_Tolerance_Reached 2.2797192759881918e-005
+set tol_abs_Tolerance_Reached 0.0
+set tol_rel_Tolerance_Reached 1.0e-2
+checkreal "Tolerance Reached" ${Tolerance_Reached} ${expected_Tolerance_Reached} ${tol_abs_Tolerance_Reached} ${tol_rel_Tolerance_Reached}
+
+if {${NbCurv} != ${GoodNbCurv}} {
+ puts "Error: ${GoodNbCurv} curves are expected but ${NbCurv} are found!"
+}
+
+smallview
+clear
+
+if {${NbCurv} == 1} {
+ display c_1
+ fit
+} else {
+ for { set i 1 } { ${i} <= ${NbCurv} } {incr i} {
+ bounds c_$i u1 u2
+ cvalue c_$i u2 xx yy zz
+ point p$i xx yy zz
+ }
+
+ fit
+
+ for { set i 1 } { ${i} <= ${NbCurv} } {incr i} {
+ erase p$i
+ display c_$i
+ }
+}
+
+xwd ${imagedir}/${casename}_curv.png
+
+donly a_1 a_2
+
bsection result a_1 a_2
checkprops result -l 22.2575
-checksection result
+checksection result
\ No newline at end of file
--- /dev/null
+puts "============"
+puts "OCC26841"
+puts "============"
+puts ""
+###############################
+## Wrong result obtained by intersection algorithm.
+###############################
+
+restore [locate_data_file bug26841c1-prism.brep] p1
+restore [locate_data_file bug26841c1-deck.brep] a1
+
+bsection result a1 p1 -n2d2
+
+smallview
+donly result
+fit
+display a1 p1
+
+set nbshapes_expected "
+Number of shapes in shape
+ VERTEX : 5
+ EDGE : 5
+ WIRE : 0
+ FACE : 0
+ SHELL : 0
+ SOLID : 0
+ COMPSOLID : 0
+ COMPOUND : 1
+ SHAPE : 11
+"
+
+checknbshapes result -ref ${nbshapes_expected} -t -m "SECTION"
+
+regexp {Tolerance +MAX=([-0-9.+eE]+)} [tolerance result] full MaxTolerance
+puts "MaxTolerance=$MaxTolerance"
+
+set expected_MaxTolerance 4.8861509475438473e-005
+set tol_abs_MaxTolerance 0.0
+set tol_rel_MaxTolerance 0.01
+checkreal "MaxTolerance" ${MaxTolerance} ${expected_MaxTolerance} ${tol_abs_MaxTolerance} ${tol_rel_MaxTolerance}
+
+set log [checksection result]
+
+if { [string compare -nocase $log " nb alone Vertices : 0\n\n"] } {
+ puts "ERROR: the section is not closed"
+} else {
+ puts "The section is OK"
+}
+
+set only_screen_axo 1
\ No newline at end of file
--- /dev/null
+puts "============"
+puts "OCC26841"
+puts "============"
+puts ""
+###############################
+## Wrong result obtained by intersection algorithm.
+###############################
+
+restore [locate_data_file bug26841c3-prism.brep] p3
+restore [locate_data_file bug26841c3-deck.brep] a3
+
+bsection result a3 p3 -n2d2
+
+smallview
+donly result
+fit
+display a3 p3
+
+
+set nbshapes_expected "
+Number of shapes in shape
+ VERTEX : 10
+ EDGE : 10
+ WIRE : 0
+ FACE : 0
+ SHELL : 0
+ SOLID : 0
+ COMPSOLID : 0
+ COMPOUND : 1
+ SHAPE : 21
+"
+
+checknbshapes result -ref ${nbshapes_expected} -t -m "SECTION"
+
+regexp {Tolerance +MAX=([-0-9.+eE]+)} [tolerance result] full MaxTolerance
+puts "MaxTolerance=$MaxTolerance"
+
+set expected_MaxTolerance 0.00010145423883977269
+set tol_abs_MaxTolerance 0.0
+set tol_rel_MaxTolerance 0.001
+checkreal "MaxTolerance" ${MaxTolerance} ${expected_MaxTolerance} ${tol_abs_MaxTolerance} ${tol_rel_MaxTolerance}
+
+set log [checksection result]
+
+if { [string compare -nocase $log " nb alone Vertices : 0\n\n"] } {
+ puts "ERROR: the section is not closed"
+} else {
+ puts "The section is OK"
+}
+
+set only_screen_axo 1
\ No newline at end of file