Added renderflags and labels commands
parent
7f67c63e22
commit
35dbbee6cd
|
@ -10,6 +10,7 @@
|
||||||
// of the License, or (at your option) any later version.
|
// of the License, or (at your option) any later version.
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <sstream>
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "astro.h"
|
#include "astro.h"
|
||||||
#include "cmdparser.h"
|
#include "cmdparser.h"
|
||||||
|
@ -17,6 +18,9 @@
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
static int parseRenderFlags(string);
|
||||||
|
static int parseLabelFlags(string);
|
||||||
|
|
||||||
CommandParser::CommandParser(istream& in)
|
CommandParser::CommandParser(istream& in)
|
||||||
{
|
{
|
||||||
tokenizer = new Tokenizer(&in);
|
tokenizer = new Tokenizer(&in);
|
||||||
|
@ -198,6 +202,32 @@ Command* CommandParser::parseCommand()
|
||||||
cmd = new CommandSetPosition(astro::universalPosition(Point3d(offset.x, offset.y, offset.z),
|
cmd = new CommandSetPosition(astro::universalPosition(Point3d(offset.x, offset.y, offset.z),
|
||||||
Point3f((float) base.x, (float) base.y, (float) base.z)));
|
Point3f((float) base.x, (float) base.y, (float) base.z)));
|
||||||
}
|
}
|
||||||
|
else if (commandName == "renderflags")
|
||||||
|
{
|
||||||
|
int setFlags = 0;
|
||||||
|
int clearFlags = 0;
|
||||||
|
string s;
|
||||||
|
|
||||||
|
if (paramList->getString("set", s))
|
||||||
|
setFlags = parseRenderFlags(s);
|
||||||
|
if (paramList->getString("clear", s))
|
||||||
|
clearFlags = parseRenderFlags(s);
|
||||||
|
|
||||||
|
cmd = new CommandRenderFlags(setFlags, clearFlags);
|
||||||
|
}
|
||||||
|
else if (commandName == "labels")
|
||||||
|
{
|
||||||
|
int setFlags = 0;
|
||||||
|
int clearFlags = 0;
|
||||||
|
string s;
|
||||||
|
|
||||||
|
if (paramList->getString("set", s))
|
||||||
|
setFlags = parseLabelFlags(s);
|
||||||
|
if (paramList->getString("clear", s))
|
||||||
|
clearFlags = parseLabelFlags(s);
|
||||||
|
|
||||||
|
cmd = new CommandLabels(setFlags, clearFlags);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
error("Unknown command name '" + commandName + "'");
|
error("Unknown command name '" + commandName + "'");
|
||||||
|
@ -208,3 +238,79 @@ Command* CommandParser::parseCommand()
|
||||||
|
|
||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int parseRenderFlags(string s)
|
||||||
|
{
|
||||||
|
istringstream in(s);
|
||||||
|
Tokenizer tokenizer(&in);
|
||||||
|
int flags = 0;
|
||||||
|
|
||||||
|
Tokenizer::TokenType ttype = tokenizer.nextToken();
|
||||||
|
while (ttype != Tokenizer::TokenEnd)
|
||||||
|
{
|
||||||
|
if (ttype == Tokenizer::TokenName)
|
||||||
|
{
|
||||||
|
string name = tokenizer.getNameValue();
|
||||||
|
if (compareIgnoringCase(name, "orbits") == 0)
|
||||||
|
flags |= Renderer::ShowOrbits;
|
||||||
|
else if (compareIgnoringCase(name, "cloudmaps") == 0)
|
||||||
|
flags |= Renderer::ShowCloudMaps;
|
||||||
|
else if (compareIgnoringCase(name, "constellations") == 0)
|
||||||
|
flags |= Renderer::ShowDiagrams;
|
||||||
|
else if (compareIgnoringCase(name, "galaxies") == 0)
|
||||||
|
flags |= Renderer::ShowGalaxies;
|
||||||
|
else if (compareIgnoringCase(name, "planets") == 0)
|
||||||
|
flags |= Renderer::ShowPlanets;
|
||||||
|
else if (compareIgnoringCase(name, "stars") == 0)
|
||||||
|
flags |= Renderer::ShowStars;
|
||||||
|
|
||||||
|
ttype = tokenizer.nextToken();
|
||||||
|
if (ttype == Tokenizer::TokenBar)
|
||||||
|
ttype = tokenizer.nextToken();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DPRINTF("Error parsing render flags\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int parseLabelFlags(string s)
|
||||||
|
{
|
||||||
|
istringstream in(s);
|
||||||
|
Tokenizer tokenizer(&in);
|
||||||
|
int flags = 0;
|
||||||
|
|
||||||
|
Tokenizer::TokenType ttype = tokenizer.nextToken();
|
||||||
|
while (ttype != Tokenizer::TokenEnd)
|
||||||
|
{
|
||||||
|
if (ttype == Tokenizer::TokenName)
|
||||||
|
{
|
||||||
|
string name = tokenizer.getNameValue();
|
||||||
|
if (compareIgnoringCase(name, "planets") == 0)
|
||||||
|
flags |= Renderer::MajorPlanetLabels;
|
||||||
|
else if (compareIgnoringCase(name, "minorplanets") == 0)
|
||||||
|
flags |= Renderer::MinorPlanetLabels;
|
||||||
|
else if (compareIgnoringCase(name, "constellations") == 0)
|
||||||
|
flags |= Renderer::ConstellationLabels;
|
||||||
|
else if (compareIgnoringCase(name, "stars") == 0)
|
||||||
|
flags |= Renderer::StarLabels;
|
||||||
|
|
||||||
|
ttype = tokenizer.nextToken();
|
||||||
|
if (ttype == Tokenizer::TokenBar)
|
||||||
|
ttype = tokenizer.nextToken();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DPRINTF("Error parsing label flags\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
|
@ -223,3 +223,39 @@ void CommandSetOrientation::process(Simulation* sim, Renderer* renderer)
|
||||||
q.setAxisAngle(axis, angle);
|
q.setAxisAngle(axis, angle);
|
||||||
sim->getObserver().setOrientation(q);
|
sim->getObserver().setOrientation(q);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// Set render flags command
|
||||||
|
|
||||||
|
CommandRenderFlags::CommandRenderFlags(int _setFlags, int _clearFlags) :
|
||||||
|
setFlags(_setFlags), clearFlags(_clearFlags)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommandRenderFlags::process(Simulation* sim, Renderer* renderer)
|
||||||
|
{
|
||||||
|
if (renderer != NULL)
|
||||||
|
{
|
||||||
|
renderer->setRenderFlags(renderer->getRenderFlags() | setFlags);
|
||||||
|
renderer->setRenderFlags(renderer->getRenderFlags() & ~clearFlags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// Set labels command
|
||||||
|
|
||||||
|
CommandLabels::CommandLabels(int _setFlags, int _clearFlags) :
|
||||||
|
setFlags(_setFlags), clearFlags(_clearFlags)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommandLabels::process(Simulation* sim, Renderer* renderer)
|
||||||
|
{
|
||||||
|
if (renderer != NULL)
|
||||||
|
{
|
||||||
|
renderer->setLabelMode(renderer->getLabelMode() | setFlags);
|
||||||
|
renderer->setLabelMode(renderer->getLabelMode() & ~clearFlags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -208,4 +208,28 @@ class CommandSetOrientation : public InstantaneousCommand
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CommandRenderFlags : public InstantaneousCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CommandRenderFlags(int _setFlags, int _clearFlags);
|
||||||
|
void process(Simulation*, Renderer*);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int setFlags;
|
||||||
|
int clearFlags;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CommandLabels : public InstantaneousCommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CommandLabels(int _setFlags, int _clearFlags);
|
||||||
|
void process(Simulation*, Renderer*);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int setFlags;
|
||||||
|
int clearFlags;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif // _COMMAND_H_
|
#endif // _COMMAND_H_
|
||||||
|
|
Loading…
Reference in New Issue