[OpenWalnut-Dev] [OWci] r7591: [ADD] included also opacity weights into VisiTrace implementation --> VisiTrace should be complete now

Stefan Philips philips at informatik.uni-leipzig.de
Fri Jun 9 11:37:46 CEST 2017


Hallo Alex,

was spricht dagegen, das pickingDVR-Modul in einer eigenen Toolbox zu 
entwickeln?

Dafür spricht, dass
- das mal so verabredet wurde (keine neuen Module in das Kern-OpenWalnut)
- das OpenWalnut-Repo bleibt übersichtlicher
- das Modul noch stark in der Entwicklung ist
- das Modul (soweit ich weiß) keine Grundfunktionalität bereitstellt
- ich muß nicht immer nachsehen, ob etwas an OpenWalnut verändert wurde

Bitte nicht böse auffassen, aber eigentlich haben wir (Mathias, André 
und ich) hier immer Toolboxen benutzt. Dafür gibt es ja das Modules-Repo.

Viele Grüße

Stefan


On 08.06.2017 17:56, Alexander Wiebel wrote:
> *Branch default*
> [ADD] included also opacity weights into VisiTrace implementation --> VisiTrace should be complete now
>
> changeset 7591:e439839253c7 in /srv/hg/ow (Thu Jun 08 17:56:29 2017 +0200):
>
> http://www.openwalnut.org/projects/openwalnut/repository/revisions/7591
>
> diffstat:
>
>   src/modules/pickingDVR/WMPickingDVR.cpp       |   2 +-
>   src/modules/pickingDVR/WVisiTrace.cpp         |  38 +++++++++++++++++++++++---
>   src/modules/pickingDVR/test/WVisiTrace_test.h |  14 ++++----
>   3 files changed, 41 insertions(+), 13 deletions(-)
>
> diffs (136 lines):
>
> diff -r f9268f0c62e9 -r e439839253c7 src/modules/pickingDVR/WMPickingDVR.cpp
> --- a/src/modules/pickingDVR/WMPickingDVR.cpp	Thu Jun 08 17:41:00 2017 +0200
> +++ b/src/modules/pickingDVR/WMPickingDVR.cpp	Thu Jun 08 17:56:29 2017 +0200
> @@ -104,7 +104,7 @@
>       m_selectionTypesList = boost::shared_ptr< WItemSelection >( new WItemSelection() );
>       m_selectionTypesList->addItem( "Position (Picking)" );
>       m_selectionTypesList->addItem( "Line (First Hit)" );
> -    m_selectionTypesList->addItem( "Line (VisiTrace) [NOT YET CORRECTLY IMPLEMENTED]" );
> +    m_selectionTypesList->addItem( "Line (VisiTrace)" );
>       m_selectionType = m_properties->addProperty( "Selection type",
>                                                    "What type of structure is to be selected in the DVR?",
>                                                    m_selectionTypesList->getSelectorFirst(),
> diff -r f9268f0c62e9 -r e439839253c7 src/modules/pickingDVR/WVisiTrace.cpp
> --- a/src/modules/pickingDVR/WVisiTrace.cpp	Thu Jun 08 17:41:00 2017 +0200
> +++ b/src/modules/pickingDVR/WVisiTrace.cpp	Thu Jun 08 17:56:29 2017 +0200
> @@ -132,12 +132,15 @@
>       }
>   
>       std::vector< Edge > edgeVector( 0 );
> -    std::vector< double > weightsV( 0 );
> +    std::vector< double > distanceWeights( 0 );
> +    std::vector< double > opacityWeights( 0 );
> +
>       // Edges from virtual start node to candidates of first ray
>       for( auto candi : linearizedInverse[0] )
>       {
>           edgeVector.push_back( Edge( startNodeId, candi + numVirtNodes ) );
> -        weightsV.push_back( 1 );
> +        distanceWeights.push_back( 1 );
> +        opacityWeights.push_back( 1 );
>       }
>   
>       // Edges from candidates of one ray to those of the next ray
> @@ -152,20 +155,45 @@
>                   WPosition firstPos = m_candidatePositions[rayId][firstId];
>                   WPosition secondPos = m_candidatePositions[rayId+1][secondId];
>                   double distance = length( firstPos - secondPos );
> -                weightsV.push_back( distance );
> +                distanceWeights.push_back( distance );
> +                opacityWeights.push_back( 1 - m_candidateJumps[rayId+1][secondId] );
>               }
>           }
>       }
>   
> +    // Normalize distance weights
> +    {
> +        double maxDistance = 0;
> +        for( auto distance : distanceWeights )
> +        {
> +            if( distance > maxDistance )
> +            {
> +                maxDistance = distance;
> +            }
> +        }
> +        for( double& weight : distanceWeights ) // NOLINT
> +        {
> +            weight /= maxDistance;
> +        }
> +    }
> +
>       // Edges from candidates of last ray to virtual end node
>       for( auto candi : linearizedInverse[linearizedInverse.size()-1] )
>       {
>           edgeVector.push_back( Edge( candi + numVirtNodes, endNodeId ) );
> -        weightsV.push_back( 1 );
> +        distanceWeights.push_back( 1 );
> +        opacityWeights.push_back( 1 );
> +    }
> +
> +    WAssert( distanceWeights.size() == opacityWeights.size(), "Internal error: Need as many opacities as positions." );
> +    std::vector< double > overallWeights( distanceWeights.size() );
> +    for( size_t weightId = 0; weightId < overallWeights.size(); ++weightId )
> +    {
> +        overallWeights[weightId] = opacityWeights[weightId] * distanceWeights[weightId] * distanceWeights[weightId];
>       }
>   
>       Edge* edge_array = &edgeVector[0];
> -    double* weights = &weightsV[0];
> +    double* weights = &overallWeights[0];
>       int num_arcs = edgeVector.size();
>   
>       graph_t g( edge_array, edge_array + num_arcs, weights, num_nodes );
> diff -r f9268f0c62e9 -r e439839253c7 src/modules/pickingDVR/test/WVisiTrace_test.h
> --- a/src/modules/pickingDVR/test/WVisiTrace_test.h	Thu Jun 08 17:41:00 2017 +0200
> +++ b/src/modules/pickingDVR/test/WVisiTrace_test.h	Thu Jun 08 17:56:29 2017 +0200
> @@ -86,7 +86,7 @@
>           TS_ASSERT_EQUALS( order[2], std::make_pair( 0, 2 ) );
>           TS_ASSERT_EQUALS( order[3], std::make_pair( 0, 3 ) );
>   
> -         TS_ASSERT_EQUALS( order[5], std::make_pair( 1, 1 ) );
> +        TS_ASSERT_EQUALS( order[5], std::make_pair( 1, 1 ) );
>           TS_ASSERT_EQUALS( order[6], std::make_pair( 2, 0 ) );
>   
>           TS_ASSERT_EQUALS( order[27], std::make_pair( 5, 5 ) );
> @@ -123,7 +123,7 @@
>       }
>   
>       /**
> -     * Check throwing of Dijkstra
> +     * Check throwing of Dijkstra and result according to VisiTrace with constant opacity weights.
>        */
>       void testPerformDijkstraException()
>       {
> @@ -137,7 +137,7 @@
>                   WPosition( 1, 0, 3 )
>               }
>               );
> -        myVisiTrace.m_candidateJumps.push_back( { 1.0, 1.0, 1.0, 1.0 } ); // NOLINT
> +        myVisiTrace.m_candidateJumps.push_back( { 0.5, 0.5, 0.5, 0.5 } ); // NOLINT
>   
>           myVisiTrace.m_candidatePositions.push_back(
>               {
> @@ -145,7 +145,7 @@
>                   WPosition( 1, 1, -2.5 )
>               }
>               );
> -        myVisiTrace.m_candidateJumps.push_back( { 1.0, 1.0 } ); // NOLINT
> +        myVisiTrace.m_candidateJumps.push_back( { 0.5, 0.5 } ); // NOLINT
>   
>           myVisiTrace.m_candidatePositions.push_back(
>               {
> @@ -155,11 +155,11 @@
>                   WPosition( 1, 1.2, 3 )
>               }
>               );
> -        myVisiTrace.m_candidateJumps.push_back( { 1.0, 1.0, 1.0, 1.0 } ); // NOLINT
> +        myVisiTrace.m_candidateJumps.push_back( { 0.5, 0.5, 0.5, 0.5 } ); // NOLINT
>   
> -        TS_ASSERT( myVisiTrace.m_candidatePositions.size() != 0 );
> +        TS_ASSERT_EQUALS( myVisiTrace.m_candidatePositions.size(), 3 );
>           TS_ASSERT_THROWS_NOTHING( myVisiTrace.performDijkstra() );
> -        TS_ASSERT( myVisiTrace.m_curve3D.size() !=0 );
> +        TS_ASSERT_EQUALS( myVisiTrace.m_curve3D.size(), 3 );
>           TS_ASSERT_EQUALS( myVisiTrace.m_curve3D[0], WPosition( 1, 0, 0 ) );
>           TS_ASSERT_EQUALS( myVisiTrace.m_curve3D[1], WPosition( 1, 1, -2.5 ) );
>           TS_ASSERT_EQUALS( myVisiTrace.m_curve3D[2], WPosition( 1, 1.2, 0 ) );
> _______________________________________________
> All-openwalnut-commits mailing list
> All-openwalnut-commits at lists.informatik.uni-leipzig.de
> http://lists.informatik.uni-leipzig.de/mailman/listinfo/all-openwalnut-commits
>



More information about the OpenWalnut-Dev mailing list