Compare commits
3 Commits
PrimitiveP
...
Localizati
| Author | SHA1 | Date | |
|---|---|---|---|
| d8d20745e7 | |||
|
|
9562e56ffc | ||
| 971b5d6204 |
@@ -23,5 +23,5 @@
|
||||
<TextBlock Grid.Row="3" Grid.Column="1" Text="{Binding CenterY, Converter={StaticResource LengthConverter}}"/>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
|
||||
|
||||
</ResourceDictionary>
|
||||
@@ -9,11 +9,11 @@
|
||||
<RowDefinition Height="22"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="100"/>
|
||||
<ColumnDefinition Width="180"/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Row="0" Text="Width"/>
|
||||
<TextBlock Grid.Row="1" Text="Height"/>
|
||||
<TextBlock Grid.Row="0" Text="{DynamicResource Width}"/>
|
||||
<TextBlock Grid.Row="1" Text="{DynamicResource Height}"/>
|
||||
<TextBox Grid.Row="0" Grid.Column="1" Margin="1" Style="{StaticResource ValidatedError}" Text="{Binding Width, Converter={StaticResource LengthConverter}, ValidatesOnDataErrors=True}"/>
|
||||
<TextBox Grid.Row="1" Grid.Column="1" Margin="1" Text="{Binding Height, Converter={StaticResource LengthConverter}, ValidatesOnDataErrors=True}"/>
|
||||
</Grid>
|
||||
@@ -26,10 +26,10 @@
|
||||
<RowDefinition Height="22"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="100"/>
|
||||
<ColumnDefinition Width="160"/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Row="0" Text="Diameter"/>
|
||||
<TextBlock Grid.Row="0" Text="{DynamicResource Diameter}"/>
|
||||
<TextBox Grid.Row="0" Grid.Column="1" Margin="1" Style="{StaticResource ValidatedError}" Text="{Binding Diameter, Converter={StaticResource LengthConverter}, ValidatesOnDataErrors=True}"/>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
<ResourceDictionary
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||
|
||||
<system:String x:Key="Actions">Actions</system:String>
|
||||
<system:String x:Key="Geometry">Geometry</system:String>
|
||||
<system:String x:Key="Materials">Materials</system:String>
|
||||
<system:String x:Key="Show Materials">Show Materials</system:String>
|
||||
<system:String x:Key="Analisis">Analisis</system:String>
|
||||
<system:String x:Key="Analises">Analises</system:String>
|
||||
<system:String x:Key="Add Full Combination">Add Full Combination</system:String>
|
||||
<system:String x:Key="Add Factored Combination">Add Factored Combination</system:String>
|
||||
<system:String x:Key="Concrete">Concrete</system:String>
|
||||
<system:String x:Key="Reinforcement">Reinforcement</system:String>
|
||||
<system:String x:Key="Elastic">Elastic</system:String>
|
||||
<system:String x:Key="CarbonFiber">CarbonFiber</system:String>
|
||||
<system:String x:Key="GlassFiber">GlassFiber</system:String>
|
||||
<system:String x:Key="Rectangle">Rectangle</system:String>
|
||||
<system:String x:Key="Circle">Circle</system:String>
|
||||
<system:String x:Key="Rebar">Rebar</system:String>
|
||||
<system:String x:Key="Point">Point</system:String>
|
||||
<system:String x:Key="Run">Run</system:String>
|
||||
<system:String x:Key="Add">Add</system:String>
|
||||
<system:String x:Key="Edit">Edit</system:String>
|
||||
<system:String x:Key="Copy">Copy</system:String>
|
||||
<system:String x:Key="Copy To">Copy To</system:String>
|
||||
<system:String x:Key="Delete">Delete</system:String>
|
||||
<system:String x:Key="To Foreground">To Foreground</system:String>
|
||||
<system:String x:Key="To Background">To Background</system:String>
|
||||
<system:String x:Key="Add Force Calculator">Add Force Calculator</system:String>
|
||||
<system:String x:Key="Add Interaction Diagram Calculator">Add Interaction Diagram Calculator</system:String>
|
||||
<system:String x:Key="Add Rectangle Primitive">Add Rectangle Primitive</system:String>
|
||||
<system:String x:Key="Add Circle Primitive">Add Circle Primitive</system:String>
|
||||
<system:String x:Key="Add Rebar Primitive">Add Rebar Primitive</system:String>
|
||||
<system:String x:Key="Add Point Primitive">Add Point Primitive</system:String>
|
||||
<system:String x:Key="Add Rectangle RC Column">Add Rectangle RC Column</system:String>
|
||||
<system:String x:Key="Add Circle RC Column">Add Circle RC Column</system:String>
|
||||
<system:String x:Key="Add RC Beam">Add RC Beam</system:String>
|
||||
<system:String x:Key="Add RC Slab">Add RC Slab</system:String>
|
||||
<system:String x:Key="Add Concrete">Add Concrete</system:String>
|
||||
<system:String x:Key="Add Reinforcement Material">Add Reinforcement Material</system:String>
|
||||
<system:String x:Key="Add Elastic Material">Add Elastic Material</system:String>
|
||||
<system:String x:Key="Add Carbon Fiber Material">Add Carbon Fiber Material</system:String>
|
||||
<system:String x:Key="Add Glass Fiber Material">Add Glass Fiber Material</system:String>
|
||||
<system:String x:Key="Change Language">Change Language</system:String>
|
||||
<system:String x:Key="Visual Settings">Visual Settings</system:String>
|
||||
<system:String x:Key="RU_EN">EN</system:String>
|
||||
<system:String x:Key="RC Templates">RC Templates</system:String>
|
||||
<system:String x:Key="Base Primitives">Base Primitives</system:String>
|
||||
<system:String x:Key="Tools">Tools</system:String>
|
||||
<system:String x:Key="Grid size">Grid size: </system:String>
|
||||
<system:String x:Key="Number of primitives">Number of primitives: </system:String>
|
||||
<system:String x:Key="Full">Full</system:String>
|
||||
<system:String x:Key="Fact">Fact</system:String>
|
||||
<system:String x:Key="Run Calculations">Run Calculations</system:String>
|
||||
<system:String x:Key="Move All Primitives to Gravity Center">Move All Primitives to Gravity Center</system:String>
|
||||
<system:String x:Key="Combination By Factors">Combination By Factors</system:String>
|
||||
<system:String x:Key="Combination">Combination</system:String>
|
||||
<system:String x:Key="Templates">Templates</system:String>
|
||||
|
||||
<system:String x:Key="Grid properies">Grid properies</system:String>
|
||||
<system:String x:Key="Axis grid thickness">Axis grid thickness</system:String>
|
||||
<system:String x:Key="Grid line thickness">Grid line thickness</system:String>
|
||||
<system:String x:Key="Work plane width">Work plane width</system:String>
|
||||
<system:String x:Key="Work plane height">Work plane height</system:String>
|
||||
|
||||
<system:String x:Key="Reinforced rectangle template">Reinforced rectangle template</system:String>
|
||||
<system:String x:Key="Width">Width</system:String>
|
||||
<system:String x:Key="Height">Height</system:String>
|
||||
<system:String x:Key="Cover gap">Cover gap</system:String>
|
||||
<system:String x:Key="Top Diameter">Top Diameter</system:String>
|
||||
<system:String x:Key="Bottom Diameter">Bottom Diameter</system:String>
|
||||
<system:String x:Key="Width count">Width count</system:String>
|
||||
<system:String x:Key="Height count">Height count</system:String>
|
||||
|
||||
<system:String x:Key="Diameter">Diameter</system:String>
|
||||
<system:String x:Key="Rebar Diameter">Rebar Diameter</system:String>
|
||||
<system:String x:Key="Rebar Count">Rebar Count</system:String>
|
||||
<system:String x:Key="Reinforced circle template">Reinforced circle template</system:String>
|
||||
|
||||
|
||||
|
||||
<!-- All StringResources Goes Here -->
|
||||
</ResourceDictionary>
|
||||
@@ -0,0 +1,83 @@
|
||||
<ResourceDictionary
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||
|
||||
<system:String x:Key="Actions">Усилия</system:String>
|
||||
<system:String x:Key="Geometry">Геометрия</system:String>
|
||||
<system:String x:Key="Materials">Материалы</system:String>
|
||||
<system:String x:Key="Show Materials">Показать материалы</system:String>
|
||||
<system:String x:Key="Analisis">Расчет</system:String>
|
||||
<system:String x:Key="Analises">Расчеты</system:String>
|
||||
<system:String x:Key="Add Full Combination">Создать комбинацию явно</system:String>
|
||||
<system:String x:Key="Add Factored Combination">Создать комбинацию по коэффициентам</system:String>
|
||||
<system:String x:Key="Concrete">Бетон</system:String>
|
||||
<system:String x:Key="Reinforcement">Арматура</system:String>
|
||||
<system:String x:Key="Elastic">Упругий</system:String>
|
||||
<system:String x:Key="CarbonFiber">Углеволокно</system:String>
|
||||
<system:String x:Key="GlassFiber">Стекловолокно</system:String>
|
||||
<system:String x:Key="Rectangle">Прямоугольник</system:String>
|
||||
<system:String x:Key="Circle">Окружность</system:String>
|
||||
<system:String x:Key="Rebar">Стержень</system:String>
|
||||
<system:String x:Key="Point">Точка</system:String>
|
||||
<system:String x:Key="Run">Выполнить</system:String>
|
||||
<system:String x:Key="Add">Создать</system:String>
|
||||
<system:String x:Key="Edit">Изменить</system:String>
|
||||
<system:String x:Key="Copy">Копировать</system:String>
|
||||
<system:String x:Key="Copy To">Копировать в</system:String>
|
||||
<system:String x:Key="Delete">Удалить</system:String>
|
||||
<system:String x:Key="To Foreground">На передний план</system:String>
|
||||
<system:String x:Key="To Background">На задний план</system:String>
|
||||
<system:String x:Key="Add Force Calculator">Создать расчет по усилиям</system:String>
|
||||
<system:String x:Key="Add Interaction Diagram Calculator">Создать расчет области прочности</system:String>
|
||||
<system:String x:Key="Add Rectangle Primitive">Создать прямоугольник</system:String>
|
||||
<system:String x:Key="Add Circle Primitive">Создать окружность</system:String>
|
||||
<system:String x:Key="Add Rebar Primitive">Создать арматурный стержень</system:String>
|
||||
<system:String x:Key="Add Point Primitive">Создать точку</system:String>
|
||||
<system:String x:Key="Add Rectangle RC Column">Создать прямоугольную ЖБ колонну</system:String>
|
||||
<system:String x:Key="Add Circle RC Column">Создать круглую ЖБ колонну</system:String>
|
||||
<system:String x:Key="Add RC Beam">Создать ЖБ балку</system:String>
|
||||
<system:String x:Key="Add RC Slab">Создать ЖБ плиту</system:String>
|
||||
<system:String x:Key="Add Concrete">Создать бетон</system:String>
|
||||
<system:String x:Key="Add Reinforcement Material">Создать материал армирования</system:String>
|
||||
<system:String x:Key="Add Elastic Material">Создать упругий материал</system:String>
|
||||
<system:String x:Key="Add Carbon Fiber Material">Создать углеволокно</system:String>
|
||||
<system:String x:Key="Add Glass Fiber Material">Создать стекловолокно</system:String>
|
||||
<system:String x:Key="Change Language">Смена языка</system:String>
|
||||
<system:String x:Key="Visual Settings">Настройки изображения</system:String>
|
||||
<system:String x:Key="RU_EN">RU</system:String>
|
||||
<system:String x:Key="RC Templates">ЖБ шаблоны</system:String>
|
||||
<system:String x:Key="Base Primitives">Базовые примитивы</system:String>
|
||||
<system:String x:Key="Tools">Инструменты</system:String>
|
||||
<system:String x:Key="Grid size">Шаг сетки: </system:String>
|
||||
<system:String x:Key="Number of primitives">Кол-во примитивов: </system:String>
|
||||
<system:String x:Key="Full">Явно</system:String>
|
||||
<system:String x:Key="Fact">Коэффициент</system:String>
|
||||
<system:String x:Key="Run Calculations">Выполнить расчеты</system:String>
|
||||
<system:String x:Key="Move All Primitives to Gravity Center">Переместить все примитивы в центр тяжести</system:String>
|
||||
<system:String x:Key="Combination By Factors">Комбинация по коэффициентам</system:String>
|
||||
<system:String x:Key="Combination">Комбинация</system:String>
|
||||
<system:String x:Key="Templates">Шаблоны</system:String>
|
||||
|
||||
<system:String x:Key="Grid properies">Свойства сетки</system:String>
|
||||
<system:String x:Key="Axis grid thickness">Толщина координатных осей</system:String>
|
||||
<system:String x:Key="Grid line thickness">Толщина линий сетки</system:String>
|
||||
<system:String x:Key="Work plane width">Ширина рабочей плоскости</system:String>
|
||||
<system:String x:Key="Work plane height">Высота рабочей плоскости</system:String>
|
||||
|
||||
<system:String x:Key="Reinforced rectangle template">Шаблон армирования прямоугольника</system:String>
|
||||
<system:String x:Key="Width">Ширина</system:String>
|
||||
<system:String x:Key="Height">Высота</system:String>
|
||||
<system:String x:Key="Cover gap">Защитный слой</system:String>
|
||||
<system:String x:Key="Top Diameter">Диаметр верхней арматуры</system:String>
|
||||
<system:String x:Key="Bottom Diameter">Диаметр нижней арматуры</system:String>
|
||||
<system:String x:Key="Width count">Число стержней по ширине</system:String>
|
||||
<system:String x:Key="Height count">Число стержней по высоте</system:String>
|
||||
|
||||
<system:String x:Key="Diameter">Диаметр окужности</system:String>
|
||||
<system:String x:Key="Rebar Diameter">Диаметр арматуры</system:String>
|
||||
<system:String x:Key="Rebar Count">Число стержней арматуры</system:String>
|
||||
<system:String x:Key="Reinforced circle template">Шаблон армирования окружности</system:String>
|
||||
|
||||
<!-- All StringResources Goes Here -->
|
||||
</ResourceDictionary>
|
||||
@@ -74,6 +74,12 @@
|
||||
<Page Update="Infrastructure\UI\Resources\Materials.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Update="Infrastructure\UI\Resources\Strings.en-US.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Update="Infrastructure\UI\Resources\Strings.ru-RU.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Update="Windows\Arrays\ArrayView.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
|
||||
@@ -27,73 +27,73 @@
|
||||
</DataTemplate>
|
||||
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
|
||||
<ContextMenu x:Key="EditCopyDelete">
|
||||
<MenuItem Header="Edit" Command="{Binding Edit}">
|
||||
<MenuItem Header="{DynamicResource Edit}" Command="{Binding Edit}">
|
||||
<MenuItem.Icon>
|
||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/Edit.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Copy" Command="{Binding Copy}">
|
||||
<MenuItem Header="{DynamicResource Copy}" Command="{Binding Copy}">
|
||||
<MenuItem.Icon>
|
||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/Copy.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Delete" Command="{Binding Delete}">
|
||||
<MenuItem Header="{DynamicResource Delete}" Command="{Binding Delete}">
|
||||
<MenuItem.Icon>
|
||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/Delete.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
<ContextMenu x:Key="PrimitiveCRUD">
|
||||
<MenuItem Header="Edit" Command="{Binding Edit}">
|
||||
<MenuItem Header="{DynamicResource Edit}" Command="{Binding Edit}">
|
||||
<MenuItem.Icon>
|
||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/Edit.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Copy" Command="{Binding Copy}">
|
||||
<MenuItem Header="{DynamicResource Copy}" Command="{Binding Copy}">
|
||||
<MenuItem.Icon>
|
||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/Copy.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Copy To" Command="{Binding CopyTo}">
|
||||
<MenuItem Header="{DynamicResource Copy To}" Command="{Binding CopyTo}">
|
||||
<MenuItem.Icon>
|
||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/Copy.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Delete" Command="{Binding Delete}">
|
||||
<MenuItem Header="{DynamicResource Delete}" Command="{Binding Delete}">
|
||||
<MenuItem.Icon>
|
||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/Delete.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<Separator/>
|
||||
<MenuItem Header="To Foreground" Command="{Binding SetToFront}">
|
||||
<MenuItem Header="{DynamicResource To Foreground}" Command="{Binding SetToFront}">
|
||||
<MenuItem.Icon>
|
||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/ToForeground.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="To Background" Command="{Binding SetToBack}">
|
||||
<MenuItem Header="{DynamicResource To Background}" Command="{Binding SetToBack}">
|
||||
<MenuItem.Icon>
|
||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/ToBackground.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
<ContextMenu x:Key="AnalisesCRUD">
|
||||
<MenuItem Header="Run" Command="{Binding Run}">
|
||||
<MenuItem Header="{DynamicResource Run}" Command="{Binding Run}">
|
||||
<MenuItem.Icon>
|
||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/Run.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<Separator/>
|
||||
<MenuItem Header="Edit" Command="{Binding Edit}">
|
||||
<MenuItem Header="{DynamicResource Edit}" Command="{Binding Edit}">
|
||||
<MenuItem.Icon>
|
||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/Edit.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Copy" Command="{Binding Copy}">
|
||||
<MenuItem Header="{DynamicResource Copy}" Command="{Binding Copy}">
|
||||
<MenuItem.Icon>
|
||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/Copy.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Delete" Command="{Binding Delete}">
|
||||
<MenuItem Header="{DynamicResource Delete}" Command="{Binding Delete}">
|
||||
<MenuItem.Icon>
|
||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/Delete.png" />
|
||||
</MenuItem.Icon>
|
||||
@@ -136,26 +136,26 @@
|
||||
<Button Style="{StaticResource ToolButton}"
|
||||
Command="{Binding Add}"
|
||||
CommandParameter="{x:Static enums:ActionType.ForceCombination}"
|
||||
Content="Full" ToolTip="Add Full Combination"/>
|
||||
Content="{DynamicResource Full}" ToolTip="{DynamicResource Add Full Combination}"/>
|
||||
<Button Style="{StaticResource ToolButton}"
|
||||
Command="{Binding Add}"
|
||||
CommandParameter="{x:Static enums:ActionType.ForceCombinationByFactor}"
|
||||
Content="Fact" ToolTip="Add Factored Combination"/>
|
||||
Content="{DynamicResource Fact}" ToolTip="{DynamicResource Add Factored Combination}"/>
|
||||
</ToolBar>
|
||||
<ToolBar DataContext="{Binding MaterialsLogic}" ToolTip="Materials">
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Concrete}">
|
||||
<ToolBar DataContext="{Binding MaterialsLogic}" ToolTip="{DynamicResource Materials}">
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Concrete}" ToolTip="{DynamicResource Add Concrete}">
|
||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/ConMaterial32.png"/>
|
||||
</Button>
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Reinforcement}" ToolTip="Add Reinforcement Material">
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Reinforcement}" ToolTip="{DynamicResource Add Reinforcement Material}">
|
||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/RFMaterial32.png"/>
|
||||
</Button>
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Elastic}" ToolTip="Add Elastic Material">
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Elastic}" ToolTip="{DynamicResource Add Elastic Material}">
|
||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/ElasticMaterial32.png"/>
|
||||
</Button>
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.CarbonFiber}" ToolTip="Add Carbon Fiber Material">
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.CarbonFiber}" ToolTip="{DynamicResource Add Carbon Fiber Material}">
|
||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/СarbonMaterial32.png"/>
|
||||
</Button>
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.GlassFiber}" ToolTip="Add Glass Fiber Material">
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.GlassFiber}" ToolTip="{DynamicResource Add Glass Fiber Material}">
|
||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/GlassMaterial32.png"/>
|
||||
</Button>
|
||||
<Button Command="{Binding EditMaterialsCommand}" ToolTip="Show Materials">
|
||||
@@ -163,48 +163,50 @@
|
||||
</Button>
|
||||
</ToolBar>
|
||||
<ToolBar ToolTip="Base Primitives" DataContext="{Binding PrimitiveLogic}">
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Rectangle}" ToolTip="Add Rectangle Primitive">
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Rectangle}" ToolTip="{DynamicResource Add Rectangle Primitive}">
|
||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/Rectangle32.png"/>
|
||||
</Button>
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Circle}" ToolTip="Add Circle Primitive">
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Circle}" ToolTip="{DynamicResource Add Circle Primitive}">
|
||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/Circle32.png"/>
|
||||
</Button>
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Reinforcement}" ToolTip="Add Rebar Primitive">
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Reinforcement}" ToolTip="{DynamicResource Add Rebar Primitive}">
|
||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/Rebar32.png"/>
|
||||
</Button>
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Point}" ToolTip="Add Point Primitive">
|
||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Point}" ToolTip="{DynamicResource Add Point Primitive}">
|
||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/Point32.png"/>
|
||||
</Button>
|
||||
</ToolBar>
|
||||
<ToolBar ToolTip="RC Templates">
|
||||
<Button Command="{Binding AddColumnCase}" ToolTip="Add Rectangle RC Column">
|
||||
<Button Command="{Binding AddColumnCase}" ToolTip="{DynamicResource Add Rectangle RC Column}">
|
||||
<Image Width="32" Height="32" Source="/Windows/MainWindow/RectangleColumn32.png"/>
|
||||
</Button>
|
||||
<Button Command="{Binding AddRCCircleCase}" ToolTip="Add Circle RC Column">
|
||||
<Button Command="{Binding AddRCCircleCase}" ToolTip="{DynamicResource Add Circle RC Column}">
|
||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/CircleColumn32.png"/>
|
||||
</Button>
|
||||
<Button Command="{Binding AddBeamCase}" ToolTip="Add RC Beam">
|
||||
<Button Command="{Binding AddBeamCase}" ToolTip="{DynamicResource Add RC Beam}">
|
||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/Beam32.png"/>
|
||||
</Button>
|
||||
<Button Command="{Binding AddSlabCase}" ToolTip="Add RC Slab">
|
||||
<Button Command="{Binding AddSlabCase}" ToolTip="{DynamicResource Add RC Slab}">
|
||||
<Image Width="32" Height="32" Source="/Windows/MainWindow/Slab32.png"/>
|
||||
</Button>
|
||||
</ToolBar>
|
||||
<ToolBar ToolTip="Analises" DataContext="{Binding CalculatorsLogic}">
|
||||
<Button Command="{Binding Add}" ToolTip="Add Force Calculator">
|
||||
<ToolBar ToolTip="{DynamicResource Analises}" DataContext="{Binding CalculatorsLogic}">
|
||||
<Button Command="{Binding Add}" ToolTip="{DynamicResource Add Force Calculator}">
|
||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/Calculator32.png"/>
|
||||
</Button>
|
||||
<Button Command="{Binding Run}" ToolTip="Run Calculations">
|
||||
<Button Command="{Binding Run}" ToolTip="{DynamicResource Run Calculations}">
|
||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/Analysis32.png"/>
|
||||
</Button>
|
||||
</ToolBar>
|
||||
<ToolBar ToolTip="Tools">
|
||||
<Button Command="{Binding MovePrimitiveToGravityCenterCommand}" ToolTip="Move All Primitives to Gravity Center">
|
||||
<ToolBar ToolTip="{DynamicResource Tools}">
|
||||
<Button Command="{Binding MovePrimitiveToGravityCenterCommand}" ToolTip="{DynamicResource Move All Primitives to Gravity Center}">
|
||||
<Image Width="32" Height="32" Source="/Windows/MainWindow/MovePrimitivesToCenter.png"/>
|
||||
</Button>
|
||||
<Button Command="{Binding ShowVisualProperty}" ToolTip="Visual Settings">
|
||||
<Button Command="{Binding ShowVisualProperty}" ToolTip="{DynamicResource Visual Settings}">
|
||||
<Image Width="32" Height="32" Source="/Windows/MainWindow/Tools_Settings.png"/>
|
||||
</Button>
|
||||
<Button Command="{Binding ChangeLanguage}" ToolTip="{DynamicResource Change Language}" Content="{DynamicResource RU_EN}">
|
||||
</Button>
|
||||
</ToolBar>
|
||||
</ToolBarTray>
|
||||
<Grid>
|
||||
@@ -222,12 +224,12 @@
|
||||
</Grid.RowDefinitions>
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel>
|
||||
<Expander Header="Actions" MinWidth="20" DataContext="{Binding CombinationsLogic}">
|
||||
<Expander Header="{DynamicResource Actions}" MinWidth="20" DataContext="{Binding CombinationsLogic}">
|
||||
<Expander.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Add">
|
||||
<Button Content="Combination" Command="{Binding Add}" CommandParameter="{x:Static enums:ActionType.ForceCombination}"/>
|
||||
<Button Content="Combination By Factors" Command="{Binding Add}" CommandParameter="{x:Static enums:ActionType.ForceCombinationByFactor}"/>
|
||||
<MenuItem Header="{DynamicResource Add}">
|
||||
<Button Content="{DynamicResource Combination}" Command="{Binding Add}" CommandParameter="{x:Static enums:ActionType.ForceCombination}"/>
|
||||
<Button Content="{DynamicResource Combination By Factors}" Command="{Binding Add}" CommandParameter="{x:Static enums:ActionType.ForceCombinationByFactor}"/>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Expander.ContextMenu>
|
||||
@@ -245,38 +247,38 @@
|
||||
<Expander.Header>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/Materials32.png"/>
|
||||
<TextBlock Text="Materials" Margin="5,0,0,0"/>
|
||||
<TextBlock Text="{DynamicResource Materials}" Margin="5,0,0,0"/>
|
||||
</StackPanel>
|
||||
</Expander.Header>
|
||||
<Expander.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Materials" Command="{Binding EditMaterialsCommand}">
|
||||
<MenuItem Header="{DynamicResource Materials}" Command="{Binding EditMaterialsCommand}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/Materials32.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Add">
|
||||
<MenuItem Header="Concrete" Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Concrete}">
|
||||
<MenuItem Header="{DynamicResource Add}">
|
||||
<MenuItem Header="{DynamicResource Concrete}" Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Concrete}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/ConMaterial32.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Reinforcement" Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Reinforcement}">
|
||||
<MenuItem Header="{DynamicResource Reinforcement}" Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Reinforcement}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/RFMaterial32.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Elastic" Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Elastic}">
|
||||
<MenuItem Header="{DynamicResource Elastic}" Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Elastic}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/ElasticMaterial32.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="CarbonFiber" Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.CarbonFiber}">
|
||||
<MenuItem Header="{DynamicResource CarbonFiber}" Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.CarbonFiber}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/СarbonMaterial32.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="GlassFiber" Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.GlassFiber}">
|
||||
<MenuItem Header="{DynamicResource GlassFiber}" Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.GlassFiber}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/GlassMaterial32.png" />
|
||||
</MenuItem.Icon>
|
||||
@@ -289,26 +291,26 @@
|
||||
ItemTemplate="{StaticResource ColoredItemTemplate}"
|
||||
ContextMenu="{StaticResource EditCopyDelete}"/>
|
||||
</Expander>
|
||||
<Expander Header="Geometry" MinWidth="20">
|
||||
<Expander Header="{DynamicResource Geometry}" MinWidth="20">
|
||||
<Expander.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Add" DataContext="{Binding PrimitiveLogic}">
|
||||
<MenuItem Header="Rectangle" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Rectangle}">
|
||||
<MenuItem Header="{DynamicResource Add}" DataContext="{Binding PrimitiveLogic}">
|
||||
<MenuItem Header="{DynamicResource Rectangle}" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Rectangle}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/Rectangle32.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Circle" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Circle}">
|
||||
<MenuItem Header="{DynamicResource Circle}" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Circle}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/Circle32.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Rebar" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Reinforcement}">
|
||||
<MenuItem Header="{DynamicResource Rebar}" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Reinforcement}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/Rebar32.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Point" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Point}">
|
||||
<MenuItem Header="{DynamicResource Point}" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Point}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/Point32.png" />
|
||||
</MenuItem.Icon>
|
||||
@@ -325,12 +327,12 @@
|
||||
<Expander.Header>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/Analysis32.png" />
|
||||
<TextBlock Text="Analisis" Margin="5,0,0,0"/>
|
||||
<TextBlock Text="{DynamicResource Analisis}" Margin="5,0,0,0"/>
|
||||
</StackPanel>
|
||||
</Expander.Header>
|
||||
<Expander.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Add" Command="{Binding Add}" CommandParameter="{x:Static enums:CalculatorTypes.ForceCalculator}">
|
||||
<MenuItem Header="{DynamicResource Add}" Command="{Binding Add}" CommandParameter="{x:Static enums:CalculatorTypes.ForceCalculator}">
|
||||
<MenuItem Header="Add Force Calculator" Command="{Binding Add}" CommandParameter="{x:Static enums:CalculatorTypes.ForceCalculator}">
|
||||
<MenuItem.Icon>
|
||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/Calculator32.png" />
|
||||
@@ -366,45 +368,45 @@
|
||||
<Canvas Name="WorkPlane" ClipToBounds="True" Width="{Binding VisualProperty.WorkPlainWidth}" Height="{Binding VisualProperty.WorkPlainHeight}">
|
||||
<Canvas.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Add" DataContext="{Binding PrimitiveLogic}">
|
||||
<MenuItem Header="Rectangle" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Rectangle}">
|
||||
<MenuItem Header="{DynamicResource Add}" DataContext="{Binding PrimitiveLogic}">
|
||||
<MenuItem Header="{DynamicResource Rectangle}" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Rectangle}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/Rectangle32.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Circle" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Circle}">
|
||||
<MenuItem Header="{DynamicResource Circle}" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Circle}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/Circle32.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Rebar" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Reinforcement}">
|
||||
<MenuItem Header="{DynamicResource Rebar}" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Reinforcement}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/Rebar32.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Point" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Point}">
|
||||
<MenuItem Header="{DynamicResource Point}" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Point}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/Point.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Templates" DataContext="{Binding}">
|
||||
<MenuItem Header="Add Rectangle RC Column" Command="{Binding AddColumnCase}">
|
||||
<MenuItem Header="{DynamicResource Templates}" DataContext="{Binding}">
|
||||
<MenuItem Header="{DynamicResource Add Rectangle RC Column}" Command="{Binding AddColumnCase}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/RectangleColumn32.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Add Circle RC Column" Command="{Binding AddRCCircleCase}">
|
||||
<MenuItem Header="{DynamicResource Add Circle RC Column}" Command="{Binding AddRCCircleCase}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/CircleColumn32.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Add RC Beam" Command="{Binding AddBeamCase}">
|
||||
<MenuItem Header="{DynamicResource Add RC Beam}" Command="{Binding AddBeamCase}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/Beam32.png" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Add RC slab" Command="{Binding AddSlabCase}">
|
||||
<MenuItem Header="{DynamicResource Add RC Slab}" Command="{Binding AddSlabCase}">
|
||||
<MenuItem.Icon>
|
||||
<Image Style="{StaticResource ButtonImage16}" Source="/Windows/MainWindow/Slab32.png" />
|
||||
</MenuItem.Icon>
|
||||
@@ -471,14 +473,14 @@
|
||||
</StatusBarItem>
|
||||
<StatusBarItem>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="Number of primitives: "/>
|
||||
<TextBlock Text="{Binding PrimitiveLogic.PrimitivesCount}"/>
|
||||
<TextBlock Text="{DynamicResource Number of primitives}"/>
|
||||
<TextBlock Margin="5,0,0,0" Text="{Binding PrimitiveLogic.PrimitivesCount}"/>
|
||||
</StackPanel>
|
||||
</StatusBarItem>
|
||||
<StatusBarItem>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="Grid size: "/>
|
||||
<TextBlock Text="{Binding GridSize, Converter={StaticResource LengthConverter}}"/>
|
||||
<TextBlock Text="{DynamicResource Grid size}"/>
|
||||
<TextBlock Margin="5,0,0,0" Text="{Binding GridSize, Converter={StaticResource LengthConverter}}"/>
|
||||
</StackPanel>
|
||||
</StatusBarItem>
|
||||
</StatusBar>
|
||||
|
||||
@@ -1,29 +1,36 @@
|
||||
using System.Windows;
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
using StructureHelper.Infrastructure.UI.DataContexts;
|
||||
using StructureHelper.Services;
|
||||
using StructureHelper.Services.Primitives;
|
||||
|
||||
namespace StructureHelper.Windows.MainWindow
|
||||
{
|
||||
public partial class CrossSectionView : Window
|
||||
{
|
||||
private CrossSectionViewModel viewModel;
|
||||
public IPrimitiveRepository PrimitiveRepository { get; }
|
||||
public partial class CrossSectionView : Window
|
||||
{
|
||||
private CrossSectionViewModel viewModel;
|
||||
public IPrimitiveRepository PrimitiveRepository { get; }
|
||||
|
||||
public CrossSectionView(IPrimitiveRepository primitiveRepository, CrossSectionViewModel viewModel)
|
||||
{
|
||||
PrimitiveRepository = primitiveRepository;
|
||||
this.viewModel = viewModel;
|
||||
DataContext = this.viewModel;
|
||||
InitializeComponent();
|
||||
}
|
||||
public CrossSectionView(IPrimitiveRepository primitiveRepository, CrossSectionViewModel viewModel)
|
||||
{
|
||||
PrimitiveRepository = primitiveRepository;
|
||||
this.viewModel = viewModel;
|
||||
DataContext = this.viewModel;
|
||||
viewModel.MV = this;
|
||||
ResourceDictionary dict = new ResourceDictionary();
|
||||
dict.Source = new Uri("..\\Infrastructure\\UI\\Resources\\Strings.en-US.xaml",
|
||||
UriKind.Relative);
|
||||
this.Resources.MergedDictionaries.Add(dict);
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void ContentPresenter_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
|
||||
{
|
||||
var contentPresenter = sender as ContentPresenter;
|
||||
var item = contentPresenter?.Content as PrimitiveBase;
|
||||
viewModel.PrimitiveLogic.SelectedItem = item;
|
||||
}
|
||||
}
|
||||
private void ContentPresenter_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
|
||||
{
|
||||
var contentPresenter = sender as ContentPresenter;
|
||||
var item = contentPresenter?.Content as PrimitiveBase;
|
||||
viewModel.PrimitiveLogic.SelectedItem = item;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using LoaderCalculator.Logics.Geometry;
|
||||
|
||||
using StructureHelper.Infrastructure;
|
||||
using StructureHelper.Infrastructure.UI.DataContexts;
|
||||
using StructureHelper.Models.Materials;
|
||||
@@ -9,12 +10,15 @@ using StructureHelper.Windows.ViewModels;
|
||||
using StructureHelper.Windows.ViewModels.Forces;
|
||||
using StructureHelper.Windows.ViewModels.Materials;
|
||||
using StructureHelper.Windows.ViewModels.NdmCrossSections;
|
||||
|
||||
using StructureHelperCommon.Infrastructures.Enums;
|
||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||
|
||||
using StructureHelperLogics.Models.CrossSections;
|
||||
using StructureHelperLogics.Models.Templates.CrossSections.RCs;
|
||||
using StructureHelperLogics.Models.Templates.RCs;
|
||||
using StructureHelperLogics.Services.NdmPrimitives;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
@@ -25,375 +29,428 @@ using System.Windows.Input;
|
||||
|
||||
namespace StructureHelper.Windows.MainWindow
|
||||
{
|
||||
public class CrossSectionViewModel : ViewModelBase
|
||||
{
|
||||
private ICrossSection section;
|
||||
private ICrossSectionRepository repository => section.SectionRepository;
|
||||
private readonly double scaleRate = 1.1d;
|
||||
public class CrossSectionViewModel : ViewModelBase
|
||||
{
|
||||
private ICrossSection section;
|
||||
private ICrossSectionRepository repository => section.SectionRepository;
|
||||
private readonly double scaleRate = 1.1d;
|
||||
|
||||
public CrossSectionVisualPropertyVM VisualProperty { get; private set; }
|
||||
public CrossSectionVisualPropertyVM VisualProperty { get; private set; }
|
||||
|
||||
|
||||
public PrimitiveBase SelectedPrimitive { get; set; }
|
||||
public PrimitiveBase SelectedPrimitive { get; set; }
|
||||
|
||||
public AnalysisVewModelLogic CalculatorsLogic { get; private set; }
|
||||
public ActionsViewModel CombinationsLogic { get; }
|
||||
public MaterialsViewModel MaterialsLogic { get; }
|
||||
public PrimitiveViewModelLogic PrimitiveLogic { get; }
|
||||
public HelpLogic HelpLogic => new HelpLogic();
|
||||
public AnalysisVewModelLogic CalculatorsLogic { get; private set; }
|
||||
public ActionsViewModel CombinationsLogic { get; }
|
||||
public MaterialsViewModel MaterialsLogic { get; }
|
||||
public PrimitiveViewModelLogic PrimitiveLogic { get; }
|
||||
public HelpLogic HelpLogic => new HelpLogic();
|
||||
|
||||
private CrossSectionModel Model { get; }
|
||||
private CrossSectionModel Model { get; }
|
||||
|
||||
private double panelX, panelY, scrollPanelX, scrollPanelY;
|
||||
private double panelX, panelY, scrollPanelX, scrollPanelY;
|
||||
|
||||
public double PanelX
|
||||
{
|
||||
get => panelX;
|
||||
set => OnPropertyChanged(value, ref panelX);
|
||||
}
|
||||
public double PanelY
|
||||
{
|
||||
get => panelY;
|
||||
set => OnPropertyChanged(value, ref panelY);
|
||||
}
|
||||
public double ScrollPanelX
|
||||
{
|
||||
get => scrollPanelX;
|
||||
set => OnPropertyChanged(value, ref scrollPanelX);
|
||||
}
|
||||
public double ScrollPanelY
|
||||
{
|
||||
get => scrollPanelY;
|
||||
set => OnPropertyChanged(value, ref scrollPanelY);
|
||||
}
|
||||
public double PanelX
|
||||
{
|
||||
get => panelX;
|
||||
set => OnPropertyChanged(value, ref panelX);
|
||||
}
|
||||
public double PanelY
|
||||
{
|
||||
get => panelY;
|
||||
set => OnPropertyChanged(value, ref panelY);
|
||||
}
|
||||
public double ScrollPanelX
|
||||
{
|
||||
get => scrollPanelX;
|
||||
set => OnPropertyChanged(value, ref scrollPanelX);
|
||||
}
|
||||
public double ScrollPanelY
|
||||
{
|
||||
get => scrollPanelY;
|
||||
set => OnPropertyChanged(value, ref scrollPanelY);
|
||||
}
|
||||
|
||||
private double scaleValue;
|
||||
private double scaleValue;
|
||||
|
||||
public double ScaleValue
|
||||
{
|
||||
get => Math.Round(scaleValue);
|
||||
set
|
||||
public double ScaleValue
|
||||
{
|
||||
get => Math.Round(scaleValue);
|
||||
set
|
||||
{
|
||||
OnPropertyChanged(value, ref scaleValue);
|
||||
OnPropertyChanged(nameof(AxisLineThickness));
|
||||
OnPropertyChanged(nameof(GridLineThickness));
|
||||
}
|
||||
}
|
||||
|
||||
public double AxisLineThickness
|
||||
{
|
||||
get => VisualProperty.AxisLineThickness / scaleValue;
|
||||
}
|
||||
|
||||
public double GridLineThickness
|
||||
{
|
||||
get => VisualProperty.GridLineThickness / scaleValue;
|
||||
}
|
||||
|
||||
public string CanvasViewportSize
|
||||
{
|
||||
get
|
||||
{
|
||||
string s = VisualProperty.GridSize.ToString();
|
||||
s = s.Replace(',', '.');
|
||||
return $"0,0,{s},{s}";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public double GridSize => VisualProperty.GridSize;
|
||||
|
||||
public ObservableCollection<IHeadMaterial> HeadMaterials
|
||||
{
|
||||
get
|
||||
{
|
||||
var collection = new ObservableCollection<IHeadMaterial>();
|
||||
foreach (var obj in Model.Section.SectionRepository.HeadMaterials)
|
||||
{
|
||||
OnPropertyChanged(value, ref scaleValue);
|
||||
OnPropertyChanged(nameof(AxisLineThickness));
|
||||
OnPropertyChanged(nameof(GridLineThickness));
|
||||
collection.Add(obj);
|
||||
}
|
||||
}
|
||||
return collection;
|
||||
}
|
||||
}
|
||||
|
||||
public double AxisLineThickness
|
||||
{
|
||||
get => VisualProperty.AxisLineThickness / scaleValue;
|
||||
}
|
||||
/// <summary>
|
||||
/// Right edge of work plane, coordinate X
|
||||
/// </summary>
|
||||
public double RightLimitX => VisualProperty.WorkPlainWidth;
|
||||
/// <summary>
|
||||
/// Bottom edge of work plane Y
|
||||
/// </summary>
|
||||
public double BottomLimitY => VisualProperty.WorkPlainHeight;
|
||||
/// <summary>
|
||||
/// Middle of coordinate X
|
||||
/// </summary>
|
||||
public double MiddleLimitX => VisualProperty.WorkPlainWidth / 2d;
|
||||
/// <summary>
|
||||
/// Middle of coordinate Y
|
||||
/// </summary>
|
||||
public double MiddleLimitY => VisualProperty.WorkPlainHeight / 2d;
|
||||
|
||||
public double GridLineThickness
|
||||
{
|
||||
get => VisualProperty.GridLineThickness / scaleValue;
|
||||
}
|
||||
private int langID = 0;
|
||||
public int LangID { get => langID; set { langID = value; OnPropertyChanged(); } }
|
||||
public RelayCommand ChangeLanguage
|
||||
{
|
||||
get
|
||||
{
|
||||
return changeLanguage ?? (changeLanguage = new RelayCommand(obj => { ChangeLang(); }));
|
||||
}
|
||||
}
|
||||
|
||||
public string CanvasViewportSize
|
||||
{
|
||||
get
|
||||
public void ChangeLang()
|
||||
{
|
||||
if (LangID == 0)
|
||||
{
|
||||
LangID = 1;
|
||||
SetLanguageDictionary(LangID);
|
||||
}
|
||||
else
|
||||
{
|
||||
LangID = 0;
|
||||
SetLanguageDictionary(LangID);
|
||||
}
|
||||
}
|
||||
|
||||
internal ResourceDictionary dict = new ResourceDictionary();
|
||||
// Загрузка файлов ресурсов для выбранного языка
|
||||
private void SetLanguageDictionary(int local)
|
||||
{
|
||||
switch (local)
|
||||
{
|
||||
case 0:
|
||||
dict.Source = new Uri("..\\Infrastructure\\UI\\Resources\\Strings.en-US.xaml",
|
||||
UriKind.Relative);
|
||||
break;
|
||||
case 1:
|
||||
dict.Source = new Uri("..\\Infrastructure\\UI\\Resources\\Strings.ru-RU.xaml",
|
||||
UriKind.Relative);
|
||||
break;
|
||||
}
|
||||
MV.Resources.MergedDictionaries.Add(dict);
|
||||
}
|
||||
|
||||
internal CrossSectionView MV;
|
||||
|
||||
public ICommand Calculate { get; }
|
||||
public ICommand EditCalculationPropertyCommand { get; }
|
||||
public ICommand EditHeadMaterialsCommand { get; }
|
||||
public ICommand AddRCCircleCase
|
||||
{
|
||||
get
|
||||
{
|
||||
return new RelayCommand(o =>
|
||||
{
|
||||
string s = VisualProperty.GridSize.ToString();
|
||||
s = s.Replace(',', '.');
|
||||
return $"0,0,{s},{s}";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public double GridSize => VisualProperty.GridSize;
|
||||
|
||||
public ObservableCollection<IHeadMaterial> HeadMaterials
|
||||
{
|
||||
get
|
||||
{
|
||||
var collection = new ObservableCollection<IHeadMaterial>();
|
||||
foreach (var obj in Model.Section.SectionRepository.HeadMaterials)
|
||||
PrimitiveLogic.AddItems(GetRCCirclePrimitives());
|
||||
MaterialsLogic.Refresh();
|
||||
});
|
||||
}
|
||||
}
|
||||
public ICommand AddBeamCase { get; }
|
||||
public ICommand AddColumnCase { get; }
|
||||
public ICommand AddSlabCase { get; }
|
||||
public ICommand LeftButtonDown { get; }
|
||||
public ICommand LeftButtonUp { get; }
|
||||
public ICommand MovePrimitiveToGravityCenterCommand { get; }
|
||||
public ICommand PreviewMouseMove { get; }
|
||||
public ICommand ClearSelection { get; }
|
||||
public ICommand OpenMaterialCatalog { get; }
|
||||
public ICommand OpenMaterialCatalogWithSelection { get; }
|
||||
public ICommand OpenUnitsSystemSettings { get; }
|
||||
public ICommand SetColor { get; }
|
||||
public ICommand SetInFrontOfAll { get; }
|
||||
public ICommand SetInBackOfAll { get; }
|
||||
public ICommand ScaleCanvasDown { get; }
|
||||
public ICommand ScaleCanvasUp { get; }
|
||||
public ICommand SetPopupCanBeClosedTrue { get; }
|
||||
public ICommand SetPopupCanBeClosedFalse { get; }
|
||||
public RelayCommand ShowVisualProperty
|
||||
{
|
||||
get
|
||||
{
|
||||
return showVisualProperty ??
|
||||
(showVisualProperty = new RelayCommand(o =>
|
||||
{
|
||||
collection.Add(obj);
|
||||
}
|
||||
return collection;
|
||||
}
|
||||
}
|
||||
var wnd = new VisualPropertyView(VisualProperty);
|
||||
SetLanguageDictionary(langID);
|
||||
wnd.Resources.MergedDictionaries.Add(dict);
|
||||
wnd.ShowDialog();
|
||||
OnPropertyChanged(nameof(AxisLineThickness));
|
||||
OnPropertyChanged(nameof(CanvasViewportSize));
|
||||
OnPropertyChanged(nameof(GridSize));
|
||||
OnPropertyChanged(nameof(RightLimitX));
|
||||
OnPropertyChanged(nameof(BottomLimitY));
|
||||
OnPropertyChanged(nameof(MiddleLimitX));
|
||||
OnPropertyChanged(nameof(MiddleLimitY));
|
||||
PrimitiveLogic.WorkPlaneWidth = VisualProperty.WorkPlainWidth;
|
||||
PrimitiveLogic.WorkPlaneHeight = VisualProperty.WorkPlainHeight;
|
||||
PrimitiveLogic.Refresh();
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Right edge of work plane, coordinate X
|
||||
/// </summary>
|
||||
public double RightLimitX => VisualProperty.WorkPlainWidth;
|
||||
/// <summary>
|
||||
/// Bottom edge of work plane Y
|
||||
/// </summary>
|
||||
public double BottomLimitY => VisualProperty.WorkPlainHeight;
|
||||
/// <summary>
|
||||
/// Middle of coordinate X
|
||||
/// </summary>
|
||||
public double MiddleLimitX => VisualProperty.WorkPlainWidth / 2d;
|
||||
/// <summary>
|
||||
/// Middle of coordinate Y
|
||||
/// </summary>
|
||||
public double MiddleLimitY => VisualProperty.WorkPlainHeight / 2d;
|
||||
|
||||
public ICommand Calculate { get; }
|
||||
public ICommand EditCalculationPropertyCommand { get; }
|
||||
public ICommand EditHeadMaterialsCommand { get; }
|
||||
public ICommand AddRCCircleCase
|
||||
{
|
||||
get
|
||||
{
|
||||
return new RelayCommand(o =>
|
||||
public RelayCommand SelectPrimitiveCommand
|
||||
{
|
||||
get
|
||||
{
|
||||
return selectPrimitive ??
|
||||
(selectPrimitive = new RelayCommand(obj =>
|
||||
{
|
||||
PrimitiveLogic.AddItems(GetRCCirclePrimitives());
|
||||
MaterialsLogic.Refresh();
|
||||
});
|
||||
if (obj is PrimitiveBase)
|
||||
{
|
||||
SelectedPrimitive = obj as PrimitiveBase;
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
private double delta = 0.0005;
|
||||
private RelayCommand showVisualProperty;
|
||||
private RelayCommand selectPrimitive;
|
||||
private RelayCommand changeLanguage;
|
||||
|
||||
public CrossSectionViewModel(CrossSectionModel model)
|
||||
{
|
||||
VisualProperty = new CrossSectionVisualPropertyVM();
|
||||
Model = model;
|
||||
section = model.Section;
|
||||
CombinationsLogic = new ActionsViewModel(repository);
|
||||
MaterialsLogic = new MaterialsViewModel(repository);
|
||||
MaterialsLogic.AfterItemsEdit += afterMaterialEdit;
|
||||
CalculatorsLogic = new AnalysisVewModelLogic(repository);
|
||||
PrimitiveLogic = new PrimitiveViewModelLogic(section)
|
||||
{
|
||||
WorkPlaneWidth = VisualProperty.WorkPlainWidth,
|
||||
WorkPlaneHeight = VisualProperty.WorkPlainHeight
|
||||
};
|
||||
scaleValue = 500d;
|
||||
|
||||
LeftButtonUp = new RelayCommand(o =>
|
||||
{
|
||||
if (o is RectangleViewPrimitive rect) rect.BorderCaptured = false;
|
||||
});
|
||||
LeftButtonDown = new RelayCommand(o =>
|
||||
{
|
||||
if (o is RectangleViewPrimitive rect) rect.BorderCaptured = true;
|
||||
});
|
||||
PreviewMouseMove = new RelayCommand(o =>
|
||||
{
|
||||
if (o is RectangleViewPrimitive rect && rect.BorderCaptured && !rect.ElementLock)
|
||||
{
|
||||
if (rect.PrimitiveWidth % 10d < delta || rect.PrimitiveWidth % 10d >= delta)
|
||||
rect.PrimitiveWidth = Math.Round(PanelX / 10d) * 10d - rect.PrimitiveLeft + 10d;
|
||||
else
|
||||
rect.PrimitiveWidth = PanelX - rect.PrimitiveLeft + 10d;
|
||||
|
||||
if (rect.PrimitiveHeight % 10d < delta || rect.PrimitiveHeight % 10d >= delta)
|
||||
rect.PrimitiveHeight = Math.Round(PanelY / 10d) * 10d - rect.PrimitiveTop + 10d;
|
||||
else
|
||||
rect.PrimitiveHeight = PanelY - rect.PrimitiveTop + 10d;
|
||||
}
|
||||
}
|
||||
public ICommand AddBeamCase { get; }
|
||||
public ICommand AddColumnCase { get; }
|
||||
public ICommand AddSlabCase { get; }
|
||||
public ICommand LeftButtonDown { get; }
|
||||
public ICommand LeftButtonUp { get; }
|
||||
public ICommand MovePrimitiveToGravityCenterCommand { get; }
|
||||
public ICommand PreviewMouseMove { get; }
|
||||
public ICommand ClearSelection { get; }
|
||||
public ICommand OpenMaterialCatalog { get; }
|
||||
public ICommand OpenMaterialCatalogWithSelection { get; }
|
||||
public ICommand OpenUnitsSystemSettings { get; }
|
||||
public ICommand SetColor { get; }
|
||||
public ICommand SetInFrontOfAll { get; }
|
||||
public ICommand SetInBackOfAll { get; }
|
||||
public ICommand ScaleCanvasDown { get; }
|
||||
public ICommand ScaleCanvasUp { get; }
|
||||
public ICommand SetPopupCanBeClosedTrue { get; }
|
||||
public ICommand SetPopupCanBeClosedFalse { get; }
|
||||
public RelayCommand ShowVisualProperty
|
||||
{
|
||||
get
|
||||
{
|
||||
return showVisualProperty ??
|
||||
(showVisualProperty = new RelayCommand(o=>
|
||||
{
|
||||
var wnd = new VisualPropertyView(VisualProperty);
|
||||
wnd.ShowDialog();
|
||||
OnPropertyChanged(nameof(AxisLineThickness));
|
||||
OnPropertyChanged(nameof(CanvasViewportSize));
|
||||
OnPropertyChanged(nameof(GridSize));
|
||||
OnPropertyChanged(nameof(RightLimitX));
|
||||
OnPropertyChanged(nameof(BottomLimitY));
|
||||
OnPropertyChanged(nameof(MiddleLimitX));
|
||||
OnPropertyChanged(nameof(MiddleLimitY));
|
||||
PrimitiveLogic.WorkPlaneWidth = VisualProperty.WorkPlainWidth;
|
||||
PrimitiveLogic.WorkPlaneHeight = VisualProperty.WorkPlainHeight;
|
||||
PrimitiveLogic.Refresh();
|
||||
}));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
public RelayCommand SelectPrimitiveCommand
|
||||
{
|
||||
get
|
||||
{
|
||||
return selectPrimitive ??
|
||||
(selectPrimitive = new RelayCommand(obj=>
|
||||
{
|
||||
if (obj is PrimitiveBase)
|
||||
{
|
||||
SelectedPrimitive = obj as PrimitiveBase;
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
ScaleCanvasDown = new RelayCommand(o =>
|
||||
{
|
||||
ScrollPanelX = PanelX;
|
||||
ScrollPanelY = PanelY;
|
||||
ScaleValue *= scaleRate;
|
||||
});
|
||||
|
||||
private double delta = 0.0005;
|
||||
private RelayCommand showVisualProperty;
|
||||
private RelayCommand selectPrimitive;
|
||||
ScaleCanvasUp = new RelayCommand(o =>
|
||||
{
|
||||
ScrollPanelX = PanelX;
|
||||
ScrollPanelY = PanelY;
|
||||
ScaleValue /= scaleRate;
|
||||
});
|
||||
|
||||
public CrossSectionViewModel(CrossSectionModel model)
|
||||
{
|
||||
VisualProperty = new CrossSectionVisualPropertyVM();
|
||||
Model = model;
|
||||
section = model.Section;
|
||||
CombinationsLogic = new ActionsViewModel(repository);
|
||||
MaterialsLogic = new MaterialsViewModel(repository);
|
||||
MaterialsLogic.AfterItemsEdit += afterMaterialEdit;
|
||||
CalculatorsLogic = new AnalysisVewModelLogic(repository);
|
||||
PrimitiveLogic = new PrimitiveViewModelLogic(section)
|
||||
{
|
||||
WorkPlaneWidth = VisualProperty.WorkPlainWidth,
|
||||
WorkPlaneHeight = VisualProperty.WorkPlainHeight
|
||||
};
|
||||
scaleValue = 500d;
|
||||
AddBeamCase = new RelayCommand(o =>
|
||||
{
|
||||
PrimitiveLogic.AddItems(GetBeamCasePrimitives());
|
||||
MaterialsLogic.Refresh();
|
||||
});
|
||||
|
||||
LeftButtonUp = new RelayCommand(o =>
|
||||
{
|
||||
if (o is RectangleViewPrimitive rect) rect.BorderCaptured = false;
|
||||
});
|
||||
LeftButtonDown = new RelayCommand(o =>
|
||||
{
|
||||
if (o is RectangleViewPrimitive rect) rect.BorderCaptured = true;
|
||||
});
|
||||
PreviewMouseMove = new RelayCommand(o =>
|
||||
{
|
||||
if (o is RectangleViewPrimitive rect && rect.BorderCaptured && !rect.ElementLock)
|
||||
{
|
||||
if (rect.PrimitiveWidth % 10d < delta || rect.PrimitiveWidth % 10d >= delta)
|
||||
rect.PrimitiveWidth = Math.Round(PanelX / 10d) * 10d - rect.PrimitiveLeft + 10d;
|
||||
else
|
||||
rect.PrimitiveWidth = PanelX - rect.PrimitiveLeft + 10d;
|
||||
AddColumnCase = new RelayCommand(o =>
|
||||
{
|
||||
PrimitiveLogic.AddItems(GetColumnCasePrimitives());
|
||||
MaterialsLogic.Refresh();
|
||||
});
|
||||
|
||||
if (rect.PrimitiveHeight % 10d < delta || rect.PrimitiveHeight % 10d >= delta)
|
||||
rect.PrimitiveHeight = Math.Round(PanelY / 10d) * 10d - rect.PrimitiveTop + 10d;
|
||||
else
|
||||
rect.PrimitiveHeight = PanelY - rect.PrimitiveTop + 10d;
|
||||
}
|
||||
});
|
||||
AddSlabCase = new RelayCommand(o =>
|
||||
{
|
||||
PrimitiveLogic.AddItems(GetSlabCasePrimitives());
|
||||
MaterialsLogic.Refresh();
|
||||
});
|
||||
|
||||
ScaleCanvasDown = new RelayCommand(o =>
|
||||
{
|
||||
ScrollPanelX = PanelX;
|
||||
ScrollPanelY = PanelY;
|
||||
ScaleValue *= scaleRate;
|
||||
});
|
||||
|
||||
ScaleCanvasUp = new RelayCommand(o =>
|
||||
{
|
||||
ScrollPanelX = PanelX;
|
||||
ScrollPanelY = PanelY;
|
||||
ScaleValue /= scaleRate;
|
||||
});
|
||||
|
||||
AddBeamCase = new RelayCommand(o =>
|
||||
{
|
||||
PrimitiveLogic.AddItems(GetBeamCasePrimitives());
|
||||
MaterialsLogic.Refresh();
|
||||
});
|
||||
|
||||
AddColumnCase = new RelayCommand(o =>
|
||||
{
|
||||
PrimitiveLogic.AddItems(GetColumnCasePrimitives());
|
||||
MaterialsLogic.Refresh();
|
||||
});
|
||||
|
||||
AddSlabCase = new RelayCommand(o =>
|
||||
{
|
||||
PrimitiveLogic.AddItems(GetSlabCasePrimitives());
|
||||
MaterialsLogic.Refresh();
|
||||
});
|
||||
|
||||
MovePrimitiveToGravityCenterCommand = new RelayCommand(o =>
|
||||
{
|
||||
if (CheckMaterials() == false) { return;}
|
||||
var ndms = NdmPrimitivesService.GetNdms(repository.Primitives, LimitStates.SLS, CalcTerms.ShortTerm);
|
||||
var center = GeometryOperations.GetGravityCenter(ndms);
|
||||
foreach (var item in PrimitiveLogic.Items)
|
||||
{
|
||||
item.CenterX -= center.Cx;
|
||||
item.CenterY -= center.Cy;
|
||||
}
|
||||
},
|
||||
o => repository.Primitives.Count() > 0
|
||||
);
|
||||
|
||||
SetPopupCanBeClosedTrue = new RelayCommand(o =>
|
||||
{
|
||||
if (!(o is PrimitiveBase primitive)) return;
|
||||
primitive.PopupCanBeClosed = true;
|
||||
});
|
||||
|
||||
SetPopupCanBeClosedFalse = new RelayCommand(o =>
|
||||
{
|
||||
if (!(o is PrimitiveBase primitive)) return;
|
||||
primitive.PopupCanBeClosed = false;
|
||||
});
|
||||
}
|
||||
|
||||
private void afterMaterialEdit(SelectItemVM<IHeadMaterial> sender, CRUDVMEventArgs e)
|
||||
{
|
||||
foreach (var primitive in PrimitiveLogic.Items)
|
||||
{
|
||||
primitive.RefreshColor();
|
||||
}
|
||||
}
|
||||
|
||||
private bool CheckMaterials()
|
||||
{
|
||||
MovePrimitiveToGravityCenterCommand = new RelayCommand(o =>
|
||||
{
|
||||
if (CheckMaterials() == false) { return; }
|
||||
var ndms = NdmPrimitivesService.GetNdms(repository.Primitives, LimitStates.SLS, CalcTerms.ShortTerm);
|
||||
var center = GeometryOperations.GetGravityCenter(ndms);
|
||||
foreach (var item in PrimitiveLogic.Items)
|
||||
{
|
||||
if (item.HeadMaterial == null)
|
||||
{
|
||||
System.Windows.Forms.MessageBox.Show($"Primitive {item.Name} does not has material", "Check data for analisys", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||
return false;
|
||||
}
|
||||
item.CenterX -= center.Cx;
|
||||
item.CenterY -= center.Cy;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
private IEnumerable<PrimitiveBase> GetRCCirclePrimitives()
|
||||
{
|
||||
var template = new CircleTemplate();
|
||||
return GetCasePrimitives(template);
|
||||
}
|
||||
private IEnumerable<PrimitiveBase> GetBeamCasePrimitives()
|
||||
{
|
||||
var template = new RectangleBeamTemplate();
|
||||
return GetCasePrimitives(template);
|
||||
}
|
||||
private IEnumerable<PrimitiveBase> GetColumnCasePrimitives()
|
||||
{
|
||||
var template = new RectangleBeamTemplate(0.5d, 0.5d) { CoverGap = 0.05, WidthCount = 3, HeightCount = 3, TopDiameter = 0.025d, BottomDiameter = 0.025d };
|
||||
return GetCasePrimitives(template);
|
||||
}
|
||||
private IEnumerable<PrimitiveBase> GetSlabCasePrimitives()
|
||||
{
|
||||
var template = new RectangleBeamTemplate(1d, 0.2d) { CoverGap = 0.04, WidthCount = 5, HeightCount = 2, TopDiameter = 0.012d, BottomDiameter = 0.012d };
|
||||
return GetCasePrimitives(template);
|
||||
}
|
||||
},
|
||||
o => repository.Primitives.Count() > 0
|
||||
);
|
||||
|
||||
private IEnumerable<PrimitiveBase> GetCasePrimitives(IRCSectionTemplate template)
|
||||
{
|
||||
Window wnd;
|
||||
IRCGeometryLogic geometryLogic;
|
||||
if (template is IRectangleBeamTemplate)
|
||||
SetPopupCanBeClosedTrue = new RelayCommand(o =>
|
||||
{
|
||||
if (!(o is PrimitiveBase primitive)) return;
|
||||
primitive.PopupCanBeClosed = true;
|
||||
});
|
||||
|
||||
SetPopupCanBeClosedFalse = new RelayCommand(o =>
|
||||
{
|
||||
if (!(o is PrimitiveBase primitive)) return;
|
||||
primitive.PopupCanBeClosed = false;
|
||||
});
|
||||
}
|
||||
|
||||
private void afterMaterialEdit(SelectItemVM<IHeadMaterial> sender, CRUDVMEventArgs e)
|
||||
{
|
||||
foreach (var primitive in PrimitiveLogic.Items)
|
||||
{
|
||||
primitive.RefreshColor();
|
||||
}
|
||||
}
|
||||
|
||||
private bool CheckMaterials()
|
||||
{
|
||||
foreach (var item in PrimitiveLogic.Items)
|
||||
{
|
||||
if (item.HeadMaterial == null)
|
||||
{
|
||||
var rectTemplate = template as IRectangleBeamTemplate;
|
||||
geometryLogic = new RectGeometryLogic(rectTemplate);
|
||||
wnd = new RectangleBeamView(rectTemplate);
|
||||
if(langID == 0) { System.Windows.Forms.MessageBox.Show($"Primitive {item.Name} does not has material", "Check data for analisys", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
|
||||
else { System.Windows.Forms.MessageBox.Show($"Примитиву {item.Name} не назначен материал", "Проверьте расчетные данные", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
|
||||
return false;
|
||||
}
|
||||
else if (template is ICircleTemplate)
|
||||
}
|
||||
return true;
|
||||
}
|
||||
private IEnumerable<PrimitiveBase> GetRCCirclePrimitives()
|
||||
{
|
||||
var template = new CircleTemplate();
|
||||
return GetCasePrimitives(template);
|
||||
}
|
||||
private IEnumerable<PrimitiveBase> GetBeamCasePrimitives()
|
||||
{
|
||||
var template = new RectangleBeamTemplate();
|
||||
return GetCasePrimitives(template);
|
||||
}
|
||||
private IEnumerable<PrimitiveBase> GetColumnCasePrimitives()
|
||||
{
|
||||
var template = new RectangleBeamTemplate(0.5d, 0.5d) { CoverGap = 0.05, WidthCount = 3, HeightCount = 3, TopDiameter = 0.025d, BottomDiameter = 0.025d };
|
||||
return GetCasePrimitives(template);
|
||||
}
|
||||
private IEnumerable<PrimitiveBase> GetSlabCasePrimitives()
|
||||
{
|
||||
var template = new RectangleBeamTemplate(1d, 0.2d) { CoverGap = 0.04, WidthCount = 5, HeightCount = 2, TopDiameter = 0.012d, BottomDiameter = 0.012d };
|
||||
return GetCasePrimitives(template);
|
||||
}
|
||||
|
||||
private IEnumerable<PrimitiveBase> GetCasePrimitives(IRCSectionTemplate template)
|
||||
{
|
||||
Window wnd;
|
||||
IRCGeometryLogic geometryLogic;
|
||||
if (template is IRectangleBeamTemplate)
|
||||
{
|
||||
var rectTemplate = template as IRectangleBeamTemplate;
|
||||
geometryLogic = new RectGeometryLogic(rectTemplate);
|
||||
wnd = new RectangleBeamView(rectTemplate);
|
||||
SetLanguageDictionary(langID);
|
||||
wnd.Resources.MergedDictionaries.Add(dict);
|
||||
|
||||
}
|
||||
else if (template is ICircleTemplate)
|
||||
{
|
||||
var circleTemplate = template as ICircleTemplate;
|
||||
geometryLogic = new CircleGeometryLogic(circleTemplate);
|
||||
wnd = new CircleView(circleTemplate);
|
||||
SetLanguageDictionary(langID);
|
||||
wnd.Resources.MergedDictionaries.Add(dict);
|
||||
}
|
||||
else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + $"Was: {nameof(template)}"); }
|
||||
wnd.ShowDialog();
|
||||
if (wnd.DialogResult == true)
|
||||
{
|
||||
|
||||
var newSection = new SectionTemplate(geometryLogic).GetCrossSection();
|
||||
var newRepository = newSection.SectionRepository;
|
||||
repository.HeadMaterials.AddRange(newRepository.HeadMaterials);
|
||||
repository.Primitives.AddRange(newRepository.Primitives);
|
||||
repository.ForceActions.AddRange(newRepository.ForceActions);
|
||||
repository.CalculatorsList.AddRange(newRepository.CalculatorsList);
|
||||
OnPropertyChanged(nameof(HeadMaterials));
|
||||
CombinationsLogic.AddItems(newRepository.ForceActions);
|
||||
CalculatorsLogic.AddItems(newRepository.CalculatorsList);
|
||||
var primitives = PrimitiveOperations.ConvertNdmPrimitivesToPrimitiveBase(newRepository.Primitives);
|
||||
foreach (var item in primitives)
|
||||
{
|
||||
var circleTemplate = template as ICircleTemplate;
|
||||
geometryLogic = new CircleGeometryLogic(circleTemplate);
|
||||
wnd = new CircleView(circleTemplate);
|
||||
item.RegisterDeltas(VisualProperty.WorkPlainWidth / 2, VisualProperty.WorkPlainHeight / 2);
|
||||
}
|
||||
else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + $"Was: {nameof(template)}"); }
|
||||
wnd.ShowDialog();
|
||||
if (wnd.DialogResult == true)
|
||||
PrimitiveLogic.Refresh();
|
||||
foreach (var item in newRepository.HeadMaterials)
|
||||
{
|
||||
|
||||
var newSection = new SectionTemplate(geometryLogic).GetCrossSection();
|
||||
var newRepository = newSection.SectionRepository;
|
||||
repository.HeadMaterials.AddRange(newRepository.HeadMaterials);
|
||||
repository.Primitives.AddRange(newRepository.Primitives);
|
||||
repository.ForceActions.AddRange(newRepository.ForceActions);
|
||||
repository.CalculatorsList.AddRange(newRepository.CalculatorsList);
|
||||
OnPropertyChanged(nameof(HeadMaterials));
|
||||
CombinationsLogic.AddItems(newRepository.ForceActions);
|
||||
CalculatorsLogic.AddItems(newRepository.CalculatorsList);
|
||||
var primitives = PrimitiveOperations.ConvertNdmPrimitivesToPrimitiveBase(newRepository.Primitives);
|
||||
foreach (var item in primitives)
|
||||
{
|
||||
item.RegisterDeltas(VisualProperty.WorkPlainWidth / 2, VisualProperty.WorkPlainHeight / 2);
|
||||
}
|
||||
PrimitiveLogic.Refresh();
|
||||
foreach (var item in newRepository.HeadMaterials)
|
||||
{
|
||||
GlobalRepository.Materials.Create(item);
|
||||
}
|
||||
foreach (var item in newRepository.ForceActions)
|
||||
{
|
||||
GlobalRepository.Actions.Create(item);
|
||||
}
|
||||
return primitives;
|
||||
GlobalRepository.Materials.Create(item);
|
||||
}
|
||||
return new List<PrimitiveBase>();
|
||||
}
|
||||
}
|
||||
foreach (var item in newRepository.ForceActions)
|
||||
{
|
||||
GlobalRepository.Actions.Create(item);
|
||||
}
|
||||
return primitives;
|
||||
}
|
||||
return new List<PrimitiveBase>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using StructureHelper.Infrastructure;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -7,77 +8,77 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace StructureHelper.Windows.MainWindow
|
||||
{
|
||||
public class CrossSectionVisualPropertyVM : ViewModelBase
|
||||
{
|
||||
private double axisLineThickness;
|
||||
private double gridLineThickness;
|
||||
private double gridSize;
|
||||
private double workPlainWidth;
|
||||
private double workPlainHeight;
|
||||
public class CrossSectionVisualPropertyVM : ViewModelBase
|
||||
{
|
||||
private double axisLineThickness;
|
||||
private double gridLineThickness;
|
||||
private double gridSize;
|
||||
private double workPlainWidth;
|
||||
private double workPlainHeight;
|
||||
|
||||
/// <summary>
|
||||
/// Thickness of x-, and y- axis line
|
||||
/// </summary>
|
||||
public double AxisLineThickness
|
||||
{
|
||||
get => axisLineThickness; set
|
||||
{
|
||||
axisLineThickness = value;
|
||||
OnPropertyChanged(nameof(AxisLineThickness));
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Thickness of lines of coordinate mesh
|
||||
/// </summary>
|
||||
public double GridLineThickness
|
||||
{
|
||||
get => gridLineThickness; set
|
||||
{
|
||||
gridLineThickness = value;
|
||||
OnPropertyChanged(nameof(GridLineThickness));
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Size of coordinate mesh
|
||||
/// </summary>
|
||||
public double GridSize
|
||||
{
|
||||
get => gridSize; set
|
||||
{
|
||||
gridSize = value;
|
||||
OnPropertyChanged(nameof(GridSize));
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Width of work plane
|
||||
/// </summary>
|
||||
public double WorkPlainWidth
|
||||
{
|
||||
get => workPlainWidth; set
|
||||
{
|
||||
workPlainWidth = value;
|
||||
OnPropertyChanged(nameof(WorkPlainWidth));
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Height of work plane
|
||||
/// </summary>
|
||||
public double WorkPlainHeight
|
||||
{
|
||||
get => workPlainHeight; set
|
||||
{
|
||||
workPlainHeight = value;
|
||||
OnPropertyChanged(nameof(WorkPlainHeight));
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Thickness of x-, and y- axis line
|
||||
/// </summary>
|
||||
public double AxisLineThickness
|
||||
{
|
||||
get => axisLineThickness; set
|
||||
{
|
||||
axisLineThickness = value;
|
||||
OnPropertyChanged(nameof(AxisLineThickness));
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Thickness of lines of coordinate mesh
|
||||
/// </summary>
|
||||
public double GridLineThickness
|
||||
{
|
||||
get => gridLineThickness; set
|
||||
{
|
||||
gridLineThickness = value;
|
||||
OnPropertyChanged(nameof(GridLineThickness));
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Size of coordinate mesh
|
||||
/// </summary>
|
||||
public double GridSize
|
||||
{
|
||||
get => gridSize; set
|
||||
{
|
||||
gridSize = value;
|
||||
OnPropertyChanged(nameof(GridSize));
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Width of work plane
|
||||
/// </summary>
|
||||
public double WorkPlainWidth
|
||||
{
|
||||
get => workPlainWidth; set
|
||||
{
|
||||
workPlainWidth = value;
|
||||
OnPropertyChanged(nameof(WorkPlainWidth));
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Height of work plane
|
||||
/// </summary>
|
||||
public double WorkPlainHeight
|
||||
{
|
||||
get => workPlainHeight; set
|
||||
{
|
||||
workPlainHeight = value;
|
||||
OnPropertyChanged(nameof(WorkPlainHeight));
|
||||
}
|
||||
}
|
||||
|
||||
public CrossSectionVisualPropertyVM()
|
||||
{
|
||||
AxisLineThickness = 2d;
|
||||
GridLineThickness = 0.25d;
|
||||
GridSize = 0.05d;
|
||||
WorkPlainWidth = 1.2d;
|
||||
WorkPlainHeight = 1.2d;
|
||||
}
|
||||
}
|
||||
public CrossSectionVisualPropertyVM()
|
||||
{
|
||||
AxisLineThickness = 2d;
|
||||
GridLineThickness = 0.25d;
|
||||
GridSize = 0.05d;
|
||||
WorkPlainWidth = 1.2d;
|
||||
WorkPlainHeight = 1.2d;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
xmlns:local="clr-namespace:StructureHelper.Windows.MainWindow"
|
||||
d:DataContext="{d:DesignInstance local:CrossSectionVisualPropertyVM}"
|
||||
mc:Ignorable="d"
|
||||
Title="Grid properies" Height="200" Width="300" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
|
||||
<Grid>
|
||||
Title="{DynamicResource Grid properies}" Height="200" Width="320" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
|
||||
<Grid Margin="10">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="22"/>
|
||||
<RowDefinition Height="22"/>
|
||||
@@ -17,18 +17,18 @@
|
||||
<RowDefinition/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="130"/>
|
||||
<ColumnDefinition Width="180"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="Axis grid thickness"/>
|
||||
<TextBlock Text="{DynamicResource Axis grid thickness}"/>
|
||||
<TextBox Grid.Column="1" Text="{Binding AxisLineThickness, Converter={StaticResource PlainDouble}, ValidatesOnExceptions=True}"/>
|
||||
<TextBlock Grid.Row="1" Text="Grid size"/>
|
||||
<TextBlock Grid.Row="1" Text="{DynamicResource Grid size}"/>
|
||||
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding GridSize, Converter={StaticResource LengthConverter}, ValidatesOnExceptions=True}"/>
|
||||
<TextBlock Grid.Row="2" Text="Grid line thickness"/>
|
||||
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding GridLineThickness, Converter={StaticResource PlainDouble}, ValidatesOnExceptions=True}"/>
|
||||
<TextBlock Grid.Row="3" Text="Work plane width"/>
|
||||
<TextBlock Grid.Row="2" Text="{DynamicResource Grid line thickness}"/>
|
||||
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding GridLineThickness, Converter={StaticResource PlainDouble}, ValidatesOnExceptions=True}"/>
|
||||
<TextBlock Grid.Row="3" Text="{DynamicResource Work plane width}"/>
|
||||
<TextBox Grid.Row="3" Grid.Column="1" Text="{Binding WorkPlainWidth, Converter={StaticResource LengthConverter}, ValidatesOnExceptions=True}"/>
|
||||
<TextBlock Grid.Row="4" Text="Work plane height"/>
|
||||
<TextBlock Grid.Row="4" Text="{DynamicResource Work plane height}"/>
|
||||
<TextBox Grid.Row="4" Grid.Column="1" Text="{Binding WorkPlainHeight, Converter={StaticResource LengthConverter}, ValidatesOnExceptions=True}"/>
|
||||
</Grid>
|
||||
</Window>
|
||||
|
||||
@@ -14,15 +14,15 @@ using System.Windows.Shapes;
|
||||
|
||||
namespace StructureHelper.Windows.MainWindow
|
||||
{
|
||||
/// <summary>
|
||||
/// Логика взаимодействия для VisualPropertyView.xaml
|
||||
/// </summary>
|
||||
public partial class VisualPropertyView : Window
|
||||
{
|
||||
public VisualPropertyView(CrossSectionVisualPropertyVM vm)
|
||||
{
|
||||
InitializeComponent();
|
||||
DataContext = vm;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Логика взаимодействия для VisualPropertyView.xaml
|
||||
/// </summary>
|
||||
public partial class VisualPropertyView : Window
|
||||
{
|
||||
public VisualPropertyView(CrossSectionVisualPropertyVM vm)
|
||||
{
|
||||
DataContext = vm;
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:local="clr-namespace:StructureHelper.Windows.PrimitiveTemplates.RCs.Beams"
|
||||
mc:Ignorable="d"
|
||||
Title="Reinforced circle template" Height="220" Width="300" SizeToContent="Height" WindowStartupLocation="CenterScreen" ResizeMode="NoResize">
|
||||
<Grid>
|
||||
Title="{DynamicResource Reinforced circle template}" Height="220" Width="300" SizeToContent="Height" WindowStartupLocation="CenterScreen" ResizeMode="NoResize">
|
||||
<Grid Margin="5">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition/>
|
||||
<RowDefinition Height="35"/>
|
||||
@@ -22,12 +22,12 @@
|
||||
<RowDefinition Height="22"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="100"/>
|
||||
<ColumnDefinition Width="160"/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Row="0" Text="Cover gap"/>
|
||||
<TextBlock Grid.Row="1" Text="Rebar Diameter"/>
|
||||
<TextBlock Grid.Row="2" Text="Rebar Count"/>
|
||||
<TextBlock Grid.Row="0" Text="{DynamicResource Cover gap}"/>
|
||||
<TextBlock Grid.Row="1" Text="{DynamicResource Rebar Diameter}"/>
|
||||
<TextBlock Grid.Row="2" Text="{DynamicResource Rebar Count}"/>
|
||||
<TextBox Grid.Row="0" Grid.Column="1" Margin="1" Style="{StaticResource ValidatedError}" Text="{Binding CoverGap, Converter={StaticResource LengthConverter}, ValidatesOnExceptions=True}"/>
|
||||
<TextBox Grid.Row="1" Grid.Column="1" Margin="1" Style="{StaticResource ValidatedError}" Text="{Binding BarDiameter, Converter={StaticResource LengthConverter}, ValidatesOnExceptions=True}"/>
|
||||
<TextBox Grid.Row="2" Grid.Column="1" Margin="1" Style="{StaticResource ValidatedError}" Text="{Binding BarCount, ValidatesOnExceptions=True}"/>
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
xmlns:vm ="clr-namespace:StructureHelper.Windows.ViewModels.PrimitiveTemplates.RCs"
|
||||
d:DataContext="{d:DesignInstance vm:RectangleBeamViewModel}"
|
||||
mc:Ignorable="d"
|
||||
Title="Reinforced rectangle template" Height="220" Width="300" SizeToContent="Height" WindowStartupLocation="CenterScreen" ResizeMode="NoResize">
|
||||
Title="{DynamicResource Reinforced rectangle template}" Height="220" Width="300" SizeToContent="Height" WindowStartupLocation="CenterScreen" ResizeMode="NoResize">
|
||||
<Window.Resources>
|
||||
</Window.Resources>
|
||||
<Grid>
|
||||
<Grid Margin="5">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition/>
|
||||
<RowDefinition Height="35"/>
|
||||
@@ -27,14 +27,14 @@
|
||||
<RowDefinition Height="22"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="100"/>
|
||||
<ColumnDefinition Width="180"/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Row="0" Text="Cover gap"/>
|
||||
<TextBlock Grid.Row="1" Text="Top Diameter"/>
|
||||
<TextBlock Grid.Row="2" Text="Bottom Diameter"/>
|
||||
<TextBlock Grid.Row="3" Text="Width count"/>
|
||||
<TextBlock Grid.Row="4" Text="Height count"/>
|
||||
<TextBlock Grid.Row="0" Text="{DynamicResource Cover gap}"/>
|
||||
<TextBlock Grid.Row="1" Text="{DynamicResource Top Diameter}"/>
|
||||
<TextBlock Grid.Row="2" Text="{DynamicResource Bottom Diameter}"/>
|
||||
<TextBlock Grid.Row="3" Text="{DynamicResource Width count}"/>
|
||||
<TextBlock Grid.Row="4" Text="{DynamicResource Height count}"/>
|
||||
<TextBox Grid.Row="0" Grid.Column="1" Margin="1" Style="{StaticResource ValidatedError}" Text="{Binding CoverGap, Converter={StaticResource LengthConverter}, ValidatesOnExceptions=True}"/>
|
||||
<TextBox Grid.Row="1" Grid.Column="1" Margin="1" Style="{StaticResource ValidatedError}" Text="{Binding TopDiameter, Converter={StaticResource LengthConverter}, ValidatesOnExceptions=True}"/>
|
||||
<TextBox Grid.Row="2" Grid.Column="1" Margin="1" Style="{StaticResource ValidatedError}" Text="{Binding BottomDiameter, Converter={StaticResource LengthConverter}, ValidatesOnExceptions=True}"/>
|
||||
|
||||
Reference in New Issue
Block a user