#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);
}