|
cgma
|
#include <stdio.h>#include <math.h>#include "CubitDefines.h"#include "CubitVector.hpp"#include "Body.hpp"#include "RefVolume.hpp"#include "RefFace.hpp"#include "RefEdge.hpp"#include "RefVertex.hpp"#include "CubitObserver.hpp"#include "RefEntityFactory.hpp"#include "GeometryQueryTool.hpp"#include "GfxDebug.hpp"#include "GeometryDefines.h"#include "Loop.hpp"#include "CoFace.hpp"#include "CoEdge.hpp"#include "Surface.hpp"#include "DLIList.hpp"#include "CastTo.hpp"#include "CubitString.hpp"#include "CubitUtil.hpp"#include "GeomMeasureTool.hpp"#include "GeometryUtil.hpp"#include "ModelQueryEngine.hpp"#include "SDLList.hpp"Go to the source code of this file.
Classes | |
| class | LoopAngles |
Functions | |
| static void | dist_between (RefEdge *edge1, RefEdge *edge2, CubitVector &v1, CubitVector &v2, double &dist) |
| SDLListdeclare (SDLLoopAngles, LoopAngles *, angle_metric, double) CubitStatus RefFace | |
| static void dist_between | ( | RefEdge * | edge1, |
| RefEdge * | edge2, | ||
| CubitVector & | v1, | ||
| CubitVector & | v2, | ||
| double & | dist | ||
| ) | [static] |
Definition at line 115 of file RefFace.cpp.
{
// check compatibility first
DLIList<TopologyEntity*> entity_list(2);
DLIList<TopologyBridge*> bridge_list(2);
entity_list.append(edge1);
entity_list.append(edge2);
GeometryQueryEngine* gqe = GeometryQueryTool::instance()->common_query_engine( entity_list, bridge_list );
if(gqe)
GeometryQueryTool::instance()->entity_entity_distance(edge1, edge2, v1, v2, dist);
else
{
BasicTopologyEntity* bte1 = dynamic_cast<BasicTopologyEntity*>(edge1);
BasicTopologyEntity* bte2 = dynamic_cast<BasicTopologyEntity*>(edge2);
if(bte1 && bte2)
{
GeometryEntity *ge1 = dynamic_cast<GeometryEntity*>(bte1->bridge_manager()->topology_bridge());
GeometryEntity *ge2 = dynamic_cast<GeometryEntity*>(bte2->bridge_manager()->topology_bridge());
GeometryQueryTool::instance()->entity_entity_distance(ge1, ge2, v1, v2, dist);
}
}
}
| SDLListdeclare | ( | SDLLoopAngles | , |
| LoopAngles * | , | ||
| angle_metric | , | ||
| double | |||
| ) |
Definition at line 748 of file RefFace.cpp.
{
CubitStatus status;
SDLLoopAngles loop_angle_list;
// DLIList<LoopAngles*> loop_angle_list;
DLIList<Loop*> temp_loop_list;
//Get all of the loops for this RefFace.
loops( temp_loop_list );
if ( temp_loop_list.size() < 2 )
{
loop_list += temp_loop_list;
}
else
{
// See if the underlying geometry engine can give us the ordered list
// before trying to do it manually.
GeometryQueryTool::instance()->get_ordered_loops(this, loop_list);
if(loop_list.size() > 0 && loop_list.size() == temp_loop_list.size())
return CUBIT_SUCCESS;
else
loop_list.clean_out();
// If we were not able to get the ordered list from the underlying
// geometry engine we will do it manually.
// Order the list of loops from outside to inside.
Loop *loop_ptr;
LoopAngles *loop_angles;
for ( int ii = temp_loop_list.size(); ii > 0; ii-- )
{
loop_ptr = temp_loop_list.get_and_step();
loop_angles = new LoopAngles( loop_ptr );
status = loop_ptr->get_angle_metric( loop_angles->angleMetric );
if ( status == CUBIT_FAILURE )
{
PRINT_ERROR("In RefFace::ordered_loops\n"
" Unknown problem computing the angle metric"
" of the Loop.\n");
delete loop_angles;
while( loop_angle_list.size() != 0 )
delete loop_angle_list.remove();
return CUBIT_FAILURE;
}
loop_angle_list.append( loop_angles );
}
loop_angle_list.sort();
// std::stable_sort(&loop_angle_list[0], &loop_angle_list[0]+loop_angle_list.size(), DLIListSorter<LoopAngles*>());
loop_angle_list.reset();
for ( int jj = 0; jj < loop_angle_list.size(); jj++ )
{
Loop* loop = loop_angle_list.get_and_step()->loopPtr;
loop_list.append( loop );
bool debug = false;
if (debug)
{
DLIList<RefEdge*> edge_list;
loop->ordered_ref_edges(edge_list);
for (int kk = 0; kk < edge_list.size(); kk++)
{
RefEdge *e = edge_list[kk];
GfxDebug::highlight_ref_edge(e);
GfxDebug::flush();
}
GfxDebug::clear_highlight();
}
}
//Delete loop_angles
while( loop_angle_list.size() != 0 )
delete loop_angle_list.remove();
}
bool debug = false;
if (debug)
{
PRINT_INFO("Debugging ordered_loops\n");
for (int i = 0; i < loop_list.size(); i++)
{
DLIList<RefEdge*> edge_list;
Loop* loop = loop_list[i];
loop->ordered_ref_edges(edge_list);
PRINT_INFO(" Edges: ");
for (int j = 0; j < edge_list.size(); j++)
{
PRINT_INFO("%d ", edge_list[j]->id());
}
PRINT_INFO("\n");
}
}
return CUBIT_SUCCESS;
}