diff --git a/Pages/Index.cshtml b/Pages/Index.cshtml
index 9fff56a..264b269 100644
--- a/Pages/Index.cshtml
+++ b/Pages/Index.cshtml
@@ -6,8 +6,24 @@
- Document
+ Модель расчета поковок кольцо раскатное
+
@@ -48,61 +64,5 @@
-
-
-@if (Model.hasResult)
-{
-
-
- Расчет размеров поковки
-
-
-
- | - |
- Размер |
- Допуск на размер +- |
-
-
-
-
- | H заготовки = (Н1+б)+-∆/2 |
- @Model.H_Billet |
- @Model.limit1 |
-
-
- | H заготовки с пробой = (Н2+б)+-∆/2 |
- @Model.H_BilletWithBlank |
- @Model.limit2 |
-
-
- | D дет = D+напуск на ТО |
- @Model.D_Detail |
- - |
-
-
- | D заг = (D+б)+-∆/2+напуск на ТО |
- @Model.D_Billet |
- @Model.limit3 |
-
-
- | D заг с пробой= (D+б)+-∆/2+напуск на ТО |
- @Model.D_BilletWithBlank |
- @Model.limit4 |
-
-
- | d дет=d-напуск на ТО |
- @Model.d_Detail |
- - |
-
-
- | d заг =(dдет-б)+-3б |
- @Model.d_Billet |
- @Model.limit5 |
-
-
- | d заг с пробой =(dдет-б)+-3б |
- @Model.d_BilletWithBlank |
- @Model.limit6 |
-
-
-}
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/Pages/Index.cshtml.cs b/Pages/Index.cshtml.cs
index cad5db6..5625a4e 100644
--- a/Pages/Index.cshtml.cs
+++ b/Pages/Index.cshtml.cs
@@ -1,289 +1,30 @@
-using Microsoft.AspNetCore.Mvc.RazorPages;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.RazorPages;
public class IndexModel : PageModel
{
- public double D { get; private set; }
- public double dd { get; private set; }
- public double H { get; private set; }
- public double x { get; private set; }
- public double y { get; private set; }
- public double z { get; private set; }
- public double Q { get; private set; }
- public double onTO { get; private set; }
+ public double D { get; set; }
+ public double dd { get; set; }
+ public double H { get; set; }
+ public double x { get; set; }
+ public double y { get; set; }
+ public double z { get; set; }
+ public double Q { get; set; }
+ public double onTO { get; set; }
- public double H_Billet { get; private set; }
- public int limit1 { get; private set; }
- public double H_BilletWithBlank { get; private set; }
- public int limit2 { get; private set; }
- public double D_Detail { get; private set; }
- public double D_Billet { get; private set; }
- public int limit3 { get; private set; }
- public double D_BilletWithBlank { get; private set; }
- public int limit4 { get; private set; }
- public double d_Detail { get; private set; }
- public double d_Billet { get; private set; }
- public int limit5 { get; private set; }
- public double d_BilletWithBlank { get; private set; }
- public int limit6 { get; private set; }
-
- public double D_nom_1 { get; private set; }
- public double r_nom_1 { get; private set; }
- public double H_nom_1 { get; private set; }
- public double V_nom_1 { get; private set; }
- public double mDisk_nom_1 { get; private set; }
-
- public double D_max_1 { get; private set; }
- public double r_max_1 { get; private set; }
- public double H_max_1 { get; private set; }
- public double V_max_1 { get; private set; }
- public double mDisk_max_1 { get; private set; }
-
- public double D_O_nom_1 { get; private set; }
- public double r_O_nom_1 { get; private set; }
- public double H_O_nom_1 { get; private set; }
- public double V_O_nom_1 { get; private set; }
- public double mDisk_O_nom_1 { get; private set; }
-
- public double D_O_max_1 { get; private set; }
- public double r_O_max_1 { get; private set; }
- public double H_O_max_1 { get; private set; }
- public double V_O_max_1 { get; private set; }
- public double mDisk_O_max_1 { get; private set; }
-
- public double mDisk_nom_1_O { get; private set; }
- public double mDisk_max_1_O { get; private set; }
-
-
- public double D_nom_2 { get; private set; }
- public double r_nom_2 { get; private set; }
- public double H_nom_2 { get; private set; }
- public double V_nom_2 { get; private set; }
- public double mDisk_nom_2 { get; private set; }
-
- public double D_max_2 { get; private set; }
- public double r_max_2 { get; private set; }
- public double H_max_2 { get; private set; }
- public double V_max_2 { get; private set; }
- public double mDisk_max_2 { get; private set; }
-
- public double D_O_nom_2 { get; private set; }
- public double r_O_nom_2 { get; private set; }
- public double H_O_nom_2 { get; private set; }
- public double V_O_nom_2 { get; private set; }
- public double mDisk_O_nom_2 { get; private set; }
-
- public double D_O_max_2 { get; private set; }
- public double r_O_max_2 { get; private set; }
- public double H_O_max_2 { get; private set; }
- public double V_O_max_2 { get; private set; }
- public double mDisk_O_max_2 { get; private set; }
-
- public double mDisk_nom_2_O { get; private set; }
- public double mDisk_max_2_O { get; private set; }
-
- public bool hasResult { get; private set; } = false;
-
- public void OnPost(double D, double dd, double H, double x, double y, double z, double Q, double onTO)
+ public IActionResult OnPost(double D, double dd, double H, double x, double y, double z, double Q, double onTO)
{
- double h1 = H * x + (y * z) + onTO;
- double h2 = H * x + (y * z) + Q + onTO;
-
- #region Расчет размеров поковки
-
- // H заготовки = (Н1+б)+-∆/2
- // Размер
- H_Billet = h1 + SearchLimit(D, h1).Item1;
- // Допуск на размер +-
- limit1 = SearchLimit(D, h1).Item2;
-
- // H заготовки с пробой = (Н2+б)+-∆/2
- H_BilletWithBlank = h2 + SearchLimit(D, h2).Item1;
- // Допуск на размер +-
- limit2 = SearchLimit(D, h2).Item2;
-
- // D дет = D+напуск на ТО
- D_Detail = D + onTO;
-
- // D заг = (D+б)+-∆/2+напуск на ТО
- D_Billet = D_Detail + SearchLimit(D, h1).Item1 + onTO;
- limit3 = SearchLimit(D, h1).Item2;
-
- // D заг с пробой= (D+б)+-∆/2+напуск на ТО
- D_BilletWithBlank = D_Detail + SearchLimit(D, h2).Item1 + onTO;
- limit4 = SearchLimit(D, h2).Item2;
-
- // d дет=d-напуск на ТО
- d_Detail = dd + onTO;
-
- // d заг =(dдет-б)+-3б
- d_Billet = d_Detail - SearchLimit(D, h1).Item1;
- limit5 = SearchLimit(D, h1).Item2 * 3;
-
- //d заг с пробой =(dдет-б)+-3б
- d_BilletWithBlank = d_Detail - SearchLimit(D, h2).Item1;
- limit6 = SearchLimit(D, h2).Item2 * 3;
-
- #endregion
-
- #region Расчет массы поковки без пробы
-
- // Диск номинал
- D_nom_1 = D_Billet;
- r_nom_1 = D_nom_1 / 2;
- H_nom_1 = H_Billet;
- V_nom_1 = 3.14 * (r_nom_1 * r_nom_1) * H_nom_1;
- mDisk_nom_1 = Math.Round(V_nom_1 * 0.78 / 100000000, 3);
-
- // Диск максимал
- D_max_1 = D_Billet + limit3;
- r_max_1 = D_max_1 / 2;
- H_max_1 = H_Billet + limit1;
- V_max_1 = 3.14 * (r_max_1 * r_max_1) * H_max_1;
- mDisk_max_1 = Math.Round(V_max_1 * 0.78 / 100000000, 3);
-
- // Отверстие номинал
- D_O_nom_1 = d_Billet;
- r_O_nom_1 = d_Billet / 2;
- H_O_nom_1 = H_Billet;
- V_O_nom_1 = 3.14 * (r_O_nom_1 * r_O_nom_1) * H_O_nom_1;
- mDisk_O_nom_1 = Math.Round(V_O_nom_1 * 0.78 / 100000000, 3);
-
- // Отверстие максимал
- D_O_max_1 = d_Billet - limit5;
- r_O_max_1 = D_O_max_1 / 2;
- H_O_max_1 = H_Billet + limit1;
- V_O_max_1 = 3.14 * (r_O_max_1 * r_O_max_1) * H_O_max_1;
- mDisk_O_max_1 = Math.Round(V_O_max_1 * 0.78 / 100000000, 3);
-
- // m диск с отв
- mDisk_nom_1_O = mDisk_nom_1 - mDisk_O_nom_1;
- mDisk_max_1_O = mDisk_max_1 - mDisk_O_max_1;
-
- #endregion
-
- #region Расчет массы поковки c пробой
-
- // Диск номинал
- D_nom_2 = D_BilletWithBlank;
- r_nom_2 = D_nom_2 / 2;
- H_nom_2 = H_BilletWithBlank;
- V_nom_2 = 3.14 * (r_nom_2 * r_nom_2) * H_nom_2;
- mDisk_nom_2 = Math.Round(V_nom_2 * 0.78 / 100000000, 3);
-
- // Диск максимал
- D_max_2 = D_BilletWithBlank + limit4;
- r_max_2 = D_max_2 / 2;
- H_max_2 = H_BilletWithBlank + limit2;
- V_max_2 = 3.14 * (r_max_2 * r_max_2) * H_max_2;
- mDisk_max_2 = Math.Round(V_max_2 * 0.78 / 100000000, 3);
-
- // Отверстие номинал
- D_O_nom_2 = d_BilletWithBlank;
- r_O_nom_2 = D_O_nom_2 / 2;
- H_O_nom_2 = H_BilletWithBlank;
- V_O_nom_2 = 3.14 * (r_O_nom_2 * r_O_nom_2) * H_O_nom_2;
- mDisk_O_nom_2 = Math.Round(V_O_nom_2 * 0.78 / 100000000, 3);
-
- // Отверстие максимал
- D_O_max_2 = d_BilletWithBlank - limit6;
- r_O_max_2 = D_O_max_2 / 2;
- H_O_max_2 = H_BilletWithBlank + limit2;
- V_O_max_2 = 3.14 * (r_O_max_2 * r_O_max_2) * H_O_max_2;
- mDisk_O_max_2 = Math.Round(V_O_max_2 * 0.78 / 100000000, 3);
-
- // m диск с отв
- mDisk_nom_2_O = mDisk_nom_2 - mDisk_O_nom_2;
- mDisk_max_2_O = mDisk_max_2 - mDisk_O_max_2;
- #endregion
-
- hasResult = true;
- }
-
- private (int, int) SearchLimit(double D, double H)
- {
- // Диапазоны высоты H
- double[] heightRanges = new double[]
+ return RedirectToPage("Results", new
{
- 100, 150, 200, 250, 315, 400, 500, 630, 800, 1000, 1250, 1400, 1600, 1800, 2000, 2250, 2500
- };
-
- // Диапазоны диаметра D
- double[] diameterRanges = new double[]
- {
- 499, 500, 630, 800, 1000, 1250, 1400, 1600, 1800, 2000, 2250, 2500, 2800, 3150, 3500, 4000, 4500, 5000
- };
-
-
- (int, int)[,] limits = new (int, int)[,]
- {
- // Св. 100 до 150 включ.
- { (24,9), (25,9), (27,10), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1) },
-
- // Св. 150 до 200
- { (24,9), (25,9), (27,10), (29,11), (31,11), (35,13), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1) },
-
- // Св. 200 до 250
- { (25,9), (26,9), (28,10), (30,11), (32,12), (36,13), (38,14), (40,15), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1) },
-
- // Св. 250 до 315
- { (27,10), (28,10), (30,11), (32,12), (34,13), (38,14), (41,15), (44,16), (47,18), (51,19), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1) },
-
- // Св. 315 до 400
- { (28,10), (29,11), (31,11), (33,12), (35,13), (40,15), (42,16), (46,17), (49,19), (53,20), (57,21), (61,23), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1) },
-
- // Св. 400 до 500
- { (29,11), (30,11), (31,11), (34,13), (36,13), (41,15), (44,16), (48,18), (51,19), (55,21), (59,22), (63,24), (67,25), (71,27), (-1,-1), (-1,-1), (-1,-1) },
-
- // Св. 500 до 630
- { (30,11), (31,11), (33,12), (35,13), (37,14), (43,16), (46,17), (50,19), (53,20), (57,21), (61,23), (65,25), (69,26), (75,28), (80,30), (95,37), (-1,-1) },
-
- // Св. 630 до 800
- { (-1,-1), (33,12), (36,13), (38,14), (41,15), (46,17), (50,19), (54,20), (57,21), (61,23), (65,25), (71,27), (77,29), (83,31), (89,34), (98,39), (105,43) },
-
- // Св. 800 до 1000
- { (-1,-1), (-1,-1), (37,14), (40,15), (43,16), (48,18), (52,20), (56,21), (59,22), (63,24), (68,26), (74,28), (80,30), (86,33), (92,36), (101,41), (108,46) },
-
- // Св. 1000 до 1250
- { (-1,-1), (-1,-1), (-1,-1), (44,16), (46,17), (52,20), (56,21), (60,23), (64,24), (68,26), (74,28), (81,30), (86,33), (92,36), (98,39), (105,43), (112,48) },
-
- // Св. 1250 до 1400
- { (-1,-1), (-1,-1), (-1,-1), (-1,-1), (47,18), (54,20), (58,22), (62,23), (67,25), (72,27), (78,29), (83,31), (89,34), (95,37), (101,41), (108,45), (115,50) },
-
- // Св. 1400 до 1600
- { (-1,-1), (-1,-1), (-1,-1), (-1,-1), (48,18), (56,21), (60,23), (65,24), (69,26), (75,28), (81,30), (87,34), (93,36), (99,39), (104,42), (110,47), (119,51) },
-
- // Св. 1600 до 1800
- { (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (58,22), (63,23), (67,25), (73,27), (79,29), (85,33), (91,35), (97,38), (102,41), (106,43), (113,48), (120,52) },
-
- // Св. 1800 до 2000
- { (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (64,23), (68,25), (75,28), (81,30), (87,34), (92,36), (98,38), (103,41), (107,43), (115,50), (121,52) },
-
- // Св. 2000 до 2250
- { (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (69,26), (76,28), (82,30), (88,34), (94,37), (100,40), (104,42), (110,47), (116,50), (122,52) },
-
- // Св. 2250 до 2500
- { (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (82,30), (85,32), (91,35), (97,38), (100,41), (108,43), (114,49), (119,51), (125,53) }
- };
-
- int FindIndex(double val, double[] ranges)
- {
- for (int i = 0; i < ranges.Length; i++)
- {
- if (val <= ranges[i])
- return i - 1;
- }
- return -1;
- }
-
- int hIndex = FindIndex(H, heightRanges);
- int dIndex = FindIndex(D, diameterRanges);
- if (D < 499)
- dIndex = 0;
-
- if (hIndex == -1 || dIndex == -1)
- return (-1, -1);
-
- return limits[hIndex, dIndex];
+ _D = D,
+ _dd = dd,
+ _H = H,
+ _x = x,
+ _y = y,
+ _z = z,
+ _Q = Q,
+ _onTO = onTO
+ });
}
}
diff --git a/Pages/Results.cshtml b/Pages/Results.cshtml
new file mode 100644
index 0000000..3d158d8
--- /dev/null
+++ b/Pages/Results.cshtml
@@ -0,0 +1,201 @@
+@page
+@model ResultsModel
+
+
+
+
+
+
+
+ Модель расчета поковок кольцо раскатное
+
+
+
+
+
+
+
+ Расчет размеров поковки
+
+
+
+ | - |
+ Размер |
+ Допуск на размер +- |
+
+
+
+
+ | H заготовки = (Н1+б)+-∆/2 |
+ @Model.H_Billet |
+ @Model.limit1 |
+
+
+ | H заготовки с пробой = (Н2+б)+-∆/2 |
+ @Model.H_BilletWithBlank |
+ @Model.limit2 |
+
+
+ | D дет = D+напуск на ТО |
+ @Model.D_Detail |
+ - |
+
+
+ | D заг = (D+б)+-∆/2+напуск на ТО |
+ @Model.D_Billet |
+ @Model.limit3 |
+
+
+ | D заг с пробой= (D+б)+-∆/2+напуск на ТО |
+ @Model.D_BilletWithBlank |
+ @Model.limit4 |
+
+
+ | d дет=d-напуск на ТО |
+ @Model.d_Detail |
+ - |
+
+
+ | d заг =(dдет-б)+-3б |
+ @Model.d_Billet |
+ @Model.limit5 |
+
+
+ | d заг с пробой =(dдет-б)+-3б |
+ @Model.d_BilletWithBlank |
+ @Model.limit6 |
+
+
+
+
+ Расчет массы поковки без пробы
+
+
+
+ | - |
+ D |
+ r |
+ H |
+ V |
+ m диск |
+ m диск с отв. |
+
+
+ | Диск номинал |
+ @Model.D_nom_1 |
+ @Model.r_nom_1 |
+ @Model.H_nom_1 |
+ @Model.V_nom_1 |
+ @Model.mDisk_nom_1 |
+ @Model.mDisk_nom_1_O |
+
+ Диск максимал |
+ @Model.D_max_1 |
+ @Model.r_max_1 |
+ @Model.H_max_1 |
+ @Model.V_max_1 |
+ @Model.mDisk_max_1 |
+ @Model.mDisk_max_1_O |
+
+ Отверстие номинал |
+ @Model.D_O_nom_1 |
+ @Model.r_O_nom_1 |
+ @Model.H_O_nom_1 |
+ @Model.V_O_nom_1 |
+ @Model.mDisk_O_nom_1 |
+ - |
+
+ Отверстие максимал |
+ @Model.D_O_max_1 |
+ @Model.r_O_max_1 |
+ @Model.H_O_max_1 |
+ @Model.V_O_max_1 |
+ @Model.mDisk_O_max_1 |
+ - |
+
+
+
+
+
+ Расчет массы поковки с пробой
+
+
+
+ | - |
+ D |
+ r |
+ H |
+ V |
+ m диск |
+ m диск с отв. |
+
+
+ | Диск номинал |
+ @Model.D_nom_2 |
+ @Model.r_nom_2 |
+ @Model.H_nom_2 |
+ @Model.V_nom_2 |
+ @Model.mDisk_nom_2 |
+ @Model.mDisk_nom_2_O |
+
+ Диск максимал |
+ @Model.D_max_2 |
+ @Model.r_max_2 |
+ @Model.H_max_2 |
+ @Model.V_max_2 |
+ @Model.mDisk_max_2 |
+ @Model.mDisk_max_2_O |
+
+ Отверстие номинал |
+ @Model.D_O_nom_2 |
+ @Model.r_O_nom_2 |
+ @Model.H_O_nom_2 |
+ @Model.V_O_nom_2 |
+ @Model.mDisk_O_nom_2 |
+ - |
+
+ Отверстие максимал |
+ @Model.D_O_max_2 |
+ @Model.r_O_max_2 |
+ @Model.H_O_max_2 |
+ @Model.V_O_max_2 |
+ @Model.mDisk_O_max_2 |
+ - |
+
+
+
+
+ Результат без пробы
+ 
+
+ Результат с пробой
+ 
+
+
+
\ No newline at end of file
diff --git a/Pages/Results.cshtml.cs b/Pages/Results.cshtml.cs
new file mode 100644
index 0000000..4cbe0b0
--- /dev/null
+++ b/Pages/Results.cshtml.cs
@@ -0,0 +1,339 @@
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Drawing.Imaging;
+using System.Drawing.Text;
+using System.IO;
+
+public class ResultsModel : PageModel
+{
+ public double _D { get; set; }
+ public double _dd { get; set; }
+ public double _H { get; set; }
+ public double _x { get; set; }
+ public double _y { get; set; }
+ public double _z { get; set; }
+ public double _Q { get; set; }
+ public double _onTO { get; set; }
+
+ public double H_Billet { get; private set; }
+ public int limit1 { get; private set; }
+ public double H_BilletWithBlank { get; private set; }
+ public int limit2 { get; private set; }
+ public double D_Detail { get; private set; }
+ public double D_Billet { get; private set; }
+ public int limit3 { get; private set; }
+ public double D_BilletWithBlank { get; private set; }
+ public int limit4 { get; private set; }
+ public double d_Detail { get; private set; }
+ public double d_Billet { get; private set; }
+ public int limit5 { get; private set; }
+ public double d_BilletWithBlank { get; private set; }
+ public int limit6 { get; private set; }
+
+ public double D_nom_1 { get; private set; }
+ public double r_nom_1 { get; private set; }
+ public double H_nom_1 { get; private set; }
+ public double V_nom_1 { get; private set; }
+ public double mDisk_nom_1 { get; private set; }
+
+ public double D_max_1 { get; private set; }
+ public double r_max_1 { get; private set; }
+ public double H_max_1 { get; private set; }
+ public double V_max_1 { get; private set; }
+ public double mDisk_max_1 { get; private set; }
+
+ public double D_O_nom_1 { get; private set; }
+ public double r_O_nom_1 { get; private set; }
+ public double H_O_nom_1 { get; private set; }
+ public double V_O_nom_1 { get; private set; }
+ public double mDisk_O_nom_1 { get; private set; }
+
+ public double D_O_max_1 { get; private set; }
+ public double r_O_max_1 { get; private set; }
+ public double H_O_max_1 { get; private set; }
+ public double V_O_max_1 { get; private set; }
+ public double mDisk_O_max_1 { get; private set; }
+
+ public double mDisk_nom_1_O { get; private set; }
+ public double mDisk_max_1_O { get; private set; }
+
+
+ public double D_nom_2 { get; private set; }
+ public double r_nom_2 { get; private set; }
+ public double H_nom_2 { get; private set; }
+ public double V_nom_2 { get; private set; }
+ public double mDisk_nom_2 { get; private set; }
+
+ public double D_max_2 { get; private set; }
+ public double r_max_2 { get; private set; }
+ public double H_max_2 { get; private set; }
+ public double V_max_2 { get; private set; }
+ public double mDisk_max_2 { get; private set; }
+
+ public double D_O_nom_2 { get; private set; }
+ public double r_O_nom_2 { get; private set; }
+ public double H_O_nom_2 { get; private set; }
+ public double V_O_nom_2 { get; private set; }
+ public double mDisk_O_nom_2 { get; private set; }
+
+ public double D_O_max_2 { get; private set; }
+ public double r_O_max_2 { get; private set; }
+ public double H_O_max_2 { get; private set; }
+ public double V_O_max_2 { get; private set; }
+ public double mDisk_O_max_2 { get; private set; }
+
+ public double mDisk_nom_2_O { get; private set; }
+ public double mDisk_max_2_O { get; private set; }
+
+ public string? ResultImagePath { get; set; }
+ public void OnGet(double _D, double _dd, double _H, double _x, double _y, double _z, double _Q, double _onTO)
+ {
+ double h1 = _H * _x + (_y * _z) + _onTO;
+ double h2 = _H * _x + (_y * _z) + _Q + _onTO;
+
+ #region Расчет размеров поковки
+
+ // H заготовки = (Н1+б)+-∆/2
+ // Размер
+ H_Billet = h1 + SearchLimit(_D, h1).Item1;
+ // Допуск на размер +-
+ limit1 = SearchLimit(_D, h1).Item2;
+
+ // H заготовки с пробой = (Н2+б)+-∆/2
+ H_BilletWithBlank = h2 + SearchLimit(_D, h2).Item1;
+ // Допуск на размер +-
+ limit2 = SearchLimit(_D, h2).Item2;
+
+ // D дет = D+напуск на ТО
+ D_Detail = _D + _onTO;
+
+ // D заг = (D+б)+-∆/2+напуск на ТО
+ D_Billet = D_Detail + SearchLimit(_D, h1).Item1 + _onTO;
+ limit3 = SearchLimit(_D, h1).Item2;
+
+ // D заг с пробой= (D+б)+-∆/2+напуск на ТО
+ D_BilletWithBlank = D_Detail + SearchLimit(_D, h2).Item1 + _onTO;
+ limit4 = SearchLimit(_D, h2).Item2;
+
+ // d дет=d-напуск на ТО
+ d_Detail = _dd + _onTO;
+
+ // d заг =(dдет-б)+-3б
+ d_Billet = d_Detail - SearchLimit(_D, h1).Item1;
+ limit5 = SearchLimit(_D, h1).Item2 * 3;
+
+ //d заг с пробой =(dдет-б)+-3б
+ d_BilletWithBlank = d_Detail - SearchLimit(_D, h2).Item1;
+ limit6 = SearchLimit(_D, h2).Item2 * 3;
+
+ #endregion
+
+ #region Расчет массы поковки без пробы
+
+ // Диск номинал
+ D_nom_1 = D_Billet;
+ r_nom_1 = D_nom_1 / 2;
+ H_nom_1 = H_Billet;
+ V_nom_1 = 3.14 * (r_nom_1 * r_nom_1) * H_nom_1;
+ mDisk_nom_1 = Math.Round(V_nom_1 * 0.78 / 100000000, 3);
+
+ // Диск максимал
+ D_max_1 = D_Billet + limit3;
+ r_max_1 = D_max_1 / 2;
+ H_max_1 = H_Billet + limit1;
+ V_max_1 = 3.14 * (r_max_1 * r_max_1) * H_max_1;
+ mDisk_max_1 = Math.Round(V_max_1 * 0.78 / 100000000, 3);
+
+ // Отверстие номинал
+ D_O_nom_1 = d_Billet;
+ r_O_nom_1 = d_Billet / 2;
+ H_O_nom_1 = H_Billet;
+ V_O_nom_1 = 3.14 * (r_O_nom_1 * r_O_nom_1) * H_O_nom_1;
+ mDisk_O_nom_1 = Math.Round(V_O_nom_1 * 0.78 / 100000000, 3);
+
+ // Отверстие максимал
+ D_O_max_1 = d_Billet - limit5;
+ r_O_max_1 = D_O_max_1 / 2;
+ H_O_max_1 = H_Billet + limit1;
+ V_O_max_1 = 3.14 * (r_O_max_1 * r_O_max_1) * H_O_max_1;
+ mDisk_O_max_1 = Math.Round(V_O_max_1 * 0.78 / 100000000, 3);
+
+ // m диск с отв
+ mDisk_nom_1_O = mDisk_nom_1 - mDisk_O_nom_1;
+ mDisk_max_1_O = mDisk_max_1 - mDisk_O_max_1;
+
+ #endregion
+
+ #region Расчет массы поковки c пробой
+
+ // Диск номинал
+ D_nom_2 = D_BilletWithBlank;
+ r_nom_2 = D_nom_2 / 2;
+ H_nom_2 = H_BilletWithBlank;
+ V_nom_2 = 3.14 * (r_nom_2 * r_nom_2) * H_nom_2;
+ mDisk_nom_2 = Math.Round(V_nom_2 * 0.78 / 100000000, 3);
+
+ // Диск максимал
+ D_max_2 = D_BilletWithBlank + limit4;
+ r_max_2 = D_max_2 / 2;
+ H_max_2 = H_BilletWithBlank + limit2;
+ V_max_2 = 3.14 * (r_max_2 * r_max_2) * H_max_2;
+ mDisk_max_2 = Math.Round(V_max_2 * 0.78 / 100000000, 3);
+
+ // Отверстие номинал
+ D_O_nom_2 = d_BilletWithBlank;
+ r_O_nom_2 = D_O_nom_2 / 2;
+ H_O_nom_2 = H_BilletWithBlank;
+ V_O_nom_2 = 3.14 * (r_O_nom_2 * r_O_nom_2) * H_O_nom_2;
+ mDisk_O_nom_2 = Math.Round(V_O_nom_2 * 0.78 / 100000000, 3);
+
+ // Отверстие максимал
+ D_O_max_2 = d_BilletWithBlank - limit6;
+ r_O_max_2 = D_O_max_2 / 2;
+ H_O_max_2 = H_BilletWithBlank + limit2;
+ V_O_max_2 = 3.14 * (r_O_max_2 * r_O_max_2) * H_O_max_2;
+ mDisk_O_max_2 = Math.Round(V_O_max_2 * 0.78 / 100000000, 3);
+
+ // m диск с отв
+ mDisk_nom_2_O = mDisk_nom_2 - mDisk_O_nom_2;
+ mDisk_max_2_O = mDisk_max_2 - mDisk_O_max_2;
+ #endregion
+
+ ResultImage("Result_WithoutBlank", mDisk_nom_1_O, mDisk_max_1_O, _dd, d_Billet, limit5, _H, H_Billet, _D, D_Billet, limit3);
+ ResultImage("Result_WithBlank", mDisk_nom_2_O, mDisk_max_2_O, _dd, d_BilletWithBlank, limit6, _H, H_BilletWithBlank, _D, D_BilletWithBlank, limit4);
+ }
+
+ private (int, int) SearchLimit(double D, double H)
+ {
+ // Диапазоны высоты H
+ double[] heightRanges = new double[]
+ {
+ 100, 150, 200, 250, 315, 400, 500, 630, 800, 1000, 1250, 1400, 1600, 1800, 2000, 2250, 2500
+ };
+
+ // Диапазоны диаметра D
+ double[] diameterRanges = new double[]
+ {
+ 499, 500, 630, 800, 1000, 1250, 1400, 1600, 1800, 2000, 2250, 2500, 2800, 3150, 3500, 4000, 4500, 5000
+ };
+
+
+ (int, int)[,] limits = new (int, int)[,]
+ {
+ // Св. 100 до 150 включ.
+ { (24,9), (25,9), (27,10), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1) },
+
+ // Св. 150 до 200
+ { (24,9), (25,9), (27,10), (29,11), (31,11), (35,13), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1) },
+
+ // Св. 200 до 250
+ { (25,9), (26,9), (28,10), (30,11), (32,12), (36,13), (38,14), (40,15), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1) },
+
+ // Св. 250 до 315
+ { (27,10), (28,10), (30,11), (32,12), (34,13), (38,14), (41,15), (44,16), (47,18), (51,19), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1) },
+
+ // Св. 315 до 400
+ { (28,10), (29,11), (31,11), (33,12), (35,13), (40,15), (42,16), (46,17), (49,19), (53,20), (57,21), (61,23), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1) },
+
+ // Св. 400 до 500
+ { (29,11), (30,11), (31,11), (34,13), (36,13), (41,15), (44,16), (48,18), (51,19), (55,21), (59,22), (63,24), (67,25), (71,27), (-1,-1), (-1,-1), (-1,-1) },
+
+ // Св. 500 до 630
+ { (30,11), (31,11), (33,12), (35,13), (37,14), (43,16), (46,17), (50,19), (53,20), (57,21), (61,23), (65,25), (69,26), (75,28), (80,30), (95,37), (-1,-1) },
+
+ // Св. 630 до 800
+ { (-1,-1), (33,12), (36,13), (38,14), (41,15), (46,17), (50,19), (54,20), (57,21), (61,23), (65,25), (71,27), (77,29), (83,31), (89,34), (98,39), (105,43) },
+
+ // Св. 800 до 1000
+ { (-1,-1), (-1,-1), (37,14), (40,15), (43,16), (48,18), (52,20), (56,21), (59,22), (63,24), (68,26), (74,28), (80,30), (86,33), (92,36), (101,41), (108,46) },
+
+ // Св. 1000 до 1250
+ { (-1,-1), (-1,-1), (-1,-1), (44,16), (46,17), (52,20), (56,21), (60,23), (64,24), (68,26), (74,28), (81,30), (86,33), (92,36), (98,39), (105,43), (112,48) },
+
+ // Св. 1250 до 1400
+ { (-1,-1), (-1,-1), (-1,-1), (-1,-1), (47,18), (54,20), (58,22), (62,23), (67,25), (72,27), (78,29), (83,31), (89,34), (95,37), (101,41), (108,45), (115,50) },
+
+ // Св. 1400 до 1600
+ { (-1,-1), (-1,-1), (-1,-1), (-1,-1), (48,18), (56,21), (60,23), (65,24), (69,26), (75,28), (81,30), (87,34), (93,36), (99,39), (104,42), (110,47), (119,51) },
+
+ // Св. 1600 до 1800
+ { (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (58,22), (63,23), (67,25), (73,27), (79,29), (85,33), (91,35), (97,38), (102,41), (106,43), (113,48), (120,52) },
+
+ // Св. 1800 до 2000
+ { (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (64,23), (68,25), (75,28), (81,30), (87,34), (92,36), (98,38), (103,41), (107,43), (115,50), (121,52) },
+
+ // Св. 2000 до 2250
+ { (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (69,26), (76,28), (82,30), (88,34), (94,37), (100,40), (104,42), (110,47), (116,50), (122,52) },
+
+ // Св. 2250 до 2500
+ { (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (-1,-1), (82,30), (85,32), (91,35), (97,38), (100,41), (108,43), (114,49), (119,51), (125,53) }
+ };
+
+ int FindIndex(double val, double[] ranges)
+ {
+ for (int i = 0; i < ranges.Length; i++)
+ {
+ if (val <= ranges[i])
+ return i - 1;
+ }
+ return -1;
+ }
+
+ int hIndex = FindIndex(H, heightRanges);
+ int dIndex = FindIndex(D, diameterRanges);
+ if (D < 499)
+ dIndex = 0;
+
+ if (hIndex == -1 || dIndex == -1)
+ return (-1, -1);
+
+ return limits[hIndex, dIndex];
+ }
+
+ private string ResultImage(string imageName, double weightNom, double weightMax, double d, double d_Billet,
+ double limit5, double H, double H_Billet, double D, double D_Billet, double limit3)
+ {
+ string templatePath = Path.Combine("wwwroot", "images", "Template.png");
+ string outputPath = Path.Combine("wwwroot", "images", $"{imageName}.png");
+
+#pragma warning disable CA1416
+
+ using (var image = Image.FromFile(templatePath) as Bitmap)
+ {
+ var privateFontCollection = new PrivateFontCollection();
+ string fontPath = Path.Combine("wwwroot", "fonts", "MyFont.ttf");
+ privateFontCollection.AddFontFile(fontPath);
+
+ var fontFamily = privateFontCollection.Families[0];
+ var font = new Font(fontFamily, 12);
+ using (var graphics = Graphics.FromImage(image))
+ {
+ var brush = new SolidBrush(Color.Black);
+ graphics.DrawString("Выше стрелки - размеры детали,", font, brush, new PointF(30, 20));
+ graphics.DrawString("Ниже стрелки - размеры поковки", font, brush, new PointF(30, 35));
+
+ graphics.DrawString($"Масса номинал: {Math.Round(weightNom, 3)} тонн", font, brush, new PointF(510, 20));
+ graphics.DrawString($"Масса максимал: {Math.Round(weightMax, 3)} тонн", font, brush, new PointF(510, 35));
+
+ graphics.DrawString($"⌀{Math.Round(d)}", font, brush, new PointF(355, 50));
+ graphics.DrawString($"{Math.Round(d_Billet)} +-{limit5}", font, brush, new PointF(340, 70));
+
+ graphics.DrawString($"⌀{Math.Round(D)}", font, brush, new PointF(350, 210));
+ graphics.DrawString($"{Math.Round(D_Billet)} +-{limit3}", font, brush, new PointF(335, 230));
+
+ graphics.TranslateTransform(710, 155);
+ graphics.RotateTransform(270);
+ graphics.DrawString($"{Math.Round(H)}", font, brush, new PointF(0, 0));
+ graphics.DrawString($"{Math.Round(H_Billet)}", font, brush, new PointF(-5, 25));
+ }
+
+ image.Save(outputPath, ImageFormat.Png);
+ }
+
+#pragma warning restore CA1416
+
+ return outputPath.Replace("wwwroot", "");
+ }
+}
\ No newline at end of file
diff --git a/Program.cs b/Program.cs
index 9fed10d..b8ba155 100644
--- a/Program.cs
+++ b/Program.cs
@@ -7,8 +7,12 @@ builder.Services.AddRazorPages(options =>
options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
});
+builder.WebHost.ConfigureKestrel(serverOptions =>
+{
+ serverOptions.ListenAnyIP(5146);
+});
+
var app = builder.Build();
-
app.MapRazorPages();
-
+app.UseStaticFiles();
app.Run();
\ No newline at end of file
diff --git a/TestApp.csproj b/TestApp.csproj
index 1b28a01..bd45387 100644
--- a/TestApp.csproj
+++ b/TestApp.csproj
@@ -6,4 +6,8 @@
enable
+
+
+
+
diff --git a/wwwroot/fonts/MyFont.ttf b/wwwroot/fonts/MyFont.ttf
new file mode 100644
index 0000000..ad2caca
Binary files /dev/null and b/wwwroot/fonts/MyFont.ttf differ
diff --git a/wwwroot/images/Result_WithBlank.png b/wwwroot/images/Result_WithBlank.png
new file mode 100644
index 0000000..bef7727
Binary files /dev/null and b/wwwroot/images/Result_WithBlank.png differ
diff --git a/wwwroot/images/Result_WithoutBlank.png b/wwwroot/images/Result_WithoutBlank.png
new file mode 100644
index 0000000..0d9c3d3
Binary files /dev/null and b/wwwroot/images/Result_WithoutBlank.png differ
diff --git a/wwwroot/images/Template.png b/wwwroot/images/Template.png
new file mode 100644
index 0000000..b341b44
Binary files /dev/null and b/wwwroot/images/Template.png differ