//================================================================== bool ParamsFindP( ParamList ¶ms, const SymbolList &globalSymbols, DVec<Float3> &out_vectorP, int fromIdx ) { bool gotP = false; for (size_t i=fromIdx; i < params.size(); i += 2) { DASSERT( params[i].type == Param::STR ); const Symbol* pSymbol = globalSymbols.FindSymbol( params[i] ); if ( pSymbol && pSymbol->IsName( "P" ) ) { DASSTHROW( (i+1) < params.size(), "Invalid number of arguments" ); const FltVec &fltVec = params[ i+1 ].NumVec(); DASSTHROW( (fltVec.size() % 3) == 0, "Invalid number of arguments" ); out_vectorP.resize( fltVec.size() / 3 ); for (size_t iv=0, id=0; iv < fltVec.size(); iv += 3) out_vectorP[id++] = Float3( &fltVec[ iv ] ); return true; } } return false; }
//================================================================== bool ParamsFindP( ParamList ¶ms, const SymbolList &globalSymbols, Float3 *pOut_vectorP, int expectedN, int fromIdx ) { bool gotP = false; for (size_t i=fromIdx; i < params.size(); i += 2) { DASSERT( params[i].type == Param::STR ); const Symbol* pSymbol = globalSymbols.FindSymbol( params[i] ); if ( pSymbol && pSymbol->IsName( "P" ) ) { DASSTHROW( (i+1) < params.size(), "Invalid number of arguments" ); const FltVec &fltVec = params[ i+1 ].NumVec(); DASSTHROW( (int)fltVec.size() == 3 * expectedN, "Invalid number of arguments." " Expecting %i but it's %u", 3 * expectedN, fltVec.size() ); DASSTHROW( (int)(fltVec.size() % 3) == 0, "Invalid number of arguments." " Should be multiple of 3 but it's %u", fltVec.size() ); size_t srcN = fltVec.size(); for (size_t si=0, di=0; si < srcN; si += 3, di += 1) pOut_vectorP[ di ] = Float3( &fltVec[ si ] ); return true; } } return false; }