ResInsight/Fwk/AppFwk/cafVizExtensions/cafBoxManipulatorGeometryGenerator.cpp

94 lines
2.9 KiB
C++
Raw Permalink Normal View History

#include "cafBoxManipulatorGeometryGenerator.h"
#include "cvfBoxGenerator.h"
#include "cvfDrawableGeo.h"
#include "cvfGeometryBuilderFaceList.h"
#include "cvfPrimitiveSetIndexedUInt.h"
#include "cvfStructGridGeometryGenerator.h"
using namespace cvf;
2020-06-19 00:53:59 -05:00
namespace caf
{
//--------------------------------------------------------------------------------------------------
2020-06-19 00:53:59 -05:00
///
//--------------------------------------------------------------------------------------------------
BoxManipulatorGeometryGenerator::BoxManipulatorGeometryGenerator()
{
}
//--------------------------------------------------------------------------------------------------
2020-06-19 00:53:59 -05:00
///
//--------------------------------------------------------------------------------------------------
BoxManipulatorGeometryGenerator::~BoxManipulatorGeometryGenerator()
{
}
//--------------------------------------------------------------------------------------------------
2020-06-19 00:53:59 -05:00
///
//--------------------------------------------------------------------------------------------------
2020-06-19 00:53:59 -05:00
void BoxManipulatorGeometryGenerator::setOrigin( const cvf::Vec3d& origin )
{
m_origin = origin;
m_vertices = nullptr;
}
//--------------------------------------------------------------------------------------------------
2020-06-19 00:53:59 -05:00
///
//--------------------------------------------------------------------------------------------------
2020-06-19 00:53:59 -05:00
void BoxManipulatorGeometryGenerator::setSize( const cvf::Vec3d& size )
{
m_size = size;
m_vertices = nullptr;
}
//--------------------------------------------------------------------------------------------------
2020-06-19 00:53:59 -05:00
///
//--------------------------------------------------------------------------------------------------
cvf::ref<cvf::DrawableGeo> BoxManipulatorGeometryGenerator::createBoundingBoxMeshDrawable()
{
2020-06-19 00:53:59 -05:00
if ( m_vertices.isNull() )
{
calculateArrays();
}
2020-06-19 00:53:59 -05:00
if ( !( m_vertices.notNull() && m_vertices->size() != 0 ) ) return nullptr;
cvf::ref<cvf::DrawableGeo> geo = new cvf::DrawableGeo;
2020-06-19 00:53:59 -05:00
geo->setVertexArray( m_vertices.p() );
cvf::ref<cvf::UIntArray> indices = cvf::StructGridGeometryGenerator::lineIndicesFromQuadVertexArray( m_vertices.p() );
cvf::ref<cvf::PrimitiveSetIndexedUInt> prim = new cvf::PrimitiveSetIndexedUInt( cvf::PT_LINES );
2020-06-19 00:53:59 -05:00
prim->setIndices( indices.p() );
2020-06-19 00:53:59 -05:00
geo->addPrimitiveSet( prim.p() );
return geo;
}
//--------------------------------------------------------------------------------------------------
2020-06-19 00:53:59 -05:00
///
//--------------------------------------------------------------------------------------------------
void BoxManipulatorGeometryGenerator::calculateArrays()
{
BoxGenerator gen;
2016-09-29 04:43:47 -05:00
cvf::Vec3d min = m_origin;
cvf::Vec3d max = m_origin + m_size;
2020-06-19 00:53:59 -05:00
gen.setMinMax( min, max );
gen.setSubdivisions( 1, 1, 1 );
GeometryBuilderFaceList builder;
2020-06-19 00:53:59 -05:00
gen.generate( &builder );
m_vertices = builder.vertices();
// TODO: Rotate generated vertices
}
2020-06-19 00:53:59 -05:00
} // namespace caf