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

« back to all changes in this revision

Viewing changes to Common/OctreeInternals.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Christophe Prud'homme
  • Date: 2009-02-17 10:12:27 UTC
  • mfrom: (1.2.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20090217101227-mdrolkldak2pgd2i
Tags: 2.3.0.dfsg-1
* New upstream release
  + major graphics and GUI code refactoring; 
  + new full-quad/hexa subdivision algorithm (removed 
    Mesh.RecombineAlgo);
  + improved automatic transfinite corner selection (now also 
    for volumes); 
  + improved visibility browser; new automatic adaptive visualization
    for high-order simplices;
  + modified arrow size, clipping planes and transform options; many
    improvements and
  + bug fixes all over the place.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// Gmsh - Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 
1
// Gmsh - Copyright (C) 1997-2009 C. Geuzaine, J.-F. Remacle
2
2
//
3
3
// See the LICENSE.txt file for license information. Please report all
4
4
// bugs and problems to <gmsh@geuz.org>.
5
 
//
6
 
// Contributor(s): 
7
 
//   We lost track of the origin of this octree code. If you happen to
8
 
//   know the author of the original routines, please send us an email.
9
5
 
10
 
#include <iostream>
 
6
#include <list>
11
7
#include <stdio.h>
12
8
#include <stdlib.h>
13
9
#include <math.h>
14
 
#include <list>
15
 
 
16
10
#include "GmshMessage.h"
17
11
#include "OctreeInternals.h"
18
12
 
19
 
using std::list;
20
 
 
21
13
int initializeOctantBuckets(double *_orig, double *_size, int _maxElem,
22
14
                            octantBucket **buckets_head, globalInfo **globalPara)
23
15
// Initialize the buckets                                          
249
241
  // _bucket->next  = (octantBucket *) calloc(numBuck,sizeof(octantBucket));
250
242
 
251
243
  if (!_bucket->next) {
252
 
    fprintf(stderr,"Error, subdivideOctantBucket could not allocate enough space\n");
 
244
    Msg::Error("subdivideOctantBucket could not allocate enough space");
253
245
    return 0;
254
246
  }
255
247
 
285
277
  return 1;
286
278
}
287
279
 
288
 
void * searchElement(octantBucket *_buckets_head, double *_pt, globalInfo *_globalPara,
289
 
                     BBFunction BBElement, InEleFunction xyzInElement) 
 
280
void *searchElement(octantBucket *_buckets_head, double *_pt, globalInfo *_globalPara,
 
281
                    BBFunction BBElement, InEleFunction xyzInElement) 
290
282
{
291
283
  int flag;
292
284
  octantBucket *ptrBucket;
293
285
  ELink ptr1;  
294
 
  list<void *>::iterator iter;
 
286
  std::list<void*>::iterator iter;
295
287
  void * ptrToEle = _globalPara->ptrToPrevElement;
296
288
 
297
289
  if (ptrToEle) {
300
292
      flag = xyzInElement(ptrToEle, _pt);
301
293
    if (flag == 1) return ptrToEle;
302
294
  }
303
 
        
 
295
     
304
296
  ptrBucket = findElementBucket(_buckets_head, _pt);
305
297
  if (ptrBucket == NULL) {
306
 
    // printf("Error! the point is not in the domain.\n");
 
298
    // this is not an error
 
299
    Msg::Debug("The point is not in the domain");
307
300
    return NULL;
308
301
  }     
309
302
 
385
378
  return;
386
379
}
387
380
 
388
 
void * searchAllElements(octantBucket *_buckets_head, double *_pt, globalInfo *_globalPara,
389
 
                         BBFunction BBElement, InEleFunction xyzInElement, list<void *> *_elements)
 
381
void *searchAllElements(octantBucket *_buckets_head, double *_pt, globalInfo *_globalPara,
 
382
                        BBFunction BBElement, InEleFunction xyzInElement, 
 
383
                        std::list<void*> *_elements)
390
384
{
391
385
  int flag, flag1;
392
386
  octantBucket *ptrBucket;
393
 
  list<void *>::iterator iter;
 
387
  std::list<void*>::iterator iter;
394
388
 
395
389
  ptrBucket = findElementBucket(_buckets_head, _pt);
396
390
  if (ptrBucket == NULL) {
411
405
  flag1 = 0;
412
406
  for (iter = (ptrBucket->listBB).begin(); 
413
407
       iter != (ptrBucket->listBB).end(); iter++){
414
 
    // printf("Enter 1 \n");    
415
408
    flag = xyzInElementBB(_pt, *iter, BBElement);
416
409
    if (flag == 1)
417
410
      flag = xyzInElement(*iter, _pt);