More flux visualiser improvements.

This commit is contained in:
David Given
2024-01-20 23:03:25 +01:00
parent d1aa84b543
commit f187846bf3
7 changed files with 51 additions and 31 deletions

View File

@@ -84,6 +84,32 @@ public:
if (fc->source)
fc->source(fluxFile,
globalConfig().overrides()->mutable_flux_source());
QString rpmOverride = rpmOverrideComboBox->currentData().toString();
if (rpmOverride == "300")
globalConfig()
.overrides()
->mutable_drive()
->set_rotational_period_ms(200);
else if (rpmOverride == "360")
globalConfig()
.overrides()
->mutable_drive()
->set_rotational_period_ms(166);
else if (rpmOverride == "override")
{
float value = rpmOverrideValue->value();
globalConfig()
.overrides()
->mutable_drive()
->set_rotational_period_ms(60e3 / value);
}
QString driveTypeOverride =
driveTypeOverrideComboBox->currentData().toString();
if (driveTypeOverride != "default")
globalConfig().overrides()->MergeFrom(
*drivetypes.at(driveTypeOverride.toStdString()));
}
void loadSavedState() override

View File

@@ -38,11 +38,6 @@ public:
_fluxVisualiserWidget->setTrackData(track);
}
void setDiskData(std::shared_ptr<const DiskFlux> disk)
{
_fluxVisualiserWidget->setDiskData(disk);
}
private:
MainWindow* _mainWindow;
FluxVisualiserWidget* _fluxVisualiserWidget;

View File

@@ -6,7 +6,6 @@ class FluxComponent
{
public:
virtual void setTrackData(std::shared_ptr<const TrackFlux> track) = 0;
virtual void setDiskData(std::shared_ptr<const DiskFlux> disk) = 0;
public:
static FluxComponent* create(MainWindow* mainWindow);

View File

@@ -18,7 +18,6 @@ class DiskFlux;
class TrackFlux;
static constexpr int SIDES = 2;
static constexpr int TRACKS = 82;
static constexpr int SLOTS = 300;
static constexpr float VBORDER = 1.0;
@@ -67,25 +66,18 @@ public:
void setTrackData(std::shared_ptr<const TrackFlux> track)
{
key_t key = {
track->trackInfo->physicalTrack, track->trackInfo->physicalSide};
_tracks[key] = track;
recompute(
track->trackInfo->physicalSide, track->trackInfo->physicalTrack);
}
void setDiskData(std::shared_ptr<const DiskFlux> disk)
{
_tracks.clear();
for (const auto& track : disk->tracks)
for (int i = 0; i < track->trackInfo->groupSize; i++)
{
key_t key = {track->trackInfo->physicalTrack,
key_t key = {track->trackInfo->physicalTrack + i,
track->trackInfo->physicalSide};
_tracks[key] = track;
}
_numTracks = track->trackInfo->numPhysicalTracks;
_viewData0.resize(_numTracks);
_viewData1.resize(_numTracks);
recompute();
recompute(track->trackInfo->physicalSide,
track->trackInfo->physicalTrack + i);
}
}
private:
@@ -121,11 +113,18 @@ private:
void drawSide(float x, float y, int side)
{
float step = (VOUTER_RADIUS - VINNER_RADIUS) / TRACKS;
for (int track = 0; track < 82; track++)
if (_numTracks == 0)
{
_scene->addAlignedText(x, y, "No flux loaded!");
return;
}
auto& viewData = side ? _viewData1 : _viewData0;
float step = (VOUTER_RADIUS - VINNER_RADIUS) / _numTracks;
for (int track = 0; track < _numTracks; track++)
{
QConicalGradient gradient(x, y, 90.0);
gradient.setStops(_viewData[side][track].gradientStops);
gradient.setStops(viewData.at(track).gradientStops);
QBrush brush(gradient);
QPen pen(brush, step * 1.15);
@@ -142,13 +141,14 @@ private:
void recompute()
{
for (int side = 0; side < SIDES; side++)
for (int track = 0; track < TRACKS; track++)
for (int track = 0; track < _numTracks; track++)
recompute(side, track);
}
void recompute(int side, int track)
{
VData& vdata = _viewData[side][track];
auto& viewData = side ? _viewData1 : _viewData0;
VData& vdata = viewData.at(track);
QGradientStops& stops = vdata.gradientStops;
stops.clear();
ranges::fill(vdata.slot, VSlot());
@@ -250,7 +250,9 @@ private:
Scene* _scene;
std::map<key_t, std::shared_ptr<const TrackFlux>> _tracks;
int _viewMode = BOTH_SIDES;
VData _viewData[SIDES][TRACKS];
unsigned _numTracks = 0;
std::vector<VData> _viewData0;
std::vector<VData> _viewData1;
float _gamma = 1.0;
};

View File

@@ -14,7 +14,6 @@ public:
W_SLOT(setGamma)
virtual void setTrackData(std::shared_ptr<const TrackFlux> track) = 0;
virtual void setDiskData(std::shared_ptr<const DiskFlux> disk) = 0;
public:
static FluxVisualiserWidget* create();

View File

@@ -102,7 +102,7 @@ public:
for (auto& sector : track->sectors)
_sectors.insert({key, sector});
_trackInfos.insert({key, track->trackInfo});
_numTracks = track->trackInfo->numTracks;
_numTracks = track->trackInfo->numLogicalTracks;
redraw();
}

View File

@@ -74,7 +74,6 @@ public:
/* A complete disk has been read. */
[&](const DiskReadLogMessage& m)
{
_fluxComponent->setDiskData(m.disk);
_imageComponent->setDiskData(m.disk);
_currentDisk = m.disk;
},