|
cgma
|
#include <VirtualImprintTool.hpp>
Static Public Member Functions | |
| static CubitStatus | virtual_imprint (RefFace *ref_face1, RefFace *ref_face2, DLIList< RefFace * > &results, double feature_size, CubitBoolean &curves_modified) |
| static CubitStatus | virtual_imprint (DLIList< RefFace * > &input_faces, DLIList< RefFace * > &surf_results, double feature_size, CubitBoolean &curves_modified) |
| static CubitStatus | virtual_imprint (RefVolume *ref_volume1, RefVolume *ref_volume2, DLIList< RefVolume * > &vol_results, double feature_size, CubitBoolean &others_modified) |
| static CubitStatus | virtual_imprint (DLIList< RefVolume * > &imprint_volumes, DLIList< RefVolume * > &vol_results, double feature_size, CubitBoolean &others_modified) |
Protected Member Functions | |
| VirtualImprintTool () | |
| ~VirtualImprintTool () | |
Static Private Attributes | |
| static CubitBoolean | useRealIntersection = CUBIT_FALSE |
Definition at line 24 of file VirtualImprintTool.hpp.
| VirtualImprintTool::VirtualImprintTool | ( | ) | [protected] |
Definition at line 23 of file VirtualImprintTool.cpp.
{
}
| VirtualImprintTool::~VirtualImprintTool | ( | ) | [protected] |
Constructor. This shouldn't get called since all of the functions are static.
Definition at line 29 of file VirtualImprintTool.cpp.
{}
| CubitStatus VirtualImprintTool::virtual_imprint | ( | RefFace * | ref_face1, |
| RefFace * | ref_face2, | ||
| DLIList< RefFace * > & | results, | ||
| double | feature_size, | ||
| CubitBoolean & | curves_modified | ||
| ) | [static] |
Destructor shouldn't do anything because it never allocates its own members
Definition at line 36 of file VirtualImprintTool.cpp.
{
if ( useRealIntersection )
{
/* SurfaceImprintTool imp_tool(feature_size);
CubitStatus stat = imp_tool.imprint_surface(ref_face1, ref_face2, results);
if (stat != CUBIT_SUCCESS )
return stat;
curves_modified = imp_tool.curves_modified();
return CUBIT_SUCCESS;
*/
return CUBIT_FAILURE;
}
else
{
ImprintBoundaryTool ib_tool(ref_face1, ref_face2, feature_size);
CubitStatus stat=ib_tool.imprint(results, CUBIT_FALSE);
if (stat != CUBIT_SUCCESS )
return stat;
if ( ib_tool.modified_bound_1() || ib_tool.modified_bound_2() )
curves_modified = CUBIT_TRUE;
return CUBIT_SUCCESS;
}
}
| CubitStatus VirtualImprintTool::virtual_imprint | ( | DLIList< RefFace * > & | input_faces, |
| DLIList< RefFace * > & | surf_results, | ||
| double | feature_size, | ||
| CubitBoolean & | curves_modified | ||
| ) | [static] |
Uses virtual geometry to imprint the two surfaces.
Definition at line 68 of file VirtualImprintTool.cpp.
{
int ii, jj;
//Do the n^2 thing, imprint every volume against every other volume...
DLIList <RefFace*> faces_stack = input_faces, ref_faces_close, tmp_results;
RefFace *curr_face, *canidate_face;
while ( faces_stack.size() > 0 )
{
curr_face = faces_stack.pop();
curr_face->marked(1);
ref_faces_close.clean_out();
CubitBox curr_box = curr_face->bounding_box();
for ( jj = input_faces.size(); jj > 0; jj-- )
{
canidate_face = input_faces.get_and_step();
if ( canidate_face == curr_face || canidate_face->marked() )
continue;
CubitBox canidate_box = canidate_face->bounding_box();
if ( curr_box.overlap(feature_size, canidate_box) )
ref_faces_close.append(canidate_face);
}
for ( jj = ref_faces_close.size(); jj > 0; jj-- )
{
//check for interrupt.
if ( AppUtil::instance()->interrupt() )
{
break;
}
tmp_results.clean_out();
canidate_face = ref_faces_close.get_and_step();
PRINT_INFO("Imprint Surfaces: %d %d\n", curr_face->id(), canidate_face->id() );
CubitStatus stat = virtual_imprint(curr_face, canidate_face,
tmp_results, feature_size,
curves_modified);
if ( stat != CUBIT_SUCCESS )
{
PRINT_ERROR("Problems imprinting Surface %d and %d\n",
curr_face->id(), canidate_face->id());
return stat;
}
if ( tmp_results.size() )
{
faces_stack.remove(canidate_face);
input_faces.remove(curr_face);
input_faces.remove(canidate_face);
int ll;
for ( ll = tmp_results.size(); ll > 0; ll-- )
{
canidate_face = tmp_results.get_and_step();
canidate_face->marked(0);
faces_stack.append(canidate_face);
input_faces.append(canidate_face);
}
surf_results += tmp_results;
break;
}
}
//check for interrupt.
if ( AppUtil::instance()->interrupt() )
{
//just break out and still clean up marks and stuff...
break;
}
}
for ( ii = 0; ii < surf_results.size(); ii++ )
surf_results.get_and_step()->marked(0);
DLIList <RefFace*> tmp_list;
for ( ii = 0; ii < surf_results.size(); ii++ )
{
curr_face = surf_results.get_and_step();
if ( curr_face->marked() )
continue;
else
{
tmp_list.append(curr_face);
curr_face->marked(1);
}
}
surf_results.clean_out();
for ( ii = 0; ii < tmp_list.size(); ii++ )
{
curr_face = tmp_list.get_and_step();
curr_face->marked(0);
surf_results.append(curr_face);
}
return CUBIT_SUCCESS;
}
| CubitStatus VirtualImprintTool::virtual_imprint | ( | RefVolume * | ref_volume1, |
| RefVolume * | ref_volume2, | ||
| DLIList< RefVolume * > & | vol_results, | ||
| double | feature_size, | ||
| CubitBoolean & | others_modified | ||
| ) | [static] |
imprint multiple surfaces.
Definition at line 161 of file VirtualImprintTool.cpp.
{
CubitBoolean ref_1_mod=CUBIT_FALSE, ref_2_mod = CUBIT_FALSE;
curves_modified = CUBIT_FALSE;
//First make sure the bounding boxes are close...
CubitBox ref_vol1_box = ref_volume1->bounding_box();
CubitBox ref_vol2_box = ref_volume2->bounding_box();
if ( !ref_vol1_box.overlap(feature_size, ref_vol2_box) )
return CUBIT_SUCCESS;
//Now get the list of surfaces for imprinting.
DLIList <RefFace*> ref_faces1, ref_faces2, ref_faces_close;
DLIList <RefFace*> faces1_stack, tmp_faces1,tmp_faces2, tmp_output;
DLIList <RefVolume*> tmp_vols;
RefFace *curr_ref_face, *canidate_ref_face;
ref_volume1->ref_faces(ref_faces1);
ref_volume2->ref_faces(ref_faces2);
int ii, jj;
CubitStatus stat;
//loop over the the ref_faces from the first list.
//Get all the reffaces that are within tolerance of its
//bounding box.
for ( ii = ref_faces1.size(); ii > 0; ii-- )
{
curr_ref_face = ref_faces1.get_and_step();
CubitBox curr_box = curr_ref_face->bounding_box();
ref_faces_close.clean_out();
//do this everytime to get the most up-to-date ones...
ref_faces2.clean_out();
ref_volume2->ref_faces(ref_faces2);
for ( jj = ref_faces2.size(); jj > 0; jj-- )
{
canidate_ref_face = ref_faces2.get_and_step();
CubitBox canidate_box = canidate_ref_face->bounding_box();
if ( curr_box.overlap(feature_size, canidate_box) )
ref_faces_close.append(canidate_ref_face);
}
//Now imprint the faces that are close with the curr_ref_face.
faces1_stack.clean_out();
faces1_stack.append( curr_ref_face);
while( faces1_stack.size() && (curr_ref_face = faces1_stack.pop()) != NULL &&
ref_faces_close.size() > 0 )
{
if ( AppUtil::instance()->interrupt() )
{
//just break out and still clean up marks and stuff...
break;
}
while (ref_faces_close.size() && (canidate_ref_face = ref_faces_close.pop()) != NULL )
{
tmp_output.clean_out();
stat = virtual_imprint(curr_ref_face,canidate_ref_face,
tmp_output, feature_size, curves_modified );
if ( stat != CUBIT_SUCCESS )
return stat;
//check for interrupt.
if ( AppUtil::instance()->interrupt() )
{
//just break out and still clean up marks and stuff...
break;
}
//Now sort the faces in tmp_output into two lists associated
//with the owning volumes...
for ( jj = tmp_output.size(); jj > 0;jj-- )
{
RefFace *ref_face = tmp_output.get_and_step();
tmp_vols.clean_out();
ref_face->ref_volumes(tmp_vols);
if ( tmp_vols.move_to(ref_volume1) )
{
ref_1_mod = CUBIT_TRUE;
tmp_faces1.append(ref_face);
}
else
{
ref_2_mod = CUBIT_TRUE;
tmp_faces2.append(ref_face);
}
}
if ( tmp_faces1.size() > 0 )
break;
}
faces1_stack += tmp_faces1;
ref_faces_close += tmp_faces2;
tmp_faces1.clean_out();
tmp_faces2.clean_out();
}
if ( AppUtil::instance()->interrupt() )
{
//just break out and still clean up marks and stuff...
break;
}
}
if ( ref_1_mod )
vol_results.append(ref_volume1);
if ( ref_2_mod )
vol_results.append(ref_volume2);
return CUBIT_SUCCESS;
}
| CubitStatus VirtualImprintTool::virtual_imprint | ( | DLIList< RefVolume * > & | imprint_volumes, |
| DLIList< RefVolume * > & | vol_results, | ||
| double | feature_size, | ||
| CubitBoolean & | others_modified | ||
| ) | [static] |
Uses virtual geometry to imprint the two volumes.
Definition at line 265 of file VirtualImprintTool.cpp.
{
int ii, jj;
//Do the n^2 thing, imprint every volume against every other volume...
DLIList <RefVolume*> marked_vols;
DLIList <RefVolume*> vols_stack = input_vols, ref_vols_close;
RefVolume *curr_volume, *canidate_volume;
while ( vols_stack.size() > 0 )
{
if ( AppUtil::instance()->interrupt() )
{
//just break out and still clean up marks and stuff...
break;
}
curr_volume = vols_stack.pop();
curr_volume->marked(1);
marked_vols.append(curr_volume);
ref_vols_close.clean_out();
CubitBox curr_box = curr_volume->bounding_box();
for ( jj = input_vols.size(); jj > 0; jj-- )
{
canidate_volume = input_vols.get_and_step();
if ( canidate_volume == curr_volume || canidate_volume->marked() )
continue;
CubitBox canidate_box = canidate_volume->bounding_box();
if ( curr_box.overlap(feature_size, canidate_box) )
ref_vols_close.append(canidate_volume);
}
for ( jj = ref_vols_close.size(); jj > 0; jj-- )
{
if ( AppUtil::instance()->interrupt() )
{
//just break out and still clean up marks and stuff...
break;
}
canidate_volume = ref_vols_close.get_and_step();
PRINT_INFO("Imprint Volumes: %d %d\n", curr_volume->id(), canidate_volume->id() );
CubitStatus stat = virtual_imprint(curr_volume, canidate_volume,
vol_results, feature_size,
curves_modified);
if ( stat != CUBIT_SUCCESS )
{
PRINT_ERROR("Problems imprinting volume %d and %d\n",
curr_volume->id(), canidate_volume->id());
return stat;
}
}
}
DLIList <RefVolume*> tmp_list;
for ( ii = 0; ii < vol_results.size(); ii++ )
{
curr_volume = vol_results.get_and_step();
if ( curr_volume->marked() )
continue;
else
{
tmp_list.append(curr_volume);
curr_volume->marked(1);
marked_vols.append(curr_volume);
}
}
vol_results.clean_out();
for ( ii = 0; ii < tmp_list.size(); ii++ )
{
curr_volume = tmp_list.get_and_step();
vol_results.append(curr_volume);
}
for ( ii = 0; ii < marked_vols.size(); ii++ )
marked_vols.get_and_step()->marked(0);
return CUBIT_SUCCESS;
}
CubitBoolean VirtualImprintTool::useRealIntersection = CUBIT_FALSE [static, private] |
Imprints the volumes in the list against each other.
Definition at line 78 of file VirtualImprintTool.hpp.