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();
}
Beispiel #3
0
	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;
	}