From d3941929993b6b7f9c4cb327ce78b2185c2fa6c6 Mon Sep 17 00:00:00 2001 From: Hleb Valoshka <375gnu@gmail.com> Date: Wed, 23 Jun 2021 22:30:50 +0400 Subject: [PATCH] Allow binary orbits without text source Closes: #1088 --- src/celengine/trajmanager.cpp | 15 +++++++++++++++ src/celephem/samporbit.cpp | 15 +++++++++++++++ src/celephem/samporbit.h | 3 ++- src/celutil/filetype.cpp | 10 ++++++---- src/celutil/filetype.h | 1 + 5 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/celengine/trajmanager.cpp b/src/celengine/trajmanager.cpp index 1ab4c3b0b..b523a001a 100644 --- a/src/celengine/trajmanager.cpp +++ b/src/celengine/trajmanager.cpp @@ -83,6 +83,21 @@ Orbit* TrajectoryInfo::load(const fs::path& filename) break; } } + else if (filetype == Content_CelestiaXYZVBinary) + { + switch (precision) + { + case TrajectoryPrecisionSingle: + sampTrajectory = LoadXYZVBinarySinglePrec(strippedFilename, interpolation); + break; + case TrajectoryPrecisionDouble: + sampTrajectory = LoadXYZVBinaryDoublePrec(strippedFilename, interpolation); + break; + default: + assert(0); + break; + } + } else { switch (precision) diff --git a/src/celephem/samporbit.cpp b/src/celephem/samporbit.cpp index 9ca0e998d..0bddbfecf 100644 --- a/src/celephem/samporbit.cpp +++ b/src/celephem/samporbit.cpp @@ -934,3 +934,18 @@ Orbit* LoadXYZVTrajectoryDoublePrec(const fs::path& filename, TrajectoryInterpol return LoadSampledOrbitXYZV(filename, interpolation, 0.0); } + +/*! Load a binary trajectory file with single precision positions and velocities. + */ +Orbit* LoadXYZVBinarySinglePrec(const fs::path& filename, TrajectoryInterpolation interpolation) +{ + return LoadSampledOrbitXYZVBinary(filename, interpolation, 0.0f); +} + + +/*! Load a trajectory file with double precision positions and velocities. + */ +Orbit* LoadXYZVBinaryDoublePrec(const fs::path& filename, TrajectoryInterpolation interpolation) +{ + return LoadSampledOrbitXYZVBinary(filename, interpolation, 0.0); +} diff --git a/src/celephem/samporbit.h b/src/celephem/samporbit.h index bc5eccb54..35caa31f4 100644 --- a/src/celephem/samporbit.h +++ b/src/celephem/samporbit.h @@ -29,5 +29,6 @@ extern Orbit* LoadSampledTrajectoryDoublePrec(const fs::path& filename, Trajecto extern Orbit* LoadSampledTrajectorySinglePrec(const fs::path& filename, TrajectoryInterpolation interpolation); extern Orbit* LoadXYZVTrajectoryDoublePrec(const fs::path& filename, TrajectoryInterpolation interpolation); extern Orbit* LoadXYZVTrajectorySinglePrec(const fs::path& filename, TrajectoryInterpolation interpolation); - +extern Orbit* LoadXYZVBinarySinglePrec(const fs::path& filename, TrajectoryInterpolation interpolation); +extern Orbit* LoadXYZVBinaryDoublePrec(const fs::path& filename, TrajectoryInterpolation interpolation); #endif // _CELENGINE_SAMPORBIT_H_ diff --git a/src/celutil/filetype.cpp b/src/celutil/filetype.cpp index 687671c87..ac774e7ff 100644 --- a/src/celutil/filetype.cpp +++ b/src/celutil/filetype.cpp @@ -35,7 +35,8 @@ static const char CelestiaModelExt[] = ".cmod"; static const char CelestiaParticleSystemExt[] = ".cpart"; static const char CelestiaXYZTrajectoryExt[] = ".xyz"; static const char CelestiaXYZVTrajectoryExt[] = ".xyzv"; -static const char Content_WarpMeshExt[] = ".map"; +static const char ContentXYZVBinaryExt[] = ".xyzvbin"; +static const char ContentWarpMeshExt[] = ".map"; ContentType DetermineFileType(const fs::path& filename) { @@ -82,8 +83,9 @@ ContentType DetermineFileType(const fs::path& filename) return Content_CelestiaXYZTrajectory; if (compareIgnoringCase(CelestiaXYZVTrajectoryExt, ext) == 0) return Content_CelestiaXYZVTrajectory; - if (compareIgnoringCase(Content_WarpMeshExt, ext) == 0) + if (compareIgnoringCase(ContentWarpMeshExt, ext) == 0) return Content_WarpMesh; - else - return Content_Unknown; + if (compareIgnoringCase(ContentXYZVBinaryExt, ext) == 0) + return Content_CelestiaXYZVBinary; + return Content_Unknown; } diff --git a/src/celutil/filetype.h b/src/celutil/filetype.h index 9d250b55f..9ce61208b 100644 --- a/src/celutil/filetype.h +++ b/src/celutil/filetype.h @@ -36,6 +36,7 @@ enum ContentType Content_CelestiaXYZVTrajectory = 19, Content_CelestiaParticleSystem = 20, Content_WarpMesh = 21, + Content_CelestiaXYZVBinary = 22, Content_Unknown = -1, };