void place::loadInScans(const std::string &scanName, const std::string &zerosFile, std::vector<cv::Mat> &rotatedScans, std::vector<Eigen::Vector2i> &zeroZero) { zeroZero.resize(NUM_ROTS); std::ifstream binaryReader(zerosFile, std::ios::in | std::ios::binary); for (auto &z : zeroZero) binaryReader.read(reinterpret_cast<char *>(z.data()), sizeof(Eigen::Vector2i)); binaryReader.close(); for (int i = 0; i < NUM_ROTS; ++i) { std::string fullScanName = FLAGS_dmFolder + "R" + std::to_string(i) + "/" + scanName; rotatedScans.push_back(cv::imread(fullScanName, 0)); if (!rotatedScans[i].data) { std::cout << "Error reading scan: " << fullScanName << std::endl; exit(1); } } if (FLAGS_tinyPreviewIn || FLAGS_visulization) { cv::rectshow(rotatedScans[0]); } }
void DensityMapsManager::run() { rotationFile = FLAGS_rotFolder + rotationsFiles[current]; fileName = FLAGS_binaryFolder + binaryNames[current]; doorName = FLAGS_doorsFolder + "/pointcloud/" + doorsNames[current]; scanNumber = fileName.substr(fileName.find(".") - 3, 3); buildName = fileName.substr(fileName.rfind("/") + 1, 3); if (!FLAGS_redo && exists2D() && exists3D() && existsDoors()) return; if (!FLAGS_quietMode) std::cout << scanNumber << std::endl; std::ifstream binaryReader(rotationFile, std::ios::in | std::ios::binary); R = std::make_shared<std::vector<Eigen::Matrix3d>>(4); for (int i = 0; i < R->size(); ++i) { binaryReader.read(reinterpret_cast<char *>(R->at(i).data()), sizeof(Eigen::Matrix3d)); } binaryReader.close(); binaryReader.open(doorName, std::ios::in | std::ios::binary); int num; binaryReader.read(reinterpret_cast<char *>(&num), sizeof(num)); doors = std::make_shared<std::vector<place::Door>>(num); for (auto &d : *doors) d.loadFromFile(binaryReader); binaryReader.close(); binaryReader.open(fileName, std::ios::in | std::ios::binary); int columns, rows; binaryReader.read(reinterpret_cast<char *>(&columns), sizeof(int)); binaryReader.read(reinterpret_cast<char *>(&rows), sizeof(int)); pointsWithCenter = std::make_shared<std::vector<Eigen::Vector3f>>(); pointsWithCenter->reserve(columns * rows); pointsNoCenter = std::make_shared<std::vector<Eigen::Vector3f>>(); pointsNoCenter->reserve(columns * rows); for (int k = 0; k < columns * rows; ++k) { scan::PointXYZRGBA tmp; tmp.loadFromFile(binaryReader); auto &point = tmp.point; point[1] *= -1.0; if (!(point[0] || point[1] || point[2]) || tmp.intensity < 0.01) continue; pointsWithCenter->push_back(point); if (point[0] * point[0] + point[1] * point[1] > 1) pointsNoCenter->push_back(point); } binaryReader.close(); }
void* load(File& file, Allocator& a) { BinaryReader binaryReader(file); uint32_t version; binaryReader.read(version); uint32_t verticesCount; binaryReader.read(verticesCount); const bgfx::Memory* vertexBufferMemory = bgfx::alloc(verticesCount * sizeof(float) * 4); binaryReader.read(vertexBufferMemory->data, verticesCount * sizeof(float) * 4); uint32_t indicesCount; binaryReader.read(indicesCount); const bgfx::Memory* indexBufferMemory = bgfx::alloc(indicesCount * sizeof(uint16_t)); binaryReader.read(indexBufferMemory->data, indicesCount * sizeof(uint16_t)); SpriteResource* spriteResource = (SpriteResource*) a.allocate(sizeof(SpriteResource)); spriteResource->vertexBufferMemory = vertexBufferMemory; spriteResource->indexBufferMemory = indexBufferMemory; return spriteResource; }