+// ========================================================= setAssociation
+int Vertex::setAssociation (VertexShape* forme)
+{
+ if (forme==NULL)
+ return HERR;
+
+ forme->addAssociation (this);
+ forme->getCoords (gc_x, gc_y, gc_z);
+ v_shape = forme;
+
+ if (db) cout << " Vertex " << el_name
+ << " setAssociation-> " << forme->getName ()
+ << " = (" << gc_x << ", " << gc_y << ", " << gc_z << ") \n" ;
+
+ is_associated = true;
+ return HOK;
+}
+// ========================================================= setAssociation
+int Vertex::setAssociation (NewShape* geom, int subid)
+{
+ if (geom==NULL)
+ return HERR;
+
+ VertexShape* shape = geom->findVertex (subid);
+ if (shape==NULL)
+ return HERR;
+
+ int ier = setAssociation (shape);
+ return ier;
+}
+// ========================================================= setAssociation
+int Vertex::setAssociation (double* point)
+{
+ NewShape* cloud = el_root->getCloud();
+
+ int subid = cloud->addPoint (point);
+ int ier = setAssociation (cloud, subid);
+ return ier;
+}
+// ========================================================= setAssociation
+int Vertex::setAssociation (double px, double py, double pz)
+{
+ Real3 point = { px, py, pz };
+ int ier = setAssociation (point);
+ return ier;
+}
+// ========================================================= clearAssociation
+void Vertex::clearAssociation ()
+{
+ v_shape = NULL;
+ is_associated = false;
+}
+// ========================================================= getAssoCoord
+void Vertex::getAssoCoord (double &px, double &py, double &pz)
+{
+ if (is_associated)
+ {
+ px = gc_x;
+ py = gc_y;
+ pz = gc_z;
+ }
+ else
+ {
+ px = v_x;
+ py = v_y;
+ pz = v_z;
+ }
+}
+// ========================================================= getAssoCoord
+void Vertex::getAssoCoord (double* point)
+{
+ getAssoCoord (point[dir_x], point[dir_y], point[dir_z]);
+}
+// ===================================================== getCoord
+double Vertex::getCoord (int dir)
+{
+ double val = 0;
+ switch (dir)
+ {
+ case dir_x : val = v_x;
+ break;
+ case dir_y : val = v_y;
+ break;
+ case dir_z : val = v_z;
+ break;
+ }
+ return val;
+}
+// ========================================================= dump
+void Vertex::dump ()
+{
+ printName (" = ");
+ if (NOT isHere ())
+ {
+ printf ("(*** deleted ***)\n");
+ return;
+ }
+
+ printf ("(%g, %g, %g)", v_x,v_y,v_z);
+ dumpRef ();
+}
+// ========================================================= setCoord
+void Vertex::setCoord (double x, double y, double z)
+{
+ v_x = x;
+ v_y = y;
+ v_z = z;
+}
+// ========================================================= isin
+bool Vertex::isin (double xmin, double xmax, double ymin, double ymax,
+ double zmin, double zmax)
+{
+ bool rep = v_x >= xmin && v_x <= xmax
+ && v_y >= ymin && v_y <= ymax
+ && v_z >= zmin && v_z <= zmax;
+ return rep;
+}
+// ========================================================= getPoint
+double* Vertex::getPoint (double point[])
+{
+ point [dir_x] = v_x;
+ point [dir_y] = v_y;
+ point [dir_z] = v_z;
+ return point;
+}
+// ========================================================= duplicate
+void Vertex::duplicate (Document* cible)
+{
+ v_clone = new Vertex (cible, v_x, v_y, v_z);
+ v_clone->v_scalar = v_scalar;
+}
+// ========================================================= definedBy
+bool Vertex::definedBy (double px, double py, double pz, double eps2)
+{
+ double dist2 = carre (v_x-px) + carre (v_y-py) + carre (v_z-pz);
+ return dist2 < eps2;
+}
+// ========================================================= dist2
+double Vertex::dist2 (Vertex* other)
+{
+ if (BadElement (other))
+ return 1e+77;
+
+ double dist = carre (v_x-other->v_x) + carre (v_y-other->v_y)
+ + carre (v_z-other->v_z);
+ return dist;
+}