bool TeSTElementSet::buildImpl(TeQuerier* querier, const int& slide) { int dt = CLOCKS_PER_SEC/4, steps = 0; int dt2 = CLOCKS_PER_SEC * 5; clock_t t0, t1, t2; t0=t1=t2=clock(); if(!querier) return false; if(!querier->loadInstances(slide)) return false; //clear all structures attrList_->clear(); instances_.clear(); objectIdToInstances_.clear(); timeToInstances_.clear(); sliceToInstances_.clear(); if(rTree_) delete rTree_; rTree_ = 0; //Builts another rTree TeBox b; if(theme_) b = theme_->box(); else if(layer_) b = layer_->box(); else b = this->box_; rTree_ = new TeSAM::TeRTree<int>(b); TeAttributeList l = querier->getAttrList(); setAttributeList(l); int tot = querier->numElemInstances(); if(TeProgress::instance()) { TeProgress::instance()->reset(); string caption = "Building data"; TeProgress::instance()->setCaption(caption.c_str()); string msg = "Building in progress. Please, wait!"; TeProgress::instance()->setMessage(msg); TeProgress::instance()->setTotalSteps(tot); t2 = clock(); t0 = t1 = t2; } TeSTInstance obj; while(querier->fetchInstance(obj)) { this->insertSTInstance(obj); obj.clear(); if(TeProgress::instance()) { steps++; t2 = clock(); if (int(t2-t1) > dt) { t1 = t2; if(TeProgress::instance()->wasCancelled()) return false; if((int)(t2-t0) > dt2) TeProgress::instance()->setProgress(steps); } } } if(TeProgress::instance()) TeProgress::instance()->reset(); return true; }