Salome HOME
Porting HEXABLOCK module on WIN32 platform.
[modules/hexablock.git] / src / HEXABLOCK / HexEltBase.hxx
1
2 // Class : Element de base des Vertex/Edge/Quad, etc...
3
4 // Copyright (C) 2009-2013  CEA/DEN, EDF R&D
5 //
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.
10 //
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.
15 //
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
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 #ifndef __ELT_BASE_H
24 #define __ELT_BASE_H
25
26 #include "Hex_defines.hxx"
27 #include "hexa_base.hxx"
28 #include <vector>
29
30 #define HexDump(x) {printf(#x " = "); if (x) x->dump(); else printf("NULL\n");}
31 #define PrintName(x) if (x) x->printName(); else printf ("NULL, ")
32 #define PutName(x) { printf(#x " = "); if (x) x->printName("\n"); else printf("NULL\n"); }
33
34 #define GetClone(elt) ((elt)==NULL ? NULL : elt->getClone())
35 #define BadElement(elt) (elt)==NULL || (elt)->isBad()
36 #define EltIsValid(elt)    (elt)!=NULL && (elt)->isValid()
37
38 #if defined WIN32
39 #pragma warning ( disable: 4251 )
40 #endif
41
42 BEGIN_NAMESPACE_HEXA
43
44 class HEXABLOCKENGINE_EXPORT EltBase
45 {
46 public :
47    virtual int     countHexa   ()  { return 0; }
48    virtual int     countQuad   ()  { return 0; }
49    virtual int     countEdge   ()  { return 0; }
50    virtual int     countVertex ()  { return 0; }
51
52    virtual void    setError    (int kod=HERR)  { el_status = kod; }
53    virtual int     getError    ()              { return el_status; }
54    virtual bool    isValid     ()              { return el_status==HOK; }
55    virtual bool    isBad       ()              { return el_status!=HOK; }
56
57    virtual void    duplicate ()                   {}
58    virtual void    clearAssociation ()            {}
59
60    // void copyAssociation    (EltBase* orig);
61    // void replaceAssociation (EltBase* orig);
62
63 public :
64    virtual void replaceEdge   (Edge* old, Edge* nouveau)
65                                { printf ("rep-edge\n") ; }
66    virtual void replaceVertex (Vertex* old, Vertex* nouveau)
67                                { printf ("rep-vertex\n") ; }
68
69    EltBase (Document* doc, EnumElt type=EL_NONE);
70    EltBase (EnumElt type=EL_NONE);
71
72    virtual ~EltBase ();
73    virtual  void remove ();
74    virtual  void suppress ();
75    virtual  void dump ();
76    virtual  void saveXml (XmlWriter* xml)   {}
77    virtual  void majReferences () { }
78    virtual  char*  makeVarName (char* nom);
79
80    static   char* makeName  (int type, int id, char* name);
81
82    EltBase*  next ()                        { return el_next; }
83    void      setNext (EltBase* suivant)     { el_next = suivant; }
84    int       getId ()                       { return el_id; }
85    void      setId (int ln);
86    Document* dad ()                         { return el_root; }
87    EnumElt   getType ()                     { return el_type; }
88    bool      isHere ()                      { return el_type!=EL_REMOVED; }
89    bool      isDeleted ()                   { return el_type==EL_REMOVED; }
90
91                  // On s'occupe des parents
92
93    void  razReferences ()         { el_parent.clear() ; }
94    void  addParent (EltBase* dad) { if (dad) el_parent.push_back(dad) ; }
95    int   getNbrParents ()         { return el_parent.size() ; }
96    bool  hasParents ();
97    EltBase* getFather  (int nro);
98
99    int   getMark ()                   { return el_mark; }
100    void  setMark (int ln)             { el_mark = ln ; }
101    char* getName   (pchar nom);
102    void  printName (cpchar sep=" ");
103    void  dumpRef ();
104
105    cpchar getName ();
106    void   setName (const string& nom) { el_name = nom ; }
107    void   setName (cpchar nom)        { el_name = nom ; }
108
109    bool    debug (int niv=0);
110    bool    isAssociated ()            { return is_associated ; }
111    string  getNextName ();
112
113 protected :
114    EnumElt   el_type;
115    EltBase*  el_next;
116    int       el_id;
117    Document* el_root;
118    string    el_name;
119
120    int       el_status;
121    int       el_mark;
122    bool      is_associated;
123    std::vector <EltBase*> el_parent;
124 };
125 // ========================================================= dump
126 inline void EltBase::dump ()
127 {
128    printf ("Elt%d  Nro=%04d", el_type, el_id);
129    dumpRef() ;
130 }
131
132 // ========================================================= getFather
133 inline EltBase* EltBase::getFather  (int nro)
134 {
135    EltBase* elt = NULL;
136    if (nro >= 0 && nro < (int) el_parent.size() && isHere()
137                 && el_parent[nro]->isHere())
138       elt = el_parent[nro];
139
140    return elt;
141 }
142 // ========================================================= hasParents
143 inline bool EltBase::hasParents ()
144 {
145    int nbp = el_parent.size();
146    for (int nro=0 ; nro<nbp ; nro++)
147        if (el_parent[nro]!=NULL && el_parent[nro]->isHere())
148           return true;
149
150    return false;
151 }
152 END_NAMESPACE_HEXA
153 #endif