2 // Class : Gestion des sommets
4 // Copyright (C) 2009-2012 CEA/DEN, EDF R&D
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
26 #include "HexEltBase.hxx"
30 class Vertex : public EltBase
33 double getX() { return v_x; }
34 double getY() { return v_y; }
35 double getZ() { return v_z; }
36 double getCoord (int dir);
38 virtual int countVertex () { return 1; }
39 virtual Vertex* getVertex (int nro) { return this; }
42 void setX (double v) { v_x = v ; }
43 void setY (double v) { v_y = v ; }
44 void setZ (double v) { v_z = v ; }
46 void assoCoord (double x, double y, double z);
47 void assoCoord (double* pnt);
50 Vertex (Document* prev, double x=0.0, double y=0.0, double z=0.0);
51 Vertex (Document* cible, Vertex* other);
52 Vertex (Vertex* other);
54 virtual void dump () ;
55 virtual void saveXml (XmlWriter* xml);
57 void setScalar (double val) { v_scalar = val ; }
58 double getScalar () { return v_scalar ; }
59 void setColor (double valeur) { setScalar (valeur) ; }
60 double* getPoint (double point[]);
62 void setCoord (double x, double y, double z);
63 bool isin (double xmin, double xmax, double ymin, double ymax,
64 double zmin, double zmax);
65 Edge* getParent (int nro);
66 Vertex* makeSymetric (Vertex* other);
67 void translate (Vector* vecteur, double fact=1.0);
68 void replace (Vertex* old);
70 Vertex* getClone () { return v_clone ; }
71 void duplicate (Document* doc);
73 static Vertex* createMiddle (Vertex* left, Vertex* right);
74 bool definedBy (double px, double py, double pz, double eps2=1e-4);
83 double gc_x, gc_y, gc_z;
86 // ========================================================= Constructeur bis
87 inline Vertex::Vertex (Vertex* other)
88 : EltBase (other->dad(), EL_VERTEX)
95 v_scalar = other->v_scalar;
96 gc_ass = other->gc_ass;
104 gc_x = gc_y = gc_z = 0;
109 // ===================================================== getCoord
110 inline double Vertex::getCoord (int dir)
115 case dir_x : val = v_x;
117 case dir_y : val = v_y;
119 case dir_z : val = v_z;
124 // ========================================================= dump
125 inline void Vertex::dump ()
130 printf ("(*** deleted ***)\n");
134 printf ("(%g, %g, %g)", v_x,v_y,v_z);
137 // ========================================================= setCoord
138 inline void Vertex::setCoord (double x, double y, double z)
144 // ========================================================= assoCoord
145 inline void Vertex::assoCoord (double* coord)
147 assoCoord (coord[dir_x], coord[dir_y], coord[dir_z]);
149 // ========================================================= assoCoord
150 inline void Vertex::assoCoord (double x, double y, double z)
157 // ========================================================= isin
158 inline bool Vertex::isin (double xmin, double xmax, double ymin, double ymax,
159 double zmin, double zmax)
161 bool rep = v_x >= xmin && v_x <= xmax
162 && v_y >= ymin && v_y <= ymax
163 && v_z >= zmin && v_z <= zmax;
166 // ========================================================= getPoint
167 inline double* Vertex::getPoint (double point[])
174 // ========================================================= duplicate
175 inline void Vertex::duplicate (Document* cible)
177 v_clone = new Vertex (cible, v_x, v_y, v_z);
178 v_clone->v_scalar = v_scalar;
180 // ========================================================= duplicate
181 inline bool Vertex::definedBy (double px, double py, double pz, double eps2)
183 double dist2 = carre (v_x-px) + carre (v_y-py) + carre (v_z-pz);