~ubuntu-branches/debian/sid/gmsh/sid

« back to all changes in this revision

Viewing changes to Geo/GEntity.cpp

  • Committer: Package Import Robot
  • Author(s): Anton Gladky
  • Date: 2015-08-26 22:45:27 UTC
  • mfrom: (1.3.25)
  • Revision ID: package-import@ubuntu.com-20150826224527-wiqnz3dwz6ap8tty
Tags: 2.10.1+dfsg1-1
* [4c450d1] Update d/watch.
* [90ca918] Imported Upstream version 2.10.1+dfsg1. (Closes: #793245)
* [af26665] Use any-arch instead of list of archs.
* [e94c6d2] Refresh patches.
* [6ab417f] Update d/copyright.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
#include "GFace.h"
15
15
#include "GRegion.h"
16
16
 
17
 
GEntity::GEntity(GModel *m, int t)
18
 
  : _model(m), _tag(t), _meshMaster(t), _visible(1), _selection(0),
 
17
GEntity::GEntity(GModel *m,int t)
 
18
  : _model(m), _tag(t),_meshMaster(this),_visible(1), _selection(0),
19
19
    _allElementsVisible(1), _obb(0), va_lines(0), va_triangles(0)
20
20
{
21
21
  _color = CTX::instance()->packColor(0, 0, 255, 0);
70
70
GRegion *GEntity::cast2Region() { return dynamic_cast<GRegion*>(this); }
71
71
 
72
72
// sets the entity m from which the mesh will be copied
73
 
void GEntity::setMeshMaster(int m_signed)
74
 
{
75
 
  if(m_signed == tag()){ _meshMaster = m_signed; return; }
76
 
 
77
 
  GEntity *gMaster = 0;
78
 
  int m = abs(m_signed);
79
 
  switch(dim()){
80
 
  case 0 : gMaster = model()->getVertexByTag(m); break;
81
 
  case 1 : gMaster = model()->getEdgeByTag(m); break;
82
 
  case 2 : gMaster = model()->getFaceByTag(m); break;
83
 
  case 3 : gMaster = model()->getRegionByTag(m); break;
84
 
  }
85
 
  if (!gMaster){
86
 
    Msg::Error("Model entity %d of dimension %d cannot be the mesh master of entity %d",
87
 
               m, dim(), tag());
88
 
    return;
89
 
  }
90
 
  int masterOfMaster = gMaster->meshMaster();
91
 
 
92
 
  if (masterOfMaster == gMaster->tag()){
93
 
    _meshMaster = m_signed;
94
 
  }
95
 
  else {
96
 
    setMeshMaster ( masterOfMaster * ((m_signed > 0) ? 1 : -1));
97
 
  }
 
73
void GEntity::setMeshMaster(GEntity* gMaster)
 
74
{
 
75
  if (gMaster->dim() != dim()){
 
76
    Msg::Error("Model entity %d of dimension %d cannot"
 
77
               "be the mesh master of entity %d of dimension %d",
 
78
               gMaster->tag(),gMaster->dim(),tag(),dim());
 
79
    return;
 
80
  }
 
81
  _meshMaster = gMaster;
 
82
}
 
83
 
 
84
void GEntity::setMeshMaster(GEntity* gMaster,const std::vector<double>& tfo)
 
85
{
 
86
  if (gMaster->dim() != dim()){
 
87
    Msg::Error("Model entity %d of dimension %d cannot"
 
88
               "be the mesh master of entity %d of dimension %d",
 
89
               gMaster->tag(),gMaster->dim(),tag(),dim());
 
90
    return;
 
91
  }
 
92
 
 
93
  if (tfo.size() != 16) {
 
94
    Msg::Error("Periodicity transformation from entity %d to %d (dim %d) has %d components"
 
95
               ", while 16 are required",
 
96
               gMaster->tag(),tag(),gMaster->dim(),tfo.size());
 
97
    return;
 
98
  }
 
99
 
 
100
  affineTransform = tfo;
 
101
  _meshMaster = gMaster;
98
102
}
99
103
 
100
104
// gets the entity from which the mesh will be copied
101
 
int GEntity::meshMaster() const
102
 
{
103
 
  if (_meshMaster == tag()) return tag();
104
 
 
105
 
  GEntity *gMaster = 0;
106
 
  switch(dim()){
107
 
  case 0 : gMaster = model()->getVertexByTag(abs(_meshMaster)); break;
108
 
  case 1 : gMaster = model()->getEdgeByTag(abs(_meshMaster)); break;
109
 
  case 2 : gMaster = model()->getFaceByTag(abs(_meshMaster)); break;
110
 
  case 3 : gMaster = model()->getRegionByTag(abs(_meshMaster)); break;
111
 
  }
112
 
  if (!gMaster){
113
 
    Msg::Error("Could not find mesh master entity %d",_meshMaster);
114
 
    return tag();
115
 
  }
116
 
  int masterOfMaster = gMaster->meshMaster();
117
 
 
118
 
  if (masterOfMaster == gMaster->tag()){
119
 
    return _meshMaster ;
120
 
  }
121
 
  else {
122
 
    return gMaster->meshMaster() * ((_meshMaster > 0) ? 1 : -1);
123
 
  }
124
 
}
125
 
 
 
105
GEntity* GEntity::meshMaster() const { return _meshMaster; }