Skip to content

Commit 4d6bc50

Browse files
committed
Allow users to modify the size of the axis grid.
1 parent 9631972 commit 4d6bc50

File tree

9 files changed

+83
-50
lines changed

9 files changed

+83
-50
lines changed

Sources/VisualScriptCAD/Application/ExportDialog.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ void ExportDialog::OnButtonClick (wxCommandEvent& evt)
225225
} else if (exportSettings.format == ExportSettings::FormatId::Png) {
226226
if (exportSettings.image.IsValid ()) {
227227
RenderPixels pixels (exportSettings.image.width * exportSettings.image.multisampling, exportSettings.image.height * exportSettings.image.multisampling);
228-
RenderSettings renderSettings (ViewMode::Polygons, AxisMode::Off, 10);
228+
RenderSettings renderSettings (ViewMode::Polygons, AxisMode::Off, 0.0, 0);
229229
scene.DrawOffscreen (renderSettings, pixels);
230230

231231
wxImage image (pixels.GetWidth (), pixels.GetHeight ());

Sources/VisualScriptCAD/Application/SettingsDialog.cpp

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
#include "SettingsDialog.hpp"
22

3+
#include <wx/spinctrl.h>
4+
5+
static const wxSize TextControlSize (250, 25);
36
static const wxSize ChoiceControlSize (250, 25);
4-
static const wxSize SliderControlSize (250, 35);
57

68
SettingsDialogPanel::SettingsDialogPanel (const std::wstring& name, wxDialog* parent) :
79
name (name),
@@ -28,16 +30,18 @@ class ModelViewPanel : public SettingsDialogPanel
2830
{
2931
ViewModeChoiceId = 1001,
3032
AxisModeChoiceId = 1002,
31-
AxisSizeSliderId = 1002
33+
GridSizeSpinId = 1002,
34+
GridCountSliderId = 1003
3235
};
3336

3437
ModelViewPanel (wxDialog* parent) :
3538
SettingsDialogPanel (L"Model View", parent),
36-
gridSizer (new wxFlexGridSizer (3, 2, 5, 20)),
39+
gridSizer (new wxFlexGridSizer (4, 2, 5, 20)),
3740
boxSizer (new wxBoxSizer (wxVERTICAL)),
3841
viewModeChoice (new wxChoice (panel, DialogIds::ViewModeChoiceId, wxDefaultPosition, ChoiceControlSize)),
3942
axisModeChoice (new wxChoice (panel, DialogIds::AxisModeChoiceId, wxDefaultPosition, ChoiceControlSize)),
40-
axisSizeSlider (new wxSlider (panel, DialogIds::AxisSizeSliderId, 10, 5, 50, wxDefaultPosition, SliderControlSize, wxSL_LABELS))
43+
gridSizeSpin (new wxSpinCtrlDouble (panel, DialogIds::GridSizeSpinId, L"", wxDefaultPosition, TextControlSize, wxSP_ARROW_KEYS, 0.1, 100.0, 0.1, 0.1)),
44+
gridCountSpin (new wxSpinCtrl (panel, DialogIds::GridSizeSpinId, L"", wxDefaultPosition, TextControlSize, wxSP_ARROW_KEYS, 1, 100, 1))
4145
{
4246
viewModeChoice->Append (L"Lines");
4347
viewModeChoice->Append (L"Polygons");
@@ -49,8 +53,10 @@ class ModelViewPanel : public SettingsDialogPanel
4953
gridSizer->Add (viewModeChoice, 1, wxEXPAND);
5054
gridSizer->Add (new wxStaticText (panel, wxID_ANY, L"Axis Mode"), 1, wxEXPAND | wxALIGN_CENTER_VERTICAL);
5155
gridSizer->Add (axisModeChoice, 1, wxEXPAND);
52-
gridSizer->Add (new wxStaticText (panel, wxID_ANY, L"Axis Size"), 1, wxEXPAND | wxALIGN_CENTER_VERTICAL);
53-
gridSizer->Add (axisSizeSlider, 1, wxEXPAND);
56+
gridSizer->Add (new wxStaticText (panel, wxID_ANY, L"Grid Size"), 1, wxEXPAND | wxALIGN_CENTER_VERTICAL);
57+
gridSizer->Add (gridSizeSpin, 1, wxEXPAND);
58+
gridSizer->Add (new wxStaticText (panel, wxID_ANY, L"Grid Count"), 1, wxEXPAND | wxALIGN_CENTER_VERTICAL);
59+
gridSizer->Add (gridCountSpin, 1, wxEXPAND);
5460

5561
boxSizer->Add (gridSizer, 1, wxEXPAND | wxALL, 5);
5662
panel->SetSizer (boxSizer);
@@ -70,7 +76,8 @@ class ModelViewPanel : public SettingsDialogPanel
7076
axisModeChoice->Select (1);
7177
}
7278

73-
axisSizeSlider->SetValue (userSettings.renderSettings.axisSize);
79+
gridSizeSpin->SetValue (userSettings.renderSettings.gridSize);
80+
gridCountSpin->SetValue (userSettings.renderSettings.gridCount);
7481
}
7582

7683
virtual void SaveToUserSettings (UserSettings& userSettings) const override
@@ -87,15 +94,17 @@ class ModelViewPanel : public SettingsDialogPanel
8794
userSettings.renderSettings.axisMode = AxisMode::Off;
8895
}
8996

90-
userSettings.renderSettings.axisSize = axisSizeSlider->GetValue ();
97+
userSettings.renderSettings.gridSize = gridSizeSpin->GetValue ();
98+
userSettings.renderSettings.gridCount = gridCountSpin->GetValue ();
9199
}
92100

93101
private:
94102
wxFlexGridSizer* gridSizer;
95103
wxBoxSizer* boxSizer;
96104
wxChoice* viewModeChoice;
97105
wxChoice* axisModeChoice;
98-
wxSlider* axisSizeSlider;
106+
wxSpinCtrlDouble* gridSizeSpin;
107+
wxSpinCtrl* gridCountSpin;
99108
};
100109

101110
wxPanel* SettingsDialogPanel::GetPanel ()

Sources/VisualScriptCAD/Application/UserSettings.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ static std::string GetXmlFilePath ()
2121

2222
static const char SettingsNodeName[] = "VisualScriptCADSettings";
2323
static const char RenderSettingsNodeName[] = "RenderSettings";
24-
static const char RenderAxisSizeNodeName[] = "AxisSize";
24+
static const char RenderGridSizeNodeName[] = "GridSize";
25+
static const char RenderGridCountNodeName[] = "GridCount";
2526
static const char ExportSettingsNodeName[] = "ExportSettings";
2627
static const char ImageSettingsNodeName[] = "ImageSettings";
2728
static const char ImageWidthNodeName[] = "ImageWidth";
@@ -51,15 +52,16 @@ static const XmlEnum<ExportSettings::FormatId> ExportFormatEnum ("ExportFormat",
5152
});
5253

5354
RenderSettings::RenderSettings () :
54-
RenderSettings (ViewMode::Polygons, AxisMode::On, 20)
55+
RenderSettings (ViewMode::Polygons, AxisMode::On, 1.0, 20)
5556
{
5657

5758
}
5859

59-
RenderSettings::RenderSettings (ViewMode viewMode, AxisMode axisMode, int axisSize) :
60+
RenderSettings::RenderSettings (ViewMode viewMode, AxisMode axisMode, double gridSize, int gridCount) :
6061
viewMode (viewMode),
6162
axisMode (axisMode),
62-
axisSize (axisSize)
63+
gridSize (gridSize),
64+
gridCount (gridCount)
6365
{
6466

6567
}
@@ -123,7 +125,8 @@ void UserSettings::Load ()
123125
if (renderSettingsNode != nullptr) {
124126
ViewModeEnum.Read (renderSettingsNode, renderSettings.viewMode);
125127
AxisModeEnum.Read (renderSettingsNode, renderSettings.axisMode);
126-
ReadIntegerNode (renderSettingsNode, RenderAxisSizeNodeName, renderSettings.axisSize);
128+
ReadDoubleNode (renderSettingsNode, RenderGridSizeNodeName, renderSettings.gridSize);
129+
ReadIntegerNode (renderSettingsNode, RenderGridCountNodeName, renderSettings.gridCount);
127130
}
128131

129132
const tinyxml2::XMLNode* exportSettingsNode = settingsNode->FirstChildElement (ExportSettingsNodeName);
@@ -163,7 +166,8 @@ void UserSettings::Save ()
163166
tinyxml2::XMLNode* renderSettingsNode = doc.NewElement (RenderSettingsNodeName);
164167
ViewModeEnum.Write (doc, renderSettingsNode, renderSettings.viewMode);
165168
AxisModeEnum.Write (doc, renderSettingsNode, renderSettings.axisMode);
166-
WriteIntegerNode (doc, renderSettingsNode, RenderAxisSizeNodeName, renderSettings.axisSize);
169+
WriteDoubleNode (doc, renderSettingsNode, RenderGridSizeNodeName, renderSettings.gridSize);
170+
WriteIntegerNode (doc, renderSettingsNode, RenderGridCountNodeName, renderSettings.gridCount);
167171
settingsNode->InsertEndChild (renderSettingsNode);
168172

169173
tinyxml2::XMLNode* exportSettingsNode = doc.NewElement (ExportSettingsNodeName);

Sources/VisualScriptCAD/Application/UserSettings.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@ class RenderSettings
2222
{
2323
public:
2424
RenderSettings ();
25-
RenderSettings (ViewMode viewMode, AxisMode axisMode, int axisSize);
25+
RenderSettings (ViewMode viewMode, AxisMode axisMode, double gridSize, int gridCount);
2626

2727
ViewMode viewMode;
2828
AxisMode axisMode;
29-
int axisSize;
29+
double gridSize;
30+
int gridCount;
3031
};
3132

3233
class ImageSettings

Sources/VisualScriptCAD/Application/XMLUtilities.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,21 @@ void WriteIntegerNode (tinyxml2::XMLDocument& doc, tinyxml2::XMLNode* parent, co
6464
WriteStringNode (doc, parent, nodeName, std::to_wstring (value));
6565
}
6666

