summaryrefslogtreecommitdiff
path: root/src/IntPolyh/IntPolyh_StartPoint.cxx
blob: 7cb84f4a90439b907dc8a2fe06427e5ee15a4ef7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
// File:	IntPolyh_StartPoint.cxx
// Created:	Tue Apr  6 10:27:56 1999
// Author:	Fabrice SERVANT
//		<fst@cleox.paris1.matra-dtv.fr>


#include <IntPolyh_StartPoint.ixx>
//#include <Precision.hxx>
#include <stdio.h>

#define MyConfusionPrecision 10.0e-12

IntPolyh_StartPoint::IntPolyh_StartPoint() : x(0),y(0),z(0),u1(0),v1(0),u2(0),v2(0),
lambda1(-1.0),lambda2(-1.0),angle(-2.0),t1(-1),e1(-2),t2(-1),e2(-2),
chainlist(-1) {
}

IntPolyh_StartPoint::IntPolyh_StartPoint(const Standard_Real _x,
					 const Standard_Real _y,
					 const Standard_Real _z,
					 const Standard_Real _u1,
					 const Standard_Real _v1,
					 const Standard_Real _u2,
					 const Standard_Real _v2,
					 const Standard_Integer _t1,
					 const Standard_Integer _e1,
					 const Standard_Real _lambda1,
					 const Standard_Integer _t2,
					 const Standard_Integer _e2,
					 const Standard_Real _lambda2,
					 const Standard_Integer _chainlist):angle(-2.0) { 
  x=_x; y=_y; z=_z; 
  u1=_u1; v1=_v1; 
  u2=_u2; v2=_v2; 
  t1=_t1; e1=_e1; lambda1=_lambda1; 
  t2=_t2; e2=_e2; lambda2=_lambda2; 
  chainlist=_chainlist;
}

Standard_Real IntPolyh_StartPoint::X() const { return(x); } 
Standard_Real IntPolyh_StartPoint::Y() const { return(y); }  
Standard_Real IntPolyh_StartPoint::Z() const { return(z); } 
Standard_Real IntPolyh_StartPoint::U1() const { return(u1); } 
Standard_Real IntPolyh_StartPoint::V1() const { return(v1); }
Standard_Real IntPolyh_StartPoint::U2() const { return(u2); } 
Standard_Real IntPolyh_StartPoint::V2() const { return(v2); }
Standard_Integer IntPolyh_StartPoint::T1() const { return(t1); }
Standard_Integer IntPolyh_StartPoint::E1() const { return(e1); }
Standard_Real IntPolyh_StartPoint::Lambda1() const { return(lambda1); }
Standard_Integer IntPolyh_StartPoint::T2() const { return(t2); }
Standard_Integer IntPolyh_StartPoint::E2() const { return(e2); }
Standard_Real IntPolyh_StartPoint::Lambda2() const { return(lambda2); }
Standard_Integer IntPolyh_StartPoint::ChainList() const { return(chainlist); }
Standard_Real IntPolyh_StartPoint::GetAngle() const { return(angle); }

Standard_Integer IntPolyh_StartPoint::GetEdgePoints(const IntPolyh_Triangle &Triangle,
						    Standard_Integer &FirstEdgePoint, 
						    Standard_Integer &SecondEdgePoint,
						    Standard_Integer &LastPoint) const {
 Standard_Integer SurfID;
 if(e1!=-1) {
   if(e1==1)      { FirstEdgePoint = Triangle.FirstPoint();  SecondEdgePoint = Triangle.SecondPoint(); 
		    LastPoint = Triangle.ThirdPoint();  }
   else if(e1==2) { FirstEdgePoint = Triangle.SecondPoint(); SecondEdgePoint = Triangle.ThirdPoint();  
		    LastPoint = Triangle.FirstPoint();  }
   else if(e1==3) { FirstEdgePoint = Triangle.ThirdPoint();  SecondEdgePoint = Triangle.FirstPoint();
		    LastPoint = Triangle.SecondPoint();}
   SurfID=1;
 }
 else if(e2!=-1) {
   if(e2==1)      { FirstEdgePoint = Triangle.FirstPoint();  SecondEdgePoint = Triangle.SecondPoint();
		    LastPoint = Triangle.ThirdPoint();}
   else if(e2==2) { FirstEdgePoint = Triangle.SecondPoint(); SecondEdgePoint = Triangle.ThirdPoint();
		    LastPoint = Triangle.FirstPoint();}
   else if(e2==3) { FirstEdgePoint = Triangle.ThirdPoint();  SecondEdgePoint = Triangle.FirstPoint();
		    LastPoint = Triangle.SecondPoint();}
   SurfID=2;
 }
 else SurfID=0;
 return(SurfID) ;
}

