#include "centerPointsRegionPoints.hpp" #include "fieldsDataBase.hpp" #include "Set.hpp" #include "pStructSelector.hpp" bool pFlow::centerPointsRegionPoints::selectIds() { if(!firstTimeUpdate_) return true; firstTimeUpdate_ = false; word selector = probDict_.getVal("selector"); if(selector == "id") { auto idList = probDict_.getVal("ids"); Set uniqueIds; uniqueIds.insert(idList.begin(), idList.end()); for(auto& id:uniqueIds) { ids_.push_back(id); } } else { auto selectorPtr = pStructSelector::create( selector, database().pStruct(), probDict_); auto selectedPoints = selectorPtr->selectedPoints(); ids_.resize(selectedPoints.size()); ids_.assign(selectedPoints.begin(), selectedPoints.end()); } volume_.resize(ids_.size(),1.0); diameter_.resize(ids_.size(),1.0); center_.resize(ids_.size(), realx3(0,0,0)); selectedPoints_.resize(ids_.size(), -1); return false; } pFlow::centerPointsRegionPoints::centerPointsRegionPoints( const dictionary &dict, fieldsDataBase &fieldsDataBase) : regionPoints(dict, fieldsDataBase), idName_(dict.getValOrSet("idName", "id")), probDict_(dict) { auto idList = dict.getVal("ids"); Set uniqueIds; uniqueIds.insert(idList.begin(), idList.end()); for(auto& id:uniqueIds) { ids_.push_back(id); } selectedPoints_.resize(ids_.size()); } bool pFlow::centerPointsRegionPoints::update() { if(!selectIds()) return false; if(ids_.empty()) return true; const auto& idField = database().updateFieldUint32(idName_); selectedPoints_.fill(-1); for(uint32 i = 0; i < idField.size(); ++i) { for( uint32 j=0; j< ids_.size(); ++j) { if(idField[i] == ids_[j]) { selectedPoints_[j] = i; break; } } } return false; }