67+
bool ReadDoubleNode (const tinyxml2::XMLNode* parent, const char* nodeName, double& value)
68+
{
69+
std::wstring nodeValue;
70+
if (!ReadStringNode (parent, nodeName, nodeValue)) {
71+
return false;
72+
}
73+
value = std::stod (nodeValue);
74+
return true;
75+
}
76+
77+
void WriteDoubleNode (tinyxml2::XMLDocument& doc, tinyxml2::XMLNode* parent, const char* nodeName, double value)
78+
{
79+
WriteStringNode (doc, parent, nodeName, std::to_wstring (value));
80+
}
81+
6782
bool ReadBooleanNode (const tinyxml2::XMLNode* parent, const char* nodeName, bool& value)
6883
{
6984
std::wstring nodeValue;

Sources/VisualScriptCAD/Application/XMLUtilities.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ void WriteStringNode (tinyxml2::XMLDocument& doc, tinyxml2::XMLNode* parent, c
1919
bool ReadIntegerNode (const tinyxml2::XMLNode* parent, const char* nodeName, int& value);
2020
void WriteIntegerNode (tinyxml2::XMLDocument& doc, tinyxml2::XMLNode* parent, const char* nodeName, int value);
2121

22+
bool ReadDoubleNode (const tinyxml2::XMLNode* parent, const char* nodeName, double& value);
23+
void WriteDoubleNode (tinyxml2::XMLDocument& doc, tinyxml2::XMLNode* parent, const char* nodeName, double value);
24+
2225
bool ReadBooleanNode (const tinyxml2::XMLNode* parent, const char* nodeName, bool& value);
2326
void WriteBooleanNode (tinyxml2::XMLDocument& doc, tinyxml2::XMLNode* parent, const char* nodeName, bool value);
2427

Sources/VisualScriptCAD/Renderer/ModelControl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ const RenderSettings& ModelControl::GetRenderSettings () const
133133
void ModelControl::SetRenderSettings (const RenderSettings& newSettings)
134134
{
135135
renderSceneSettings = newSettings;
136-
renderScene.InitAxisLines (renderSceneSettings.axisSize);
136+
renderScene.InitAxisLines (renderSceneSettings.gridSize, renderSceneSettings.gridCount);
137137
Refresh ();
138138
}
139139

Sources/VisualScriptCAD/Renderer/RenderScene.cpp

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "RenderScene.hpp"
22
#include "ShaderProgram.hpp"
33
#include "IncludeGLM.hpp"
4+
#include "Geometry.hpp"
45

56
static const char* lineVertexShaderSource = R"(
67
#version 330 core
@@ -485,7 +486,7 @@ RenderScene::RenderScene () :
485486
lineShader (-1),
486487
triangleShader (-1),
487488
model (),
488-
lineModel (),
489+
axisModel (),
489490
light (),
490491
camera (DefaultCamera)
491492
{
@@ -508,36 +509,38 @@ bool RenderScene::Init ()
508509
return false;
509510
}
510511

511-
InitAxisLines (0);
512+
InitAxisLines (0.0, 0);
512513

513514
glEnable (GL_DEPTH_TEST);
514515
glEnable (GL_BLEND);
515516
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
516517
return true;
517518
}
518519

519-
void RenderScene::InitAxisLines (int size)
520+
void RenderScene::InitAxisLines (double gridSize, int gridCount)
520521
{
521-
lineModel.Clear ();
522-
if (size == 0) {
522+
axisModel.Clear ();
523+
if (gridCount == 0 || !Geometry::IsGreater (gridSize, 0.0)) {
523524
return;
524525
}
525526

527+
double axisSize = gridSize * gridCount;
528+
526529
RenderLineGeometry mainAxisLines (RenderLineMaterial (glm::vec3 (0.5f, 0.5f, 0.5f)));
527-
mainAxisLines.AddLine (glm::vec3 (-size, 0.0f, 0.0f), glm::vec3 (size, 0.0f, 0.0f));
528-
mainAxisLines.AddLine (glm::vec3 (0.0f, -size, 0.0f), glm::vec3 (0.0f, size, 0.0f));
529-
mainAxisLines.AddLine (glm::vec3 (0.0f, 0.0f, -size), glm::vec3 (0.0f, 0.0f, size));
530-
lineModel.AddRenderLineGeometry (mainAxisLines);
530+
mainAxisLines.AddLine (glm::vec3 (-axisSize, 0.0f, 0.0f), glm::vec3 (axisSize, 0.0f, 0.0f));
531+
mainAxisLines.AddLine (glm::vec3 (0.0f, -axisSize, 0.0f), glm::vec3 (0.0f, axisSize, 0.0f));
532+
mainAxisLines.AddLine (glm::vec3 (0.0f, 0.0f, -axisSize), glm::vec3 (0.0f, 0.0f, axisSize));
533+
axisModel.AddRenderLineGeometry (mainAxisLines);
531534

532535
RenderLineGeometry secondaryAxisLines (RenderLineMaterial (glm::vec3 (0.8f, 0.8f, 0.8f)));
533-
for (int i = -size; i <= size; i++) {
536+
for (int i = -gridCount; i <= gridCount; i++) {
534537
if (i == 0) {
535538
continue;
536539
}
537-
secondaryAxisLines.AddLine (glm::vec3 (-size, i, 0.0f), glm::vec3 (size, i, 0.0f));
538-
secondaryAxisLines.AddLine (glm::vec3 (i, -size, 0.0f), glm::vec3 (i, size, 0.0f));
540+
secondaryAxisLines.AddLine (glm::vec3 (-axisSize, i * gridSize, 0.0f), glm::vec3 (axisSize, i * gridSize, 0.0f));
541+
secondaryAxisLines.AddLine (glm::vec3 (i * gridSize, -axisSize, 0.0f), glm::vec3 (i * gridSize, axisSize, 0.0f));
539542
}
540-
lineModel.AddRenderLineGeometry (secondaryAxisLines);
543+
axisModel.AddRenderLineGeometry (secondaryAxisLines);
541544
}
542545

543546
void RenderScene::Draw (int width, int height, const RenderSettings& settings) const
@@ -685,23 +688,21 @@ void RenderScene::DrawModel (int width, int height, ViewMode drawMode) const
685688

686689
void RenderScene::DrawLines (int width, int height, AxisMode axisMode) const
687690
{
688-
if (axisMode == AxisMode::Off) {
689-
return;
690-
}
691+
if (axisMode == AxisMode::On) {
692+
glUseProgram (lineShader);
691693

692-
glUseProgram (lineShader);
694+
glm::mat4 viewMatrix = camera.GetViewMatrix ();
695+
glm::mat4 projectionMatrix = camera.GetProjectionMatrix (width, height);
693696

694-
glm::mat4 viewMatrix = camera.GetViewMatrix ();
695-
glm::mat4 projectionMatrix = camera.GetProjectionMatrix (width, height);
697+
glUniformMatrix4fv (glGetUniformLocation (lineShader, "viewMatrix"), 1, GL_FALSE, glm::value_ptr (viewMatrix));
698+
glUniformMatrix4fv (glGetUniformLocation (lineShader, "projectionMatrix"), 1, GL_FALSE, glm::value_ptr (projectionMatrix));
699+
glUniformMatrix4fv (glGetUniformLocation (lineShader, "modelMatrix"), 1, GL_FALSE, glm::value_ptr (glm::mat4 (1.0f)));
696700

697-
glUniformMatrix4fv (glGetUniformLocation (lineShader, "viewMatrix"), 1, GL_FALSE, glm::value_ptr (viewMatrix));
698-
glUniformMatrix4fv (glGetUniformLocation (lineShader, "projectionMatrix"), 1, GL_FALSE, glm::value_ptr (projectionMatrix));
699-
glUniformMatrix4fv (glGetUniformLocation (lineShader, "modelMatrix"), 1, GL_FALSE, glm::value_ptr (glm::mat4 (1.0f)));
700-
701-
lineModel.EnumerateRenderLineGeometries ([&] (const RenderLineGeometry& lineGeometry) {
702-
const RenderLineMaterial& material = lineGeometry.GetMaterial ();
703-
glUniform3fv (glGetUniformLocation (lineShader, "materialColor"), 1, &material.color[0]);
704-
lineGeometry.SetupBuffers ();
705-
lineGeometry.DrawBuffers ();
706-
});
701+
axisModel.EnumerateRenderLineGeometries ([&] (const RenderLineGeometry& lineGeometry) {
702+
const RenderLineMaterial& material = lineGeometry.GetMaterial ();
703+
glUniform3fv (glGetUniformLocation (lineShader, "materialColor"), 1, &material.color[0]);
704+
lineGeometry.SetupBuffers ();
705+
lineGeometry.DrawBuffers ();
706+
});
707+
}
707708
}

Sources/VisualScriptCAD/Renderer/RenderScene.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ class RenderScene
192192
RenderScene ();
193193

194194
bool Init ();
195-
void InitAxisLines (int size);
195+
void InitAxisLines (double gridSize, int gridCount);
196196

197197
void Draw (int width, int height, const RenderSettings& settings) const;
198198
void DrawOffscreen (const RenderSettings& settings, RenderPixels& pixels) const;
@@ -212,7 +212,7 @@ class RenderScene
212212
int lineShader;
213213
int triangleShader;
214214
RenderModel model;
215-
RenderLineModel lineModel;
215+
RenderLineModel axisModel;
216216
RenderLight light;
217217
Modeler::Camera camera;
218218
};

0 commit comments

Comments
 (0)