~ubuntu-branches/debian/squeeze/gmsh/squeeze

« back to all changes in this revision

Viewing changes to Geo/MElementCut.h

  • Committer: Bazaar Package Importer
  • Author(s): Christophe Prud'homme, Christophe Prud'homme
  • Date: 2009-09-27 17:36:40 UTC
  • mfrom: (1.4.2 upstream)
  • mto: This revision was merged to the branch mainline in revision 10.
  • Revision ID: james.westby@ubuntu.com-20090927173640-meoeywl4f5hq5qas
Tags: 2.4.2.dfsg-1
[Christophe Prud'homme]
* New upstream release
  + solver code refactoring
  + better IDE integration.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
  std::vector<MFace> _faces;
27
27
  void _init();
28
28
 public:
29
 
  MPolyhedron(std::vector<MVertex*> v, int num=0, int part=0)
30
 
    : MElement(num, part), _owner(false), _orig(0) 
 
29
  MPolyhedron(std::vector<MVertex*> v, int num = 0, int part = 0,
 
30
              bool owner = false, MElement* orig = NULL)
 
31
    : MElement(num, part), _owner(owner), _orig(orig)
31
32
  {
32
33
    if(v.size() % 4){
33
34
      Msg::Error("Got %d vertices for polyhedron", (int)v.size());
37
38
      _parts.push_back(new MTetrahedron(v[i], v[i + 1], v[i + 2], v[i + 3]));
38
39
    _init();
39
40
  }
40
 
  MPolyhedron(std::vector<MTetrahedron*> vT, int num=0, int part=0)
41
 
    : MElement(num, part), _owner(false), _orig(0)
42
 
  {
43
 
    for(unsigned int i = 0; i < vT.size(); i++)
44
 
      _parts.push_back(vT[i]);
45
 
    _init();
46
 
  }
47
 
  MPolyhedron(std::vector<MTetrahedron*> vT, MElement* orig, bool owner, int num=0, int part=0)
 
41
  MPolyhedron(std::vector<MTetrahedron*> vT, int num = 0, int part = 0,
 
42
              bool owner = false, MElement* orig = NULL)
48
43
    : MElement(num, part), _owner(owner), _orig(orig)
49
44
  {
50
45
    for(unsigned int i = 0; i < vT.size(); i++)
108
103
    return vol;
109
104
  }
110
105
  virtual int getVolumeSign() { return (getVolume() >= 0) ? 1 : -1; }
111
 
  virtual const gmshFunctionSpace* getFunctionSpace(int order=-1) const 
 
106
  virtual const functionSpace* getFunctionSpace(int order=-1) const 
112
107
  {
113
108
    return _orig->getFunctionSpace(order);
114
109
  }
131
126
    return _parts.size() * getNGQTetPts(pOrder);
132
127
  }
133
128
  virtual void writeMSH(FILE *fp, double version=1.0, bool binary=false, 
134
 
                        int num=0, int elementary=1, int physical=1);
 
129
                        int num=0, int elementary=1, int physical=1, int parentNum=0);
135
130
  virtual MElement *getParent() const { return _orig; }
 
131
  virtual void setParent(MElement *p) { _orig = p; }
136
132
  virtual int getNumChildren() const { return _parts.size(); }
137
133
  virtual MElement *getChild(int i) const { return _parts[i]; }
 
134
  virtual bool ownsParent() const { return _owner; }
138
135
};
139
136
 
140
137
class MPolygon : public MElement {
147
144
  std::vector<MEdge> _edges;
148
145
  void _initVertices();
149
146
 public:
150
 
  MPolygon(std::vector<MVertex*> v, int num=0, int part=0)
151
 
    : MElement(num, part), _owner(false), _orig(0)
 
147
  MPolygon(std::vector<MVertex*> v, int num = 0, int part = 0,
 
148
           bool owner = false, MElement* orig = NULL)
 
149
    : MElement(num, part), _owner(owner), _orig(orig)
152
150
  {
153
151
    for(unsigned int i = 0; i < v.size() / 3; i++)
154
152
      _parts.push_back(new MTriangle(v[i * 3], v[i * 3 + 1], v[i * 3 + 2]));
155
153
    _initVertices();
156
154
  }
157
 
