Skip to content

Commit 47b443e

Browse files
Rewrite rendering
1 parent 4122420 commit 47b443e

15 files changed

+765
-45
lines changed

CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,18 @@ set(PLUGIN_SOURCES
6060
)
6161

6262
set(RENDER_SOURCES
63-
src/EMRenderer.h
64-
src/EMRenderer.cpp
6563
src/LayerDrawing.h
6664
src/LayerDrawing.cpp
65+
src/Rendering/MERenderer.h
66+
src/Rendering/MERenderer.cpp
6767
src/Rendering/CellRenderObject.h
6868
src/Rendering/CellRenderObject.cpp
6969
src/Rendering/RenderObjectBuilder.h
7070
src/Rendering/RenderObjectBuilder.cpp
7171
src/Rendering/RenderState.h
7272
src/Rendering/RenderState.cpp
73+
src/Rendering/RenderContext.h
74+
src/Rendering/RenderContext.cpp
7375
src/Rendering/RenderRegion.h
7476
src/Rendering/RenderRegion.cpp
7577
)

src/EMRenderer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ void EMRenderer::ComputeRenderLocations(const std::vector<CellRenderObject*>& ce
440440

441441
void EMRenderer::BuildRenderObjects(const std::vector<Cell>& cells)
442442
{
443-
_renderObjectBuilder.BuildCellRenderObjects(cells);
443+
_renderObjectBuilder.BuildCellRenderObjects(cells, _renderState._cellRenderObjects);
444444
}
445445

446446
void EMRenderer::BuildListOfCellRenderObjects(const std::vector<Cell>& cells, std::vector<CellRenderObject*>& cellRenderObjects)

src/LayerDrawing.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ void LayerDrawing::drawAxes(QPainter& painter, bool isCortical)
8484
painter.drawLine(MARGIN, topMargin, MARGIN, _parent->height() - bottomMargin);
8585
}
8686

87+
void LayerDrawing::drawSeparations(QPainter& painter, bool isCortical)
88+
{
89+
drawVerticalLine(painter, 200);
90+
}
91+
8792
static qreal snapToDeviceRow(const QPainter& p, qreal y)
8893
{
8994
const QTransform dev = p.deviceTransform();
@@ -104,3 +109,24 @@ void LayerDrawing::drawHorizontalLine(QPainter& painter, float y)
104109

105110
painter.restore();
106111
}
112+
113+
void LayerDrawing::drawVerticalLine(QPainter& painter, float x)
114+
{
115+
painter.save();
116+
painter.setRenderHint(QPainter::Antialiasing, false);
117+
118+
int topMargin = 32; // Non-pixel ratio margin
119+
int bottomMargin = _parent->height() / 3.0f; // Pixel ratio margin
120+
int chartHeight = _parent->height() - topMargin - bottomMargin;
121+
122+
// Draw line centered at a pixel, so it doesn't bleed onto multiple pixels
123+
const qreal px = snapToDeviceRow(painter, x);
124+
QPen pen;
125+
pen.setColor(Qt::gray);
126+
pen.setWidth(2);
127+
pen.setStyle(Qt::DashLine);
128+
painter.setPen(pen);
129+
painter.drawLine(QPointF(px, topMargin), QPointF(px, chartHeight + topMargin));
130+
131+
painter.restore();
132+
}

src/LayerDrawing.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@ class LayerDrawing
1515
void setDepthRange(float minDepth, float maxDepth);
1616

1717
void drawAxes(QPainter& painter, bool isCortical);
18+
void drawSeparations(QPainter& painter, bool isCortical);
1819

1920
private:
2021
void drawHorizontalLine(QPainter& painter, float y);
22+
void drawVerticalLine(QPainter& painter, float x);
2123

2224
private:
2325
QWidget* _parent;

src/MEView.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ void MEView::init()
4646
_primaryToolbarAction.addAction(&_settingsAction.getStimSetsAction());
4747

4848
connect(&_settingsAction.getProcessesOption(), &OptionsAction::selectedOptionsChanged, this, [this](const QStringList& selectedOptions) { _meWidget->GetRenderer().SetEnabledProcesses(selectedOptions); });
49-
connect(&_settingsAction.getStimSetsAction(), &OptionAction::currentIndexChanged, this, [this](const int32_t& index) { _meWidget->GetRenderer().setCurrentStimset(_settingsAction.getStimSetsAction().getCurrentText()); });
49+
connect(&_settingsAction.getStimSetsAction(), &OptionAction::currentIndexChanged, this, [this](const int32_t& index) { _meWidget->GetRenderer().SetCurrentStimset(_settingsAction.getStimSetsAction().getCurrentText()); });
5050
connect(&_settingsAction.getShowNoMorphsAction(), &ToggleAction::toggled, this, [this](bool toggled) { onCellSelectionChanged(); });
5151
_meWidget->GetRenderer().SetEnabledProcesses({ "Axon", "Apical Dendrite", "Basal Dendrite" });
5252

src/MEWidget.cpp

Lines changed: 12 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ namespace
99

1010
MEWidget::MEWidget() :
1111
_scene(Scene::getInstance()),
12-
_emRenderer(),
12+
_meRenderer(),
1313
_layerDrawing(this),
1414
_width(1),
1515
_height(1),
1616
_isCortical(false)
1717
{
18-
connect(&_emRenderer, &EMRenderer::requestNewAspectRatio, this, &MEWidget::onNewAspectRatioRequested);
18+
connect(&_meRenderer, &MERenderer::RequestNewAspectRatio, this, &MEWidget::onNewAspectRatioRequested);
1919

2020
//setMinimumSize(10, 10);
2121
setSizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Expanding);
@@ -32,36 +32,30 @@ void MEWidget::setCells(const std::vector<Cell>& cells)
3232
return;
3333

3434
makeCurrent();
35-
_emRenderer.BuildRenderObjects(cells);
35+
_meRenderer.BuildRenderObjects(cells);
3636
}
3737

3838
void MEWidget::setSelectedCells(const std::vector<uint32_t>& indices)
3939
{
40-
//if (!isWidgetInitialized()) // Shouldn't be necessary
41-
// return;
42-
43-
//_cells = cells;
44-
4540
_scene.selectedCells.clear();
4641
for (uint32_t cellIndex : indices)
4742
{
4843
_scene.selectedCells.push_back(_scene.allCells[cellIndex]);
4944
}
5045

51-
// makeCurrent(); // Shouldn't be necessary
52-
_emRenderer.SetSelectedCellIds(indices);
46+
_meRenderer.SetSelectedCellIds(indices);
5347
}
5448

5549
void MEWidget::SetCortical(bool isCortical)
5650
{
5751
_isCortical = isCortical;
5852

59-
_emRenderer.SetCortical(isCortical);
53+
_meRenderer.SetCortical(isCortical);
6054
}
6155

6256
void MEWidget::onWidgetInitialized()
6357
{
64-
_emRenderer.init();
58+
_meRenderer.Init();
6559

6660
// Start 40 fps render timer
6761
QTimer* updateTimer = new QTimer();
@@ -72,7 +66,7 @@ void MEWidget::onWidgetInitialized()
7266
void MEWidget::onWidgetResized(int w, int h)
7367
{
7468
_width = w; _height = h;
75-
_emRenderer.resize(w, h, devicePixelRatioF());
69+
_meRenderer.Resize(w, h, devicePixelRatioF());
7670
}
7771

7872
void MEWidget::onWidgetRendered()
@@ -93,30 +87,14 @@ void MEWidget::onWidgetRendered()
9387

9488
_layerDrawing.setDepthRange(scene.getCortexStructure().getMinDepth(), scene.getCortexStructure().getMaxDepth());
9589
_layerDrawing.drawAxes(painter, _isCortical);
90+
//_layerDrawing.drawSeparations(painter, _isCortical);
9691

9792
painter.beginNativePainting();
98-
_emRenderer.update(t);
93+
_meRenderer.Update(t, painter);
9994
painter.endNativePainting();
10095

101-
std::vector<float> horizontalCellLocations = _emRenderer.GetHorizontalCellLocations();
102-
for (int i = 0; i < horizontalCellLocations.size(); i++)
103-
{
104-
int xCoord = horizontalCellLocations[i] / devicePixelRatioF();
105-
int yCoord = 16;
106-
107-
QFontMetrics fm(painter.font());
108-
int textWidth = fm.horizontalAdvance(_scene.selectedCells[i].cluster);
109-
int textHeight = fm.height();
110-
111-
// Calculate top-left corner to draw the text so that it is centered
112-
int x = xCoord - textWidth / 2;
113-
int y = yCoord + fm.ascent() - textHeight / 2;
114-
115-
const QRect boundingRect = QRect(xCoord - 50, yCoord - 12, 100, 28);
116-
painter.drawText(boundingRect, Qt::AlignCenter | Qt::AlignTop | Qt::TextWordWrap, _scene.selectedCells[i].cluster);
117-
118-
//painter.drawText(x, y, _scene.selectedCells[i].cluster);
119-
}
96+
_meRenderer.RenderLabels(painter);
97+
_meRenderer.RenderSeparations(painter);
12098

12199
painter.end();
122100
}
@@ -132,7 +110,7 @@ void MEWidget::mousePressEvent(QMouseEvent* event)
132110
QPoint localPos = event->pos(); // position inside the widget
133111
QPoint globalPos = mapToGlobal(localPos);
134112

135-
std::vector<float> cellLocations = _emRenderer.GetHorizontalCellLocations();
113+
std::vector<float> cellLocations = _meRenderer.GetHorizontalCellLocations();
136114
Cell* cell = nullptr;
137115
float closestDist = std::numeric_limits<float>::max();
138116
for (int i = 0; i < cellLocations.size(); i++)

src/MEWidget.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include "Scene.h"
44

55
#include "LayerDrawing.h"
6-
#include "EMRenderer.h"
6+
#include "Rendering/MERenderer.h"
77
//#include "HoverPopup.h"
88
#include "RoundedPopup.h"
99
#include "CellCard/CellCard.h"
@@ -17,7 +17,7 @@ class MEWidget : public mv::gui::OpenGLWidget
1717
public:
1818
MEWidget();
1919

20-
EMRenderer& GetRenderer() { return _emRenderer; }
20+
MERenderer& GetRenderer() { return _meRenderer; }
2121

2222
/** Set the indices of which morphologies should be shown */
2323
void setCells(const std::vector<Cell>& cells);
@@ -46,7 +46,7 @@ public slots:
4646

4747
bool _isCortical;
4848
LayerDrawing _layerDrawing;
49-
EMRenderer _emRenderer;
49+
MERenderer _meRenderer;
5050

5151
float t = 0;
5252

0 commit comments

Comments
 (0)