Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 0 additions & 15 deletions src/CalcViewModel/GraphingCalculator/GraphingSettingsViewModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,21 +71,6 @@ void GraphingSettingsViewModel::InitRanges()
m_dontUpdateDisplayRange = false;
}

void GraphingSettingsViewModel::RefreshPosition()
{
if (HasError())
{
InitRanges();
}
else
{
if (m_Graph != nullptr)
{
m_Graph->SetDisplayRanges(m_XMinValue, m_XMaxValue, m_YMinValue, m_YMaxValue);
}
}
}

void GraphingSettingsViewModel::UpdateDisplayRange(bool XValuesModified)
{
if (m_Graph == nullptr || m_dontUpdateDisplayRange || HasError())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,6 @@ namespace CalculatorApp::ViewModel
RaisePropertyChanged(L"TrigModeRadians");
RaisePropertyChanged(L"TrigModeDegrees");
RaisePropertyChanged(L"TrigModeGradians");
RefreshPosition();
}
}
}
Expand All @@ -248,7 +247,6 @@ namespace CalculatorApp::ViewModel
RaisePropertyChanged(L"TrigModeDegrees");
RaisePropertyChanged(L"TrigModeRadians");
RaisePropertyChanged(L"TrigModeGradians");
RefreshPosition();
}
}
}
Expand All @@ -267,14 +265,12 @@ namespace CalculatorApp::ViewModel
RaisePropertyChanged(L"TrigModeGradians");
RaisePropertyChanged(L"TrigModeDegrees");
RaisePropertyChanged(L"TrigModeRadians");
RefreshPosition();
}
}
}

public:
void UpdateDisplayRange(bool XValuesModified);
void RefreshPosition();

public:
void SetGrapher(GraphControl::Grapher ^ grapher);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ void GraphingCalculator::OnEquationsVectorChanged(IObservableVector<EquationView
GraphingControl->Equations->Append(equationViewModel->GraphEquation);
}

GraphingControl->PlotGraph();
GraphingControl->PlotGraph(false);
}

void GraphingCalculator::OnTracePointChanged(Point newPoint)
Expand Down
51 changes: 33 additions & 18 deletions src/GraphControl/Control/Grapher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ namespace GraphControl
m_renderMain->BackgroundColor = GraphBackground;
}

TryUpdateGraph();
TryUpdateGraph(false);
}

void Grapher::OnEquationsPropertyChanged(EquationCollection ^ oldValue, EquationCollection ^ newValue)
Expand Down Expand Up @@ -157,7 +157,7 @@ namespace GraphControl
ref new EquationChangedEventHandler(this, &Grapher::OnEquationLineEnabledChanged);
}

PlotGraph();
PlotGraph(false);
}

void Grapher::OnEquationChanged(Equation ^ equation)
Expand All @@ -169,7 +169,7 @@ namespace GraphControl
equation->HasGraphError = false;
equation->IsValidated = false;

TryPlotGraph(shouldRetry);
TryPlotGraph(false, shouldRetry);
}

void Grapher::OnEquationStyleChanged(Equation ^)
Expand All @@ -193,7 +193,7 @@ namespace GraphControl
return;
}

PlotGraph();
PlotGraph(true);
}

KeyGraphFeaturesInfo ^ Grapher::AnalyzeEquation(Equation ^ equation)
Expand Down Expand Up @@ -223,14 +223,14 @@ namespace GraphControl
return KeyGraphFeaturesInfo::Create(CalculatorApp::AnalysisErrorType::AnalysisCouldNotBePerformed);
}

void Grapher::PlotGraph()
void Grapher::PlotGraph(bool keepCurrentView)
{
TryPlotGraph(false);
TryPlotGraph(keepCurrentView, false);
}

void Grapher::TryPlotGraph(bool shouldRetry)
void Grapher::TryPlotGraph(bool keepCurrentView, bool shouldRetry)
{
if (TryUpdateGraph())
if (TryUpdateGraph(keepCurrentView))
{
SetEquationsAsValid();
}
Expand All @@ -241,12 +241,12 @@ namespace GraphControl
// If we failed to plot the graph, try again after the bad equations are flagged.
if (shouldRetry)
{
TryUpdateGraph();
TryUpdateGraph(keepCurrentView);
}
}
}

bool Grapher::TryUpdateGraph()
bool Grapher::TryUpdateGraph(bool keepCurrentView)
{
optional<vector<shared_ptr<IEquation>>> initResult = nullopt;
bool successful = false;
Expand Down Expand Up @@ -289,8 +289,8 @@ namespace GraphControl

if (graphExpression = m_solver->ParseInput(request))
{
initResult = m_graph->TryInitialize(graphExpression.get());

initResult = TryInitializeGraph(keepCurrentView, graphExpression.get());
if (initResult != nullopt)
{
UpdateGraphOptions(m_graph->GetOptions(), validEqs);
Expand Down Expand Up @@ -318,8 +318,7 @@ namespace GraphControl
// Do not re-initialize the graph to empty if there are still valid equations graphed
if (!shouldKeepPreviousGraph)
{
initResult = m_graph->TryInitialize();

initResult = TryInitializeGraph(keepCurrentView, graphExpression.get());
if (initResult != nullopt)
{
UpdateGraphOptions(m_graph->GetOptions(), validEqs);
Expand Down Expand Up @@ -373,7 +372,7 @@ namespace GraphControl

shared_ptr<IGraph> Grapher::GetGraph(Equation ^ equation)
{
std::shared_ptr<Graphing::IGraph> graph = m_solver->CreateGrapher();
shared_ptr<Graphing::IGraph> graph = m_solver->CreateGrapher();

wstringstream ss{};
ss << s_getGraphOpeningTags;
Expand Down Expand Up @@ -487,7 +486,7 @@ namespace GraphControl
void Grapher::OnForceProportionalAxesPropertyChanged(bool /*oldValue*/, bool newValue)
{
m_calculatedForceProportional = newValue;
TryUpdateGraph();
TryUpdateGraph(false);
}

void Grapher::OnPointerEntered(PointerRoutedEventArgs ^ e)
Expand Down Expand Up @@ -646,14 +645,14 @@ namespace GraphControl
{
if (auto renderer = m_graph->GetRenderer())
{
std::shared_ptr<Graphing::IBitmap> BitmapOut;
shared_ptr<Graphing::IBitmap> BitmapOut;
bool hasSomeMissingDataOut = false;
HRESULT hr = E_FAIL;
hr = renderer->GetBitmap(BitmapOut, hasSomeMissingDataOut);
if (SUCCEEDED(hr))
{
// Get the raw date
std::vector<BYTE> byteVector = BitmapOut->GetData();
vector<BYTE> byteVector = BitmapOut->GetData();
auto arr = ref new Array<BYTE>(&byteVector[0], (unsigned int)byteVector.size());

// create a memory stream wrapper
Expand Down Expand Up @@ -889,3 +888,19 @@ void Grapher::OnGraphBackgroundPropertyChanged(Windows::UI::Color /*oldValue*/,
m_graph->GetOptions().SetBoxColor(color);
}
}

optional<vector<shared_ptr<Graphing::IEquation>>> Grapher::TryInitializeGraph(bool keepCurrentView, const IExpression* graphingExp)
{
if (keepCurrentView)
{
double xMin, xMax, yMin, yMax;
m_graph->GetRenderer()->GetDisplayRanges(xMin, xMax, yMin, yMax);
auto initResult = m_graph->TryInitialize(graphingExp);
m_graph->GetRenderer()->SetDisplayRanges(xMin, xMax, yMin, yMax);
return initResult;
}
else
{
return m_graph->TryInitialize(graphingExp);
}
}
16 changes: 11 additions & 5 deletions src/GraphControl/Control/Grapher.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,13 @@ public
event Windows::Foundation::EventHandler<Windows::Foundation::Collections::IMap<Platform::String ^, double> ^> ^ VariablesUpdated;
void SetVariable(Platform::String ^ variableName, double newValue);
Platform::String ^ ConvertToLinear(Platform::String ^ mmlString);
void PlotGraph();

/// <summary>
/// Draw the graph. Call this method if you add or modify an equation.
/// </summary>
/// <param name="keepCurrentView">Force the graph control to not pan or zoom to adapt the view.</param>
void PlotGraph(bool keepCurrentView);

GraphControl::KeyGraphFeaturesInfo ^ AnalyzeEquation(GraphControl::Equation ^ equation);

// We can't use the EvalTrigUnitMode enum directly in as the property type because it comes from another module which doesn't expose
Expand All @@ -116,7 +122,7 @@ public
if (value != (int)m_solver->EvalOptions().GetTrigUnitMode())
{
m_solver->EvalOptions().SetTrigUnitMode((Graphing::EvalTrigUnitMode)value);
PlotGraph();
PlotGraph(true);
}
}

Expand Down Expand Up @@ -265,8 +271,8 @@ public
void OnEquationChanged(Equation ^ equation);
void OnEquationStyleChanged(Equation ^ equation);
void OnEquationLineEnabledChanged(Equation ^ equation);
bool TryUpdateGraph();
void TryPlotGraph(bool shouldRetry);
bool TryUpdateGraph(bool keepCurrentView);
void TryPlotGraph(bool keepCurrentView, bool shouldRetry);
void UpdateGraphOptions(Graphing::IGraphingOptions& options, const std::vector<Equation ^>& validEqs);
std::vector<Equation ^> GetGraphableEquations();
void SetGraphArgs();
Expand All @@ -284,7 +290,7 @@ public

void SetEquationsAsValid();
void SetEquationErrors();

std::optional<std::vector<std::shared_ptr<Graphing::IEquation>>> TryInitializeGraph(bool keepCurrentView, _In_ const Graphing::IExpression* graphingExp = nullptr);
private:
DX::RenderMain ^ m_renderMain = nullptr;

Expand Down