1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-05-01 10:26:12 +03:00
occt/src/IntCurve/IntCurve_UserIntConicCurveGen.gxx
2012-03-05 19:23:40 +04:00

778 lines
26 KiB
Plaintext
Executable File

// File: IntCurve_UserIntConicCurveGen.gxx
// Created: Tue Nov 24 14:18:49 1992
// Author: Laurent BUCHARD
// <lbr@topsn3>
#include <IntCurve_IntConicConic.hxx>
#include <gp_Lin2d.hxx>
#include <gp_Circ2d.hxx>
#include <gp_Elips2d.hxx>
#include <gp_Parab2d.hxx>
#include <gp_Hypr2d.hxx>
#include <Precision.hxx>
IntCurve_UserIntConicCurveGen::IntCurve_UserIntConicCurveGen () {
done = Standard_False;
}
//-------------------------------------------------------------------------------------
IntCurve_UserIntConicCurveGen::IntCurve_UserIntConicCurveGen (const gp_Lin2d& Lin1,
const IntRes2d_Domain& D1,
const ThePCurve& C2,
const IntRes2d_Domain& D2,
const Standard_Real TolConf,
const Standard_Real Tol) {
Perform(Lin1,D1,C2,D2,TolConf,Tol);
}
//-------------------------------------------------------------------------------------
IntCurve_UserIntConicCurveGen::IntCurve_UserIntConicCurveGen (const gp_Circ2d& Circ1,
const IntRes2d_Domain& D1,
const ThePCurve& C2,
const IntRes2d_Domain& D2,
const Standard_Real TolConf,
const Standard_Real Tol) {
Perform(Circ1,D1,C2,D2,TolConf,Tol);
}
//-------------------------------------------------------------------------------------
IntCurve_UserIntConicCurveGen::IntCurve_UserIntConicCurveGen (const gp_Parab2d& Parab1,
const IntRes2d_Domain& D1,
const ThePCurve& C2,
const IntRes2d_Domain& D2,
const Standard_Real TolConf,
const Standard_Real Tol) {
Perform(Parab1,D1,C2,D2,TolConf,Tol);
}
//-------------------------------------------------------------------------------------
IntCurve_UserIntConicCurveGen::IntCurve_UserIntConicCurveGen (const gp_Elips2d& Elips1,
const IntRes2d_Domain& D1,
const ThePCurve& C2,
const IntRes2d_Domain& D2,
const Standard_Real TolConf,
const Standard_Real Tol) {
Perform(Elips1,D1,C2,D2,TolConf,Tol);
}
//-------------------------------------------------------------------------------------
IntCurve_UserIntConicCurveGen::IntCurve_UserIntConicCurveGen (const gp_Hypr2d& Hyper1,
const IntRes2d_Domain& D1,
const ThePCurve& C2,
const IntRes2d_Domain& D2,
const Standard_Real TolConf,
const Standard_Real Tol) {
Perform(Hyper1,D1,C2,D2,TolConf,Tol);
}
//-------------------------------------------------------------------------------------
//----------------------------------------------------------------------
void IntCurve_UserIntConicCurveGen::Perform (const gp_Lin2d& Lin1,
const IntRes2d_Domain& D1,
const ThePCurve& C2,
const IntRes2d_Domain& D2,
const Standard_Real TolConf,
const Standard_Real Tol) {
this->ResetFields();
Standard_Integer NbInterC2 = ThePCurveTool::NbIntervals(C2);
if(NbInterC2 > 1) {
Standard_Real ParamInf,ParamSup;
Standard_Real D2FirstParam = D2.FirstParameter();
Standard_Real D2LastParam = D2.LastParameter();
Standard_Boolean Ok = Standard_True;
param1inf = (D1.HasFirstPoint()) ? D1.FirstParameter() : -Precision::Infinite();
param1sup = (D1.HasLastPoint()) ? D1.LastParameter() : Precision::Infinite();
param2inf = ThePCurveTool::FirstParameter(C2);
param2sup = ThePCurveTool::LastParameter(C2);
IntRes2d_Domain DomainC2NumInter;
TColStd_Array1OfReal Tab2(1,NbInterC2+1);
ThePCurveTool::Intervals(C2,Tab2);
for(Standard_Integer NumInterC2=1; Ok && (NumInterC2 <= NbInterC2);NumInterC2++) {
ThePCurveTool::GetInterval(C2,NumInterC2,Tab2,ParamInf,ParamSup);
if((ParamInf > D2LastParam)||(ParamSup < D2FirstParam)) Ok=Standard_False;
else {
if(ParamInf < D2FirstParam) ParamInf = D2FirstParam;
if(ParamSup > D2LastParam) ParamSup = D2LastParam;
if((ParamSup - ParamInf) > RealEpsilon()) {
DomainC2NumInter.SetValues(ThePCurveTool::Value(C2,ParamInf),
ParamInf,
D2.FirstTolerance(),
ThePCurveTool::Value(C2,ParamSup),
ParamSup,
D2.LastTolerance());
InternalPerform(Lin1,D1,C2,DomainC2NumInter,TolConf,Tol,Standard_True);
}
}
}
}
else {
InternalPerform(Lin1,D1,C2,D2,TolConf,Tol,Standard_False);
}
}
//--------------------------------------------------------------------------------
void IntCurve_UserIntConicCurveGen::Perform (const gp_Circ2d& Circ1,
const IntRes2d_Domain& D1,
const ThePCurve& C2,
const IntRes2d_Domain& D2,
const Standard_Real TolConf,
const Standard_Real Tol) {
this->ResetFields();
Standard_Integer NbInterC2 = ThePCurveTool::NbIntervals(C2);
if(NbInterC2 > 1) {
Standard_Real ParamInf,ParamSup;
Standard_Real D2FirstParam = D2.FirstParameter();
Standard_Real D2LastParam = D2.LastParameter();
Standard_Boolean Ok = Standard_True;
param1inf = (D1.HasFirstPoint()) ? D1.FirstParameter() : -Precision::Infinite();
param1sup = (D1.HasLastPoint()) ? D1.LastParameter() : Precision::Infinite();
param2inf = ThePCurveTool::FirstParameter(C2);
param2sup = ThePCurveTool::LastParameter(C2);
IntRes2d_Domain DomainC2NumInter;
TColStd_Array1OfReal Tab2(1,NbInterC2+1);
ThePCurveTool::Intervals(C2,Tab2);
for(Standard_Integer NumInterC2=1; Ok && (NumInterC2<=NbInterC2);NumInterC2++) {
ThePCurveTool::GetInterval(C2,NumInterC2,Tab2,ParamInf,ParamSup);
if((ParamInf > D2LastParam)||(ParamSup < D2FirstParam)) Ok=Standard_False;
else {
if(ParamInf < D2FirstParam) ParamInf = D2FirstParam;
if(ParamSup > D2LastParam) ParamSup = D2LastParam;
if((ParamSup - ParamInf) > RealEpsilon()) {
DomainC2NumInter.SetValues(ThePCurveTool::Value(C2,ParamInf),
ParamInf,
D2.FirstTolerance(),
ThePCurveTool::Value(C2,ParamSup),
ParamSup,
D2.LastTolerance());
InternalPerform(Circ1,D1,C2,DomainC2NumInter,TolConf,Tol,Standard_True);
}
}
}
}
else {
InternalPerform(Circ1,D1,C2,D2,TolConf,Tol,Standard_False);
}
}
//--------------------------------------------------------------------------------
void IntCurve_UserIntConicCurveGen::Perform (const gp_Parab2d& Parab1,
const IntRes2d_Domain& D1,
const ThePCurve& C2,
const IntRes2d_Domain& D2,
const Standard_Real TolConf,
const Standard_Real Tol) {
this->ResetFields();
Standard_Integer NbInterC2 = ThePCurveTool::NbIntervals(C2);
if(NbInterC2 > 1) {
Standard_Real ParamInf,ParamSup;
Standard_Real D2FirstParam = D2.FirstParameter();
Standard_Real D2LastParam = D2.LastParameter();
Standard_Boolean Ok = Standard_True;
param1inf = (D1.HasFirstPoint()) ? D1.FirstParameter() : -Precision::Infinite();
param1sup = (D1.HasLastPoint()) ? D1.LastParameter() : Precision::Infinite();
param2inf = ThePCurveTool::FirstParameter(C2);
param2sup = ThePCurveTool::LastParameter(C2);
IntRes2d_Domain DomainC2NumInter;
TColStd_Array1OfReal Tab2(1,NbInterC2+1);
ThePCurveTool::Intervals(C2,Tab2);
for(Standard_Integer NumInterC2=1; Ok && (NumInterC2<=NbInterC2);NumInterC2++) {
ThePCurveTool::GetInterval(C2,NumInterC2,Tab2,ParamInf,ParamSup);
if((ParamInf > D2LastParam)||(ParamSup < D2FirstParam)) Ok=Standard_False;
else {
if(ParamInf < D2FirstParam) ParamInf = D2FirstParam;
if(ParamSup > D2LastParam) ParamSup = D2LastParam;
if((ParamSup - ParamInf) > RealEpsilon()) {
DomainC2NumInter.SetValues(ThePCurveTool::Value(C2,ParamInf),
ParamInf,
D2.FirstTolerance(),
ThePCurveTool::Value(C2,ParamSup),
ParamSup,
D2.LastTolerance());
InternalPerform(Parab1,D1,C2,DomainC2NumInter,TolConf,Tol,Standard_True);
}
}
}
}
else {
InternalPerform(Parab1,D1,C2,D2,TolConf,Tol,Standard_False);
}
}
//--------------------------------------------------------------------------------
void IntCurve_UserIntConicCurveGen::Perform (const gp_Elips2d& Elips1,
const IntRes2d_Domain& D1,
const ThePCurve& C2,
const IntRes2d_Domain& D2,
const Standard_Real TolConf,
const Standard_Real Tol) {
this->ResetFields();
Standard_Integer NbInterC2 = ThePCurveTool::NbIntervals(C2);
if(NbInterC2 > 1) {
Standard_Real ParamInf,ParamSup;
Standard_Real D2FirstParam = D2.FirstParameter();
Standard_Real D2LastParam = D2.LastParameter();
Standard_Boolean Ok = Standard_True;
param1inf = (D1.HasFirstPoint()) ? D1.FirstParameter() : -Precision::Infinite();
param1sup = (D1.HasLastPoint()) ? D1.LastParameter() : Precision::Infinite();
param2inf = ThePCurveTool::FirstParameter(C2);
param2sup = ThePCurveTool::LastParameter(C2);
IntRes2d_Domain DomainC2NumInter;
TColStd_Array1OfReal Tab2(1,NbInterC2+1);
ThePCurveTool::Intervals(C2,Tab2);
for(Standard_Integer NumInterC2=1; Ok && (NumInterC2<=NbInterC2);NumInterC2++) {
ThePCurveTool::GetInterval(C2,NumInterC2,Tab2,ParamInf,ParamSup);
if((ParamInf > D2LastParam)||(ParamSup < D2FirstParam)) Ok=Standard_False;
else {
if(ParamInf < D2FirstParam) ParamInf = D2FirstParam;
if(ParamSup > D2LastParam) ParamSup = D2LastParam;
if((ParamSup - ParamInf) > RealEpsilon()) {
DomainC2NumInter.SetValues(ThePCurveTool::Value(C2,ParamInf),
ParamInf,
D2.FirstTolerance(),
ThePCurveTool::Value(C2,ParamSup),
ParamSup,
D2.LastTolerance());
InternalPerform(Elips1,D1,C2,DomainC2NumInter,TolConf,Tol,Standard_True);
}
}
}
}
else {
InternalPerform(Elips1,D1,C2,D2,TolConf,Tol,Standard_False);
}
}
//--------------------------------------------------------------------------------
void IntCurve_UserIntConicCurveGen::Perform (const gp_Hypr2d& Hyper1,
const IntRes2d_Domain& D1,
const ThePCurve& C2,
const IntRes2d_Domain& D2,
const Standard_Real TolConf,
const Standard_Real Tol) {
this->ResetFields();
Standard_Integer NbInterC2 = ThePCurveTool::NbIntervals(C2);
if(NbInterC2 > 1) {
Standard_Real ParamInf,ParamSup;
Standard_Real D2FirstParam = D2.FirstParameter();
Standard_Real D2LastParam = D2.LastParameter();
Standard_Boolean Ok = Standard_True;
param1inf = (D1.HasFirstPoint()) ? D1.FirstParameter() : -Precision::Infinite();
param1sup = (D1.HasLastPoint()) ? D1.LastParameter() : Precision::Infinite();
param2inf = ThePCurveTool::FirstParameter(C2);
param2sup = ThePCurveTool::LastParameter(C2);
IntRes2d_Domain DomainC2NumInter;
TColStd_Array1OfReal Tab2(1,NbInterC2+1);
ThePCurveTool::Intervals(C2,Tab2);
for(Standard_Integer NumInterC2=1; Ok && (NumInterC2<=NbInterC2);NumInterC2++) {
ThePCurveTool::GetInterval(C2,NumInterC2,Tab2,ParamInf,ParamSup);
if((ParamInf > D2LastParam)||(ParamSup < D2FirstParam)) Ok=Standard_False;
else {
if(ParamInf < D2FirstParam) ParamInf = D2FirstParam;
if(ParamSup > D2LastParam) ParamSup = D2LastParam;
if((ParamSup - ParamInf) > RealEpsilon()) {
DomainC2NumInter.SetValues(ThePCurveTool::Value(C2,ParamInf),
ParamInf,
D2.FirstTolerance(),
ThePCurveTool::Value(C2,ParamSup),
ParamSup,
D2.LastTolerance());
InternalPerform(Hyper1,D1,C2,DomainC2NumInter,TolConf,Tol,Standard_True);
}
}
}
}
else {
InternalPerform(Hyper1,D1,C2,D2,TolConf,Tol,Standard_False);
}
}
//----------------------------------------------------------------------
//-- InternalPerform
//-- Suppose des Courbes Lin...Hypr
//-- Si Composite == True
//-- Les Resultats sont Ajoutes
//-- Sinon
//-- Les Resultats sont Copies
//----------------------------------------------------------------------
void IntCurve_UserIntConicCurveGen::InternalPerform (const gp_Lin2d& Lin1,
const IntRes2d_Domain& D1,
const ThePCurve& C2,
const IntRes2d_Domain& D2,
const Standard_Real TolConf,
const Standard_Real Tol,
const Standard_Boolean Composite) {
GeomAbs_CurveType typ2 = ThePCurveTool::TheType(C2);
switch (typ2) {
case GeomAbs_Line:
{
intconiconi.SetReversedParameters(Standard_False);
intconiconi.Perform(Lin1,D1,ThePCurveTool::Line(C2),D2,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Circle:
{
intconiconi.SetReversedParameters(Standard_False);
intconiconi.Perform(Lin1,D1,ThePCurveTool::Circle(C2),D2,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Ellipse:
{
intconiconi.SetReversedParameters(Standard_False);
intconiconi.Perform(Lin1,D1,ThePCurveTool::Ellipse(C2),D2,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Parabola:
{
intconiconi.SetReversedParameters(Standard_False);
intconiconi.Perform(Lin1,D1,ThePCurveTool::Parabola(C2),D2,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Hyperbola:
{
intconiconi.SetReversedParameters(Standard_False);
intconiconi.Perform(Lin1,D1,ThePCurveTool::Hyperbola(C2),D2,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_BezierCurve:
case GeomAbs_BSplineCurve:
case GeomAbs_OtherCurve:
{
intconicurv.SetReversedParameters(Standard_False);
intconicurv.Perform(Lin1,D1,C2,D2,TolConf,Tol);
if(Composite) { this->Append(intconicurv,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconicurv); }
}
break;
}
}
//----------------------------------------------------------------------
void IntCurve_UserIntConicCurveGen::InternalPerform (const gp_Circ2d& Circ1,
const IntRes2d_Domain& D1,
const ThePCurve& C2,
const IntRes2d_Domain& D2,
const Standard_Real TolConf,
const Standard_Real Tol,
const Standard_Boolean Composite) {
GeomAbs_CurveType typ2 = ThePCurveTool::TheType(C2);
switch (typ2) {
case GeomAbs_Line:
{
intconiconi.SetReversedParameters(Standard_True);
intconiconi.Perform(ThePCurveTool::Line(C2),D2,Circ1,D1,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Circle:
{
intconiconi.SetReversedParameters(Standard_False);
intconiconi.Perform(Circ1,D1,ThePCurveTool::Circle(C2),D2,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Ellipse:
{
intconiconi.SetReversedParameters(Standard_False);
intconiconi.Perform(Circ1,D1,ThePCurveTool::Ellipse(C2),D2,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Parabola:
{
intconiconi.SetReversedParameters(Standard_False);
intconiconi.Perform(Circ1,D1,ThePCurveTool::Parabola(C2),D2,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Hyperbola:
{
intconiconi.SetReversedParameters(Standard_False);
intconiconi.Perform(Circ1,D1,ThePCurveTool::Hyperbola(C2),D2,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_BezierCurve:
case GeomAbs_BSplineCurve:
case GeomAbs_OtherCurve:
{
intconicurv.SetReversedParameters(Standard_False);
intconicurv.Perform(Circ1,D1,C2,D2,TolConf,Tol);
if(Composite) { this->Append(intconicurv,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconicurv); }
}
break;
}
}
//----------------------------------------------------------------------
void IntCurve_UserIntConicCurveGen::InternalPerform (const gp_Elips2d& Elips1,
const IntRes2d_Domain& D1,
const ThePCurve& C2,
const IntRes2d_Domain& D2,
const Standard_Real TolConf,
const Standard_Real Tol,
const Standard_Boolean Composite) {
GeomAbs_CurveType typ2 = ThePCurveTool::TheType(C2);
switch (typ2) {
case GeomAbs_Line:
{
intconiconi.SetReversedParameters(Standard_True);
intconiconi.Perform(ThePCurveTool::Line(C2),D2,Elips1,D1,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Circle:
{
intconiconi.SetReversedParameters(Standard_True);
intconiconi.Perform(ThePCurveTool::Circle(C2),D2,Elips1,D1,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Ellipse:
{
intconiconi.SetReversedParameters(Standard_False);
intconiconi.Perform(Elips1,D1,ThePCurveTool::Ellipse(C2),D2,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Parabola:
{
intconiconi.SetReversedParameters(Standard_False);
intconiconi.Perform(Elips1,D1,ThePCurveTool::Parabola(C2),D2,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Hyperbola:
{
intconiconi.SetReversedParameters(Standard_False);
intconiconi.Perform(Elips1,D1,ThePCurveTool::Hyperbola(C2),D2,
TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_BezierCurve:
case GeomAbs_BSplineCurve:
case GeomAbs_OtherCurve:
{
intconicurv.SetReversedParameters(Standard_False);
intconicurv.Perform(Elips1,D1,C2,D2,TolConf,Tol);
if(Composite) { this->Append(intconicurv,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconicurv); }
}
break;
}
}
//----------------------------------------------------------------------
void IntCurve_UserIntConicCurveGen::InternalPerform (const gp_Parab2d& Parab1,
const IntRes2d_Domain& D1,
const ThePCurve& C2,
const IntRes2d_Domain& D2,
const Standard_Real TolConf,
const Standard_Real Tol,
const Standard_Boolean Composite) {
GeomAbs_CurveType typ2 = ThePCurveTool::TheType(C2);
switch (typ2) {
case GeomAbs_Line:
{
intconiconi.SetReversedParameters(Standard_True);
intconiconi.Perform(ThePCurveTool::Line(C2),D2,Parab1,D1,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Circle:
{
intconiconi.SetReversedParameters(Standard_True);
intconiconi.Perform(ThePCurveTool::Circle(C2),D2,Parab1,D1,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Ellipse:
{
intconiconi.SetReversedParameters(Standard_True);
intconiconi.Perform(ThePCurveTool::Ellipse(C2),D2,Parab1,D1,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Parabola:
{
intconiconi.SetReversedParameters(Standard_False);
intconiconi.Perform(Parab1,D1,ThePCurveTool::Parabola(C2),D2,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Hyperbola:
{
intconiconi.SetReversedParameters(Standard_False);
intconiconi.Perform(Parab1,D1,ThePCurveTool::Hyperbola(C2),D2,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_BezierCurve:
case GeomAbs_BSplineCurve:
case GeomAbs_OtherCurve:
{
intconicurv.SetReversedParameters(Standard_False);
intconicurv.Perform(Parab1,D1,C2,D2,TolConf,Tol);
if(Composite) { this->Append(intconicurv,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconicurv); }
}
break;
}
}
//----------------------------------------------------------------------
void IntCurve_UserIntConicCurveGen::InternalPerform (const gp_Hypr2d& Hyper1,
const IntRes2d_Domain& D1,
const ThePCurve& C2,
const IntRes2d_Domain& D2,
const Standard_Real TolConf,
const Standard_Real Tol,
const Standard_Boolean Composite) {
GeomAbs_CurveType typ2 = ThePCurveTool::TheType(C2);
switch (typ2) {
case GeomAbs_Line:
{
intconiconi.SetReversedParameters(Standard_True);
intconiconi.Perform(ThePCurveTool::Line(C2),D2,Hyper1,D1,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Circle:
{
intconiconi.SetReversedParameters(Standard_True);
intconiconi.Perform(ThePCurveTool::Circle(C2),D2,Hyper1,D1,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Ellipse:
{
intconiconi.SetReversedParameters(Standard_True);
intconiconi.Perform(ThePCurveTool::Ellipse(C2),D2,Hyper1,D1,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Parabola:
{
intconiconi.SetReversedParameters(Standard_True);
intconiconi.Perform(ThePCurveTool::Parabola(C2),D2,Hyper1,D1,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_Hyperbola:
{
intconiconi.SetReversedParameters(Standard_False);
intconiconi.Perform(Hyper1,D1,ThePCurveTool::Hyperbola(C2),D2,TolConf,Tol);
if(Composite) { this->Append(intconiconi,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconiconi); }
}
break;
case GeomAbs_BezierCurve:
case GeomAbs_BSplineCurve:
case GeomAbs_OtherCurve:
{
intconicurv.SetReversedParameters(Standard_False);
intconicurv.Perform(Hyper1,D1,
C2,D2,TolConf,Tol);
if(Composite) { this->Append(intconicurv,
param1inf,
param1sup,
param2inf,
param2sup); }
else { this->SetValues(intconicurv); }
}
break;
}
}
//--------------------------------------------------------------------------------