diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2020-07-22 12:30:23 +0300 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2020-07-22 12:30:23 +0300 |
| commit | 93bf6344f8cc37a662c19db81c4f341e5b9ed0f0 (patch) | |
| tree | 97bdd9c49faa069110ccb1cd32635fcaabd29725 /Software | |
| parent | 66f8cf884fbd7f85976e96028c8047c0985a9d8f (diff) | |
| parent | 9aa38289b089d2518c5b0ef68e78f262fe4a31ee (diff) | |
| download | Tango-93bf6344f8cc37a662c19db81c4f341e5b9ed0f0.tar.gz Tango-93bf6344f8cc37a662c19db81c4f341e5b9ed0f0.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software')
43 files changed, 2238 insertions, 327 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c index 05423b8d8..691f1c455 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c @@ -414,7 +414,7 @@ uint32_t HeadCard_Valve_Control(bool Direction) return status; } */ -uint32_t ActControlId = 0xFF; +uint32_t ActControlId = 0xFF, ActControlId1 = 0xFF; char Global_Act_Cmd_flag = 0; //Sync - prevent reset from previous command @@ -468,14 +468,47 @@ uint32_t HeadCard_Actuators_Disable(void) //RST Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_ACT_RST = 0x00;//Disable movement status |= Head_Write_IO_Reg(0x42,HIGH); + //Trigger_OutputsWriting(); Task_sleep(5); Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_ACT_RST = 0x01;//Enable movement status |= Head_Write_IO_Reg(0x42,HIGH); + //Trigger_OutputsWriting(); return status; } + +uint32_t HeadCard_ActControlCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) // use IfIndex for Act_ID +{ + uint32_t status = OK; + + ACTUATORS Act_ID = (ACTUATORS)(IfIndex); + + if (SafeRemoveControlCallback(ActControlId1, HeadCard_ActControlCallBackFunction )==OK) + ActControlId1 = 0xFF; + else + Report("Remove control callback failed",__FILE__,__LINE__,(int)ActControlId1,RpWarning,(int)HeadCard_ActControlCallBackFunction,0); + + if(Act_ID == ACTIN)//0 + { + Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTIN_ON = HIGH; + } + else//if(Act_ID == ACTOUT) 1 + { + Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = HIGH; + } + + Trigger_ActOnWriting();//status |= Head_Write_IO_Reg(0x46,HIGH); + + Global_Act_Cmd_flag++;//Sync the callback to the command + + //3sec delay - Timeout + ActControlId = AddControlCallback("ActuatorControl", HeadCard_ActuatorsCallBackFunction, (3* eOneSecond), TemplateDataReadCBFunction,Act_ID,0, 0 ); + + return status; +} + uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Direction) { uint32_t status = OK; @@ -499,22 +532,10 @@ uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Direction) status |= Head_Write_IO_Reg(0x46,LOW_AND_HIGH); - Task_sleep(500); + //Task_sleep(500); - if(Act_ID == ACTIN)//0 - { - Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTIN_ON = HIGH; - } - else//if(Act_ID == ACTOUT) 1 - { - Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = HIGH; - } - status |= Head_Write_IO_Reg(0x46,HIGH); - - Global_Act_Cmd_flag++;//Sync the callback to the command - - //3sec delay - Timeout - ActControlId = AddControlCallback("ActuatorControl", HeadCard_ActuatorsCallBackFunction, (3* eOneSecond), TemplateDataReadCBFunction,Act_ID,0, 0 ); + //100msec delay - (need short command - Active LOW ) + ActControlId1 = AddControlCallback("ctuatorControl", HeadCard_ActControlCallBackFunction, (/* 5 * */ eHundredMillisecond), TemplateDataReadCBFunction,Act_ID,0, 0 ); return status; } @@ -534,7 +555,7 @@ uint32_t HeadCard_ActStubCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) / { Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = HIGH; } - Trigger_OutputsWriting();//status |= Head_Write_IO_Reg(0x46,HIGH); + Trigger_ActOnWriting();//status |= Head_Write_IO_Reg(0x46,HIGH); return status; } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c index f126c254b..90f197587 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c @@ -42,6 +42,7 @@ typedef enum HeaterWriting, Head_Inputs_Reading,// I/O Head_Outputs_Writing, + Head_ACT_ON_Writing, Head_Init_PT100, Actuators_Control, Actuators_Control_Stub, @@ -287,6 +288,18 @@ void Trigger_OutputsWriting(void) } +void Trigger_ActOnWriting(void) +{ + I2C_ReadingMessageStruc I2C_ReadingMessage; + //uint8_t Midtank_i; + + I2C_ReadingMessage.messageId = Head_ACT_ON_Writing; + if (I2C_ReadingMsgQ != NULL) + Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); + return; + +} + void Trigger_WHS_init_IO(void) { @@ -665,8 +678,12 @@ void I2C_ReadingTask(UArg arg0, UArg arg1) Head_Read_IO_Reg(0x44, LOW_AND_HIGH);//BREAK__ZN1-12 + BREAK_HTIN Head_Read_IO_Reg(0x46, LOW_AND_HIGH);//READ HEAD CARD LS + ACT status + BREAK_HTOT break; - case Head_Outputs_Writing: - Head_Write_IO_Reg(0x46,HIGH);//ACT + case Head_Outputs_Writing: //Currently not in use + Head_Read_IO_Reg(0x42, LOW_AND_HIGH);// + Head_Read_IO_Reg(0x46, LOW_AND_HIGH);// + break; + case Head_ACT_ON_Writing: + Head_Write_IO_Reg(0x46,HIGH);//ACT ON break; case DispenserReadData: Dispenser_EEPROM_Read_Data(I2C_ReadingMessage.parameter); diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h index 16f86f9ed..4b12a7151 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h @@ -52,6 +52,7 @@ void Trigger_Head_Actuators_Disable(void); void Trigger_Head_Fan_Control(uint32_t Fan_ID, uint16_t PWM); void Trigger_InputsReading(void); void Trigger_OutputsWriting(void); +void Trigger_ActOnWriting(void); void Trigger_Head_Magnet(int direction); void Trigger_Head_MixerValve(int direction); void Trigger_Head_PressureArc(bool Enable_Disable); diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c index 1e23508ef..601e2e18a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c @@ -94,21 +94,30 @@ uint32_t Reset_and_Check_IFS_Availability(PANEL_BUTTON_OR_CRAT_ID Cart_ID) delayUs(5); IFS_i2c_status = I2C_Write(I2C_ID_IFS_MUX, I2C_NFC_Slave_Add, CORE_RESET_CMD, sizeof(CORE_RESET_CMD)); status |= IFS_i2c_status; - delayms(2); + delayms(3); } status |= I2C_Read(I2C_ID_IFS_MUX, I2C_NFC_Slave_Add + 1, Read_Buf, sizeof(Read_Buf)); #ifndef EVALUATION_BOARD - if((IFS_i2c_status == I2C_MASTER_ERR_ADDR_ACK)||(status == 0xFF)) - { - IFS_Availability[Cart_ID-1] = IFS_NOT_RECOGNIZED; - } - else - { - IFS_Availability[Cart_ID-1] = IFS_RECOGNIZED; - } + if((Read_Buf[0] == 0x40) && (Read_Buf[1] == 0x00) && (Read_Buf[2] == 0x03) && (Read_Buf[3] == 0x00) && (Read_Buf[4] == 0x11) && (Read_Buf[5] == 0x01))//PN7150 RESET RESPONSE + { + IFS_Availability[Cart_ID-1] = IFS_RECOGNIZED; + } + else + { + IFS_Availability[Cart_ID-1] = IFS_NOT_RECOGNIZED; + } + +// if((IFS_i2c_status == I2C_MASTER_ERR_ADDR_ACK)||(status == 0xFF)) +// { +// IFS_Availability[Cart_ID-1] = IFS_NOT_RECOGNIZED; +// } +// else +// { +// IFS_Availability[Cart_ID-1] = IFS_RECOGNIZED; +// } #else IFS_Availability[Cart_ID-1] = WITHOUT_IFS; #endif @@ -125,6 +134,7 @@ uint32_t Check_IFS_Availability() for(Cart_i = CART_1; Cart_i <= CART_3; Cart_i++) { status |= Reset_and_Check_IFS_Availability(Cart_i); + delayms(1); } return status; } diff --git a/Software/PMR/Messages/ColorLab/LinearizationInput.proto b/Software/PMR/Messages/ColorLab/LinearizationInput.proto new file mode 100644 index 000000000..ff6ba489e --- /dev/null +++ b/Software/PMR/Messages/ColorLab/LinearizationInput.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; + +import "LinearizationMeasurement.proto"; +import "LiquidType.proto"; + +package Tango.PMR.ColorLab; +option java_package = "com.twine.tango.pmr.colorlab"; + +message LinearizationInput +{ + LiquidType LiquidType = 1; + double TargetL = 2; + double TargetA = 3; + double TargetB = 4; + repeated LinearizationMeasurement Measurements = 5; +}
\ No newline at end of file diff --git a/Software/PMR/Messages/ColorLab/LinearizationMeasurement.proto b/Software/PMR/Messages/ColorLab/LinearizationMeasurement.proto new file mode 100644 index 000000000..57f5eb2f5 --- /dev/null +++ b/Software/PMR/Messages/ColorLab/LinearizationMeasurement.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package Tango.PMR.ColorLab; +option java_package = "com.twine.tango.pmr.colorlab"; + +message LinearizationMeasurement +{ + double InkPercentage = 1; + double L = 2; + double A = 3; + double B = 4; +}
\ No newline at end of file diff --git a/Software/PMR/Messages/ColorLab/LinearizationOutput.proto b/Software/PMR/Messages/ColorLab/LinearizationOutput.proto new file mode 100644 index 000000000..ee043f6b4 --- /dev/null +++ b/Software/PMR/Messages/ColorLab/LinearizationOutput.proto @@ -0,0 +1,13 @@ +syntax = "proto3"; + +package Tango.PMR.ColorLab; +option java_package = "com.twine.tango.pmr.colorlab"; + +message LinearizationOutput +{ + repeated double InkPercentage = 1; + + + bool HasError = 20; + string ErrorMessage = 21; +}
\ No newline at end of file diff --git a/Software/Visual_Studio/Advanced Installer Projects/FSE Installer.aip b/Software/Visual_Studio/Advanced Installer Projects/FSE Installer.aip index d8c669460..2b6473d3a 100644 --- a/Software/Visual_Studio/Advanced Installer Projects/FSE Installer.aip +++ b/Software/Visual_Studio/Advanced Installer Projects/FSE Installer.aip @@ -24,10 +24,10 @@ <ROW Property="CompanyLogo" Value="blue.jpg" MultiBuildValue="DefaultBuild:twine_logo_installer_.png_1" Type="1" MsiKey="CompanyLogo"/> <ROW Property="LogoIcon" Value="externalui.ico" MultiBuildValue="DefaultBuild:machine_full_0UZ_icon.ico_1" Type="1" MsiKey="LogoIcon"/> <ROW Property="Manufacturer" Value="Twine Solutions LTD"/> - <ROW Property="ProductCode" Value="1033:{4CBDABE7-727D-4858-AAC9-8E1D8D9B231D} " Type="16"/> + <ROW Property="ProductCode" Value="1033:{F29F3244-DFC0-46A6-9EA1-1FE5421704E4} " Type="16"/> <ROW Property="ProductLanguage" Value="1033"/> <ROW Property="ProductName" Value="Tango FSE"/> - <ROW Property="ProductVersion" Value="1.0.0.0" Type="32"/> + <ROW Property="ProductVersion" Value="1.0.1.0" Type="32"/> <ROW Property="RUNAPPLICATION" Value="1" Type="4"/> <ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/> <ROW Property="UpgradeCode" Value="{0E13CB0D-89F7-465E-9F56-F1CBD6773E6E}"/> @@ -84,14 +84,10 @@ <ROW Component="Microsoft.AspNet.SignalR.Client.dll" ComponentId="{A6A1BE43-A965-4718-8B9B-E8BB2D2B6FA9}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.AspNet.SignalR.Client.dll"/> <ROW Component="Microsoft.Azure.ActiveDirectory.GraphClient.dll" ComponentId="{623FE6DD-F44D-4E99-8FD5-E54A608BE511}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Azure.ActiveDirectory.GraphClient.dll"/> <ROW Component="Microsoft.CodeAnalysis.CSharp.Scripting.dll_1" ComponentId="{2D21153E-2576-4B08-8FFD-966EA9074B3E}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.CodeAnalysis.CSharp.Scripting.dll_1"/> - <ROW Component="Microsoft.CodeAnalysis.CSharp.Workspaces.dll" ComponentId="{F0178A23-0543-4AF6-B472-DE562F83FAFD}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.CodeAnalysis.CSharp.Workspaces.dll"/> <ROW Component="Microsoft.CodeAnalysis.CSharp.dll_1" ComponentId="{19BBB256-0863-41A0-A93F-B98CE50E55F0}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.CodeAnalysis.CSharp.dll_1"/> <ROW Component="Microsoft.CodeAnalysis.Scripting.dll_1" ComponentId="{D262D06F-31E7-4CAE-9B99-6E0A8D0389EF}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.CodeAnalysis.Scripting.dll_1"/> <ROW Component="Microsoft.CodeAnalysis.Workspaces.dll" ComponentId="{49A621D3-E54C-46A2-8A72-BD89E56DE547}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.CodeAnalysis.Workspaces.dll"/> <ROW Component="Microsoft.CodeAnalysis.dll_1" ComponentId="{D74916F9-4E71-47FC-99FC-4535D7D867CE}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.CodeAnalysis.dll_1"/> - <ROW Component="Microsoft.Data.Edm.dll" ComponentId="{8A3FA04E-E290-419F-B80B-C075192A1C7C}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Data.Edm.dll"/> - <ROW Component="Microsoft.Data.OData.dll" ComponentId="{8A3474C1-9738-41E3-8F47-A069AB1A3BDD}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Data.OData.dll"/> - <ROW Component="Microsoft.Data.Services.Client.dll" ComponentId="{7BEA4383-B526-4182-B26C-EC9821B764B5}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Data.Services.Client.dll"/> <ROW Component="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" ComponentId="{9639E91B-464A-4C60-9703-1AAF4503B269}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll"/> <ROW Component="Microsoft.IdentityModel.Clients.ActiveDirectory.dll" ComponentId="{C8FF51E6-B8BB-401D-BD03-58FD08E4C389}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.IdentityModel.Clients.ActiveDirectory.dll"/> <ROW Component="Microsoft.ServiceBus.dll" ComponentId="{B19BCB1E-6C52-4BF7-A128-DDA1DC047D0E}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.ServiceBus.dll"/> @@ -236,7 +232,6 @@ <ROW Component="System.Security.Cryptography.X509Certificates.dll" ComponentId="{00F4F6C1-6B4D-4DFD-BD59-72EE690FC246}" Directory_="APPDIR" Attributes="0" KeyPath="System.Security.Cryptography.X509Certificates.dll"/> <ROW Component="System.Security.Principal.dll" ComponentId="{127424E0-24F8-456F-BBEC-F23E331E1669}" Directory_="APPDIR" Attributes="0" KeyPath="System.Security.Principal.dll"/> <ROW Component="System.Security.SecureString.dll" ComponentId="{C40FA779-F72E-4CF2-9A42-368ADB1D05E4}" Directory_="APPDIR" Attributes="0" KeyPath="System.Security.SecureString.dll"/> - <ROW Component="System.Spatial.dll" ComponentId="{4B39B3C6-CDCD-4624-83F0-A95F766A8F79}" Directory_="APPDIR" Attributes="0" KeyPath="System.Spatial.dll"/> <ROW Component="System.Text.Encoding.CodePages.dll_1" ComponentId="{9E367053-E910-4CE6-BE25-3065F9E18374}" Directory_="APPDIR" Attributes="0" KeyPath="System.Text.Encoding.CodePages.dll_1"/> <ROW Component="System.Text.Encoding.Extensions.dll" ComponentId="{C177E423-71AE-4FB7-BDC1-1FFF650EFEBC}" Directory_="APPDIR" Attributes="0" KeyPath="System.Text.Encoding.Extensions.dll"/> <ROW Component="System.Text.Encoding.dll" ComponentId="{903DBCE1-0C97-4F99-BF85-41B54EF26B33}" Directory_="APPDIR" Attributes="0" KeyPath="System.Text.Encoding.dll"/> @@ -262,6 +257,7 @@ <ROW Component="Tango.AnimatedGif.dll" ComponentId="{4E1F5301-EA6D-45D5-9C99-23E59875096A}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.AnimatedGif.dll"/> <ROW Component="Tango.AutoComplete.dll" ComponentId="{A39273A4-F15E-4183-B998-065EC4B7F1AD}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.AutoComplete.dll"/> <ROW Component="Tango.BL.dll" ComponentId="{7D5B238B-DD1F-4E60-A1F0-2A6E718E4E7E}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.BL.dll"/> + <ROW Component="Tango.CSV.dll" ComponentId="{0D0A9A81-758D-43A8-86F6-75CE5D087314}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.CSV.dll"/> <ROW Component="Tango.CodeGeneration.dll" ComponentId="{E40950D1-CDD8-4F4E-B721-350D71AE2FDF}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.CodeGeneration.dll"/> <ROW Component="Tango.ColorConversion.dll" ComponentId="{037BA0C3-825A-4F36-8838-58E09596E690}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.ColorConversion.dll"/> <ROW Component="Tango.ColorPicker.dll" ComponentId="{4DC739B9-5960-4CF4-9911-BF25E7CC7308}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.ColorPicker.dll"/> @@ -275,7 +271,7 @@ <ROW Component="Tango.FSE.Diagnostics.dll" ComponentId="{A5BF99C4-208D-4D2E-9312-A8FC004A8B55}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.Diagnostics.dll"/> <ROW Component="Tango.FSE.Firmware.dll" ComponentId="{39C1ACAC-0329-4779-BBD7-59921B537853}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.Firmware.dll"/> <ROW Component="Tango.FSE.PPCConsole.dll" ComponentId="{439D6114-54E3-4FCB-A01E-148ECB966139}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.PPCConsole.dll"/> - <ROW Component="Tango.FSE.Stubs.dll" ComponentId="{FAE45ED6-874E-48D3-A3D1-32A402087826}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.Stubs.dll"/> + <ROW Component="Tango.FSE.Procedures.dll" ComponentId="{FDA82EB3-2A9B-4A57-AB30-970433B497BE}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.Procedures.dll"/> <ROW Component="Tango.FSE.UI.exe" ComponentId="{79C3B470-6540-474A-90AE-F0E7C34AEA43}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.UI.exe"/> <ROW Component="Tango.FSE.Upgrade.dll" ComponentId="{883D8D60-CC3C-4F25-B8EC-8CA100F83DD0}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.Upgrade.dll"/> <ROW Component="Tango.FSE.UsersAndRoles.dll" ComponentId="{61296AF0-2382-4A54-BEBD-C798C0F00B02}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.UsersAndRoles.dll"/> @@ -309,6 +305,7 @@ <ROW Component="Z.EntityFramework.Plus.EF6.dll" ComponentId="{9813A841-45DE-422F-8CD5-41A2D4750803}" Directory_="APPDIR" Attributes="0" KeyPath="Z.EntityFramework.Plus.EF6.dll"/> <ROW Component="Z.Expressions.Eval.dll" ComponentId="{FD15C66D-61BF-4E9D-AE0F-240D0EA1D78C}" Directory_="APPDIR" Attributes="0" KeyPath="Z.Expressions.Eval.dll"/> <ROW Component="ZSpitz.Util.dll" ComponentId="{3476B9F6-18D9-41B1-89D8-9774E8DB91A6}" Directory_="APPDIR" Attributes="0" KeyPath="ZSpitz.Util.dll"/> + <ROW Component="ffmpeg.exe" ComponentId="{D6862E01-A64B-40FD-847E-A35B561EFD1D}" Directory_="APPDIR" Attributes="0" KeyPath="ffmpeg.exe"/> <ROW Component="mscoree.dll" ComponentId="{B7304190-8E59-45C3-B972-4611DEB9DE60}" Directory_="APPDIR" Attributes="0" KeyPath="mscoree.dll"/> <ROW Component="msvcp140d.dll" ComponentId="{6B725C2A-71DF-44D3-A761-EB3D28379956}" Directory_="APPDIR" Attributes="0" KeyPath="msvcp140d.dll"/> <ROW Component="netstandard.dll" ComponentId="{27E9F013-8E50-4251-9C63-C53A5AA66DD1}" Directory_="APPDIR" Attributes="0" KeyPath="netstandard.dll"/> @@ -558,14 +555,12 @@ <ROW File="vcruntime140d.dll" Component_="vcruntime140d.dll" FileName="VCRUNT~2.DLL|vcruntime140d.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\vcruntime140d.dll" SelfReg="false"/> <ROW File="Microsoft.AspNet.SignalR.Client.dll" Component_="Microsoft.AspNet.SignalR.Client.dll" FileName="MICRO~38.DLL|Microsoft.AspNet.SignalR.Client.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.AspNet.SignalR.Client.dll" SelfReg="false"/> <ROW File="ControlzEx.dll" Component_="ControlzEx.dll" FileName="CONTRO~1.DLL|ControlzEx.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\ControlzEx.dll" SelfReg="false"/> - <ROW File="diagnostics.json" Component_="Dragablz.xml" FileName="DIAGNO~1.JSO|diagnostics.json" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\diagnostics.json" SelfReg="false"/> <ROW File="ExpressionTreeToString.dll" Component_="ExpressionTreeToString.dll" FileName="EXPRES~1.DLL|ExpressionTreeToString.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\ExpressionTreeToString.dll" SelfReg="false"/> <ROW File="GridExtra.Wpf.dll" Component_="GridExtra.Wpf.dll" FileName="GRIDEX~1.DLL|GridExtra.Wpf.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\GridExtra.Wpf.dll" SelfReg="false"/> <ROW File="Humanizer.dll" Component_="Humanizer.dll" FileName="HUMANI~1.DLL|Humanizer.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Humanizer.dll" SelfReg="false"/> <ROW File="LiteDB.dll" Component_="LiteDB.dll" FileName="LiteDB.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\LiteDB.dll" SelfReg="false"/> <ROW File="Microsoft.CodeAnalysis.CSharp.dll_1" Component_="Microsoft.CodeAnalysis.CSharp.dll_1" FileName="MICRO~39.DLL|Microsoft.CodeAnalysis.CSharp.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.CodeAnalysis.CSharp.dll" SelfReg="false"/> <ROW File="Microsoft.CodeAnalysis.CSharp.Scripting.dll_1" Component_="Microsoft.CodeAnalysis.CSharp.Scripting.dll_1" FileName="MICRO~40.DLL|Microsoft.CodeAnalysis.CSharp.Scripting.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.CodeAnalysis.CSharp.Scripting.dll" SelfReg="false"/> - <ROW File="Microsoft.CodeAnalysis.CSharp.Workspaces.dll" Component_="Microsoft.CodeAnalysis.CSharp.Workspaces.dll" FileName="MICRO~41.DLL|Microsoft.CodeAnalysis.CSharp.Workspaces.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.CodeAnalysis.CSharp.Workspaces.dll" SelfReg="false"/> <ROW File="Microsoft.CodeAnalysis.dll_1" Component_="Microsoft.CodeAnalysis.dll_1" FileName="MICRO~42.DLL|Microsoft.CodeAnalysis.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.CodeAnalysis.dll" SelfReg="false"/> <ROW File="Microsoft.CodeAnalysis.Scripting.dll_1" Component_="Microsoft.CodeAnalysis.Scripting.dll_1" FileName="MICRO~43.DLL|Microsoft.CodeAnalysis.Scripting.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.CodeAnalysis.Scripting.dll" SelfReg="false"/> <ROW File="Microsoft.CodeAnalysis.Workspaces.dll" Component_="Microsoft.CodeAnalysis.Workspaces.dll" FileName="MICRO~44.DLL|Microsoft.CodeAnalysis.Workspaces.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.CodeAnalysis.Workspaces.dll" SelfReg="false"/> @@ -601,9 +596,6 @@ <ROW File="Tango.FSE.PPCConsole.dll" Component_="Tango.FSE.PPCConsole.dll" FileName="TANGOF~8.DLL|Tango.FSE.PPCConsole.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.PPCConsole.dll" SelfReg="false"/> <ROW File="Tango.FSE.PPCConsole.dll.config" Component_="Dragablz.xml" FileName="TANGOF~4.CON|Tango.FSE.PPCConsole.dll.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.PPCConsole.dll.config" SelfReg="false"/> <ROW File="Tango.FSE.PPCConsole.pdb" Component_="Tango.FSE.PPCConsole.dll" FileName="TANGOF~8.PDB|Tango.FSE.PPCConsole.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.PPCConsole.pdb" SelfReg="false"/> - <ROW File="Tango.FSE.Stubs.dll" Component_="Tango.FSE.Stubs.dll" FileName="TANGOF~9.DLL|Tango.FSE.Stubs.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Stubs.dll" SelfReg="false"/> - <ROW File="Tango.FSE.Stubs.dll.config" Component_="Dragablz.xml" FileName="TANGOF~5.CON|Tango.FSE.Stubs.dll.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Stubs.dll.config" SelfReg="false"/> - <ROW File="Tango.FSE.Stubs.pdb" Component_="Tango.FSE.Stubs.dll" FileName="TANGOF~9.PDB|Tango.FSE.Stubs.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Stubs.pdb" SelfReg="false"/> <ROW File="Tango.FSE.UI.exe" Component_="Tango.FSE.UI.exe" FileName="TANGOF~1.EXE|Tango.FSE.UI.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.UI.exe" SelfReg="false" DigSign="true"/> <ROW File="Tango.FSE.UI.exe.config" Component_="Dragablz.xml" FileName="TANGOF~6.CON|Tango.FSE.UI.exe.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.UI.exe.config" SelfReg="false"/> <ROW File="Tango.FSE.UI.pdb" Component_="Tango.FSE.UI.exe" FileName="TANGO~22.PDB|Tango.FSE.UI.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.UI.pdb" SelfReg="false"/> @@ -642,19 +634,44 @@ <ROW File="Z.Expressions.Eval.dll" Component_="Z.Expressions.Eval.dll" FileName="ZEXPRE~1.DLL|Z.Expressions.Eval.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Z.Expressions.Eval.dll" SelfReg="false"/> <ROW File="ZSpitz.Util.dll" Component_="ZSpitz.Util.dll" FileName="ZSPITZ~1.DLL|ZSpitz.Util.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\ZSpitz.Util.dll" SelfReg="false"/> <ROW File="Google.Protobuf.xml" Component_="Dragablz.xml" FileName="GOOGLE~1.XML|Google.Protobuf.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Google.Protobuf.xml" SelfReg="false"/> - <ROW File="Microsoft.Data.Edm.dll" Component_="Microsoft.Data.Edm.dll" FileName="MICROS~2.DLL|Microsoft.Data.Edm.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.Data.Edm.dll" SelfReg="false"/> - <ROW File="Microsoft.Data.OData.dll" Component_="Microsoft.Data.OData.dll" FileName="MICRO~21.DLL|Microsoft.Data.OData.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.Data.OData.dll" SelfReg="false"/> - <ROW File="Microsoft.Data.Services.Client.dll" Component_="Microsoft.Data.Services.Client.dll" FileName="MICRO~24.DLL|Microsoft.Data.Services.Client.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.Data.Services.Client.dll" SelfReg="false"/> <ROW File="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" Component_="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" FileName="MICRO~25.DLL|Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" SelfReg="false"/> - <ROW File="System.Spatial.dll" Component_="System.Spatial.dll" FileName="SYSTEM~2.DLL|System.Spatial.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\System.Spatial.dll" SelfReg="false"/> <ROW File="Tango.ColorPicker.dll" Component_="Tango.ColorPicker.dll" FileName="TANGOC~1.DLL|Tango.ColorPicker.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.ColorPicker.dll" SelfReg="false"/> <ROW File="Tango.ColorPicker.pdb" Component_="Tango.ColorPicker.dll" FileName="TANGOC~1.PDB|Tango.ColorPicker.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.ColorPicker.pdb" SelfReg="false"/> - <ROW File="Tango.FSE.Stubs.xml" Component_="Dragablz.xml" FileName="TANGOF~1.XML|Tango.FSE.Stubs.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Stubs.xml" SelfReg="false"/> <ROW File="Tango.FSE.UsersAndRoles.dll" Component_="Tango.FSE.UsersAndRoles.dll" FileName="TANGO~10.DLL|Tango.FSE.UsersAndRoles.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.UsersAndRoles.dll" SelfReg="false"/> <ROW File="Tango.FSE.UsersAndRoles.dll.config" Component_="Dragablz.xml" FileName="TANGOF~8.CON|Tango.FSE.UsersAndRoles.dll.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.UsersAndRoles.dll.config" SelfReg="false"/> <ROW File="Tango.FSE.UsersAndRoles.pdb" Component_="Tango.FSE.UsersAndRoles.dll" FileName="TANGO~10.PDB|Tango.FSE.UsersAndRoles.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.UsersAndRoles.pdb" SelfReg="false"/> <ROW File="Tango.Visuals.dll" Component_="Tango.Visuals.dll" FileName="TANGOV~1.DLL|Tango.Visuals.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.Visuals.dll" SelfReg="false"/> <ROW File="Tango.Visuals.pdb" Component_="Tango.Visuals.dll" FileName="TANGOV~1.PDB|Tango.Visuals.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.Visuals.pdb" SelfReg="false"/> + <ROW File="ColorMine.pdb" Component_="ColorMine.dll" FileName="COLORM~1.PDB|ColorMine.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\ColorMine.pdb" SelfReg="false"/> + <ROW File="ControlzEx.pdb" Component_="ControlzEx.dll" FileName="CONTRO~1.PDB|ControlzEx.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\ControlzEx.pdb" SelfReg="false"/> + <ROW File="diagnostics.tdp" Component_="Dragablz.xml" FileName="DIAGNO~1.TDP|diagnostics.tdp" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\diagnostics.tdp" SelfReg="false"/> + <ROW File="DocumentFormat.OpenXml.xml" Component_="Dragablz.xml" FileName="DOCUME~1.XML|DocumentFormat.OpenXml.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\DocumentFormat.OpenXml.xml" SelfReg="false"/> + <ROW File="EntityFramework.SqlServer.xml" Component_="Dragablz.xml" FileName="ENTITY~1.XML|EntityFramework.SqlServer.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\EntityFramework.SqlServer.xml" SelfReg="false"/> + <ROW File="EntityFramework.xml" Component_="Dragablz.xml" FileName="ENTITY~2.XML|EntityFramework.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\EntityFramework.xml" SelfReg="false"/> + <ROW File="ffmpeg.exe" Component_="ffmpeg.exe" FileName="ffmpeg.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\ffmpeg.exe" SelfReg="false" DigSign="true"/> + <ROW File="LiteDB.xml" Component_="Dragablz.xml" FileName="LiteDB.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\LiteDB.xml" SelfReg="false"/> + <ROW File="MahApps.Metro.pdb" Component_="MahApps.Metro.dll" FileName="MAHAPP~1.PDB|MahApps.Metro.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\MahApps.Metro.pdb" SelfReg="false"/> + <ROW File="MahApps.Metro.xml" Component_="Dragablz.xml" FileName="MAHAPP~1.XML|MahApps.Metro.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\MahApps.Metro.xml" SelfReg="false"/> + <ROW File="MaterialDesignColors.pdb" Component_="MaterialDesignColors.dll" FileName="MATERI~1.PDB|MaterialDesignColors.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\MaterialDesignColors.pdb" SelfReg="false"/> + <ROW File="MaterialDesignThemes.Wpf.pdb" Component_="MaterialDesignThemes.Wpf.dll" FileName="MATERI~2.PDB|MaterialDesignThemes.Wpf.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\MaterialDesignThemes.Wpf.pdb" SelfReg="false"/> + <ROW File="MaterialDesignThemes.Wpf.xml" Component_="Dragablz.xml" FileName="MATERI~1.XML|MaterialDesignThemes.Wpf.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\MaterialDesignThemes.Wpf.xml" SelfReg="false"/> + <ROW File="Microsoft.AspNet.SignalR.Client.pdb" Component_="Microsoft.AspNet.SignalR.Client.dll" FileName="MICROS~1.PDB|Microsoft.AspNet.SignalR.Client.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.AspNet.SignalR.Client.pdb" SelfReg="false"/> + <ROW File="Microsoft.AspNet.SignalR.Client.xml" Component_="Dragablz.xml" FileName="MICROS~1.XML|Microsoft.AspNet.SignalR.Client.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.AspNet.SignalR.Client.xml" SelfReg="false"/> + <ROW File="Newtonsoft.Json.xml" Component_="Dragablz.xml" FileName="NEWTON~1.XML|Newtonsoft.Json.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Newtonsoft.Json.xml" SelfReg="false"/> + <ROW File="protobufnet.xml" Component_="Dragablz.xml" FileName="PROTOB~1.XML|protobuf-net.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\protobuf-net.xml" SelfReg="false"/> + <ROW File="RealTimeGraphX.pdb" Component_="RealTimeGraphX.dll" FileName="REALTI~1.PDB|RealTimeGraphX.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\RealTimeGraphX.pdb" SelfReg="false"/> + <ROW File="RealTimeGraphX.WPF.pdb" Component_="RealTimeGraphX.WPF.dll" FileName="REALTI~2.PDB|RealTimeGraphX.WPF.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\RealTimeGraphX.WPF.pdb" SelfReg="false"/> + <ROW File="System.Data.SQLite.xml" Component_="Dragablz.xml" FileName="SYSTEM~1.XML|System.Data.SQLite.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\System.Data.SQLite.xml" SelfReg="false"/> + <ROW File="System.Reactive.Core.xml" Component_="Dragablz.xml" FileName="SYSTEM~2.XML|System.Reactive.Core.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\System.Reactive.Core.xml" SelfReg="false"/> + <ROW File="System.Reactive.Interfaces.xml" Component_="Dragablz.xml" FileName="SYSTEM~3.XML|System.Reactive.Interfaces.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\System.Reactive.Interfaces.xml" SelfReg="false"/> + <ROW File="System.Reactive.Linq.xml" Component_="Dragablz.xml" FileName="SYSTEM~4.XML|System.Reactive.Linq.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\System.Reactive.Linq.xml" SelfReg="false"/> + <ROW File="System.Reactive.PlatformServices.xml" Component_="Dragablz.xml" FileName="SYSTEM~5.XML|System.Reactive.PlatformServices.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\System.Reactive.PlatformServices.xml" SelfReg="false"/> + <ROW File="Tango.CSV.dll" Component_="Tango.CSV.dll" FileName="TANGOC~4.DLL|Tango.CSV.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.CSV.dll" SelfReg="false"/> + <ROW File="Tango.CSV.pdb" Component_="Tango.CSV.dll" FileName="TANGOC~3.PDB|Tango.CSV.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.CSV.pdb" SelfReg="false"/> + <ROW File="Tango.FSE.Procedures.dll" Component_="Tango.FSE.Procedures.dll" FileName="TANGO~11.DLL|Tango.FSE.Procedures.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Procedures.dll" SelfReg="false"/> + <ROW File="Tango.FSE.Procedures.dll.config" Component_="Dragablz.xml" FileName="TANGOF~9.CON|Tango.FSE.Procedures.dll.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Procedures.dll.config" SelfReg="false"/> + <ROW File="Tango.FSE.Procedures.pdb" Component_="Tango.FSE.Procedures.dll" FileName="TANGO~11.PDB|Tango.FSE.Procedures.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Procedures.pdb" SelfReg="false"/> + <ROW File="Tango.FSE.Procedures.xml" Component_="Dragablz.xml" FileName="TANGOF~2.XML|Tango.FSE.Procedures.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Procedures.xml" SelfReg="false"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.AiRemoveFileComponent"> <ROW RemoveFile="_" Options="3"/> @@ -666,7 +683,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\FSE\Release" PackageFileName="Tango FSE v1.0.0" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Tango FSE v1.0.0"/> + <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\FSE\Release" PackageFileName="Tango FSE v1.0.1" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Tango FSE v1.0.1"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent"> <ROW Path="<AI_DICTS>ui.ail"/> @@ -1008,7 +1025,6 @@ <ROW Feature_="TangoFSE" Component_="LiteDB.dll"/> <ROW Feature_="TangoFSE" Component_="Microsoft.CodeAnalysis.CSharp.dll_1"/> <ROW Feature_="TangoFSE" Component_="Microsoft.CodeAnalysis.CSharp.Scripting.dll_1"/> - <ROW Feature_="TangoFSE" Component_="Microsoft.CodeAnalysis.CSharp.Workspaces.dll"/> <ROW Feature_="TangoFSE" Component_="Microsoft.CodeAnalysis.dll_1"/> <ROW Feature_="TangoFSE" Component_="Microsoft.CodeAnalysis.Scripting.dll_1"/> <ROW Feature_="TangoFSE" Component_="Microsoft.CodeAnalysis.Workspaces.dll"/> @@ -1033,7 +1049,6 @@ <ROW Feature_="TangoFSE" Component_="Tango.FSE.Diagnostics.dll"/> <ROW Feature_="TangoFSE" Component_="Tango.FSE.Firmware.dll"/> <ROW Feature_="TangoFSE" Component_="Tango.FSE.PPCConsole.dll"/> - <ROW Feature_="TangoFSE" Component_="Tango.FSE.Stubs.dll"/> <ROW Feature_="TangoFSE" Component_="Tango.FSE.UI.exe"/> <ROW Feature_="TangoFSE" Component_="Tango.FSE.Upgrade.dll"/> <ROW Feature_="TangoFSE" Component_="Tango.FSE.Web.dll"/> @@ -1055,14 +1070,13 @@ <ROW Feature_="TangoFSE" Component_="Z.EntityFramework.Plus.EF6.dll"/> <ROW Feature_="TangoFSE" Component_="Z.Expressions.Eval.dll"/> <ROW Feature_="TangoFSE" Component_="ZSpitz.Util.dll"/> - <ROW Feature_="TangoFSE" Component_="Microsoft.Data.Edm.dll"/> - <ROW Feature_="TangoFSE" Component_="Microsoft.Data.OData.dll"/> - <ROW Feature_="TangoFSE" Component_="Microsoft.Data.Services.Client.dll"/> <ROW Feature_="TangoFSE" Component_="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll"/> - <ROW Feature_="TangoFSE" Component_="System.Spatial.dll"/> <ROW Feature_="TangoFSE" Component_="Tango.ColorPicker.dll"/> <ROW Feature_="TangoFSE" Component_="Tango.FSE.UsersAndRoles.dll"/> <ROW Feature_="TangoFSE" Component_="Tango.Visuals.dll"/> + <ROW Feature_="TangoFSE" Component_="ffmpeg.exe"/> + <ROW Feature_="TangoFSE" Component_="Tango.CSV.dll"/> + <ROW Feature_="TangoFSE" Component_="Tango.FSE.Procedures.dll"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.MsiIconsComponent"> <ROW Name="machine_full.exe" SourcePath="..\..\Graphics\FSE\Installer\machine_full.ico" Index="0"/> 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 c410b3310..baa95c867 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:{9E37B9B1-348D-4A0F-BD20-CD7CB78DFB73} " Type="16"/> + <ROW Property="ProductCode" Value="1033:{1F83DF30-80C0-43BB-B199-AB1485E6AA4F} " Type="16"/> <ROW Property="ProductLanguage" Value="1033"/> <ROW Property="ProductName" Value="Machine Studio"/> - <ROW Property="ProductVersion" Value="4.1.14.0" Type="32"/> + <ROW Property="ProductVersion" Value="4.1.15.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="-"/> @@ -826,7 +826,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.0.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.1.14"/> + <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\Machine Studio\Release" PackageFileName="Machine Studio Installer_v4.0.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.1.15"/> </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 a603ff06b..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 de47739b9..d2297b670 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:{2337828E-2432-405A-B8F4-960A367F8CD1} " Type="16"/> + <ROW Property="ProductCode" Value="1033:{77BAA4A9-039B-4440-B1D1-E38AB5C9111E} " Type="16"/> <ROW Property="ProductLanguage" Value="1033"/> <ROW Property="ProductName" Value="Tango"/> - <ROW Property="ProductVersion" Value="1.1.20.0" Type="32"/> + <ROW Property="ProductVersion" Value="1.1.21.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="-"/> @@ -203,13 +203,11 @@ <ROW Component="mscoree.dll" ComponentId="{85F439D0-8FD0-4B99-888D-336C7A125E3D}" Directory_="APPDIR" Attributes="0" KeyPath="mscoree.dll"/> <ROW Component="msvcp140d.dll" ComponentId="{69E32675-9ACF-4C23-A495-300B78913B66}" Directory_="APPDIR" Attributes="0" KeyPath="msvcp140d.dll"/> <ROW Component="protobufnet.dll" ComponentId="{163F1E17-6462-4ABE-BC86-E055F7690139}" Directory_="APPDIR" Attributes="0" KeyPath="protobufnet.dll"/> - <ROW Component="turbojpeg.dll" ComponentId="{27A0FCF0-5142-4098-919F-1F41DBD4E96C}" Directory_="win7x64_Dir" Attributes="256" KeyPath="turbojpeg.dll"/> - <ROW Component="turbojpeg.dll.meta" ComponentId="{2277C165-C973-4631-B796-6072626F94FD}" Directory_="win7x64_Dir" Attributes="0" KeyPath="turbojpeg.dll.meta" Type="0"/> - <ROW Component="turbojpeg.dll.meta_1" ComponentId="{6CE58AB5-8A03-45B4-B1F2-C32484FFF26D}" Directory_="win7x86_Dir" Attributes="0" KeyPath="turbojpeg.dll.meta_1" Type="0"/> - <ROW Component="turbojpeg.dll_1" ComponentId="{0F3812A4-9F26-4D7C-92A5-A1A0DB6276D8}" Directory_="win7x86_Dir" Attributes="0" KeyPath="turbojpeg.dll_1"/> <ROW Component="ucrtbased.dll" ComponentId="{B8D025EA-CD16-4EE7-A3E7-713E2BE82BF3}" Directory_="APPDIR" Attributes="0" KeyPath="ucrtbased.dll"/> <ROW Component="vcruntime140.dll" ComponentId="{144594CC-D19B-45E4-A420-7A1BBB122EE3}" Directory_="APPDIR" Attributes="0" KeyPath="vcruntime140.dll"/> <ROW Component="vcruntime140d.dll" ComponentId="{7653420C-C6C3-4F31-97E8-D6DE417D3DF2}" Directory_="APPDIR" Attributes="0" KeyPath="vcruntime140d.dll"/> + <ROW Component="win7x64" ComponentId="{C2D7FABE-338A-4E52-A6BC-FAC6E0AB80D6}" Directory_="win7x64_Dir" Attributes="0"/> + <ROW Component="win7x86" ComponentId="{D8FD9856-D091-474A-A42F-4030E372472D}" Directory_="win7x86_Dir" Attributes="0"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent"> <ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0"/> @@ -458,10 +456,6 @@ <ROW File="Tango.PPC.Shared.pdb" Component_="Tango.PPC.Shared.dll" FileName="TANGO~17.PDB|Tango.PPC.Shared.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PPC.Shared.pdb" SelfReg="false"/> <ROW File="Tango.CSV.dll" Component_="Tango.CSV.dll" FileName="TANGOC~8.DLL|Tango.CSV.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.CSV.dll" SelfReg="false"/> <ROW File="Tango.CSV.pdb" Component_="Tango.CSV.dll" FileName="TANGOC~5.PDB|Tango.CSV.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.CSV.pdb" SelfReg="false"/> - <ROW File="turbojpeg.dll" Component_="turbojpeg.dll" FileName="TURBOJ~1.DLL|turbojpeg.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x64\turbojpeg.dll" SelfReg="false"/> - <ROW File="turbojpeg.dll.meta" Component_="turbojpeg.dll.meta" FileName="TURBOJ~1.MET|turbojpeg.dll.meta" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x64\turbojpeg.dll.meta" SelfReg="false"/> - <ROW File="turbojpeg.dll_1" Component_="turbojpeg.dll_1" FileName="TURBOJ~1.DLL|turbojpeg.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x86\turbojpeg.dll" SelfReg="false"/> - <ROW File="turbojpeg.dll.meta_1" Component_="turbojpeg.dll.meta_1" FileName="TURBOJ~1.MET|turbojpeg.dll.meta" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x86\turbojpeg.dll.meta" SelfReg="false"/> <ATTRIBUTE name="DontAddFileAttributes" value="true"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.BootstrOptComponent"> @@ -471,7 +465,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.0.3" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="PPC Installer_v1.1.20"/> + <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\PPC" PackageFileName="PPC Installer v1.0.3" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="PPC Installer_v1.1.21"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent"> <ROW Path="<AI_DICTS>ui.ail"/> @@ -539,6 +533,8 @@ <COMPONENT cid="caphyon.advinst.msicomp.MsiCreateFolderComponent"> <ROW Directory_="SHORTCUTDIR" Component_="SHORTCUTDIR" ManualDelete="false"/> <ROW Directory_="APPDIR" Component_="APPDIR" ManualDelete="true"/> + <ROW Directory_="win7x64_Dir" Component_="win7x64" ManualDelete="false"/> + <ROW Directory_="win7x86_Dir" Component_="win7x86" ManualDelete="false"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent"> <ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH_ORIGINAL" Target="[AI_SETUPEXEPATH]"/> @@ -730,10 +726,8 @@ <ROW Feature_="MainFeature" Component_="LiteDB.dll"/> <ROW Feature_="MainFeature" Component_="Tango.PPC.Shared.dll"/> <ROW Feature_="MainFeature" Component_="Tango.CSV.dll"/> - <ROW Feature_="MainFeature" Component_="turbojpeg.dll"/> - <ROW Feature_="MainFeature" Component_="turbojpeg.dll.meta"/> - <ROW Feature_="MainFeature" Component_="turbojpeg.dll_1"/> - <ROW Feature_="MainFeature" Component_="turbojpeg.dll.meta_1"/> + <ROW Feature_="MainFeature" Component_="win7x86"/> + <ROW Feature_="MainFeature" Component_="win7x64"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.MsiInstExSeqComponent"> <ROW Action="AI_STORE_LOCATION" Condition="(Not Installed) OR REINSTALL" Sequence="1502"/> diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.cpp b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.cpp index a0e44c95c..82fb60ac4 100644 --- a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.cpp +++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.cpp @@ -2,9 +2,14 @@ #include "CalibrationInput.pb-c.h" #include "CalibrationOutput.pb-c.h" #include "CalibrationMeasurement.pb-c.h" +#include "LinearizationInput.pb-c.h" +#include "LinearizationOutput.pb-c.h" +#include "LinearizationMeasurement.pb-c.h" + #include <math.h> #include <algorithm> #include <exception> +#include <vector> using namespace std; #define MDRThr 1.0 @@ -13,7 +18,7 @@ using namespace std; #define dEThr 1.0 -Tango::ColorLib::ColorCalibrator::ColorCalibrator(): m_nsize(0), m_nlcm(NULL), m_LabData(NULL), m_inkChannel(0), m_targetVal(NULL), m_CalIndex(0) +Tango::ColorLib::ColorCalibrator::ColorCalibrator(): m_nsize(0), m_nlcm(NULL), m_LabData(NULL), m_inkChannel(0), m_targetVal(NULL), m_CalIndex(0), m_inkpercentage(NULL) { } @@ -42,14 +47,17 @@ void Tango::ColorLib::ColorCalibrator::ClearData() delete[] m_targetVal; m_targetVal = NULL; } + if (m_inkpercentage != NULL) + { + delete[] m_inkpercentage; + m_inkpercentage = NULL; + } } size_t Tango::ColorLib::ColorCalibrator::GetLiquidFactor(uint8_t * input_buffer, size_t input_buffer_size, uint8_t *& output_buffer) { //Get Input - CalibrationInput* calibrationInput = NULL; - calibrationInput = (CalibrationInput*)malloc(sizeof(CalibrationInput)); - calibrationInput = calibration_input__unpack(NULL, input_buffer_size, input_buffer); + CalibrationInput* calibrationInput = calibration_input__unpack(NULL, input_buffer_size, input_buffer); //Investigate Input InitData((const CalibrationMeasurement**)calibrationInput->measurements, calibrationInput->n_measurements, calibrationInput->liquidtype, calibrationInput->targetl, calibrationInput->targeta, calibrationInput->targetb); @@ -79,13 +87,9 @@ size_t Tango::ColorLib::ColorCalibrator::GetLiquidFactor(uint8_t * input_buffer, std:string error_message; MaximalDispensingRate(calibrationOutput->liquidfactor, error_message); const char* c_error = error_message.c_str(); - int nErrorLength = strlen(c_error); - if (nErrorLength > 0) + if (strlen(c_error) > 0) { - calibrationOutput->errormessage = (char*)malloc(nErrorLength); - for (int i = 0; i < nErrorLength; ++i) - calibrationOutput->errormessage[i] = c_error[i]; - + calibrationOutput->errormessage = strdup(c_error); } //Pack Output @@ -99,6 +103,62 @@ size_t Tango::ColorLib::ColorCalibrator::GetLiquidFactor(uint8_t * input_buffer, return size; } +size_t Tango::ColorLib::ColorCalibrator::GetLinearizationMeasurements(uint8_t * input_buffer, size_t input_buffer_size, uint8_t *& output_buffer) +{ + //Get Input + LinearizationInput* linearizationInput = linearization_input__unpack(NULL, input_buffer_size, input_buffer); + try + { + //Investigate Input + LinearizationInitData((const LinearizationMeasurement**)linearizationInput->measurements, linearizationInput->n_measurements, linearizationInput->liquidtype, linearizationInput->targetl, linearizationInput->targeta, linearizationInput->targetb); + + //Init Output + LinearizationOutput *linearizationOutput = (LinearizationOutput*)malloc(sizeof(LinearizationOutput)); + linearization_output__init(linearizationOutput); + + std:string error_message; + linearizationOutput->n_inkpercentage = m_nsize; + linearizationOutput->inkpercentage = new double[m_nsize]; + Linearizaton(m_inkpercentage, linearizationOutput->inkpercentage, error_message); + const char* c_error = error_message.c_str(); + if (strlen(c_error) > 0) + { + linearizationOutput->has_haserror = true; + linearizationOutput->haserror = true; + linearizationOutput->errormessage = strdup(c_error); + } + //Pack Output + output_buffer = (uint8_t*)malloc(linearization_output__get_packed_size(linearizationOutput)); + int size = linearization_output__pack(linearizationOutput, output_buffer); + + //Free Resources + linearization_input__free_unpacked(linearizationInput, NULL); + linearization_output__free_unpacked(linearizationOutput, NULL); + + return size; + } + catch (const std::exception& e) + { + //Notify Error... + LinearizationOutput *linearizationOutput = (LinearizationOutput*)malloc(sizeof(LinearizationOutput)); + linearization_output__init(linearizationOutput); + + linearizationOutput->has_haserror = true; + linearizationOutput->haserror = true; + + const char* what = e.what(); + linearizationOutput->errormessage = strdup(what); + + output_buffer = (uint8_t*)malloc(linearization_output__get_packed_size(linearizationOutput)); + int size = linearization_output__pack(linearizationOutput, output_buffer); + //Free Resources + linearization_input__free_unpacked(linearizationInput, NULL); + linearization_output__free_unpacked(linearizationOutput, NULL); + + return (size); + } +} + void Tango::ColorLib::ColorCalibrator::InitData(const CalibrationMeasurement** m, const size_t &nsize, const int &inkChannel, const double& targetl, const double& targeta, const double& targetb) { ClearData(); @@ -312,3 +372,247 @@ void Tango::ColorLib::ColorCalibrator::dEcmc(double *refX, double *samX, double dECMC = sqrt(pow(dL / (2 * refX_SL), 2) + pow(dC / refX_SC, 2) + pow(dH / refX_SH, 2)); } + +void Tango::ColorLib::ColorCalibrator::LinearizationInitData(const LinearizationMeasurement** m, const size_t &nsize, const int &inkChannel, const double& targetl, const double& targeta, const double& targetb) +{ + ClearData(); + m_nsize = nsize; + m_LabData = new double*[m_nsize]; + m_inkpercentage = new double[m_nsize]; + + for (int i = 0; i < m_nsize; ++i) + { + m_LabData[i] = new double[3]; + m_LabData[i][0] = m[i]->l; + m_LabData[i][1] = m[i]->a; + m_LabData[i][2] = m[i]->b; + m_inkpercentage[i] = m[i]->inkpercentage; + + } + m_inkChannel = inkChannel; + m_targetVal = new double[3]; + m_targetVal[0] = targetl; + m_targetVal[1] = targeta; + m_targetVal[2] = targetb; + + int m_CalIndex = 0; + if (m_inkChannel == 2) + m_CalIndex = 2; +} +void Tango::ColorLib::ColorCalibrator::Linearizaton(double *InkVals, double *&LinearInkVal, std::string &error) +{ + double maxVal = -1000; + double minVal = 1000; + double * yVal = new double[m_nsize]; + + for (int i = 0; i < m_nsize; ++i) + { + yVal[i] = m_LabData[i][m_CalIndex]; + } + bool res = SortValues(InkVals, yVal); + + if (CheckDuplicates(InkVals, error)) + return; + if (CheckLimits(InkVals, error)) + return; + + //Values are sorted and unique + SmoothCurveData(yVal, 3); + if (CheckMonotonicity(yVal, error)) + return; + //Values are monotonic, therefore can be inverted + int Kconst = 1; + if (yVal[0] > yVal[m_nsize - 1]) + Kconst = -1; + for (int i = 0; i < m_nsize; ++i) + { + yVal[i] *= Kconst; + } + + if (false == Linearize(yVal, LinearInkVal, error)) + { + return; + } +} +bool Tango::ColorLib::ColorCalibrator::SortValues(double *InkVals, double *yVal) +{ + //prepare data + std::vector<VectorPair> IndVal; + + //fill up first vector pair + + double *tmpLab = new double[m_nsize]; + double *tmpInk = new double[m_nsize]; + int *tmpSort = new int[m_nsize]; + int *SortIndex = new int[m_nsize]; + //init index + IndVal.resize(m_nsize); + for (int i = 0; i < m_nsize; ++i) + { + IndVal[i].m_ID = i; + SortIndex[i] = i; + IndVal[i].m_val = m_inkpercentage[i]; + yVal[i] = m_LabData[i][m_CalIndex]; + } + + std::stable_sort(IndVal.begin(), IndVal.end(), ByDouble()); + //arrange all sorted values + for (int i = 0; i < m_nsize; ++i) + { + tmpLab[i] = yVal[IndVal[i].m_ID]; + tmpInk[i] = InkVals[IndVal[i].m_ID]; + tmpSort[i] = SortIndex[IndVal[i].m_ID]; + } + for (int i = 0; i < m_nsize; ++i) + { + yVal[i] = tmpLab[i]; + m_inkpercentage[i] = tmpInk[i]; + InkVals[i] = tmpInk[i]; + SortIndex[i] = tmpSort[i]; + } + if (tmpSort != NULL) + { + delete[] tmpSort; + tmpSort = NULL; + } + if (tmpLab != NULL) + { + delete[] tmpLab; + tmpLab = NULL; + } + if (tmpInk != NULL) + { + delete[] tmpInk; + tmpInk = NULL; + } + IndVal.resize(0); + return(true); +} +bool Tango::ColorLib::ColorCalibrator::CheckDuplicates(double *InkVals, std::string &error) +{ + double diff; + for (int i = 0; i < m_nsize - 1; ++i) + { + diff = InkVals[i + 1] - InkVals[i]; + if (diff == 0.0) + { + error = "Ink Percentages have to be unique"; + return true; + //throw std::exception("Ink Percentages have to be unique"); + } + + } + return false; +} + +bool Tango::ColorLib::ColorCalibrator::CheckLimits(double *InkVals, std::string &error) +{ + double maxVal = -1000.0; + double minVal = 1000.0; + for (int i = 0; i < m_nsize; ++i) + { + maxVal = fmax(maxVal, InkVals[i]); + minVal = fmin(minVal, InkVals[i]); + } + if (maxVal != 100.0) + { + error ="Maximal value has to be 100%"; + return true; + } + + if (minVal != 0.0) + { + error = "Minimal value has to be 0"; + return true; + } + return false; +} + +void Tango::ColorLib::ColorCalibrator::SmoothCurveData(double *YVal, int FilterWidth) +{ + int NumIter = max(FilterWidth, 3) - 2; + //Smooth the data with repeated applications of a[1 1 1] filter + double *tmpyVal = new double[m_nsize]; + for (int i = 0; i < NumIter; ++i) + { + for (int j = 0; j < m_nsize; ++j) + tmpyVal[j] = YVal[j]; + for (int j = 1; j < m_nsize - 1; ++j) + YVal[j] = (tmpyVal[j - 1] + tmpyVal[j] + tmpyVal[j + 1]) / 3; + } + delete[] tmpyVal; + tmpyVal = NULL; +} + +bool Tango::ColorLib::ColorCalibrator::CheckMonotonicity(double *yVal, std::string &error) +{ + //Check Monotonicity of Smooth Lab Channel + + double diff; + diff = yVal[m_nsize - 1] - yVal[0]; + int CF = 1; + if (diff < 0) + CF = -1; + + for (int i = 0; i < m_nsize - 1; ++i) + { + diff = CF * (yVal[i + 1] - yVal[i]); + if (diff <= 0.0) + { + error = "Non monotonic behavior, please remeasure"; + return true; + } + } + return false; +} +bool Tango::ColorLib::ColorCalibrator::Linearize(double *yVal, double*LinearInkVal, std::string &error) +{ + double Gain = (yVal[m_nsize - 1] - yVal[0]) / (m_inkpercentage[m_nsize - 1] - m_inkpercentage[0]); + double Offset = yVal[0] - Gain * m_inkpercentage[0]; + double *LabLinear = new double[m_nsize]; + for (int i = 0; i < m_nsize; i++) + LabLinear[i] = Gain * m_inkpercentage[i] + Offset; + double outVal = 0.0; + for (int i = 0; i < m_nsize; i++) + { + if (false == Interp1D(LabLinear, m_inkpercentage, yVal[i], outVal, error)) + return false; + LinearInkVal[i] = outVal; + } + return true; +} +bool Tango::ColorLib::ColorCalibrator::Interp1D(double* xx, double *yy, double InValue, double &OutValue, std::string &error) +{ + int m, ind; + int errType = 0; + + ind = -1; + + //Check Bounds + if ((InValue < xx[0] - epsTol) || (InValue > xx[m_nsize - 1] + epsTol)) + { + error = "Interp1D: In Value out of Bounds"; + return false; + } + + if ((InValue > xx[0] - epsTol) && (InValue < xx[0])) + InValue = xx[0]; + + if ((InValue > xx[m_nsize - 1]) && (InValue < xx[m_nsize - 1] + epsTol)) + InValue = xx[m_nsize - 1]; + + for (m = 0; m < m_nsize - 1; ++m) + { + if (xx[m] <= InValue && xx[m + 1] >= InValue) + { + ind = m; + break; + } + } + if (ind == -1) + { + error = "Could not find interpolation interval"; + return false; + } + OutValue = ((InValue - xx[m])*yy[m + 1] + (xx[m + 1] - InValue)*yy[m]) / (xx[m + 1] - xx[m]); +} diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.h b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.h index 131241ccb..8d2ff664b 100644 --- a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.h +++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.h @@ -4,6 +4,7 @@ #include "CalibrationInput.pb-c.h" #include "CalibrationOutput.pb-c.h" #include "CalibrationMeasurement.pb-c.h" +#include "LinearizationMeasurement.pb-c.h" #pragma once @@ -17,11 +18,37 @@ namespace Tango ColorCalibrator(); ~ColorCalibrator(); size_t Tango::ColorLib::ColorCalibrator::GetLiquidFactor(uint8_t * input_buffer, size_t input_buffer_size, uint8_t *& output_buffer); + size_t Tango::ColorLib::ColorCalibrator::GetLinearizationMeasurements(uint8_t * input_buffer, size_t input_buffer_size, uint8_t *& output_buffer); protected: - void InitData(const CalibrationMeasurement** m, const size_t &nsize, const int &inkChannel, const double& targetl, const double& targeta, const double& targetb); + void InitData(const CalibrationMeasurement** m, + const size_t &nsize, const int &inkChannel, const double& targetl, const double& targeta, const double& targetb); void MaximalDispensingRate(double &MDispRate, std::string &outputmessage); void dEcmc(double *refX, double *samX, double &dECMC); + void LinearizationInitData(const LinearizationMeasurement** m, + const size_t &nsize, const int &inkChannel, const double& targetl, const double& targeta, const double& targetb); + void Linearizaton(double *InkVals, double*& LinearInkVal, std::string &error); + bool SortValues(double *InkVals, double *yVal); + bool CheckLimits(double *InkVals, std::string &error); + void SmoothCurveData(double *YVal, int FilterWidth); + bool CheckMonotonicity(double *yVal, std::string &error); + bool CheckDuplicates(double *InkVals, std::string &error); + bool Linearize(double *yVal, double*LinearInkVal, std::string &error); + bool Interp1D(double* xx, double *yy, double InValue, double &OutValue, std::string &error); + + protected: + struct VectorPair + { + int m_ID; + double m_val; + }; + struct ByDouble : public std::binary_function<VectorPair, VectorPair, bool> + { + bool operator()(const VectorPair& lhs, const VectorPair& rhs) const + { + return lhs.m_val < rhs.m_val; + } + }; private: void ClearData(); @@ -32,6 +59,8 @@ namespace Tango int m_inkChannel; double *m_targetVal; int m_CalIndex; + + double *m_inkpercentage; }; } } diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Exports.cpp b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Exports.cpp index ed32be0b3..24e156640 100644 --- a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Exports.cpp +++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Exports.cpp @@ -47,3 +47,9 @@ extern "C" EXPORT_API size_t __cdecl GenerateGradient(uint8_t* input_buffer, siz return converter.GenerateGradient(input_buffer, input_buffer_size, output_buffer); } +extern "C" EXPORT_API size_t __cdecl GetLinearizationMeasurements(uint8_t* input_buffer, size_t input_buffer_size, uint8_t*& output_buffer) +{ + ColorCalibrator calibrator; + return calibrator.GetLinearizationMeasurements(input_buffer, input_buffer_size, output_buffer); +} + diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationInput.pb-c.c b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationInput.pb-c.c new file mode 100644 index 000000000..5d30f6cd5 --- /dev/null +++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationInput.pb-c.c @@ -0,0 +1,144 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: LinearizationInput.proto */ + +/* Do not generate deprecated warnings for self */ +#ifndef PROTOBUF_C__NO_DEPRECATED +#define PROTOBUF_C__NO_DEPRECATED +#endif + +#include "LinearizationInput.pb-c.h" +void linearization_input__init + (LinearizationInput *message) +{ + static const LinearizationInput init_value = LINEARIZATION_INPUT__INIT; + *message = init_value; +} +size_t linearization_input__get_packed_size + (const LinearizationInput *message) +{ + assert(message->base.descriptor == &linearization_input__descriptor); + return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); +} +size_t linearization_input__pack + (const LinearizationInput *message, + uint8_t *out) +{ + assert(message->base.descriptor == &linearization_input__descriptor); + return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); +} +size_t linearization_input__pack_to_buffer + (const LinearizationInput *message, + ProtobufCBuffer *buffer) +{ + assert(message->base.descriptor == &linearization_input__descriptor); + return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); +} +LinearizationInput * + linearization_input__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data) +{ + return (LinearizationInput *) + protobuf_c_message_unpack (&linearization_input__descriptor, + allocator, len, data); +} +void linearization_input__free_unpacked + (LinearizationInput *message, + ProtobufCAllocator *allocator) +{ + if(!message) + return; + assert(message->base.descriptor == &linearization_input__descriptor); + protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); +} +static const ProtobufCFieldDescriptor linearization_input__field_descriptors[5] = +{ + { + "LiquidType", + 1, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_ENUM, + offsetof(LinearizationInput, has_liquidtype), + offsetof(LinearizationInput, liquidtype), + &liquid_type__descriptor, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "TargetL", + 2, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_DOUBLE, + offsetof(LinearizationInput, has_targetl), + offsetof(LinearizationInput, targetl), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "TargetA", + 3, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_DOUBLE, + offsetof(LinearizationInput, has_targeta), + offsetof(LinearizationInput, targeta), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "TargetB", + 4, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_DOUBLE, + offsetof(LinearizationInput, has_targetb), + offsetof(LinearizationInput, targetb), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "Measurements", + 5, + PROTOBUF_C_LABEL_REPEATED, + PROTOBUF_C_TYPE_MESSAGE, + offsetof(LinearizationInput, n_measurements), + offsetof(LinearizationInput, measurements), + &linearization_measurement__descriptor, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, +}; +static const unsigned linearization_input__field_indices_by_name[] = { + 0, /* field[0] = LiquidType */ + 4, /* field[4] = Measurements */ + 2, /* field[2] = TargetA */ + 3, /* field[3] = TargetB */ + 1, /* field[1] = TargetL */ +}; +static const ProtobufCIntRange linearization_input__number_ranges[1 + 1] = +{ + { 1, 0 }, + { 0, 5 } +}; +const ProtobufCMessageDescriptor linearization_input__descriptor = +{ + PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, + "LinearizationInput", + "LinearizationInput", + "LinearizationInput", + "", + sizeof(LinearizationInput), + 5, + linearization_input__field_descriptors, + linearization_input__field_indices_by_name, + 1, linearization_input__number_ranges, + (ProtobufCMessageInit) linearization_input__init, + NULL,NULL,NULL /* reserved[123] */ +}; diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationInput.pb-c.h b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationInput.pb-c.h new file mode 100644 index 000000000..9cab974c5 --- /dev/null +++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationInput.pb-c.h @@ -0,0 +1,82 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: LinearizationInput.proto */ + +#ifndef PROTOBUF_C_LinearizationInput_2eproto__INCLUDED +#define PROTOBUF_C_LinearizationInput_2eproto__INCLUDED + +#include <protobuf-c/protobuf-c.h> + +PROTOBUF_C__BEGIN_DECLS + +#if PROTOBUF_C_VERSION_NUMBER < 1003000 +# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. +#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION +# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. +#endif + +#include "LinearizationMeasurement.pb-c.h" +#include "LiquidType.pb-c.h" + +typedef struct _LinearizationInput LinearizationInput; + + +/* --- enums --- */ + + +/* --- messages --- */ + +struct _LinearizationInput +{ + ProtobufCMessage base; + protobuf_c_boolean has_liquidtype; + LiquidType liquidtype; + protobuf_c_boolean has_targetl; + double targetl; + protobuf_c_boolean has_targeta; + double targeta; + protobuf_c_boolean has_targetb; + double targetb; + size_t n_measurements; + LinearizationMeasurement **measurements; +}; +#define LINEARIZATION_INPUT__INIT \ + { PROTOBUF_C_MESSAGE_INIT (&linearization_input__descriptor) \ + , 0, LIQUID_TYPE__Cyan, 0, 0, 0, 0, 0, 0, 0,NULL } + + +/* LinearizationInput methods */ +void linearization_input__init + (LinearizationInput *message); +size_t linearization_input__get_packed_size + (const LinearizationInput *message); +size_t linearization_input__pack + (const LinearizationInput *message, + uint8_t *out); +size_t linearization_input__pack_to_buffer + (const LinearizationInput *message, + ProtobufCBuffer *buffer); +LinearizationInput * + linearization_input__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data); +void linearization_input__free_unpacked + (LinearizationInput *message, + ProtobufCAllocator *allocator); +/* --- per-message closures --- */ + +typedef void (*LinearizationInput_Closure) + (const LinearizationInput *message, + void *closure_data); + +/* --- services --- */ + + +/* --- descriptors --- */ + +extern const ProtobufCMessageDescriptor linearization_input__descriptor; + +PROTOBUF_C__END_DECLS + + +#endif /* PROTOBUF_C_LinearizationInput_2eproto__INCLUDED */ diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationMeasurement.pb-c.c b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationMeasurement.pb-c.c new file mode 100644 index 000000000..0a242ee0f --- /dev/null +++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationMeasurement.pb-c.c @@ -0,0 +1,131 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: LinearizationMeasurement.proto */ + +/* Do not generate deprecated warnings for self */ +#ifndef PROTOBUF_C__NO_DEPRECATED +#define PROTOBUF_C__NO_DEPRECATED +#endif + +#include "LinearizationMeasurement.pb-c.h" +void linearization_measurement__init + (LinearizationMeasurement *message) +{ + static const LinearizationMeasurement init_value = LINEARIZATION_MEASUREMENT__INIT; + *message = init_value; +} +size_t linearization_measurement__get_packed_size + (const LinearizationMeasurement *message) +{ + assert(message->base.descriptor == &linearization_measurement__descriptor); + return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); +} +size_t linearization_measurement__pack + (const LinearizationMeasurement *message, + uint8_t *out) +{ + assert(message->base.descriptor == &linearization_measurement__descriptor); + return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); +} +size_t linearization_measurement__pack_to_buffer + (const LinearizationMeasurement *message, + ProtobufCBuffer *buffer) +{ + assert(message->base.descriptor == &linearization_measurement__descriptor); + return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); +} +LinearizationMeasurement * + linearization_measurement__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data) +{ + return (LinearizationMeasurement *) + protobuf_c_message_unpack (&linearization_measurement__descriptor, + allocator, len, data); +} +void linearization_measurement__free_unpacked + (LinearizationMeasurement *message, + ProtobufCAllocator *allocator) +{ + if(!message) + return; + assert(message->base.descriptor == &linearization_measurement__descriptor); + protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); +} +static const ProtobufCFieldDescriptor linearization_measurement__field_descriptors[4] = +{ + { + "InkPercentage", + 1, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_DOUBLE, + offsetof(LinearizationMeasurement, has_inkpercentage), + offsetof(LinearizationMeasurement, inkpercentage), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "L", + 2, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_DOUBLE, + offsetof(LinearizationMeasurement, has_l), + offsetof(LinearizationMeasurement, l), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "A", + 3, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_DOUBLE, + offsetof(LinearizationMeasurement, has_a), + offsetof(LinearizationMeasurement, a), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "B", + 4, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_DOUBLE, + offsetof(LinearizationMeasurement, has_b), + offsetof(LinearizationMeasurement, b), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, +}; +static const unsigned linearization_measurement__field_indices_by_name[] = { + 2, /* field[2] = A */ + 3, /* field[3] = B */ + 0, /* field[0] = InkPercentage */ + 1, /* field[1] = L */ +}; +static const ProtobufCIntRange linearization_measurement__number_ranges[1 + 1] = +{ + { 1, 0 }, + { 0, 4 } +}; +const ProtobufCMessageDescriptor linearization_measurement__descriptor = +{ + PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, + "LinearizationMeasurement", + "LinearizationMeasurement", + "LinearizationMeasurement", + "", + sizeof(LinearizationMeasurement), + 4, + linearization_measurement__field_descriptors, + linearization_measurement__field_indices_by_name, + 1, linearization_measurement__number_ranges, + (ProtobufCMessageInit) linearization_measurement__init, + NULL,NULL,NULL /* reserved[123] */ +}; diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationMeasurement.pb-c.h b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationMeasurement.pb-c.h new file mode 100644 index 000000000..b4f17f87e --- /dev/null +++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationMeasurement.pb-c.h @@ -0,0 +1,78 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: LinearizationMeasurement.proto */ + +#ifndef PROTOBUF_C_LinearizationMeasurement_2eproto__INCLUDED +#define PROTOBUF_C_LinearizationMeasurement_2eproto__INCLUDED + +#include <protobuf-c/protobuf-c.h> + +PROTOBUF_C__BEGIN_DECLS + +#if PROTOBUF_C_VERSION_NUMBER < 1003000 +# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. +#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION +# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. +#endif + + +typedef struct _LinearizationMeasurement LinearizationMeasurement; + + +/* --- enums --- */ + + +/* --- messages --- */ + +struct _LinearizationMeasurement +{ + ProtobufCMessage base; + protobuf_c_boolean has_inkpercentage; + double inkpercentage; + protobuf_c_boolean has_l; + double l; + protobuf_c_boolean has_a; + double a; + protobuf_c_boolean has_b; + double b; +}; +#define LINEARIZATION_MEASUREMENT__INIT \ + { PROTOBUF_C_MESSAGE_INIT (&linearization_measurement__descriptor) \ + , 0, 0, 0, 0, 0, 0, 0, 0 } + + +/* LinearizationMeasurement methods */ +void linearization_measurement__init + (LinearizationMeasurement *message); +size_t linearization_measurement__get_packed_size + (const LinearizationMeasurement *message); +size_t linearization_measurement__pack + (const LinearizationMeasurement *message, + uint8_t *out); +size_t linearization_measurement__pack_to_buffer + (const LinearizationMeasurement *message, + ProtobufCBuffer *buffer); +LinearizationMeasurement * + linearization_measurement__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data); +void linearization_measurement__free_unpacked + (LinearizationMeasurement *message, + ProtobufCAllocator *allocator); +/* --- per-message closures --- */ + +typedef void (*LinearizationMeasurement_Closure) + (const LinearizationMeasurement *message, + void *closure_data); + +/* --- services --- */ + + +/* --- descriptors --- */ + +extern const ProtobufCMessageDescriptor linearization_measurement__descriptor; + +PROTOBUF_C__END_DECLS + + +#endif /* PROTOBUF_C_LinearizationMeasurement_2eproto__INCLUDED */ diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationOutput.pb-c.c b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationOutput.pb-c.c new file mode 100644 index 000000000..5bd04b218 --- /dev/null +++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationOutput.pb-c.c @@ -0,0 +1,119 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: LinearizationOutput.proto */ + +/* Do not generate deprecated warnings for self */ +#ifndef PROTOBUF_C__NO_DEPRECATED +#define PROTOBUF_C__NO_DEPRECATED +#endif + +#include "LinearizationOutput.pb-c.h" +void linearization_output__init + (LinearizationOutput *message) +{ + static const LinearizationOutput init_value = LINEARIZATION_OUTPUT__INIT; + *message = init_value; +} +size_t linearization_output__get_packed_size + (const LinearizationOutput *message) +{ + assert(message->base.descriptor == &linearization_output__descriptor); + return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); +} +size_t linearization_output__pack + (const LinearizationOutput *message, + uint8_t *out) +{ + assert(message->base.descriptor == &linearization_output__descriptor); + return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); +} +size_t linearization_output__pack_to_buffer + (const LinearizationOutput *message, + ProtobufCBuffer *buffer) +{ + assert(message->base.descriptor == &linearization_output__descriptor); + return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); +} +LinearizationOutput * + linearization_output__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data) +{ + return (LinearizationOutput *) + protobuf_c_message_unpack (&linearization_output__descriptor, + allocator, len, data); +} +void linearization_output__free_unpacked + (LinearizationOutput *message, + ProtobufCAllocator *allocator) +{ + if(!message) + return; + assert(message->base.descriptor == &linearization_output__descriptor); + protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); +} +static const ProtobufCFieldDescriptor linearization_output__field_descriptors[3] = +{ + { + "InkPercentage", + 1, + PROTOBUF_C_LABEL_REPEATED, + PROTOBUF_C_TYPE_DOUBLE, + offsetof(LinearizationOutput, n_inkpercentage), + offsetof(LinearizationOutput, inkpercentage), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "HasError", + 20, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_BOOL, + offsetof(LinearizationOutput, has_haserror), + offsetof(LinearizationOutput, haserror), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "ErrorMessage", + 21, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_STRING, + 0, /* quantifier_offset */ + offsetof(LinearizationOutput, errormessage), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, +}; +static const unsigned linearization_output__field_indices_by_name[] = { + 2, /* field[2] = ErrorMessage */ + 1, /* field[1] = HasError */ + 0, /* field[0] = InkPercentage */ +}; +static const ProtobufCIntRange linearization_output__number_ranges[2 + 1] = +{ + { 1, 0 }, + { 20, 1 }, + { 0, 3 } +}; +const ProtobufCMessageDescriptor linearization_output__descriptor = +{ + PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, + "LinearizationOutput", + "LinearizationOutput", + "LinearizationOutput", + "", + sizeof(LinearizationOutput), + 3, + linearization_output__field_descriptors, + linearization_output__field_indices_by_name, + 2, linearization_output__number_ranges, + (ProtobufCMessageInit) linearization_output__init, + NULL,NULL,NULL /* reserved[123] */ +}; diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationOutput.pb-c.h b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationOutput.pb-c.h new file mode 100644 index 000000000..b0ab54e12 --- /dev/null +++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationOutput.pb-c.h @@ -0,0 +1,75 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: LinearizationOutput.proto */ + +#ifndef PROTOBUF_C_LinearizationOutput_2eproto__INCLUDED +#define PROTOBUF_C_LinearizationOutput_2eproto__INCLUDED + +#include <protobuf-c/protobuf-c.h> + +PROTOBUF_C__BEGIN_DECLS + +#if PROTOBUF_C_VERSION_NUMBER < 1003000 +# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. +#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION +# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. +#endif + + +typedef struct _LinearizationOutput LinearizationOutput; + + +/* --- enums --- */ + + +/* --- messages --- */ + +struct _LinearizationOutput +{ + ProtobufCMessage base; + size_t n_inkpercentage; + double *inkpercentage; + protobuf_c_boolean has_haserror; + protobuf_c_boolean haserror; + char *errormessage; +}; +#define LINEARIZATION_OUTPUT__INIT \ + { PROTOBUF_C_MESSAGE_INIT (&linearization_output__descriptor) \ + , 0,NULL, 0, 0, NULL } + + +/* LinearizationOutput methods */ +void linearization_output__init + (LinearizationOutput *message); +size_t linearization_output__get_packed_size + (const LinearizationOutput *message); +size_t linearization_output__pack + (const LinearizationOutput *message, + uint8_t *out); +size_t linearization_output__pack_to_buffer + (const LinearizationOutput *message, + ProtobufCBuffer *buffer); +LinearizationOutput * + linearization_output__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data); +void linearization_output__free_unpacked + (LinearizationOutput *message, + ProtobufCAllocator *allocator); +/* --- per-message closures --- */ + +typedef void (*LinearizationOutput_Closure) + (const LinearizationOutput *message, + void *closure_data); + +/* --- services --- */ + + +/* --- descriptors --- */ + +extern const ProtobufCMessageDescriptor linearization_output__descriptor; + +PROTOBUF_C__END_DECLS + + +#endif /* PROTOBUF_C_LinearizationOutput_2eproto__INCLUDED */ diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj index a0dc368bf..5c9365f84 100644 --- a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj +++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj @@ -178,6 +178,9 @@ <ClInclude Include="PMR\ColorLab\GradientOutputStop.pb-c.h" /> <ClInclude Include="PMR\ColorLab\InputCoordinates.pb-c.h" /> <ClInclude Include="PMR\ColorLab\InputLiquid.pb-c.h" /> + <ClInclude Include="PMR\ColorLab\LinearizationInput.pb-c.h" /> + <ClInclude Include="PMR\ColorLab\LinearizationMeasurement.pb-c.h" /> + <ClInclude Include="PMR\ColorLab\LinearizationOutput.pb-c.h" /> <ClInclude Include="PMR\ColorLab\LiquidType.pb-c.h" /> <ClInclude Include="PMR\ColorLab\LiquidVolume.pb-c.h" /> <ClInclude Include="PMR\ColorLab\OutputCoordinates.pb-c.h" /> @@ -215,6 +218,9 @@ <ClCompile Include="PMR\ColorLab\GradientOutputStop.pb-c.c" /> <ClCompile Include="PMR\ColorLab\InputCoordinates.pb-c.c" /> <ClCompile Include="PMR\ColorLab\InputLiquid.pb-c.c" /> + <ClCompile Include="PMR\ColorLab\LinearizationInput.pb-c.c" /> + <ClCompile Include="PMR\ColorLab\LinearizationMeasurement.pb-c.c" /> + <ClCompile Include="PMR\ColorLab\LinearizationOutput.pb-c.c" /> <ClCompile Include="PMR\ColorLab\LiquidType.pb-c.c" /> <ClCompile Include="PMR\ColorLab\LiquidVolume.pb-c.c" /> <ClCompile Include="PMR\ColorLab\OutputCoordinates.pb-c.c" /> diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj.filters b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj.filters index f78b6daee..3c6c1330d 100644 --- a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj.filters +++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj.filters @@ -132,6 +132,15 @@ <ClInclude Include="PMR\ColorLab\LiquidVolume.pb-c.h"> <Filter>PMR</Filter> </ClInclude> + <ClInclude Include="PMR\ColorLab\LinearizationInput.pb-c.h"> + <Filter>PMR</Filter> + </ClInclude> + <ClInclude Include="PMR\ColorLab\LinearizationMeasurement.pb-c.h"> + <Filter>PMR</Filter> + </ClInclude> + <ClInclude Include="PMR\ColorLab\LinearizationOutput.pb-c.h"> + <Filter>PMR</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="Exports.cpp"> @@ -230,5 +239,14 @@ <ClCompile Include="PMR\ColorLab\LiquidVolume.pb-c.c"> <Filter>PMR</Filter> </ClCompile> + <ClCompile Include="PMR\ColorLab\LinearizationInput.pb-c.c"> + <Filter>PMR</Filter> + </ClCompile> + <ClCompile Include="PMR\ColorLab\LinearizationMeasurement.pb-c.c"> + <Filter>PMR</Filter> + </ClCompile> + <ClCompile Include="PMR\ColorLab\LinearizationOutput.pb-c.c"> + <Filter>PMR</Filter> + </ClCompile> </ItemGroup> </Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/App.config b/Software/Visual_Studio/FSE/Tango.FSE.UI/App.config index 291f23910..638e8276d 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/App.config +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/App.config @@ -5,7 +5,7 @@ <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections> <appSettings> - <add key="GatewayUrl" value="http://localhost:2222" /> + <add key="GatewayUrl" value="https://machineservice-gateway.azurewebsites.net" /> </appSettings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/Properties/AssemblyInfo.cs index e59b9f292..ef63cf517 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Properties/AssemblyInfo.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Properties/AssemblyInfo.cs @@ -7,49 +7,6 @@ using System.Windows; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("Tango.FSE.UI")] -[assembly: AssemblyDescription("Tango FSE")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Twine")] -[assembly: AssemblyProduct("Tango.FSE.UI")] -[assembly: AssemblyCopyright("Copyright © Twine Solutions LTD 2020")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] +[assembly: AssemblyTitle("Tango FSE")] +[assembly: AssemblyVersion("1.0.1.0")] -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -//In order to begin building localizable applications, set -//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file -//inside a <PropertyGroup>. For example, if you are using US english -//in your source files, set the <UICulture> to en-US. Then uncomment -//the NeutralResourceLanguage attribute below. Update the "en-US" in -//the line below to match the UICulture setting in the project file. - -//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] - - -[assembly: ThemeInfo( - ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located - //(used if a resource is not found in the page, - // or application resource dictionaries) - ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located - //(used if a resource is not found in the page, - // app, or any theme specific resource dictionaries) -)] - - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Tango.FSE.UI.csproj b/Software/Visual_Studio/FSE/Tango.FSE.UI/Tango.FSE.UI.csproj index dce2cbb9e..12d6bd8cf 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Tango.FSE.UI.csproj +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Tango.FSE.UI.csproj @@ -209,6 +209,9 @@ <Compile Include="..\..\PPC\Tango.PPC.Common\Publish\PublishInfo.cs"> <Link>RemoteUpgrade\PublishInfo.cs</Link> </Compile> + <Compile Include="..\..\Versioning\GlobalVersionInfo.cs"> + <Link>GlobalVersionInfo.cs</Link> + </Compile> <Compile Include="Authentication\DefaultAuthenticationProvider.cs" /> <Compile Include="BugReporting\DefaultBugReporter.cs" /> <Compile Include="BugReporting\SystemInformationModel.cs" /> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs index fe9ec7e37..8a24a9702 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs @@ -9,7 +9,7 @@ namespace Tango.MachineStudio.RML.Models { public class ColorLinearizationModel { - private class LinearizationDataItem + public class LinearizationDataItem { public double L { get; set; } public double A { get; set; } @@ -22,14 +22,10 @@ namespace Tango.MachineStudio.RML.Models } - public void GetDataFromFile(string fileName) + public void GetDataFromFile(string fileName, out List<LinearizationDataItem> items) { - ExcelReader reader = new ExcelReader(fileName); - var items = reader.GetDataByIndex<LinearizationDataItem>("Sheet1", 2); - foreach (var item in items) - { - } + items = reader.GetDataByIndex<LinearizationDataItem>("Sheet1", 2); reader.Dispose(); } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs index f118ce77a..7d05897d5 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs @@ -17,12 +17,14 @@ using Tango.PMR.ColorLab; using Tango.Logging; using Tango.MachineStudio.Common.Notifications; using System.Text.RegularExpressions; +using Microsoft.Win32; namespace Tango.MachineStudio.RML.ViewModels { public class ColorCalibrationViewVM : ExtendedObject { private IColorCalibrator _calibrator; + private ILinearizationMeasurements _linearizationMeasurementscalibrator; private INotificationProvider _notification; #region Properties @@ -41,15 +43,7 @@ namespace Tango.MachineStudio.RML.ViewModels get { return _liquidType; } set { _liquidType = value; RaisePropertyChangedAuto(); } } - - private BL.Entities.LiquidType _selectedLinearizationliquidType; - - public BL.Entities.LiquidType SelectedLinearizationLiquidType - { - get { return _selectedLinearizationliquidType; } - set { _selectedLinearizationliquidType = value; RaisePropertyChangedAuto(); } - } - + private List<BL.Entities.LiquidType> _liquidTypes; public List<BL.Entities.LiquidType> LiquidTypes @@ -98,18 +92,14 @@ namespace Tango.MachineStudio.RML.ViewModels public RelayCommand CreateGraphCommand { get; set; } public RelayCommand CreateLinearizationGraphCommand { get; set; } + public RelayCommand ExportGraphCommand { get; set; } - public string CalibrationLiquidTypeName + public string LiquidTypeName { get { return LiquidType == null ?"" : LiquidType.Name; } } - - public string LinearizationLiquidTypeName - { - get { return SelectedLinearizationLiquidType == null ? "" : SelectedLinearizationLiquidType.Name; } - } - + public Plot PlotControl { get; set; } private IList<DataPoint> _points; /// <summary> @@ -201,14 +191,17 @@ namespace Tango.MachineStudio.RML.ViewModels HasError = false; CreateGraphCommand = new RelayCommand(CreateGraph); CreateLinearizationGraphCommand = new RelayCommand(CreateLinearizationGraph); + ExportGraphCommand = new RelayCommand(ExportGraph); this.Points = new List<DataPoint>(); TargetPoints = new List<DataPoint>(); + LinearizationPoints = new List<DataPoint>(); } public void Loading() { LiquidType = LiquidTypes.Count > 0 ? LiquidTypes[0] : null; _calibrator = new DefaultColorCalibrator(); + _linearizationMeasurementscalibrator = new DefaultColorCalibrator(); } @@ -229,10 +222,10 @@ namespace Tango.MachineStudio.RML.ViewModels conversionInput.TargetB = lab.B; } CalibrationOutput result = _calibrator.GetLiquidFactor(conversionInput); - - ErrorMessage = Regex.Replace(result.ErrorMessage, "[^A-Za-z0-9_., ]+", ""); - + + ErrorMessage = result.ErrorMessage; HasError = false == String.IsNullOrEmpty(ErrorMessage); + return result.LiquidFactor; } catch (Exception ex ) @@ -281,33 +274,124 @@ namespace Tango.MachineStudio.RML.ViewModels #endregion #region CreateLinearizationGraph - private void CreateLinearizationGraph(object obj) + private async void CreateLinearizationGraph(object obj) { - if (_selectedLinearizationliquidType == null) + if (_liquidType == null ) return; - string labType = ColorCalibrationExt.DisplayLiquidTypeToLABType[_selectedLinearizationliquidType.Type]; + string labType = ColorCalibrationExt.DisplayLiquidTypeToLABType[_liquidType.Type]; ColorLinearizationModel model = new ColorLinearizationModel(); - string fileName = @"C:\Test\Test Input Lineration.xlsx"; - model.GetDataFromFile(fileName); - //await Task.Factory.StartNew(() => - //{ - // Factor = GetLiquidFactor(); - //}); + string fileName = GetInkDataFileOpen();// @"C:\Test\Test Input Lineration.xlsx";//dialog to open file + if (fileName == null) + return; - LinearizationPoints.Clear(); - - Measurements.ToList().ForEach(x => { - LinearizationPoints.Add(new DataPoint(x.Ink, x.L)); + List<ColorLinearizationModel.LinearizationDataItem> items; + model.GetDataFromFile(fileName, out items); + if (items.Count == 0) + return; + + List<double> outputPoints = new List<double>(); + await Task.Factory.StartNew(() => + { + outputPoints = GetLinearizationMeasurements(items); }); - RaisePropertyChanged("To"); - RaisePropertyChanged("From"); - XStep = (int)(Points.Count / 6); + LinearizationPoints.Clear(); + + if (outputPoints == null || outputPoints.Count != items.Count) + return; + + foreach (var nw in items.Zip(outputPoints, Tuple.Create)) + { + LinearizationPoints.Add(new DataPoint(nw.Item1.InkPercentage, nw.Item2)); + } + LinearizationPlotControl.InvalidatePlot(true); } + + /// <summary> + /// Open file dialog and get name of file + /// </summary> + /// <returns></returns> + private String GetInkDataFileOpen() + { + OpenFileDialog dlg = new OpenFileDialog(); + dlg.Title = "Select Ink data file"; + dlg.Filter = "Excel |*.xlsx"; + if (dlg.ShowDialogCenter()) + { + return dlg.FileName; + } + + return null; + } + + private List<double> GetLinearizationMeasurements(List<ColorLinearizationModel.LinearizationDataItem> items) + { + try + { + LinearizationInput linearizationInput = new LinearizationInput(); + items.ForEach(x => linearizationInput.Measurements.Add(new LinearizationMeasurement { L = x.L, A = x.A, B = x.B, InkPercentage = x.InkPercentage })); + linearizationInput.LiquidType = PMR.ColorLab.LiquidType.TryParse(_liquidType.Type.ToString(), out PMR.ColorLab.LiquidType outValue) ? outValue : PMR.ColorLab.LiquidType.Black; + + LAB lab; + if (ColorCalibrationExt.TargetLiquidTypeToLAB.TryGetValue(_liquidType.Type, out lab)) + { + linearizationInput.TargetL = lab.L; + linearizationInput.TargetA = lab.A; + linearizationInput.TargetB = lab.B; + } + LinearizationOutput result = _linearizationMeasurementscalibrator.GetLinearizationMeasurements(linearizationInput); + + if(!String.IsNullOrEmpty(result.ErrorMessage)) + { + LogManager.Log(result.ErrorMessage, "Error occurred while trying to call GetLinearizationMeasurements."); + } + return result.InkPercentage.ToList(); + } + catch (Exception ex) + { + LogManager.Log(ex, "Error occurred while trying to call GetLinearizationMeasurements."); + } + return null; + } + #endregion + + #region Export graph + /// <summary> + /// Exports the graph point to Excel file. + /// </summary> + protected void ExportGraph() + { + SaveFileDialog dlg = new SaveFileDialog(); + try + { + dlg.Title = $"Export excel calibration file for {LiquidType.Name}"; + dlg.Filter = "Excel Files|*.xlsx"; + dlg.DefaultExt = ".xlsx"; + dlg.FileName = $"CData_{LiquidType.Name}_v{LiquidType.Version}.xlsx"; + if (dlg.ShowDialog().Value) + { + List<CalibrationPoint> points = new List<CalibrationPoint>(); + LinearizationPoints.ToList().ForEach(x=> points.Add(ToCalibrationPoint(x))); + BL.Calibration.CalibrationHelper.ExportCalibrationDataToExcel(points, dlg.FileName); + } + } + catch (Exception ex) + { + LogManager.Log(ex, "Error exporting excel file " + dlg.FileName); + _notification.ShowError("An error occurred while trying to export the calibration data."); + } + } + public CalibrationPoint ToCalibrationPoint(DataPoint point) + { + return new CalibrationPoint() + { + X = point.X, + Y = point.Y, + }; + } #endregion - } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs index f583fa15e..d9ba419e0 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs @@ -314,11 +314,11 @@ namespace Tango.MachineStudio.RML.ViewModels try { var tables = RML.GetActiveProcessGroup().ProcessParametersTables.OrderBy(x => x.TableIndex).ToList(); - return (tables[1].MaxInkUptake / tables[0].MaxInkUptake) * 100; + return tables.Max(x => x.MaxInkUptake); } catch { - return BrushStop.MAX_TOTAL_LIQUID_VOLUME; + return BrushStop.MAX_INK_UPTAKE; } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml index 32d467cba..291d335de 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml @@ -20,160 +20,166 @@ </UserControl.Resources> <Grid> - <DockPanel> - <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="20 0" Padding="5" CornerRadius="5"> - <Border.Effect> - <DropShadowEffect Opacity="0.4" /> - </Border.Effect> - <Grid> - <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="20 0 0 0" FontSize="16" Padding="2">Color Calibrations</TextBlock> - </Grid> - </Border> - - <Grid Margin="25"> + <DockPanel> + <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="20 10"> + <TextBlock FontSize="16" HorizontalAlignment="Left" VerticalAlignment="Center">Liquid Type:</TextBlock> + <ComboBox Margin="40 0 0 0" MinWidth="180" HorizontalAlignment="Left" ItemsSource="{Binding LiquidTypes}" + SelectedItem="{Binding LiquidType}" DisplayMemberPath="Name" + Style="{StaticResource TransparentComboBoxStyle}" FontSize="16"></ComboBox> + </StackPanel> + <Grid> <Grid.ColumnDefinitions> - <ColumnDefinition Width="1*"/> - <ColumnDefinition Width="1*"/> + <ColumnDefinition Width="2*"/> <ColumnDefinition Width="1*"/> </Grid.ColumnDefinitions> - <Grid Grid.Column="0" Margin="20 0 20 0"> - <Grid.RowDefinitions> - <RowDefinition Height="1*"/> - <RowDefinition Height="3*"/> - </Grid.RowDefinitions> - <Grid Grid.Row="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="Auto" Height="80" Margin="0 0 0 20" > + <DockPanel Grid.Column="0"> + <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="20 0 0 0 " Padding="5" CornerRadius="5" Height="40" VerticalAlignment="Top"> + <Border.Effect> + <DropShadowEffect Opacity="0.4" /> + </Border.Effect> + <Grid> + <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="20 4 0 0" FontSize="16" Padding="0">LIQUID FACTOR</TextBlock> + </Grid> + </Border> + <Grid Margin="10 20 0 10"> <Grid.ColumnDefinitions> - <ColumnDefinition Width="1*"></ColumnDefinition> - <ColumnDefinition Width="Auto"></ColumnDefinition> + <ColumnDefinition Width="1*"/> + <ColumnDefinition Width="1*"/> </Grid.ColumnDefinitions> - <StackPanel Orientation="Vertical" Grid.Column="0"> - <TextBlock FontSize="20" HorizontalAlignment="Left" >Liquid Type</TextBlock> - <ComboBox Margin="0 20 0 0" MinWidth="140" HorizontalAlignment="Left" ItemsSource="{Binding LiquidTypes}" - SelectedItem="{Binding LiquidType}" DisplayMemberPath="Name" - Style="{StaticResource TransparentComboBoxStyle}" FontSize="16"></ComboBox> - </StackPanel> - <Button Grid.Column="1" VerticalAlignment="Top" Background="{StaticResource TransparentBackgroundBrush200}" MinWidth="160" Height="50" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Command="{Binding CreateGraphCommand}" > - <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}">GET MAX DISPENSING RATE</TextBlock> - </Button> - </Grid> - <Grid Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Stretch"> - <DataGrid HorizontalAlignment="Left" VerticalScrollBarVisibility ="Auto" SelectionUnit="FullRow" BorderBrush="{StaticResource DarkGrayBrush }" BorderThickness="1" Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="False" ItemsSource="{Binding Measurements}" Margin="0 30 0 50"> - <DataGrid.CellStyle> - <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="FocusVisualStyle" Value="{x:Null}"/> - <Setter Property="VerticalContentAlignment" Value="Center"></Setter> - </Style> - </DataGrid.CellStyle> - <DataGrid.Resources> - <Style x:Key="CellNumericUpDown" TargetType="{x:Type mahapps:NumericUpDown}" BasedOn="{StaticResource {x:Type mahapps:NumericUpDown}}"> - <Setter Property="FrameworkElement.HorizontalAlignment" Value="Stretch"/> - <Setter Property="HorizontalContentAlignment" Value="Left"/> - <Setter Property="Background" Value="Transparent"/> - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/> - <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/> - <Setter Property="Focusable" Value="false"/> - <Setter Property="IsHitTestVisible" Value="false"/> - <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/> - <Setter Property="FrameworkElement.VerticalAlignment" Value="Top"/> - <Setter Property="VerticalContentAlignment" Value="Center"/> - <Setter Property="FrameworkElement.MinHeight" Value="0"/> - <Setter Property="HideUpDownButtons" Value="true"/> - </Style> - <Style x:Key="EditableCellNumericUpDown" TargetType="{x:Type mahapps:NumericUpDown}" BasedOn="{StaticResource {x:Type mahapps:NumericUpDown}}"> - <Setter Property="FrameworkElement.HorizontalAlignment" Value="Stretch"/> - <Setter Property="HorizontalContentAlignment" Value="Left"/> - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/> - <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/> - <Setter Property="FrameworkElement.VerticalAlignment" Value="Top"/> - <Setter Property="VerticalContentAlignment" Value="Center"/> - <Setter Property="FrameworkElement.MinHeight" Value="0"/> - </Style> - </DataGrid.Resources> - <DataGrid.Columns> - <mahapps:DataGridNumericUpDownColumn Header="Ink nl/cm" Minimum="0" Maximum="100000" Binding="{Binding Ink}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" /> - <mahapps:DataGridNumericUpDownColumn Header="L" Minimum="0" Maximum="100" Binding="{Binding L}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}"/> - <mahapps:DataGridNumericUpDownColumn Header="A" Minimum="-128" Maximum="127" Binding="{Binding A}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" /> - <mahapps:DataGridNumericUpDownColumn Header="B" Minimum="-128" Maximum="127" Binding="{Binding B}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" /> - </DataGrid.Columns> - </DataGrid> - - </Grid> - </Grid> - <Grid Grid.Column="1" Margin="20 0 20 0"> - <Grid> <Grid.RowDefinitions> <RowDefinition Height="1*"/> - <RowDefinition Height="3*"/> + <RowDefinition Height="Auto"/> + <RowDefinition Height="Auto"/> </Grid.RowDefinitions> - <Border Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0 20 0 0" BorderThickness="0" BorderBrush="{StaticResource DarkGrayBrush}" CornerRadius="5"> - <oxy:Plot Title="{Binding CalibrationLiquidTypeName}" x:Name="CalibrationPlot" Margin="0 0 10 0" Background="Transparent"> - <oxy:Plot.Series > - <oxy:LineSeries ItemsSource="{Binding Points}" Color="#73B6EC" MarkerFill="SteelBlue" MarkerType="Circle" /> - <oxy:LineSeries ItemsSource="{Binding TargetPoints}" Color="#E14141" MarkerFill="#E14141" MarkerType="Circle" /> - </oxy:Plot.Series> - <oxy:Plot.Axes> - <oxy:LinearAxis Position="Bottom" Title = "nl/cm" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True"/> - <oxy:LinearAxis Position="Left" Title = "Lab" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="{Binding From}" Maximum="{Binding To}"/> - </oxy:Plot.Axes> - </oxy:Plot> - </Border> - <Border BorderBrush="{StaticResource BlueBrush100}" BorderThickness="0" CornerRadius="5" Margin="55 0 20 0"> - <StackPanel Orientation="Vertical" Grid.Row="0" Margin="10 10 0 0"> - <TextBlock FontSize="16" HorizontalAlignment="Left" Foreground="{StaticResource MainWindow.Foreground}" Height="50" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> - <Run FontSize="20"> Factor: </Run> - <Run Text="{Binding Factor}" Foreground="{StaticResource BlueBrush100}"></Run> - <LineBreak /> - </TextBlock> - <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}" FontWeight="SemiBold" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}" Margin="0 20 10 10" >Warning:</TextBlock> + <Grid HorizontalAlignment="Left" VerticalAlignment="Stretch" Grid.Column="0" Grid.Row="0" Margin="20 0 20 0"> + <DataGrid HorizontalAlignment="Left" VerticalScrollBarVisibility ="Auto" SelectionUnit="FullRow" BorderBrush="{StaticResource DarkGrayBrush }" BorderThickness="1" Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="False" ItemsSource="{Binding Measurements}" Margin="0 30 0 50"> + <DataGrid.CellStyle> + <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> + <Setter Property="BorderThickness" Value="0"/> + <Setter Property="FocusVisualStyle" Value="{x:Null}"/> + <Setter Property="VerticalContentAlignment" Value="Center"></Setter> + </Style> + </DataGrid.CellStyle> + <DataGrid.Resources> + <Style x:Key="CellNumericUpDown" TargetType="{x:Type mahapps:NumericUpDown}" BasedOn="{StaticResource {x:Type mahapps:NumericUpDown}}"> + <Setter Property="FrameworkElement.HorizontalAlignment" Value="Stretch"/> + <Setter Property="HorizontalContentAlignment" Value="Left"/> + <Setter Property="Background" Value="Transparent"/> + <Setter Property="BorderThickness" Value="0"/> + <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/> + <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/> + <Setter Property="Focusable" Value="false"/> + <Setter Property="IsHitTestVisible" Value="false"/> + <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/> + <Setter Property="FrameworkElement.VerticalAlignment" Value="Top"/> + <Setter Property="VerticalContentAlignment" Value="Center"/> + <Setter Property="FrameworkElement.MinHeight" Value="0"/> + <Setter Property="HideUpDownButtons" Value="true"/> + </Style> + <Style x:Key="EditableCellNumericUpDown" TargetType="{x:Type mahapps:NumericUpDown}" BasedOn="{StaticResource {x:Type mahapps:NumericUpDown}}"> + <Setter Property="FrameworkElement.HorizontalAlignment" Value="Stretch"/> + <Setter Property="HorizontalContentAlignment" Value="Left"/> + <Setter Property="BorderThickness" Value="0"/> + <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/> + <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/> + <Setter Property="FrameworkElement.VerticalAlignment" Value="Top"/> + <Setter Property="VerticalContentAlignment" Value="Center"/> + <Setter Property="FrameworkElement.MinHeight" Value="0"/> + </Style> + </DataGrid.Resources> + <DataGrid.Columns> + <mahapps:DataGridNumericUpDownColumn Header="Ink nl/cm" Minimum="0" Maximum="100000" Binding="{Binding Ink}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" /> + <mahapps:DataGridNumericUpDownColumn Header="L" Minimum="0" Maximum="100" Binding="{Binding L}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}"/> + <mahapps:DataGridNumericUpDownColumn Header="A" Minimum="-128" Maximum="127" Binding="{Binding A}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" /> + <mahapps:DataGridNumericUpDownColumn Header="B" Minimum="-128" Maximum="127" Binding="{Binding B}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" /> + </DataGrid.Columns> + </DataGrid> - <Border BorderThickness="1" CornerRadius="4" BorderBrush="{StaticResource DarkGrayBrush}" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}" Height="Auto"> - <TextBlock Margin="5" Foreground="{StaticResource RedBrush300}" Text="{Binding ErrorMessage}" TextWrapping="Wrap" Padding="5" FontSize="14"/> + </Grid> + + <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="1" Grid.Row="0" Margin="20 0 0 0"> + <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0 20 0 0" BorderThickness="0" BorderBrush="{StaticResource DarkGrayBrush}" CornerRadius="5"> + <oxy:Plot Title="{Binding LiquidTypeName}" x:Name="CalibrationPlot" Margin="0 0 10 0" Background="Transparent"> + <oxy:Plot.Series > + <oxy:LineSeries ItemsSource="{Binding Points}" Color="#73B6EC" MarkerFill="SteelBlue" MarkerType="Circle" /> + <oxy:LineSeries ItemsSource="{Binding TargetPoints}" Color="#E14141" MarkerFill="#E14141" MarkerType="Circle" /> + </oxy:Plot.Series> + <oxy:Plot.Axes> + <oxy:LinearAxis Position="Bottom" Title = "nl/cm" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True"/> + <oxy:LinearAxis Position="Left" Title = "Lab" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="{Binding From}" Maximum="{Binding To}"/> + </oxy:Plot.Axes> + </oxy:Plot> + </Border> + </Grid> + + <Border Grid.Row="1" Grid.ColumnSpan="2" BorderBrush="{StaticResource BlueBrush100}" BorderThickness="0" CornerRadius="5" Margin="20 0 20 0"> + <StackPanel Orientation="Vertical" Grid.Row="0" Margin="2 5 0 0"> + <Border BorderThickness="0.5" CornerRadius="4" BorderBrush="{StaticResource DarkGrayBrush}" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityInverseConverter}}" Height="Auto" Margin="0 6 0 0"> + <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}" FontWeight="SemiBold" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityInverseConverter}}" Margin="10" > + <Run FontSize="16"> Factor: </Run> + <Run Text="{Binding Factor,StringFormat='#.0000'}" Foreground="{StaticResource BlueBrush100}"></Run> + </TextBlock> + </Border> + + <Border BorderThickness="0.5" CornerRadius="4" BorderBrush="{StaticResource DarkGrayBrush}" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}" Height="Auto" Margin="0 6 0 0"> + <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}" FontWeight="SemiBold" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}" Margin="10" > + <Run FontSize="14"> Warning: </Run> + <Run Foreground="{StaticResource RedBrush300}" Text="{Binding ErrorMessage}" ></Run> + </TextBlock> </Border> </StackPanel> </Border> + <Button Grid.Row="2" Grid.Column="1" Margin="0 20 20 0" VerticalAlignment="Bottom" HorizontalAlignment="Right" Background="{StaticResource TransparentBackgroundBrush200}" MinWidth="160" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Command="{Binding CreateGraphCommand}" > + <TextBlock FontSize="14" Foreground="{StaticResource MainWindow.Foreground}">GET LIQUID FACTOR</TextBlock> + </Button> </Grid> - </Grid> - <Grid Grid.Column="2" Margin="10 0 0 0"> - <Grid> + </DockPanel> + <DockPanel Grid.Column="1"> + <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="20 0 0 0 " Padding="5" CornerRadius="5" Height="40" VerticalAlignment="Top"> + <Border.Effect> + <DropShadowEffect Opacity="0.4" /> + </Border.Effect> + <Grid> + <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="20 4 0 0" FontSize="16" Padding="0">LINEARIZATION</TextBlock> + </Grid> + </Border> + <Grid Margin="10 20 20 10"> <Grid.RowDefinitions> <RowDefinition Height="1*"/> - <RowDefinition Height="3*"/> + <RowDefinition Height="Auto"/> </Grid.RowDefinitions> - <Grid Grid.Row="0" Margin="55 0 0 0"> - <Grid.ColumnDefinitions> - <ColumnDefinition/> - <ColumnDefinition Width="Auto"/> - </Grid.ColumnDefinitions> - <StackPanel Orientation="Vertical" Grid.Column="0"> - <TextBlock HorizontalAlignment="Left" FontSize="20" >Liquid Type</TextBlock> - <ComboBox Margin="0 20 0 0" MinWidth="140" HorizontalAlignment="Left" ItemsSource="{Binding LiquidTypes}" - SelectedItem="{Binding SelectedLinearizationLiquidType}" DisplayMemberPath="Name" - Style="{StaticResource TransparentComboBoxStyle}" FontSize="16"></ComboBox> + <Grid Grid.Column="0" Margin="10 0 0 0"> + <Grid.RowDefinitions> + <RowDefinition Height="1*"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0" Margin="0 0 0 0"> + <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0" BorderThickness="0" BorderBrush="{StaticResource DarkGrayBrush}" CornerRadius="5"> + <oxy:Plot Title="{Binding LiquidTypeName}" x:Name="LinearizationPlot" Margin="0 0 0 0" Background="Transparent"> + <oxy:Plot.Series > + <oxy:LineSeries ItemsSource="{Binding LinearizationPoints}" Color="#73B6EC" MarkerFill="SteelBlue" MarkerType="Circle"/> + </oxy:Plot.Series> + <oxy:Plot.Axes> + <oxy:LinearAxis Position="Bottom" Title = "In Ink" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="0"/> + <oxy:LinearAxis Position="Left" Title = "Out Ink" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="0" /> + </oxy:Plot.Axes> + </oxy:Plot> + </Border> + </Grid> + <StackPanel Orientation="Horizontal" Grid.Row="1" Margin="0 20 10 0" HorizontalAlignment="Right"> + <Button VerticalAlignment="Bottom" HorizontalAlignment="Right" Background="{StaticResource TransparentBackgroundBrush200}" MinWidth="100" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Command="{Binding ExportGraphCommand}" > + <TextBlock FontSize="14" Foreground="{StaticResource MainWindow.Foreground}">Export</TextBlock> + </Button> + <Button Margin="20 0 0 0" VerticalAlignment="Bottom" HorizontalAlignment="Right" Background="{StaticResource TransparentBackgroundBrush200}" MinWidth="180" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Command="{Binding CreateLinearizationGraphCommand}" > + <TextBlock FontSize="14" Foreground="{StaticResource MainWindow.Foreground}">CREATE LINEARIZATION GRAPH</TextBlock> + </Button> </StackPanel> - <Button Grid.Column="1" IsEnabled="False" VerticalAlignment="Top" Background="{StaticResource TransparentBackgroundBrush200}" MinWidth="160" Height="50" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Command="{Binding CreateLinearizationGraphCommand}" > - <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}">CREATE LINEARIZATION GRAPH</TextBlock> - </Button> - </Grid> - <Border Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0 20 0 0" BorderThickness="0" BorderBrush="{StaticResource DarkGrayBrush}" CornerRadius="5"> - <oxy:Plot Title="{Binding LinearizationLiquidTypeName}" x:Name="LinearizationPlot" Margin="0 0 10 0" Background="Transparent"> - <oxy:Plot.Series > - <oxy:LineSeries ItemsSource="{Binding LinearizationPoints}" Color="#73B6EC" MarkerFill="SteelBlue" /> - </oxy:Plot.Series> - <oxy:Plot.Axes> - <oxy:LinearAxis Position="Bottom" Title = "In Ink" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="0"/> - <oxy:LinearAxis Position="Left" Title = "Out Ink" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="0" /> - </oxy:Plot.Axes> - </oxy:Plot> - </Border> + </Grid> - - </Grid> + </DockPanel> </Grid> - </DockPanel> - </Grid> - </UserControl> + </DockPanel> + </Grid> +</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml index 7d050a29a..152797bec 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml @@ -226,7 +226,7 @@ <TabItem Header="SPOOLS" Margin="-100 0 0 0" mahapps:ControlsHelper.HeaderFontSize="20"> <local:SpoolsView/> </TabItem> - <TabItem Header="Color Calibration" Margin="-100 0 0 0" mahapps:ControlsHelper.HeaderFontSize="20"> + <TabItem Header="COLOR CALIBRATION" Margin="-100 0 0 0" mahapps:ControlsHelper.HeaderFontSize="20"> <local:ColorCalibrationView DataContext="{Binding ColorCalibrationVM}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"/> </TabItem> </TabControl> 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 e72f62f17..aef5ef4af 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.1.14.0")] +[assembly: AssemblyVersion("4.1.15.0")] [assembly: ComVisible(false)]
\ No newline at end of file diff --git a/Software/Visual_Studio/Notes/Tango.Notes/Azure/New Environment.txt b/Software/Visual_Studio/Notes/Tango.Notes/Azure/New Environment.txt index 710cdcb2d..212da09a2 100644 --- a/Software/Visual_Studio/Notes/Tango.Notes/Azure/New Environment.txt +++ b/Software/Visual_Studio/Notes/Tango.Notes/Azure/New Environment.txt @@ -41,8 +41,8 @@ EXEC sp_addrolemember N'db_datawriter', N'BackupUser' CREATE USER [Tango] FROM EXTERNAL PROVIDER WITH DEFAULT_SCHEMA=[dbo] GO -EXEC sp_addrolemember N'db_datareader', N'BackupUser' -EXEC sp_addrolemember N'db_datawriter', N'BackupUser' +EXEC sp_addrolemember N'db_datareader', N'Tango' +EXEC sp_addrolemember N'db_datawriter', N'Tango' 9. Create a new storage blob container for the machine studio versions. 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 c2a48aec9..98480ebb9 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.1.20.0")] +[assembly: AssemblyVersion("1.1.21.0")] diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs index e84fd81a1..3b45a0c2b 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs @@ -35,6 +35,7 @@ namespace Tango.PPC.UI.ViewModels private bool _isPowerUpDialogShown; private bool _isThreadLoadingShown; private PowerUpAppBarItem _powerUpAppBar; + private bool _started; private DateTime _currentDateTime; /// <summary> @@ -79,6 +80,7 @@ namespace Tango.PPC.UI.ViewModels private void MachineOperator_PowerUpEnded(object sender, EventArgs e) { + _started = false; _powerUpAppBar?.Close(); _powerUpAppBar = null; } @@ -93,6 +95,8 @@ namespace Tango.PPC.UI.ViewModels private void MachineOperator_PowerUpStarted(object sender, PMR.Power.StartPowerUpResponse e) { + _started = true; + InvokeUI(() => { if (_powerUpAppBar != null) @@ -100,8 +104,11 @@ namespace Tango.PPC.UI.ViewModels _powerUpAppBar.Close(); } - _powerUpAppBar = NotificationProvider.PushAppBarItem<PowerUpAppBarItem>(); - _powerUpAppBar.Priority = AppBarPriority.Low; + if (_started) + { + _powerUpAppBar = NotificationProvider.PushAppBarItem<PowerUpAppBarItem>(); + _powerUpAppBar.Priority = AppBarPriority.Low; + } }); } 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.BL/Entities/BrushStop.cs b/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs index 6633d9eed..4ad21d4cd 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs @@ -28,7 +28,7 @@ namespace Tango.BL.Entities private bool _ignorePropChanged; private ActionTimer _syncTimer; private static List<String> _colorPropertyNames; - public const double MAX_TOTAL_LIQUID_VOLUME = 200; + public const double MAX_INK_UPTAKE = 400; #region Enums @@ -104,7 +104,7 @@ namespace Tango.BL.Entities #region Properties /// <summary> - /// Gets or sets a value indicating whether the total value of liquid volumes has exceeded the maximum range of <see cref="MAX_TOTAL_LIQUID_VOLUME"/>. + /// Gets or sets a value indicating whether the total value of liquid volumes has exceeded the maximum range of <see cref="MAX_INK_UPTAKE"/>. /// </summary> [NotMapped] [JsonIgnore] @@ -112,7 +112,7 @@ namespace Tango.BL.Entities { get { - return LiquidVolumes != null ? LiquidVolumes.Where(x => x.IdsPack.IdsPackFormula.Code == IdsPackFormulas.StandardColor.ToInt32()).Sum(x => x.Volume) > GetTotalMaximumLiquidVolumeLimit() : false; + return LiquidVolumes != null ? LiquidVolumes.Where(x => x.IdsPack.IdsPackFormula.Code == IdsPackFormulas.StandardColor.ToInt32()).Sum(x => x.NanoliterPerCentimeter) > GetTotalMaximumLiquidNlPerCMLimit() : false; } } @@ -780,23 +780,24 @@ namespace Tango.BL.Entities #region Private Methods - private double GetTotalMaximumLiquidVolumeLimit() + private double GetTotalMaximumLiquidNlPerCMLimit() { try { var tables = Segment.Job.Rml.GetActiveProcessGroup().ProcessParametersTables.OrderBy(x => x.TableIndex).ToList(); - if (tables.Count > 1) + + if (tables.Count > 0) { - return (tables[1].MaxInkUptake / tables[0].MaxInkUptake) * 100; + return tables.Max(x => x.MaxInkUptake); } else { - return MAX_TOTAL_LIQUID_VOLUME; + return MAX_INK_UPTAKE; } } catch { - return MAX_TOTAL_LIQUID_VOLUME; + return MAX_INK_UPTAKE; } } diff --git a/Software/Visual_Studio/Tango.ColorCalibration/DefaultColorCalibrator.cs b/Software/Visual_Studio/Tango.ColorCalibration/DefaultColorCalibrator.cs index 98a558f8e..98162dc78 100644 --- a/Software/Visual_Studio/Tango.ColorCalibration/DefaultColorCalibrator.cs +++ b/Software/Visual_Studio/Tango.ColorCalibration/DefaultColorCalibrator.cs @@ -11,7 +11,7 @@ using Tango.PMR.ColorLab; namespace Tango.ColorCalibration { - public class DefaultColorCalibrator : IColorCalibrator + public class DefaultColorCalibrator : IColorCalibrator, ILinearizationMeasurements { static class NativeMethods { @@ -52,5 +52,33 @@ namespace Tango.ColorCalibration return output; } + + public LinearizationOutput GetLinearizationMeasurements(LinearizationInput input) + { + String fileName = $"{AssemblyHelper.GetCurrentAssemblyFolder()}\\Tango.ColorLib_v4.dll"; + + if (!File.Exists(fileName)) + { + throw new FileNotFoundException($"Could not find color calibration library '{fileName}'."); + } + + IntPtr pDll = NativeMethods.LoadLibrary(fileName); + IntPtr pAddressOfFunctionToCall = NativeMethods.GetProcAddress(pDll, "GetLinearizationMeasurements"); + NativeMethodDelegate getLinearizationMeasurements = (NativeMethodDelegate)Marshal.GetDelegateForFunctionPointer( + pAddressOfFunctionToCall, + typeof(NativeMethodDelegate)); + + NativePMR<LinearizationInput, LinearizationOutput> nativePMR = new NativePMR<LinearizationInput, LinearizationOutput>(getLinearizationMeasurements); + LinearizationOutput output = nativePMR.Invoke(input); + + bool result = NativeMethods.FreeLibrary(pDll); + + if (output.HasError) + { + throw new ExternalException($"Linearization Measurements Error: {output.ErrorMessage}!"); + } + + return output; + } } } diff --git a/Software/Visual_Studio/Tango.ColorCalibration/ILinearizationMeasurements.cs b/Software/Visual_Studio/Tango.ColorCalibration/ILinearizationMeasurements.cs new file mode 100644 index 000000000..2966b104b --- /dev/null +++ b/Software/Visual_Studio/Tango.ColorCalibration/ILinearizationMeasurements.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.PMR.ColorLab; + +namespace Tango.ColorCalibration +{ + public interface ILinearizationMeasurements + { + LinearizationOutput GetLinearizationMeasurements( LinearizationInput input); + } +} diff --git a/Software/Visual_Studio/Tango.ColorCalibration/Tango.ColorCalibration.csproj b/Software/Visual_Studio/Tango.ColorCalibration/Tango.ColorCalibration.csproj index fe90c9bc2..9e0e438af 100644 --- a/Software/Visual_Studio/Tango.ColorCalibration/Tango.ColorCalibration.csproj +++ b/Software/Visual_Studio/Tango.ColorCalibration/Tango.ColorCalibration.csproj @@ -43,6 +43,7 @@ <ItemGroup> <Compile Include="DefaultColorCalibrator.cs" /> <Compile Include="IColorCalibrator.cs" /> + <Compile Include="ILinearizationMeasurements.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> diff --git a/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationInput.cs b/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationInput.cs new file mode 100644 index 000000000..a127a8546 --- /dev/null +++ b/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationInput.cs @@ -0,0 +1,268 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: LinearizationInput.proto +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Tango.PMR.ColorLab { + + /// <summary>Holder for reflection information generated from LinearizationInput.proto</summary> + public static partial class LinearizationInputReflection { + + #region Descriptor + /// <summary>File descriptor for LinearizationInput.proto</summary> + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static LinearizationInputReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "ChhMaW5lYXJpemF0aW9uSW5wdXQucHJvdG8SElRhbmdvLlBNUi5Db2xvckxh", + "YhoeTGluZWFyaXphdGlvbk1lYXN1cmVtZW50LnByb3RvGhBMaXF1aWRUeXBl", + "LnByb3RvIr8BChJMaW5lYXJpemF0aW9uSW5wdXQSMgoKTGlxdWlkVHlwZRgB", + "IAEoDjIeLlRhbmdvLlBNUi5Db2xvckxhYi5MaXF1aWRUeXBlEg8KB1Rhcmdl", + "dEwYAiABKAESDwoHVGFyZ2V0QRgDIAEoARIPCgdUYXJnZXRCGAQgASgBEkIK", + "DE1lYXN1cmVtZW50cxgFIAMoCzIsLlRhbmdvLlBNUi5Db2xvckxhYi5MaW5l", + "YXJpemF0aW9uTWVhc3VyZW1lbnRCHgocY29tLnR3aW5lLnRhbmdvLnBtci5j", + "b2xvcmxhYmIGcHJvdG8z")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Tango.PMR.ColorLab.LinearizationMeasurementReflection.Descriptor, global::Tango.PMR.ColorLab.LiquidTypeReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.ColorLab.LinearizationInput), global::Tango.PMR.ColorLab.LinearizationInput.Parser, new[]{ "LiquidType", "TargetL", "TargetA", "TargetB", "Measurements" }, null, null, null) + })); + } + #endregion + + } + #region Messages + public sealed partial class LinearizationInput : pb::IMessage<LinearizationInput> { + private static readonly pb::MessageParser<LinearizationInput> _parser = new pb::MessageParser<LinearizationInput>(() => new LinearizationInput()); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser<LinearizationInput> Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Tango.PMR.ColorLab.LinearizationInputReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public LinearizationInput() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public LinearizationInput(LinearizationInput other) : this() { + liquidType_ = other.liquidType_; + targetL_ = other.targetL_; + targetA_ = other.targetA_; + targetB_ = other.targetB_; + measurements_ = other.measurements_.Clone(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public LinearizationInput Clone() { + return new LinearizationInput(this); + } + + /// <summary>Field number for the "LiquidType" field.</summary> + public const int LiquidTypeFieldNumber = 1; + private global::Tango.PMR.ColorLab.LiquidType liquidType_ = 0; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Tango.PMR.ColorLab.LiquidType LiquidType { + get { return liquidType_; } + set { + liquidType_ = value; + } + } + + /// <summary>Field number for the "TargetL" field.</summary> + public const int TargetLFieldNumber = 2; + private double targetL_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double TargetL { + get { return targetL_; } + set { + targetL_ = value; + } + } + + /// <summary>Field number for the "TargetA" field.</summary> + public const int TargetAFieldNumber = 3; + private double targetA_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double TargetA { + get { return targetA_; } + set { + targetA_ = value; + } + } + + /// <summary>Field number for the "TargetB" field.</summary> + public const int TargetBFieldNumber = 4; + private double targetB_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double TargetB { + get { return targetB_; } + set { + targetB_ = value; + } + } + + /// <summary>Field number for the "Measurements" field.</summary> + public const int MeasurementsFieldNumber = 5; + private static readonly pb::FieldCodec<global::Tango.PMR.ColorLab.LinearizationMeasurement> _repeated_measurements_codec + = pb::FieldCodec.ForMessage(42, global::Tango.PMR.ColorLab.LinearizationMeasurement.Parser); + private readonly pbc::RepeatedField<global::Tango.PMR.ColorLab.LinearizationMeasurement> measurements_ = new pbc::RepeatedField<global::Tango.PMR.ColorLab.LinearizationMeasurement>(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField<global::Tango.PMR.ColorLab.LinearizationMeasurement> Measurements { + get { return measurements_; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as LinearizationInput); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(LinearizationInput other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (LiquidType != other.LiquidType) return false; + if (TargetL != other.TargetL) return false; + if (TargetA != other.TargetA) return false; + if (TargetB != other.TargetB) return false; + if(!measurements_.Equals(other.measurements_)) return false; + return true; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (LiquidType != 0) hash ^= LiquidType.GetHashCode(); + if (TargetL != 0D) hash ^= TargetL.GetHashCode(); + if (TargetA != 0D) hash ^= TargetA.GetHashCode(); + if (TargetB != 0D) hash ^= TargetB.GetHashCode(); + hash ^= measurements_.GetHashCode(); + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (LiquidType != 0) { + output.WriteRawTag(8); + output.WriteEnum((int) LiquidType); + } + if (TargetL != 0D) { + output.WriteRawTag(17); + output.WriteDouble(TargetL); + } + if (TargetA != 0D) { + output.WriteRawTag(25); + output.WriteDouble(TargetA); + } + if (TargetB != 0D) { + output.WriteRawTag(33); + output.WriteDouble(TargetB); + } + measurements_.WriteTo(output, _repeated_measurements_codec); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (LiquidType != 0) { + size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) LiquidType); + } + if (TargetL != 0D) { + size += 1 + 8; + } + if (TargetA != 0D) { + size += 1 + 8; + } + if (TargetB != 0D) { + size += 1 + 8; + } + size += measurements_.CalculateSize(_repeated_measurements_codec); + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(LinearizationInput other) { + if (other == null) { + return; + } + if (other.LiquidType != 0) { + LiquidType = other.LiquidType; + } + if (other.TargetL != 0D) { + TargetL = other.TargetL; + } + if (other.TargetA != 0D) { + TargetA = other.TargetA; + } + if (other.TargetB != 0D) { + TargetB = other.TargetB; + } + measurements_.Add(other.measurements_); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + input.SkipLastField(); + break; + case 8: { + liquidType_ = (global::Tango.PMR.ColorLab.LiquidType) input.ReadEnum(); + break; + } + case 17: { + TargetL = input.ReadDouble(); + break; + } + case 25: { + TargetA = input.ReadDouble(); + break; + } + case 33: { + TargetB = input.ReadDouble(); + break; + } + case 42: { + measurements_.AddEntriesFrom(input, _repeated_measurements_codec); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationMeasurement.cs b/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationMeasurement.cs new file mode 100644 index 000000000..fb83ca1c2 --- /dev/null +++ b/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationMeasurement.cs @@ -0,0 +1,244 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: LinearizationMeasurement.proto +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Tango.PMR.ColorLab { + + /// <summary>Holder for reflection information generated from LinearizationMeasurement.proto</summary> + public static partial class LinearizationMeasurementReflection { + + #region Descriptor + /// <summary>File descriptor for LinearizationMeasurement.proto</summary> + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static LinearizationMeasurementReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "Ch5MaW5lYXJpemF0aW9uTWVhc3VyZW1lbnQucHJvdG8SElRhbmdvLlBNUi5D", + "b2xvckxhYiJSChhMaW5lYXJpemF0aW9uTWVhc3VyZW1lbnQSFQoNSW5rUGVy", + "Y2VudGFnZRgBIAEoARIJCgFMGAIgASgBEgkKAUEYAyABKAESCQoBQhgEIAEo", + "AUIeChxjb20udHdpbmUudGFuZ28ucG1yLmNvbG9ybGFiYgZwcm90bzM=")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.ColorLab.LinearizationMeasurement), global::Tango.PMR.ColorLab.LinearizationMeasurement.Parser, new[]{ "InkPercentage", "L", "A", "B" }, null, null, null) + })); + } + #endregion + + } + #region Messages + public sealed partial class LinearizationMeasurement : pb::IMessage<LinearizationMeasurement> { + private static readonly pb::MessageParser<LinearizationMeasurement> _parser = new pb::MessageParser<LinearizationMeasurement>(() => new LinearizationMeasurement()); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser<LinearizationMeasurement> Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Tango.PMR.ColorLab.LinearizationMeasurementReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public LinearizationMeasurement() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public LinearizationMeasurement(LinearizationMeasurement other) : this() { + inkPercentage_ = other.inkPercentage_; + l_ = other.l_; + a_ = other.a_; + b_ = other.b_; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public LinearizationMeasurement Clone() { + return new LinearizationMeasurement(this); + } + + /// <summary>Field number for the "InkPercentage" field.</summary> + public const int InkPercentageFieldNumber = 1; + private double inkPercentage_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double InkPercentage { + get { return inkPercentage_; } + set { + inkPercentage_ = value; + } + } + + /// <summary>Field number for the "L" field.</summary> + public const int LFieldNumber = 2; + private double l_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double L { + get { return l_; } + set { + l_ = value; + } + } + + /// <summary>Field number for the "A" field.</summary> + public const int AFieldNumber = 3; + private double a_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double A { + get { return a_; } + set { + a_ = value; + } + } + + /// <summary>Field number for the "B" field.</summary> + public const int BFieldNumber = 4; + private double b_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double B { + get { return b_; } + set { + b_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as LinearizationMeasurement); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(LinearizationMeasurement other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (InkPercentage != other.InkPercentage) return false; + if (L != other.L) return false; + if (A != other.A) return false; + if (B != other.B) return false; + return true; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (InkPercentage != 0D) hash ^= InkPercentage.GetHashCode(); + if (L != 0D) hash ^= L.GetHashCode(); + if (A != 0D) hash ^= A.GetHashCode(); + if (B != 0D) hash ^= B.GetHashCode(); + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (InkPercentage != 0D) { + output.WriteRawTag(9); + output.WriteDouble(InkPercentage); + } + if (L != 0D) { + output.WriteRawTag(17); + output.WriteDouble(L); + } + if (A != 0D) { + output.WriteRawTag(25); + output.WriteDouble(A); + } + if (B != 0D) { + output.WriteRawTag(33); + output.WriteDouble(B); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (InkPercentage != 0D) { + size += 1 + 8; + } + if (L != 0D) { + size += 1 + 8; + } + if (A != 0D) { + size += 1 + 8; + } + if (B != 0D) { + size += 1 + 8; + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(LinearizationMeasurement other) { + if (other == null) { + return; + } + if (other.InkPercentage != 0D) { + InkPercentage = other.InkPercentage; + } + if (other.L != 0D) { + L = other.L; + } + if (other.A != 0D) { + A = other.A; + } + if (other.B != 0D) { + B = other.B; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + input.SkipLastField(); + break; + case 9: { + InkPercentage = input.ReadDouble(); + break; + } + case 17: { + L = input.ReadDouble(); + break; + } + case 25: { + A = input.ReadDouble(); + break; + } + case 33: { + B = input.ReadDouble(); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationOutput.cs b/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationOutput.cs new file mode 100644 index 000000000..3c402aa10 --- /dev/null +++ b/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationOutput.cs @@ -0,0 +1,209 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: LinearizationOutput.proto +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Tango.PMR.ColorLab { + + /// <summary>Holder for reflection information generated from LinearizationOutput.proto</summary> + public static partial class LinearizationOutputReflection { + + #region Descriptor + /// <summary>File descriptor for LinearizationOutput.proto</summary> + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static LinearizationOutputReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "ChlMaW5lYXJpemF0aW9uT3V0cHV0LnByb3RvEhJUYW5nby5QTVIuQ29sb3JM", + "YWIiVAoTTGluZWFyaXphdGlvbk91dHB1dBIVCg1JbmtQZXJjZW50YWdlGAEg", + "AygBEhAKCEhhc0Vycm9yGBQgASgIEhQKDEVycm9yTWVzc2FnZRgVIAEoCUIe", + "Chxjb20udHdpbmUudGFuZ28ucG1yLmNvbG9ybGFiYgZwcm90bzM=")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.ColorLab.LinearizationOutput), global::Tango.PMR.ColorLab.LinearizationOutput.Parser, new[]{ "InkPercentage", "HasError", "ErrorMessage" }, null, null, null) + })); + } + #endregion + + } + #region Messages + public sealed partial class LinearizationOutput : pb::IMessage<LinearizationOutput> { + private static readonly pb::MessageParser<LinearizationOutput> _parser = new pb::MessageParser<LinearizationOutput>(() => new LinearizationOutput()); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser<LinearizationOutput> Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Tango.PMR.ColorLab.LinearizationOutputReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public LinearizationOutput() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public LinearizationOutput(LinearizationOutput other) : this() { + inkPercentage_ = other.inkPercentage_.Clone(); + hasError_ = other.hasError_; + errorMessage_ = other.errorMessage_; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public LinearizationOutput Clone() { + return new LinearizationOutput(this); + } + + /// <summary>Field number for the "InkPercentage" field.</summary> + public const int InkPercentageFieldNumber = 1; + private static readonly pb::FieldCodec<double> _repeated_inkPercentage_codec + = pb::FieldCodec.ForDouble(10); + private readonly pbc::RepeatedField<double> inkPercentage_ = new pbc::RepeatedField<double>(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField<double> InkPercentage { + get { return inkPercentage_; } + } + + /// <summary>Field number for the "HasError" field.</summary> + public const int HasErrorFieldNumber = 20; + private bool hasError_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool HasError { + get { return hasError_; } + set { + hasError_ = value; + } + } + + /// <summary>Field number for the "ErrorMessage" field.</summary> + public const int ErrorMessageFieldNumber = 21; + private string errorMessage_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string ErrorMessage { + get { return errorMessage_; } + set { + errorMessage_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as LinearizationOutput); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(LinearizationOutput other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if(!inkPercentage_.Equals(other.inkPercentage_)) return false; + if (HasError != other.HasError) return false; + if (ErrorMessage != other.ErrorMessage) return false; + return true; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + hash ^= inkPercentage_.GetHashCode(); + if (HasError != false) hash ^= HasError.GetHashCode(); + if (ErrorMessage.Length != 0) hash ^= ErrorMessage.GetHashCode(); + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + inkPercentage_.WriteTo(output, _repeated_inkPercentage_codec); + if (HasError != false) { + output.WriteRawTag(160, 1); + output.WriteBool(HasError); + } + if (ErrorMessage.Length != 0) { + output.WriteRawTag(170, 1); + output.WriteString(ErrorMessage); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + size += inkPercentage_.CalculateSize(_repeated_inkPercentage_codec); + if (HasError != false) { + size += 2 + 1; + } + if (ErrorMessage.Length != 0) { + size += 2 + pb::CodedOutputStream.ComputeStringSize(ErrorMessage); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(LinearizationOutput other) { + if (other == null) { + return; + } + inkPercentage_.Add(other.inkPercentage_); + if (other.HasError != false) { + HasError = other.HasError; + } + if (other.ErrorMessage.Length != 0) { + ErrorMessage = other.ErrorMessage; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + input.SkipLastField(); + break; + case 10: + case 9: { + inkPercentage_.AddEntriesFrom(input, _repeated_inkPercentage_codec); + break; + } + case 160: { + HasError = input.ReadBool(); + break; + } + case 170: { + ErrorMessage = input.ReadString(); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj b/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj index 048e92900..66c84cb0d 100644 --- a/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj +++ b/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj @@ -62,6 +62,9 @@ <Compile Include="ColorLab\GradientOutputStop.cs" /> <Compile Include="ColorLab\InputCoordinates.cs" /> <Compile Include="ColorLab\InputLiquid.cs" /> + <Compile Include="ColorLab\LinearizationInput.cs" /> + <Compile Include="ColorLab\LinearizationMeasurement.cs" /> + <Compile Include="ColorLab\LinearizationOutput.cs" /> <Compile Include="ColorLab\LiquidType.cs" /> <Compile Include="ColorLab\LiquidVolume.cs" /> <Compile Include="ColorLab\OutputCoordinates.cs" /> @@ -461,7 +464,7 @@ </PropertyGroup> <ProjectExtensions> <VisualStudio> - <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" /> + <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" /> </VisualStudio> </ProjectExtensions> </Project>
\ No newline at end of file |