void IntPolyh_StartPoint::Equal(const IntPolyh_StartPoint &StPt) {
  x         = StPt.x;
  y         = StPt.y;
  z         = StPt.z;
  u1        = StPt.u1;
  v1        = StPt.v1;
  u2        = StPt.u2;
  v2        = StPt.v2;
  t1        = StPt.t1;
  e1        = StPt.e1;
  lambda1   = StPt.lambda1;
  t2        = StPt.t2;
  e2        = StPt.e2;
  lambda2   = StPt.lambda2;
  angle     = StPt.angle;
  chainlist = StPt.chainlist;
}

void IntPolyh_StartPoint::SetXYZ(const Standard_Real XX,
				 const Standard_Real YY,
				 const Standard_Real ZZ) {
  x=XX; y=YY; z=ZZ;
}

void IntPolyh_StartPoint::SetUV1(const Standard_Real UU1,
				 const Standard_Real VV1) {
  u1=UU1; v1=VV1;
}

void IntPolyh_StartPoint::SetUV2(const Standard_Real UU2,
				 const Standard_Real VV2) {
  u2=UU2; v2=VV2;
}

void IntPolyh_StartPoint::SetEdge1(const Standard_Integer IE1) {
  e1=IE1;
}

void IntPolyh_StartPoint::SetLambda1(const Standard_Real LAM1) {
  lambda1=LAM1;
}

void IntPolyh_StartPoint::SetEdge2(const Standard_Integer IE2) {
  e2=IE2;
}

void IntPolyh_StartPoint::SetLambda2(const Standard_Real LAM2) {
  lambda2=LAM2;
}

void IntPolyh_StartPoint::SetCoupleValue(const Standard_Integer IT1,
					  const Standard_Integer IT2) {
  t1=IT1;
  t2=IT2;
}

void IntPolyh_StartPoint::SetAngle(const Standard_Real Ang) {
  angle=Ang;
}

void IntPolyh_StartPoint::SetChainList(const Standard_Integer ChList) {
  chainlist=ChList;
}

Standard_Integer IntPolyh_StartPoint::CheckSameSP(const IntPolyh_StartPoint & SP) const {
///Renvoit 1 si monSP==SP
  Standard_Integer Test=0;
  if( ( (e1>=-1)&&(e1==SP.e1))||((e2>=-1)&&(e2==SP.e2)) ) {
    ///Les edges sont definis

      if( ( (lambda1>-MyConfusionPrecision)&&(Abs(lambda1-SP.lambda1)<MyConfusionPrecision) ) //lambda1!=-1 && lambda1==SP.lambda2
	||( (lambda2>-MyConfusionPrecision)&&(Abs(lambda2-SP.lambda2)<MyConfusionPrecision) ) )
	Test=1;
      //if( (Abs(u1-SP.u1)<MyConfusionPrecision)&&(Abs(v1-SP.v1)<MyConfusionPrecision) )
	//Test=1;

    }
  if( (Test==0) && ((e1==-1)||(e2==-1)) ) {
    ///monSP est un sommet
      if( (Abs(SP.u1-u1)<MyConfusionPrecision)&&(Abs(SP.v1-v1)<MyConfusionPrecision) )
	Test=1;
    }
  else if( (e1==-2)&&(e2==-2) ) {
    Dump(00200);
    SP.Dump(00201);
    printf("e1==-2 & e2==-2 Can't Check\n");
  }
  /*  if( (Abs(u1-SP.u1)<MyConfusionPrecision)&&(Abs(v1-SP.v1)<MyConfusionPrecision) )
      Test=1;*/
  return(Test);
}

void IntPolyh_StartPoint::Dump() const{ 
  printf("\nPoint : x=%+8.3eg y=%+8.3eg z=%+8.3eg u1=%+8.3eg v1=%+8.3eg u2=%+8.3eg v2=%+8.3eg\n",
	 x,y,z,u1,v1,u2,v2);
  printf("Triangle S1:%d Edge S1:%d Lambda1:%f Triangle S2:%d Edge S2:%d Lambda2:%f\n",t1,e1,lambda1,t2,e2,lambda2);
  printf("Angle: %f List Number: %d\n",angle,chainlist);
}

void IntPolyh_StartPoint::Dump(const Standard_Integer i) const{
  printf("\nPoint(%d) : x=%+8.3eg y=%+8.3eg z=%+8.3eg u1=%+8.3eg v1=%+8.3eg u2=%+8.3eg v2=%+8.3eg\n",
	 i,x,y,z,u1,v1,u2,v2);
  printf("Triangle S1:%d Edge S1:%d Lambda1:%f Triangle S2:%d Edge S2:%d Lambda2:%f\n",t1,e1,lambda1,t2,e2,lambda2);
  printf("Angle: %f List Number: %d\n",angle,chainlist);
}