mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
More flux visualiser improvements.
This commit is contained in:
@@ -84,6 +84,32 @@ public:
|
|||||||
if (fc->source)
|
if (fc->source)
|
||||||
fc->source(fluxFile,
|
fc->source(fluxFile,
|
||||||
globalConfig().overrides()->mutable_flux_source());
|
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
|
void loadSavedState() override
|
||||||
|
|||||||
@@ -38,11 +38,6 @@ public:
|
|||||||
_fluxVisualiserWidget->setTrackData(track);
|
_fluxVisualiserWidget->setTrackData(track);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setDiskData(std::shared_ptr<const DiskFlux> disk)
|
|
||||||
{
|
|
||||||
_fluxVisualiserWidget->setDiskData(disk);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MainWindow* _mainWindow;
|
MainWindow* _mainWindow;
|
||||||
FluxVisualiserWidget* _fluxVisualiserWidget;
|
FluxVisualiserWidget* _fluxVisualiserWidget;
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ class FluxComponent
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void setTrackData(std::shared_ptr<const TrackFlux> track) = 0;
|
virtual void setTrackData(std::shared_ptr<const TrackFlux> track) = 0;
|
||||||
virtual void setDiskData(std::shared_ptr<const DiskFlux> disk) = 0;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static FluxComponent* create(MainWindow* mainWindow);
|
static FluxComponent* create(MainWindow* mainWindow);
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ class DiskFlux;
|
|||||||
class TrackFlux;
|
class TrackFlux;
|
||||||
|
|
||||||
static constexpr int SIDES = 2;
|
static constexpr int SIDES = 2;
|
||||||
static constexpr int TRACKS = 82;
|
|
||||||
static constexpr int SLOTS = 300;
|
static constexpr int SLOTS = 300;
|
||||||
|
|
||||||
static constexpr float VBORDER = 1.0;
|
static constexpr float VBORDER = 1.0;
|
||||||
@@ -67,25 +66,18 @@ public:
|
|||||||
|
|
||||||
void setTrackData(std::shared_ptr<const TrackFlux> track)
|
void setTrackData(std::shared_ptr<const TrackFlux> track)
|
||||||
{
|
{
|
||||||
key_t key = {
|
for (int i = 0; i < track->trackInfo->groupSize; i++)
|
||||||
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();
|
key_t key = {track->trackInfo->physicalTrack + i,
|
||||||
for (const auto& track : disk->tracks)
|
|
||||||
{
|
|
||||||
key_t key = {track->trackInfo->physicalTrack,
|
|
||||||
track->trackInfo->physicalSide};
|
track->trackInfo->physicalSide};
|
||||||
_tracks[key] = track;
|
_tracks[key] = track;
|
||||||
}
|
_numTracks = track->trackInfo->numPhysicalTracks;
|
||||||
|
_viewData0.resize(_numTracks);
|
||||||
|
_viewData1.resize(_numTracks);
|
||||||
|
|
||||||
recompute();
|
recompute(track->trackInfo->physicalSide,
|
||||||
|
track->trackInfo->physicalTrack + i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -121,11 +113,18 @@ private:
|
|||||||
|
|
||||||
void drawSide(float x, float y, int side)
|
void drawSide(float x, float y, int side)
|
||||||
{
|
{
|
||||||
float step = (VOUTER_RADIUS - VINNER_RADIUS) / TRACKS;
|
if (_numTracks == 0)
|
||||||
for (int track = 0; track < 82; track++)
|
{
|
||||||
|
_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);
|
QConicalGradient gradient(x, y, 90.0);
|
||||||
gradient.setStops(_viewData[side][track].gradientStops);
|
gradient.setStops(viewData.at(track).gradientStops);
|
||||||
QBrush brush(gradient);
|
QBrush brush(gradient);
|
||||||
QPen pen(brush, step * 1.15);
|
QPen pen(brush, step * 1.15);
|
||||||
|
|
||||||
@@ -142,13 +141,14 @@ private:
|
|||||||
void recompute()
|
void recompute()
|
||||||
{
|
{
|
||||||
for (int side = 0; side < SIDES; side++)
|
for (int side = 0; side < SIDES; side++)
|
||||||
for (int track = 0; track < TRACKS; track++)
|
for (int track = 0; track < _numTracks; track++)
|
||||||
recompute(side, track);
|
recompute(side, track);
|
||||||
}
|
}
|
||||||
|
|
||||||
void recompute(int side, int 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;
|
QGradientStops& stops = vdata.gradientStops;
|
||||||
stops.clear();
|
stops.clear();
|
||||||
ranges::fill(vdata.slot, VSlot());
|
ranges::fill(vdata.slot, VSlot());
|
||||||
@@ -250,7 +250,9 @@ private:
|
|||||||
Scene* _scene;
|
Scene* _scene;
|
||||||
std::map<key_t, std::shared_ptr<const TrackFlux>> _tracks;
|
std::map<key_t, std::shared_ptr<const TrackFlux>> _tracks;
|
||||||
int _viewMode = BOTH_SIDES;
|
int _viewMode = BOTH_SIDES;
|
||||||
VData _viewData[SIDES][TRACKS];
|
unsigned _numTracks = 0;
|
||||||
|
std::vector<VData> _viewData0;
|
||||||
|
std::vector<VData> _viewData1;
|
||||||
float _gamma = 1.0;
|
float _gamma = 1.0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ public:
|
|||||||
W_SLOT(setGamma)
|
W_SLOT(setGamma)
|
||||||
|
|
||||||
virtual void setTrackData(std::shared_ptr<const TrackFlux> track) = 0;
|
virtual void setTrackData(std::shared_ptr<const TrackFlux> track) = 0;
|
||||||
virtual void setDiskData(std::shared_ptr<const DiskFlux> disk) = 0;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static FluxVisualiserWidget* create();
|
static FluxVisualiserWidget* create();
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ public:
|
|||||||
for (auto& sector : track->sectors)
|
for (auto& sector : track->sectors)
|
||||||
_sectors.insert({key, sector});
|
_sectors.insert({key, sector});
|
||||||
_trackInfos.insert({key, track->trackInfo});
|
_trackInfos.insert({key, track->trackInfo});
|
||||||
_numTracks = track->trackInfo->numTracks;
|
_numTracks = track->trackInfo->numLogicalTracks;
|
||||||
|
|
||||||
redraw();
|
redraw();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,7 +74,6 @@ public:
|
|||||||
/* A complete disk has been read. */
|
/* A complete disk has been read. */
|
||||||
[&](const DiskReadLogMessage& m)
|
[&](const DiskReadLogMessage& m)
|
||||||
{
|
{
|
||||||
_fluxComponent->setDiskData(m.disk);
|
|
||||||
_imageComponent->setDiskData(m.disk);
|
_imageComponent->setDiskData(m.disk);
|
||||||
_currentDisk = m.disk;
|
_currentDisk = m.disk;
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user