Added renderflags and labels commands

ver1_5_1
Chris Laurel 2001-04-26 19:14:17 +00:00
parent 7f67c63e22
commit 35dbbee6cd
3 changed files with 166 additions and 0 deletions

View File

@ -10,6 +10,7 @@
// of the License, or (at your option) any later version.
#include <algorithm>
#include <sstream>
#include "util.h"
#include "astro.h"
#include "cmdparser.h"
@ -17,6 +18,9 @@
using namespace std;
static int parseRenderFlags(string);
static int parseLabelFlags(string);
CommandParser::CommandParser(istream& in)
{
tokenizer = new Tokenizer(&in);
@ -198,6 +202,32 @@ Command* CommandParser::parseCommand()
cmd = new CommandSetPosition(astro::universalPosition(Point3d(offset.x, offset.y, offset.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
{
error("Unknown command name '" + commandName + "'");
@ -208,3 +238,79 @@ Command* CommandParser::parseCommand()
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;
}

View File

@ -223,3 +223,39 @@ void CommandSetOrientation::process(Simulation* sim, Renderer* renderer)
q.setAxisAngle(axis, angle);
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);
}
}

View File

@ -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_