Add work with versions

This commit is contained in:
Evgeny Redikultsev
2024-12-01 17:32:17 +05:00
parent 32243f5448
commit 346378222c
22 changed files with 4337 additions and 71 deletions

View File

@@ -15,8 +15,9 @@ namespace DataAccess.DTOs
public Guid Id { get; set; }
[JsonProperty("DateTime")]
public DateTime DateTime { get; set; }
[JsonProperty("Comment")]
public string Comment { get; set; } = string.Empty;
[JsonProperty("AnalysisVersion")]
public ISaveable AnalysisVersion { get; set; }
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,935 @@
{
"$id": "1",
"$type": "RootObject",
"FileVersion": {
"Id": "6d7ad6f9-4754-4f07-a4c4-4715c993de9c",
"VersionNumber": 1,
"SubVersionNumber": 0
},
"Project": {
"Id": "7295aaae-5291-40ef-836b-67679f0b7432",
"VisualAnalyses": {
"$id": "2",
"$type": "ListOfIVisualAnalysis",
"$values": [
{
"$id": "3",
"$type": "VisualAnalysis",
"Id": "4513ced2-7aa4-42dc-afd9-32cd1cc81b9d",
"Analysis": {
"$id": "4",
"$type": "CrossSectionNdmAnalysis",
"Id": "6415665d-e31a-4447-bb91-1fa9d3101538",
"Name": "New NDM Analysis",
"Tags": "#New group",
"VersionProcessor": {
"$id": "5",
"$type": "VersionProcessor",
"Id": "516424cd-b978-4791-a92b-b8d6e067fe7a",
"Versions": {
"$type": "ListOfIDateVersion",
"$values": [
{
"$id": "6",
"$type": "DateVersion",
"Id": "458bfd1a-e3ea-48a4-b397-6208298a1cb1",
"DateTime": "2024-11-30T17:26:41.950465+05:00",
"Comment": "",
"AnalysisVersion": {
"$id": "7",
"$type": "CrossSection",
"Id": "46f8b24f-68e8-4a80-82c6-6d8dcefab29c",
"SectionRepository": {
"$id": "8",
"$type": "CrossSectionRepository",
"Id": "b6c67d83-f23e-4897-9cf7-1c501c627936",
"HeadMaterials": {
"$type": "ListOfIHeadMaterial",
"$values": [
{
"$id": "9",
"$type": "HeadMaterial",
"Id": "598dba27-5382-4c9c-9baa-8cf1caf9a696",
"Name": "Concrete",
"Color": "#FFF0F8FF",
"HelperMaterial": {
"$id": "10",
"$type": "ConcreteLibMaterial",
"Id": "325b3e63-5f6c-4998-9e2f-ed4d88d6c962",
"RelativeHumidity": 0.55,
"MinAge": 0.0,
"MaxAge": 2207520000.0,
"MaterialEntityId": "1cdc3598-c67b-4e35-89ac-3f7c0a9db167",
"SafetyFactors": {
"$id": "11",
"$type": "ListOfMaterialSafetyFactor",
"$values": [
{
"$id": "12",
"$type": "MaterialSafetyFactor",
"Id": "4976a2b2-cd2a-4663-8aa5-96e68fd75208",
"Name": "Gamma_b1",
"Take": true,
"Description": "Coefficient for considering long term calculations",
"PartialFactors": {
"$type": "ListOfMaterialPartialFactor",
"$values": [
{
"$id": "13",
"$type": "MaterialPartialFactor",
"Id": "be1571d7-8d02-46b0-9b80-04492fb230c3",
"FactorValue": 0.9,
"StressState": 0,
"CalcTerm": 2,
"LimitState": 1
},
{
"$id": "14",
"$type": "MaterialPartialFactor",
"Id": "412f48a9-7170-4a7c-8e33-8271eb2d8cd1",
"FactorValue": 0.9,
"StressState": 1,
"CalcTerm": 2,
"LimitState": 1
}
]
}
},
{
"$id": "15",
"$type": "MaterialSafetyFactor",
"Id": "fa3c957d-a6fd-4d19-b292-6e7c29e570c7",
"Name": "Gamma_b2",
"Take": false,
"Description": "Coefficient for plain concrete structures",
"PartialFactors": {
"$type": "ListOfMaterialPartialFactor",
"$values": [
{
"$id": "16",
"$type": "MaterialPartialFactor",
"Id": "2e278522-4ab8-4baf-b256-6f3e09ddc840",
"FactorValue": 0.9,
"StressState": 1,
"CalcTerm": 1,
"LimitState": 1
},
{
"$id": "17",
"$type": "MaterialPartialFactor",
"Id": "af236127-8edb-4da7-889a-7a83696b9a12",
"FactorValue": 0.9,
"StressState": 1,
"CalcTerm": 2,
"LimitState": 1
}
]
}
},
{
"$id": "18",
"$type": "MaterialSafetyFactor",
"Id": "aa856334-dbd5-4c2f-b4eb-3d63cbc19e56",
"Name": "Gamma_b3",
"Take": false,
"Description": "Coefficient for considering bleeding in vertical placement conditionals",
"PartialFactors": {
"$type": "ListOfMaterialPartialFactor",
"$values": [
{
"$id": "19",
"$type": "MaterialPartialFactor",
"Id": "261dd7ac-e6bf-4fcf-a8c2-7d3f0f03c1bf",
"FactorValue": 0.85,
"StressState": 1,
"CalcTerm": 1,
"LimitState": 1
},
{
"$id": "20",
"$type": "MaterialPartialFactor",
"Id": "421c27ba-f06d-4943-aade-356455e70a3e",
"FactorValue": 0.85,
"StressState": 1,
"CalcTerm": 2,
"LimitState": 1
}
]
}
}
]
},
"TensionForULS": false,
"TensionForSLS": true,
"MaterialLogicId": "b97e8168-76a1-4e24-ae98-9aa38edd1e9a"
}
},
{
"$id": "21",
"$type": "HeadMaterial",
"Id": "c7f4f947-e7bb-4134-9639-e1c857e90f3b",
"Name": "Reinforcement",
"Color": "#FFFF0000",
"HelperMaterial": {
"$id": "22",
"$type": "ReinforcementLibMaterial",
"Id": "3b30e2bf-860c-4c8b-a34d-8ba4ce3fbd8f",
"MaterialEntityId": "ea422282-3465-433c-9b93-c5bbfba5a904",
"SafetyFactors": {
"$id": "23",
"$type": "ListOfMaterialSafetyFactor",
"$values": []
},
"MaterialLogicId": "54c4fe40-8f82-4995-8930-81e65e97edb9"
}
}
]
},
"ForceActions": {
"$type": "ListOfIForceAction",
"$values": [
{
"$id": "24",
"$type": "ForceCombinationList",
"Id": "c4174be1-4d7a-40fa-be08-b6a915c646fb",
"Name": "New Force Action",
"SetInGravityCenter": true,
"ForcePoint": {
"$id": "25",
"$type": "Point2D",
"Id": "fe7f7a53-9cb3-4f53-9f95-90dcda3e6074",
"X": 0.0,
"Y": 0.0
},
"DesignForces": {
"$id": "26",
"$type": "ListOfIDesignForceTuple",
"$values": [
{
"$id": "27",
"$type": "DesignForceTuple",
"Id": "264799c6-a507-43b1-8dec-4dc946ff3f56",
"LimitState": 1,
"CalcTerm": 1,
"ForceTuple": {
"$id": "28",
"$type": "ForceTuple",
"Id": "5208c12d-cfa6-4484-8004-8adf5499aaa4",
"Mx": -400000.0,
"My": -400000.0,
"Nz": -100000.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
}
},
{
"$id": "29",
"$type": "DesignForceTuple",
"Id": "40819c8c-6959-4355-9fd9-b5b2286a6f6c",
"LimitState": 1,
"CalcTerm": 2,
"ForceTuple": {
"$id": "30",
"$type": "ForceTuple",
"Id": "82fee963-0992-4bd4-8e50-601ae19bbe40",
"Mx": -50000.0,
"My": -50000.0,
"Nz": -100000.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
}
},
{
"$id": "31",
"$type": "DesignForceTuple",
"Id": "6b393798-9926-4fe4-a2a2-124fcec73d4a",
"LimitState": 2,
"CalcTerm": 1,
"ForceTuple": {
"$id": "32",
"$type": "ForceTuple",
"Id": "84a9f571-fab5-469a-b65d-13d016e70be5",
"Mx": -50000.0,
"My": -50000.0,
"Nz": -100000.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
}
},
{
"$id": "33",
"$type": "DesignForceTuple",
"Id": "660e0fa3-9d13-4f40-9500-643a7677123c",
"LimitState": 2,
"CalcTerm": 2,
"ForceTuple": {
"$id": "34",
"$type": "ForceTuple",
"Id": "bb916a62-c3db-494d-860d-fe56e98be95a",
"Mx": -50000.0,
"My": -50000.0,
"Nz": -100000.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
}
}
]
}
}
]
},
"Primitives": {
"$type": "ListOfINdmPrimitive",
"$values": [
{
"$id": "35",
"$type": "RectangleNdmPrimitive",
"Id": "2a238dea-815c-486d-8f67-3406d721f4cd",
"Name": "Concrete block",
"RectangleShape": {
"$id": "36",
"$type": "RectangleShape",
"Id": "366105da-71cf-4452-b451-16a7a08725dc",
"Width": 0.5,
"Height": 0.5
},
"NdmElement": {
"$id": "37",
"$type": "NdmElement",
"Id": "924467a4-831f-4eea-bbb4-b8e7fa2ed776",
"HeadMaterial": {
"$ref": "9"
},
"Triangulate": true,
"UsersPrestrain": {
"$id": "38",
"$type": "ForceTuple",
"Id": "bb9b0a37-05e3-4b3e-9838-397f14366b09",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
},
"AutoPrestrain": {
"$id": "39",
"$type": "ForceTuple",
"Id": "5a9c3315-cf46-4361-831f-874902a20548",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
}
},
"VisualProperty": {
"$id": "40",
"$type": "VisualProperty",
"Id": "fcd06688-7c88-45a2-a8d7-48cf1ef19f13",
"IsVisible": true,
"Color": "#FFE96AB6",
"SetMaterialColor": true,
"ZIndex": 0,
"Opacity": 0.8
},
"Center": {
"$id": "41",
"$type": "Point2D",
"Id": "bfd326bb-ddb7-4e0d-abe4-679bf0632623",
"X": 0.0,
"Y": 0.0
},
"DivisionSize": {
"$id": "42",
"$type": "DivisionSize",
"Id": "51316094-5e15-420d-b7a3-8c92ef2794ee",
"NdmMaxSize": 0.005,
"NdmMinDivision": 10,
"ClearUnderlying": false
},
"RotationAngle": 0.0
},
{
"$id": "43",
"$type": "RebarNdmPrimitive",
"Id": "73197605-fc29-449f-8e98-7c365086d98e",
"Name": "Left bottom rebar",
"NdmElement": {
"$id": "44",
"$type": "NdmElement",
"Id": "e79cedeb-7b16-4612-97b4-a072936fa53b",
"HeadMaterial": {
"$ref": "21"
},
"Triangulate": true,
"UsersPrestrain": {
"$id": "45",
"$type": "ForceTuple",
"Id": "de97f261-85b0-4edf-afb8-203697b9c19f",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
},
"AutoPrestrain": {
"$id": "46",
"$type": "ForceTuple",
"Id": "f7cbdd8d-4851-441b-9a51-3b56d22e56bb",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
}
},
"VisualProperty": {
"$id": "47",
"$type": "VisualProperty",
"Id": "6ebbfd7e-6d94-4bb1-8c4b-b5124b63cf65",
"IsVisible": true,
"Color": "#FF9BCE2E",
"SetMaterialColor": true,
"ZIndex": 0,
"Opacity": 1.0
},
"Center": {
"$id": "48",
"$type": "Point2D",
"Id": "f7a33bd8-cd95-4c25-bb40-589c33a50833",
"X": -0.2,
"Y": -0.2
},
"RotationAngle": 0.0,
"Area": 0.0012566370614359175,
"HostPrimitive": {
"$ref": "35"
}
},
{
"$id": "49",
"$type": "RebarNdmPrimitive",
"Id": "df2dfc59-7a93-4b9d-bf0a-e0710f34cbd4",
"Name": "Right bottom rebar",
"NdmElement": {
"$id": "50",
"$type": "NdmElement",
"Id": "4fb5c96d-906f-4186-9a2b-90b84ca19fe8",
"HeadMaterial": {
"$ref": "21"
},
"Triangulate": true,
"UsersPrestrain": {
"$id": "51",
"$type": "ForceTuple",
"Id": "125344e4-fadb-45bf-9a52-846650d9fc2a",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
},
"AutoPrestrain": {
"$id": "52",
"$type": "ForceTuple",
"Id": "c99f3561-58e0-42f9-aadf-61b82cd31526",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
}
},
"VisualProperty": {
"$id": "53",
"$type": "VisualProperty",
"Id": "7f80b672-e856-4b9b-9e17-cae242701d27",
"IsVisible": true,
"Color": "#FFAE14EE",
"SetMaterialColor": true,
"ZIndex": 0,
"Opacity": 1.0
},
"Center": {
"$id": "54",
"$type": "Point2D",
"Id": "1b60b8ac-26df-46ea-86b9-08fe74c21956",
"X": 0.2,
"Y": -0.2
},
"RotationAngle": 0.0,
"Area": 0.0012566370614359175,
"HostPrimitive": {
"$ref": "35"
}
},
{
"$id": "55",
"$type": "RebarNdmPrimitive",
"Id": "7d67360d-9398-4ba8-84cf-19c8e746b89e",
"Name": "Left top rebar",
"NdmElement": {
"$id": "56",
"$type": "NdmElement",
"Id": "334946d7-3111-4dc6-99fd-4ea702891f14",
"HeadMaterial": {
"$ref": "21"
},
"Triangulate": true,
"UsersPrestrain": {
"$id": "57",
"$type": "ForceTuple",
"Id": "59efbe75-5d1b-4013-913c-d8e64a4b4936",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
},
"AutoPrestrain": {
"$id": "58",
"$type": "ForceTuple",
"Id": "7e0a0c41-4846-40dd-a3d9-51375c06899d",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
}
},
"VisualProperty": {
"$id": "59",
"$type": "VisualProperty",
"Id": "4c47a16a-db0d-49fe-a28f-dc36b485068c",
"IsVisible": true,
"Color": "#FF3156CB",
"SetMaterialColor": true,
"ZIndex": 0,
"Opacity": 1.0
},
"Center": {
"$id": "60",
"$type": "Point2D",
"Id": "d5bb9f38-2e78-46cd-b2ed-5665d0143234",
"X": -0.2,
"Y": 0.2
},
"RotationAngle": 0.0,
"Area": 0.0012566370614359175,
"HostPrimitive": {
"$ref": "35"
}
},
{
"$id": "61",
"$type": "RebarNdmPrimitive",
"Id": "10237fc4-b8c7-4cbc-895f-757f40227210",
"Name": "Right top rebar",
"NdmElement": {
"$id": "62",
"$type": "NdmElement",
"Id": "1883429f-7893-462f-94e6-69f211663e6e",
"HeadMaterial": {
"$ref": "21"
},
"Triangulate": true,
"UsersPrestrain": {
"$id": "63",
"$type": "ForceTuple",
"Id": "cf16dddf-68d3-46e7-89d4-1606e8db1775",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
},
"AutoPrestrain": {
"$id": "64",
"$type": "ForceTuple",
"Id": "b61d1847-2629-4d69-a983-cfa8f14fa342",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
}
},
"VisualProperty": {
"$id": "65",
"$type": "VisualProperty",
"Id": "b5ce594c-e89a-4061-9160-1cd0a0d80efe",
"IsVisible": true,
"Color": "#FFE50629",
"SetMaterialColor": true,
"ZIndex": 0,
"Opacity": 1.0
},
"Center": {
"$id": "66",
"$type": "Point2D",
"Id": "acd7f02d-33f1-4be7-aa98-dbaef471659f",
"X": 0.2,
"Y": 0.2
},
"RotationAngle": 0.0,
"Area": 0.0012566370614359175,
"HostPrimitive": {
"$ref": "35"
}
},
{
"$id": "67",
"$type": "RebarNdmPrimitive",
"Id": "bce2c23d-57bc-4e55-828a-4dad15fd7350",
"Name": "Bottom rebar 1",
"NdmElement": {
"$id": "68",
"$type": "NdmElement",
"Id": "00dbf316-590c-4d5a-a5f4-3109448453b1",
"HeadMaterial": {
"$ref": "21"
},
"Triangulate": true,
"UsersPrestrain": {
"$id": "69",
"$type": "ForceTuple",
"Id": "681b5e21-1043-4d6a-9e6e-571ef39dc00d",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
},
"AutoPrestrain": {
"$id": "70",
"$type": "ForceTuple",
"Id": "d2c6db45-b912-4621-bc12-06e14921e30a",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
}
},
"VisualProperty": {
"$id": "71",
"$type": "VisualProperty",
"Id": "5195b8fb-56bd-44cd-acb2-5505ea1a3f1b",
"IsVisible": true,
"Color": "#FFBFED4D",
"SetMaterialColor": true,
"ZIndex": 0,
"Opacity": 1.0
},
"Center": {
"$id": "72",
"$type": "Point2D",
"Id": "2626fc57-4f92-4b96-902d-0ef1e8570e81",
"X": 0.0,
"Y": -0.2
},
"RotationAngle": 0.0,
"Area": 0.0012566370614359175,
"HostPrimitive": {
"$ref": "35"
}
},
{
"$id": "73",
"$type": "RebarNdmPrimitive",
"Id": "0b4f3017-408d-485a-a469-54f9ae899ce8",
"Name": "Top rebar 1",
"NdmElement": {
"$id": "74",
"$type": "NdmElement",
"Id": "21a77b6e-039d-4eb8-bb7c-5274f8faba2a",
"HeadMaterial": {
"$ref": "21"
},
"Triangulate": true,
"UsersPrestrain": {
"$id": "75",
"$type": "ForceTuple",
"Id": "ba6183e8-cd67-4d8d-916d-85ace8301446",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
},
"AutoPrestrain": {
"$id": "76",
"$type": "ForceTuple",
"Id": "53be9567-8c6f-4fd2-ac6e-de3b4c908b38",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
}
},
"VisualProperty": {
"$id": "77",
"$type": "VisualProperty",
"Id": "1502c9bc-a18f-42ad-bd26-ce600628f665",
"IsVisible": true,
"Color": "#FFEE1071",
"SetMaterialColor": true,
"ZIndex": 0,
"Opacity": 1.0
},
"Center": {
"$id": "78",
"$type": "Point2D",
"Id": "91424470-6a9b-49cd-b8aa-6622c8b3774e",
"X": 0.0,
"Y": 0.2
},
"RotationAngle": 0.0,
"Area": 0.0012566370614359175,
"HostPrimitive": {
"$ref": "35"
}
},
{
"$id": "79",
"$type": "RebarNdmPrimitive",
"Id": "b80fe995-59b8-4b77-8df7-d67cadeac090",
"Name": "Left point 1",
"NdmElement": {
"$id": "80",
"$type": "NdmElement",
"Id": "2b9ac324-38f2-42d4-b0bd-a587e7259e1b",
"HeadMaterial": {
"$ref": "21"
},
"Triangulate": true,
"UsersPrestrain": {
"$id": "81",
"$type": "ForceTuple",
"Id": "ba3dee2f-cdf3-492f-ba50-b622bf59e350",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
},
"AutoPrestrain": {
"$id": "82",
"$type": "ForceTuple",
"Id": "5d126f83-95fb-442e-861b-bb33dc0d6b7f",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
}
},
"VisualProperty": {
"$id": "83",
"$type": "VisualProperty",
"Id": "fef9f1a1-0545-4fd2-b044-191947f597a3",
"IsVisible": true,
"Color": "#FF1A9AD5",
"SetMaterialColor": true,
"ZIndex": 0,
"Opacity": 1.0
},
"Center": {
"$id": "84",
"$type": "Point2D",
"Id": "f16d9011-5e08-42cf-9297-893d746db326",
"X": -0.2,
"Y": 0.0
},
"RotationAngle": 0.0,
"Area": 0.0012566370614359175,
"HostPrimitive": {
"$ref": "35"
}
},
{
"$id": "85",
"$type": "RebarNdmPrimitive",
"Id": "c9ec6833-a044-467f-8064-aec01ddb8d1f",
"Name": "Right point 1",
"NdmElement": {
"$id": "86",
"$type": "NdmElement",
"Id": "17f9cad4-07d0-452b-9dff-08e7673b1a04",
"HeadMaterial": {
"$ref": "21"
},
"Triangulate": true,
"UsersPrestrain": {
"$id": "87",
"$type": "ForceTuple",
"Id": "c27677c2-b4b4-4252-8a4c-6d64a218718d",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
},
"AutoPrestrain": {
"$id": "88",
"$type": "ForceTuple",
"Id": "0b7bcb68-1d6c-4a7e-86ec-9d4d12fad77a",
"Mx": 0.0,
"My": 0.0,
"Nz": 0.0,
"Qx": 0.0,
"Qy": 0.0,
"Mz": 0.0
}
},
"VisualProperty": {
"$id": "89",
"$type": "VisualProperty",
"Id": "a076924e-70f9-4300-94fa-d38b95a536ab",
"IsVisible": true,
"Color": "#FFEF0EC2",
"SetMaterialColor": true,
"ZIndex": 0,
"Opacity": 1.0
},
"Center": {
"$id": "90",
"$type": "Point2D",
"Id": "36503512-755e-433f-a30e-9dc2bbde392a",
"X": 0.2,
"Y": 0.0
},
"RotationAngle": 0.0,
"Area": 0.0012566370614359175,
"HostPrimitive": {
"$ref": "35"
}
}
]
},
"Calculators": {
"$type": "ListOfICalculator",
"$values": [
{
"$id": "91",
"$type": "ForceCalculator",
"Id": "fc01f68a-53d7-4d2c-8dd1-23f6c8eeb396",
"Name": "New Force Calculator",
"InputData": {
"$id": "92",
"$type": "ForceCalculatorInputData",
"Id": "ef13418e-eb58-487b-be7f-1fa4c7b3a7d6",
"ForceActions": {
"$id": "93",
"$type": "ListOfIForceAction",
"$values": [
{
"$ref": "24"
}
]
},
"Primitives": {
"$id": "94",
"$type": "ListOfINdmPrimitive",
"$values": [
{
"$ref": "35"
},
{
"$ref": "43"
},
{
"$ref": "49"
},
{
"$ref": "55"
},
{
"$ref": "61"
},
{
"$ref": "67"
},
{
"$ref": "73"
},
{
"$ref": "79"
},
{
"$ref": "85"
}
]
},
"LimitStatesList": {
"$id": "95",
"$type": "ListOfLimitState",
"$values": [
1
]
},
"CalcTermList": {
"$id": "96",
"$type": "ListOfCalcTerms",
"$values": [
1
]
},
"Accuracy": {
"$id": "97",
"$type": "Accuracy",
"Id": "f3b5dc11-039f-41e7-ac96-d10794715935",
"IterationAccuracy": 0.001,
"MaxIterationCount": 1000
},
"CompressedMember": {
"$id": "98",
"$type": "CompressedMember",
"Id": "71169845-2e5f-433d-bad2-c442222354d7",
"Bucling": false,
"GeometryLength": 3.0,
"LengthFactorX": 1.0,
"DiagramFactorX": 1.0,
"LengthFactorY": 1.0,
"DiagramFactorY": 1.0
}
}
}
]
}
}
}
}
]
}
},
"Comment": "",
"Color": "#FF800000"
}
}
]
}
}
}

View File

@@ -122,6 +122,7 @@
<Style x:Key="ButtonResultCanvas" TargetType="Canvas" BasedOn="{StaticResource ButtonCanvas}">
<Setter Property="Background" Value="{DynamicResource ResultCanvas}"/>
</Style>
<Style x:Key="ButtonRect" TargetType="Rectangle">
@@ -228,15 +229,80 @@
</Canvas>
</DataTemplate>
<DataTemplate x:Key="MomentCurvature">
<Path Margin="4" Data="M 3 18 l 4 -7 h 4 l 8 -7 h 5" Stroke="Black"/>
</DataTemplate>
<DataTemplate x:Key="MomentCurvatureDiagram">
<Canvas Style="{DynamicResource ButtonResultCanvas}">
<Canvas.Children>
<ContentControl ContentTemplate="{DynamicResource CoordGrid}"/>
<Path Margin="4" Data="M 3 18 l 4 -7 h 4 l 8 -7 h 5" Stroke="Black"/>
<ContentControl ContentTemplate="{DynamicResource MomentCurvature}"/>
</Canvas.Children>
</Canvas>
</DataTemplate>
<DataTemplate x:Key="MomentCurvatureCrackDiagram">
<Canvas Style="{DynamicResource ButtonResultCanvas}">
<Canvas.Children>
<ContentControl ContentTemplate="{DynamicResource CoordGrid}"/>
<ContentControl ContentTemplate="{DynamicResource MomentCurvature}"/>
<TextBlock Text="Crc" FontSize="8" FontWeight="Bold" Margin="4,2,0,0"/>
</Canvas.Children>
</Canvas>
</DataTemplate>
<DataTemplate x:Key="CrackForces">
<Canvas Style="{DynamicResource ButtonResultCanvas}">
<Canvas.Children>
<ContentControl ContentTemplate="{DynamicResource ButtonResultRectangle}"/>
<Path Margin="4" Data="M 0 10 h 5 l -1 3 l 1 3 l 0 -3 l 1 -3 h 5 l -1 3 l 1 4 l 0 -3 l 1 -4 h 6 l -1 3 l 1 3 l 0 -3 l 1 -3 h 5 v 14 h -24 z" Fill="DarkGray" Stroke="Black"/>
<TextBlock Text="Ncrc" FontSize="8" FontWeight="Bold" Margin="4,2,0,0"/>
</Canvas.Children>
</Canvas>
</DataTemplate>
<DataTemplate x:Key="Prestrain">
<Canvas Style="{DynamicResource ButtonResultCanvas}">
<Canvas.Children>
<ContentControl ContentTemplate="{DynamicResource ButtonResultRectangle}"/>
<Ellipse Margin="14,13,0,0" Height="4" Width="4" Fill="DarkGray" Stroke="Black"/>
<ContentControl ContentTemplate="{DynamicResource StraightArrow}">
<ContentControl.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="0.6" ScaleY="0.6"/>
<TranslateTransform X="13" Y="6"/>
</TransformGroup>
</ContentControl.RenderTransform>
</ContentControl>
<ContentControl ContentTemplate="{DynamicResource StraightArrow}">
<ContentControl.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="-0.6" ScaleY="0.6"/>
<TranslateTransform X="19" Y="6"/>
</TransformGroup>
</ContentControl.RenderTransform>
</ContentControl>
</Canvas.Children>
</Canvas>
</DataTemplate>
<DataTemplate x:Key="LappingLength">
<Canvas Style="{DynamicResource ButtonResultCanvas}">
<Canvas.Children>
<ContentControl ContentTemplate="{DynamicResource ButtonResultRectangle}"/>
<Line X1="10" Y1="17" X2="28" Y2="17" Stroke="Black"/>
<Line X1="3" Y1="20" X2="22" Y2="20" Stroke="Black"/>
<Line X1="10" Y1="6" X2="10" Y2="15" Stroke="Black"/>
<Line X1="22" Y1="6" X2="22" Y2="15" Stroke="Black"/>
<Line X1="7" Y1="10" X2="25" Y2="10" Stroke="Black"/>
<Line X1="7" Y1="13" X2="13" Y2="7" Stroke="Black"/>
<Line X1="19" Y1="13" X2="25" Y2="7" Stroke="Black"/>
</Canvas.Children>
</Canvas>
</DataTemplate>
<DataTemplate x:Key="ValuePointDiagram">
<Canvas Style="{DynamicResource ButtonResultCanvas}">
<Canvas.Children>
@@ -452,4 +518,91 @@
</Canvas>
</DataTemplate>
<DataTemplate x:Key="Restore">
<Canvas Style="{DynamicResource ButtonResultCanvas}">
<Canvas.Children>
<ContentControl ContentTemplate="{DynamicResource Back}"/>
</Canvas.Children>
</Canvas>
</DataTemplate>
<DataTemplate x:Key="Back">
<Path Margin="4" Data="M -1 18 l 2 -9 l 1 3 a 15 15 90 0 1 22 -3 l -2 4 a 13 13 90 0 0 -18 2 l 3 3 z" Fill="White" Stroke="Black"/>
</DataTemplate>
<DataTemplate x:Key="Forward">
<Canvas Style="{DynamicResource ButtonResultCanvas}">
<Canvas.Children>
<ContentControl ContentTemplate="{DynamicResource Back}">
<ContentControl.RenderTransform>
<TransformGroup>
<TranslateTransform Y="-5"/>
<ScaleTransform ScaleX="-1" CenterX="15" CenterY="8"/>
</TransformGroup>
</ContentControl.RenderTransform>
</ContentControl>
</Canvas.Children>
</Canvas>
</DataTemplate>
<DataTemplate x:Key="Renew">
<Canvas Style="{DynamicResource ButtonResultCanvas}">
<Canvas.Children>
<ContentControl ContentTemplate="{DynamicResource Back}">
<ContentControl.RenderTransform>
<TransformGroup>
<TranslateTransform Y="-6"/>
<ScaleTransform ScaleX="-1" CenterX="15" CenterY="8"/>
</TransformGroup>
</ContentControl.RenderTransform>
</ContentControl>
<ContentControl ContentTemplate="{DynamicResource Back}">
<ContentControl.RenderTransform>
<TransformGroup>
<TranslateTransform Y="-22"/>
<ScaleTransform ScaleY="-1" CenterX="15" CenterY="8"/>
</TransformGroup>
</ContentControl.RenderTransform>
</ContentControl>
</Canvas.Children>
</Canvas>
</DataTemplate>
<DataTemplate x:Key="RestoreAndDelete">
<Canvas Style="{DynamicResource ButtonResultCanvas}">
<Canvas.Children>
<ContentControl ContentTemplate="{DynamicResource DeleteAnalysis}"/>
<ContentControl ContentTemplate="{DynamicResource Back}"/>
</Canvas.Children>
</Canvas>
</DataTemplate>
<DataTemplate x:Key="StraightArrow">
<Path Margin="4" Data="M 5 13 l 0 -4 l 10 0 l 0 -3 l 5 5 l -5 5 l 0 -3 z" Fill="White" Stroke="Black"/>
</DataTemplate>
<DataTemplate x:Key="ExportToNewAnalysis">
<Canvas Style="{DynamicResource ButtonResultCanvas}">
<Canvas.Children>
<Path Margin="4" Data="M 12 22 l 0 -18 l 12 0 l 0 14 l -4 4 z" Fill="White" Stroke="Black"/>
<Path Margin="4" Data="M 20 22 l 0 -4 l 4 0 " Fill="White" Stroke="Black"/>
<TextBlock Margin="16, 4, 0, 0" Text="+-" FontSize="10"/>
<Path Margin="4" Data="M -1 18 l 0 -4 l 10 0 l 0 -3 l 5 5 l -5 5 l 0 -3 z" Fill="White" Stroke="Black"/>
</Canvas.Children>
</Canvas>
</DataTemplate>
<DataTemplate x:Key="Print">
<Canvas Style="{DynamicResource ButtonResultCanvas}">
<Canvas.Children>
<Rectangle Margin="9,8,0,0" Height="8" Width="15" Fill="White" Stroke="Black"/>
<Rectangle Margin="5,15,0,0" Height="10" Width="23" Fill="DarkGray" Stroke="Black"/>
<Ellipse Margin="8,18,0,0" Height="2" Width="2" Fill="Black" Stroke="Black"/>
<Ellipse Margin="12,18,0,0" Height="2" Width="2" Fill="Black" Stroke="Black"/>
<Ellipse Margin="16,18,0,0" Height="2" Width="2" Fill="Black" Stroke="Black"/>
<Rectangle Margin="9,22,0,0" Height="6" Width="15" Fill="White" Stroke="Black"/>
</Canvas.Children>
</Canvas>
</DataTemplate>
</ResourceDictionary>

View File

@@ -89,6 +89,7 @@
<ItemGroup>
<Folder Include="Documentation\Manuals\" />
<Folder Include="Documentation\Examples\" />
<Folder Include="Infrastructure\UI\DataContexts\Logics\" />
<Folder Include="Resources\" />
<Folder Include="Services\Settings\" />

View File

@@ -10,9 +10,40 @@
Title="Calculation Results" Height="450" Width="850" MinHeight="400" MinWidth="650" WindowStartupLocation="CenterScreen">
<DockPanel>
<ToolBarTray DockPanel.Dock="Top">
<ToolBar Name="Prestressing">
<Button Style="{DynamicResource ToolButton}" Command="{Binding SetPrestrainCommand}">
<Button.ToolTip>
<uc:ButtonToolTipEh HeaderText="Set prestrain"
IconContent="{StaticResource Prestrain}"
DescriptionText="Set strain from selected combination as auto prestrain (not available if selected result is invalid)"/>
</Button.ToolTip>
<Viewbox>
<ContentControl ContentTemplate="{StaticResource Prestrain}"/>
</Viewbox>
</Button>
</ToolBar>
<ToolBar Name="Lapping">
<Button Style="{DynamicResource ToolButton}" Command="{Binding ShowAnchorageCommand}">
<Button.ToolTip>
<uc:ButtonToolTipEh HeaderText="Show lapping length"
IconContent="{StaticResource LappingLength}"
DescriptionText="Calculate and show development and lapping length (not available if selected result is invalid)"/>
</Button.ToolTip>
<Viewbox>
<ContentControl ContentTemplate="{StaticResource LappingLength}"/>
</Viewbox>
</Button>
</ToolBar>
<ToolBar Name="CrackResult">
<Button Style="{StaticResource ToolButton}" Command="{Binding ShowCrackResultCommand}" ToolTip="Show force of cracking">
<Image Source="/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/32px_crack.png"/>
<Button Style="{DynamicResource ToolButton}" Command="{Binding ShowCrackResultCommand}">
<Button.ToolTip>
<uc:ButtonToolTipEh HeaderText="Show result step by step"
IconContent="{StaticResource CrackForces}"
DescriptionText="Show proportional combination of forces where cracks are appeared"/>
</Button.ToolTip>
<Viewbox>
<ContentControl ContentTemplate="{StaticResource CrackForces}"/>
</Viewbox>
</Button>
</ToolBar>
<ToolBar Name="InterpolatedResultToolBar">
@@ -22,7 +53,9 @@
IconContent="{StaticResource StepSolution}"
DescriptionText="Show result step by step for selected load combination"/>
</Button.ToolTip>
<Viewbox>
<ContentControl ContentTemplate="{DynamicResource StepSolution}"/>
</Viewbox>
</Button>
<Button Style="{DynamicResource ToolButton}" Command="{Binding ShowGraphsCommand}">
<Button.ToolTip>
@@ -30,7 +63,9 @@
IconContent="{StaticResource MomentCurvatureDiagram}"
DescriptionText="Show moment-curvature diagram as result of stepped solution"/>
</Button.ToolTip>
<Viewbox>
<ContentControl ContentTemplate="{DynamicResource MomentCurvatureDiagram}"/>
</Viewbox>
</Button>
<Button Style="{DynamicResource ToolButton}" Command="{Binding GraphValuePointsCommand}">
<Button.ToolTip>
@@ -38,7 +73,19 @@
IconContent="{StaticResource ValuePointDiagram}"
DescriptionText="Show results for value point as result of stepped solution"/>
</Button.ToolTip>
<Viewbox>
<ContentControl ContentTemplate="{DynamicResource ValuePointDiagram}"/>
</Viewbox>
</Button>
<Button Style="{DynamicResource ToolButton}" Command="{Binding ShowCrackGraphsCommand}">
<Button.ToolTip>
<uc:ButtonToolTipEh HeaderText="Show crack moment-curvature diagram"
IconContent="{StaticResource MomentCurvatureCrackDiagram}"
DescriptionText="Show moment-curvature diagram as result of stepped solution with considering cracks"/>
</Button.ToolTip>
<Viewbox>
<ContentControl ContentTemplate="{StaticResource MomentCurvatureCrackDiagram}" FontSize="8"/>
</Viewbox>
</Button>
</ToolBar>
<ToolBar Name="InteractionDiagramToolBar">
@@ -48,7 +95,9 @@
IconContent="{StaticResource InteractionDiagram}"
DescriptionText="Show interaction diagram, which means line of limit bearing capacity"/>
</Button.ToolTip>
<Viewbox>
<ContentControl ContentTemplate="{DynamicResource InteractionDiagram}"/>
</Viewbox>
</Button>
</ToolBar>
<ToolBar Name="IsoFieldToolBar">
@@ -101,7 +150,7 @@
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="90"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
@@ -132,11 +181,6 @@
<DataGridTextColumn Header="Description" Width="300" Binding="{Binding Description}"/>
</DataGrid.Columns>
</DataGrid>
<StackPanel Grid.Column="1">
<Button Margin="3" Content="CrcDiagrams" ToolTip="Show diagrams for cracked section" Command="{Binding ShowCrackGraphsCommand}"/>
<Button Margin="3" Content="Set Prestrain" ToolTip="Set strains as auto prestrain" Command="{Binding SetPrestrainCommand}"/>
<Button Margin="3" Content="Anchorage" ToolTip="Set strains as auto prestrain" Command="{Binding ShowAnchorageCommand}"/>
</StackPanel>
<StatusBar Grid.Row="1">
<StatusBarItem>
<StackPanel Orientation="Horizontal">

View File

@@ -315,7 +315,7 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
(setPrestrainCommand = new RelayCommand(o =>
{
SetPrestrain();
}, o => SelectedResult != null
}, o => SelectedResult != null && SelectedResult.IsValid
));
}
}

View File

@@ -4,18 +4,30 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:StructureHelper.Windows.CalculationWindows.ProgressViews"
xmlns:uc="clr-namespace:StructureHelper.Windows.UserControls"
d:DataContext="{d:DesignInstance local:TraceDocumentVM}"
mc:Ignorable="d"
Title="Trace Document Viewer" Height="450" Width="800" MinHeight="400" MinWidth="600" WindowStartupLocation="CenterScreen">
Title="Trace Document Viewer" Height="600" Width="800" MinHeight="400" MinWidth="600" WindowStartupLocation="CenterScreen">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="120"/>
</Grid.ColumnDefinitions>
<FlowDocumentReader Name="DocumentReader" ViewingMode="Scroll"/>
<StackPanel Grid.Column="1">
<GroupBox Header="Tab gap">
<TextBox Text="{Binding TabGap, ValidatesOnExceptions=True}" />
<DockPanel>
<ToolBarTray DockPanel.Dock="Top">
<ToolBar>
<Button Style="{StaticResource ToolButton}"
Command="{Binding PrintDocumentCommand}">
<Button.ToolTip>
<uc:ButtonToolTipEh HeaderText="Print"
IconContent="{StaticResource Print}"
DescriptionText="Print current document to phisical or virtual printer"/>
</Button.ToolTip>
<Viewbox>
<ContentControl ContentTemplate="{DynamicResource Print}"/>
</Viewbox>
</Button>
</ToolBar>
<ToolBar>
<StackPanel Grid.Column="1" Orientation="Horizontal">
<GroupBox Width="100" Header="Tab gap">
<TextBox Height="22" Text="{Binding TabGap, ValidatesOnExceptions=True}" VerticalAlignment="Top" />
</GroupBox>
<GroupBox Header="Max priority">
<StackPanel>
@@ -26,8 +38,23 @@
</StackPanel>
</StackPanel>
</GroupBox>
<Button Margin="3" Content="Rebuild" ToolTip="Rebuild document" Command="{Binding RebuildCommand}"/>
<Button Margin="3" Content="Print" ToolTip="Print document" Command="{Binding PrintDocumentCommand}"/>
</StackPanel>
<Button Style="{StaticResource ToolButton}"
Command="{Binding RebuildCommand}">
<Button.ToolTip>
<uc:ButtonToolTipEh HeaderText="Rebuild document"
IconContent="{StaticResource Renew}"
DescriptionText="Rebuild current document considering new values of gap and priority"/>
</Button.ToolTip>
<Viewbox>
<ContentControl ContentTemplate="{StaticResource Renew}"/>
</Viewbox>
</Button>
</ToolBar>
</ToolBarTray>
<Grid>
<FlowDocumentReader Name="DocumentReader" ViewingMode="Scroll"/>
</Grid>
</DockPanel>
</Grid>
</Window>

