std::pair<TRasterP, TCacheResource::CellData *> TCacheResource::touch(const PointLess &cellIndex) { std::string cellId(getCellCacheId(cellIndex.x, cellIndex.y)); std::map<PointLess, CellData>::iterator it = m_cellDatas.find(cellIndex); if (it != m_cellDatas.end()) { //Retrieve the raster from image cache TImageP img(TImageCache::instance()->get(cellId, true)); if (img) return std::make_pair(getRaster(img), &it->second); } it = m_cellDatas.insert(std::make_pair(cellIndex, CellData())).first; //Then, attempt retrieval from back resource TRasterP ras(load(cellIndex)); if (ras) { TImageCache::instance()->add(cellId, TRasterImageP(ras)); return std::make_pair(ras, &it->second); } //Else, create it return std::make_pair( createCellRaster(m_tileType, cellId), //increases m_cellsCount too &it->second); }
void main() { int i,RcvId; void *msg; int screen; chan = makeChan(); screen = open("/dev/screen",O_PROC, chan); if (screen == -1) { perror("Shit!"); exit(1); } retexit(1); scrSwitch(screen, SCRO_This); while(1) { RcvId = recvMsg(chan, &msg); switch (* (int *)msg) { case PMSG_GetScr: VideoMode(); InitializeStars(); EditPalette(); getRaster(); check=1; initKey(); setRaster(VBIRute,250); break; case PMSG_LoseScr: freeRaster(); scrSwitch(screen, SCRO_Next); break; } replyMsg(RcvId,0); } }
int main(int argc, char **argv) { if (argc < 6) { std::cerr << "Usage: raytracer <model_file> <output_file_name> <refract> <reflect> <aa>" << std::endl; exit(1); } std::ifstream input(argv[1]); parseModelFile(input, scene); std::string fname = argv[2]; refract = (boost::starts_with(argv[3], "t")) ? true : false; reflect = (boost::starts_with(argv[4], "t")) ? true : false; aa = (boost::starts_with(argv[5], "t")) ? true : false; auto buf = getRaster(); writePPM(std::move(buf), scene.cam.viewportHeight, scene.cam.viewportWidth, argv[2]); return 0; }
void TCacheResource::save(const TFilePath &fp) { assert(!fp.isEmpty()); std::map<PointLess, CellData>::iterator it; for (it = m_cellDatas.begin(); it != m_cellDatas.end(); ++it) { TRasterP cellRas = getRaster(TImageCache::instance()->get( getCellCacheId(it->first.x, it->first.y), false)); assert(m_tileType != NONE); TFilePath cellFp(fp + TFilePath(getCellName(it->first.x, it->first.y))); if (m_tileType == CM32) ::saveCompressed(cellFp, cellRas); else TImageWriter::save(cellFp.withType(".tif"), cellRas); } }
bool TCacheResource::save(const PointLess &cellIndex, TRasterP cellRas) const { if (!m_backEnabled || m_invalidated) return false; assert(!m_path.isEmpty()); if (!cellRas) cellRas = getRaster(TImageCache::instance()->get( getCellCacheId(cellIndex.x, cellIndex.y), false)); assert(m_tileType != NONE); TFilePath fp(TCacheResourcePool::instance()->getPath() + m_path + getCellName(cellIndex.x, cellIndex.y)); if (m_tileType == CM32) { ::saveCompressed(fp, cellRas); } else { TImageWriter::save(fp.withType(".tif"), cellRas); } return true; }
void terrama2::core::DataStoragerTiff::store(DataSetSeries series, DataSetPtr outputDataSet) const { if(!outputDataSet.get() || !series.syncDataSet.get()) { QString errMsg = QObject::tr("Mandatory parameters not provided."); TERRAMA2_LOG_ERROR() << errMsg; throw DataStoragerException() << ErrorDescription(errMsg); } QUrl uri(QString::fromStdString(dataProvider_->uri)); auto path = uri.path().toStdString(); try { std::string mask = getMask(outputDataSet); auto dataset = series.syncDataSet->dataset(); size_t rasterColumn = te::da::GetFirstPropertyPos(dataset.get(), te::dt::RASTER_TYPE); if(!isValidColumn(rasterColumn)) { QString errMsg = QObject::tr("No raster attribute."); TERRAMA2_LOG_ERROR() << errMsg; throw DataStoragerException() << ErrorDescription(errMsg); } size_t timestampColumn = te::da::GetFirstPropertyPos(dataset.get(), te::dt::DATETIME_TYPE); dataset->moveBeforeFirst(); while(dataset->moveNext()) { std::shared_ptr<te::rst::Raster> raster(dataset->isNull(rasterColumn) ? nullptr : dataset->getRaster(rasterColumn).release()); std::shared_ptr<te::dt::DateTime> timestamp; if(!isValidColumn(timestampColumn) || dataset->isNull(timestampColumn)) timestamp = nullptr; else timestamp.reset(dataset->getDateTime(timestampColumn).release()); if(!raster.get()) { QString errMsg = QObject::tr("Null raster found."); TERRAMA2_LOG_ERROR() << errMsg; continue; } std::string filename = replaceMask(mask, timestamp, outputDataSet); std::string output = path + "/" + filename; te::rp::Copy2DiskRaster(*raster, output); } } catch(const DataStoragerException&) { throw; } catch(...) { //TODO: fix DataStoragerTiff catch } }