| 61 | std::string FbiWriter::getName() const { return s_info.name; } |
| 62 | |
| 63 | void buildHdrFromPoints(fbi::FbiHdr& hdr, const PointViewPtr view) |
| 64 | { |
| 65 | hdr.Version = 1; |
| 66 | hdr.HdrSize = 1808; // by construction |
| 67 | hdr.TimeType = 1; // standard time by default |
| 68 | hdr.Order = 0; // order is not know |
| 69 | hdr.Reserved1 = 0; // Not use for now |
| 70 | |
| 71 | // no additional values in this fbi export (for manage by terrascan for now) |
| 72 | hdr.VlrCnt = 0; |
| 73 | hdr.VlrSize = 0; |
| 74 | hdr.RecSize = 0; |
| 75 | |
| 76 | hdr.FastCnt = view->size(); |
| 77 | hdr.RecCnt = 0; // no additional points in this fbi export |
| 78 | |
| 79 | BOX3D box; |
| 80 | view->calculateBounds(box); |
| 81 | |
| 82 | hdr.MinX = box.minx; |
| 83 | hdr.MaxX = box.maxx; |
| 84 | hdr.MinY = box.miny; |
| 85 | hdr.MaxY = box.maxy; |
| 86 | hdr.MinZ = box.minz; |
| 87 | hdr.MaxZ = box.maxz; |
| 88 | |
| 89 | // By default for now |
| 90 | hdr.UnitsXyz = 100; |
| 91 | hdr.UnitsDistance = 0; |
| 92 | |
| 93 | hdr.OrgX = std::abs(hdr.MinX)-1; |
| 94 | hdr.OrgY = std::abs(hdr.MinY)-1; |
| 95 | hdr.OrgZ = std::abs(hdr.MinZ)-1; |
| 96 | |
| 97 | hdr.BitsX = 32; |
| 98 | hdr.BitsY = 32; |
| 99 | hdr.BitsZ = 32; |
| 100 | |
| 101 | hdr.BitsTime = ( view->hasDim(Dimension::Id::OffsetTime) ? 64 : 0 ); |
| 102 | hdr.BitsGroup = ( view->hasDim(Dimension::Id::ClusterID) ? 32 : 0 ); |
| 103 | hdr.BitsIntensity = ( view->hasDim(Dimension::Id::Intensity) ? 16 : 0 ); |
| 104 | hdr.BitsScanner = ( view->hasDim(Dimension::Id::UserData) ? 8 : 0 ); |
| 105 | hdr.BitsEcho = ( view->hasDim(Dimension::Id::ReturnNumber) ? 8 : 0 ); |
| 106 | |
| 107 | // Fbi only accept 8 bits ScanAngleRank |
| 108 | hdr.BitsAngle = ( view->hasDim(Dimension::Id::ScanAngleRank) |
| 109 | && view->dimType(Dimension::Id::ScanAngleRank)== Dimension::Type::Signed8 ? 8 : 0 ); |
| 110 | |
| 111 | hdr.BitsClass = ( view->hasDim(Dimension::Id::Classification) ? 8 : 0 ); |
| 112 | hdr.BitsLine = ( view->hasDim(Dimension::Id::PointSourceId) ? 16 : 0 ); |
| 113 | hdr.BitsEchoLen = ( view->hasDim(Dimension::Id::ReturnNumber) ? 16 : 0 ); |
| 114 | |
| 115 | hdr.BitsColor = 0; int NbCanal (0); |
| 116 | if ( view->hasDim(Dimension::Id::Red) && view->hasDim(Dimension::Id::Blue) && view->hasDim(Dimension::Id::Green) ) |
| 117 | { |
| 118 | hdr.BitsColor = 8*view->dimSize(Dimension::Id::Red); |
| 119 | assert ( hdr.BitsColor == 8*view->dimSize(Dimension::Id::Blue) ); |
| 120 | assert ( hdr.BitsColor == 8*view->dimSize(Dimension::Id::Green) ); |