  MPolygon(std::vector<MElement*> vT, int num=0, int part=0)
158
 
    : MElement(num, part), _owner(false), _orig(0)
 
155
  MPolygon(std::vector<MTriangle*> vT, int num = 0, int part = 0,
 
156
           bool owner = false, MElement* orig = NULL)
 
157
    : MElement(num, part), _owner(owner), _orig(orig)
159
158
  {
160
159
    for(unsigned int i = 0; i < vT.size(); i++){
161
160
      MTriangle *t = (MTriangle*) vT[i];
163
162
    }
164
163
    _initVertices();
165
164
  }
166
 
  MPolygon(std::vector<MTriangle*> vT, int num=0, int part=0)
167
 
    : MElement(num, part), _owner(false), _orig(0)
168
 
  {
169
 
    for(unsigned int i = 0; i < vT.size(); i++)
170
 
      _parts.push_back(vT[i]);
171
 
    _initVertices();
172
 
  }
173
 
  MPolygon(std::vector<MTriangle*> vT, MElement* orig, bool owner, int num=0, int part=0)
174
 
    : MElement(num, part), _owner(owner), _orig(orig)
175
 
  {
176
 
    for(unsigned int i = 0; i < vT.size(); i++)
177
 
      _parts.push_back(vT[i]);
178
 
    _initVertices();
179
 
  }
180
165
  ~MPolygon() 
181
166
  {
182
167
    if(_owner)
222
207
  }
223
208
  virtual int getType() const { return TYPE_POLYG; }
224
209
  virtual int getTypeForMSH() const { return MSH_POLYG_; }
225
 
  virtual const gmshFunctionSpace* getFunctionSpace(int order=-1) const 
 
210
  virtual const functionSpace* getFunctionSpace(int order=-1) const 
226
211
  {
227
212
    return _orig->getFunctionSpace(order);
228
213
  }
245
230
    return _parts.size() * getNGQTPts(pOrder);
246
231
  }
247
232
  virtual void writeMSH(FILE *fp, double version=1.0, bool binary=false, 
248
 
                        int num=0, int elementary=1, int physical=1);
 
233
                        int num=0, int elementary=1, int physical=1, int parentNum=0);
249
234
  virtual MElement *getParent() const { return _orig; }
 
235
  virtual void setParent(MElement *p) { _orig = p; }
250
236
  virtual int getNumChildren() const { return _parts.size(); }
251
237
  virtual MElement *getChild(int i) const { return _parts[i]; }
 
238
  virtual bool ownsParent() const { return _owner; }
252
239
};
253
240
 
254
241
class MTriangleBorder : public MTriangle {
263
250
  }
264
251
  ~MTriangleBorder() {}
265
252
  MPolyhedron* getDomain(int i) const { return _domains[i]; }
266
 
  virtual MElement *getParent() const { return _domains[0]->getParent(); }
267
 
  virtual const gmshFunctionSpace* getFunctionSpace(int order=-1) const 
 
253
  virtual MElement *getParent() const {
 
254
    if(_domains[0]) return _domains[0]->getParent();
 
255
    if(_domains[1]) return _domains[1]->getParent();
 
256
    return NULL;
 
257
  }
 
258
  virtual const functionSpace* getFunctionSpace(int order=-1) const 
268
259
  {
269
260
    return getParent()->getFunctionSpace(order);
270
261
  }
299
290
  }
300
291
  ~MLineBorder() {}
301
292
  MPolygon* getDomain(int i) const { return _domains[i]; }
302
 
  virtual MElement *getParent() const { return _domains[0]->getParent(); }
303
 
  virtual const gmshFunctionSpace* getFunctionSpace(int order=-1) const 
 
293
  virtual MElement *getParent() const {
 
294
    if(_domains[0]) return _domains[0]->getParent();
 
295
    if(_domains[1]) return _domains[1]->getParent();
 
296
    return NULL;
 
297
  }
 
298
  virtual const functionSpace* getFunctionSpace(int order=-1) const 
304
299
  {
305
300
    return getParent()->getFunctionSpace(order);
306
301
  }