1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-06 18:26:22 +03:00

0027357: Geom2dGcc_Circ2d2TanOn: check status of sub-algorithms to avoid exceptions

Additional checks for underlying algorithms have been added

test case

get rid of the warning
This commit is contained in:
isn 2016-06-17 14:50:50 +03:00 committed by bugmaster
parent d52651755e
commit 8009d0702c
3 changed files with 303 additions and 155 deletions

View File

@ -87,11 +87,14 @@ Geom2dGcc_Circ2d2TanOn::
GccEnt_QualifiedCirc(c2,Qualified2.Qualifier()),
CCon->Circ2d(),Tolerance);
WellDone = CircAna.IsDone();
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
if (WellDone)
{
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
}
}
else {
Handle(Geom2d_Line) LLon = Handle(Geom2d_Line)::DownCast(Con);
@ -99,11 +102,14 @@ Geom2dGcc_Circ2d2TanOn::
GccEnt_QualifiedCirc(c2,Qualified2.Qualifier()),
LLon->Lin2d(),Tolerance);
WellDone = CircAna.IsDone();
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
if (WellDone)
{
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
}
}
}
else {
@ -115,11 +121,14 @@ Geom2dGcc_Circ2d2TanOn::
GccEnt_QualifiedLin(l2,Qualified2.Qualifier()),
CCon->Circ2d(),Tolerance);
WellDone = CircAna.IsDone();
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
if (WellDone)
{
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
}
}
else {
Handle(Geom2d_Line) LLon = Handle(Geom2d_Line)::DownCast(Con);
@ -127,11 +136,14 @@ Geom2dGcc_Circ2d2TanOn::
GccEnt_QualifiedLin(l2,Qualified2.Qualifier()),
LLon->Lin2d(),Tolerance);
WellDone = CircAna.IsDone();
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
if (WellDone)
{
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
}
}
}
}
@ -149,12 +161,15 @@ Geom2dGcc_Circ2d2TanOn::
Qualified2.Qualifier()),
Ql1,CCon->Circ2d(),Tolerance);
WellDone = CircAna.IsDone();
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
Invert = Standard_True;
if (WellDone)
{
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
Invert = Standard_True;
}
}
else {
Handle(Geom2d_Line) LLon = Handle(Geom2d_Line)::DownCast(Con);
@ -162,12 +177,15 @@ Geom2dGcc_Circ2d2TanOn::
Qualified2.Qualifier()),
Ql1,LLon->Lin2d(),Tolerance);
WellDone = CircAna.IsDone();
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
Invert = Standard_True;
if (WellDone)
{
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
Invert = Standard_True;
}
}
}
else {
@ -179,11 +197,14 @@ Geom2dGcc_Circ2d2TanOn::
GccEnt_QualifiedLin(l2,Qualified2.Qualifier()),
CCon->Circ2d(),Tolerance);
WellDone = CircAna.IsDone();
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
if (WellDone)
{
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
}
}
else {
Handle(Geom2d_Line) LLon = Handle(Geom2d_Line)::DownCast(Con);
@ -191,11 +212,14 @@ Geom2dGcc_Circ2d2TanOn::
GccEnt_QualifiedLin(l2,Qualified2.Qualifier()),
LLon->Lin2d(),Tolerance);
WellDone = CircAna.IsDone();
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
if (WellDone)
{
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
}
}
}
}
@ -218,11 +242,14 @@ Geom2dGcc_Circ2d2TanOn::
GccEnt_QualifiedCirc(c2,Qualified2.Qualifier());
Geom2dGcc_Circ2d2TanOnGeo CircGeo(Qc1,Qc2,OnCurve,Tolerance);
WellDone = CircGeo.IsDone();
NbrSol = CircGeo.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircGeo.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircGeo);
if (WellDone)
{
NbrSol = CircGeo.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircGeo.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircGeo);
}
}
else {
Handle(Geom2d_Line) LL2 = Handle(Geom2d_Line)::DownCast(CC2);
@ -231,11 +258,14 @@ Geom2dGcc_Circ2d2TanOn::
GccEnt_QualifiedLin(l2,Qualified2.Qualifier());
Geom2dGcc_Circ2d2TanOnGeo CircGeo(Qc1,Ql2,OnCurve,Tolerance);
WellDone = CircGeo.IsDone();
NbrSol = CircGeo.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircGeo.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircGeo);
if (WellDone)
{
NbrSol = CircGeo.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircGeo.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircGeo);
}
}
}
else {
@ -250,12 +280,15 @@ Geom2dGcc_Circ2d2TanOn::
GccEnt_QualifiedCirc(c2,Qualified2.Qualifier());
Geom2dGcc_Circ2d2TanOnGeo CircGeo(Qc2,Ql1,OnCurve,Tolerance);
WellDone = CircGeo.IsDone();
NbrSol = CircGeo.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircGeo.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircGeo);
Invert = Standard_True;
if (WellDone)
{
NbrSol = CircGeo.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircGeo.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircGeo);
Invert = Standard_True;
}
}
else {
Handle(Geom2d_Line) LL2 = Handle(Geom2d_Line)::DownCast(CC2);
@ -264,11 +297,14 @@ Geom2dGcc_Circ2d2TanOn::
GccEnt_QualifiedLin(l2,Qualified2.Qualifier());
Geom2dGcc_Circ2d2TanOnGeo CircGeo(Ql1,Ql2,OnCurve,Tolerance);
WellDone = CircGeo.IsDone();
NbrSol = CircGeo.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircGeo.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircGeo);
if (WellDone)
{
NbrSol = CircGeo.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircGeo.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircGeo);
}
}
}
}
@ -282,43 +318,52 @@ Geom2dGcc_Circ2d2TanOn::
Geom2dGcc_Circ2d2TanOnIter Circ(Qc1,Qc2,CCon->Circ2d(),
Param1,Param2,ParamOn,Tolerance);
WellDone = Circ.IsDone();
NbrSol = 1;
cirsol(1) = Circ.ThisSolution();
if (Circ.IsTheSame1()) { TheSame1(1) = 1; }
else {TheSame1(1) = 0; }
if (Circ.IsTheSame2()) { TheSame2(1) = 1; }
else {TheSame2(1) = 0; }
Circ.Tangency1(par1sol(1),pararg1(1),pnttg1sol(1));
Circ.Tangency2(par2sol(1),pararg2(1),pnttg2sol(1));
if (WellDone)
{
NbrSol = 1;
cirsol(1) = Circ.ThisSolution();
if (Circ.IsTheSame1()) { TheSame1(1) = 1; }
else {TheSame1(1) = 0; }
if (Circ.IsTheSame2()) { TheSame2(1) = 1; }
else {TheSame2(1) = 0; }
Circ.Tangency1(par1sol(1),pararg1(1),pnttg1sol(1));
Circ.Tangency2(par2sol(1),pararg2(1),pnttg2sol(1));
}
}
else {
Handle(Geom2d_Line) LLon = Handle(Geom2d_Line)::DownCast(Con);
Geom2dGcc_Circ2d2TanOnIter Circ(Qc1,Qc2,LLon->Lin2d(),
Param1,Param2,ParamOn,Tolerance);
WellDone = Circ.IsDone();
NbrSol = 1;
cirsol(1) = Circ.ThisSolution();
if (Circ.IsTheSame1()) { TheSame1(1) = 1; }
else {TheSame1(1) = 0; }
if (Circ.IsTheSame2()) { TheSame2(1) = 1; }
else {TheSame2(1) = 0; }
Circ.WhichQualifier(qualifier1(1),qualifier2(1));
Circ.Tangency1(par1sol(1),pararg1(1),pnttg1sol(1));
Circ.Tangency2(par2sol(1),pararg2(1),pnttg2sol(1));
if (WellDone)
{
NbrSol = 1;
cirsol(1) = Circ.ThisSolution();
if (Circ.IsTheSame1()) { TheSame1(1) = 1; }
else {TheSame1(1) = 0; }
if (Circ.IsTheSame2()) { TheSame2(1) = 1; }
else {TheSame2(1) = 0; }
Circ.WhichQualifier(qualifier1(1),qualifier2(1));
Circ.Tangency1(par1sol(1),pararg1(1),pnttg1sol(1));
Circ.Tangency2(par2sol(1),pararg2(1),pnttg2sol(1));
}
}
}
Geom2dGcc_Circ2d2TanOnIter Circ(Qc1,Qc2,OnCurve,
Param1,Param2,ParamOn,Tolerance);
WellDone = Circ.IsDone();
NbrSol = 1;
cirsol(1) = Circ.ThisSolution();
if (Circ.IsTheSame1()) { TheSame1(1) = 1; }
else {TheSame1(1) = 0; }
if (Circ.IsTheSame2()) { TheSame2(1) = 1; }
else {TheSame2(1) = 0; }
Circ.WhichQualifier(qualifier1(1),qualifier2(1));
Circ.Tangency1(par1sol(1),pararg1(1),pnttg1sol(1));
Circ.Tangency2(par2sol(1),pararg2(1),pnttg2sol(1));
if (WellDone)
{
NbrSol = 1;
cirsol(1) = Circ.ThisSolution();
if (Circ.IsTheSame1()) { TheSame1(1) = 1; }
else {TheSame1(1) = 0; }
if (Circ.IsTheSame2()) { TheSame2(1) = 1; }
else {TheSame2(1) = 0; }
Circ.WhichQualifier(qualifier1(1),qualifier2(1));
Circ.Tangency1(par1sol(1),pararg1(1),pnttg1sol(1));
Circ.Tangency2(par2sol(1),pararg2(1),pnttg2sol(1));
}
}
}
@ -366,21 +411,27 @@ Geom2dGcc_Circ2d2TanOn::
Handle(Geom2d_Circle) CCon = Handle(Geom2d_Circle)::DownCast(Con);
GccAna_Circ2d2TanOn CircAna(Qc1,pnt,CCon->Circ2d(),Tolerance);
WellDone = CircAna.IsDone();
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
if (WellDone)
{
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
}
}
else if (Type3 == GeomAbs_Line) {
Handle(Geom2d_Line) CCon = Handle(Geom2d_Line)::DownCast(Con);
GccAna_Circ2d2TanOn CircAna(Qc1,pnt,CCon->Lin2d(),Tolerance);
WellDone = CircAna.IsDone();
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
if (WellDone)
{
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
}
}
}
else {
@ -391,21 +442,27 @@ Geom2dGcc_Circ2d2TanOn::
Handle(Geom2d_Circle) CCon = Handle(Geom2d_Circle)::DownCast(Con);
GccAna_Circ2d2TanOn CircAna(Ql1,pnt,CCon->Circ2d(),Tolerance);
WellDone = CircAna.IsDone();
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
if (WellDone)
{
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
}
}
else if (Type3 == GeomAbs_Line) {
Handle(Geom2d_Line) LLon = Handle(Geom2d_Line)::DownCast(Con);
GccAna_Circ2d2TanOn CircAna(Ql1,pnt,LLon->Lin2d(),Tolerance);
WellDone = CircAna.IsDone();
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
if (WellDone)
{
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
}
}
}
}
@ -420,11 +477,14 @@ Geom2dGcc_Circ2d2TanOn::
GccEnt_QualifiedCirc Qc1(c1,Qualified1.Qualifier());
Geom2dGcc_Circ2d2TanOnGeo CircGeo(Qc1,Point->Pnt2d(),OnCurve,Tolerance);
WellDone = CircGeo.IsDone();
NbrSol = CircGeo.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircGeo.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircGeo);
if (WellDone)
{
NbrSol = CircGeo.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircGeo.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircGeo);
}
}
else {
Handle(Geom2d_Line) LLL1 = Handle(Geom2d_Line)::DownCast(CC1);
@ -432,11 +492,14 @@ Geom2dGcc_Circ2d2TanOn::
GccEnt_QualifiedLin Ql1(l1,Qualified1.Qualifier());
Geom2dGcc_Circ2d2TanOnGeo CircGeo(Ql1,Point->Pnt2d(),OnCurve,Tolerance);
WellDone = CircGeo.IsDone();
NbrSol = CircGeo.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircGeo.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircGeo);
if (WellDone)
{
NbrSol = CircGeo.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircGeo.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircGeo);
}
}
}
}
@ -448,41 +511,50 @@ Geom2dGcc_Circ2d2TanOn::
Geom2dGcc_Circ2d2TanOnIter Circ(Qc1,Point->Pnt2d(),CCon->Circ2d(),
Param1,ParamOn,Tolerance);
WellDone = Circ.IsDone();
NbrSol = 1;
cirsol(1) = Circ.ThisSolution();
if (Circ.IsTheSame1()) { TheSame1(1) = 1; }
else {TheSame1(1) = 0; }
Circ.WhichQualifier(qualifier1(1),qualifier2(1));
Circ.Tangency1(par1sol(1),pararg1(1),pnttg1sol(1));
Circ.Tangency2(par2sol(1),pararg2(1),pnttg2sol(1));
if (WellDone)
{
NbrSol = 1;
cirsol(1) = Circ.ThisSolution();
if (Circ.IsTheSame1()) { TheSame1(1) = 1; }
else {TheSame1(1) = 0; }
Circ.WhichQualifier(qualifier1(1),qualifier2(1));
Circ.Tangency1(par1sol(1),pararg1(1),pnttg1sol(1));
Circ.Tangency2(par2sol(1),pararg2(1),pnttg2sol(1));
}
}
else {
Handle(Geom2d_Line) LLon = Handle(Geom2d_Line)::DownCast(Con);
Geom2dGcc_Circ2d2TanOnIter Circ(Qc1,Point->Pnt2d(),LLon->Lin2d(),
Param1,ParamOn,Tolerance);
WellDone = Circ.IsDone();
NbrSol = 1;
cirsol(1) = Circ.ThisSolution();
if (Circ.IsTheSame1()) { TheSame1(1) = 1; }
else {TheSame1(1) = 0; }
Circ.WhichQualifier(qualifier1(1),qualifier2(1));
Circ.Tangency1(par1sol(1),pararg1(1),pnttg1sol(1));
Circ.Tangency2(par2sol(1),pararg2(1),pnttg2sol(1));
if (WellDone)
{
NbrSol = 1;
cirsol(1) = Circ.ThisSolution();
if (Circ.IsTheSame1()) { TheSame1(1) = 1; }
else {TheSame1(1) = 0; }
Circ.WhichQualifier(qualifier1(1),qualifier2(1));
Circ.Tangency1(par1sol(1),pararg1(1),pnttg1sol(1));
Circ.Tangency2(par2sol(1),pararg2(1),pnttg2sol(1));
}
}
}
else {
Geom2dGcc_Circ2d2TanOnIter Circ(Qc1,Point->Pnt2d(),OnCurve,
Param1,ParamOn,Tolerance);
WellDone = Circ.IsDone();
NbrSol = 1;
cirsol(1) = Circ.ThisSolution();
if (Circ.IsTheSame1()) { TheSame1(1) = 1; }
else {TheSame1(1) = 0; }
if (Circ.IsTheSame2()) { TheSame2(1) = 1; }
else {TheSame2(1) = 0; }
Circ.WhichQualifier(qualifier1(1),qualifier2(1));
Circ.Tangency1(par1sol(1),pararg1(1),pnttg1sol(1));
Circ.Tangency2(par2sol(1),pararg2(1),pnttg2sol(1));
if (WellDone)
{
NbrSol = 1;
cirsol(1) = Circ.ThisSolution();
if (Circ.IsTheSame1()) { TheSame1(1) = 1; }
else {TheSame1(1) = 0; }
if (Circ.IsTheSame2()) { TheSame2(1) = 1; }
else {TheSame2(1) = 0; }
Circ.WhichQualifier(qualifier1(1),qualifier2(1));
Circ.Tangency1(par1sol(1),pararg1(1),pnttg1sol(1));
Circ.Tangency2(par2sol(1),pararg2(1),pnttg2sol(1));
}
}
}
}
@ -523,21 +595,27 @@ Geom2dGcc_Circ2d2TanOn::
Handle(Geom2d_Circle) CCon = Handle(Geom2d_Circle)::DownCast(Con);
GccAna_Circ2d2TanOn CircAna(pnt1,pnt2,CCon->Circ2d(),Tolerance);
WellDone = CircAna.IsDone();
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
if (WellDone)
{
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
}
Results(CircAna);
}
else {
Handle(Geom2d_Line) LLon = Handle(Geom2d_Line)::DownCast(Con);
GccAna_Circ2d2TanOn CircAna(pnt1,pnt2,LLon->Lin2d(),Tolerance);
WellDone = CircAna.IsDone();
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
if (WellDone)
{
NbrSol = CircAna.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircAna.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircAna);
}
Results(CircAna);
}
}
@ -549,11 +627,14 @@ Geom2dGcc_Circ2d2TanOn::
Geom2dGcc_Circ2d2TanOnGeo CircGeo(Point1->Pnt2d(),Point2->Pnt2d(),
OnCurve,Tolerance);
WellDone = CircGeo.IsDone();
NbrSol = CircGeo.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircGeo.WhichQualifier(i,qualifier1(i),qualifier2(i));
if (WellDone)
{
NbrSol = CircGeo.NbSolutions();
for(Standard_Integer i=1; i<=NbrSol; i++) {
CircGeo.WhichQualifier(i,qualifier1(i),qualifier2(i));
}
Results(CircGeo);
}
Results(CircGeo);
}
}

