mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-03 17:56:21 +03:00
0031140: Draw command "cirtang" raises exception on the parallel curves
Exception in the algorithm Geom2dGcc_Circ2dTanOnRadGeo raised because the number of solutions exceeded the size of reserved array for solutions. A check has been added to forbid adding solutions outside of allocated place. The similar protection has been done in other algorithms of this package.
This commit is contained in:
parent
15e4e6a23e
commit
4c26106f76
@ -97,10 +97,10 @@ GccAna_Circ2dTanOnRad::
|
||||
else {
|
||||
if (Abs(Radius-R1) < Tol) {
|
||||
if (OnCirc.Distance(center1) < Tol) {
|
||||
cirsol(NbrSol) = C1;
|
||||
NbrSol = 1;
|
||||
cirsol(NbrSol) = C1;
|
||||
// ==============
|
||||
qualifier1(NbrSol) = Qualified1.Qualifier();
|
||||
NbrSol = 1;
|
||||
TheSame1(NbrSol) = 1;
|
||||
pntcen3(NbrSol) = center1;
|
||||
parcen3(NbrSol)=ElCLib::Parameter(OnCirc,pntcen3(NbrSol));
|
||||
@ -126,10 +126,10 @@ GccAna_Circ2dTanOnRad::
|
||||
else {
|
||||
if (Abs(Radius-R1) < Tol) {
|
||||
if (OnCirc.Distance(center1) < Tol) {
|
||||
cirsol(NbrSol) = C1;
|
||||
NbrSol = 1;
|
||||
cirsol(NbrSol) = C1;
|
||||
// ==============
|
||||
qualifier1(NbrSol) = Qualified1.Qualifier();
|
||||
NbrSol = 1;
|
||||
TheSame1(NbrSol) = 1;
|
||||
pntcen3(NbrSol) = center1;
|
||||
parcen3(NbrSol)=ElCLib::Parameter(OnCirc,pntcen3(NbrSol));
|
||||
|
@ -46,24 +46,26 @@
|
||||
#include <Standard_OutOfRange.hxx>
|
||||
#include <StdFail_NotDone.hxx>
|
||||
|
||||
static const Standard_Integer aNbSolMAX = 8;
|
||||
|
||||
Geom2dGcc_Circ2d2TanOnGeo::
|
||||
Geom2dGcc_Circ2d2TanOnGeo (const GccEnt_QualifiedCirc& Qualified1 ,
|
||||
const GccEnt_QualifiedCirc& Qualified2 ,
|
||||
const Geom2dAdaptor_Curve& OnCurv ,
|
||||
const Standard_Real Tolerance ):
|
||||
cirsol(1,8) ,
|
||||
qualifier1(1,8),
|
||||
qualifier2(1,8),
|
||||
TheSame1(1,8) ,
|
||||
TheSame2(1,8) ,
|
||||
pnttg1sol(1,8) ,
|
||||
pnttg2sol(1,8) ,
|
||||
pntcen(1,8) ,
|
||||
par1sol(1,8) ,
|
||||
par2sol(1,8) ,
|
||||
pararg1(1,8) ,
|
||||
pararg2(1,8) ,
|
||||
parcen3(1,8)
|
||||
cirsol(1, aNbSolMAX) ,
|
||||
qualifier1(1, aNbSolMAX),
|
||||
qualifier2(1, aNbSolMAX),
|
||||
TheSame1(1, aNbSolMAX) ,
|
||||
TheSame2(1, aNbSolMAX) ,
|
||||
pnttg1sol(1, aNbSolMAX) ,
|
||||
pnttg2sol(1, aNbSolMAX) ,
|
||||
pntcen(1, aNbSolMAX) ,
|
||||
par1sol(1, aNbSolMAX) ,
|
||||
par2sol(1, aNbSolMAX) ,
|
||||
pararg1(1, aNbSolMAX) ,
|
||||
pararg2(1, aNbSolMAX) ,
|
||||
parcen3(1, aNbSolMAX)
|
||||
{
|
||||
WellDone = Standard_False;
|
||||
Standard_Real thefirst = -100000.;
|
||||
@ -200,7 +202,7 @@ Geom2dGcc_Circ2d2TanOnGeo (const GccEnt_QualifiedCirc& Qualified1 ,
|
||||
}
|
||||
}
|
||||
if (nnsol > 0) {
|
||||
for (Standard_Integer k = 1 ; k <= nnsol ; k++) {
|
||||
for (Standard_Integer k = 1 ; k <= nnsol && NbrSol < aNbSolMAX; k++) {
|
||||
NbrSol++;
|
||||
cirsol(NbrSol) = gp_Circ2d(gp_Ax2d(Center,dirx),Radius(k));
|
||||
// ==========================================================
|
||||
@ -276,19 +278,19 @@ Geom2dGcc_Circ2d2TanOnGeo (const GccEnt_QualifiedCirc& Qualified1 ,
|
||||
const GccEnt_QualifiedLin& Qualified2 ,
|
||||
const Geom2dAdaptor_Curve& OnCurv ,
|
||||
const Standard_Real Tolerance ):
|
||||
cirsol(1,8) ,
|
||||
qualifier1(1,8),
|
||||
qualifier2(1,8),
|
||||
TheSame1(1,8) ,
|
||||
TheSame2(1,8) ,
|
||||
pnttg1sol(1,8) ,
|
||||
pnttg2sol(1,8) ,
|
||||
pntcen(1,8) ,
|
||||
par1sol(1,8) ,
|
||||
par2sol(1,8) ,
|
||||
pararg1(1,8) ,
|
||||
pararg2(1,8) ,
|
||||
parcen3(1,8)
|
||||
cirsol(1, aNbSolMAX) ,
|
||||
qualifier1(1, aNbSolMAX),
|
||||
qualifier2(1, aNbSolMAX),
|
||||
TheSame1(1, aNbSolMAX) ,
|
||||
TheSame2(1, aNbSolMAX) ,
|
||||
pnttg1sol(1, aNbSolMAX) ,
|
||||
pnttg2sol(1, aNbSolMAX) ,
|
||||
pntcen(1, aNbSolMAX) ,
|
||||
par1sol(1, aNbSolMAX) ,
|
||||
par2sol(1, aNbSolMAX) ,
|
||||
pararg1(1, aNbSolMAX) ,
|
||||
pararg2(1, aNbSolMAX) ,
|
||||
parcen3(1, aNbSolMAX)
|
||||
{
|
||||
|
||||
WellDone = Standard_False;
|
||||
@ -353,7 +355,7 @@ parcen3(1,8)
|
||||
}
|
||||
if (Intp.IsDone()) {
|
||||
if (!Intp.IsEmpty()) {
|
||||
for (Standard_Integer j = 1 ; j <= Intp.NbPoints() ; j++) {
|
||||
for (Standard_Integer j = 1 ; j <= Intp.NbPoints() && NbrSol < aNbSolMAX; j++) {
|
||||
gp_Pnt2d Center(Intp.Point(j).Value());
|
||||
Standard_Real dist1 = Center.Distance(center1);
|
||||
// Standard_Integer nbsol = 1;
|
||||
@ -454,19 +456,19 @@ Geom2dGcc_Circ2d2TanOnGeo (const GccEnt_QualifiedLin& Qualified1 ,
|
||||
const GccEnt_QualifiedLin& Qualified2 ,
|
||||
const Geom2dAdaptor_Curve& OnCurv ,
|
||||
const Standard_Real Tolerance ):
|
||||
cirsol(1,8) ,
|
||||
qualifier1(1,8),
|
||||
qualifier2(1,8),
|
||||
TheSame1(1,8) ,
|
||||
TheSame2(1,8) ,
|
||||
pnttg1sol(1,8) ,
|
||||
pnttg2sol(1,8) ,
|
||||
pntcen(1,8) ,
|
||||
par1sol(1,8) ,
|
||||
par2sol(1,8) ,
|
||||
pararg1(1,8) ,
|
||||
pararg2(1,8) ,
|
||||
parcen3(1,8)
|
||||
cirsol(1, aNbSolMAX) ,
|
||||
qualifier1(1, aNbSolMAX),
|
||||
qualifier2(1, aNbSolMAX),
|
||||
TheSame1(1, aNbSolMAX) ,
|
||||
TheSame2(1, aNbSolMAX) ,
|
||||
pnttg1sol(1, aNbSolMAX) ,
|
||||
pnttg2sol(1, aNbSolMAX) ,
|
||||
pntcen(1, aNbSolMAX) ,
|
||||
par1sol(1, aNbSolMAX) ,
|
||||
par2sol(1, aNbSolMAX) ,
|
||||
pararg1(1, aNbSolMAX) ,
|
||||
pararg2(1, aNbSolMAX) ,
|
||||
parcen3(1, aNbSolMAX)
|
||||
{
|
||||
|
||||
WellDone = Standard_False;
|
||||
@ -510,7 +512,7 @@ parcen3(1,8)
|
||||
Intp.Perform(Bis.ThisSolution(i),D1,C2,D2,Tol1,Tol2);
|
||||
if (Intp.IsDone()) {
|
||||
if ((!Intp.IsEmpty())) {
|
||||
for (Standard_Integer j = 1 ; j <= Intp.NbPoints() ; j++) {
|
||||
for (Standard_Integer j = 1 ; j <= Intp.NbPoints() && NbrSol < aNbSolMAX; j++) {
|
||||
gp_Pnt2d Center(Intp.Point(j).Value());
|
||||
Standard_Real dist1 = L1.Distance(Center);
|
||||
Standard_Real dist2 = L2.Distance(Center);
|
||||
@ -609,19 +611,19 @@ Geom2dGcc_Circ2d2TanOnGeo (const GccEnt_QualifiedCirc& Qualified1 ,
|
||||
const gp_Pnt2d& Point2 ,
|
||||
const Geom2dAdaptor_Curve& OnCurv ,
|
||||
const Standard_Real Tolerance ):
|
||||
cirsol(1,8) ,
|
||||
qualifier1(1,8),
|
||||
qualifier2(1,8),
|
||||
TheSame1(1,8) ,
|
||||
TheSame2(1,8) ,
|
||||
pnttg1sol(1,8) ,
|
||||
pnttg2sol(1,8) ,
|
||||
pntcen(1,8) ,
|
||||
par1sol(1,8) ,
|
||||
par2sol(1,8) ,
|
||||
pararg1(1,8) ,
|
||||
pararg2(1,8) ,
|
||||
parcen3(1,8)
|
||||
cirsol(1, aNbSolMAX) ,
|
||||
qualifier1(1, aNbSolMAX),
|
||||
qualifier2(1, aNbSolMAX),
|
||||
TheSame1(1, aNbSolMAX) ,
|
||||
TheSame2(1, aNbSolMAX) ,
|
||||
pnttg1sol(1, aNbSolMAX) ,
|
||||
pnttg2sol(1, aNbSolMAX) ,
|
||||
pntcen(1, aNbSolMAX) ,
|
||||
par1sol(1, aNbSolMAX) ,
|
||||
par2sol(1, aNbSolMAX) ,
|
||||
pararg1(1, aNbSolMAX) ,
|
||||
pararg2(1, aNbSolMAX) ,
|
||||
parcen3(1, aNbSolMAX)
|
||||
{
|
||||
|
||||
WellDone = Standard_False;
|
||||
@ -697,7 +699,7 @@ parcen3(1,8)
|
||||
}
|
||||
if (Intp.IsDone()) {
|
||||
if ((!Intp.IsEmpty())) {
|
||||
for (Standard_Integer j = 1 ; j <= Intp.NbPoints() ; j++) {
|
||||
for (Standard_Integer j = 1 ; j <= Intp.NbPoints() && NbrSol < aNbSolMAX; j++) {
|
||||
gp_Pnt2d Center(Intp.Point(j).Value());
|
||||
Radius = Center.Distance(Point2);
|
||||
Standard_Real dist1 = center1.Distance(Center);
|
||||
@ -771,19 +773,19 @@ Geom2dGcc_Circ2d2TanOnGeo (const GccEnt_QualifiedLin& Qualified1 ,
|
||||
const gp_Pnt2d& Point2 ,
|
||||
const Geom2dAdaptor_Curve& OnCurv ,
|
||||
const Standard_Real Tolerance ):
|
||||
cirsol(1,8) ,
|
||||
qualifier1(1,8),
|
||||
qualifier2(1,8),
|
||||
TheSame1(1,8) ,
|
||||
TheSame2(1,8) ,
|
||||
pnttg1sol(1,8) ,
|
||||
pnttg2sol(1,8) ,
|
||||
pntcen(1,8) ,
|
||||
par1sol(1,8) ,
|
||||
par2sol(1,8) ,
|
||||
pararg1(1,8) ,
|
||||
pararg2(1,8) ,
|
||||
parcen3(1,8)
|
||||
cirsol(1, aNbSolMAX) ,
|
||||
qualifier1(1, aNbSolMAX),
|
||||
qualifier2(1, aNbSolMAX),
|
||||
TheSame1(1, aNbSolMAX) ,
|
||||
TheSame2(1, aNbSolMAX) ,
|
||||
pnttg1sol(1, aNbSolMAX) ,
|
||||
pnttg2sol(1, aNbSolMAX) ,
|
||||
pntcen(1, aNbSolMAX) ,
|
||||
par1sol(1, aNbSolMAX) ,
|
||||
par2sol(1, aNbSolMAX) ,
|
||||
pararg1(1, aNbSolMAX) ,
|
||||
pararg2(1, aNbSolMAX) ,
|
||||
parcen3(1, aNbSolMAX)
|
||||
{
|
||||
|
||||
WellDone = Standard_False;
|
||||
@ -839,7 +841,7 @@ parcen3(1,8)
|
||||
}
|
||||
if (Intp.IsDone()) {
|
||||
if ((!Intp.IsEmpty())) {
|
||||
for (Standard_Integer j = 1 ; j <= Intp.NbPoints() ; j++) {
|
||||
for (Standard_Integer j = 1 ; j <= Intp.NbPoints() && NbrSol < aNbSolMAX; j++) {
|
||||
gp_Pnt2d Center(Intp.Point(j).Value());
|
||||
Standard_Real Radius = L1.Distance(Center);
|
||||
// Standard_Integer nbsol = 1;
|
||||
@ -908,19 +910,19 @@ Geom2dGcc_Circ2d2TanOnGeo (const gp_Pnt2d& Point1 ,
|
||||
const gp_Pnt2d& Point2 ,
|
||||
const Geom2dAdaptor_Curve& OnCurv ,
|
||||
const Standard_Real Tolerance ):
|
||||
cirsol(1,8) ,
|
||||
qualifier1(1,8),
|
||||
qualifier2(1,8),
|
||||
TheSame1(1,8) ,
|
||||
TheSame2(1,8) ,
|
||||
pnttg1sol(1,8) ,
|
||||
pnttg2sol(1,8) ,
|
||||
pntcen(1,8) ,
|
||||
par1sol(1,8) ,
|
||||
par2sol(1,8) ,
|
||||
pararg1(1,8) ,
|
||||
pararg2(1,8) ,
|
||||
parcen3(1,8)
|
||||
cirsol(1, aNbSolMAX) ,
|
||||
qualifier1(1, aNbSolMAX),
|
||||
qualifier2(1, aNbSolMAX),
|
||||
TheSame1(1, aNbSolMAX) ,
|
||||
TheSame2(1, aNbSolMAX) ,
|
||||
pnttg1sol(1, aNbSolMAX) ,
|
||||
pnttg2sol(1, aNbSolMAX) ,
|
||||
pntcen(1, aNbSolMAX) ,
|
||||
par1sol(1, aNbSolMAX) ,
|
||||
par2sol(1, aNbSolMAX) ,
|
||||
pararg1(1, aNbSolMAX) ,
|
||||
pararg2(1, aNbSolMAX) ,
|
||||
parcen3(1, aNbSolMAX)
|
||||
{
|
||||
|
||||
WellDone = Standard_False;
|
||||
@ -947,7 +949,7 @@ parcen3(1,8)
|
||||
Intp.Perform(Bis.ThisSolution(),D1,Cu2,D2,Tol1,Tol2);
|
||||
if (Intp.IsDone()) {
|
||||
if ((!Intp.IsEmpty())) {
|
||||
for (Standard_Integer j = 1 ; j <= Intp.NbPoints() ; j++) {
|
||||
for (Standard_Integer j = 1 ; j <= Intp.NbPoints() && NbrSol < aNbSolMAX; j++) {
|
||||
gp_Pnt2d Center(Intp.Point(j).Value());
|
||||
Standard_Real Radius = Point2.Distance(Center);
|
||||
NbrSol++;
|
||||
|
@ -262,17 +262,17 @@ Geom2dGcc_Circ2d2TanRad::
|
||||
const Handle(Geom2d_Point)& Point ,
|
||||
const Standard_Real Radius ,
|
||||
const Standard_Real Tolerance ):
|
||||
cirsol(1,8) ,
|
||||
qualifier1(1,8),
|
||||
qualifier2(1,8),
|
||||
TheSame1(1,8) ,
|
||||
TheSame2(1,8) ,
|
||||
pnttg1sol(1,8),
|
||||
pnttg2sol(1,8),
|
||||
par1sol(1,8) ,
|
||||
par2sol(1,8) ,
|
||||
pararg1(1,8) ,
|
||||
pararg2(1,8)
|
||||
cirsol(1,aNbSolMAX) ,
|
||||
qualifier1(1,aNbSolMAX),
|
||||
qualifier2(1,aNbSolMAX),
|
||||
TheSame1(1,aNbSolMAX) ,
|
||||
TheSame2(1,aNbSolMAX) ,
|
||||
pnttg1sol(1,aNbSolMAX),
|
||||
pnttg2sol(1,aNbSolMAX),
|
||||
par1sol(1,aNbSolMAX) ,
|
||||
par2sol(1,aNbSolMAX) ,
|
||||
pararg1(1,aNbSolMAX) ,
|
||||
pararg2(1,aNbSolMAX)
|
||||
{
|
||||
if (Radius < 0.) { throw Standard_NegativeValue(); }
|
||||
else {
|
||||
|
@ -181,7 +181,7 @@ pararg2(1,aNbSolMAX)
|
||||
gp_Pnt2d Point(L1.Location().XY()+cote1(jcote1)*Dir.XY());
|
||||
gp_Lin2d Line(Point,L1.Direction()); // ligne avec deport.
|
||||
IntRes2d_Domain D1;
|
||||
for (Standard_Integer jcote2 = 1 ; jcote2 <= nbrcote2 ; jcote2++) {
|
||||
for (Standard_Integer jcote2 = 1; jcote2 <= nbrcote2 && NbrSol < aNbSolMAX; jcote2++) {
|
||||
Handle(Geom2dAdaptor_HCurve) HCu2 = new Geom2dAdaptor_HCurve(Cu2);
|
||||
Adaptor2d_OffsetCurve C2(HCu2,cote2(jcote2));
|
||||
firstparam = Max(C2.FirstParameter(),thefirst);
|
||||
@ -191,7 +191,7 @@ pararg2(1,aNbSolMAX)
|
||||
Geom2dInt_TheIntConicCurveOfGInter Intp(Line,D1,C2,D2,Tol,Tol);
|
||||
if (Intp.IsDone()) {
|
||||
if (!Intp.IsEmpty()) {
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() ; i++) {
|
||||
for (Standard_Integer i = 1; i <= Intp.NbPoints() && NbrSol < aNbSolMAX; i++) {
|
||||
NbrSol++;
|
||||
gp_Pnt2d Center(Intp.Point(i).Value());
|
||||
cirsol(NbrSol) = gp_Circ2d(gp_Ax2d(Center,dirx),Radius);
|
||||
@ -360,7 +360,7 @@ pararg2(1,aNbSolMAX)
|
||||
}
|
||||
Standard_Real R1 = C1.Radius();
|
||||
Geom2dInt_TheIntConicCurveOfGInter Intp;
|
||||
for (Standard_Integer jcote1 = 1 ; jcote1 <= nbrcote1 ; jcote1++) {
|
||||
for (Standard_Integer jcote1 = 1; jcote1 <= nbrcote1 && NbrSol < aNbSolMAX; jcote1++) {
|
||||
gp_Circ2d Circ(C1.XAxis(),R1+cote1(jcote1));
|
||||
IntRes2d_Domain D1(ElCLib::Value(0.,Circ), 0.,Tol,
|
||||
ElCLib::Value(2.*M_PI,Circ),2.*M_PI,Tol);
|
||||
@ -375,7 +375,7 @@ pararg2(1,aNbSolMAX)
|
||||
Intp.Perform(Circ,D1,C2,D2,Tol,Tol);
|
||||
if (Intp.IsDone()) {
|
||||
if (!Intp.IsEmpty()) {
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() ; i++) {
|
||||
for (Standard_Integer i = 1; i <= Intp.NbPoints() && NbrSol < aNbSolMAX; i++) {
|
||||
NbrSol++;
|
||||
gp_Pnt2d Center(Intp.Point(i).Value());
|
||||
cirsol(NbrSol) = gp_Circ2d(gp_Ax2d(Center,dirx),Radius);
|
||||
@ -497,7 +497,7 @@ pararg2(1,aNbSolMAX)
|
||||
ElCLib::Value(M_PI+M_PI,Circ),M_PI+M_PI,Tol);
|
||||
D1.SetEquivalentParameters(0.,M_PI+M_PI);
|
||||
Geom2dInt_TheIntConicCurveOfGInter Intp;
|
||||
for (Standard_Integer jcote1 = 1 ; jcote1 <= nbrcote1 ; jcote1++) {
|
||||
for (Standard_Integer jcote1 = 1; jcote1 <= nbrcote1 && NbrSol < aNbSolMAX; jcote1++) {
|
||||
Handle(Geom2dAdaptor_HCurve) HCu1 = new Geom2dAdaptor_HCurve(Cu1);
|
||||
Adaptor2d_OffsetCurve Cu2(HCu1,cote1(jcote1));
|
||||
firstparam = Max(Cu2.FirstParameter(),thefirst);
|
||||
@ -507,7 +507,7 @@ pararg2(1,aNbSolMAX)
|
||||
Intp.Perform(Circ,D1,Cu2,D2,Tol,Tol);
|
||||
if (Intp.IsDone()) {
|
||||
if (!Intp.IsEmpty()) {
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() ; i++) {
|
||||
for (Standard_Integer i = 1; i <= Intp.NbPoints() && NbrSol < aNbSolMAX; i++) {
|
||||
NbrSol++;
|
||||
gp_Pnt2d Center(Intp.Point(i).Value());
|
||||
cirsol(NbrSol) = gp_Circ2d(gp_Ax2d(Center,dirx),Radius);
|
||||
@ -839,7 +839,7 @@ pararg2(1,aNbSolMAX)
|
||||
IntRes2d_Domain D2C1(C1.Value(firstparam),firstparam,Tol,
|
||||
C1.Value(lastparam),lastparam,Tol);
|
||||
#endif
|
||||
for (Standard_Integer jcote2 = 1 ; jcote2 <= nbrcote2 ; jcote2++) {
|
||||
for (Standard_Integer jcote2 = 1; jcote2 <= nbrcote2 && NbrSol < aNbSolMAX; jcote2++) {
|
||||
Handle(Geom2dAdaptor_HCurve) HCu2 = new Geom2dAdaptor_HCurve(Cu2);
|
||||
Adaptor2d_OffsetCurve C2(HCu2,cote2(jcote2));
|
||||
#ifdef OCCT_DEBUG
|
||||
@ -853,7 +853,7 @@ pararg2(1,aNbSolMAX)
|
||||
if (!Intp.IsEmpty()) {
|
||||
const Standard_Real aSQApproxTol = Precision::Approximation() *
|
||||
Precision::Approximation();
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() ; i++)
|
||||
for (Standard_Integer i = 1; i <= Intp.NbPoints() && NbrSol < aNbSolMAX; i++)
|
||||
{
|
||||
Standard_Real aU0 = Intp.Point(i).ParamOnFirst();
|
||||
Standard_Real aV0 = Intp.Point(i).ParamOnSecond();
|
||||
|
@ -248,22 +248,22 @@ Geom2dGcc_Circ2d3Tan::
|
||||
const Standard_Real Tolerance ,
|
||||
const Standard_Real Param1 ,
|
||||
const Standard_Real Param2 ):
|
||||
cirsol(1,16) ,
|
||||
qualifier1(1,16),
|
||||
qualifier2(1,16),
|
||||
qualifier3(1,16),
|
||||
TheSame1(1,16) ,
|
||||
TheSame2(1,16) ,
|
||||
TheSame3(1,16) ,
|
||||
pnttg1sol(1,16),
|
||||
pnttg2sol(1,16),
|
||||
pnttg3sol(1,16),
|
||||
par1sol(1,16) ,
|
||||
par2sol(1,16) ,
|
||||
par3sol(1,16) ,
|
||||
pararg1(1,16) ,
|
||||
pararg2(1,16) ,
|
||||
pararg3(1,16)
|
||||
cirsol(1,20) ,
|
||||
qualifier1(1,20),
|
||||
qualifier2(1,20),
|
||||
qualifier3(1,20),
|
||||
TheSame1(1,20) ,
|
||||
TheSame2(1,20) ,
|
||||
TheSame3(1,20) ,
|
||||
pnttg1sol(1,20),
|
||||
pnttg2sol(1,20),
|
||||
pnttg3sol(1,20),
|
||||
par1sol(1,20) ,
|
||||
par2sol(1,20) ,
|
||||
par3sol(1,20) ,
|
||||
pararg1(1,20) ,
|
||||
pararg2(1,20) ,
|
||||
pararg3(1,20)
|
||||
{
|
||||
Geom2dAdaptor_Curve C1 = Qualified1.Qualified();
|
||||
Geom2dAdaptor_Curve C2 = Qualified2.Qualified();
|
||||
|
@ -44,6 +44,8 @@
|
||||
#include <StdFail_NotDone.hxx>
|
||||
#include <TColStd_Array1OfReal.hxx>
|
||||
|
||||
static const Standard_Integer aNbSolMAX = 8;
|
||||
|
||||
//=========================================================================
|
||||
// Cercle tangent : a un cercle Qualified1 (C1). +
|
||||
// centre : sur une droite OnLine. +
|
||||
@ -70,14 +72,14 @@ Geom2dGcc_Circ2dTanOnRadGeo (const Geom2dGcc_QCurve& Qualified1,
|
||||
// Initialisation des champs. +
|
||||
//=========================================================================
|
||||
|
||||
cirsol(1,8) ,
|
||||
qualifier1(1,8) ,
|
||||
TheSame1(1,8) ,
|
||||
pnttg1sol(1,8) ,
|
||||
pntcen3(1,8) ,
|
||||
par1sol(1,8) ,
|
||||
pararg1(1,8) ,
|
||||
parcen3(1,8)
|
||||
cirsol(1,aNbSolMAX) ,
|
||||
qualifier1(1,aNbSolMAX) ,
|
||||
TheSame1(1,aNbSolMAX) ,
|
||||
pnttg1sol(1,aNbSolMAX) ,
|
||||
pntcen3(1,aNbSolMAX) ,
|
||||
par1sol(1,aNbSolMAX) ,
|
||||
pararg1(1,aNbSolMAX) ,
|
||||
parcen3(1,aNbSolMAX)
|
||||
{
|
||||
|
||||
//=========================================================================
|
||||
@ -131,7 +133,7 @@ parcen3(1,8)
|
||||
Intp.Perform(OnLine,D1,C2,D2,Tol,Tol);
|
||||
if (Intp.IsDone()) {
|
||||
if (!Intp.IsEmpty()) {
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() ; i++) {
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() && NbrSol < aNbSolMAX; i++) {
|
||||
NbrSol++;
|
||||
gp_Pnt2d Center(Intp.Point(i).Value());
|
||||
cirsol(NbrSol) = gp_Circ2d(gp_Ax2d(Center,dirx),Radius);
|
||||
@ -179,14 +181,14 @@ Geom2dGcc_Circ2dTanOnRadGeo (const Geom2dGcc_QCurve& Qualified1,
|
||||
// Initialisation des champs. +
|
||||
//=========================================================================
|
||||
|
||||
cirsol(1,8) ,
|
||||
qualifier1(1,8) ,
|
||||
TheSame1(1,8) ,
|
||||
pnttg1sol(1,8) ,
|
||||
pntcen3(1,8) ,
|
||||
par1sol(1,8) ,
|
||||
pararg1(1,8) ,
|
||||
parcen3(1,8)
|
||||
cirsol(1,aNbSolMAX) ,
|
||||
qualifier1(1,aNbSolMAX) ,
|
||||
TheSame1(1,aNbSolMAX) ,
|
||||
pnttg1sol(1,aNbSolMAX) ,
|
||||
pntcen3(1,aNbSolMAX) ,
|
||||
par1sol(1,aNbSolMAX) ,
|
||||
pararg1(1,aNbSolMAX) ,
|
||||
parcen3(1,aNbSolMAX)
|
||||
{
|
||||
|
||||
//=========================================================================
|
||||
@ -244,7 +246,7 @@ parcen3(1,8)
|
||||
Intp.Perform(OnCirc,D1,C2,D2,Tol,Tol);
|
||||
if (Intp.IsDone()) {
|
||||
if (!Intp.IsEmpty()) {
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() ; i++) {
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() && NbrSol < aNbSolMAX; i++) {
|
||||
NbrSol++;
|
||||
gp_Pnt2d Center(Intp.Point(i).Value());
|
||||
cirsol(NbrSol) = gp_Circ2d(gp_Ax2d(Center,dirx),Radius);
|
||||
@ -292,14 +294,14 @@ Geom2dGcc_Circ2dTanOnRadGeo (const GccEnt_QualifiedCirc& Qualified1,
|
||||
// Initialisation des champs. +
|
||||
//=========================================================================
|
||||
|
||||
cirsol(1,8) ,
|
||||
qualifier1(1,8) ,
|
||||
TheSame1(1,8) ,
|
||||
pnttg1sol(1,8) ,
|
||||
pntcen3(1,8) ,
|
||||
par1sol(1,8) ,
|
||||
pararg1(1,8) ,
|
||||
parcen3(1,8)
|
||||
cirsol(1,aNbSolMAX) ,
|
||||
qualifier1(1,aNbSolMAX) ,
|
||||
TheSame1(1,aNbSolMAX) ,
|
||||
pnttg1sol(1,aNbSolMAX) ,
|
||||
pntcen3(1,aNbSolMAX) ,
|
||||
par1sol(1,aNbSolMAX) ,
|
||||
pararg1(1,aNbSolMAX) ,
|
||||
parcen3(1,aNbSolMAX)
|
||||
{
|
||||
|
||||
//=========================================================================
|
||||
@ -358,7 +360,7 @@ parcen3(1,8)
|
||||
Intp.Perform(Circ,D1,OnCurv,D2,Tol,Tol);
|
||||
if (Intp.IsDone()) {
|
||||
if (!Intp.IsEmpty()) {
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() ; i++) {
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() && NbrSol < aNbSolMAX; i++) {
|
||||
NbrSol++;
|
||||
gp_Pnt2d Center(Intp.Point(i).Value());
|
||||
cirsol(NbrSol) = gp_Circ2d(gp_Ax2d(Center,dirx),Radius);
|
||||
@ -416,14 +418,14 @@ Geom2dGcc_Circ2dTanOnRadGeo (const GccEnt_QualifiedLin& Qualified1,
|
||||
// Initialisation des champs. +
|
||||
//=========================================================================
|
||||
|
||||
cirsol(1,8) ,
|
||||
qualifier1(1,8) ,
|
||||
TheSame1(1,8) ,
|
||||
pnttg1sol(1,8) ,
|
||||
pntcen3(1,8) ,
|
||||
par1sol(1,8) ,
|
||||
pararg1(1,8) ,
|
||||
parcen3(1,8)
|
||||
cirsol(1,aNbSolMAX) ,
|
||||
qualifier1(1,aNbSolMAX) ,
|
||||
TheSame1(1,aNbSolMAX) ,
|
||||
pnttg1sol(1,aNbSolMAX) ,
|
||||
pntcen3(1,aNbSolMAX) ,
|
||||
par1sol(1,aNbSolMAX) ,
|
||||
pararg1(1,aNbSolMAX) ,
|
||||
parcen3(1,aNbSolMAX)
|
||||
{
|
||||
|
||||
//=========================================================================
|
||||
@ -482,7 +484,7 @@ parcen3(1,8)
|
||||
Intp.Perform(Line,D1,OnCurv,D2,Tol,Tol);
|
||||
if (Intp.IsDone()) {
|
||||
if (!Intp.IsEmpty()) {
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() ; i++) {
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() && NbrSol < aNbSolMAX; i++) {
|
||||
NbrSol++;
|
||||
gp_Pnt2d Center(Intp.Point(i).Value());
|
||||
cirsol(NbrSol) = gp_Circ2d(gp_Ax2d(Center,dirx),Radius);
|
||||
@ -537,14 +539,14 @@ Geom2dGcc_Circ2dTanOnRadGeo (const Geom2dGcc_QCurve& Qualified1,
|
||||
// Initialisation des champs. +
|
||||
//=========================================================================
|
||||
|
||||
cirsol(1,8) ,
|
||||
qualifier1(1,8) ,
|
||||
TheSame1(1,8) ,
|
||||
pnttg1sol(1,8) ,
|
||||
pntcen3(1,8) ,
|
||||
par1sol(1,8) ,
|
||||
pararg1(1,8) ,
|
||||
parcen3(1,8)
|
||||
cirsol(1,aNbSolMAX) ,
|
||||
qualifier1(1,aNbSolMAX) ,
|
||||
TheSame1(1,aNbSolMAX) ,
|
||||
pnttg1sol(1,aNbSolMAX) ,
|
||||
pntcen3(1,aNbSolMAX) ,
|
||||
par1sol(1,aNbSolMAX) ,
|
||||
pararg1(1,aNbSolMAX) ,
|
||||
parcen3(1,aNbSolMAX)
|
||||
{
|
||||
|
||||
//=========================================================================
|
||||
@ -605,7 +607,7 @@ parcen3(1,8)
|
||||
Intp.Perform(C1,D1,C2,D2,Tol,Tol);
|
||||
if (Intp.IsDone()) {
|
||||
if (!Intp.IsEmpty()) {
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() ; i++) {
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() && NbrSol < aNbSolMAX; i++) {
|
||||
NbrSol++;
|
||||
gp_Pnt2d Center(Intp.Point(i).Value());
|
||||
cirsol(NbrSol) = gp_Circ2d(gp_Ax2d(Center,dirx),Radius);
|
||||
@ -653,14 +655,14 @@ Geom2dGcc_Circ2dTanOnRadGeo (const gp_Pnt2d& Point1 ,
|
||||
// Initialisation des champs. +
|
||||
//=========================================================================
|
||||
|
||||
cirsol(1,8) ,
|
||||
qualifier1(1,8) ,
|
||||
TheSame1(1,8) ,
|
||||
pnttg1sol(1,8) ,
|
||||
pntcen3(1,8) ,
|
||||
par1sol(1,8) ,
|
||||
pararg1(1,8) ,
|
||||
parcen3(1,8)
|
||||
cirsol(1,aNbSolMAX) ,
|
||||
qualifier1(1,aNbSolMAX) ,
|
||||
TheSame1(1,aNbSolMAX) ,
|
||||
pnttg1sol(1,aNbSolMAX) ,
|
||||
pntcen3(1,aNbSolMAX) ,
|
||||
par1sol(1,aNbSolMAX) ,
|
||||
pararg1(1,aNbSolMAX) ,
|
||||
parcen3(1,aNbSolMAX)
|
||||
{
|
||||
|
||||
//=========================================================================
|
||||
@ -692,7 +694,7 @@ parcen3(1,8)
|
||||
Geom2dInt_TheIntConicCurveOfGInter Intp(Circ,D1,OnCurv,D2,Tol,Tol);
|
||||
if (Intp.IsDone()) {
|
||||
if (!Intp.IsEmpty()) {
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() ; i++) {
|
||||
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() && NbrSol < aNbSolMAX; i++) {
|
||||
NbrSol++;
|
||||
gp_Pnt2d Center(Intp.Point(i).Value());
|
||||
cirsol(NbrSol) = gp_Circ2d(gp_Ax2d(Center,dirx),Radius);
|
||||
|
9
tests/lowalgos/2dgcc/bug31140
Normal file
9
tests/lowalgos/2dgcc/bug31140
Normal file
@ -0,0 +1,9 @@
|
||||
puts "======================="
|
||||
puts "0031140: Draw command cirtang raises ex-ception on the parallel curves"
|
||||
puts "======================="
|
||||
|
||||
restore [locate_data_file bug31140_edge1.brep] e1
|
||||
restore [locate_data_file bug31140_edge2.brep] e2
|
||||
mk2dcurve c1 e1
|
||||
mk2dcurve c2 e2
|
||||
cirtang res -c c1 -c c2 -r .1
|
Loading…
x
Reference in New Issue
Block a user