From Zoltan Bodor of graphisoft.com
Debugging revealed that the problem occurs when the constructor of e57::ReaderImpl wants to initialize its member „images2D_” with root_.get("/images2D"). However this tag is missing from the attached e57 file so this initialization fails with an exception at E57FoundationImpl.cpp (line 652) in function StructureNodeImpl::get().
The problem is that according to the E57 Standard, this tag is not obligatory, so the Simple API makes the incorrect presumption that this tag is present. (The same problem could occur with the „data3D” tag in some files.)
"/data3D" and "/images2D" tags needs to be optional in the SimpleAPI.
"isAtomicClockReferenced" in DateTime also needs to be optional in the SimpleAPI.
"azimuthStart" and "azimuthEnd" in SphericalBounds is also optional.
Fix for "isAtomicClockReferenced" also being optional. About line # 464
if (creationDateTime.isDefined("isAtomicClockReferenced")) //ADD THIS LINE
fileHeader.creationDateTime.isAtomicClockReferenced =
(int32_t) IntegerNode(creationDateTime.get("isAtomicClockReferenced")).value();
Fix for "isAtomicClockReferenced" also being optional. About line # 525
if (acquisitionDateTime.isDefined("isAtomicClockReferenced")) //ADD THIS LINE
image2DHeader.acquisitionDateTime.isAtomicClockReferenced = (int32_t)
IntegerNode(acquisitionDateTime.get("isAtomicClockReferenced")).value();
Fix for "isAtomicClockReferenced" also being optional. About line # 1071
if (acquisitionStart.isDefined("isAtomicClockReferenced")) //ADD THIS LINE
data3DHeader.acquisitionStart.isAtomicClockReferenced = (int32_t)
IntegerNode(acquisitionStart.get("isAtomicClockReferenced")).value();
Fix for "isAtomicClockReferenced" also being optional. About line # 1081
if (acquisitionEnd.isDefined("isAtomicClockReferenced")) //ADD THIS LINE
data3DHeader.acquisitionEnd.isAtomicClockReferenced = (int32_t)
IntegerNode(acquisitionEnd.get("isAtomicClockReferenced")).value();