cgma
PointLoopFacetor Class Reference

#include <PointLoopFacetor.hpp>

List of all members.

Public Member Functions

 PointLoopFacetor ()
 ~PointLoopFacetor ()

Static Public Member Functions

static CubitStatus generate_facets (PointLoopList &boundary_loops, DLIList< CubitFacet * > &resulting_triangles)
static void write_xy (PointLoopList &boundary_loops)
static void write_xyz (PointLoopList &boundary_loops)

Detailed Description

Definition at line 23 of file PointLoopFacetor.hpp.


Constructor & Destructor Documentation

Definition at line 28 of file PointLoopFacetor.hpp.

    {}

Definition at line 30 of file PointLoopFacetor.hpp.

    {}

Member Function Documentation

CubitStatus PointLoopFacetor::generate_facets ( PointLoopList boundary_loops,
DLIList< CubitFacet * > &  resulting_triangles 
) [static]

-----------------------------------------------------------------------------------

Definition at line 23 of file PointLoopFacetor.cpp.

{
    //First transform the boundary points to the XY plane.
  LoopParamTool *l_tool = new LoopParamTool;
  if ( l_tool->new_space_LoopParam(boundary_loops) != CUBIT_SUCCESS )
  {
    delete l_tool;
    
    PRINT_ERROR("Faild to generate loop u-v space for generating facets of boundary points.\n");
    return CUBIT_FAILURE;
  }
    //Now transform the poins.
  int ii, jj;
  if ( l_tool->transform_loopspoints_to_uv(boundary_loops) != CUBIT_SUCCESS )
  {
    write_xy(boundary_loops);
      //Now transform the points back to their original location and remomve the TDVector.
    CubitPoint *curr_point;
    ToolData *td;
    TDVector *td_vec;
    CubitVector orig_vec;
    PointList bounding_points, *curr_list;
    for ( ii = 0; ii < boundary_loops.size(); ii++)
    {
      curr_list = boundary_loops.get_and_step();
      bounding_points += (*curr_list);
    }
    for ( ii = 0; ii < bounding_points.size(); ii++ )
    {
      curr_point = bounding_points.get_and_step();
      td = curr_point->get_TD(&TDVector::is_td_vector);
      if ( td == NULL )
      {
        PRINT_ERROR("No TDVector on CubitPoint, can't transform back to x-y-z.\n");
        assert(td !=NULL);
      }
      td_vec = CAST_TO(td, TDVector);
      orig_vec = td_vec->get_vector();
      curr_point->set(orig_vec);
      curr_point->delete_TD(&TDVector::is_td_vector);
    }
    write_xyz(boundary_loops);
    
    delete l_tool;
    PRINT_ERROR("Faild to transform loop to u-v space for generating facets of boundary points.\n");
    return CUBIT_FAILURE;
  }
  delete l_tool;
    //now generate a triangulation for these nodes.
  int num_boundary_edges = 0;
  PointList bounding_points, *curr_list;
  for ( ii = 0; ii < boundary_loops.size(); ii++)
  {
    curr_list = boundary_loops.get_and_step();
    num_boundary_edges += curr_list->size();
    bounding_points += (*curr_list);
  }
  CubitPoint **start_nodes = new CubitPoint* [num_boundary_edges];
  CubitPoint **end_nodes = new CubitPoint* [num_boundary_edges];
  int array_index = 0;
  for ( ii = 0; ii < boundary_loops.size(); ii++ )
  {
    curr_list = boundary_loops.get_and_step();
    for ( jj = 0; jj < curr_list->size(); jj++ )
    {
      assert(array_index < num_boundary_edges);
      start_nodes[array_index] = curr_list->get_and_step();
      end_nodes[array_index] = curr_list->get();
      array_index++;
    }
  }
  if ( array_index != bounding_points.size() )
  {
    PRINT_ERROR("Problem building edge arrays for faceting.\n");
    assert(array_index == bounding_points.size());
    return CUBIT_FAILURE;
  }
  int dummy_variable = -1;
  int surf_id = 1;
  FacetorTool<int,CubitFacet, CubitFacetEdge,
              CubitPoint, CubitFacetData, CubitPointData, int>
    facetor = FacetorTool<int,CubitFacet, CubitFacetEdge, CubitPoint,
              CubitFacetData, CubitPointData, int> (&surf_id, bounding_points,
                                                    start_nodes, end_nodes, num_boundary_edges,
                                                    &dummy_variable, l_tool);
  if (facetor.mesh_surfwoIP(resulting_triangles) != CUBIT_SUCCESS )
  {
    PRINT_ERROR("The facetor tool failed.\n");
    return CUBIT_FAILURE;
  }
    //Now transform the points back to their original location and remomve the TDVector.
  CubitPoint *curr_point;
  ToolData *td;
  TDVector *td_vec;
  CubitVector orig_vec;
  for ( ii = 0; ii < bounding_points.size(); ii++ )
  {
    curr_point = bounding_points.get_and_step();
    td = curr_point->get_TD(&TDVector::is_td_vector);
    if ( td == NULL )
    {
      PRINT_ERROR("No TDVector on CubitPoint, can't transform back to x-y-z.\n");
      assert(td !=NULL);
    }
    td_vec = CAST_TO(td, TDVector);
    orig_vec = td_vec->get_vector();
    curr_point->set(orig_vec);
    curr_point->delete_TD(&TDVector::is_td_vector);
  }
    //Now update the facet planes...
  CubitFacet *facet;
  for ( ii = 0; ii < resulting_triangles.size(); ii++ )
  {
    facet = resulting_triangles.get_and_step();
    facet->reset_bounding_box();
    facet->update_plane();
  }
  return CUBIT_SUCCESS;
}
void PointLoopFacetor::write_xy ( PointLoopList boundary_loops) [static]

