diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2021-04-25 14:22:56 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2021-04-25 14:22:56 +0300 |
| commit | e3435feb84231a97cc766a5f884c8aba5a1df919 (patch) | |
| tree | de1edb2ae88b241240214420844714dd9e19fb40 /Software/Visual_Studio | |
| parent | 5b46b59ad0507ae5034f2a1113365712181a9c00 (diff) | |
| parent | 8c9e1d2eb1b98fb41fd16bd0343505d801e898db (diff) | |
| download | Tango-e3435feb84231a97cc766a5f884c8aba5a1df919.tar.gz Tango-e3435feb84231a97cc766a5f884c8aba5a1df919.zip | |
Merge branch 'software' of https://twinetfs.visualstudio.com/Tango/_git/Tango into software
Diffstat (limited to 'Software/Visual_Studio')
8 files changed, 126 insertions, 99 deletions
diff --git a/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip b/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip index ba5fb5501..2e08e05b8 100644 --- a/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip +++ b/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip @@ -16,10 +16,10 @@ <ROW Property="ARPCOMMENTS" Value="This installer database contains the logic and data required to install [|ProductName]." ValueLocId="*"/> <ROW Property="ARPNOREPAIR" MultiBuildValue="DefaultBuild:1"/> <ROW Property="Manufacturer" Value="Twine"/> - <ROW Property="ProductCode" Value="1033:{DCE703F1-778C-4C25-8181-00A2C03CDC64} " Type="16"/> + <ROW Property="ProductCode" Value="1033:{C9B395A6-9392-4131-BBA5-FCA72D613FFD} " Type="16"/> <ROW Property="ProductLanguage" Value="1033"/> <ROW Property="ProductName" Value="Machine Studio"/> - <ROW Property="ProductVersion" Value="4.4.8.0" Type="32"/> + <ROW Property="ProductVersion" Value="4.4.9.0" Type="32"/> <ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/> <ROW Property="UpgradeCode" Value="{CBEE5CAE-7C5A-4280-98DE-AA98113764E4}"/> <ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/> @@ -837,7 +837,7 @@ <ROW Action="AI_DetectSoftware" Sequence="101"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.BuildComponent"> - <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\Machine Studio\Release" PackageFileName="Machine Studio Installer_v4.4.8" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Machine Studio Installer_v4.4.8"/> + <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\Machine Studio\Release" PackageFileName="Machine Studio Installer_v4.4.9" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Machine Studio Installer_v4.4.9"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent"> <ROW Path="<AI_DICTS>ui.ail"/> diff --git a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt Binary files differindex abc8a3503..9453b5c13 100644 --- a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt +++ b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt diff --git a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip index 0b22f3021..dc880daae 100644 --- a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip +++ b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip @@ -18,10 +18,10 @@ <ROW Property="ARPNOREPAIR" Value="1" MultiBuildValue="DefaultBuild:1"/> <ROW Property="ARPSYSTEMCOMPONENT" Value="1"/> <ROW Property="Manufacturer" Value="Twine"/> - <ROW Property="ProductCode" Value="1033:{6A4B308F-8BFA-418B-8540-84D913B44E85} " Type="16"/> + <ROW Property="ProductCode" Value="1033:{36366AB8-7FBB-43A8-B57D-D934F1977D68} " Type="16"/> <ROW Property="ProductLanguage" Value="1033"/> <ROW Property="ProductName" Value="Tango"/> - <ROW Property="ProductVersion" Value="1.4.10.0" Type="32"/> + <ROW Property="ProductVersion" Value="1.4.11.0" Type="32"/> <ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/> <ROW Property="UpgradeCode" Value="{F8EAB8B4-FD57-45B7-8307-D52DF760273D}"/> <ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/> @@ -506,7 +506,7 @@ <ROW Action="AI_DetectSoftware" Sequence="101"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.BuildComponent"> - <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\PPC" PackageFileName="PPC Installer_v1.4.10" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="PPC Installer_v1.4.10"/> + <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\PPC" PackageFileName="PPC Installer_v1.4.11" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="PPC Installer_v1.4.11"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent"> <ROW Path="<AI_DICTS>ui.ail"/> diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorConverter.cpp b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorConverter.cpp index 362709f78..294a94dca 100644 --- a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorConverter.cpp +++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorConverter.cpp @@ -3035,80 +3035,96 @@ void Tango::ColorLib::ColorConverter::findStops(Gradient &GradStop1, Gradient &G VecRGBOut_tmp[0] = C_RGB_XYZ_Lab(RGBStart); VecLabOut_tmp[0] = C_RGB_XYZ_Lab(GradStop1.Get_Lab()); int Stop1Index = 0; - if (!GradStop1.Get_InRGBLimits()) + int Stop2Index = nsubdiv; + if ((!GradStop1.Get_InRGBLimits()) && (!GradStop2.Get_InRGBLimits())) { - bool retValue = false; - int i_index = 0; - LabTmp.Set(GradStop1.Get_Lab().Get_x() + i_index * dLab.Get_x(), - GradStop1.Get_Lab().Get_y() + i_index * dLab.Get_y(), - GradStop1.Get_Lab().Get_z() + i_index * dLab.Get_z()); - while ((!retValue) & (i_index < nsubdiv)) + //use Lab Coords + for (int i = 1; i < nsubdiv; ++i) { - retValue = CheckLabInRGBGamut(LabTmp); - i_index++; + VecLabOut_tmp[i].Set(VecLabOut_tmp[i - 1].Get_x() + dLab.Get_x(), + VecLabOut_tmp[i - 1].Get_y() + dLab.Get_y(), + VecLabOut_tmp[i - 1].Get_z() + dLab.Get_z()); + VecRGBOut_tmp[i] = m_Conv02->LabtoRGB(VecLabOut_tmp[i]); + } + Stop1Index = nsubdiv; + Stop2Index = 0; + } + else + { + if (!GradStop1.Get_InRGBLimits()) + { + bool retValue = false; + int i_index = 0; LabTmp.Set(GradStop1.Get_Lab().Get_x() + i_index * dLab.Get_x(), GradStop1.Get_Lab().Get_y() + i_index * dLab.Get_y(), GradStop1.Get_Lab().Get_z() + i_index * dLab.Get_z()); + while ((!retValue) & (i_index < nsubdiv)) + { + retValue = CheckLabInRGBGamut(LabTmp); + i_index++; + LabTmp.Set(GradStop1.Get_Lab().Get_x() + i_index * dLab.Get_x(), + GradStop1.Get_Lab().Get_y() + i_index * dLab.Get_y(), + GradStop1.Get_Lab().Get_z() + i_index * dLab.Get_z()); + } + Stop1Index = i_index; } - Stop1Index = i_index; - } - int Stop2Index = nsubdiv; - if (!GradStop2.Get_InRGBLimits()) - { - bool retValue = false; - int i_index = 0; - LabTmp.Set(GradStop2.Get_Lab().Get_x() - i_index * dLab.Get_x(), - GradStop2.Get_Lab().Get_y() - i_index * dLab.Get_y(), - GradStop2.Get_Lab().Get_z() - i_index * dLab.Get_z()); - while ((!retValue) & (i_index < nsubdiv)) + + if (!GradStop2.Get_InRGBLimits()) { - retValue = CheckLabInRGBGamut(LabTmp); - i_index++; + bool retValue = false; + int i_index = 0; LabTmp.Set(GradStop2.Get_Lab().Get_x() - i_index * dLab.Get_x(), GradStop2.Get_Lab().Get_y() - i_index * dLab.Get_y(), GradStop2.Get_Lab().Get_z() - i_index * dLab.Get_z()); + while ((!retValue) & (i_index < nsubdiv)) + { + retValue = CheckLabInRGBGamut(LabTmp); + i_index++; + LabTmp.Set(GradStop2.Get_Lab().Get_x() - i_index * dLab.Get_x(), + GradStop2.Get_Lab().Get_y() - i_index * dLab.Get_y(), + GradStop2.Get_Lab().Get_z() - i_index * dLab.Get_z()); + } + Stop2Index -= (i_index - 1); } - Stop2Index -= (i_index - 1); - } - //Base vector on Lab - for (int i = 1; i < Stop1Index; ++i) - { - VecLabOut_tmp[i].Set(VecLabOut_tmp[i - 1].Get_x() + dLab.Get_x(), - VecLabOut_tmp[i - 1].Get_y() + dLab.Get_y(), - VecLabOut_tmp[i - 1].Get_z() + dLab.Get_z()); - VecRGBOut_tmp[i] = m_Conv02->LabtoRGB(VecLabOut_tmp[i]); - } - //recalculate dRGB - int SI1 = Stop1Index; - int SI2 = Stop2Index; - C_RGB_XYZ_Lab LabStop1(LabStart.Get_x() + SI1 * dLab.Get_x(), - LabStart.Get_y() + SI1 * dLab.Get_y(), LabStart.Get_z() + SI1 * dLab.Get_z()); - C_RGB_XYZ_Lab LabStop2(LabStart.Get_x() + (SI2 - 1) * dLab.Get_x(), - LabStart.Get_y() + (SI2 - 1) * dLab.Get_y(), LabStart.Get_z() + (SI2 - 1) * dLab.Get_z()); - C_RGB_XYZ_Lab RGBStop1 = m_Conv02->LabtoRGB(LabStop1); - C_RGB_XYZ_Lab RGBStop2 = m_Conv02->LabtoRGB(LabStop2); - int nelems = Stop2Index - Stop1Index; - dRGB = C_RGB_XYZ_Lab((RGBStop2.Get_x() - RGBStop1.Get_x()) / (nelems - 1), (RGBStop2.Get_y() - RGBStop1.Get_y()) / (nelems - 1), - (RGBStop2.Get_z() - RGBStop1.Get_z()) / (nelems - 1)); + //Base vector on Lab + for (int i = 1; i < Stop1Index; ++i) + { + VecLabOut_tmp[i].Set(VecLabOut_tmp[i - 1].Get_x() + dLab.Get_x(), + VecLabOut_tmp[i - 1].Get_y() + dLab.Get_y(), + VecLabOut_tmp[i - 1].Get_z() + dLab.Get_z()); + VecRGBOut_tmp[i] = m_Conv02->LabtoRGB(VecLabOut_tmp[i]); + } + //recalculate dRGB + int SI1 = Stop1Index; + int SI2 = Stop2Index; + C_RGB_XYZ_Lab LabStop1(LabStart.Get_x() + SI1 * dLab.Get_x(), + LabStart.Get_y() + SI1 * dLab.Get_y(), LabStart.Get_z() + SI1 * dLab.Get_z()); + C_RGB_XYZ_Lab LabStop2(LabStart.Get_x() + (SI2 - 1) * dLab.Get_x(), + LabStart.Get_y() + (SI2 - 1) * dLab.Get_y(), LabStart.Get_z() + (SI2 - 1) * dLab.Get_z()); + C_RGB_XYZ_Lab RGBStop1 = m_Conv02->LabtoRGB(LabStop1); + C_RGB_XYZ_Lab RGBStop2 = m_Conv02->LabtoRGB(LabStop2); + int nelems = Stop2Index - Stop1Index; + dRGB = C_RGB_XYZ_Lab((RGBStop2.Get_x() - RGBStop1.Get_x()) / (nelems - 1), (RGBStop2.Get_y() - RGBStop1.Get_y()) / (nelems - 1), + (RGBStop2.Get_z() - RGBStop1.Get_z()) / (nelems - 1)); - int STi = 0; - for (int i = 0; i < nelems; ++i) - { - STi = Stop1Index + i; - VecRGBOut_tmp[STi].Set(RGBStop1.Get_x() + i * dRGB.Get_x(), - RGBStop1.Get_y() + i * dRGB.Get_y(), - RGBStop1.Get_z() + i * dRGB.Get_z()); - VecLabOut_tmp[STi] = CConvertD65.RGBtoLab(VecRGBOut_tmp[STi]); - VecLabOut_tmp[STi].Clamp(LowLab, HighLab); - } - for (int i = Stop2Index; i < nsubdiv; ++i) - { - VecLabOut_tmp[i].Set(VecLabOut_tmp[i - 1].Get_x() + dLab.Get_x(), - VecLabOut_tmp[i - 1].Get_y() + dLab.Get_y(), - VecLabOut_tmp[i - 1].Get_z() + dLab.Get_z()); - VecRGBOut_tmp[i] = m_Conv02->LabtoRGB(VecLabOut_tmp[i]); + int STi = 0; + for (int i = 0; i < nelems; ++i) + { + STi = Stop1Index + i; + VecRGBOut_tmp[STi].Set(RGBStop1.Get_x() + i * dRGB.Get_x(), + RGBStop1.Get_y() + i * dRGB.Get_y(), + RGBStop1.Get_z() + i * dRGB.Get_z()); + VecLabOut_tmp[STi] = CConvertD65.RGBtoLab(VecRGBOut_tmp[STi]); + VecLabOut_tmp[STi].Clamp(LowLab, HighLab); + } + for (int i = Stop2Index; i < nsubdiv; ++i) + { + VecLabOut_tmp[i].Set(VecLabOut_tmp[i - 1].Get_x() + dLab.Get_x(), + VecLabOut_tmp[i - 1].Get_y() + dLab.Get_y(), + VecLabOut_tmp[i - 1].Get_z() + dLab.Get_z()); + VecRGBOut_tmp[i] = m_Conv02->LabtoRGB(VecLabOut_tmp[i]); + } } - int indGrad = 0; int *pos = new int[ninterstops]; int i1 = 1; @@ -4165,15 +4181,6 @@ void Tango::ColorLib::ColorConverter::ProcessGradientStops(InputCoordinates **in if (m_GradStops[i].Get_ColorSpace() == COLOR_SPACE__Volume || m_GradStops[i].Get_ColorSpace() == COLOR_SPACE__Catalog) { //Convert volume to Lab //Convert lab to rgb - /*if (m_GradStops[i].Get_ColorSpace() == COLOR_SPACE__Catalog) - { - inputcoordinates[i]->inputliquids[0]->volume = inputcoordinates[i]->cyan; - inputcoordinates[i]->inputliquids[1]->volume = inputcoordinates[i]->magenta; - inputcoordinates[i]->inputliquids[2]->volume = inputcoordinates[i]->yellow; - inputcoordinates[i]->inputliquids[3]->volume = inputcoordinates[i]->key; - for (int i_hv =0; i_hv<4; ++i_hv) - inputcoordinates[i]->inputliquids[i_hv]->has_volume = true; - }*/ ConvertVolumeToRGBDisplay(inputcoordinates[i], m_nProcessRanges, m_GradStops[i].Get_ColorSpace(), Volume, RGBOut, LabOut, GamutRegion); VectorToDouble(LabOut, LabOutV); diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs index c143c7608..5ca9d5df2 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs @@ -4,5 +4,5 @@ using System.Runtime.InteropServices; [assembly: System.Windows.ThemeInfo(System.Windows.ResourceDictionaryLocation.None, System.Windows.ResourceDictionaryLocation.SourceAssembly)] [assembly: AssemblyTitle("Tango - Machine Studio")] -[assembly: AssemblyVersion("4.4.8.0")] +[assembly: AssemblyVersion("4.4.9.0")] [assembly: ComVisible(false)]
\ No newline at end of file diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs index f5b234a45..f29435323 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs @@ -8,4 +8,4 @@ using System.Windows; // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("Tango PPC Application")] -[assembly: AssemblyVersion("1.4.10.0")] +[assembly: AssemblyVersion("1.4.11.0")] diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest index efc5f8179..d72e75011 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest @@ -16,7 +16,7 @@ Remove this element if your application requires this virtualization for backwards compatibility. --> - <!--<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />--> + <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo> diff --git a/Software/Visual_Studio/Tango.ColorLib.GradientTest.CLI/Program.cs b/Software/Visual_Studio/Tango.ColorLib.GradientTest.CLI/Program.cs index c3d33e31f..b2762c801 100644 --- a/Software/Visual_Studio/Tango.ColorLib.GradientTest.CLI/Program.cs +++ b/Software/Visual_Studio/Tango.ColorLib.GradientTest.CLI/Program.cs @@ -210,47 +210,58 @@ namespace Tango.ColorLib.GradientTest.CLI { LiquidType = LiquidType.Cyan, CalibrationData = BL.Entities.Cat.CreateDemoCalibrationData(LiquidType.Cyan), - MaxNanoliterPerCentimeter = 200, + //MaxNanoliterPerCentimeter = 200, + MaxNanoliterPerCentimeter = 130, }); input.InputLiquids.Add(new InputLiquid() { LiquidType = LiquidType.Magenta, CalibrationData = BL.Entities.Cat.CreateDemoCalibrationData(LiquidType.Magenta), - MaxNanoliterPerCentimeter = 200, + //MaxNanoliterPerCentimeter = 200, + MaxNanoliterPerCentimeter = 130, }); input.InputLiquids.Add(new InputLiquid() { LiquidType = LiquidType.Yellow, CalibrationData = BL.Entities.Cat.CreateDemoCalibrationData(LiquidType.Yellow), - MaxNanoliterPerCentimeter = 200, + //MaxNanoliterPerCentimeter = 200, + MaxNanoliterPerCentimeter = 180, }); input.InputLiquids.Add(new InputLiquid() { LiquidType = LiquidType.Black, CalibrationData = BL.Entities.Cat.CreateDemoCalibrationData(LiquidType.Black), - MaxNanoliterPerCentimeter = 200, + //MaxNanoliterPerCentimeter = 200, + MaxNanoliterPerCentimeter = 130, }); //Process Ranges input.ProcessRanges.Add(new ProcessRange() { - MinInkUptake = 200, - MaxInkUptake = 200, + //MinInkUptake = 200, + //MaxInkUptake = 200, + MinInkUptake = 130, + MaxInkUptake = 180, }); input.ProcessRanges.Add(new ProcessRange() { - MinInkUptake = 200, - MaxInkUptake = 400, + //MinInkUptake = 200, + //MaxInkUptake = 400, + MinInkUptake = 180, + MaxInkUptake = 280, }); //White Point - input.ThreadL = 92.7867; - input.ThreadA = -0.2519; - input.ThreadB = 0.6968; + //input.ThreadL = 92.7867; + //input.ThreadA = -0.2519; + //input.ThreadB = 0.6968; + input.ThreadL = 91.08; + input.ThreadA = 4.69; + input.ThreadB = -18.04; //Segment length input.SegmentLength = 1000; @@ -313,25 +324,34 @@ namespace Tango.ColorLib.GradientTest.CLI { ColorSpace = ColorSpace.Lab, Offset = 0.0, - L = 44.75, - A = 15.14, - B = -32.5, + //L = 44.75, + //A = 15.14, + //B = -32.5, + L =47.52, + A = -17.31, + B = -40.88, }); input.Stops.Add(new GradientInputStop() { ColorSpace = ColorSpace.Lab, Offset = 0.5, - L = 39.70, - A = 25.0, - B = -4.8, + //L = 39.70, + //A = 25.0, + //B = -4.8, + L = 82.27, + A = -0.8, + B = 96.85, }); input.Stops.Add(new GradientInputStop() { ColorSpace = ColorSpace.Lab, Offset = 1, - L = 53, - A = -15.0, - B = -35, + //L = 53, + //A = -15.0, + //B = -35, + L = 38.0, + A = 0.0, + B = -45.0, }); Console.WriteLine($"TestLABGamutRegion0 input:\n{input.ToJsonString(nameof(input.ForwardData), nameof(CalibrationData))}"); |
