cgma
copy_attrib.cpp File Reference
#include "iGeom.h"
#include <vector>
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <assert.h>

Go to the source code of this file.

Defines

#define ASSERT(A)   if (!(A)) failed(#A,__FILE__,__LINE__)
#define CHECK(STR)   if (err != iBase_SUCCESS) return Print_Error( STR, err, geom, __FILE__, __LINE__ )

Functions

int Tag_Body (iGeom_Instance geom, const iBase_TagHandle tag, const std::string id, const iBase_EntityHandle body)
int Tag_Get (iGeom_Instance geom, const iBase_TagHandle tag, const iBase_EntityHandle body)
bool Print_Error (const char *desc, int err, iGeom_Instance geom, const char *file, int line)
int main ()

Define Documentation

#define ASSERT (   A)    if (!(A)) failed(#A,__FILE__,__LINE__)

Definition at line 9 of file copy_attrib.cpp.

#define CHECK (   STR)    if (err != iBase_SUCCESS) return Print_Error( STR, err, geom, __FILE__, __LINE__ )

Definition at line 10 of file copy_attrib.cpp.


Function Documentation

int main ( )

Definition at line 18 of file copy_attrib.cpp.

          {
  int err;
  iGeom_Instance geom;
  double dSide = 10.0, dHeight = 10.0, dRad = 3.0;
  iBase_EntityHandle assm = NULL, cyl = NULL, tmp_cyl = NULL, tmp_new = NULL;
  std::string geomFile = "test.occ";


  iGeom_newGeom( 0, &geom, &err, 0 );

  iBase_TagHandle pin_tag = NULL, name_tag = NULL;
  char* tag_name_pin = (char*)"PIN";
  char* tag_name = (char*)"NAME";
  iGeom_getTagHandle(geom, tag_name_pin, &pin_tag, &err, 3);
  if(err == iBase_TAG_NOT_FOUND){
      
    iGeom_createTag(geom, tag_name_pin, 1, iBase_INTEGER, &pin_tag, &err,  3);

  }

  iGeom_getTagHandle(geom, tag_name, &name_tag, &err, 4);
  if(err == iBase_TAG_NOT_FOUND){
      
    iGeom_createTag(geom, tag_name, 1, iBase_INTEGER, &name_tag, &err,  4);

  }

  // creating prism
  std::cout << "\n\n\nCreating Prism\n" << std::endl;
  iGeom_createPrism(geom, dHeight, 6, 
            dSide, dSide,
            &assm, &err); 
  std::string one = "1";
  Tag_Body(geom, pin_tag, one, assm);
  Tag_Get (geom, pin_tag, assm);
  std::cout << "name tag: ";
  std::string a = "a";
  Tag_Body(geom, name_tag, a, assm);
  Tag_Get (geom, name_tag, assm);  

  std::cout << "\n\n\nCreating Cylinder\n" << std::endl;
  // create cylinder
  iGeom_createCylinder(geom, dHeight, dRad, dRad, &cyl, &err);
  std::string two = "2";
  Tag_Body(geom, pin_tag, two, cyl);
  Tag_Get(geom, pin_tag, cyl);

  std::cout << "name tag: ";
  std::string b = "b";
  Tag_Body(geom, name_tag, b, cyl);
  Tag_Get (geom, name_tag, cyl); 

  // Copy
  iGeom_copyEnt(geom, cyl, &tmp_cyl, &err);
  std::cout << "\n\n After copy operation\n" << std::endl;
  Tag_Get(geom, pin_tag, tmp_cyl);
  std::cout << "\ngetting name tag " << std::endl;
  Tag_Get(geom, name_tag, tmp_cyl);

  // Substract
  iGeom_subtractEnts(geom, assm, tmp_cyl, &tmp_new, &err);
  std::cout << "\n\n After subtract operation\n" << std::endl;
  Tag_Get(geom, pin_tag, tmp_new);
  std::cout << "\n getting name tag " << std::endl;
  Tag_Get(geom, name_tag, tmp_new);

  // save
  iGeom_save(geom, geomFile.c_str(), NULL, &err, geomFile.length() , 0);
  
  //check that the two single volume bodys' attributes are exported as SINGLELUMP%
  std::string search = "SINGLELUMP%";
  std::ifstream Myfile;
  Myfile.open (geomFile.c_str());
  int found = 0;
  std::string line;
  size_t offset;
  if(Myfile.is_open())
  {
    while(!Myfile.eof())
    {
      getline(Myfile,line);
      if ((offset = line.find(search, 0)) != std::string::npos)
        found ++;
    }
    Myfile.close();
  }

  assert (found == 4);

  return 0;
}
bool Print_Error ( const char *  desc,
int  err,
iGeom_Instance  geom,
const char *  file,
int  line 
)

Definition at line 158 of file copy_attrib.cpp.

{
  char buffer[1024];
  iGeom_getDescription( geom, buffer, sizeof(buffer) );
  buffer[sizeof(buffer)-1] = '\0';
  
  std::cerr << "ERROR: " << desc << std::endl
        << "  Error code: " << err << std::endl
        << "  Error desc: " << buffer << std::endl
        << "  At        : " << file << ':' << line << std::endl
    ;
  
  return false; // must always return false or CHECK macro will break
}
int Tag_Body ( iGeom_Instance  geom,
const iBase_TagHandle  tag,
const std::string  id,
const iBase_EntityHandle  body 
)

Definition at line 111 of file copy_attrib.cpp.

{
  int err = 0;

  iGeom_setData(geom, body, tag, id.c_str(), id.size(), &err);
  std::cout<<"\nset pin tag - " << id<< " on " << body << std::endl;
  return 0;
}
int Tag_Get ( iGeom_Instance  geom,
const iBase_TagHandle  tag,
const iBase_EntityHandle  body 
)

Definition at line 127 of file copy_attrib.cpp.

{
  int err = 0, bytes;
  iGeom_getTagSizeBytes( geom, tag, &bytes, &err );
  CHECK( "Can't get size" );

  std::vector<char> data(bytes);

  //just check if pin tag exist, IT'S NOT USED IN THIS FUNCTION
  iBase_TagHandle pin1 = NULL;
  char* p = (char*)"PIN";

  iGeom_getTagHandle(geom, p, &pin1, &err, 3);
  CHECK( "PIN tag doesn't exist" );

  void* ptr = &data[0];
  int junk1 = bytes, junk2;
  iGeom_getData( geom, body, tag, (void**)&ptr, &junk1, &junk2, &err );
  CHECK( "failed to getData for tag" );
  std::cout << "Able to get this tag: "<<*(void**)ptr << " on " << body <<std::endl;
  return 0;
}
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines