Skip to main content
Skip table of contents

2022.0.1- B2G to E57

B2G files such as BLK2GO, BLK2FLY, and BLK ARC can be processed into an E57 without importing the file first. However, the CLI uses settings from the last BLK import for processing, so these need to be set first in Cyclone REGISTER 360. A PUBLISHER PRO license is required to use this command.

These exported E57 files contain:

  • The main point cloud.

  • Another point cloud represents the trajectory as points.

  • All Pano image locations.

  • All Pano image orientations along the trajectory.

  • Normal calculations per point along the trajectory.

This can be used to export all setups into a single E57 using the flag bundlede57s=Y

Workflow and usage:

  1. Open Cyclone REGISTER 360.

  2. Create a project.

  3. Drag and drop any B2G file in the Import area of Cyclone REGISTER 360.

  4. Set the desired Waypoint (Pano sphere) creation interval along the trajectory (lower right pane).

  5. Close Cyclone REGISTER 360, (do not import the data).

  6. Open up a CMD window.

  7. Set the path to the install directory of Cyclone REGISTER 360.

  8. Type in the following commands:

    1. Register360.exe -b2g2trajectory [b2g directory] [export directory].

  9. The CLI will process the B2G into an E57 file.

Here is an example output showing the exported objects in the E57 from an XML output. Please review for E57 coding standards:

// into the E57 header goes e57CameraToPano, the "solution"
Eigen::Quaterniond rot(e57CameraToPano.rotation());
imageHeader.pose.rotation.w = rot.w();
imageHeader.pose.rotation.x = rot.x();
imageHeader.pose.rotation.y = rot.y();
imageHeader.pose.rotation.z = rot.z();


imageHeader.pose.translation.x = e57CameraToPano.translation().x();
imageHeader.pose.translation.y = e57CameraToPano.translation().y();
imageHeader.pose.translation.z = e57CameraToPano.translation().z();


// Setup the Name and Description = e57::ustring(pImageName);
imageHeader.description = e57::ustring("");


// the image gets is own GUID
String guidStr;
guidStr.Printf(32, "%.16llx", scanId); // Writes 16 hex digits for an 64-bit type


imageHeader.guid = guidStr.c_str();
imageHeader.associatedData3DGuid = mAssociatedData3DGuid.c_str(); // image is associated its scan via the scan's GUID


// Setup the DateTime
imageHeader.acquisitionDateTime.SetCurrentGPSTime(); //set current time.


imageHeader.sensorModel = "CycloneRegister360";


// Setup image size
if (!isPanoramic)
const double pixel_size = 6.0e-6; // 6 micro-meter (arbitrarily picked number)
imageHeader.pinholeRepresentation.jpegImageSize = compressedSize;
imageHeader.pinholeRepresentation.pngImageSize = 0;
imageHeader.pinholeRepresentation.imageMaskSize = 0;
imageHeader.pinholeRepresentation.imageWidth = (int32_t)width;
imageHeader.pinholeRepresentation.imageHeight = (int32_t)height;
imageHeader.pinholeRepresentation.focalLength = focalInPixels * pixel_size;
imageHeader.pinholeRepresentation.pixelWidth = 1.0 * pixel_size;
imageHeader.pinholeRepresentation.pixelHeight = 1.0 * pixel_size;
imageHeader.pinholeRepresentation.principalPointX = *pCenterInPixels;
imageHeader.pinholeRepresentation.principalPointY = *(pCenterInPixels + 1);
imageHeader.sphericalRepresentation.jpegImageSize = compressedSize;
imageHeader.sphericalRepresentation.pngImageSize = 0;
imageHeader.sphericalRepresentation.imageMaskSize = 0;
imageHeader.sphericalRepresentation.imageWidth = (int32_t)width;
imageHeader.sphericalRepresentation.imageHeight = (int32_t)height;
imageHeader.sphericalRepresentation.pixelWidth = 2.0 * PI / width;
imageHeader.sphericalRepresentation.pixelHeight = 1.0 * PI / height;

// Write the image header
int32_t imageIndex = mpE57Writer->NewImage2D(imageHeader);


// Write the jpeg data
int64_t rVal = mpE57Writer->WriteImage2DData(imageIndex, e57::E57_JPEG_IMAGE,
isPanoramic ? e57::E57_SPHERICAL : e57::E57_PINHOLE,
(void*)pCompressedData, 0, compressedSize);

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.