NURBSPrimitive::NURBSPrimitive( int uOrder, ConstFloatVectorDataPtr uKnot, float uMin, float uMax, int vOrder, ConstFloatVectorDataPtr vKnot, float vMin, float vMax, ConstV3fVectorDataPtr p ) { setTopology( uOrder, uKnot, uMin, uMax, vOrder, vKnot, vMin, vMax ); if( p ) { V3fVectorDataPtr pData = p->copy(); pData->setInterpretation( GeometricData::Point ); variables.insert( PrimitiveVariableMap::value_type( "P", PrimitiveVariable( PrimitiveVariable::Vertex, pData ) ) ); } }
CurvesPrimitive::CurvesPrimitive( ConstIntVectorDataPtr vertsPerCurve, const CubicBasisf &basis, bool periodic, ConstV3fVectorDataPtr p ) : m_basis( CubicBasisf::linear() ) { setTopology( vertsPerCurve, basis, periodic ); if( p ) { V3fVectorDataPtr pData = p->copy(); pData->setInterpretation( GeometricData::Point ); variables["P"] = PrimitiveVariable( PrimitiveVariable::Vertex, pData ); } }
SimpleSubsurface::SimpleSubsurface( ConstV3fVectorDataPtr p, ConstColor3fVectorDataPtr c, ConstFloatVectorDataPtr a, const SplinefColor3f &falloff ) { m_privateData = boost::shared_ptr<PrivateData>( new PrivateData ); m_privateData->points = p->copy(); m_privateData->colors = c->copy(); const vector<float> &areas = a->readable(); vector<Color3f> &colors = m_privateData->colors->writable(); for( size_t i=0; i<colors.size(); i++ ) { colors[i] *= areas[i]; } m_privateData->tree.init( m_privateData->points->readable().begin(), m_privateData->points->readable().end() ); m_privateData->falloff.init( SplineRemapper( falloff ), 0, 1, 100 ); m_privateData->nodeCentroids.resize( m_privateData->tree.numNodes() ); m_privateData->nodeColors.resize( m_privateData->tree.numNodes() ); m_privateData->nodeBounds.resize( m_privateData->tree.numNodes() ); buildWalk( m_privateData->tree.rootIndex() ); }