1#ifndef VISUALISATIONSTATE_H
2#define VISUALISATIONSTATE_H
10#include <GLFW/glfw3.h>
46 std::vector<Atom> &
atoms,
47 const std::filesystem::path & atomColours,
51 const std::map<int, std::string> &
keyCodes
60 for (
uint8_t i = 0;
i < std::min(
size_t(6), elements.size());
i++)
62 Element e = *std::next(elements.begin(),
i);
67 if (!atomColours.empty())
74 if (bondFocus <
atoms.size())
117 std::map<uint64_t, std::set<uint64_t>>
bonds;
129 std::unique_ptr<Record>
record =
nullptr;
151 std::string name =
timeStamp()+std::string(
".mp4");
153 record = std::make_unique<FFmpegRecord>
158 options.preset.value,
159 options.profile.value,
164 options.maxBFrames.value,
165 options.gopSize.value
167 std::cout <<
"FFmpeg ";
169 record = std::make_unique<JompegRecord>
175 std::cout <<
"jo_mpeg ";
177 std::cout <<
"recording to " + name +
"\n";
212 if (!waitingForRecord)
215 std::vector<uint8_t>
pixels(resX*resY*4, 0);
227 for(
int j = 0;
j <
int(resY/2);
j++)
233 pixels.begin()+4*resX*(resY-
j-1)
240 if (
record->queueSize() >= 32)
245 if (
record->framesLeft() >= 64)
247 waitingForRecord =
true;
251 waitingForRecord =
false;
362 bool waitingForRecord =
false;
void applySizes(std::vector< Atom > &atoms, const std::vector< float > sizes)
Apply sizes by index.
Definition atom.h:283
void applyColours(std::vector< Atom > &atoms, const std::map< uint64_t, glm::vec4 > &colours)
Apply colours by index.
Definition atom.h:265
std::multimap< Element, uint64_t > elementIndices(const std::vector< Atom > &atoms)
Obtain indices of each element.
Definition atom.h:248
std::set< Element > uniqueElements(const std::vector< Atom > &atoms)
Determine the unique elements in a list of Atom.
Definition atom.h:216
std::map< uint64_t, std::set< uint64_t > > determineBonds(std::vector< uint64_t > forAtoms, std::vector< Atom > &atoms, float cutOff)
Obtain bonds based on a fixed distance cutOff using Neighbours.
Definition bond.h:20
std::map< uint64_t, glm::vec4 > atomColoursFromFile(std::filesystem::path path)
Read an atom index colour map from a file.
Definition colour.h:197
glm::vec< L, float, glm::qualifier::highp > vec
Definition commandLine.h:214
Element
Representable elements.
Definition element.h:13
const std::map< Element, float > ELEMENT_MASS
Scaled element masses.
Definition element.h:564
const std::map< Element, float > ELEMENT_RADIUS
Map Element to a Van der Waals radius in Angstroms.
Definition element.h:461
T value
Definition commandLine.h:33
Extract command line arguments.
Definition commandLine.h:240
Argument< vec< 2 > > resolution
Definition commandLine.h:348
Holds editable data for the visualisation state.
Definition visualisationState.h:34
bool recording
Definition visualisationState.h:131
std::vector< uint64_t > bondsFor
Definition visualisationState.h:118
bool recordWaiting() const
Video writing is behind.
Definition visualisationState.h:140
std::vector< float > atomSizes
Definition visualisationState.h:121
void recordFrame(uint32_t resX, uint32_t resY)
If recording, obtain the pixels for the current frame and submit for recording.
Definition visualisationState.h:202
std::map< uint64_t, glm::vec4 > atomColourOverrides
Definition visualisationState.h:120
std::multimap< Element, uint64_t > elementMap
Definition visualisationState.h:122
int lua_atomCount(lua_State *lua)
Lua binding to get the Atom count.
Definition atoms.h:114
std::unique_ptr< Record > record
Definition visualisationState.h:129
int lua_setText(lua_State *lua)
Set the on screen text.
Definition utils.h:12
std::map< int, Element > emphasisControls
Definition visualisationState.h:123
uint64_t frame
Definition visualisationState.h:125
std::vector< Atom > & atoms
Definition visualisationState.h:116
int lua_getAtom(lua_State *lua)
Lua binding to get an Atom.
Definition atoms.h:186
std::map< uint64_t, std::set< uint64_t > > bonds
Definition visualisationState.h:117
int lua_setAtomColour(lua_State *lua)
Lua binding to set an Atom's colour by index.
Definition atoms.h:24
std::vector< float > atomEmphasisOverrides
Definition visualisationState.h:119
bool recordClosing
Definition visualisationState.h:132
void toggleRecord(const CommandLine &options)
Toggle recording to video.
Definition visualisationState.h:147
uint64_t atomCount
Definition visualisationState.h:127
int lua_unbond(lua_State *lua)
Lua binding to unbond 2 Atoms.
Definition bonds.h:56
int lua_bond(lua_State *lua)
Lua binding to bond 2 Atoms.
Definition bonds.h:13
int lua_getAtomsNeighbours(lua_State *lua)
Lua binding to get the neighbours of an Atom to a cutoff.
Definition atoms.h:130
int lua_getAtomsBonds(lua_State *lua)
Lua binding to get the bonds of an Atom.
Definition atoms.h:263
int lua_getAtomColour(lua_State *lua)
Lua binding to get a Atom's colour by index.
Definition atoms.h:71
int lua_getFrame(lua_State *lua)
Get the current frame number.
Definition utils.h:36
VisualisationState(std::vector< Atom > &atoms, const std::filesystem::path &atomColours, uint64_t bondFocus, float bondCutoff, bool sizeByMass, const std::map< int, std::string > &keyCodes)
Construct a VisualisationState from a some Atoms.
Definition visualisationState.h:45
std::string text
Definition visualisationState.h:124
const std::map< int, std::string > keyCodes
String name for a GLFW_KEY index.
Definition util.h:260
std::string timeStamp()
Current timestamp.
Definition util.h:179