00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "g-map-vertex.hh"
00026 #include "geometry.hh"
00027 using namespace GMap3d;
00028
00029 CDart * CGMapVertex::materializeBarycenter(int AMarkNumber)
00030 {
00031 return addMapDart(barycenter(AMarkNumber));
00032 }
00033
00034 CDart * CGMapVertex::materializeAxe(CDart * ADart1, CDart * ADart2)
00035 {
00036 assert(ADart1!=NULL && ADart2!=NULL);
00037 assert(!isSameOrbit(ADart1,ADart2, ORBIT_VERTEX));
00038
00039 ADart1= addMapDart(*findVertex(ADart1));
00040 ADart2= addMapDart(*findVertex(ADart2));
00041 linkAlpha0(ADart1,ADart2);
00042 return ADart2;
00043 }
00044
00045 CDart * CGMapVertex::materializePlane(CDart * ADart1, CDart * ADart2, CDart * ADart3)
00046 {
00047 assert(ADart1!=NULL && ADart2!=NULL && ADart3!=NULL);
00048 assert(!isSameOrbit(ADart1,ADart2, ORBIT_VERTEX) &&
00049 !isSameOrbit(ADart1,ADart3, ORBIT_VERTEX) &&
00050 !isSameOrbit(ADart2,ADart3, ORBIT_VERTEX));
00051
00052 CDart * d= createTopoTriangle();
00053
00054 setVertex( d , *findVertex(ADart3));
00055 setVertex(alpha01 (d), *findVertex(ADart2));
00056 setVertex(alpha0101(d), *findVertex(ADart1));
00057 return d;
00058 }
00059
00060 CDart * CGMapVertex::materializeNormalVector(CDart * ADart)
00061 {
00062 assert(ADart!=NULL);
00063
00064 CVertex b= barycenter(ADart, ORBIT_FACE);
00065 CVertex n= faceNormalVector(ADart);
00066 assert(!n.isNull());
00067 n/= n.norm();
00068
00069 CDart * B= addMapDart(b );
00070 CDart * N= addMapDart(b+n);
00071 linkAlpha0(B,N);
00072 return N;
00073 }
00074
00075 CDart * CGMapVertex::materializeNormalPlane(CDart * ADart1, CDart * ADart2)
00076 {
00077 assert(ADart1!=NULL && ADart2!=NULL);
00078 assert(!isSameOrbit(ADart1,ADart2, ORBIT_VERTEX));
00079
00080 CTransformationMatrix rotationMatrix(CTransformationMatrix::IdentityMatrix);
00081
00082 const CVertex & S1= *findVertex(ADart1);
00083 const CVertex & S2= *findVertex(ADart2);
00084
00085 rotationMatrix.rotate(S2-S1, 120);
00086
00087 CVertex V1= CGeometry::getNormalVector(S2-S1);
00088 CVertex V2= V1; rotationMatrix.applyOn(V2);
00089 CVertex V3= V2; rotationMatrix.applyOn(V3);
00090
00091 CDart * d= createTopoTriangle();
00092
00093 setVertex( d , S1+V1);
00094 setVertex(alpha01 (d), S1+V2);
00095 setVertex(alpha0101(d), S1+V3);
00096 return d;
00097 }
00098
00099 CDart * CGMapVertex::materializeReferential()
00100 {
00101 CDart * dart[12];
00102
00103 int i;
00104
00105 for (i=0; i<12; ++i)
00106 dart[i]= addMapDart();
00107
00108 for (i=0; i<6; ++i)
00109 linkAlpha0(dart[2*i], dart[2*i+1]);
00110
00111 for (i=0; i<3; ++i)
00112 {
00113 linkAlpha1(dart[4*i],dart[(4*i+11)%12]);
00114 topoSew2(dart[4*i], dart[4*i+3]);
00115 }
00116
00117 setVertex(dart[ 0], ORIGIN);
00118 setVertex(dart[ 2], OX);
00119 setVertex(dart[ 6], OY);
00120 setVertex(dart[10], OZ);
00121
00122 return dart[0];
00123 }
00124