This function does the triangulation.

Definition at line 171 of file PointLoopFacetor.cpp.

{
  
  FILE *fp = fopen("Loop_transformed.txt", "w");
  if (!fp)
  {
    PRINT_ERROR("Couldn't open temp file for writing.\n");
    return;
  }
  PointList *node_loop;
  CubitPoint *point_ptr;
  CubitVector coords;
  fprintf(fp, "Transformed locations\n");
  int ii, jj;
  for ( ii = boundary_loops.size(); ii > 0; ii-- )
  {
    node_loop = boundary_loops.get_and_step();
    fprintf(fp, "Loop %d, contains %d nodes\n", ii, node_loop->size());
    node_loop->reset();
    for(jj=0; jj<node_loop->size(); jj++)
    {
      point_ptr = node_loop->get_and_step();
      coords = point_ptr->coordinates();
      fprintf(fp,"%d\t%f\t%f\n", jj, coords.x(), coords.y());
      
    }
  }
  fclose(fp);
}
void PointLoopFacetor::write_xyz ( PointLoopList boundary_loops) [static]

Definition at line 143 of file PointLoopFacetor.cpp.

{
  
  FILE *fp = fopen("Loop.txt", "w");
  if (!fp)
  {
    PRINT_ERROR("Couldn't open temp file for writing.\n");
    return;
  }
  PointList *node_loop;
  CubitPoint *point_ptr;
  CubitVector coords;
  fprintf(fp, "Real locations\n");
  int ii, jj;
  for ( ii = boundary_loops.size(); ii > 0; ii-- )
  {
    node_loop = boundary_loops.get_and_step();
    fprintf(fp, "Loop %d, contains %d nodes\n", ii, node_loop->size());
    node_loop->reset();
    for(jj=0; jj<node_loop->size(); jj++)
    {
      point_ptr = node_loop->get_and_step();
      coords = point_ptr->coordinates();
      fprintf(fp,"%d\t%f\t%f\t%f\n", jj, coords.x(), coords.y(), coords.z());
    }
  }
  fclose(fp);
}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines