File: Atom.h

package info (click to toggle)
sofa-framework 1.0~beta4-9
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 88,688 kB
  • ctags: 27,205
  • sloc: cpp: 151,126; ansic: 2,387; xml: 581; sh: 417; makefile: 67
file content (104 lines) | stat: -rw-r--r-- 3,982 bytes parent folder | download | duplicates (5)
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
/***************************************************************************
                                   Atom.h 
                             -------------------
    begin             : Wed Aug 8 2001
    copyright         : (C) 2001 TIMC (Emmanuel Promayon, Matthieu Chabanas)
    email             : Emmanuel.Promayon@imag.fr
    Date              : $Date: 2006/10/17 14:33:21 $
    Version           : $Revision: 1.11 $
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef ATOM_H
#define ATOM_H


#include "Structure.h"
#include "AtomProperties.h"
#include <RenderingMode.h>  
#include <cstring>
#include <sofa/helper/system/config.h>

/** An atom has an unique index in the physical model object, a 3D position, and different basic properties.
  * It is the most basic structure composing a physical model.
  * It is on an atoms that the forces and loads could be applied in order to generate dynamics.
  * $Revision: 1.11 $
  */
class Atom : public Structure {
public:
    /** Default constructor : set the position to the origin, generate a unique index */
    Atom(PhysicalModel *);
	/** constructor from xml node: try to read and get the parmaters from xml */
    Atom(PhysicalModel *, xmlNodePtr);
    /** constructor : generate a unique index
     * @param pos the initial position of the created atom (array of 3 SReal)
     */
    Atom(PhysicalModel *, const SReal pos[3]);
    /** set the position to the origin
    * @param ind give the unique index
    */
    Atom(PhysicalModel *, const unsigned int ind);
    /** constructor : generate a unique index
    * @param ind give the unique index
     * @param pos the initial position of the created atom (array of 3 SReal)
     */
    Atom(PhysicalModel *, const unsigned int ind, const SReal pos[3]);
    /** std destructor
    */
    ~Atom();

    /** print to an output stream in "pseaudo" XML format.
       */
    void xmlPrint(std::ostream &, const StructuralComponent *);

    /// get the position of the atom (array of 3 SReals)
    void getPosition(SReal pos[3]) const;

    /// set the position of the atom
    void setPosition(const SReal [3]);
    /// set the position of the atom
    void setPosition(const SReal ,const SReal ,const SReal );

    /** set the index.
     *  The index <b>have to be unique</b> otherwise this method
     *  has no effect. 
     *  The sub-classes method will check that this index is not in use.
     *  @return true only if the index of the structure was changed
     */
    virtual bool setIndex(const unsigned int);

    /// return true only if the parameter is equal to "Atom"
    virtual bool isInstanceOf(const char *) const;

    /// Get a ptr to the AtomProperties
    AtomProperties * getProperties() const;
};

// -------------------- inline ---------------------
inline void Atom::getPosition(SReal p[3]) const {
    return getProperties()->getPosition(p);
}

inline void Atom::setPosition(const SReal pos[3])  {
    getProperties()->setPosition(pos);    
}
inline void Atom::setPosition(const SReal x, const SReal y,const SReal z)  {
    getProperties()->setPosition(x,y,z);    
}

inline bool Atom::isInstanceOf(const char *className) const {
    return (strcmp(className, "Atom")==0);
}
inline AtomProperties * Atom::getProperties() const {
    return (AtomProperties *) properties;
}

#endif //ATOM_H