27 #include "WDataCreatorFiberParallel.h"
44 size_t numVertsPerFiber,
53 WAssert( length2(
m_direction->get() ) != 0,
"The direction should not be (0, 0, 0)!" );
55 std::uniform_real_distribution< double > unif( 0.0, 1.0 );
56 std::default_random_engine re;
61 for(
size_t fidx = 0; fidx < numFibers; ++fidx )
63 double x = unif( re ) * size.x();
64 double y = unif( re ) * size.y();
65 double z = unif( re ) * size.z();
68 double tmin, tmax, tymin, tymax, tzmin, tzmax;
69 tmin = ( 0.0 * size.x() - x ) / dir.
x();
70 tmax = ( 1.0 * size.x() - x ) / dir.
x();
71 tymin = ( 0.0 * size.y() - y ) / dir.
y();
72 tymax = ( 1.0 * size.y() - y ) / dir.
y();
73 tzmin = ( 0.0 * size.z() - z ) / dir.
z();
74 tzmax = ( 1.0 * size.z() - z ) / dir.
z();
75 tmin = fmax( fmax( tmin, tymin ), tzmin );
76 tmax = fmin( fmin( tmax, tymax ), tzmax );
81 WVector3d ray = ( max - min ) / numVertsPerFiber;
83 fibIdx->push_back( fidx * numVertsPerFiber );
84 lengths->push_back( numVertsPerFiber );
86 for(
size_t vidx = 0; vidx < numVertsPerFiber; ++vidx )
90 vertices->push_back( origin.x() + min.
x() + vec.
x() );
91 vertices->push_back( origin.y() + min.
y() + vec.
y() );
92 vertices->push_back( origin.z() + min.
z() + vec.
z() );
94 colors->push_back( color.x() );
95 colors->push_back( color.y() );
96 colors->push_back( color.z() );
97 fibIdxVertexMap->push_back( fidx );
WPropPosition m_direction
The direction of the parallel lines.
WDataCreatorFiberParallel()
Default constructor.
virtual void operator()(int seed, WProgress::SPtr progress, const WColor &color, size_t numFibers, size_t numVertsPerFiber, const WPosition &origin, const WPosition &size, WDataSetFibers::VertexArray vertices, WDataSetFibers::IndexArray fibIdx, WDataSetFibers::LengthArray lengths, WDataSetFibers::IndexArray fibIdxVertexMap, WDataSetFibers::ColorArray colors)
Create the dataset.
virtual ~WDataCreatorFiberParallel()
Destructor.
Define the interface which is injected into an WObjectNDIP.
std::shared_ptr< std::vector< size_t > > IndexArray
Index list indexing fibers in VertexArray in terms of vertex numbers.
std::shared_ptr< std::vector< float > > ColorArray
Colors for each vertex in VertexArray.
std::shared_ptr< std::vector< size_t > > LengthArray
Lengths of fibers in terms of vertices.
std::shared_ptr< std::vector< float > > VertexArray
List of vertex coordinates in term of components of vertices.
ValueT & z()
Access z element of vector.
ValueT & y()
Access y element of vector.
ValueT & x()
Access x element of vector.
This is a base class for everything which has a Name,Description,Icon and Properties (=NDIP).
WProperties::SPtr m_properties
the properties of the object.
This only is a 3d double vector.
std::shared_ptr< WProgress > SPtr
Shared pointer on a WProgress.