AngleMeasure.cpp   AngleMeasure.cpp 
/* /*
* Copyright (C) 2009 Matthew Gates * Copyright (C) 2009 Matthew Gates
* Copyright (C) 2014 Georg Zotti
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
skipping to change at line 57 skipping to change at line 58
} }
StelPluginInfo AngleMeasureStelPluginInterface::getPluginInfo() const StelPluginInfo AngleMeasureStelPluginInterface::getPluginInfo() const
{ {
// Allow to load the resources when used as a static plugin // Allow to load the resources when used as a static plugin
Q_INIT_RESOURCE(AngleMeasure); Q_INIT_RESOURCE(AngleMeasure);
StelPluginInfo info; StelPluginInfo info;
info.id = "AngleMeasure"; info.id = "AngleMeasure";
info.displayedName = N_("Angle Measure"); info.displayedName = N_("Angle Measure");
info.authors = "Matthew Gates"; info.authors = "Matthew Gates, Bogdan Marinov, Alexander Wolf, Georg Zotti";
info.contact = "http://porpoisehead.net/"; info.contact = "http://porpoisehead.net/";
info.description = N_("Provides an angle measurement tool"); info.description = N_("Provides an angle measurement tool");
info.version = ANGLEMEASURE_VERSION; info.version = ANGLEMEASURE_VERSION;
return info; return info;
} }
AngleMeasure::AngleMeasure() AngleMeasure::AngleMeasure()
: flagShowAngleMeasure(false) : flagShowAngleMeasure(false)
, dragging(false) , dragging(false)
, angle(0.) , angle(0.)
, flagUseDmsFormat(false) , flagUseDmsFormat(false)
, flagShowPA(false) , flagShowPA(false)
, flagShowEquatorial(false)
, flagShowHorizontal(false)
, flagShowHorizontalPA(false)
, flagShowHorizontalStartSkylinked(false)
, flagShowHorizontalEndSkylinked(false)
, toolbarButton(NULL) , toolbarButton(NULL)
{ {
setObjectName("AngleMeasure"); setObjectName("AngleMeasure");
font.setPixelSize(16); font.setPixelSize(16);
configDialog = new AngleMeasureDialog(); configDialog = new AngleMeasureDialog();
conf = StelApp::getInstance().getSettings(); conf = StelApp::getInstance().getSettings();
messageTimer = new QTimer(this); messageTimer = new QTimer(this);
messageTimer->setInterval(7000); messageTimer->setInterval(7000);
skipping to change at line 120 skipping to change at line 126
restoreDefaultSettings(); restoreDefaultSettings();
loadSettings(); loadSettings();
startPoint.set(0.,0.,0.); startPoint.set(0.,0.,0.);
endPoint.set(0.,0.,0.); endPoint.set(0.,0.,0.);
perp1StartPoint.set(0.,0.,0.); perp1StartPoint.set(0.,0.,0.);
perp1EndPoint.set(0.,0.,0.); perp1EndPoint.set(0.,0.,0.);
perp2StartPoint.set(0.,0.,0.); perp2StartPoint.set(0.,0.,0.);
perp2EndPoint.set(0.,0.,0.); perp2EndPoint.set(0.,0.,0.);
startPointHor.set(0.,0.,0.);
endPointHor.set(0.,0.,0.);
perp1StartPointHor.set(0.,0.,0.);
perp1EndPointHor.set(0.,0.,0.);
perp2StartPointHor.set(0.,0.,0.);
perp2EndPointHor.set(0.,0.,0.);
StelApp& app = StelApp::getInstance(); StelApp& app = StelApp::getInstance();
// Create action for enable/disable & hook up signals // Create action for enable/disable & hook up signals
addAction("actionShow_Angle_Measure", N_("Angle Measure"), N_("Angle measure"), "enabled", "Ctrl+A"); addAction("actionShow_Angle_Measure", N_("Angle Measure"), N_("Angle measure"), "enabled", "Ctrl+A");
// Initialize the message strings and make sure they are translated when // Initialize the message strings and make sure they are translated when
// the language changes. // the language changes.
updateMessageText(); updateMessageText();
connect(&app, SIGNAL(languageChanged()), this, SLOT(updateMessageTex t())); connect(&app, SIGNAL(languageChanged()), this, SLOT(updateMessageTex t()));
skipping to change at line 155 skipping to change at line 167
catch (std::runtime_error& e) catch (std::runtime_error& e)
{ {
qWarning() << "WARNING: unable create toolbar button for Ang leMeasure plugin: " << e.what(); qWarning() << "WARNING: unable create toolbar button for Ang leMeasure plugin: " << e.what();
} }
} }
void AngleMeasure::update(double deltaTime) void AngleMeasure::update(double deltaTime)
{ {
messageFader.update((int)(deltaTime*1000)); messageFader.update((int)(deltaTime*1000));
lineVisible.update((int)(deltaTime*1000)); lineVisible.update((int)(deltaTime*1000));
static StelCore *core=StelApp::getInstance().getCore();
// if altAz endpoint linked to the rotating sky, move respective poi
nt(s)
if (flagShowHorizontalStartSkylinked)
{
startPointHor = core->equinoxEquToAltAz(startPoint, StelCore
::RefractionAuto);
calculateEnds();
}
if (flagShowHorizontalEndSkylinked)
{
endPointHor = core->equinoxEquToAltAz(endPoint, StelCore::Re
fractionAuto);
calculateEnds();
}
} }
//! Draw any parts on the screen which are for our module void AngleMeasure::drawOne(StelCore *core, const StelCore::FrameType frameT
void AngleMeasure::draw(StelCore* core) ype, const StelCore::RefractionMode refractionMode, const Vec3f txtColor, c
onst Vec3f lineColor)
{ {
if (lineVisible.getInterstate() < 0.000001f && messageFader.getInter const StelProjectorP prj = core->getProjection(frameType, refraction
state() < 0.000001f) Mode);
return;
const StelProjectorP prj = core->getProjection(StelCore::FrameEquino
xEqu);
StelPainter painter(prj); StelPainter painter(prj);
painter.setFont(font); painter.setFont(font);
if (lineVisible.getInterstate() > 0.000001f) if (lineVisible.getInterstate() > 0.000001f)
{ {
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND); glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D);
Vec3d xy; Vec3d xy;
QString displayedText; QString displayedText;
if (prj->project(perp1EndPoint,xy)) if (frameType==StelCore::FrameEquinoxEqu)
{ {
painter.setColor(textColor[0], textColor[1], textCol if (prj->project(perp1EndPoint,xy))
or[2], lineVisible.getInterstate()); {
if (flagShowPA) painter.setColor(txtColor[0], txtColor[1], t
displayedText = QString("%1 (%2%3)").arg(cal xtColor[2], lineVisible.getInterstate());
culateAngle(), messagePA, calculatePositionAngle(startPoint, endPoint)); if (flagShowPA)
else displayedText = QString("%1 (%2%3)")
displayedText = calculateAngle(); .arg(calculateAngle(), messagePA, calculatePositionAngle(startPoint, endPoi
painter.drawText(xy[0], xy[1], displayedText, 0, 15, nt));
15); else
displayedText = calculateAngle();
painter.drawText(xy[0], xy[1], displayedText
, 0, 15, 15);
}
}
else
{
if (prj->project(perp1EndPointHor,xy))
{
painter.setColor(txtColor[0], txtColor[1], t
xtColor[2], lineVisible.getInterstate());
if (flagShowHorizontalPA)
displayedText = QString("%1 (%2%3)")
.arg(calculateAngle(true), messagePA, calculatePositionAngle(startPointHor,
endPointHor));
else
displayedText = calculateAngle(true)
;
painter.drawText(xy[0], xy[1], displayedText
, 0, 15, -5);
}
} }
glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D);
// OpenGL ES 2.0 doesn't have GL_LINE_SMOOTH // OpenGL ES 2.0 doesn't have GL_LINE_SMOOTH
// glEnable(GL_LINE_SMOOTH); // glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND); glEnable(GL_BLEND);
// main line is a great circle // main line is a great circle
painter.setColor(lineColor[0], lineColor[1], lineColor[2], l ineVisible.getInterstate()); painter.setColor(lineColor[0], lineColor[1], lineColor[2], l ineVisible.getInterstate());
painter.drawGreatCircleArc(startPoint, endPoint, NULL); if (frameType==StelCore::FrameEquinoxEqu)
{
painter.drawGreatCircleArc(startPoint, endPoint, NUL
L);
// End lines // End lines
painter.drawGreatCircleArc(perp1StartPoint, perp1EndPoint, N painter.drawGreatCircleArc(perp1StartPoint, perp1End
ULL); Point, NULL);
painter.drawGreatCircleArc(perp2StartPoint, perp2EndPoint, N painter.drawGreatCircleArc(perp2StartPoint, perp2End
ULL); Point, NULL);
} }
else
{
painter.drawGreatCircleArc(startPointHor, endPointHo
r, NULL);
// End lines
painter.drawGreatCircleArc(perp1StartPointHor, perp1
EndPointHor, NULL);
painter.drawGreatCircleArc(perp2StartPointHor, perp2
EndPointHor, NULL);
}
}
if (messageFader.getInterstate() > 0.000001f) if (messageFader.getInterstate() > 0.000001f)
{ {
painter.setColor(textColor[0], textColor[1], textColor[2], m essageFader.getInterstate()); painter.setColor(txtColor[0], txtColor[1], txtColor[2], mess ageFader.getInterstate());
int x = 83; int x = 83;
int y = 120; int y = 120;
int ls = painter.getFontMetrics().lineSpacing(); int ls = painter.getFontMetrics().lineSpacing();
painter.drawText(x, y, messageEnabled); painter.drawText(x, y, messageEnabled);
y -= ls; y -= ls;
painter.drawText(x, y, messageLeftButton); painter.drawText(x, y, messageLeftButton);
y -= ls; y -= ls;
painter.drawText(x, y, messageRightButton); painter.drawText(x, y, messageRightButton);
} }
}
//! Draw any parts on the screen which are for our module
void AngleMeasure::draw(StelCore* core)
{
if (lineVisible.getInterstate() < 0.000001f && messageFader.getInter
state() < 0.000001f)
return;
if (flagShowHorizontal)
{
drawOne(core, StelCore::FrameAltAz, StelCore::RefractionOff,
horTextColor, horLineColor);
}
if (flagShowEquatorial)
{
drawOne(core, StelCore::FrameEquinoxEqu, StelCore::Refractio
nAuto, textColor, lineColor);
}
} }
QString AngleMeasure::calculatePositionAngle(const Vec3d p1, const Vec3d p2 ) const QString AngleMeasure::calculatePositionAngle(const Vec3d p1, const Vec3d p2 ) const
{ {
double y = cos(p2.latitude())*sin(p2.longitude()-p1.longitude()); double y = cos(p2.latitude())*sin(p2.longitude()-p1.longitude());
double x = cos(p1.latitude())*sin(p2.latitude()) - sin(p1.latitude() )*cos(p2.latitude())*cos(p2.longitude()-p1.longitude()); double x = cos(p1.latitude())*sin(p2.latitude()) - sin(p1.latitude() )*cos(p2.latitude())*cos(p2.longitude()-p1.longitude());
double r = std::atan(y/x); double r = std::atan2(y,x);
if (x<0) // GZ ATAN2 makes many tests unnecessary...
r += M_PI; // if (x<0)
if (y<0) // r += M_PI;
r += 2*M_PI; // if (y<0)
if (r>(2*M_PI)) // r += 2*M_PI;
r -= 2*M_PI; // if (r>(2*M_PI))
// r -= 2*M_PI;
if (r<0)
r+= 2*M_PI;
unsigned int d, m; unsigned int d, m;
double s; double s;
bool sign; bool sign;
StelUtils::radToDms(r, sign, d, m, s); StelUtils::radToDms(r, sign, d, m, s);
if (flagUseDmsFormat) if (flagUseDmsFormat)
return QString("%1d %2m %3s").arg(d).arg(m).arg(s, 0, 'f', 2 ); return QString("%1d %2m %3s").arg(d).arg(m).arg(s, 0, 'f', 2 );
else else
return QString("%1%2 %3' %4\"").arg(d).arg(QChar(0x00B0)).ar g(m).arg(s, 0, 'f', 2); return QString("%1%2 %3' %4\"").arg(d).arg(QChar(0x00B0)).ar g(m).arg(s, 0, 'f', 2);
} }
skipping to change at line 252 skipping to change at line 317
if (!flagShowAngleMeasure) if (!flagShowAngleMeasure)
{ {
event->setAccepted(false); event->setAccepted(false);
return; return;
} }
if (event->type()==QEvent::MouseButtonPress && event->button()==Qt:: LeftButton) if (event->type()==QEvent::MouseButtonPress && event->button()==Qt:: LeftButton)
{ {
const StelProjectorP prj = StelApp::getInstance().getCore()- >getProjection(StelCore::FrameEquinoxEqu); const StelProjectorP prj = StelApp::getInstance().getCore()- >getProjection(StelCore::FrameEquinoxEqu);
prj->unProject(event->x(),event->y(),startPoint); prj->unProject(event->x(),event->y(),startPoint);
const StelProjectorP prjHor = StelApp::getInstance().getCore
()->getProjection(StelCore::FrameAltAz, StelCore::RefractionOff);
prjHor->unProject(event->x(),event->y(),startPointHor);
// first click reset the line... only draw it after we've dr agged a little. // first click reset the line... only draw it after we've dr agged a little.
if (!dragging) if (!dragging)
{ {
lineVisible = false; lineVisible = false;
endPoint = startPoint; endPoint = startPoint;
endPointHor=startPointHor;
} }
else else
lineVisible = true; lineVisible = true;
dragging = true; dragging = true;
calculateEnds(); calculateEnds();
event->setAccepted(true); event->setAccepted(true);
return; return;
} }
else if (event->type()==QEvent::MouseButtonRelease && event->button( )==Qt::LeftButton) else if (event->type()==QEvent::MouseButtonRelease && event->button( )==Qt::LeftButton)
{ {
dragging = false; dragging = false;
calculateEnds(); calculateEnds();
event->setAccepted(true); event->setAccepted(true);
return; return;
} }
else if (event->type()==QEvent::MouseButtonPress && event->button()= =Qt::RightButton) else if (event->type()==QEvent::MouseButtonPress && event->button()= =Qt::RightButton)
{ {
const StelProjectorP prj = StelApp::getInstance().getCore()- >getProjection(StelCore::FrameEquinoxEqu); const StelProjectorP prj = StelApp::getInstance().getCore()- >getProjection(StelCore::FrameEquinoxEqu);
prj->unProject(event->x(),event->y(),endPoint); prj->unProject(event->x(),event->y(),endPoint);
const StelProjectorP prjHor = StelApp::getInstance().getCore
()->getProjection(StelCore::FrameAltAz, StelCore::RefractionOff);
prjHor->unProject(event->x(),event->y(),endPointHor);
calculateEnds(); calculateEnds();
event->setAccepted(true); event->setAccepted(true);
return; return;
} }
event->setAccepted(false); event->setAccepted(false);
} }
bool AngleMeasure::handleMouseMoves(int x, int y, Qt::MouseButtons) bool AngleMeasure::handleMouseMoves(int x, int y, Qt::MouseButtons)
{ {
if (dragging) if (dragging)
{ {
const StelProjectorP prj = StelApp::getInstance().getCore()- >getProjection(StelCore::FrameEquinoxEqu); const StelProjectorP prj = StelApp::getInstance().getCore()- >getProjection(StelCore::FrameEquinoxEqu);
prj->unProject(x,y,endPoint); prj->unProject(x,y,endPoint);
const StelProjectorP prjHor = StelApp::getInstance().getCore
()->getProjection(StelCore::FrameAltAz, StelCore::RefractionOff);
prjHor->unProject(x,y,endPointHor);
calculateEnds(); calculateEnds();
lineVisible = true; lineVisible = true;
return true; return true;
} }
else else
return false; return false;
} }
void AngleMeasure::calculateEnds(void) void AngleMeasure::calculateEnds(void)
{ {
Vec3d v0 = endPoint - startPoint; if (flagShowEquatorial)
Vec3d v1 = Vec3d(0,0,0) - startPoint; calculateEndsOneLine(startPoint, endPoint, perp1StartP
oint, perp1EndPoint, perp2StartPoint, perp2EndPoint, angle);
if (flagShowHorizontal)
calculateEndsOneLine(startPointHor, endPointHor, perp1StartP
ointHor, perp1EndPointHor, perp2StartPointHor, perp2EndPointHor, angleHor);
}
void AngleMeasure::calculateEndsOneLine(const Vec3d start, const Vec3d end,
Vec3d &perp1Start, Vec3d &perp1End, Vec3d &perp2Start, Vec3d &perp2End, do
uble &angle)
{
Vec3d v0 = end - start;
Vec3d v1 = Vec3d(0,0,0) - start;
Vec3d p = v0 ^ v1; Vec3d p = v0 ^ v1;
p *= 0.08; // end width p *= 0.08; // end width
perp1StartPoint.set(startPoint[0]-p[0],startPoint[1]-p[1],startPoint perp1Start.set(start[0]-p[0],start[1]-p[1],start[2]-p[2]);
[2]-p[2]); perp1End.set(start[0]+p[0],start[1]+p[1],start[2]+p[2]);
perp1EndPoint.set(startPoint[0]+p[0],startPoint[1]+p[1],startPoint[2
]+p[2]);
v1 = Vec3d(0,0,0) - endPoint; v1 = Vec3d(0,0,0) - end;
p = v0 ^ v1; p = v0 ^ v1;
p *= 0.08; // end width p *= 0.08; // end width
perp2StartPoint.set(endPoint[0]-p[0],endPoint[1]-p[1],endPoint[2]-p[ perp2Start.set(end[0]-p[0],end[1]-p[1],end[2]-p[2]);
2]); perp2End.set(end[0]+p[0],end[1]+p[1],end[2]+p[2]);
perp2EndPoint.set(endPoint[0]+p[0],endPoint[1]+p[1],endPoint[2]+p[2]
);
angle = startPoint.angle(endPoint); angle = start.angle(end);
} }
QString AngleMeasure::calculateAngle() const // GZ Misnomer! should be called formatAngleString()
QString AngleMeasure::calculateAngle(bool horizontal) const
{ {
unsigned int d, m; unsigned int d, m;
double s; double s;
bool sign; bool sign;
StelUtils::radToDms(angle, sign, d, m, s); if (horizontal)
StelUtils::radToDms(angleHor, sign, d, m, s);
else
StelUtils::radToDms(angle, sign, d, m, s);
if (flagUseDmsFormat) if (flagUseDmsFormat)
return QString("%1d %2m %3s").arg(d).arg(m).arg(s, 0, 'f', 2 ); return QString("%1d %2m %3s").arg(d).arg(m).arg(s, 0, 'f', 2 );
else else
return QString("%1%2 %3' %4\"").arg(d).arg(QChar(0x00B0)).ar g(m).arg(s, 0, 'f', 2); return QString("%1%2 %3' %4\"").arg(d).arg(QChar(0x00B0)).ar g(m).arg(s, 0, 'f', 2);
} }
void AngleMeasure::enableAngleMeasure(bool b) void AngleMeasure::enableAngleMeasure(bool b)
{ {
flagShowAngleMeasure = b; flagShowAngleMeasure = b;
lineVisible = b; lineVisible = b;
skipping to change at line 347 skipping to change at line 431
//qDebug() << "AngleMeasure::enableAngleMeasure starting tim er"; //qDebug() << "AngleMeasure::enableAngleMeasure starting tim er";
messageTimer->start(); messageTimer->start();
} }
} }
void AngleMeasure::showPositionAngle(bool b) void AngleMeasure::showPositionAngle(bool b)
{ {
flagShowPA = b; flagShowPA = b;
} }
void AngleMeasure::showPositionAngleHor(bool b)
{
flagShowHorizontalPA = b;
}
void AngleMeasure::showEquatorial(bool b)
{
flagShowEquatorial = b;
}
void AngleMeasure::showHorizontal(bool b)
{
flagShowHorizontal = b;
}
void AngleMeasure::showHorizontalStartSkylinked(bool b)
{
flagShowHorizontalStartSkylinked = b;
}
void AngleMeasure::showHorizontalEndSkylinked(bool b)
{
flagShowHorizontalEndSkylinked = b;
}
void AngleMeasure::useDmsFormat(bool b) void AngleMeasure::useDmsFormat(bool b)
{ {
flagUseDmsFormat=b; flagUseDmsFormat=b;
} }
void AngleMeasure::updateMessageText() void AngleMeasure::updateMessageText()
{ {
// TRANSLATORS: instructions for using the AngleMeasure plugin. // TRANSLATORS: instructions for using the AngleMeasure plugin.
messageEnabled = q_("The Angle Measure is enabled:"); messageEnabled = q_("The Angle Measure is enabled:");
// TRANSLATORS: instructions for using the AngleMeasure plugin. // TRANSLATORS: instructions for using the AngleMeasure plugin.
skipping to change at line 383 skipping to change at line 487
// Remove the old values... // Remove the old values...
conf->remove("AngleMeasure"); conf->remove("AngleMeasure");
// ...load the default values... // ...load the default values...
loadSettings(); loadSettings();
// ...and then save them. // ...and then save them.
saveSettings(); saveSettings();
// But this doesn't save the colors, so: // But this doesn't save the colors, so:
conf->beginGroup("AngleMeasure"); conf->beginGroup("AngleMeasure");
conf->setValue("text_color", "0,0.5,1"); conf->setValue("text_color", "0,0.5,1");
conf->setValue("line_color", "0,0.5,1"); conf->setValue("line_color", "0,0.5,1");
conf->setValue("text_color_horizontal", "0.9,0.6,0.4");
conf->setValue("line_color_horizontal", "0.9,0.6,0.4");
conf->endGroup(); conf->endGroup();
} }
void AngleMeasure::loadSettings() void AngleMeasure::loadSettings()
{ {
conf->beginGroup("AngleMeasure"); conf->beginGroup("AngleMeasure");
useDmsFormat(conf->value("angle_format_dms", false).toBool()); useDmsFormat(conf->value("angle_format_dms", false).toBool());
showPositionAngle(conf->value("show_position_angle", false).toBool() ); showPositionAngle(conf->value("show_position_angle", false).toBool() );
textColor = StelUtils::strToVec3f(conf->value("text_color", "0,0.5,1 ").toString()); textColor = StelUtils::strToVec3f(conf->value("text_color", "0,0.5,1 ").toString());
lineColor = StelUtils::strToVec3f(conf->value("line_color", "0,0.5,1 ").toString()); lineColor = StelUtils::strToVec3f(conf->value("line_color", "0,0.5,1 ").toString());
horTextColor = StelUtils::strToVec3f(conf->value("text_color_horizon
tal", "0.9,0.6,0.4").toString());
horLineColor = StelUtils::strToVec3f(conf->value("line_color_horizon
tal", "0.9,0.6,0.4").toString());
showPositionAngleHor(conf->value("show_position_angle_horizontal", f
alse).toBool());
flagShowEquatorial = conf->value("show_equatorial", true).toBool();
flagShowHorizontal = conf->value("show_horizontal", false).toBool();
flagShowHorizontalStartSkylinked = conf->value("link_horizontal_star
t_to_sky", false).toBool();
flagShowHorizontalEndSkylinked = conf->value("link_horizontal_end_to
_sky", false).toBool();
conf->endGroup(); conf->endGroup();
} }
void AngleMeasure::saveSettings() void AngleMeasure::saveSettings()
{ {
conf->beginGroup("AngleMeasure"); conf->beginGroup("AngleMeasure");
conf->setValue("angle_format_dms", isDmsFormat()); conf->setValue("angle_format_dms", isDmsFormat());
conf->setValue("show_position_angle", isPaDisplayed()); conf->setValue("show_position_angle", isPaDisplayed());
conf->setValue("show_position_angle_horizontal", isHorPaDisplayed())
;
conf->setValue("show_equatorial", isEquatorial());
conf->setValue("show_horizontal", isHorizontal());
conf->setValue("link_horizontal_start_to_sky", isHorizontalStartSkyl
inked());
conf->setValue("link_horizontal_end_to_sky", isHorizontalEndSkylinke
d());
conf->endGroup(); conf->endGroup();
} }
 End of changes. 30 change blocks. 
48 lines changed or deleted 194 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/