MESHER example#

Description#

Code Listing#

#include <Calcul_timer.h>
#include <Defines.h>
#include <Error_messager.h>
#include <File.h>
#include <Function.h>
#include <Marray.h>
#include <Rotation.h>
#include <Print.h>
#include <Out_message.h>
#include <Utility_mesh.h>
#include <Modify_record.h>
#include <Transform_geometry.h>

class INVERSE_LISET : public TRANSFORMERS {
  protected :
    LIST<STRING> names;

  public :
     INVERSE_LISET() { }
     virtual ~INVERSE_LISET() { }
     virtual MODIFY_INFO_RECORD* get_modify_info_record();
     virtual void apply(UTILITY_MESH&);
};

DECLARE_OBJECT(TRANSFORMERS,INVERSE_LISET,inverse_liset)

MODIFY_INFO_RECORD* INVERSE_LISET::get_modify_info_record()
{
  MODIFY_INFO_RECORD* ret = new MODIFY_INFO_RECORD;

  ret->ptr = (void*)this;
  ret->info = "inverse_liset";
  ADD_SINGLE_CMD_TO_MODIF_REC(names,names);
  return(ret);
}

void INVERSE_LISET::apply(UTILITY_MESH& mesh)
{
  int iset;
  ARRAY< ARRAY<UTILITY_NODE*>* > n;
  ARRAY<UTILITY_NODE*> no;

  for(iset=0;iset<!names;iset++) {
    B_UTILITY_SET *set=mesh.get_bound(names[iset]);

    if(!set) ERROR("Can not find liset named "+names[iset]);
    if(set->get_type()!=UTILITY_SET::LISET_CODE) ERROR("boundary "+names[iset]+" is not a liset");
    else {
      UTILITY_LISET &li=*((UTILITY_LISET*)set);
      int iseg,inode;

      n.resize(!li.lnode);
      for(iseg=0;iseg<!n;iseg++) n[iseg]=li.lnode[!n-1-iseg];
      li.lnode.resize(0);
      for(iseg=0;iseg<!n;iseg++) {
        no.resize(!(*n[iseg]));
        for(inode=0;inode<!no;inode++) no[inode]=(*n[iseg])[!no-1-inode];
        for(inode=0;inode<!no;inode++) (*n[iseg])[inode]=no[inode];
        li.lnode.add(n[iseg]);
      }
    }
  }
  n.resize(0);
  no.resize(0);
}