View File

@ -1975,6 +1975,57 @@ static Standard_Integer OCC26747_3(Draw_Interpretor& theDI,
return 0;
}
#include "Geom2d_BezierCurve.hxx"
#include "Geom2dGcc_QualifiedCurve.hxx"
#include "Geom2dAdaptor_Curve.hxx"
#include "Geom2dAPI_ProjectPointOnCurve.hxx"
#include "Geom2dGcc_Circ2d2TanOn.hxx"
//=======================================================================
//function : OCC27357
//purpose :
//=======================================================================
static Standard_Integer OCC27357(Draw_Interpretor& theDI,
Standard_Integer,
const char **)
{
TColgp_Array1OfPnt2d aPoles(1,3);
aPoles.SetValue(1, gp_Pnt2d(0.,0.));
aPoles.SetValue(2, gp_Pnt2d(0.,1.));
aPoles.SetValue(3, gp_Pnt2d(6.,0.));
Handle(Geom2d_BezierCurve) aCurve1 = new Geom2d_BezierCurve(aPoles);
aPoles.SetValue(2, gp_Pnt2d(0.,1.5));
Handle(Geom2d_BezierCurve) aCurve2 = new Geom2d_BezierCurve(aPoles);
NCollection_List<Standard_Integer> aDuumyList;
int nP = 100;
for(int i = 0 ; i < nP ; i++){
Standard_Real u = i / (nP-1.);
gp_Pnt2d aP1;
gp_Vec2d aTangent;
aCurve1->D1(u,aP1,aTangent);
gp_Vec2d aNormal(-aTangent.Y(),aTangent.X());
Handle(Geom2d_Line) normalLine=new Geom2d_Line(aP1, gp_Dir2d(aNormal));
Geom2dGcc_QualifiedCurve qualifiedC1(Geom2dAdaptor_Curve(aCurve1),GccEnt_unqualified);
Geom2dGcc_QualifiedCurve qualifiedC2(Geom2dAdaptor_Curve(aCurve2),GccEnt_unqualified);
try
{
Geom2dAPI_ProjectPointOnCurve projPc1(aP1, aCurve1);
double g1 = projPc1.LowerDistanceParameter();
Geom2dAPI_ProjectPointOnCurve projPc3(aP1, normalLine);
double g3 = projPc3.LowerDistanceParameter();
Geom2dGcc_Circ2d2TanOn aCircleBuilder(qualifiedC1,qualifiedC2,
Geom2dAdaptor_Curve(normalLine),1e-9,g1,g1,g3);
aDuumyList.Append(aCircleBuilder.NbSolutions());
}
catch(Standard_Failure)
{
theDI << "Exception was caught\n";
}
}
return 0;
}
void QABugs::Commands_20(Draw_Interpretor& theCommands) {
const char *group = "QABugs";
@ -1990,6 +2041,6 @@ void QABugs::Commands_20(Draw_Interpretor& theCommands) {
theCommands.Add ("OCC26747_1", "OCC26747_1 result", __FILE__, OCC26747_1, group);
theCommands.Add ("OCC26747_2", "OCC26747_2 result", __FILE__, OCC26747_2, group);
theCommands.Add ("OCC26747_3", "OCC26747_3 result", __FILE__, OCC26747_3, group);
theCommands.Add ("OCC27357", "OCC27357", __FILE__, OCC27357, group);
return;
}

View File

@ -0,0 +1,16 @@
puts "========"
puts "OCC27357"
puts "========"
puts ""
#################################################################
# Geom2dGcc_Circ2d2TanOn: check status of sub-algorithms to avoid exceptions
#################################################################
pload QAcommands
set info [OCC27357]
if { [regexp "Exception" $info] != 0 } {
puts "Error : Exception was caught"
} else {
puts "OK"
}