Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:48:52

0001 /**
0002 
0003 ~/o/CSG/tests/CSGFoundryLoadTest.sh
0004 
0005 **/
0006 
0007 
0008 #include "OPTICKS_LOG.hh"
0009 #include "SSim.hh"
0010 #include "stree.h"
0011 #include "ssys.h"
0012 #include "SScene.h"
0013 #include "CSGFoundry.h"
0014 
0015 struct CSGFoundryLoadTest
0016 {
0017     static int Load();
0018     static int getMeshPrim();
0019     static int descPrimRange();
0020     static int CompareRanges();
0021     static int CSGPrim_AABB_Overlap();
0022 
0023     static int Main(int argc, char** argv);
0024 };
0025 
0026 
0027 inline int CSGFoundryLoadTest::Main(int argc, char** argv)
0028 {
0029     OPTICKS_LOG(argc, argv);
0030 
0031     const char* TEST = ssys::getenvvar("TEST", "Load");
0032     bool ALL = strcmp(TEST,"ALL") == 0 ;
0033     int rc = 0 ;
0034     if(ALL||0==strcmp(TEST,"Load")) rc += Load();
0035     if(ALL||0==strcmp(TEST,"getMeshPrim")) rc += getMeshPrim();
0036     if(ALL||0==strcmp(TEST,"descPrimRange")) rc += descPrimRange();
0037     if(ALL||0==strcmp(TEST,"CompareRanges")) rc += CompareRanges();
0038     if(ALL||0==strcmp(TEST,"CSGPrim_AABB_Overlap")) rc += CSGPrim_AABB_Overlap();
0039     return rc ;
0040 }
0041 
0042 inline int CSGFoundryLoadTest::Load()
0043 {
0044     CSGFoundry* fd = CSGFoundry::Load() ;
0045 
0046     LOG(info) << " -------------------- After CSGFoundry::Load " ;
0047 
0048     LOG(info) << fd->descBase() ;
0049     LOG(info) << fd->desc() ;
0050     LOG(info) << " -------------------- After CSGFoundry::desc " ;
0051 
0052     stree* st = fd->sim->tree ;
0053     LOG(info) << st->desc() ;
0054     LOG(info) << " -------------------- After stree::desc " ;
0055 
0056     return 0 ;
0057 }
0058 
0059 inline int CSGFoundryLoadTest::getMeshPrim()
0060 {
0061     int LVID = ssys::getenvint("LVID", 0);
0062     std::cout << "[CSGFoundryLoadTest::getMeshPrim LVID " << LVID << "\n" ;
0063     CSGFoundry* fd = CSGFoundry::Load() ;
0064     std::cout << fd->descBase() ;
0065 
0066     unsigned mesh_idx = LVID ;
0067     std::vector<const CSGPrim*> prim ;
0068     fd->getMeshPrimPointers(prim, mesh_idx);
0069 
0070     std::cout << "]CSGFoundryLoadTest::getMeshPrim LVID " << LVID << "\n" << CSGPrim::Desc(prim) ;
0071 
0072     return 0 ;
0073 }
0074 
0075 inline int CSGFoundryLoadTest::descPrimRange()
0076 {
0077     std::cout << "[CSGFoundryLoadTest::descPrimRange \n" ;
0078     CSGFoundry* fd = CSGFoundry::Load() ;
0079     std::cout << fd->descBase() ;
0080     std::cout << fd->descPrimRange() ;
0081     std::cout << fd->descBase() ;
0082     std::cout << "]CSGFoundryLoadTest::descPrimRange\n" ;
0083     return 0 ;
0084 }
0085 
0086 inline int CSGFoundryLoadTest::CompareRanges()
0087 {
0088     int SID = ssys::getenvint("SID", -1);
0089 
0090     CSGFoundry* fd = CSGFoundry::Load() ;
0091     size_t num_solid = fd->solid.size() ;
0092 
0093     int solidIdx = SID >= 0 ? SID : num_solid + SID ;
0094     stree* tr = fd->sim->tree ;
0095     SScene* sc = fd->sim->scene ;
0096 
0097     assert( sc->meshgroup.size() == num_solid );
0098 
0099     const SMeshGroup* mg = sc->meshgroup[solidIdx] ;
0100 
0101     std::cout
0102         << "[CSGFoundryLoadTest::CompareRanges \n"
0103         << fd->descBase()
0104         << " SID " << SID
0105         << " num_solid " << num_solid
0106         << " solidIdx " << solidIdx
0107         << " tr " << ( tr ? "YES" : "NO " )
0108         << " sc " << ( sc ? "YES" : "NO " )
0109         << " mg " << ( mg ? "YES" : "NO " )
0110         << "\n"
0111         ;
0112 
0113     std::cout << fd->comparePrimRange(solidIdx, mg) ;
0114 
0115     std::cout
0116         << fd->descBase()
0117         << "]CSGFoundryLoadTest::CompareRanges\n"
0118         ;
0119     return 0 ;
0120 }
0121 
0122 
0123 /**
0124 CSGFoundryLoadTest::CSGPrim_AABB_Overlap
0125 ------------------------------------------
0126 
0127 Better to do this at stree level, see stree::get_global_aabb_sibling_overlaps
0128 
0129 **/
0130 
0131 inline int CSGFoundryLoadTest::CSGPrim_AABB_Overlap()
0132 {
0133     CSGFoundry* fd = CSGFoundry::Load() ;
0134 
0135     stree* tree = fd->getTree();
0136     size_t num_solid = fd->solid.size() ;
0137 
0138     std::cout
0139         << "[CSGFoundryLoadTest::CSGPrim_AABB_Overlap \n"
0140         << " tree " << ( tree ? "YES" : "NO " )
0141         << "\n"
0142         << fd->descBase()
0143         << "\n"
0144         << " num_solid " << num_solid
0145         << "\n"
0146         << fd->desc()
0147         << "\n"
0148         ;
0149 
0150 
0151     return 0 ;
0152 }
0153 
0154 
0155 
0156 
0157 int main(int argc, char** argv)
0158 {
0159     return CSGFoundryLoadTest::Main(argc, argv) ;
0160 }