// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 #pragma once #include #include #include namespace frantic { namespace particles { namespace streams { class volume_culling_policy : public culling_policy_base { boost::shared_ptr m_volume; frantic::channels::channel_accessor m_posAccessor; bool m_cullOutside; public: typedef boost::tuples::tuple, bool> args_type; volume_culling_policy( const args_type& args, const frantic::channels::channel_map& pcm ) : m_volume( args.get<0>() ) , m_cullOutside( args.get<1>() ) { set_channel_map( pcm ); } // Need a splitting constructor to support TBB volume_culling_policy( const volume_culling_policy& lhs, tbb::split ) : m_volume( lhs.m_volume ) , m_cullOutside( lhs.m_cullOutside ) , m_posAccessor( lhs.m_posAccessor ) {} void set_channel_map( const frantic::channels::channel_map& pcm ) { m_posAccessor = pcm.get_accessor( _T("Position") ); } bool cull( char* particle ) const { return m_volume->is_point_in_volume( m_posAccessor.get( particle ) ) != m_cullOutside; } }; typedef culling_particle_istream volume_culled_particle_istream; } // namespace streams } // namespace particles } // namespace frantic