Fixing screen height in geometry and adding all 4x4 scenes

parent 8bbe53e5
......@@ -38,6 +38,7 @@ using namespace ITAPropagationPathSim;
#include <libjson.h>
#endif
int main( int iNumInArgs, char* pcInArgs[] )
{
std::string sInFile = "GRAS_scene5_geometry.skp";
......@@ -54,6 +55,60 @@ int main( int iNumInArgs, char* pcInArgs[] )
return 255;
}
// Scene
struct CGRASScene
{
inline CGRASScene( const std::string& sName, std::shared_ptr< CEmitter > pEmitter, std::shared_ptr< CSensor > pSensor )
: sName( sName )
, pEmitter( pEmitter )
, pSensor( pSensor )
{
};
std::shared_ptr< CSensor > pSensor;
std::shared_ptr< CEmitter > pEmitter;
std::string sName;
};
auto pMP01 = make_shared< CSensor >( VistaVector3D( 8.512f, 2.985f, 1.235f ) );
pMP01->sName = "MP01_GRAS40AF";
auto pMP02 = make_shared< CSensor >( VistaVector3D( 8.512f, 2.985f, 0.006f ) );
pMP02->sName = "MP02_GRAS40AF";
auto pMP03 = make_shared< CSensor >( VistaVector3D( 8.512f, 2.985f, 2.0f ) );
pMP03->sName = "MP03_GRAS40AF";
auto pMP04 = make_shared< CSensor >( VistaVector3D( 8.512f, 2.985f, 3.0f ) );
pMP04->sName = "MP04_GRAS40AF";
auto pLS01 = make_shared< CEmitter >( VistaVector3D( 2.487f, 2.985f, 1.235f ) );
pLS01->sName = "LS01_Genelec8020c";
auto pLS02 = make_shared< CEmitter >( VistaVector3D( 2.487f, 2.985f, 2.0f ) );
pLS02->sName = "LS02_Genelec8020c";
auto pLS03 = make_shared< CEmitter >( VistaVector3D( 2.487f, 2.985f, 3.0f ) );
pLS03->sName = "LS03_Genelec8020c";
auto pLS04 = make_shared< CEmitter >( VistaVector3D( 2.487f, 2.985f, 0.135f ) );
pLS04->qOrient = VistaQuaternion(); // @todo apply transform of theta = 34.6 degree around Y direction
pLS04->sName = "LS04_Genelec8020c";
std::vector< CGRASScene > vGRAS_5_1_Scenes = {
CGRASScene( "GRAS_5_1_LS01_MP01", pLS01, pMP01 ),
CGRASScene( "GRAS_5_1_LS02_MP01", pLS02, pMP01 ),
CGRASScene( "GRAS_5_1_LS03_MP01", pLS03, pMP01 ),
CGRASScene( "GRAS_5_1_LS04_MP01", pLS04, pMP01 ),
CGRASScene( "GRAS_5_1_LS01_MP02", pLS01, pMP02 ),
CGRASScene( "GRAS_5_1_LS02_MP02", pLS02, pMP02 ),
CGRASScene( "GRAS_5_1_LS03_MP02", pLS03, pMP02 ),
CGRASScene( "GRAS_5_1_LS04_MP02", pLS04, pMP02 ),
CGRASScene( "GRAS_5_1_LS01_MP03", pLS01, pMP03 ),
CGRASScene( "GRAS_5_1_LS02_MP03", pLS02, pMP03 ),
CGRASScene( "GRAS_5_1_LS03_MP03", pLS03, pMP03 ),
CGRASScene( "GRAS_5_1_LS04_MP03", pLS04, pMP03 ),
CGRASScene( "GRAS_5_1_LS01_MP04", pLS01, pMP04 ),
CGRASScene( "GRAS_5_1_LS02_MP04", pLS02, pMP04 ),
CGRASScene( "GRAS_5_1_LS03_MP04", pLS03, pMP04 ),
CGRASScene( "GRAS_5_1_LS04_MP04", pLS04, pMP04 ),
};
// Configuration
......@@ -75,91 +130,87 @@ int main( int iNumInArgs, char* pcInArgs[] )
const int iMaxReflectionOrder = 3;
const int iMaxCombinedOrder = 5;
ITAStopWatch sw; sw.start();
auto pSensor = make_shared< CSensor >( VistaVector3D( 8.512f, 2.985f, 1.235f ) );
pSensor->qOrient = VistaQuaternion( Vista::ZeroVector, VistaVector3D( -1.0f, 0.0f, 0.0f ) );
pSensor->sName = "MP01_FABIAN";
ITAStopWatch sw;
for( auto& scene : vGRAS_5_1_Scenes )
{
sw.start();
auto pEmitter = make_shared< CEmitter >( VistaVector3D( 2.487f, 2.985f, 2.0f ) );
pEmitter->sName = "LS02_Genelec8020c";
auto pPathEngine = make_shared<CombinedModel::CPathEngine>();
cout << "Calculation time initialization path engine: " << timeToString( sw.stop() ) << endl;
auto pPathEngine = make_shared<CombinedModel::CPathEngine>();
cout << "Calculation time initialization path engine: " << timeToString( sw.stop() ) << endl;
sw.start();
sw.start();
pPathEngine->Configure( bOnlyNeighbouredEdgeDiffraction, bDiffractionOnlyIntoShadowedEdges, bFilterNotVisiblePathsBetweenEdges, bFilterNotVisiblePointToEdge, bFilterNotVisiblePointToEdge, bFilterNotVisiblePaths, iNumIterations, fIntersectionTestResolution );
pPathEngine->SetAbortionCriteria( iMaxDiffractionOrder, iMaxReflectionOrder, iMaxCombinedOrder, fLevelDropThreshhold, fReflectionPenalty, fDiffractionPenalty, fMaxAccumulatedDiffractionAngle );
cout << "Calculation time configuring filter: " << timeToString( sw.stop() ) << endl;
pPathEngine->Configure( bOnlyNeighbouredEdgeDiffraction, bDiffractionOnlyIntoShadowedEdges, bFilterNotVisiblePathsBetweenEdges, bFilterNotVisiblePointToEdge, bFilterNotVisiblePointToEdge, bFilterNotVisiblePaths, iNumIterations, fIntersectionTestResolution );
pPathEngine->SetAbortionCriteria( iMaxDiffractionOrder, iMaxReflectionOrder, iMaxCombinedOrder, fLevelDropThreshhold, fReflectionPenalty, fDiffractionPenalty, fMaxAccumulatedDiffractionAngle );
cout << "Calculation time configuring filter: " << timeToString( sw.stop() ) << endl;
sw.start();
sw.start();
pPathEngine->InitializePathEnvironment( pMeshModelList );
cout << "Calculation time initialization path environment: " << timeToString( sw.stop() ) << endl;
pPathEngine->InitializePathEnvironment( pMeshModelList );
cout << "Calculation time initialization path environment: " << timeToString( sw.stop() ) << endl;
sw.start();
sw.start();
pPathEngine->ApplyEmitter( scene.pEmitter );
cout << "Calculation time applying emitter: " << timeToString( sw.stop() ) << endl;
pPathEngine->ApplyEmitter( pEmitter );
cout << "Calculation time applying emitter: " << timeToString( sw.stop() ) << endl;
cout << "Number propagation path candidates after source insertion: " << pPathEngine->GetNumberPropagationPathCandidates() << endl;
cout << "Number propagation path candidates after source insertion: " << pPathEngine->GetNumberPropagationPathCandidates() << endl;
sw.start();
sw.start();
pPathEngine->ApplySensor( scene.pSensor );
cout << "Calculation time applying sensor: " << timeToString( sw.stop() ) << endl;
pPathEngine->ApplySensor( pSensor );
cout << "Calculation time applying sensor: " << timeToString( sw.stop() ) << endl;
CPropagationPathList oPathList;
cout << "Calculation time applying sensor: " << timeToString( sw.stop() ) << endl;
CPropagationPathList oPathList;
cout << "Calculation time applying sensor: " << timeToString( sw.stop() ) << endl;
sw.start();
sw.start();
pPathEngine->ConstructPropagationPaths( oPathList );
//pPathEngine->ConstructPropagationPathsWithStopWatch(oPathListAll);
cout << "Calculation time propagation path creation: " << timeToString( sw.stop() ) << endl;
pPathEngine->ConstructPropagationPaths( oPathList );
//pPathEngine->ConstructPropagationPathsWithStopWatch(oPathListAll);
cout << "Calculation time propagation path creation: " << timeToString( sw.stop() ) << endl;
cout << "Visible paths: " << to_string( oPathList.size() ) << endl;
cout << "Visible paths: " << to_string( oPathList.size() ) << endl;
SketchUp::CModel oGeoModel_Viz;
if( oGeoModel_Viz.Load( sInFile ) )
{
cout << "Successfully loaded '" << sInFile << "'" << endl;
}
else
{
cerr << "Could not load " << sInFile << endl;
return 255;
}
SketchUp::CModel oGeoModel_Viz;
if( oGeoModel_Viz.Load( sInFile ) )
{
cout << "Successfully loaded '" << sInFile << "'" << endl;
}
else
{
cerr << "Could not load " << sInFile << endl;
return 255;
}
oGeoModel_Viz.AddEmitterVisualization( *scene.pEmitter, scene.pEmitter->sName );
oGeoModel_Viz.AddSensorVisualization( *scene.pSensor, scene.pSensor->sName );
oGeoModel_Viz.AddEmitterVisualization( *pEmitter, pEmitter->sName );
oGeoModel_Viz.AddSensorVisualization( *pSensor, pSensor->sName );
cout << "The path with the longest length is " << oPathList.GetMaxLength() << " m." << endl;
cout << "The path with the longest length is " << oPathList.GetMaxLength() << " m." << endl;
size_t numberOfPaths[ iMaxDiffractionOrder + 1 ][ iMaxReflectionOrder + 1 ] = { 0 };
for( auto& oPath : oPathList )
{
long iNumReflections = ( long ) oPath.GetNumReflections();
long iNumDiffractions = ( long ) oPath.GetNumDiffractions();
size_t numberOfPaths[ iMaxDiffractionOrder + 1 ][ iMaxReflectionOrder + 1 ] = { 0 };
for( auto& oPath : oPathList )
{
long iNumReflections = ( long ) oPath.GetNumReflections();
long iNumDiffractions = ( long ) oPath.GetNumDiffractions();
numberOfPaths[ iNumDiffractions ][ iNumReflections ]++;
}
numberOfPaths[ iNumDiffractions ][ iNumReflections ]++;
}
for( auto& oPath : oPathList )
{
long iNumReflections = ( long ) oPath.GetNumReflections();
long iNumDiffractions = ( long ) oPath.GetNumDiffractions();
for( auto& oPath : oPathList )
{
long iNumReflections = ( long ) oPath.GetNumReflections();
long iNumDiffractions = ( long ) oPath.GetNumDiffractions();
string sPathName = "Refl_Order_" + to_string( iNumReflections ) + "_Diffr_Order_" + to_string( iNumDiffractions ) + "_Path_Amount_" + to_string( numberOfPaths[ iNumDiffractions ][ iNumReflections ] );
oGeoModel_Viz.AddPropagationPathVisualization( oPath, sPathName );
}
oPathList.Store( scene.sName + "_propagation_paths.json" );
string sPathName = "Refl_Order_" + to_string( iNumReflections ) + "_Diffr_Order_" + to_string( iNumDiffractions ) + "_Path_Amount_" + to_string( numberOfPaths[ iNumDiffractions ][ iNumReflections ] );
oGeoModel_Viz.AddPropagationPathVisualization( oPath, sPathName );
oGeoModel_Viz.Store( scene.sName + "_visualization.skp" );
}
oPathList.Store( "GRAS_scene5_propagation_paths.json" );
oGeoModel_Viz.Store( "GRAS_scene5_visualization.skp" );
return 0;
}
B໿SketchUp Modelࣿ{18.0.1}᳎ꈥ葇䟻ⰲ젂懿C:\dev\ITAGeometricalAcoustics\ITAPropagationPathSim\tests\CombinedModel\GRAS_scene5_geometry.skp횗岸￿ 噃牥楳湯慍ー￾䌉䄀爀挀䌀甀爀瘀攀̀＀￾䌊䄀琀琀爀椀戀甀琀攀＀￾䌓䄀琀琀爀椀戀甀琀攀䌀漀渀琀愀椀渀攀爀＀￾䌏䄀琀琀爀椀戀甀琀攀一愀洀攀搀Ā＀￾䌐䈀愀挀欀最爀漀甀渀搀䤀洀愀最攀਀＀￾䌇䌀愀洀攀爀愀Ԁ＀￾䌊䌀漀洀瀀漀渀攀渀琀଀＀￾䌒䌀漀洀瀀漀渀攀渀琀䈀攀栀愀瘀椀漀爀Ԁ＀￾䌔䌀漀洀瀀漀渀攀渀琀䐀攀昀椀渀椀琀椀漀渀଀＀￾䌒䌀漀洀瀀漀渀攀渀琀䤀渀猀琀愀渀挀攀؀＀￾䌕䌀漀渀猀琀爀甀挀琀椀漀渀䜀攀漀洀攀琀爀礀＀￾䌑䌀漀渀猀琀爀甀挀琀椀漀渀䰀椀渀攀Ā＀￾䌒䌀漀渀猀琀爀甀挀琀椀漀渀倀漀椀渀琀＀￾䌆䌀甀爀瘀攀Ѐ＀￾䌏䐀攀昀椀渀椀琀椀漀渀䰀椀猀琀＀￾䌄䐀椀戀̀＀￾䌊䐀椀洀攀渀猀椀漀渀Ā＀￾䌐䐀椀洀攀渀猀椀漀渀䰀椀渀攀愀爀؀＀￾䌐䐀椀洀攀渀猀椀漀渀刀愀搀椀愀氀Ȁ＀￾䌏䐀椀洀攀渀猀椀漀渀匀琀礀氀攀Ѐ＀￾䌏䐀爀愀眀椀渀最䔀氀攀洀攀渀琀ऀ＀￾䌅䔀搀最攀Ȁ＀￾䌈䔀搀最攀唀猀攀Ā＀￾䌇䔀渀琀椀琀礀Ԁ＀￾䌅䘀愀挀攀̀＀￾䌒䘀愀挀攀吀攀砀琀甀爀攀䌀漀漀爀搀猀Ѐ＀￾䌌䘀漀渀琀䴀愀渀愀最攀爀＀￾䌆䜀爀漀甀瀀Ā＀￾䌆䤀洀愀最攀Ā＀￾䌆䰀愀礀攀爀Ȁ＀￾䌍䰀愀礀攀爀䴀愀渀愀最攀爀Ѐ＀￾䌅䰀漀漀瀀Ā＀￾䌉䴀愀琀攀爀椀愀氀ఀ＀￾䌐䴀愀琀攀爀椀愀氀䴀愀渀愀最攀爀Ѐ＀￾䌉倀愀最攀䰀椀猀琀Ā＀￾䌋倀漀氀礀氀椀渀攀㌀搀＀￾䌍刀攀氀愀琀椀漀渀猀栀椀瀀＀￾䌐刀攀氀愀琀椀漀渀猀栀椀瀀䴀愀瀀＀￾䌑刀攀渀搀攀爀椀渀最伀瀀琀椀漀渀猀─＀￾䌋匀挀栀攀洀愀䘀椀氀攀Ā＀￾䌑匀挀栀攀洀愀䘀椀氀琀攀爀䘀椀氀攀＀￾䌎匀挀栀攀洀愀娀椀瀀䘀椀氀攀Ā＀￾䌍匀攀挀琀椀漀渀倀氀愀渀攀̀＀￾䌋匀栀愀搀漀眀䤀渀昀漀܀＀￾䌇匀欀䘀漀渀琀Ā＀￾䌉匀欀攀琀挀栀䌀匀＀￾䌎匀欀攀琀挀栀唀瀀䴀漀搀攀氀ᰀ＀￾䌍匀欀攀琀挀栀唀瀀倀愀最攀Ā＀￾䌉匀欀瀀匀琀礀氀攀Ā＀￾䌐匀欀瀀匀琀礀氀攀䴀愀渀愀最攀爀Ȁ＀￾䌅吀攀砀琀ऀ＀￾䌊吀攀砀琀匀琀礀氀攀Ԁ＀￾䌈吀攀砀琀甀爀攀؀＀￾䌊吀栀甀洀戀渀愀椀氀Ā＀￾䌇嘀攀爀琀攀砀＀￾䌉嘀椀攀眀倀愀最攀ఀ＀￾䌊圀愀琀攀爀洀愀爀欀Ā＀￾䌑圀愀琀攀爀洀愀爀欀䴀愀渀愀最攀爀Ȁ＀￾䔒渀搀ⴀ伀昀ⴀ嘀攀爀猀椀漀渀ⴀ䴀愀瀀Ā뀀Ā紀ö＀ϿЀ䌀楄Ѣ䬀褀乐േᨊ
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment