Binding function tree

This commit is contained in:
Иван Ивашкин
2025-03-06 12:49:23 +05:00
parent 0829b9c57e
commit 943f80ad8d
16 changed files with 73 additions and 17 deletions

View File

@@ -177,6 +177,7 @@ namespace StructureHelper.Windows.MainGraph
Function = new FormulaFunction(isUser: true); Function = new FormulaFunction(isUser: true);
} }
Function.Name = Name; Function.Name = Name;
Function.FullName = Name;
Function.Description = Description; Function.Description = Description;
Function.IsUser = true; Function.IsUser = true;
(Function as FormulaFunction).Step = Step; (Function as FormulaFunction).Step = Step;

View File

@@ -141,6 +141,7 @@ namespace StructureHelper.Windows.MainGraph
Function = new TableFunction(isUser: true); Function = new TableFunction(isUser: true);
} }
Function.Name = Name; Function.Name = Name;
Function.FullName = Name;
Function.Description = Description; Function.Description = Description;
Function.IsUser = true; Function.IsUser = true;
(Function as TableFunction).Table = Table.OrderBy(x => x.X).ToList(); (Function as TableFunction).Table = Table.OrderBy(x => x.X).ToList();

View File

@@ -21,6 +21,7 @@
<RowDefinition Height="50"/> <RowDefinition Height="50"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TreeView Name="FunctionTreeView" <TreeView Name="FunctionTreeView"
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
Margin="5" Margin="5"

View File

@@ -24,8 +24,8 @@ namespace StructureHelper.Windows.TreeGraph
private LineSeries lineSeries; private LineSeries lineSeries;
private SeriesCollection seriesCollection; private SeriesCollection seriesCollection;
private List<string> labels; private List<string> labels;
readonly ObservableCollection<TreeViewItemViewModel> _tree; private ObservableCollection<TreeViewItemViewModel> _tree;
readonly TreeViewItemViewModel _root; private TreeViewItemViewModel _root;
readonly ICommand _searchCommand; readonly ICommand _searchCommand;
private RelayCommand _getYCommand; private RelayCommand _getYCommand;
private RelayCommand _scaleCommand; private RelayCommand _scaleCommand;
@@ -96,6 +96,11 @@ namespace StructureHelper.Windows.TreeGraph
public ObservableCollection<TreeViewItemViewModel> Tree public ObservableCollection<TreeViewItemViewModel> Tree
{ {
get => _tree; get => _tree;
set
{
_tree = value;
OnPropertyChanged(nameof(Tree));
}
} }
public GraphVisualProps VisualProps { get; } = new GraphVisualProps(); public GraphVisualProps VisualProps { get; } = new GraphVisualProps();
public ICommand GetYCommand public ICommand GetYCommand
@@ -129,8 +134,12 @@ namespace StructureHelper.Windows.TreeGraph
public TreeGraphViewModel(IOneVariableFunction rootFunction) public TreeGraphViewModel(IOneVariableFunction rootFunction)
{ {
RootFunction = rootFunction; RootFunction = rootFunction;
RunTreeView(rootFunction);
}
private void RunTreeView(IOneVariableFunction rootFunction)
{
_root = new TreeViewItemViewModel(rootFunction, this); _root = new TreeViewItemViewModel(rootFunction, this);
_tree = new ObservableCollection<TreeViewItemViewModel> Tree = new ObservableCollection<TreeViewItemViewModel>
( (
new ObservableCollection<TreeViewItemViewModel>() new ObservableCollection<TreeViewItemViewModel>()
{ {
@@ -189,6 +198,7 @@ namespace StructureHelper.Windows.TreeGraph
{ {
return; return;
} }
Save();
} }
private void Limit(object parameter) private void Limit(object parameter)
{ {
@@ -228,6 +238,7 @@ namespace StructureHelper.Windows.TreeGraph
{ {
return; return;
} }
Save();
} }
private void Delete() private void Delete()
{ {
@@ -242,6 +253,7 @@ namespace StructureHelper.Windows.TreeGraph
return; return;
} }
selectedTreeViewItemParent.Children.Remove(selectedTreeViewItem); selectedTreeViewItemParent.Children.Remove(selectedTreeViewItem);
Save();
} }
private void Rename(object parameter) private void Rename(object parameter)
{ {
@@ -262,6 +274,7 @@ namespace StructureHelper.Windows.TreeGraph
{ {
selectedTreeViewItem.Name = renameViewModel.FunctionName; selectedTreeViewItem.Name = renameViewModel.FunctionName;
} }
Save();
} }
private void NewTree() private void NewTree()
{ {
@@ -274,7 +287,8 @@ namespace StructureHelper.Windows.TreeGraph
treeGraph.DataContext = treeGraphVM; treeGraph.DataContext = treeGraphVM;
treeGraphVM.TreeGraphView_win = treeGraph; treeGraphVM.TreeGraphView_win = treeGraph;
treeGraph.ShowDialog(); treeGraph.ShowDialog();
//Сохранить поддерево Save();
RunTreeView(RootFunction);
} }
public void DrawGraph() public void DrawGraph()
{ {
@@ -297,13 +311,24 @@ namespace StructureHelper.Windows.TreeGraph
} }
public void Save() public void Save()
{ {
GetFunctionTree(Tree, RootFunction);
} }
private List<IOneVariableFunction> GetFunctionChildern(TreeViewItemViewModel item) private void GetFunctionTree(ObservableCollection<TreeViewItemViewModel> tree, IOneVariableFunction function)
{ {
return null; function.Functions.Clear();
foreach (TreeViewItemViewModel item in tree)
{
if (item.Function is null)
{
return;
}
function.Functions.Add(item.Function);
if (item.Children.Count > 0)
{
var newTree = item.Children;
GetFunctionTree(newTree, item.Function);
}
}
} }
} }
} }

View File

@@ -17,7 +17,7 @@ namespace StructureHelper.Windows.TreeGraph
readonly IOneVariableFunction _function; readonly IOneVariableFunction _function;
readonly TreeGraphViewModel _treeGraphViewModel; readonly TreeGraphViewModel _treeGraphViewModel;
bool _isExpanded; bool _isExpanded = true;
bool _isSelected; bool _isSelected;
public TreeViewItemViewModel(IOneVariableFunction function, TreeGraphViewModel treeGraphViewModel) : this(function, null, treeGraphViewModel) public TreeViewItemViewModel(IOneVariableFunction function, TreeGraphViewModel treeGraphViewModel) : this(function, null, treeGraphViewModel)

View File

@@ -21,6 +21,7 @@ namespace StructureHelperCommon.Infrastructures.Interfaces
public FunctionType Type { get; set; } public FunctionType Type { get; set; }
public FunctionPurpose FunctionPurpose { get; set; } public FunctionPurpose FunctionPurpose { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string FullName { get; set; }
public string Description { get; set; } public string Description { get; set; }
public List<GraphPoint> Table { get; set; } public List<GraphPoint> Table { get; set; }
public double MinArg { get; set; } public double MinArg { get; set; }

View File

@@ -22,6 +22,7 @@ namespace StructureHelperCommon.Infrastructures.Interfaces
public FunctionType Type { get; set; } public FunctionType Type { get; set; }
public FunctionPurpose FunctionPurpose { get; set; } public FunctionPurpose FunctionPurpose { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string FullName { get; set; }
public string Description { get; set; } public string Description { get; set; }
public double MinArg { get; set; } public double MinArg { get; set; }
public double MaxArg { get; set; } public double MaxArg { get; set; }

View File

@@ -99,6 +99,7 @@ namespace StructureHelperCommon.Infrastructures.Settings
new TableFunction() new TableFunction()
{ {
Name = "Not StressStrain", Name = "Not StressStrain",
FullName = "Not StressStrain",
FunctionPurpose = FunctionPurpose.FireProtection, FunctionPurpose = FunctionPurpose.FireProtection,
Table = new List<GraphPoint>() Table = new List<GraphPoint>()
{ {
@@ -115,6 +116,7 @@ namespace StructureHelperCommon.Infrastructures.Settings
new TableFunction() new TableFunction()
{ {
Name = "Табличная системная функция", Name = "Табличная системная функция",
FullName = "Табличная системная функция",
FunctionPurpose = FunctionPurpose.StressStrain, FunctionPurpose = FunctionPurpose.StressStrain,
Table = new List<GraphPoint>() Table = new List<GraphPoint>()
{ {
@@ -131,6 +133,7 @@ namespace StructureHelperCommon.Infrastructures.Settings
new FormulaFunction() new FormulaFunction()
{ {
Name = "Формульная системная функция", Name = "Формульная системная функция",
FullName = "Формульная системная функция",
FunctionPurpose = FunctionPurpose.StressStrain, FunctionPurpose = FunctionPurpose.StressStrain,
Formula = "x^2", Formula = "x^2",
Step = 100, Step = 100,

View File

@@ -17,6 +17,7 @@ namespace StructureHelperCommon.Models.Functions.Decorator
public LimXDecorator(IOneVariableFunction function, double leftBound, double rightBound) : base(function) public LimXDecorator(IOneVariableFunction function, double leftBound, double rightBound) : base(function)
{ {
Name = $"x\u2208[{leftBound};{rightBound}]"; Name = $"x\u2208[{leftBound};{rightBound}]";
FullName = $"{function.FullName}/{Name}";
this.leftBound = leftBound; this.leftBound = leftBound;
this.rightBound = rightBound; this.rightBound = rightBound;
} }

View File

@@ -16,6 +16,7 @@ namespace StructureHelperCommon.Models.Functions.Decorator
public LimYDecorator(IOneVariableFunction function, double downBound, double upBound) : base(function) public LimYDecorator(IOneVariableFunction function, double downBound, double upBound) : base(function)
{ {
Name = $"y\u2208[{downBound};{upBound}]"; Name = $"y\u2208[{downBound};{upBound}]";
FullName = $"{function.FullName}/{Name}";
this.downBound = downBound; this.downBound = downBound;
this.upBound = upBound; this.upBound = upBound;
} }

View File

@@ -16,6 +16,7 @@ namespace StructureHelperCommon.Models.Functions.Decorator
{ {
this.factor = factor; this.factor = factor;
Name = $"y=f({factor}x)"; Name = $"y=f({factor}x)";
FullName = $"{function.FullName}/{Name}";
} }
public override bool Check() public override bool Check()
{ {

View File

@@ -16,6 +16,7 @@ namespace StructureHelperCommon.Models.Functions.Decorator
{ {
this.factor = factor; this.factor = factor;
Name = $"y={factor}f(x)"; Name = $"y={factor}f(x)";
FullName = $"{function.FullName}/{Name}";
} }
public override bool Check() public override bool Check()
{ {

View File

@@ -30,6 +30,7 @@ namespace StructureHelperCommon.Models.Functions
public FunctionPurpose FunctionPurpose { get; set; } public FunctionPurpose FunctionPurpose { get; set; }
public string Group { get; set; } public string Group { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string FullName { get; set; }
public string Description { get ; set; } public string Description { get ; set; }
public int Step { get; set; } public int Step { get; set; }
public string Formula public string Formula
@@ -87,7 +88,8 @@ namespace StructureHelperCommon.Models.Functions
{ {
var formulaFunction = new FormulaFunction(); var formulaFunction = new FormulaFunction();
formulaFunction.Type = Type; formulaFunction.Type = Type;
formulaFunction.Name = $"{Name} {COPY}"; formulaFunction.Name = $"{Name} {COPY}";
formulaFunction.FullName = formulaFunction.Name;
formulaFunction.Description = Description; formulaFunction.Description = Description;
formulaFunction.Formula = Formula; formulaFunction.Formula = Formula;
formulaFunction.IsUser = true; formulaFunction.IsUser = true;

View File

@@ -27,6 +27,7 @@ namespace StructureHelperCommon.Models.Functions
public FunctionPurpose FunctionPurpose { get; set; } public FunctionPurpose FunctionPurpose { get; set; }
public string Group { get; set; } public string Group { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string FullName { get; set; }
public string Description { get; set; } public string Description { get; set; }
public List<GraphPoint> Table { get; set; } public List<GraphPoint> Table { get; set; }
public Guid Id => throw new NotImplementedException(); public Guid Id => throw new NotImplementedException();
@@ -62,6 +63,7 @@ namespace StructureHelperCommon.Models.Functions
var tableFunction = new TableFunction(); var tableFunction = new TableFunction();
tableFunction.Type = Type; tableFunction.Type = Type;
tableFunction.Name = $"{Name} {COPY}"; tableFunction.Name = $"{Name} {COPY}";
tableFunction.FullName = tableFunction.Name;
tableFunction.Description = Description; tableFunction.Description = Description;
var newTable = new List<GraphPoint>(); var newTable = new List<GraphPoint>();
Table.ForEach(x => newTable.Add(x.Clone() as GraphPoint)); Table.ForEach(x => newTable.Add(x.Clone() as GraphPoint));
@@ -71,7 +73,6 @@ namespace StructureHelperCommon.Models.Functions
tableFunction.FunctionPurpose = FunctionPurpose; tableFunction.FunctionPurpose = FunctionPurpose;
return tableFunction; return tableFunction;
} }
public double GetByX(double xValue) public double GetByX(double xValue)
{ {
double yValue = 0; double yValue = 0;

View File

@@ -1,4 +1,5 @@
using StructureHelperCommon.Infrastructures.Commands; using LiveCharts.Wpf;
using StructureHelperCommon.Infrastructures.Commands;
using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Infrastructures.Settings; using StructureHelperCommon.Infrastructures.Settings;
using StructureHelperCommon.Models.Functions; using StructureHelperCommon.Models.Functions;
@@ -27,7 +28,7 @@ namespace StructureHelperCommon.Windows
public string SPECIAL { get; } = "Special Limit State"; public string SPECIAL { get; } = "Special Limit State";
public string CREATE_MATERIAL { get; } = "Create Function Material"; public string CREATE_MATERIAL { get; } = "Create Function Material";
private const string ERROR_TEXT_1 = "Not all material states have functions "; private const string ERROR_TEXT_1 = "Not all material states have functions ";
public ObservableCollection<IOneVariableFunction> Functions { get; set; } public ObservableCollection<IOneVariableFunction> Functions { get; set; } = new ObservableCollection<IOneVariableFunction>();
public IOneVariableFunction Func_ST_ULS { get; set; } public IOneVariableFunction Func_ST_ULS { get; set; }
public IOneVariableFunction Func_ST_SLS { get; set; } public IOneVariableFunction Func_ST_SLS { get; set; }
public IOneVariableFunction Func_ST_Special { get; set; } public IOneVariableFunction Func_ST_Special { get; set; }
@@ -37,8 +38,23 @@ namespace StructureHelperCommon.Windows
public FunctionStorage FunctionStorage { get; set; } = new(); public FunctionStorage FunctionStorage { get; set; } = new();
public FunctionSelectionVM() public FunctionSelectionVM()
{ {
var listFunctions = ProgramSetting.Functions.Where(x => x.FunctionPurpose == Infrastructures.Enums.FunctionPurpose.StressStrain).ToList(); var stressStrainFunctions = new ObservableCollection<IOneVariableFunction>
Functions = new ObservableCollection<IOneVariableFunction>(); (
ProgramSetting.Functions
.Where(x => x.FunctionPurpose == Infrastructures.Enums.FunctionPurpose.StressStrain)
);
GetFunctionsFromTree(stressStrainFunctions);
}
private void GetFunctionsFromTree(ObservableCollection<IOneVariableFunction> stressStrainFunctions)
{
foreach (IOneVariableFunction func in stressStrainFunctions)
{
Functions.Add(func);
if (func.Functions.Count > 0)
{
GetFunctionsFromTree(func.Functions);
}
}
} }
private void CreateFunctionMaterial(object parameter) private void CreateFunctionMaterial(object parameter)
{ {

View File

@@ -33,7 +33,7 @@
</Style> </Style>
<Style x:Key="FuncComboBox" TargetType="ComboBox"> <Style x:Key="FuncComboBox" TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Functions}"/> <Setter Property="ItemsSource" Value="{Binding Functions}"/>
<Setter Property="DisplayMemberPath" Value="Name"/> <Setter Property="DisplayMemberPath" Value="FullName"/>
<Setter Property="Margin" Value="10"/> <Setter Property="Margin" Value="10"/>
</Style> </Style>
</Window.Resources> </Window.Resources>