1 // Created on: 1993-10-11
2 // Created by: Yves FRICAUD
3 // Copyright (c) 1993-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
6 // This file is part of Open CASCADE Technology software library.
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
18 #include <gp_Pnt2d.hxx>
19 #include <gp_Vec2d.hxx>
20 #include <MAT2d_Connexion.hxx>
21 #include <Standard_Type.hxx>
23 IMPLEMENT_STANDARD_RTTIEXT(MAT2d_Connexion,Standard_Transient)
25 //=============================================================================
28 //=============================================================================
29 MAT2d_Connexion::MAT2d_Connexion()
33 //=============================================================================
36 //=============================================================================
37 MAT2d_Connexion::MAT2d_Connexion(const Standard_Integer LineA,
38 const Standard_Integer LineB,
39 const Standard_Integer ItemA,
40 const Standard_Integer ItemB,
41 const Standard_Real Distance,
42 const Standard_Real ParameterOnA,
43 const Standard_Real ParameterOnB,
44 const gp_Pnt2d& PointA,
45 const gp_Pnt2d& PointB):
46 lineA(LineA), lineB(LineB),itemA(ItemA),itemB(ItemB),
48 parameterOnA(ParameterOnA),parameterOnB(ParameterOnB),
49 pointA(PointA),pointB(PointB)
53 //=============================================================================
54 //function : IndexFirstLine
56 //=============================================================================
57 Standard_Integer MAT2d_Connexion::IndexFirstLine() const
62 //=============================================================================
63 //function : IndexSecondLine
65 //=============================================================================
66 Standard_Integer MAT2d_Connexion::IndexSecondLine() const
71 //=============================================================================
72 //function : IndexItemOnFirst
74 //=============================================================================
75 Standard_Integer MAT2d_Connexion::IndexItemOnFirst()const
80 //=============================================================================
81 //function : IndexItemOnSecond
83 //=============================================================================
84 Standard_Integer MAT2d_Connexion::IndexItemOnSecond() const
89 //=============================================================================
90 //function : ParameterOnFirst
92 //=============================================================================
93 Standard_Real MAT2d_Connexion::ParameterOnFirst() const
98 //=============================================================================
99 //function : ParameterOnSecond
101 //=============================================================================
102 Standard_Real MAT2d_Connexion::ParameterOnSecond() const
107 //=============================================================================
108 //function : PointOnFirst
110 //=============================================================================
111 gp_Pnt2d MAT2d_Connexion::PointOnFirst() const
116 //=============================================================================
117 //function : PointOnSecond
119 //=============================================================================
120 gp_Pnt2d MAT2d_Connexion::PointOnSecond() const
125 //=============================================================================
126 //function : Distance
128 //=============================================================================
129 Standard_Real MAT2d_Connexion::Distance() const
134 //=============================================================================
135 //function : IndexFirstLine
137 //=============================================================================
138 void MAT2d_Connexion::IndexFirstLine(const Standard_Integer anIndex)
143 //=============================================================================
144 //function : IndexSecondLine
146 //=============================================================================
147 void MAT2d_Connexion::IndexSecondLine(const Standard_Integer anIndex)
152 //=============================================================================
153 //function : IndexItemOnFirst
155 //=============================================================================
156 void MAT2d_Connexion::IndexItemOnFirst(const Standard_Integer anIndex)
161 //=============================================================================
162 //function : IndexItemOnSecond
164 //=============================================================================
165 void MAT2d_Connexion::IndexItemOnSecond(const Standard_Integer anIndex)
170 //=============================================================================
171 //function : ParameterOnFirst
173 //=============================================================================
174 void MAT2d_Connexion::ParameterOnFirst(const Standard_Real aParameter)
176 parameterOnA = aParameter;
179 //=============================================================================
180 //function : ParameterOnSecond
182 //=============================================================================
183 void MAT2d_Connexion::ParameterOnSecond(const Standard_Real aParameter)
185 parameterOnB = aParameter;
188 //=============================================================================
189 //function : PointOnFirst
191 //=============================================================================
192 void MAT2d_Connexion::PointOnFirst(const gp_Pnt2d& aPoint)
197 //=============================================================================
198 //function : PointOnSecond
200 //=============================================================================
201 void MAT2d_Connexion::PointOnSecond(const gp_Pnt2d& aPoint)
206 //=============================================================================
207 //function : Distance
209 //=============================================================================
210 void MAT2d_Connexion::Distance(const Standard_Real d)
215 //=============================================================================
218 //=============================================================================
219 Handle(MAT2d_Connexion) MAT2d_Connexion::Reverse() const
221 return new MAT2d_Connexion(lineB,lineA,itemB,itemA,distance,
222 parameterOnB,parameterOnA,pointB,pointA);
225 //=============================================================================
228 //=============================================================================
229 Standard_Boolean MAT2d_Connexion::IsAfter(const Handle(MAT2d_Connexion)& C2,
230 const Standard_Real Sense) const
232 if (lineA != C2->IndexFirstLine()) {
233 return Standard_False;
236 if (itemA > C2->IndexItemOnFirst()) {
237 return Standard_True;
239 else if (itemA == C2->IndexItemOnFirst()){
240 if ( parameterOnA > C2->ParameterOnFirst()) {
241 return Standard_True;
243 else if ( parameterOnA == C2->ParameterOnFirst()) {
244 gp_Vec2d Vect1(C2->PointOnFirst(),C2->PointOnSecond());
245 gp_Vec2d Vect2(pointA,pointB);
246 if ((Vect1^Vect2)*Sense > 0) {
247 return Standard_True;
251 return Standard_False;
254 static void Indent(const Standard_Integer Offset) {
256 for (Standard_Integer i = 0; i <Offset; i++) {std::cout <<" ";}
260 //=============================================================================
263 //=============================================================================
264 void MAT2d_Connexion::Dump (const Standard_Integer ,
265 const Standard_Integer Offset) const
267 Standard_Integer MyOffset = Offset;
269 std::cout<<"MAT2d_Connexion :"<<std::endl;
272 std::cout <<"IndexFirstLine :"<<lineA<<std::endl;
274 std::cout <<"IndexSecondLine :"<<lineB<<std::endl;
276 std::cout <<"IndexItemOnFirst :"<<itemA<<std::endl;
278 std::cout <<"IndexItemOnSecond :"<<itemB<<std::endl;
280 std::cout <<"ParameterOnFirst :"<<parameterOnA<<std::endl;
282 std::cout <<"ParameterOnSecond :"<<parameterOnB<<std::endl;
284 std::cout <<"PointOnFirst :"<<std::endl;
285 std::cout <<" X = "<<pointA.X()<<std::endl;
286 std::cout <<" Y = "<<pointA.Y()<<std::endl;
288 std::cout <<"PointOnSecond :"<<std::endl;
289 std::cout <<" X = "<<pointB.X()<<std::endl;
290 std::cout <<" Y = "<<pointB.Y()<<std::endl;
292 std::cout <<"Distance :"<<distance<<std::endl;