浏览代码

support Ray & DepthToBaseLine

melon.yin 2 年之前
父节点
当前提交
f86a6d169a

+ 0 - 835
assets/items.json

@@ -1,839 +1,4 @@
 [
-  {
-    "Name": "Qp/Qs",
-    "Description": "Qp/Qs",
-    "BriefAnnotation": "",
-    "MeasureTypeName": "MultiQpQs",
-    "Categories": ["CARD"],
-    "Calculator": { "AvailableOutputs": [{ "Name": "Ratio", "Description": "Ratio", "Unit": 0, "IsWorking": true }] },
-    "MultiMethodItems": [
-      {
-        "Name": "RVOT/LVOT",
-        "IsWorking": true,
-        "ChildItems": [
-          {
-            "Name": "Qp",
-            "Description": "Qp",
-            "IsWorking": false,
-            "ChildItems": [
-              {
-                "Name": "SV Diam",
-                "Description": "RVOT Diam",
-                "IsWorking": false,
-                "ChildItems": [],
-                "Calculator": { "AvailableOutputs": [{ "Name": "Distance", "Description": "Distance", "Unit": 11, "IsWorking": true }] },
-                "MeasureTypeName": "Distance"
-              },
-              {
-                "Name": "TA",
-                "Description": "RVOT VTI",
-                "IsWorking": false,
-                "ChildItems": [
-                  {
-                    "Name": "Auto",
-                    "Description": "Auto",
-                    "IsWorking": false,
-                    "ChildItems": [],
-                    "Calculator": {
-                      "AvailableOutputs": [
-                        { "Name": "Placeholder", "Description": "RVOT Trace", "Unit": 0, "IsWorking": true },
-                        { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                        { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                        { "Name": "PS", "Description": "PS", "Unit": 70 },
-                        { "Name": "ED", "Description": "ED", "Unit": 70 },
-                        { "Name": "MD", "Description": "MD", "Unit": 70 },
-                        { "Name": "HR", "Description": "HR", "Unit": 132 },
-                        { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                        { "Name": "AT", "Description": "AT", "Unit": 27 },
-                        { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                        { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                        { "Name": "PI", "Description": "PI", "Unit": 0 },
-                        { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                        { "Name": "RI", "Description": "RI", "Unit": 0 },
-                        { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                        { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                        { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                        { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                        { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                        { "Name": "VTI", "Description": "RVOT VTI", "Unit": 10 },
-                        { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                        { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                        { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                        { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                        { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                        { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 },
-                        { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                        { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                        { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                        { "Name": "DT", "Description": "DT", "Unit": 27 },
-                        { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                        { "Name": "VA", "Description": "VA", "Unit": 50 },
-                        { "Name": "A Dur", "Description": "A Dur", "Unit": 27 }
-                      ]
-                    },
-                    "MeasureTypeName": "AutoDopplerTrace"
-                  },
-                  {
-                    "Name": "Semiauto",
-                    "Description": "Semiauto",
-                    "IsWorking": false,
-                    "ChildItems": [],
-                    "Calculator": {
-                      "AvailableOutputs": [
-                        { "Name": "Placeholder", "Description": "RVOT Trace", "Unit": 0, "IsWorking": true },
-                        { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                        { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                        { "Name": "PS", "Description": "PS", "Unit": 70 },
-                        { "Name": "ED", "Description": "ED", "Unit": 70 },
-                        { "Name": "MD", "Description": "MD", "Unit": 70 },
-                        { "Name": "HR", "Description": "HR", "Unit": 132 },
-                        { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                        { "Name": "AT", "Description": "AT", "Unit": 27 },
-                        { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                        { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                        { "Name": "PI", "Description": "PI", "Unit": 0 },
-                        { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                        { "Name": "RI", "Description": "RI", "Unit": 0 },
-                        { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                        { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                        { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                        { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                        { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                        { "Name": "VTI", "Description": "RVOT VTI", "Unit": 10 },
-                        { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                        { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                        { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                        { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                        { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                        { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 },
-                        { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                        { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                        { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                        { "Name": "DT", "Description": "DT", "Unit": 27 },
-                        { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                        { "Name": "VA", "Description": "VA", "Unit": 50 },
-                        { "Name": "A Dur", "Description": "A Dur", "Unit": 27 }
-                      ]
-                    },
-                    "MeasureTypeName": "SemiautoTrace"
-                  },
-                  {
-                    "Name": "Manual",
-                    "Description": "Manual",
-                    "IsWorking": true,
-                    "ChildItems": [],
-                    "Calculator": {
-                      "AvailableOutputs": [
-                        { "Name": "Placeholder", "Description": "RVOT Trace", "Unit": 0, "IsWorking": true },
-                        { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                        { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                        { "Name": "PS", "Description": "PS", "Unit": 70 },
-                        { "Name": "ED", "Description": "ED", "Unit": 70 },
-                        { "Name": "MD", "Description": "MD", "Unit": 70 },
-                        { "Name": "HR", "Description": "HR", "Unit": 132 },
-                        { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                        { "Name": "AT", "Description": "AT", "Unit": 27 },
-                        { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                        { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                        { "Name": "PI", "Description": "PI", "Unit": 0 },
-                        { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                        { "Name": "RI", "Description": "RI", "Unit": 0 },
-                        { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                        { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                        { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                        { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                        { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                        { "Name": "VTI", "Description": "RVOT VTI", "Unit": 10 },
-                        { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                        { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                        { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                        { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                        { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                        { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 },
-                        { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                        { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                        { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                        { "Name": "DT", "Description": "DT", "Unit": 27 },
-                        { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                        { "Name": "VA", "Description": "VA", "Unit": 50 },
-                        { "Name": "A Dur", "Description": "A Dur", "Unit": 27 }
-                      ]
-                    },
-                    "MeasureTypeName": "DopplerTrace"
-                  }
-                ],
-                "Calculator": {
-                  "AvailableOutputs": [
-                    { "Name": "Placeholder", "Description": "RVOT Trace", "Unit": 0, "IsWorking": true },
-                    { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                    { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                    { "Name": "PS", "Description": "PS", "Unit": 70 },
-                    { "Name": "ED", "Description": "ED", "Unit": 70 },
-                    { "Name": "MD", "Description": "MD", "Unit": 70 },
-                    { "Name": "HR", "Description": "HR", "Unit": 132 },
-                    { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                    { "Name": "AT", "Description": "AT", "Unit": 27 },
-                    { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                    { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                    { "Name": "PI", "Description": "PI", "Unit": 0 },
-                    { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                    { "Name": "RI", "Description": "RI", "Unit": 0 },
-                    { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                    { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                    { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                    { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                    { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                    { "Name": "VTI", "Description": "RVOT VTI", "Unit": 10 },
-                    { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                    { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                    { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                    { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                    { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                    { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                    { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                    { "Name": "DT", "Description": "DT", "Unit": 27 },
-                    { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                    { "Name": "VA", "Description": "VA", "Unit": 50 },
-                    { "Name": "A Dur", "Description": "A Dur", "Unit": 27 },
-                    { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                    { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 }
-                  ]
-                },
-                "MeasureTypeName": "SemiManualTrace"
-              }
-            ],
-            "Calculator": {
-              "AvailableOutputs": [
-                { "Name": "SV", "Description": "SV", "Unit": 62, "IsWorking": true },
-                { "Name": "SI", "Description": "SI", "Unit": 141 },
-                { "Name": "CO", "Description": "CO", "Unit": 93 },
-                { "Name": "CI", "Description": "CI", "Unit": 155 },
-                { "Name": "CSA", "Description": "CSA", "Unit": 50 }
-              ]
-            },
-            "MeasureTypeName": "Sv"
-          },
-          {
-            "Name": "Qs",
-            "Description": "Qs",
-            "IsWorking": false,
-            "ChildItems": [
-              {
-                "Name": "SV Diam",
-                "Description": "LVOT Diam",
-                "IsWorking": false,
-                "ChildItems": [],
-                "Calculator": { "AvailableOutputs": [{ "Name": "Distance", "Description": "Distance", "Unit": 11, "IsWorking": true }] },
-                "MeasureTypeName": "Distance"
-              },
-              {
-                "Name": "TA",
-                "Description": "LVOT VTI",
-                "IsWorking": false,
-                "ChildItems": [
-                  {
-                    "Name": "Auto",
-                    "Description": "Auto",
-                    "IsWorking": false,
-                    "ChildItems": [],
-                    "Calculator": {
-                      "AvailableOutputs": [
-                        { "Name": "Placeholder", "Description": "LVOT Trace", "Unit": 0, "IsWorking": true },
-                        { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                        { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                        { "Name": "PS", "Description": "PS", "Unit": 70 },
-                        { "Name": "ED", "Description": "ED", "Unit": 70 },
-                        { "Name": "MD", "Description": "MD", "Unit": 70 },
-                        { "Name": "HR", "Description": "HR", "Unit": 132 },
-                        { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                        { "Name": "AT", "Description": "AT", "Unit": 27 },
-                        { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                        { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                        { "Name": "PI", "Description": "PI", "Unit": 0 },
-                        { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                        { "Name": "RI", "Description": "RI", "Unit": 0 },
-                        { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                        { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                        { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                        { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                        { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                        { "Name": "VTI", "Description": "LVOT VTI", "Unit": 10 },
-                        { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                        { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                        { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                        { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                        { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                        { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 },
-                        { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                        { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                        { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                        { "Name": "DT", "Description": "DT", "Unit": 27 },
-                        { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                        { "Name": "VA", "Description": "VA", "Unit": 50 },
-                        { "Name": "A Dur", "Description": "A Dur", "Unit": 27 }
-                      ]
-                    },
-                    "MeasureTypeName": "AutoDopplerTrace"
-                  },
-                  {
-                    "Name": "Semiauto",
-                    "Description": "Semiauto",
-                    "IsWorking": false,
-                    "ChildItems": [],
-                    "Calculator": {
-                      "AvailableOutputs": [
-                        { "Name": "Placeholder", "Description": "LVOT Trace", "Unit": 0, "IsWorking": true },
-                        { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                        { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                        { "Name": "PS", "Description": "PS", "Unit": 70 },
-                        { "Name": "ED", "Description": "ED", "Unit": 70 },
-                        { "Name": "MD", "Description": "MD", "Unit": 70 },
-                        { "Name": "HR", "Description": "HR", "Unit": 132 },
-                        { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                        { "Name": "AT", "Description": "AT", "Unit": 27 },
-                        { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                        { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                        { "Name": "PI", "Description": "PI", "Unit": 0 },
-                        { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                        { "Name": "RI", "Description": "RI", "Unit": 0 },
-                        { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                        { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                        { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                        { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                        { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                        { "Name": "VTI", "Description": "LVOT VTI", "Unit": 10 },
-                        { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                        { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                        { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                        { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                        { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                        { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 },
-                        { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                        { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                        { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                        { "Name": "DT", "Description": "DT", "Unit": 27 },
-                        { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                        { "Name": "VA", "Description": "VA", "Unit": 50 },
-                        { "Name": "A Dur", "Description": "A Dur", "Unit": 27 }
-                      ]
-                    },
-                    "MeasureTypeName": "SemiautoTrace"
-                  },
-                  {
-                    "Name": "Manual",
-                    "Description": "Manual",
-                    "IsWorking": true,
-                    "ChildItems": [],
-                    "Calculator": {
-                      "AvailableOutputs": [
-                        { "Name": "Placeholder", "Description": "LVOT Trace", "Unit": 0, "IsWorking": true },
-                        { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                        { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                        { "Name": "PS", "Description": "PS", "Unit": 70 },
-                        { "Name": "ED", "Description": "ED", "Unit": 70 },
-                        { "Name": "MD", "Description": "MD", "Unit": 70 },
-                        { "Name": "HR", "Description": "HR", "Unit": 132 },
-                        { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                        { "Name": "AT", "Description": "AT", "Unit": 27 },
-                        { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                        { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                        { "Name": "PI", "Description": "PI", "Unit": 0 },
-                        { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                        { "Name": "RI", "Description": "RI", "Unit": 0 },
-                        { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                        { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                        { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                        { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                        { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                        { "Name": "VTI", "Description": "LVOT VTI", "Unit": 10 },
-                        { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                        { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                        { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                        { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                        { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                        { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 },
-                        { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                        { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                        { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                        { "Name": "DT", "Description": "DT", "Unit": 27 },
-                        { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                        { "Name": "VA", "Description": "VA", "Unit": 50 },
-                        { "Name": "A Dur", "Description": "A Dur", "Unit": 27 }
-                      ]
-                    },
-                    "MeasureTypeName": "DopplerTrace"
-                  }
-                ],
-                "Calculator": {
-                  "AvailableOutputs": [
-                    { "Name": "Placeholder", "Description": "LVOT Trace", "Unit": 0, "IsWorking": true },
-                    { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                    { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                    { "Name": "PS", "Description": "PS", "Unit": 70 },
-                    { "Name": "ED", "Description": "ED", "Unit": 70 },
-                    { "Name": "MD", "Description": "MD", "Unit": 70 },
-                    { "Name": "HR", "Description": "HR", "Unit": 132 },
-                    { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                    { "Name": "AT", "Description": "AT", "Unit": 27 },
-                    { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                    { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                    { "Name": "PI", "Description": "PI", "Unit": 0 },
-                    { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                    { "Name": "RI", "Description": "RI", "Unit": 0 },
-                    { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                    { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                    { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                    { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                    { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                    { "Name": "VTI", "Description": "LVOT VTI", "Unit": 10 },
-                    { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                    { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                    { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                    { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                    { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                    { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                    { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                    { "Name": "DT", "Description": "DT", "Unit": 27 },
-                    { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                    { "Name": "VA", "Description": "VA", "Unit": 50 },
-                    { "Name": "A Dur", "Description": "A Dur", "Unit": 27 },
-                    { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                    { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 }
-                  ]
-                },
-                "MeasureTypeName": "SemiManualTrace"
-              }
-            ],
-            "Calculator": {
-              "AvailableOutputs": [
-                { "Name": "SV", "Description": "SV", "Unit": 62, "IsWorking": true },
-                { "Name": "SI", "Description": "SI", "Unit": 141 },
-                { "Name": "CO", "Description": "CO", "Unit": 93 },
-                { "Name": "CI", "Description": "CI", "Unit": 155 },
-                { "Name": "CSA", "Description": "CSA", "Unit": 50 }
-              ]
-            },
-            "MeasureTypeName": "Sv"
-          }
-        ],
-        "Calculator": { "AvailableOutputs": [{ "Name": "Ratio", "Description": "Ratio", "Unit": 0, "IsWorking": true }] },
-        "MeasureTypeName": "QpQs"
-      },
-      {
-        "Name": "Pulmonic/Systemic",
-        "IsWorking": false,
-        "ChildItems": [
-          {
-            "Name": "Qp",
-            "Description": "Qp",
-            "IsWorking": false,
-            "ChildItems": [
-              {
-                "Name": "SV Diam",
-                "Description": "Pulmonic Diam",
-                "IsWorking": false,
-                "ChildItems": [],
-                "Calculator": { "AvailableOutputs": [{ "Name": "Distance", "Description": "Distance", "Unit": 11, "IsWorking": true }] },
-                "MeasureTypeName": "Distance"
-              },
-              {
-                "Name": "TA",
-                "Description": "Pulmonic VTI",
-                "IsWorking": false,
-                "ChildItems": [
-                  {
-                    "Name": "Auto",
-                    "Description": "Auto",
-                    "IsWorking": false,
-                    "ChildItems": [],
-                    "Calculator": {
-                      "AvailableOutputs": [
-                        { "Name": "Placeholder", "Description": "Pulmonic Trace", "Unit": 0, "IsWorking": true },
-                        { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                        { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                        { "Name": "PS", "Description": "PS", "Unit": 70 },
-                        { "Name": "ED", "Description": "ED", "Unit": 70 },
-                        { "Name": "MD", "Description": "MD", "Unit": 70 },
-                        { "Name": "HR", "Description": "HR", "Unit": 132 },
-                        { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                        { "Name": "AT", "Description": "AT", "Unit": 27 },
-                        { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                        { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                        { "Name": "PI", "Description": "PI", "Unit": 0 },
-                        { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                        { "Name": "RI", "Description": "RI", "Unit": 0 },
-                        { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                        { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                        { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                        { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                        { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                        { "Name": "VTI", "Description": "Pulmonic VTI", "Unit": 10 },
-                        { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                        { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                        { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                        { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                        { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                        { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 },
-                        { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                        { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                        { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                        { "Name": "DT", "Description": "DT", "Unit": 27 },
-                        { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                        { "Name": "VA", "Description": "VA", "Unit": 50 },
-                        { "Name": "A Dur", "Description": "A Dur", "Unit": 27 }
-                      ]
-                    },
-                    "MeasureTypeName": "AutoDopplerTrace"
-                  },
-                  {
-                    "Name": "Semiauto",
-                    "Description": "Semiauto",
-                    "IsWorking": false,
-                    "ChildItems": [],
-                    "Calculator": {
-                      "AvailableOutputs": [
-                        { "Name": "Placeholder", "Description": "Pulmonic Trace", "Unit": 0, "IsWorking": true },
-                        { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                        { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                        { "Name": "PS", "Description": "PS", "Unit": 70 },
-                        { "Name": "ED", "Description": "ED", "Unit": 70 },
-                        { "Name": "MD", "Description": "MD", "Unit": 70 },
-                        { "Name": "HR", "Description": "HR", "Unit": 132 },
-                        { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                        { "Name": "AT", "Description": "AT", "Unit": 27 },
-                        { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                        { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                        { "Name": "PI", "Description": "PI", "Unit": 0 },
-                        { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                        { "Name": "RI", "Description": "RI", "Unit": 0 },
-                        { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                        { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                        { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                        { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                        { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                        { "Name": "VTI", "Description": "Pulmonic VTI", "Unit": 10 },
-                        { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                        { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                        { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                        { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                        { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                        { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 },
-                        { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                        { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                        { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                        { "Name": "DT", "Description": "DT", "Unit": 27 },
-                        { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                        { "Name": "VA", "Description": "VA", "Unit": 50 },
-                        { "Name": "A Dur", "Description": "A Dur", "Unit": 27 }
-                      ]
-                    },
-                    "MeasureTypeName": "SemiautoTrace"
-                  },
-                  {
-                    "Name": "Manual",
-                    "Description": "Manual",
-                    "IsWorking": true,
-                    "ChildItems": [],
-                    "Calculator": {
-                      "AvailableOutputs": [
-                        { "Name": "Placeholder", "Description": "Pulmonic Trace", "Unit": 0, "IsWorking": true },
-                        { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                        { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                        { "Name": "PS", "Description": "PS", "Unit": 70 },
-                        { "Name": "ED", "Description": "ED", "Unit": 70 },
-                        { "Name": "MD", "Description": "MD", "Unit": 70 },
-                        { "Name": "HR", "Description": "HR", "Unit": 132 },
-                        { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                        { "Name": "AT", "Description": "AT", "Unit": 27 },
-                        { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                        { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                        { "Name": "PI", "Description": "PI", "Unit": 0 },
-                        { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                        { "Name": "RI", "Description": "RI", "Unit": 0 },
-                        { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                        { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                        { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                        { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                        { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                        { "Name": "VTI", "Description": "Pulmonic VTI", "Unit": 10 },
-                        { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                        { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                        { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                        { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                        { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                        { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 },
-                        { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                        { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                        { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                        { "Name": "DT", "Description": "DT", "Unit": 27 },
-                        { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                        { "Name": "VA", "Description": "VA", "Unit": 50 },
-                        { "Name": "A Dur", "Description": "A Dur", "Unit": 27 }
-                      ]
-                    },
-                    "MeasureTypeName": "DopplerTrace"
-                  }
-                ],
-                "Calculator": {
-                  "AvailableOutputs": [
-                    { "Name": "Placeholder", "Description": "Pulmonic Trace", "Unit": 0, "IsWorking": true },
-                    { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                    { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                    { "Name": "PS", "Description": "PS", "Unit": 70 },
-                    { "Name": "ED", "Description": "ED", "Unit": 70 },
-                    { "Name": "MD", "Description": "MD", "Unit": 70 },
-                    { "Name": "HR", "Description": "HR", "Unit": 132 },
-                    { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                    { "Name": "AT", "Description": "AT", "Unit": 27 },
-                    { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                    { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                    { "Name": "PI", "Description": "PI", "Unit": 0 },
-                    { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                    { "Name": "RI", "Description": "RI", "Unit": 0 },
-                    { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                    { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                    { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                    { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                    { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                    { "Name": "VTI", "Description": "Pulmonic VTI", "Unit": 10 },
-                    { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                    { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                    { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                    { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                    { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                    { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                    { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                    { "Name": "DT", "Description": "DT", "Unit": 27 },
-                    { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                    { "Name": "VA", "Description": "VA", "Unit": 50 },
-                    { "Name": "A Dur", "Description": "A Dur", "Unit": 27 },
-                    { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                    { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 }
-                  ]
-                },
-                "MeasureTypeName": "SemiManualTrace"
-              }
-            ],
-            "Calculator": {
-              "AvailableOutputs": [
-                { "Name": "SV", "Description": "SV", "Unit": 62, "IsWorking": true },
-                { "Name": "SI", "Description": "SI", "Unit": 141 },
-                { "Name": "CO", "Description": "CO", "Unit": 93 },
-                { "Name": "CI", "Description": "CI", "Unit": 155 },
-                { "Name": "CSA", "Description": "CSA", "Unit": 50 }
-              ]
-            },
-            "MeasureTypeName": "Sv"
-          },
-          {
-            "Name": "Qs",
-            "Description": "Qs",
-            "IsWorking": false,
-            "ChildItems": [
-              {
-                "Name": "SV Diam",
-                "Description": "Systemic Diam",
-                "IsWorking": false,
-                "ChildItems": [],
-                "Calculator": { "AvailableOutputs": [{ "Name": "Distance", "Description": "Distance", "Unit": 11, "IsWorking": true }] },
-                "MeasureTypeName": "Distance"
-              },
-              {
-                "Name": "TA",
-                "Description": "Systemic VTI",
-                "IsWorking": false,
-                "ChildItems": [
-                  {
-                    "Name": "Auto",
-                    "Description": "Auto",
-                    "IsWorking": false,
-                    "ChildItems": [],
-                    "Calculator": {
-                      "AvailableOutputs": [
-                        { "Name": "Placeholder", "Description": "Systemic Trace", "Unit": 0, "IsWorking": true },
-                        { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                        { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                        { "Name": "PS", "Description": "PS", "Unit": 70 },
-                        { "Name": "ED", "Description": "ED", "Unit": 70 },
-                        { "Name": "MD", "Description": "MD", "Unit": 70 },
-                        { "Name": "HR", "Description": "HR", "Unit": 132 },
-                        { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                        { "Name": "AT", "Description": "AT", "Unit": 27 },
-                        { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                        { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                        { "Name": "PI", "Description": "PI", "Unit": 0 },
-                        { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                        { "Name": "RI", "Description": "RI", "Unit": 0 },
-                        { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                        { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                        { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                        { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                        { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                        { "Name": "VTI", "Description": "Systemic VTI", "Unit": 10 },
-                        { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                        { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                        { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                        { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                        { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                        { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 },
-                        { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                        { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                        { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                        { "Name": "DT", "Description": "DT", "Unit": 27 },
-                        { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                        { "Name": "VA", "Description": "VA", "Unit": 50 },
-                        { "Name": "A Dur", "Description": "A Dur", "Unit": 27 }
-                      ]
-                    },
-                    "MeasureTypeName": "AutoDopplerTrace"
-                  },
-                  {
-                    "Name": "Semiauto",
-                    "Description": "Semiauto",
-                    "IsWorking": false,
-                    "ChildItems": [],
-                    "Calculator": {
-                      "AvailableOutputs": [
-                        { "Name": "Placeholder", "Description": "Systemic Trace", "Unit": 0, "IsWorking": true },
-                        { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                        { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                        { "Name": "PS", "Description": "PS", "Unit": 70 },
-                        { "Name": "ED", "Description": "ED", "Unit": 70 },
-                        { "Name": "MD", "Description": "MD", "Unit": 70 },
-                        { "Name": "HR", "Description": "HR", "Unit": 132 },
-                        { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                        { "Name": "AT", "Description": "AT", "Unit": 27 },
-                        { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                        { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                        { "Name": "PI", "Description": "PI", "Unit": 0 },
-                        { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                        { "Name": "RI", "Description": "RI", "Unit": 0 },
-                        { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                        { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                        { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                        { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                        { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                        { "Name": "VTI", "Description": "Systemic VTI", "Unit": 10 },
-                        { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                        { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                        { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                        { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                        { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                        { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 },
-                        { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                        { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                        { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                        { "Name": "DT", "Description": "DT", "Unit": 27 },
-                        { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                        { "Name": "VA", "Description": "VA", "Unit": 50 },
-                        { "Name": "A Dur", "Description": "A Dur", "Unit": 27 }
-                      ]
-                    },
-                    "MeasureTypeName": "SemiautoTrace"
-                  },
-                  {
-                    "Name": "Manual",
-                    "Description": "Manual",
-                    "IsWorking": true,
-                    "ChildItems": [],
-                    "Calculator": {
-                      "AvailableOutputs": [
-                        { "Name": "Placeholder", "Description": "Systemic Trace", "Unit": 0, "IsWorking": true },
-                        { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                        { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                        { "Name": "PS", "Description": "PS", "Unit": 70 },
-                        { "Name": "ED", "Description": "ED", "Unit": 70 },
-                        { "Name": "MD", "Description": "MD", "Unit": 70 },
-                        { "Name": "HR", "Description": "HR", "Unit": 132 },
-                        { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                        { "Name": "AT", "Description": "AT", "Unit": 27 },
-                        { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                        { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                        { "Name": "PI", "Description": "PI", "Unit": 0 },
-                        { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                        { "Name": "RI", "Description": "RI", "Unit": 0 },
-                        { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                        { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                        { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                        { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                        { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                        { "Name": "VTI", "Description": "Systemic VTI", "Unit": 10 },
-                        { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                        { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                        { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                        { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                        { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                        { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 },
-                        { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                        { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                        { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                        { "Name": "DT", "Description": "DT", "Unit": 27 },
-                        { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                        { "Name": "VA", "Description": "VA", "Unit": 50 },
-                        { "Name": "A Dur", "Description": "A Dur", "Unit": 27 }
-                      ]
-                    },
-                    "MeasureTypeName": "DopplerTrace"
-                  }
-                ],
-                "Calculator": {
-                  "AvailableOutputs": [
-                    { "Name": "Placeholder", "Description": "Systemic Trace", "Unit": 0, "IsWorking": true },
-                    { "Name": "TAMAX", "Description": "Mean Vel(Max Mode)", "Unit": 70 },
-                    { "Name": "TAMEAN", "Description": "Mean Vel(Mean Mode)", "Unit": 70 },
-                    { "Name": "PS", "Description": "PS", "Unit": 70 },
-                    { "Name": "ED", "Description": "ED", "Unit": 70 },
-                    { "Name": "MD", "Description": "MD", "Unit": 70 },
-                    { "Name": "HR", "Description": "HR", "Unit": 132 },
-                    { "Name": "Acceleration", "Description": "Acceleration", "Unit": 80 },
-                    { "Name": "AT", "Description": "AT", "Unit": 27 },
-                    { "Name": "PS/ED", "Description": "PS/ED", "Unit": 0 },
-                    { "Name": "ED/PS", "Description": "ED/PS", "Unit": 0 },
-                    { "Name": "PI", "Description": "PI", "Unit": 0 },
-                    { "Name": "PI(MD)", "Description": "PI(MD)", "Unit": 0 },
-                    { "Name": "RI", "Description": "RI", "Unit": 0 },
-                    { "Name": "RI(MD)", "Description": "RI(MD)", "Unit": 0 },
-                    { "Name": "Max PG", "Description": "PG Rel", "Unit": 110 },
-                    { "Name": "Vmax", "Description": "Vmax", "Unit": 70 },
-                    { "Name": "Vmean", "Description": "Vmean", "Unit": 70 },
-                    { "Name": "Peak PG", "Description": "Peak PG", "Unit": 110 },
-                    { "Name": "VTI", "Description": "Systemic VTI", "Unit": 10 },
-                    { "Name": "VTI(Mean)", "Description": "VTI(Mean)", "Unit": 10 },
-                    { "Name": "MPG", "Description": "Mean PG(Max Mode)", "Unit": 110 },
-                    { "Name": "MMPG", "Description": "Mean PG(Mean Mode)", "Unit": 110 },
-                    { "Name": "Ti Env", "Description": "E. Time", "Unit": 27 },
-                    { "Name": "Vel E", "Description": "Vel E", "Unit": 70 },
-                    { "Name": "Vel A", "Description": "Vel A", "Unit": 70 },
-                    { "Name": "V E/A", "Description": "V E/A", "Unit": 0 },
-                    { "Name": "DT", "Description": "DT", "Unit": 27 },
-                    { "Name": "PHT", "Description": "PHT", "Unit": 27 },
-                    { "Name": "VA", "Description": "VA", "Unit": 50 },
-                    { "Name": "A Dur", "Description": "A Dur", "Unit": 27 },
-                    { "Name": "AT/DT", "Description": "AT/DT", "Unit": 0 },
-                    { "Name": "AT/ET", "Description": "AT/ET", "Unit": 0 }
-                  ]
-                },
-                "MeasureTypeName": "SemiManualTrace"
-              }
-            ],
-            "Calculator": {
-              "AvailableOutputs": [
-                { "Name": "SV", "Description": "SV", "Unit": 62, "IsWorking": true },
-                { "Name": "SI", "Description": "SI", "Unit": 141 },
-                { "Name": "CO", "Description": "CO", "Unit": 93 },
-                { "Name": "CI", "Description": "CI", "Unit": 155 },
-                { "Name": "CSA", "Description": "CSA", "Unit": 50 }
-              ]
-            },
-            "MeasureTypeName": "Sv"
-          }
-        ],
-        "Calculator": { "AvailableOutputs": [{ "Name": "Ratio", "Description": "Ratio", "Unit": 0, "IsWorking": true }] },
-        "MeasureTypeName": "QpQs"
-      }
-    ],
-    "MethodChildItems": []
-  },
   {
     "Name": "M_Distance",
     "Description": "SV D",

+ 9 - 0
lib/interfaces/process/items/item_metas.dart

@@ -37,6 +37,15 @@ class ItemMeta {
     }
     return null;
   }
+
+  /// 根据类型获取子项
+  ItemMeta? getChildByType(String type) {
+    final matchList = childItems.where((e) => e.measureType == type);
+    if (matchList.isNotEmpty) {
+      return matchList.first;
+    }
+    return null;
+  }
 }
 
 class ItemOutputMeta {

+ 2 - 0
lib/interfaces/process/items/terms.dart

@@ -12,6 +12,8 @@ class MeasureUnsupportedTerms {
 }
 
 class MeasureTerms {
+  MeasureTerms._();
+
   /// M 模式(TissueTM)下的测量项
   /// 见 Vinno.Modules.MeasureModule 内
   /// ItemMetas\MeasureAppMetas.Config.cs

+ 1 - 0
lib/item_create_test.dart

@@ -100,6 +100,7 @@ class TestItems {
     MeasureTerms.Velocity,
     MeasureTerms.RUV,
     "TJS",
+    MeasureTerms.BNS,
   ];
 
   static final C_DISTANCE_ITEMS = [

+ 8 - 0
lib/process/calcuators/calculator.dart

@@ -90,4 +90,12 @@ abstract class Calculator<T extends IMeasureItem, TValue>
     }
     return null;
   }
+
+  @protected
+  TF? findBaselineFeatue<TF extends MeasureItemFeature>(MeasureItem child) {
+    if (child.measuredFeatures.isNotEmpty) {
+      return child.measuredFeatures.first as TF;
+    }
+    return child.feature as TF?;
+  }
 }

+ 37 - 0
lib/process/calcuators/depth2baseline.dart

@@ -0,0 +1,37 @@
+import 'package:fis_measure/interfaces/date_types/matrix.dart';
+import 'package:fis_measure/process/primitives/combos/depth2baseline.dart';
+import 'package:fis_measure/process/primitives/location.dart';
+import 'package:fis_measure/process/primitives/ray.dart';
+import 'package:vid/us/vid_us_unit.dart';
+
+import 'calculator.dart';
+
+class DistanceToRayCal extends Calculator<DepthToBaseLine, double> {
+  DistanceToRayCal(DepthToBaseLine ref) : super(ref);
+
+  @override
+  void calculate() {
+    if (ref.feature == null) return;
+
+    final feature = ref.feature!;
+    final depthFeature = findBaselineFeatue<LocationFeature>(ref.depth);
+    final baselineFeature = findBaselineFeatue<RayFeature>(ref.baseline);
+    if (depthFeature == null || baselineFeature == null) return;
+
+    final depthLocation = depthFeature.point;
+    final baseLinePoint = baselineFeature.point;
+    final baseLineAngle = baselineFeature.angle;
+    var matrix = DMatrix();
+    matrix.rotateAt(
+      (baselineFeature.isReverse ? 1 : -1) * baseLineAngle,
+      baseLinePoint.x,
+      baseLinePoint.y,
+    );
+
+    var pt = matrix.transformWidthPoint(depthLocation);
+
+    var distance = pt.y - baseLinePoint.y;
+
+    feature.updateFloatValue(ref.meta.outputs.first, distance, VidUsUnit.cm);
+  }
+}

+ 22 - 0
lib/process/calcuators/ray.dart

@@ -0,0 +1,22 @@
+import 'package:fis_measure/interfaces/process/items/terms.dart';
+import 'package:fis_measure/process/primitives/ray.dart';
+import 'package:vid/us/vid_us_unit.dart';
+
+import 'calculator.dart';
+
+class RayDepthCal extends Calculator<Ray, double> {
+  RayDepthCal(Ray ref) : super(ref);
+
+  @override
+  void calculate() {
+    if (ref.feature == null) return;
+
+    final feature = ref.feature!;
+    for (var output in ref.meta.outputs) {
+      if (output.name == MeasureTerms.Angle) {
+        var value = feature.angle;
+        feature.updateFloatValue(output, value, VidUsUnit.degree);
+      }
+    }
+  }
+}

+ 9 - 1
lib/process/items/factory.dart

@@ -2,6 +2,7 @@ import 'package:fis_measure/interfaces/process/items/item.dart';
 import 'package:fis_measure/interfaces/process/items/item_metas.dart';
 import 'package:fis_measure/interfaces/process/items/types.dart';
 import 'package:fis_measure/process/items/item.dart';
+import 'package:fis_measure/process/primitives/combos/depth2baseline.dart';
 import 'package:fis_measure/process/primitives/combos/lwh_straightline.dart';
 import 'package:fis_measure/process/primitives/combos/two_area.dart';
 import 'package:fis_measure/process/primitives/combos/two_straightline.dart';
@@ -9,6 +10,7 @@ import 'package:fis_measure/process/primitives/ellipse.dart';
 import 'package:fis_measure/process/primitives/location.dart';
 import 'package:fis_measure/process/primitives/polyline.dart';
 import 'package:fis_measure/process/primitives/polyline_angle.dart';
+import 'package:fis_measure/process/primitives/ray.dart';
 import 'package:fis_measure/process/primitives/spline.dart';
 import 'package:fis_measure/process/primitives/straightline.dart';
 import 'package:fis_measure/process/primitives/trace.dart';
@@ -67,8 +69,14 @@ class MeasureItemFactory {
   }
 
   static void _registerItemCreators() {
-    _singleton._register(MeasureTypes.Distance, StraightLine.createDistance);
+    // Locations
     _singleton._register(MeasureTypes.Depth, Location.createTissueDepth);
+    _singleton._register(
+        MeasureTypes.DepthToBaseLine, DepthToBaseLine.createDepthToBaseLine);
+
+    // Straight
+    _singleton._register(MeasureTypes.Distance, StraightLine.createDistance);
+    _singleton._register(MeasureTypes.Ray, Ray.createRay);
 
     // Three StraightLine
     _singleton._register(

+ 2 - 2
lib/process/items/item.dart

@@ -18,7 +18,7 @@ abstract class MeasureItem<T extends MeasureItemFeature> extends IMeasureItem {
   ItemStates _state = ItemStates.waiting;
   ICalculator? _calculator;
   T? _feature;
-  final List<IMeasureItemFeature> _measuredFeatures = [];
+  final List<T> _measuredFeatures = [];
   final application = Get.find<IApplication>();
 
   MeasureItem(ItemMeta meta, [IMeasureItem? parent]) {
@@ -174,7 +174,7 @@ abstract class MeasureItem<T extends MeasureItemFeature> extends IMeasureItem {
   bool onExecuteTouch(PointInfo args);
 
   @override
-  List<IMeasureItemFeature> get measuredFeatures => _measuredFeatures;
+  List<T> get measuredFeatures => _measuredFeatures;
 
   @override
   int assignId() {

+ 14 - 32
lib/process/items/item_feature.dart

@@ -139,34 +139,9 @@ abstract class MeasureItemFeature implements IMeasureItemFeature {
       displayText = '$id.${refItem.description}';
     }
 
-    final fontSize = 14.0 * refItem.scaleRatio; // TODO: from config
-    final letterSpacing = 0.0 * refItem.scaleRatio;
-    final style = TextStyle(
-      fontSize: fontSize,
-      color: MeasureColors.Primary,
-      // fontWeight: FontWeight.bold,
-      letterSpacing: letterSpacing,
-    );
-
     final point = innerPoints[0];
-    // TODO : fix bug
-
-    final width = boundingTextSize(displayText, style).width;
-    // final width = fontSize * displayText.length +
-    //     letterSpacing * (displayText.length - 1);
-    final vertexOffsetW = vertexSize / 2;
     var offset = convert2ViewPoint(size, point).toOffset();
-    if (offset.dx < width) {
-      offset = offset.translate(fontSize + vertexOffsetW, -fontSize);
-    } else {
-      offset = offset.translate(-width - vertexOffsetW, -fontSize);
-    }
-
-    canvas.drawText(
-      displayText,
-      offset,
-      style: style,
-    );
+    return drawCustomId(canvas, size, offset, displayText);
   }
 
   /// 画自定义位置的序号
@@ -176,6 +151,7 @@ abstract class MeasureItemFeature implements IMeasureItemFeature {
   void drawCustomId(Canvas canvas, Size size, Offset offset, [String? text]) {
     final displayText = text ?? id.toString();
     final fontSize = 14.0 * refItem.scaleRatio; // TODO: from config
+    final fontOffsetY = 4.0 * refItem.scaleRatio;
     final letterSpacing = 0.0 * refItem.scaleRatio;
     final style = TextStyle(
       fontSize: fontSize,
@@ -184,15 +160,21 @@ abstract class MeasureItemFeature implements IMeasureItemFeature {
       letterSpacing: letterSpacing,
     );
 
-    final width = boundingTextSize(displayText, style).width;
-    // final width = fontSize * displayText.length +
-    //     letterSpacing * (displayText.length - 1);
+    final fontPlace = boundingTextSize(displayText, style);
+    double transY = 0;
+    double transX = 0;
     final vertexOffsetW = vertexSize / 2;
-    if (offset.dx < width) {
-      offset = offset.translate(fontSize + vertexOffsetW, -fontSize);
+    if (offset.dx < fontPlace.width) {
+      transX = fontSize + vertexOffsetW;
+    } else {
+      transX = -fontPlace.width - vertexOffsetW;
+    }
+    if (offset.dy < fontPlace.height + fontOffsetY) {
+      transY = fontOffsetY;
     } else {
-      offset = offset.translate(-width - vertexOffsetW, -fontSize);
+      transY = -fontPlace.height - fontOffsetY;
     }
+    offset = offset.translate(transX, transY);
 
     canvas.drawText(
       displayText,

+ 12 - 0
lib/process/items/top_item_feature.dart

@@ -1,4 +1,6 @@
 import 'package:fis_measure/interfaces/process/items/item.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter/painting.dart';
 
 import 'item_feature.dart';
 import 'top_item.dart';
@@ -8,4 +10,14 @@ abstract class TopMeasureItemFeature extends MeasureItemFeature {
 
   @override
   TopMeasureItem get refItem => super.refItem as TopMeasureItem;
+
+  @override
+  void paint(Canvas canvas, Size size) {
+    for (var item in refItem.childItems) {
+      for (var feature in item.measuredFeatures) {
+        feature.paint(canvas, size);
+      }
+      item.feature?.paint(canvas, size);
+    }
+  }
 }

+ 128 - 0
lib/process/primitives/combos/depth2baseline.dart

@@ -0,0 +1,128 @@
+import 'dart:ui';
+
+import 'package:fis_measure/interfaces/date_types/point.dart';
+import 'package:fis_measure/interfaces/enums/items.dart';
+import 'package:fis_measure/interfaces/process/items/item.dart';
+import 'package:fis_measure/interfaces/process/items/item_metas.dart';
+import 'package:fis_measure/interfaces/process/items/types.dart';
+import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
+import 'package:fis_measure/process/calcuators/depth.dart';
+import 'package:fis_measure/process/calcuators/depth2baseline.dart';
+import 'package:fis_measure/process/items/item.dart';
+import 'package:fis_measure/process/items/item_feature.dart';
+import 'package:fis_measure/process/items/top_item.dart';
+import 'package:fis_measure/process/items/top_item_feature.dart';
+import 'package:fis_measure/process/primitives/location.dart';
+import 'package:fis_measure/process/primitives/ray.dart';
+
+class DepthToBaseLine extends TopMeasureItem<DepthToBaseLineFeature> {
+  late final Ray baseline;
+  late final Location depth;
+
+  DepthToBaseLine(ItemMeta meta) : super(meta) {
+    final metaBaseLine = meta.getChildByType(MeasureTypes.Ray)!;
+    final metaDepth = meta.getChildByType(MeasureTypes.Distance)!;
+    baseline = Ray.createRay(metaBaseLine, this);
+    depth = _Depth.createDepth(metaDepth, this);
+    childItems.add(baseline);
+    childItems.add(depth);
+  }
+
+  @override
+  bool onExecuteMouse(PointInfo args) {
+    if (feature == null) {
+      feature = DepthToBaseLineFeature(this);
+      listenChildrenUpdate();
+    }
+
+    if (args.pointType == PointInfoType.mouseDown) {
+      if (childrenAllDone) {
+        workingChild.clear();
+      }
+    }
+    feature?.hostVisualArea = args.hostVisualArea;
+    final result = workingChild.execute(args);
+    doCalculate();
+    return result;
+  }
+
+  @override
+  bool onExecuteTouch(PointInfo args) {
+    return workingChild.execute(args);
+  }
+
+  static DepthToBaseLine createDepthToBaseLine(ItemMeta meta,
+      [IMeasureItem? parent]) {
+    if (meta.measureType != MeasureTypes.DepthToBaseLine) {
+      throw ArgumentError();
+    }
+    var location = DepthToBaseLine(meta);
+    location.calculator = DistanceToRayCal(location);
+
+    return location;
+  }
+}
+
+class DepthToBaseLineFeature extends TopMeasureItemFeature {
+  DepthToBaseLineFeature(
+    DepthToBaseLine refItem,
+  ) : super(refItem);
+}
+
+class _Depth extends Location {
+  _Depth(ItemMeta meta, DepthToBaseLine parent) : super(meta, parent);
+
+  @override
+  bool onExecuteMouse(PointInfo args) {
+    if (state == ItemStates.finished || state == ItemStates.waiting) {
+      if (args.pointType == PointInfoType.mouseMove) {
+        if (feature == null && measuredFeatures.isEmpty) {
+          _createFeature(args);
+          return true;
+        }
+      } else if (args.pointType == PointInfoType.mouseDown) {
+        _createFeature(args);
+        return true;
+      }
+      return false;
+    }
+    if (state == ItemStates.running) {
+      if (args.pointType == PointInfoType.mouseUp) return false;
+
+      feature?.point = args;
+      doCalculate();
+      if (args.pointType == PointInfoType.mouseDown) {
+        doFeatureFinish();
+      }
+    }
+
+    return true;
+  }
+
+  void _createFeature(PointInfo args) {
+    measuredFeatures.clear();
+    feature ??= _DepthFeature(this, args);
+    if (args.hostVisualArea != null) {
+      feature!.hostVisualArea = args.hostVisualArea;
+    }
+    doCalculate();
+    state = ItemStates.running;
+  }
+
+  static _Depth createDepth(ItemMeta meta, DepthToBaseLine parent) {
+    final depth = _Depth(meta, parent);
+    depth.calculator = TissueDepthCal(depth);
+    return depth;
+  }
+}
+
+class _DepthFeature extends LocationFeature {
+  _DepthFeature(IMeasureItem refItem, DPoint point) : super(refItem, point);
+
+  @override
+  void paint(Canvas canvas, Size size) {
+    drawId(canvas, size);
+    final viewPoint = convert2ViewPoint(size, point).toOffset();
+    drawVertex(canvas, viewPoint);
+  }
+}

+ 0 - 10
lib/process/primitives/combos/lwh_straightline.dart

@@ -83,14 +83,4 @@ class LWHStraightlineFeature extends TopMeasureItemFeature {
   LWHStraightlineFeature(
     ITopMeasureItem refItem,
   ) : super(refItem);
-
-  @override
-  void paint(Canvas canvas, Size size) {
-    for (var item in refItem.childItems) {
-      for (var feature in item.measuredFeatures) {
-        feature.paint(canvas, size);
-      }
-      item.feature?.paint(canvas, size);
-    }
-  }
 }

+ 0 - 10
lib/process/primitives/combos/two_area.dart

@@ -81,14 +81,4 @@ class TwoAreaFeature extends TopMeasureItemFeature {
   TwoAreaFeature(
     ITopMeasureItem refItem,
   ) : super(refItem);
-
-  @override
-  void paint(Canvas canvas, Size size) {
-    for (var item in refItem.childItems) {
-      for (var feature in item.measuredFeatures) {
-        feature.paint(canvas, size);
-      }
-      item.feature?.paint(canvas, size);
-    }
-  }
 }

+ 0 - 10
lib/process/primitives/combos/two_straightline.dart

@@ -89,14 +89,4 @@ class TwoStraightLineFeature extends TopMeasureItemFeature {
   TwoStraightLineFeature(
     ITopMeasureItem refItem,
   ) : super(refItem);
-
-  @override
-  void paint(Canvas canvas, Size size) {
-    for (var item in refItem.childItems) {
-      for (var feature in item.measuredFeatures) {
-        feature.paint(canvas, size);
-      }
-      item.feature?.paint(canvas, size);
-    }
-  }
 }

+ 11 - 6
lib/process/primitives/location.dart

@@ -3,7 +3,6 @@ import 'dart:math' as math;
 
 import 'package:fis_measure/interfaces/date_types/point.dart';
 import 'package:fis_measure/interfaces/date_types/rect_region.dart';
-import 'package:fis_measure/interfaces/date_types/vector.dart';
 import 'package:fis_measure/interfaces/enums/items.dart';
 import 'package:fis_measure/interfaces/process/items/item.dart';
 import 'package:fis_measure/interfaces/process/items/item_metas.dart';
@@ -12,7 +11,6 @@ import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
 import 'package:fis_measure/process/visual/tissue_area.dart';
 import 'package:fis_measure/utils/canvas.dart';
 import 'package:get/get.dart';
-import 'package:vid/us/vid_us_probe.dart';
 
 import '../calcuators/depth.dart';
 import '../items/item.dart';
@@ -77,12 +75,19 @@ class Location extends MeasureItem<LocationFeature> {
     ItemMeta meta, [
     IMeasureItem? parent,
   ]) {
-    Location location = Location(meta, parent);
     final area = Get.find<IApplication>().currentVisualArea;
     final isProbeConvex = (area as TissueArea).isConvex;
-    location.calculator = isProbeConvex
-        ? TissueConvexDepthCal(location)
-        : TissueDepthCal(location);
+    final fn =
+        isProbeConvex ? createTissueConvexDepth : createTissueNormalDepth;
+    return fn(meta, parent);
+  }
+
+  static Location createTissueNormalDepth(
+    ItemMeta meta, [
+    IMeasureItem? parent,
+  ]) {
+    Location location = Location(meta, parent);
+    location.calculator = TissueDepthCal(location);
     return location;
   }
 }

+ 95 - 0
lib/process/primitives/ray.dart

@@ -0,0 +1,95 @@
+import 'dart:ui';
+
+import 'package:fis_measure/interfaces/date_types/point.dart';
+import 'package:fis_measure/interfaces/enums/items.dart';
+import 'package:fis_measure/interfaces/process/items/item.dart';
+import 'package:fis_measure/interfaces/process/items/item_metas.dart';
+import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
+import 'package:fis_measure/process/calcuators/ray.dart';
+import 'package:fis_measure/process/items/item.dart';
+import 'package:fis_measure/process/items/item_feature.dart';
+import 'package:fis_measure/utils/canvas.dart';
+
+class Ray extends MeasureItem<RayFeature> {
+  Ray(ItemMeta meta, IMeasureItem? parent) : super(meta, parent);
+
+  final double initializeAngle = 0;
+
+  @override
+  bool onExecuteMouse(PointInfo args) {
+    if (state == ItemStates.finished || state == ItemStates.waiting) {
+      if (args.pointType == PointInfoType.mouseMove) {
+        feature = RayFeature(this, args);
+        feature!.hostVisualArea = args.hostVisualArea;
+        final viewport = args.hostVisualArea!.viewport!;
+        feature!.isReverse =
+            viewport.isFlipHorizontal ^ viewport.isFlipVertical;
+        state = ItemStates.running;
+      }
+    }
+    if (state == ItemStates.running) {
+      if (args.pointType == PointInfoType.mouseUp) return false;
+
+      feature?.point = args;
+      doCalculate();
+      if (args.pointType == PointInfoType.mouseDown) {
+        doFeatureFinish();
+      }
+    }
+    return true;
+  }
+
+  @override
+  bool onExecuteTouch(PointInfo args) {
+    // TODO: implement onExecuteTouch
+    throw UnimplementedError();
+  }
+
+  static Ray createRay(ItemMeta meta, [IMeasureItem? parent]) {
+    final ray = Ray(meta, parent);
+    ray.calculator = RayDepthCal(ray);
+    return ray;
+  }
+}
+
+class RayFeature extends MeasureItemFeature {
+  double _angle = 0;
+  bool _isReverse = false;
+
+  RayFeature(Ray refItem, DPoint point) : super(refItem) {
+    innerPoints.add(point.clone());
+    angle = refItem.initializeAngle;
+  }
+
+  DPoint get point => innerPoints[0];
+  set point(DPoint value) {
+    innerPoints[0] = value;
+  }
+
+  double get angle => _angle;
+  set angle(double value) {
+    if (value != _angle) {
+      _angle = value;
+    }
+  }
+
+  bool get isReverse => _isReverse;
+  set isReverse(bool value) {
+    if (value != _isReverse) {
+      _isReverse = value;
+    }
+  }
+
+  @override
+  void paint(Canvas canvas, Size size) {
+    if (innerPoints.isEmpty) return;
+
+    final offset = convert2ViewPoint(size, point).toOffset();
+    final left = Offset(0, offset.dy);
+    final right = Offset(size.width, offset.dy);
+    canvas.drawDashLine(left, right, 1, 10, paintPan);
+
+    var idText = '$id.${refItem.displayName}';
+    drawCustomId(canvas, size, right, idText);
+  }
+}

+ 2 - 0
lib/process/primitives/straightline.dart

@@ -9,6 +9,8 @@ import 'package:fis_measure/interfaces/process/items/types.dart';
 import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
 import 'package:fis_measure/process/calcuators/time_motion.dart';
 import 'package:fis_measure/process/items/item.dart';
+import 'package:fis_measure/process/primitives/combos/depth2baseline.dart';
+import 'package:fis_measure/process/primitives/location.dart';
 import 'package:fis_measure/utils/canvas.dart';
 import 'package:fis_measure/view/gesture/cross_position_indicator.dart';
 import 'package:fis_measure/view/gesture/positioned_cursor.dart';