/// <summary> /// 删除Arrow /// </summary> /// <param name="myButton"></param> public void RemoveArrow(MyArrow myArrow) { if (_inkCanvas.Children.IndexOf(myArrow.Arrow) > -1) { _inkCanvas.Children.Remove(myArrow.Arrow); myArrow.IsDeleted = true; } }
/// <summary> /// 增加一个Arrow /// </summary> /// <param name="button"></param> public void AddArrow(MyArrow myArrow) { if (_inkCanvas.Children.IndexOf(myArrow.Arrow) == -1) { myArrow.Arrow.Stroke = System.Windows.Media.Brushes.Black; _inkCanvas.Children.Add(myArrow.Arrow); myArrow.IsDeleted = false; Sketch.AddArrow(myArrow); } }
public override void _presenter_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e) { if (startPoint != null) { Point endPoint = e.GetPosition(_inkCanvas); foreach (MyButton myButton in _inkCollector.Sketch.MyButtons) { if (MathTool.getInstance().isCloseMyButton(endPoint, myButton, 20) == true) { target = myButton; break; } } if (source != target && source != null && target != null) { ThumbConnector thumbConnector = new ThumbConnector(source, target); MyArrow ma = new MyArrow(thumbConnector.arrow); ma.PreMyButton = source; ma.NextMyButton = target; ma.StartPoint = startPoint; ma.EndPoint = endPoint; int i = 0; foreach (MyArrow myArrow in _inkCollector.Sketch.MyArrows) { if (myArrow.IsDeleted == false && myArrow.PreMyButton.IsDeleted == false && myArrow.PreMyButton == source && _inkCanvas.Children.IndexOf(myArrow.Arrow) > -1) { Command doana = new DeleteOldAddNewArrow(_inkCollector, myArrow, ma); doana.execute(); _inkCollector.CommandStack.Push(doana); i = -1; break; } i++; } if (i >= _inkCollector.Sketch.MyArrows.Count) { Command aac = new AddArrowCommand(_inkCollector, ma); aac.execute(); _inkCollector.CommandStack.Push(aac); } } } _inkCanvas.ReleaseMouseCapture(); }
public void updateArrow(InkCanvas ic, InkCollector _inkCollector) { List <MyArrow> maList = new List <MyArrow>(); foreach (MyArrow myArrow in _inkCollector.Sketch.MyArrows) { if (myArrow.IsDeleted == false && myArrow.NextMyButton == this && ic.Children.IndexOf(myArrow.Arrow) > -1 && myArrow.PreMyButton.isDeleted == false) { ic.Children.Remove(myArrow.Arrow); ThumbConnector tc = new ThumbConnector(myArrow.PreMyButton, this); MyArrow ma = new MyArrow(tc.arrow); ma.PreMyButton = myArrow.PreMyButton; ma.NextMyButton = this; ma.StartPoint = tc.startPoint; ma.EndPoint = tc.endPoint; maList.Add(ma); continue; } if (myArrow.IsDeleted == false && myArrow.PreMyButton == this && ic.Children.IndexOf(myArrow.Arrow) > -1 && myArrow.NextMyButton.isDeleted == false) { ic.Children.Remove(myArrow.Arrow); ThumbConnector tc = new ThumbConnector(this, myArrow.NextMyButton); MyArrow ma = new MyArrow(tc.arrow); ma.PreMyButton = this; ma.NextMyButton = myArrow.NextMyButton; ma.StartPoint = tc.startPoint; ma.EndPoint = tc.endPoint; maList.Add(ma); continue; } maList.Add(myArrow); } for (int i = 0; i < maList.Count; i++) { if (_inkCollector.Sketch.MyArrows[i] != maList[i]) { _inkCollector.Sketch.MyArrows[i] = maList[i]; ic.Children.Add(_inkCollector.Sketch.MyArrows[i].Arrow); } } }
/// <summary> /// 删除一个Button /// </summary> /// <param name="button">要删除的Arrow</param> public void RemoveArrow(MyArrow myArrow) { MyArrows.Remove(myArrow); }
/// <summary> /// 增加一个Arrow /// </summary> /// <param name="button">要增加的Arrow</param> public void AddArrow(MyArrow myArrow) { MyArrows.Add(myArrow); }
public AddArrowCommand(InkCollector _inkCollector, MyArrow myArrow) { this._myArrow = myArrow; this._inkCollector = _inkCollector; }
private void KeyWordsSentence_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) { if (e.Key == Key.Enter) { String keyWordsSentence = KeyWordsSentence.Text; keyWordsSentence.Trim(); //显示所有的mybutton foreach (MyButton mb in _inkCollector.Sketch.MyButtons) { if (mb.IsDeleted == false) { Command vmbc = new VisibleMyButtonCommand(_inkCollector, mb); vmbc.execute(); _inkCollector.CommandStack.Push(vmbc); } } //MessageBox.Show(keyWordsSentence.Length.ToString()); List <MyButton> myButtonList = new List <MyButton>(); string[] strArray = autoStoryBoardByString(keyWordsSentence); for (int i = 0; i < strArray.Length; i++) { string CharString = strArray[i]; string otherWords = "的了吗,,。.着"; if (otherWords.IndexOf(CharString) == -1) { foreach (MyButton myButton in _inkCollector.Sketch.MyButtons) { bool findFlag = false; //第一步:检测文本 foreach (MyRichTextBox myRichTextBox in myButton.InkFrame.InkCollector.Sketch.MyRichTextBoxs) { TextRange textRange = new TextRange(myRichTextBox.RichTextBox.Document.ContentStart, myRichTextBox.RichTextBox.Document.ContentEnd); if (textRange.Text.IndexOf(CharString) > -1 && myButtonList.IndexOf(myButton) == -1) { myButtonList.Add(myButton); MessageBox.Show("MyRichTextBox:" + CharString); findFlag = true; break; } } if (findFlag) { break; } //第二步:检测图片名称 foreach (MyImage mi in myButton.InkFrame.InkCollector.Sketch.Images) { if (mi.SafeFileName.IndexOf(CharString) > -1 && myButtonList.IndexOf(myButton) == -1) { myButtonList.Add(myButton); MessageBox.Show("MyImage:" + CharString); findFlag = true; break; } } if (findFlag) { break; } //第三步:检测视频名称,全局Mybutton较优先 if (myButton.VideoFileName.IndexOf(CharString) > -1 && myButtonList.IndexOf(myButton) == -1 && myButton.IsGlobal) { myButtonList.Add(myButton); MessageBox.Show("VideoFileName:" + CharString); break; } } } } //第一步:删除不需要的Mybutton List <MyButton> myButtonOtherList = new List <MyButton>(); foreach (MyButton mb in _inkCollector.Sketch.MyButtons) { if (myButtonList.IndexOf(mb) == -1) { myButtonOtherList.Add(mb); } } //MessageBox.Show(Thumb_InkFrame._inkCanvas.Children.Count.ToString()); foreach (MyButton mb in myButtonOtherList) { Command hmbc = new HiddenMyButtonCommand(_inkCollector, mb); hmbc.execute(); _inkCollector.CommandStack.Push(hmbc); } //MessageBox.Show(Thumb_InkFrame._inkCanvas.Children.Count.ToString()); foreach (MyArrow ma in _inkCollector.Sketch.MyArrows) { DeleteArrowCommand dac = new DeleteArrowCommand(_inkCollector, ma); dac.execute(); _inkCollector.CommandStack.Push(dac); } //第二步:移动需要的Mybutton并添加连线 int ThumbIndex = 0; foreach (MyButton mb in myButtonList) { double Left = _thumbInterval + (_thumbWidth + _thumbInterval) * (ThumbIndex % 6); double Top = _thumbInterval + (_thumbWidth * (mb.Height / mb.Width) + _thumbInterval) * (ThumbIndex / 6); ButtonMoveCommand bmc = new ButtonMoveCommand(mb, Left - mb.Left, Top - mb.Top, _inkCollector); bmc.execute(); _inkCollector.CommandStack.Push(bmc); if (ThumbIndex != myButtonList.Count - 1) { ThumbConnector thumbConnector = new ThumbConnector(myButtonList[ThumbIndex], myButtonList[ThumbIndex + 1]); MyArrow ma = new MyArrow(thumbConnector.arrow); ma.PreMyButton = myButtonList[ThumbIndex]; ma.NextMyButton = myButtonList[ThumbIndex + 1]; ma.StartPoint = thumbConnector.startPoint; ma.EndPoint = thumbConnector.endPoint; Command aac = new AddArrowCommand(_inkCollector, ma); aac.execute(); _inkCollector.CommandStack.Push(aac); } ThumbIndex++; } } }
public DeleteOldAddNewArrow(InkCollector _inkCollector, MyArrow myArrowOld, MyArrow myArrowNew) { this._myArrowOld = myArrowOld; this._myArrowNew = myArrowNew; this._inkCollector = _inkCollector; }
private void DrawShapes(Graphics g) { try { string errMessage = ""; //ListXMLShapes.Clear(); XmlNodeList xml_lines, xml_arrows, xml_rects, xml_regions; XmlDocument xmlDoc = new XmlDocument(); RecognizerInfo ri = RecognizerBusiness.Instance.GetRecognizerInfoByCameraId(ref errMessage, _cameraID); if (ri == null) { //if (XtraMessageBox.Show("对不起,您使用的照片没有对应的识别器,请另选", "提示", MessageBoxButtons.YesNoCancel) == DialogResult.Yes) { return; } } string name = @"c:\" + ri.Id.ToString() + "." + _cameraID + "admin" + ".xml"; xmlDoc.Load(@name); //直线 xml_lines = xmlDoc.SelectSingleNode("/pr/cameras/camera/lines").ChildNodes; float xScale = (float)this.Width / _currentImage.Width; float yScale = (float)(this.Height) / _currentImage.Height; foreach (XmlNode lineitem in xml_lines) { MyLine line = new MyLine(); line.MyPen = new Pen(Color.Red, 1); XmlElement xe = (XmlElement)lineitem; line.P1.X = Convert.ToInt32(xe.GetAttribute("X1")); line.P1.X = (int)(line.P1.X * xScale); line.P1.Y = Convert.ToInt32(xe.GetAttribute("Y1")); line.P1.Y = (int)(line.P1.Y * yScale); line.P2.X = Convert.ToInt32(xe.GetAttribute("X2")); line.P2.X = (int)(line.P2.X * xScale); line.P2.Y = Convert.ToInt32(xe.GetAttribute("Y2")); line.P2.Y = (int)(line.P2.Y * yScale); line.MyPen.Color = ColorTranslator.FromHtml(xe.GetAttribute("PenColor")); line.MyPen.Width = Convert.ToInt32(xe.GetAttribute("PenWidth")); g.DrawLine(line.MyPen, line.P1, line.P2); //ListXMLShapes.Add(line); } //箭头 xml_arrows = xmlDoc.SelectSingleNode("/pr/cameras/camera/arrows").ChildNodes; foreach (XmlNode arrowitem in xml_arrows) { MyArrow arrow = new MyArrow(); arrow.MyPen = new Pen(Color.Red, 1); XmlElement xa = (XmlElement)arrowitem; arrow.P1.X = Convert.ToInt32(xa.GetAttribute("X1")); arrow.P1.X = (int)(arrow.P1.X * xScale); arrow.P1.Y = Convert.ToInt32(xa.GetAttribute("Y1")); arrow.P1.Y = (int)(arrow.P1.Y * yScale); arrow.P2.X = Convert.ToInt32(xa.GetAttribute("X2")); arrow.P2.X = (int)(arrow.P2.X * xScale); arrow.P2.Y = Convert.ToInt32(xa.GetAttribute("Y2")); arrow.P2.Y = (int)(arrow.P2.Y * yScale); arrow.MyPen.Color = ColorTranslator.FromHtml(xa.GetAttribute("PenColor")); arrow.MyPen.Width = Convert.ToInt32(xa.GetAttribute("PenWidth")); g.DrawLine(arrow.MyPen, arrow.P1, arrow.P2); //ListXMLShapes.Add(arrow); } //矩形 xml_rects = xmlDoc.SelectSingleNode("/pr/cameras/camera/rects").ChildNodes; foreach (XmlNode rectitem in xml_rects) { MyRect rect = new MyRect(); rect.MyPen = new Pen(Color.Red, 1); XmlElement xr = (XmlElement)rectitem; rect.P1.X = Convert.ToInt32(xr.GetAttribute("X")); rect.P1.X = (int)(rect.P1.X * xScale); rect.P1.Y = Convert.ToInt32(xr.GetAttribute("Y")); rect.P1.Y = (int)(rect.P1.Y * yScale); rect.Width = Convert.ToInt32(xr.GetAttribute("W")); rect.Width = (int)(rect.Width * xScale); rect.Height = Convert.ToInt32(xr.GetAttribute("H")); rect.Height = (int)(rect.Height * yScale); rect.MyPen.Color = ColorTranslator.FromHtml(xr.GetAttribute("PenColor")); rect.MyPen.Width = Convert.ToInt32(xr.GetAttribute("PenWidth")); g.DrawRectangle(rect.MyPen, rect.P1.X, rect.P1.Y, rect.Width, rect.Height); //ListXMLShapes.Add(rect); } //多边形 xml_regions = xmlDoc.SelectSingleNode("/pr/cameras/camera/regions").ChildNodes; foreach (XmlNode regionitem in xml_regions) { MyPoly poly = new MyPoly(); poly.MyPen = new Pen(Color.Red, 1); XmlElement xp = (XmlElement)regionitem; poly.MyPen.Color = ColorTranslator.FromHtml(xp.GetAttribute("PenColor")); poly.MyPen.Width = Convert.ToInt32(xp.GetAttribute("PenWidth")); XmlNodeList pointlist = regionitem.ChildNodes; foreach (XmlNode pitem in pointlist) { Point p = new Point(); XmlElement test = (XmlElement)pitem; p.X = Convert.ToInt32(test.GetAttribute("X")); p.X = (int)(p.X * xScale); p.Y = Convert.ToInt32(test.GetAttribute("Y")); p.Y = (int)(p.Y * yScale); poly.ListPoint.Add(p); } //IsFinished=true poly.IsFinished = true; g.DrawPolygon(poly.MyPen, poly.ListPoint.ToArray()); //ListXMLShapes.Add(poly); } } catch (Exception) { ; } }