private void ThreadProc() { uint StrAddr = 0; uint Size_Byte = 0; hEvent.Handle = Event; // Set the Handle to the event from while (true) { hEvent.WaitOne(); hEvent.Reset(); if (ISR_ON == false) //don't use "while(ISR_ON)" { break; //because it will capture 2 pictures in one_shot mode by disconstruct } Angelo.AngeloRTV_Get_Frame(PortNo, ref StrAddr, ref width, ref height, ref Size_Byte); HOperatorSet.GenEmptyObj(out ho_Image); ho_Image.Dispose(); // HOperatorSet.GenImage1(out ho_Image, "byte", (int)width, (int)height, (int)StrAddr); HTuple Width1, Height1; HOperatorSet.GenImageInterleaved(out ho_Image, (int)StrAddr, "bgr", width, height, 0, "byte", width, height, 0, 0, -1, 0); //获取图像大小 HOperatorSet.GetImageSize(ho_Image, out Width1, out Height1); //显示全图 //以适应窗口方式显示图像 HOperatorSet.SetPart(this.hWindowControl1.HalconID, 0, 0, Height1 - 1, Width1 - 1); HOperatorSet.DispObj(ho_Image, this.hWindowControl1.HalconWindow); monitorTest(signal.TestBegin); } }
private void ModelSetUp_Load(object sender, EventArgs e) { mycallback = new CallBack(CallBackProc); comboBox_channel.SelectedIndex = 0; comboBox_port.SelectedIndex = 1; comboBox_format.SelectedIndex = 0; comboBox_color.SelectedIndex = 3; HOperatorSet.GenEmptyObj(out m_Image); HOperatorSet.GenEmptyObj(out m_objDisp); m_hWindowHandle = hWindowControl1.HalconID; m_AcqHandle = vision.CamParam.m_AcqHandle; HOperatorSet.SetDraw(m_hWindowHandle, "margin"); HOperatorSet.SetColored(m_hWindowHandle, 12); HOperatorSet.SetColor(m_hWindowHandle, "red"); //设置halcon内部处理的图像的宽度和高度 HOperatorSet.SetSystem("tsp_width", 3000); HOperatorSet.SetSystem("tsp_height", 3000); for (ushort i = 0; i < MaxPort; i++)//initialize each port { if (Angelo.AngeloRTV_Initial(i) != 0) { MessageBox.Show("Total No. of AngeloRTV Port = " + i.ToString()); break; } } }
private void stopButton_Click(object sender, EventArgs e) { for (ushort i = 0; i < MaxPort; i++) { Angelo.AngeloRTV_Capture_Stop(i); } }
public void Read(BinaryReader br, int i) { ID = i; if (i == 1) { Angelo = Angelo.Angel_Wing; } else { Angelo = Angelo.None; } Name = Memory.Strings.Read(Strings.FileID.KERNEL, id, i * 2); //0x0000 2 bytes Offset to name Description = Memory.Strings.Read(Strings.FileID.KERNEL, id, i * 2 + 1); //0x0002 2 bytes Offset to description br.BaseStream.Seek(4, SeekOrigin.Current); Unknown0 = new BitArray(br.ReadBytes(1)); //0x0004 1 byte Unknown Flags Target = (Target)br.ReadByte(); //0x0005 1 byte Target AbilityID = br.ReadByte(); //0x0006 1 byte Ability data ID Unknown1 = br.ReadByte(); //0x0007 1 byte Unknown / Unused }
public void Read(BinaryReader br, int i) { ID = i; switch (i) { case 11: Angelo = Angelo.Rush; break; case 12: Angelo = Angelo.Recover; break; case 13: Angelo = Angelo.Reverse; break; case 14: Angelo = Angelo.Search; break; default: Angelo = Angelo.None; break; } Name = Memory.Strings.Read(Strings.FileID.KERNEL, id, i); int n = Name.Length; br.BaseStream.Seek(2, SeekOrigin.Current); //0x0000 2 bytes Offset to GF attack name MagicID = (Magic_ID)br.ReadUInt16(); //0x0002 2 bytes Magic ID(decides what animation to play) Attack_Type = (Attack_Type)br.ReadByte(); //0x0004 1 byte Attack type GF_Power = br.ReadByte(); //0x0005 1 byte GF power(used in damage formula) Status_Attack = br.ReadByte(); //0x0006 1 byte Status attack enabler Unknown0 = br.ReadByte(); //0x0007 1 byte Unknown Status_flags = br.ReadByte(); //0x0008 1 byte Status flags ? Unknown1 = br.ReadBytes(2); //0x0009 2 bytes Unknown Element = (Element)br.ReadByte(); //0x000B 1 byte Element Statuses1 = (Battle_Only_Statuses)br.ReadUInt32(); //0x000C 1 byte Status 1 //0x000D 1 byte Status 2 //0x000E 1 byte Status 3 //0x000F 1 byte Status 4 Statuses0 = (Persistent_Statuses)br.ReadUInt16(); //0x0010 1 byte Status 5 //0x0011 1 byte Unknown Power_Mod = br.ReadByte(); //0x0012 1 byte Power Mod(used in damage formula) Level_Mod = br.ReadByte(); //0x0013 1 byte Level Mod(used in damage formula) }
private void stopTestButton_Click(object sender, EventArgs e) { this.begionButton.Enabled = true; this.stopTestButton.Enabled = false; for (ushort i = 0; i < MaxPort; i++) { Angelo.AngeloRTV_Capture_Stop(i); } }
private void capture() { for (ushort i = 0; i < MaxPort; i++) { Angelo.AngeloRTV_Capture_Stop(i); } ushort Multi; PortNo = ushort.Parse(comboBox_port.SelectedItem.ToString());//selected port Channel = ushort.Parse(comboBox_channel.SelectedItem.ToString()); Multi = (ushort)System.Math.Pow(2, Channel); Video_Format = (byte)(comboBox_format.SelectedIndex); switch (comboBox_color.SelectedIndex)//selected color format { default: case 0: //gray Color_Format = 1; Byte_Pixel = 1; color = System.Drawing.Imaging.PixelFormat.Format8bppIndexed; break; case 1: //rgb15 Color_Format = 2; Byte_Pixel = 2; color = System.Drawing.Imaging.PixelFormat.Format16bppRgb555; break; case 2: //rgb16 Color_Format = 0; Byte_Pixel = 2; color = System.Drawing.Imaging.PixelFormat.Format16bppRgb565; break; case 3: //rgb24 Color_Format = 3; Byte_Pixel = 3; color = System.Drawing.Imaging.PixelFormat.Format24bppRgb; break; case 4: //rgb32 Color_Format = 4; Byte_Pixel = 4; color = System.Drawing.Imaging.PixelFormat.Format32bppRgb; break; } Angelo.AngeloRTV_Set_Callback(PortNo, null); Angelo.AngeloRTV_Set_Callback(PortNo, mycallback);//connect CallBackProc Function though mycallback Angelo.AngeloRTV_Set_Color_Format(PortNo, Color_Format); Angelo.AngeloRTV_Set_Video_Format(PortNo, Video_Format); Angelo.AngeloRTV_Select_Channel(PortNo, Multi); }
private RinoaLimitBreaksPart1(BinaryReader br, int i) { RinoaLimitID = i; Angelo = i == 1 ? Angelo.Angel_Wing : Angelo.None; //0x0000 2 bytes Offset to name Name = Memory.Strings.Read(Strings.FileID.Kernel, ID, i * 2); //0x0002 2 bytes Offset to description Description = Memory.Strings.Read(Strings.FileID.Kernel, ID, i * 2 + 1); br.BaseStream.Seek(4, SeekOrigin.Current); //0x0004 1 byte Unknown Flags Unknown0 = new BitArray(br.ReadBytes(1)); //0x0005 1 byte Target Target = (Target)br.ReadByte(); //0x0006 1 byte Ability data ID AbilityID = br.ReadByte(); //0x0007 1 byte Unknown / Unused Unknown1 = br.ReadByte(); }
private void CallBackProc(IntPtr BufferAddress, ushort PortNo) { uint StrAddr = 0; uint Size_Byte = 0; Angelo.AngeloRTV_Get_Frame(PortNo, ref StrAddr, ref width, ref height, ref Size_Byte); HOperatorSet.GenEmptyObj(out m_Image); m_Image.Dispose(); HTuple Width1, Height1; HOperatorSet.GenImageInterleaved(out m_Image, (int)StrAddr, "bgr", width, height, 0, "byte", width, height, 0, 0, -1, 0); //获取图像大小 HOperatorSet.GetImageSize(m_Image, out Width1, out Height1); //显示全图 //以适应窗口方式显示图像 HOperatorSet.SetPart(this.hWindowControl1.HalconID, 0, 0, Height1 - 1, Width1 - 1); HOperatorSet.DispObj(m_Image, this.hWindowControl1.HalconWindow); }
/// <summary> /// Test if an ability can trigger for Angelo. /// </summary> /// <param name="ability"></param> /// <returns></returns> private static bool TestAngeloAbilityTriggers(Angelo ability) { //else if (8 >= [0..255] Angelo Recover is used (3.3 %) //else if (2 >= [0..255] Angelo Reverse is used (1 %) //else if (8 >= [0..255] Angelo Search is used (3.2 %) //Angelo_Disabled I think is set when Rinoa is in space so angelo is out of reach; //https://gamefaqs.gamespot.com/ps/197343-final-fantasy-viii/faqs/25194 if (Memory.State.BattleMiscFlags.HasFlag(Saves.BattleMiscFlags.AngeloDisabled) || !Memory.State.PartyData.Contains(Characters.Rinoa_Heartilly) || !Memory.State.LimitBreakAngeloCompleted.HasFlag(ability)) { return(false); } else { switch (ability) { case Angelo.Recover: return(Memory.State.Characters.Any(x => x.Value.IsCritical && !x.Value.IsDead && Memory.State.PartyData.Contains(x.Key)) && Memory.Random.Next(256) < 8); case Angelo.Reverse: return(Memory.State.Characters.Any(x => x.Value.IsDead && Memory.State.PartyData.Contains(x.Key)) && Memory.Random.Next(256) < 2); case Angelo.Search: Saves.CharacterData c = Memory.State[Characters.Rinoa_Heartilly]; if (!(c.IsGameOver || c.Statuses1.HasFlag(Kernel_bin.Battle_Only_Statuses.Sleep) || c.Statuses1.HasFlag(Kernel_bin.Battle_Only_Statuses.Stop) || c.Statuses1.HasFlag(Kernel_bin.Battle_Only_Statuses.Confuse) || c.Statuses0.HasFlag(Kernel_bin.Persistent_Statuses.Berserk) || c.Statuses1.HasFlag(Kernel_bin.Battle_Only_Statuses.Angel_Wing))) { return(Memory.Random.Next(256) < 8); } break; } } return(false); }
private void MainForm_FormClosed(object sender, FormClosedEventArgs e) { try { if (mythread != null) { ISR_ON = false; hEvent.Set(); mythread.Join(); mythread = null; } for (ushort i = 0; i < MaxPort; i++) { Angelo.AngeloRTV_Set_Callback(i, null); Angelo.AngeloRTV_Capture_Stop(i); Angelo.AngeloRTV_Close(i); } } catch (Exception ex) { throw ex; } }
private void begionButton_Click(object sender, EventArgs e) { if (modelTextBox.Text != "" && selectCameraVersion.Text != "") { this.begionButton.Enabled = false; this.stopTestButton.Enabled = true; DataTable tempTable = databaseOperate.FindData("摄像头模板", "'" + modelTextBox.Text + "'", "模板名称"); string path = tempTable.Rows[0]["模板保存路径"].ToString(); HOperatorSet.ReadShapeModel(path, out Vision.Model.m_ModelID); if (comboBox_port.Text != "" && comboBox_interrupt.Text != "" && comboBox_format.Text != "" && comboBox_color.Text != "") { capture(); Angelo.AngeloRTV_Capture_Start(PortNo, 0xFFFFFFFF); } else { MessageBox.Show("参数输入不全!!!!"); } } else { MessageBox.Show("未选择模板!!!"); } }
/// <summary> /// Test if an ability can trigger for Angelo. /// </summary> /// <param name="ability"></param> /// <returns></returns> private static bool TestAngeloAbilityTriggers(Angelo ability) { //else if (8 >= [0..255] Angelo Recover is used (3.3 %) //else if (2 >= [0..255] Angelo Reverse is used (1 %) //else if (8 >= [0..255] Angelo Search is used (3.2 %) //Angelo_Disabled I think is set when Rinoa is in space so angelo is out of reach; //https://gamefaqs.gamespot.com/ps/197343-final-fantasy-viii/faqs/25194 if (Memory.State.BattleMiscFlags.HasFlag(Saves.BattleMiscFlags.AngeloDisabled) || !Memory.State.Party.Contains(Characters.Rinoa_Heartilly) || !Memory.State.LimitBreakAngeloCompleted.HasFlag(ability)) { return(false); } switch (ability) { case Angelo.Recover: //Characters.Any(x => x.Value.IsCritical && !x.Value.IsDead && Memory.State.PartyData.Contains(x.Key)) return(!Memory.State.AnyDeadPartyMembers && Memory.State.AnyCriticalPartyMembers && Memory.Random.Next(256) < 8); case Angelo.Reverse: return(Memory.State.AnyDeadPartyMembers && Memory.Random.Next(256) < 2); case Angelo.Search: var c = Memory.State[Characters.Rinoa_Heartilly]; if (!(c.IsGameOver || c.Statuses1.HasFlag(BattleOnlyStatuses.Sleep) || c.Statuses1.HasFlag(BattleOnlyStatuses.Stop) || c.Statuses1.HasFlag(BattleOnlyStatuses.Confuse) || c.Statuses0.HasFlag(PersistentStatuses.Berserk) || c.Statuses1.HasFlag(BattleOnlyStatuses.AngelWing))) { return(Memory.Random.Next(256) < 8); } break; case Angelo.None: break; case Angelo.Rush: break; case Angelo.Cannon: break; case Angelo.Strike: break; case Angelo.Invincible_Moon: break; case Angelo.Wishing_Star: break; case Angelo.Angel_Wing: break; default: throw new ArgumentOutOfRangeException(nameof(ability), ability, null); } return(false); }
private void MainForm_Load(object sender, EventArgs e) { this.resultTextBox.ForeColor = System.Drawing.Color.Red; selectCameraVersion.Items.Add("全景"); selectCameraVersion.Items.Add("其他"); signal.printControl = true; signal.InputParameter = false; staticForm = this; this.groupBox2.Hide(); mycallback = new CallBack(CallBackProc); handle = this.Handle; HOperatorSet.GenEmptyObj(out m_Image); HOperatorSet.GenEmptyObj(out m_objDisp); m_hWindowHandle = hWindowControl1.HalconID; m_AcqHandle = Vision.CamParam.m_AcqHandle; HOperatorSet.SetDraw(m_hWindowHandle, "margin"); HOperatorSet.SetColored(m_hWindowHandle, 12); HOperatorSet.SetColor(m_hWindowHandle, "red"); //设置halcon内部处理的图像的宽度和高度 HOperatorSet.SetSystem("tsp_width", 3000); HOperatorSet.SetSystem("tsp_height", 3000); try { DataBaseOperate.OpenConnection(); //打开数据库 DataBaseOperate.CloseConnection(); //关闭数据库 } catch { MessageBox.Show("数据库连接失败。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); System.Windows.Forms.Application.Exit(); } Control.CheckForIllegalCrossThreadCalls = false; #region 对plc连接信号赋值 //读CIO1100.00位的数据命令********摄像头检测开始 plcCameraTestBegin[0] = 0x80; plcCameraTestBegin[1] = 0x00; plcCameraTestBegin[2] = 0x02; plcCameraTestBegin[3] = 0x00; plcCameraTestBegin[4] = 0x01; plcCameraTestBegin[5] = 0x00; plcCameraTestBegin[6] = 0x00; plcCameraTestBegin[7] = 0x0A; plcCameraTestBegin[8] = 0x00; plcCameraTestBegin[9] = 0x00; plcCameraTestBegin[10] = 0x01; plcCameraTestBegin[11] = 0x01; plcCameraTestBegin[12] = 0x30; plcCameraTestBegin[13] = 0x04; plcCameraTestBegin[14] = 0x4C; plcCameraTestBegin[15] = 0x00; plcCameraTestBegin[16] = 0x00; plcCameraTestBegin[17] = 0x01; //写CIO1100.00位的数据命令********复位摄像头检测开始位 plcCameraTestReset[0] = 0x80; plcCameraTestReset[1] = 0x00; plcCameraTestReset[2] = 0x02; plcCameraTestReset[3] = 0x00; plcCameraTestReset[4] = 0x01; plcCameraTestReset[5] = 0x00; plcCameraTestReset[6] = 0x00; plcCameraTestReset[7] = 0x0A; plcCameraTestReset[8] = 0x00; plcCameraTestReset[9] = 0x00; plcCameraTestReset[10] = 0x01; plcCameraTestReset[11] = 0x02; plcCameraTestReset[12] = 0x30; plcCameraTestReset[13] = 0x04; plcCameraTestReset[14] = 0x4C; plcCameraTestReset[15] = 0x00; plcCameraTestReset[16] = 0x00; plcCameraTestReset[17] = 0x01; plcCameraTestReset[18] = 0x00; //读CIO1102.00位的数据命令********条码打印开始 plcPrinterBegin[0] = 0x80; plcPrinterBegin[1] = 0x00; plcPrinterBegin[2] = 0x02; plcPrinterBegin[3] = 0x00; plcPrinterBegin[4] = 0x01; plcPrinterBegin[5] = 0x00; plcPrinterBegin[6] = 0x00; plcPrinterBegin[7] = 0x0A; plcPrinterBegin[8] = 0x00; plcPrinterBegin[9] = 0x00; plcPrinterBegin[10] = 0x01; plcPrinterBegin[11] = 0x01; plcPrinterBegin[12] = 0x30; plcPrinterBegin[13] = 0x04; plcPrinterBegin[14] = 0x4E; plcPrinterBegin[15] = 0x00; plcPrinterBegin[16] = 0x00; plcPrinterBegin[17] = 0x01; //写CIO1102.00位的数据命令********复位条码打印开始位 plcPrinterReset[0] = 0x80; plcPrinterReset[1] = 0x00; plcPrinterReset[2] = 0x02; plcPrinterReset[3] = 0x00; plcPrinterReset[4] = 0x01; plcPrinterReset[5] = 0x00; plcPrinterReset[6] = 0x00; plcPrinterReset[7] = 0x0A; plcPrinterReset[8] = 0x00; plcPrinterReset[9] = 0x00; plcPrinterReset[10] = 0x01; plcPrinterReset[11] = 0x02; plcPrinterReset[12] = 0x30; plcPrinterReset[13] = 0x04; plcPrinterReset[14] = 0x4E; plcPrinterReset[15] = 0x00; plcPrinterReset[16] = 0x00; plcPrinterReset[17] = 0x01; plcPrinterReset[18] = 0x00; //写CIO1101.00位的数据命令********摄像头OK信号 plcCameraTestOK[0] = 0x80; plcCameraTestOK[1] = 0x00; plcCameraTestOK[2] = 0x02; plcCameraTestOK[3] = 0x00; plcCameraTestOK[4] = 0x01; plcCameraTestOK[5] = 0x00; plcCameraTestOK[6] = 0x00; plcCameraTestOK[7] = 0x0A; plcCameraTestOK[8] = 0x00; plcCameraTestOK[9] = 0x00; plcCameraTestOK[10] = 0x01; plcCameraTestOK[11] = 0x02; plcCameraTestOK[12] = 0x30; plcCameraTestOK[13] = 0x04; plcCameraTestOK[14] = 0x4D; plcCameraTestOK[15] = 0x00; plcCameraTestOK[16] = 0x00; plcCameraTestOK[17] = 0x01; plcCameraTestOK[18] = 0x01; #endregion //创建(实例化)线程,将需要执行的函数(方法-过程)传入线程中 this.threadInBack = new Thread(new ThreadStart(PLCConnection)); //3 //设置线程为后台线程(随着主线程(窗体线程)的退出而退出) this.threadInBack.IsBackground = true; this.threadInBack.Start(); comboBox_color.SelectedIndex = 3; comboBox_port.SelectedIndex = 1; comboBox_format.SelectedIndex = 0; comboBox_channel.SelectedIndex = 0; comboBox_interrupt.SelectedIndex = 1; step = 1; step_print = 1; for (ushort i = 0; i < MaxPort; i++)//initialize each port { if (Angelo.AngeloRTV_Initial(i) != 0) { MessageBox.Show("Total No. of AngeloRTV Port = " + i.ToString()); break; } } }
private void continueButton_Click(object sender, EventArgs e) { capture(); Angelo.AngeloRTV_Capture_Start(PortNo, 0xFFFFFFFF); }
private void collectModelToolStripButton_Click(object sender, EventArgs e) { capture(); Angelo.AngeloRTV_Capture_Start(PortNo, 0x01); }
private void capture() { for (ushort i = 0; i < MaxPort; i++) { Angelo.AngeloRTV_Capture_Stop(i); } ushort Multi; PortNo = ushort.Parse(comboBox_port.SelectedItem.ToString()); //selected port Channel = ushort.Parse(comboBox_channel.SelectedItem.ToString()); //selected channel Multi = (ushort)System.Math.Pow(2, Channel); Video_Format = (byte)(comboBox_format.SelectedIndex); //selected Video format switch (comboBox_color.SelectedIndex) //selected color format { default: case 0: //gray Color_Format = 1; Byte_Pixel = 1; color = System.Drawing.Imaging.PixelFormat.Format8bppIndexed; break; case 1: //rgb15 Color_Format = 2; Byte_Pixel = 2; color = System.Drawing.Imaging.PixelFormat.Format16bppRgb555; break; case 2: //rgb16 Color_Format = 0; Byte_Pixel = 2; color = System.Drawing.Imaging.PixelFormat.Format16bppRgb565; break; case 3: //rgb24 Color_Format = 3; Byte_Pixel = 3; color = System.Drawing.Imaging.PixelFormat.Format24bppRgb; break; case 4: //rgb32 Color_Format = 4; Byte_Pixel = 4; color = System.Drawing.Imaging.PixelFormat.Format32bppRgb; break; } #region disconstruct Angelo.AngeloRTV_Set_Callback(PortNo, null); if (mythread != null) { ISR_ON = false; //let ThreadProc go out the loop hEvent.Set(); mythread.Join(); //mainthread will continue afer other threads ending mythread = null; } #endregion if (comboBox_interrupt.SelectedIndex == 1)//selected callback or thread { ISR_ON = true; Angelo.AngeloRTV_Set_Int_Event(PortNo, ref Event); //set dll event mythread = new Thread(new ThreadStart(ThreadProc)); //create thread mythread.Start(); //start thread } else { Angelo.AngeloRTV_Set_Callback(PortNo, mycallback);//connect CallBackProc Function though mycallback } Angelo.AngeloRTV_Set_Color_Format(PortNo, Color_Format); Angelo.AngeloRTV_Set_Video_Format(PortNo, Video_Format); Angelo.AngeloRTV_Select_Channel(PortNo, Multi); }