1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
|
//---------------------------------------------------------------------------
#include <QShowEvent>
#include <QMessageBox>
#include <QFileDialog>
#include <stdio.h>
#include "rtklib.h"
#include "plotmain.h"
#include "skydlg.h"
extern Plot *plot;
//---------------------------------------------------------------------------
SkyImgDialog::SkyImgDialog(QWidget *parent)
: QDialog(parent)
{
setupUi(this);
connect(BtnClose,SIGNAL(clicked(bool)),this,SLOT(BtnCloseClick()));
connect(BtnGenMask,SIGNAL(clicked(bool)),this,SLOT(BtnGenMaskClick()));
connect(BtnLoad,SIGNAL(clicked(bool)),this,SLOT(BtnLoadClick()));
connect(BtnSave,SIGNAL(clicked(bool)),this,SLOT(BtnSaveClick()));
connect(BtnUpdate,SIGNAL(clicked(bool)),this,SLOT(BtnUpdateClick()));
connect(SkyRes,SIGNAL(currentIndexChanged(int)),this,SLOT(SkyResChange()));
connect(SkyElMask,SIGNAL(clicked(bool)),this,SLOT(SkyElMaskClicked()));
connect(SkyDestCorr,SIGNAL(clicked(bool)),this,SLOT(SkyDestCorrClicked()));
connect(SkyFlip,SIGNAL(clicked(bool)),this,SLOT(SkyFlipClicked()));
connect(SkyBinarize,SIGNAL(clicked(bool)),this,SLOT(SkyBinarizeClicked()));
}
//---------------------------------------------------------------------------
void SkyImgDialog::showEvent(QShowEvent* event)
{
if (event->spontaneous()) return;
UpdateField();
UpdateEnable();
}
//---------------------------------------------------------------------------
void SkyImgDialog::BtnSaveClick()
{
QFile fp;
QString file=plot->SkyImageFile;
if (file=="") return;
UpdateSky();
file=file+".tag";
fp.setFileName(file);
if (QFile::exists(file)) {
if (QMessageBox::question(this,file,tr("File exists. Overwrite it?"))!=QMessageBox::Yes) return;
}
if (!fp.open(QIODevice::WriteOnly)) return;
QString data;
data=QString("%% sky image tag file: rtkplot %1 %2\n\n").arg(VER_RTKLIB).arg(PATCH_LEVEL);
data+=QString("centx = %1\n").arg(plot->SkyCent[0],0,'g',6);
data+=QString("centy = %1\n").arg(plot->SkyCent[1],0,'g',6);
data+=QString("scale = %1\n").arg(plot->SkyScale,0,'g',6);
data+=QString("roll = %1\n").arg(plot->SkyFov[0],0,'g',6);
data+=QString("pitch = %1\n").arg(plot->SkyFov[1],0,'g',6);
data+=QString("yaw = %1\n").arg(plot->SkyFov[2],0,'g',6);
data+=QString("destcorr= %1\n").arg(plot->SkyDestCorr);
data+=QString("resample= %1\n").arg(plot->SkyRes);
data+=QString("flip = %1\n").arg(plot->SkyFlip);
data+=QString("dest = %1 %2 %3 %4 %5 %6 %7 %8 %9s\n")
.arg(plot->SkyDest[1],0,'g',6).arg(plot->SkyDest[2],0,'g',6).arg(plot->SkyDest[3],0,'g',6).arg(plot->SkyDest[4],0,'g',6)
.arg(plot->SkyDest[5],0,'g',6).arg(plot->SkyDest[6],0,'g',6).arg(plot->SkyDest[7],0,'g',6).arg(plot->SkyDest[8],0,'g',6)
.arg(plot->SkyDest[9],0,'g',6);
data+=QString("elmask = %1\n").arg(plot->SkyElMask);
data+=QString("binarize= %1\n").arg(plot->SkyBinarize);
data+=QString("binthr1 = %1\n").arg(plot->SkyBinThres1,0,'f',2);
data+=QString("binthr2 = %1f\n").arg(plot->SkyBinThres2,0,'f',2);
fp.write(data.toLatin1());
}
//---------------------------------------------------------------------------
void SkyImgDialog::BtnUpdateClick()
{
UpdateSky();
}
//---------------------------------------------------------------------------
void SkyImgDialog::BtnCloseClick()
{
accept();
}
//---------------------------------------------------------------------------
void SkyImgDialog::UpdateField(void)
{
setWindowTitle(plot->SkyImageFile);
SkySize1->setValue(plot->SkySize[0]);
SkySize2->setValue(plot->SkySize[1]);
SkyCent1->setValue(plot->SkyCent[0]);
SkyCent2->setValue(plot->SkyCent[1]);
SkyScale->setValue(plot->SkyScale);
SkyFov1 ->setValue(plot->SkyFov[0]);
SkyFov2 ->setValue(plot->SkyFov[1]);
SkyFov3 ->setValue(plot->SkyFov[2]);
SkyDest1->setText(QString::number(plot->SkyDest[1],'f',1));
SkyDest2->setText(QString::number(plot->SkyDest[2],'f',1));
SkyDest3->setText(QString::number(plot->SkyDest[3],'f',1));
SkyDest4->setText(QString::number(plot->SkyDest[4],'f',1));
SkyDest5->setText(QString::number(plot->SkyDest[5],'f',1));
SkyDest6->setText(QString::number(plot->SkyDest[6],'f',1));
SkyDest7->setText(QString::number(plot->SkyDest[7],'f',1));
SkyDest8->setText(QString::number(plot->SkyDest[8],'f',1));
SkyDest9->setText(QString::number(plot->SkyDest[9],'f',1));
SkyElMask->setChecked(plot->SkyElMask);
SkyDestCorr->setChecked(plot->SkyDestCorr);
SkyRes->setCurrentIndex(plot->SkyRes);
SkyFlip->setChecked(plot->SkyFlip);
SkyBinarize->setChecked(plot->SkyBinarize);
SkyBinThres1->setValue(plot->SkyBinThres1);
SkyBinThres2->setValue(plot->SkyBinThres2);
}
//---------------------------------------------------------------------------
void SkyImgDialog::UpdateSky(void)
{
plot->SkyCent[0]=SkyCent1->text().toDouble();
plot->SkyCent[1]=SkyCent2->text().toDouble();
plot->SkyScale=SkyScale->text().toDouble();
plot->SkyFov[0]=SkyFov1->text().toDouble();
plot->SkyFov[1]=SkyFov2->text().toDouble();
plot->SkyFov[2]=SkyFov3->text().toDouble();
plot->SkyDest[1]=SkyDest1->text().toDouble();
plot->SkyDest[2]=SkyDest2->text().toDouble();
plot->SkyDest[3]=SkyDest3->text().toDouble();
plot->SkyDest[4]=SkyDest4->text().toDouble();
plot->SkyDest[5]=SkyDest5->text().toDouble();
plot->SkyDest[6]=SkyDest6->text().toDouble();
plot->SkyDest[7]=SkyDest7->text().toDouble();
plot->SkyDest[8]=SkyDest8->text().toDouble();
plot->SkyDest[9]=SkyDest9->text().toDouble();
plot->SkyElMask=SkyElMask->isChecked();
plot->SkyDestCorr=SkyDestCorr->isChecked();
plot->SkyRes=SkyRes->currentIndex();
plot->SkyFlip=SkyFlip->isChecked();
plot->SkyBinarize=SkyBinarize->isChecked();
plot->SkyBinThres1=SkyBinThres1->text().toDouble();
plot->SkyBinThres2=SkyBinThres2->text().toDouble();
plot->UpdateSky();
}
//---------------------------------------------------------------------------
void SkyImgDialog::UpdateEnable(void)
{
SkyDest1->setEnabled(SkyDestCorr->isChecked());
SkyDest2->setEnabled(SkyDestCorr->isChecked());
SkyDest3->setEnabled(SkyDestCorr->isChecked());
SkyDest4->setEnabled(SkyDestCorr->isChecked());
SkyDest5->setEnabled(SkyDestCorr->isChecked());
SkyDest6->setEnabled(SkyDestCorr->isChecked());
SkyDest7->setEnabled(SkyDestCorr->isChecked());
SkyDest8->setEnabled(SkyDestCorr->isChecked());
SkyDest9->setEnabled(SkyDestCorr->isChecked());
SkyBinThres1->setEnabled(SkyBinarize->isChecked());
SkyBinThres2->setEnabled(SkyBinarize->isChecked());
BtnGenMask->setEnabled(SkyBinarize->isChecked());
}
//---------------------------------------------------------------------------
void SkyImgDialog::SkyElMaskClicked()
{
UpdateSky();
}
//---------------------------------------------------------------------------
void SkyImgDialog::SkyDestCorrClicked()
{
UpdateSky();
UpdateEnable();
}
//---------------------------------------------------------------------------
void SkyImgDialog::SkyFlipClicked()
{
UpdateSky();
}
//---------------------------------------------------------------------------
void SkyImgDialog::SkyResChange()
{
UpdateSky();
}
//---------------------------------------------------------------------------
void SkyImgDialog::BtnLoadClick()
{
plot->ReadSkyTag(QDir::toNativeSeparators(QFileDialog::getOpenFileName(this,tr("Open Tag"),QString(),"Tag File (*.tag);;All (*.*)")));
UpdateField();
plot->UpdateSky();
}
//---------------------------------------------------------------------------
void SkyImgDialog::BtnGenMaskClick()
{
QImage &bm=plot->SkyImageR;
double r,ca,sa,el,el0;
int x,y,w,h,az,n;
w=bm.width(); h=bm.height();
if (w<=0||h<=0) return;
for (az=0;az<=360;az++) {
ca=cos(az*D2R);
sa=sin(az*D2R);
for (el=90.0,n=0,el0=0.0;el>=0.0;el-=0.1) {
r=(1.0-el/90.0)*plot->SkyScaleR;
x=(int)floor(w/2.0+sa*r+0.5);
y=(int)floor(h/2.0+ca*r+0.5);
if (x<0||x>=w||y<0||y>=h) continue;
QRgb pix=bm.pixel(x,y);
if (qRed(pix)<255&&qGreen(pix)<255&&qBlue(pix)<255) {
if (++n==1) el0=el;
if (n>=5) break;
}
else n=0;
}
plot->ElMaskData[az]=el0==90.0?0.0:el0*D2R;
}
plot->UpdateSky();
}
//---------------------------------------------------------------------------
void SkyImgDialog::SkyBinarizeClicked()
{
UpdateSky();
UpdateEnable();
}
//---------------------------------------------------------------------------
|