View File

@@ -1,6 +1,7 @@
using StructureHelper.Infrastructure;
using StructureHelper.Windows.MainWindow.Analyses;
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Infrastructures.Settings;
using StructureHelperCommon.Models.Analyses;
using StructureHelperLogic.Models.Analyses;
@@ -18,6 +19,7 @@ namespace StructureHelper.Windows.MainWindow
{
public class AnalysesLogic : ViewModelBase
{
private IUpdateStrategy<IAnalysis> updateStrategy = new AnalysisUpdateStrategy();
private RelayCommand? addAnalyisCommand;
private RelayCommand? runCommand;
private RelayCommand? editCommand;
@@ -108,6 +110,7 @@ namespace StructureHelper.Windows.MainWindow
VersionsViewModel viewModel = new(SelectedAnalysis.Analysis.VersionProcessor);
var wnd = new VersionsView(viewModel);
wnd.ShowDialog();
Refresh();
}
catch (Exception ex)
{
@@ -144,14 +147,12 @@ namespace StructureHelper.Windows.MainWindow
{
if (SelectedAnalysis is not null)
{
var name = SelectedAnalysis.Analysis.Name;
var tags = SelectedAnalysis.Analysis.Tags;
var tmpItem = SelectedAnalysis.Analysis.Clone() as IAnalysis;
var wnd = new AnalysisView(SelectedAnalysis);
wnd.ShowDialog();
if (wnd.DialogResult != true)
{
SelectedAnalysis.Analysis.Name = name;
SelectedAnalysis.Analysis.Tags = tags;
updateStrategy.Update(SelectedAnalysis.Analysis, tmpItem);
}
else
{

View File

@@ -6,7 +6,7 @@
xmlns:local="clr-namespace:StructureHelper.Windows.MainWindow.Analyses"
d:DataContext="{d:DesignInstance local:AnalysisViewModel}"
mc:Ignorable="d"
Title="Analysis" Height="200" Width="300" WindowStartupLocation="CenterScreen" ResizeMode="NoResize">
Title="Analysis" Height="250" Width="300" WindowStartupLocation="CenterScreen" ResizeMode="NoResize">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
@@ -19,6 +19,7 @@
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="75"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="Name"/>
@@ -26,6 +27,9 @@
<GroupBox Grid.Row="1" Grid.ColumnSpan="2" Header="Tags">
<TextBox Margin="1" Text="{Binding Tags}"/>
</GroupBox>
<GroupBox Grid.Row="2" Grid.ColumnSpan="2" Header="Comment">
<TextBox Margin="1" Text="{Binding Comment}"/>
</GroupBox>
</Grid>
<ContentControl Grid.Row="1" ContentTemplate="{StaticResource OkCancelButtons}" Content="{Binding}"/>
</Grid>

View File

@@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
namespace StructureHelper.Windows.MainWindow.Analyses
{
@@ -23,6 +24,17 @@ namespace StructureHelper.Windows.MainWindow.Analyses
get => analysis.Tags;
set => analysis.Tags = value;
}
public Color Color
{
get => analysis.Color;
set => analysis.Color = value;
}
public string Comment
{
get => analysis.Comment;
set => analysis.Comment = value;
}
public AnalysisViewModel(IAnalysis analysis)
{

View File

@@ -7,7 +7,7 @@
xmlns:uc="clr-namespace:StructureHelper.Windows.UserControls"
d:DataContext="{d:DesignInstance local:VersionsViewModel}"
mc:Ignorable="d"
Title="VersionsView" Height="250" Width="400" MinHeight="250" MinWidth="400" MaxHeight="800" MaxWidth="1000" WindowStartupLocation="CenterScreen">
Title="Version Viewer" Height="250" Width="400" MinHeight="250" MinWidth="400" MaxHeight="800" MaxWidth="1000" WindowStartupLocation="CenterScreen">
<Grid>
<DockPanel>
<ToolBarTray DockPanel.Dock="Top">
@@ -27,19 +27,50 @@
Command="{Binding ReturnToVersionCommand}">
<Button.ToolTip>
<uc:ButtonToolTipEh HeaderText="Restore to selected version"
IconContent="{StaticResource DeleteAnalysis}"
IconContent="{StaticResource RestoreAndDelete}"
DescriptionText="Removes all versions which are younger than selected one"/>
</Button.ToolTip>
<Viewbox>
<ContentControl ContentTemplate="{DynamicResource RestoreAndDelete}"/>
</Viewbox>
</Button>
<Button Style="{StaticResource ToolButton}"
Command="{Binding DeleteVersionCommand}">
<Button.ToolTip>
<uc:ButtonToolTipEh HeaderText="Delete selected version"
IconContent="{StaticResource DeleteAnalysis}"
DescriptionText="Deletes selected version (not available for unique version)"/>
</Button.ToolTip>
<Viewbox>
<ContentControl ContentTemplate="{DynamicResource DeleteAnalysis}"/>
</Viewbox>
</Button>
<Button Style="{StaticResource ToolButton}"
Command="{Binding ExportToNewCommand}">
<Button.ToolTip>
<uc:ButtonToolTipEh HeaderText="Export to new analysis"
IconContent="{StaticResource ExportToNewAnalysis}"
DescriptionText="Exports selected version to new analysis"/>
</Button.ToolTip>
<Viewbox>
<ContentControl ContentTemplate="{DynamicResource ExportToNewAnalysis}"/>
</Viewbox>
</Button>
</ToolBar>
</ToolBarTray>
<ListBox ItemsSource="{Binding DateVersions}" SelectedItem="{Binding SelectedVersion}">
<ListBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding DateTime}"/>
<Grid MinWidth="375">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="1" Text="{Binding DateTime}"/>
<TextBox Grid.Column="3" Text="{Binding Comment}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

View File

@@ -13,24 +13,28 @@ using System.Threading.Tasks;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;
using System.Windows;
using StructureHelper.Windows.ViewModels.Errors;
using System.Windows.Input;
using StructureHelperLogic.Models.Analyses;
using StructureHelperLogics.Models.CrossSections;
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Settings;
namespace StructureHelper.Windows.MainWindow.Analyses
{
public class VersionsViewModel : ViewModelBase
public class VersionsViewModel : SelectItemVM<IDateVersion>
{
private const string errorOfDeleting = "Error of deleting of version";
private IVersionProcessor versionProcessor;
private RelayCommand addNewVersionCommand;
private RelayCommand returnToVersionCommand;
private RelayCommand deleteVersionCommand;
private RelayCommand exportToNewCommand;
public VersionsViewModel(IVersionProcessor versionProcessor)
public VersionsViewModel(IVersionProcessor versionProcessor) : base(versionProcessor.Versions)
{
this.versionProcessor = versionProcessor;
Refresh();
}
public IDateVersion SelectedVersion { get; set; }
public ObservableCollection<IDateVersion> DateVersions { get; set; } = new();
public RelayCommand AddNewVersionCommand
{
get
@@ -39,7 +43,7 @@ namespace StructureHelper.Windows.MainWindow.Analyses
{
AddNewVersion();
},
b => SelectedVersion is not null);
b => SelectedItem is not null);
}
}
@@ -51,26 +55,109 @@ namespace StructureHelper.Windows.MainWindow.Analyses
{
ReturnToVersion();
},
b => SelectedVersion is not null);
b => SelectedItem is not null);
}
}
public RelayCommand DeleteVersionCommand
{
get
{
return deleteVersionCommand ??= new RelayCommand(obj =>
{
DeleteVersion();
},
b => SelectedItem is not null);
}
}
public RelayCommand ExportToNewCommand
{
get
{
return exportToNewCommand ??= new RelayCommand(obj =>
{
ExportToNew();
},
b => SelectedItem is not null);
}
}
private void ExportToNew()
{
if (SelectedItem is null) return;
SafetyProcessor.RunSafeProcess(ExportingToNew, "Error of export");
}
private void ExportingToNew()
{
if (SelectedItem.AnalysisVersion is ICrossSection oldCrossSection)
{
ProcessCrossSectionAnalysis(oldCrossSection);
}
else
{
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(SelectedItem.AnalysisVersion));
}
ProgramSetting.SetCurrentProjectToNotActual();
Refresh();
}
private void ProcessCrossSectionAnalysis(ICrossSection oldCrossSection)
{
string newComment = "Exported version from: " + SelectedItem.DateTime;
ICrossSection newCrossSection = oldCrossSection.Clone() as ICrossSection;
ICrossSectionNdmAnalysis newAnalysis = new CrossSectionNdmAnalysis()
{
Name = "New NDM Analysis",
Comment = newComment,
};
newAnalysis.VersionProcessor.AddVersion(newCrossSection);
var visualAnalysis = new VisualAnalysis(newAnalysis);
ProgramSetting.CurrentProject.VisualAnalyses.Add(visualAnalysis);
}
private void DeleteVersion()
{
if (SelectedItem is null) return;
if (CheckIfOnceVersion() == true) { return; }
if (ConfirmDeletenig() != true) { return; }
SafetyProcessor.RunSafeProcess(DeletingOfVersion, errorOfDeleting);
}
private void DeletingOfVersion()
{
versionProcessor.Versions.Remove(SelectedItem);
Refresh();
}
private void ReturnToVersion()
{
if (SelectedVersion is null) return;
if (SelectedItem is null) return;
if (CheckIfOnceVersion() == true) { return; }
if (ConfirmDeletenig() != true) { return; }
SafetyProcessor.RunSafeProcess(RemovingOfVersion, errorOfDeleting);
}
private bool ConfirmDeletenig()
{
MessageBoxResult result = MessageBox.Show("Please, confirm deleting", "Delete version(s)?", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
if (result == MessageBoxResult.OK) { return true; }
return false;
}
private bool CheckIfOnceVersion()
{
if (versionProcessor.Versions.Count <= 1)
{
MessageBox.Show("It is not possible to delete last version", "There is only 1 version", MessageBoxButton.OK, MessageBoxImage.Warning, MessageBoxResult.OK);
return;
return true;
}
MessageBoxResult result = MessageBox.Show("Please, confirm deleting", "Delete version(s)?", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
if (result != MessageBoxResult.OK) { return; }
SafetyProcessor.RunSafeProcess(RemovingOfVersion, "Error of deleting of version");
return false;
}
private void RemovingOfVersion()
{
while (SelectedVersion != versionProcessor.GetCurrentVersion())
while (SelectedItem != versionProcessor.GetCurrentVersion())
{
versionProcessor
.Versions
@@ -81,22 +168,22 @@ namespace StructureHelper.Windows.MainWindow.Analyses
private void AddNewVersion()
{
if (SelectedVersion is null) { return; }
if (SelectedItem is null) { return; }
SafetyProcessor.RunSafeProcess(AddVersion, "Error of adding of new version");
}
private void AddVersion()
{
var selectedItem = SelectedVersion.AnalysisVersion as ICloneable;
var selectedItem = SelectedItem.AnalysisVersion as ICloneable;
versionProcessor.AddVersion(selectedItem.Clone() as ISaveable);
Refresh();
}
private void Refresh()
private new void Refresh()
{
DateVersions.Clear();
versionProcessor.Versions.ForEach(x => DateVersions.Add(x));
SelectedVersion = DateVersions[^1];
Items.Clear();
versionProcessor.Versions.ForEach(x => Items.Add(x));
SelectedItem = Items[^1];
}
}

View File

@@ -134,7 +134,9 @@
</Button>
</ToolBar>
<ListBox Grid.Row="1" ItemsSource="{Binding FilteredAnalyses}" SelectedItem="{Binding SelectedAnalysis}">
<ListBox Grid.Row="1"
ItemsSource="{Binding FilteredAnalyses}"
SelectedItem="{Binding SelectedAnalysis}" MouseDoubleClick="ListBox_MouseDoubleClick">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
@@ -142,10 +144,13 @@
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="1" Text="{Binding Analysis.Name}"/>
<TextBlock Grid.Column="3" Text="{Binding Analysis.Tags}"/>
<TextBlock Grid.Column="5" Text="{Binding Analysis.Comment}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>

View File

@@ -41,5 +41,10 @@ namespace StructureHelper.Windows.MainWindow
e.Cancel = true;
};
}
private void ListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
viewModel.AnalysesLogic.RunCommand.Execute(null);
}
}
}

View File

@@ -183,6 +183,10 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
{
SelectedItem.TraceLogger.TraceLoggerEntries.Clear();
}
else
{
SelectedItem.TraceLogger = new ShiftTraceLogger();
}
if (SelectedItem is LimitCurvesCalculator calculator)
{
ShowInteractionDiagramByInputData(calculator);

View File

@@ -5,10 +5,15 @@ using StructureHelperCommon.Models;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows.Input;
namespace StructureHelper.Windows.ViewModels
{
/// <summary>
/// View model which provides CRUD-operations with collection of items
/// </summary>
/// <typeparam name="TItem">Type of items</typeparam>
public class SelectItemVM<TItem> : ViewModelBase, ICRUDViewModel<TItem> where TItem : class
{
private ICommand addCommand;
@@ -16,11 +21,21 @@ namespace StructureHelper.Windows.ViewModels
private ICommand copyCommand;
private ICommand editCommand;
/// <summary>
/// Shadow (true) collection of items
/// </summary>
public List<TItem> Collection { get; set; }
/// <summary>
/// Items which has been added recently
/// </summary>
public TItem NewItem { get; set; }
/// <summary>
/// Item which selected in visual collection
/// </summary>
public TItem SelectedItem { get; set; }
/// <summary>
/// Visual collection of items
/// </summary>
public ObservableCollection<TItem> Items { get; private set; }
public ICommand Add
@@ -128,6 +143,10 @@ namespace StructureHelper.Windows.ViewModels
{
Items = new ObservableCollection<TItem>(Collection);
OnPropertyChanged(nameof(Items));
if (Items.Any())
{
SelectedItem = Items[^1];
}
AfterItemsEdit?.Invoke(this, new CRUDVMEventArgs());
}
public delegate void CRUDHandler(SelectItemVM<TItem> sender, CRUDVMEventArgs e);

View File

@@ -12,6 +12,7 @@ namespace StructureHelperCommon.Models.Analyses
public Guid Id { get; }
public DateTime DateTime { get; set; }
public ISaveable AnalysisVersion { get; set; }
public string Comment { get; set; } = "...";
public DateVersion(Guid id)
{

View File

@@ -11,5 +11,6 @@ namespace StructureHelperCommon.Models.Analyses
{
DateTime DateTime { get; set; }
ISaveable AnalysisVersion { get; set; }
string Comment { get; set; }
}
}

View File

@@ -11,6 +11,8 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LoaderCalculator.Logics;
using LoaderCalculator.Data.Ndms;
namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
{
@@ -21,6 +23,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
private LoaderOptions loaderData;
private Calculator calculator;
private ILoaderResults calcResult;
private IStressLogic stressLogic = new StressLogic();
public IForceTupleInputData InputData { get; set; }
@@ -102,7 +105,8 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
private void ProcessInCorrectLoaderResult()
{
TraceLogger?.AddMessage(string.Intern("Required accuracy rate has not achieved"), TraceLogStatuses.Error);
string message = string.Intern("Required accuracy rate has not achieved");
TraceLogger?.AddMessage(message, TraceLogStatuses.Error);
TraceLogger?.AddMessage($"Current accuracy {calcResult.AccuracyRate}, {calcResult.IterationCounter} iteration has done", TraceLogStatuses.Warning);
result.IsValid = false;
result.Description = string.Intern("Required accuracy rate has not achieved");
@@ -119,6 +123,35 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
TraceLogger = TraceLogger
};
forceTupleTraceResultLogic.TraceResult(result);
CheckOverStrainedNdms();
}
private bool CheckOverStrainedNdms()
{
bool checkResult = true;
TraceLogger?.AddMessage("Checking of limitation of strain");
List<INdm> overStrainedNdms = new();
foreach (var ndm in InputData.NdmCollection)
{
var strain = stressLogic.GetTotalStrain(calcResult.ForceStrainPair.StrainMatrix, ndm);
if (strain < ndm.Material.LimitNegativeStrain || strain > ndm.Material.LimitPositiveStrain)
{
TraceLogger?.AddMessage($"Elementary part x = {ndm.CenterX}, y = {ndm.CenterY} has strain epsilon = {strain}, positive limit strain epsilon+,max = {ndm.Material.LimitPositiveStrain}, negative limit strain epsilon-,min = {ndm.Material.LimitNegativeStrain}", TraceLogStatuses.Warning);
overStrainedNdms.Add(ndm);
}
};
if (overStrainedNdms.Any())
{
result.IsValid = false;
checkResult = false;
string errorMessage = $"There are {overStrainedNdms.Count} elementary parts where strain are over limit";
result.Description += "\n" + errorMessage;
TraceLogger?.AddMessage(errorMessage, TraceLogStatuses.Error);
double sumOverStrainedArea = overStrainedNdms.Sum(x => x.Area);
double totalArea = InputData.NdmCollection.Sum(x => x.Area);
TraceLogger?.AddMessage($"Total area of over strained parts A = {sumOverStrainedArea}(m^2), that is {sumOverStrainedArea / totalArea * 100d}% of total area");
}
return checkResult;
}
private void GetLoaderResult()

View File

@@ -34,7 +34,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(result));
}
calcResult = ((IForcesTupleResult)result).LoaderResults;
TraceLogger?.AddMessage($"Analysis is done succsesfully");
TraceLogger?.AddMessage($"Analysis of internal forces is done succsesfully");
TraceLogger?.AddMessage($"Current accuracy {calcResult.AccuracyRate} has achieved in {calcResult.IterationCounter} iteration", TraceLogStatuses.Debug);
var strainMatrix = calcResult.ForceStrainPair.StrainMatrix;
var stiffness = new StiffnessLogic().GetStiffnessMatrix(ndmCollection, strainMatrix);