private void plDraw_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left) { m_LButtonPressed = false; } switch (e.Button) { case System.Windows.Forms.MouseButtons.Left: { switch (status.Action) { case UserActions.Linking: { for (int i = 0; i < m_rgObjects.Count; i++) { GOMLib.GOM_Point pt; pt = m_rgObjects[i].GetConnectablePointAt(e.X, e.Y); if (pt!= null) { if ( m_selObjs[0]!=m_rgObjects[i] || m_selectedPoint!=pt ) { GOMLib.GOM_Link link; link = GOMLib.GOM_Default_Values.CreateLink( m_selObjs[0], m_selectedPoint, m_rgObjects[i], pt); AddLinkWithMergemence(link); m_selObjs.Clear(); m_selectedLink = link; break; } } } status.Action = UserActions.Editing; m_selectedPoint = null; DrawObjectsOnCanvas(); break; } case UserActions.Sketching: { FinishCurrentSketchStroke(); break; } case UserActions.Editing: { break; } case UserActions.InsertObject: { GOMLib.GOM_Object_Primitive primitive; primitive = new GOMLib.GOM_Object_Primitive(); primitive.InitializeFromTemplate(status.Template); primitive.xOffset = e.X; primitive.yOffset = e.Y; GOMLib.GOM_Default_Values.ScaleObject(primitive, 25, 25); m_rgObjects.Add(primitive); status.Action = UserActions.Editing; status.Template = null; m_selObjs.Clear(); m_selObjs.Add(primitive); DrawObjectsOnCanvas(); break; } case UserActions.Controlling: { plDraw.Capture = false; status.Action = UserActions.Editing; m_selectedPoint = null; break; } case UserActions.Moving: { plDraw.Capture = false; status.Action = UserActions.Editing; if ( m_selObjs.Count == 1 ) { GOMLib.GOM_Interface_Graphic_Object graphicObject = m_selObjs[0]; bool touched = false; for ( int i=0; i<m_rgObjects.Count; i++ ) { GOMLib.GOM_Object_LinkNode linkNode = m_rgObjects[i] as GOMLib.GOM_Object_LinkNode; if ( !(graphicObject is GOMLib.GOM_Object_LinkNode) && linkNode != null ) { GOMLib.GOM_Links links = GetLinks(linkNode); if ( links.Count == 1 ) { GOMLib.GOM_Point touchedPoint = graphicObject.GetConnectablePointAt((int)linkNode.xOffset, (int)linkNode.yOffset); if ( touchedPoint != null ) { if ( links[0].m_startObj == linkNode ) { links[0].m_startObj = graphicObject; links[0].m_startPt = touchedPoint; } else { links[0].m_endObj = graphicObject; links[0].m_endPt = touchedPoint; } m_rgObjects.Remove(linkNode); touched = true; } } } } if ( touched ) { DrawObjectsOnCanvas(); } } break; } case UserActions.MovingKeyPoint: { m_selectedLinkKeyPoint = null; status.Action = UserActions.Editing; if ( m_selectedLink.m_keyPts != null ) { ArrayList pts = new ArrayList(); PointF ptf = m_selectedLink.StartPointInCanvas(m_rgObjects); GOMLib.SketchPoint spt = new GOMLib.SketchPoint(); spt.x = (int)ptf.X; spt.y = (int)ptf.Y; pts.Add( spt ); for( int i=0; i<m_selectedLink.m_keyPts.Count; i++ ) { spt = new GOMLib.SketchPoint(); spt.x = (int)m_selectedLink.m_keyPts[i].x; spt.y = (int)m_selectedLink.m_keyPts[i].y; pts.Add( spt ); } ptf = m_selectedLink.EndPointInCanvas(m_rgObjects); spt = new GOMLib.SketchPoint(); spt.x = (int)ptf.X; spt.y = (int)ptf.Y; pts.Add( spt ); pts = CalculateSegments(pts); m_selectedLink.m_keyPts = new GOMLib.GOM_Points(); for( int i=0; i<(pts.Count-2); i++ ) { GOMLib.GOM_Point pt = new GOMLib.GOM_Point(); pt.x = ((GOMLib.SketchPoint)pts[i+1]).x; pt.y = ((GOMLib.SketchPoint)pts[i+1]).y; m_selectedLink.m_keyPts.Add( pt ); } } DrawObjectsOnCanvas(); break; } case UserActions.Selecting: { System.Drawing.Region rgn; System.Drawing.Region rgnIntersect; System.Drawing.Graphics canvas; rgn = new Region(m_selectingRect); canvas = plDraw.CreateGraphics(); for (int i = 0; i < m_rgObjects.Count; i++) { rgnIntersect = rgn.Clone(); rgnIntersect.Intersect(m_rgObjects[i].BoundingRegion); if (!rgnIntersect.IsEmpty(canvas)) { m_selObjs.Add(m_rgObjects[i]); } } plDraw.Capture = false; status.Action = UserActions.Editing; m_selectingRect.X = 0; m_selectingRect.Y = 0; m_selectingRect.Width = 0; m_selectingRect.Height = 0; DrawObjectsOnCanvas(); break; } } break; } } }
public DrawingForm(string templatePath) { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // m_LButtonPressed = false; m_CtrlPressed = false; m_bRedoing = false; m_selectingRect = new System.Drawing.Rectangle(0, 0, 0, 0); m_selectedPen = new Pen(System.Drawing.Color.FromArgb(150, 0, 0, 255), 1); m_groupSelPen = new Pen(System.Drawing.Color.FromArgb(255, 200, 200, 200), 1); m_selectingPen = new Pen(System.Drawing.Color.FromArgb(100, 0, 0, 0), 1); m_groupSelPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot; m_selectingPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; m_frmColor = new ColorForm(); m_frmColor.TopLevel = false; m_frmColor.FormBorderStyle = FormBorderStyle.None; m_frmColor.Visible = false; m_frmColor.DrawingStyleChanged += new DrawingStyleChangedEvent(m_frmColor_DrawingStyleChanged); m_frmColor.FillingStyleChanged += new FillingStyleChangedEvent(m_frmColor_FillingStyleChanged); m_frmEdit = new EditForm(); m_frmEdit.TopLevel = false; m_frmEdit.FormBorderStyle = FormBorderStyle.None; m_frmEdit.Visible = false; m_frmEdit.CommandSelected += new CommandSelectedEvent(m_frmEdit_CommandSelected); m_frmLink = new LinkForm(); m_frmLink.TopLevel = false; m_frmLink.FormBorderStyle = FormBorderStyle.None; m_frmLink.Visible = false; m_frmLink.LinkStyleChanged += new LinkStyleChangedEvent(m_frmLink_LinkStyleChanged); m_frmLink.RemoveLink += new RemoveLinkEvent(m_frmLink_RemoveLink); m_frmInfo = new InfoForm(); m_frmInfo.TopLevel = false; m_frmInfo.FormBorderStyle = FormBorderStyle.None; m_frmInfo.Visible = false; m_frmInfo.DrawingInfoChanged += new DrawingInfoChanged(m_frmInfo_DrawingInfoChanged); tagInfo.TagControl = m_frmInfo; //m_frmLink.LoadLinkStyle(Environment.CurrentDirectory + "\\Links"); tagColor.TagControl = m_frmColor; tagEdit.TagControl = m_frmEdit; tagLink.TagControl = m_frmLink; m_clipBoard = new GOMLib.GOM_Objects(); m_selObjs = new GOMLib.GOM_Objects(); m_rgObjects = new GOMLib.GOM_Objects(); m_bitmap = new Bitmap(plDraw.Width, plDraw.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb); m_preprocess = new PreprocessQueue(); m_preprocess.m_bDebugging = false; m_preprocess.UpdateRequired += new PreprocessOverEvent(m_preprocess_UpdateRequired); m_preprocess.StartPreprocessThread(); m_recognition = new RecognitionQueue(templatePath); m_recognition.m_bDebugging = false; m_recognition.RecognitionStart += new RecognitionEvent(m_recognition_RecognitionStart); m_recognition.RecognitionEnd += new RecognitionEvent(m_recognition_RecognitionEnd); m_recognition.RecognitionOver += new RecognitionOverEvent(m_recognition_RecognitionOver); m_recognition.StartRecognitionThread(); m_rgRedoList= new ArrayList(); m_rgLinks = new GOMLib.GOM_Links(); m_rgStroke = null; m_sketch = null; m_selectedPoint = null; m_selectedLink = null; m_selectedLinkKeyPoint = null; m_tracker = new MouseTrackerLib.CTrackerClass(); Graphics.FromImage(m_bitmap).FillRectangle(System.Drawing.Brushes.White, 0, 0, plDraw.Width, plDraw.Height); }
private void plDraw_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { GOMLib.GOM_Interface_Graphic_Object selectedObj; if (e.Button == System.Windows.Forms.MouseButtons.Left) { m_LButtonPressed = true; } switch (e.Button) { case System.Windows.Forms.MouseButtons.Right: { if ( m_selectedLink!= null && m_selectedLink.IsPointOnLink(e.X, e.Y, m_rgObjects) ) { m_selectedLink.AddKeyPoint(e.X, e.Y, m_rgObjects); DrawObjectsOnCanvas(); } else { if (status.Action == UserActions.Sketching) { if (!m_LButtonPressed) { FinishCurrentSketchObject(); } } else { ClearRecognitionResult(); m_sketch = new GOMLib.GOM_Object_Sketch(); status.Action = UserActions.Sketching; if ( DrawingModeChanged != null ) { DrawingModeChanged(DrawingMode.Sketching); } } DrawObjectsOnCanvas(); } break; } case System.Windows.Forms.MouseButtons.Left: { switch (status.Action) { case UserActions.Sketching: { // FinishCurrentSketchStroke(); ClearRecognitionResult(); DrawObjectsOnCanvas(); m_orgX = -1; m_orgY = -1; m_rgStroke = new ArrayList(); m_tracker.StartTracker(true); break; } case UserActions.Editing: { GOMLib.GOM_Link link; plDraw.Capture = true; selectedObj = null; m_orgX = e.X; m_orgY = e.Y; m_selectedLinkKeyPoint = null; //Ckeck for link key point at the mouse position if ( m_selectedLink != null && m_selObjs.Count<=0 ) { for( int i=0; i<m_selectedLink.m_keyPts.Count; i++) { if ( GOMLib.GOM_Default_Values.IsMouseOnPoint(m_selectedLink.m_keyPts[i].x, m_selectedLink.m_keyPts[i].y, e.X, e.Y ) ) { m_selectedLinkKeyPoint = m_selectedLink.m_keyPts[i]; status.Action = UserActions.MovingKeyPoint; if ( DrawingModeChanged != null ) { DrawingModeChanged(DrawingMode.Editing); } return; } } } //Check for object at the mouse position for (int i = m_rgObjects.Count - 1; i >= 0; i--) { if (m_rgObjects[i].IsPointInObject(e.X, e.Y)) { selectedObj = m_rgObjects[i]; if (!m_selObjs.Contains(selectedObj)) { if (!m_CtrlPressed) { m_selObjs.Clear(); } m_selObjs.Add(selectedObj); } status.Action = UserActions.Moving; if ( DrawingModeChanged != null ) { DrawingModeChanged(DrawingMode.Editing); } DrawObjectsOnCanvas(); return; } } m_selectedLink = null; for (int i = 0; i < m_rgLinks.Count; i++) { link = (GOMLib.GOM_Link)m_rgLinks[i]; if (link.IsPointOnLink(e.X, e.Y, m_rgObjects)) { m_selObjs.Clear(); m_selectedLink = link; DrawObjectsOnCanvas(); return; } } //Check for controllable points for (int i = 0; i < m_selObjs.Count; i++) { m_selectedPoint = m_selObjs[i].GetMovablePointAt(e.X, e.Y); if (m_selectedPoint != null) { status.Action = UserActions.Controlling; selectedObj = m_selObjs[i]; m_selObjs.Clear(); m_selObjs.Add(selectedObj); DrawObjectsOnCanvas(); return; } } //Check for connectable points for (int i = 0; i < m_rgObjects.Count; i++) { m_selectedPoint = m_rgObjects[i].GetConnectablePointAt(e.X, e.Y); if (m_selectedPoint != null) { status.Action = UserActions.Linking; selectedObj = m_rgObjects[i]; m_selObjs.Clear(); m_selObjs.Add(selectedObj); DrawObjectsOnCanvas(); return; } } //A object is selected. Update the selection list if (selectedObj != null) { if (!m_selObjs.Contains(selectedObj)) { if (!m_CtrlPressed) { m_selObjs.Clear(); } m_selObjs.Add(selectedObj); } status.Action = UserActions.Moving; if ( DrawingModeChanged != null ) { DrawingModeChanged(DrawingMode.Editing); } } else { if (!m_CtrlPressed) { m_selObjs.Clear(); } m_orgX = e.X; m_orgY = e.Y; status.Action = UserActions.Selecting; if ( DrawingModeChanged != null ) { DrawingModeChanged(DrawingMode.Editing); } } DrawObjectsOnCanvas(); break; } case UserActions.InsertObject: { break; } } break; } } }
private void m_frmLink_RemoveLink(GOMLib.GOM_Link link) { m_rgLinks.Remove(link); tagLink.HideTagWindow(); m_selectedLink = null; DrawObjectsOnCanvas(); }
private void m_frmEdit_CommandSelected(EditCommands command) { if (status.Action == UserActions.Editing) { switch (command) { case EditCommands.Group: { if (m_selObjs.Count > 1) { GOMLib.GOM_Interface_Graphic_Object obj; obj = GOMLib.GOM_Object_Group.CreateGroupObject(m_selObjs); if (obj != null) { for (int i = 0; i < m_selObjs.Count; i++) { m_rgObjects.Remove(m_selObjs[i]); } m_rgObjects.Add(obj); m_selObjs.Clear(); m_selObjs.Add(obj); DrawObjectsOnCanvas(); } } break; } case EditCommands.Ungroup: { if (m_selObjs.Count == 1) { if (m_selObjs[0] is GOMLib.GOM_Object_Group) { GOMLib.GOM_Objects rgObjs; rgObjs = new GOMLib.GOM_Objects(); ((GOMLib.GOM_Object_Group)m_selObjs[0]).DecomposeGroupObject(rgObjs); m_rgObjects.Remove(m_selObjs[0]); m_selObjs.Clear(); for (int i = 0; i < rgObjs.Count; i++) { m_rgObjects.Add(rgObjs[i]); m_selObjs.Add(rgObjs[i]); } DrawObjectsOnCanvas(); } } break; } case EditCommands.BringToFront: { if (m_selObjs.Count > 0) { for (int i = 0; i < m_selObjs.Count; i++) { m_rgObjects.Remove(m_selObjs[i]); } for (int i = 0; i < m_selObjs.Count; i++) { m_rgObjects.Add(m_selObjs[i]); } DrawObjectsOnCanvas(); } break; } case EditCommands.SendToBack: { if (m_selObjs.Count > 0) { for (int i = 0; i < m_selObjs.Count; i++) { m_rgObjects.Remove(m_selObjs[i]); } for (int i = 0; i < m_selObjs.Count; i++) { m_rgObjects.Insert(m_selObjs[i], 0); } DrawObjectsOnCanvas(); } break; } case EditCommands.Delete: { if (m_selObjs.Count > 0) { for (int i = 0; i < m_selObjs.Count; i++) { m_rgObjects.Remove(m_selObjs[i]); int j = 0; while (j < m_rgLinks.Count) { if (((GOMLib.GOM_Link)m_rgLinks[j]).LinkWith(m_selObjs[i])) { if (m_rgLinks[j].Equals(m_selectedLink)) { m_selectedLink = null; } m_rgLinks.RemoveAt(j); } else { j++; } } } m_selObjs.Clear(); DrawObjectsOnCanvas(); } break; } case EditCommands.Cut: { if (m_selObjs.Count > 0) { m_clipBoard.Clear(); for (int i = 0; i < m_selObjs.Count; i++) { m_rgObjects.Remove(m_selObjs[i]); m_clipBoard.Add(m_selObjs[i]); } m_selObjs.Clear(); DrawObjectsOnCanvas(); } break; } case EditCommands.Copy: { if (m_selObjs.Count > 0) { m_clipBoard.Clear(); for (int i = 0; i < m_selObjs.Count; i++) { m_clipBoard.Add(m_selObjs[i]); } } break; } case EditCommands.Paste: { if (m_clipBoard.Count > 0) { float minX, minY; m_selObjs.Clear(); for (int i = 0; i < m_clipBoard.Count; i++) { m_selObjs.Add(m_clipBoard[i].Clone()); } minX = m_selObjs[0].xOffset; minY = m_selObjs[0].yOffset; for (int i = 1; i < m_selObjs.Count; i++) { minX = Math.Min(minX, m_selObjs[i].xOffset); minY = Math.Min(minY, m_selObjs[i].yOffset); } minX = tagEdit.Left - minX; minY = tagEdit.Top - minY; for (int i = 0; i < m_selObjs.Count; i++) { m_selObjs[i].xOffset += minX; m_selObjs[i].yOffset += minY; m_rgObjects.Add(m_selObjs[i]); } DrawObjectsOnCanvas(); } break; } case EditCommands.Sketch: { if (m_selObjs.Count == 1) { if (m_selObjs[0] is GOMLib.GOM_Object_Sketch) { m_sketch = (GOMLib.GOM_Object_Sketch)m_selObjs[0]; m_rgObjects.Remove(m_sketch); m_selObjs.Clear(); status.Action = UserActions.Sketching; if ( DrawingModeChanged != null ) { DrawingModeChanged(DrawingMode.Sketching); } DrawObjectsOnCanvas(); } } break; } } } if (status.Action == UserActions.Sketching) { switch (command) { case EditCommands.Undo: { if (m_sketch != null) { while (m_sketch.rgStrokeToSketch.Count > 0) { if ((int)(m_sketch.rgStrokeToSketch[m_sketch.rgStrokeToSketch.Count - 1]) == m_sketch.rgSketchSet.Count) { m_sketch.rgStrokeToSketch.RemoveAt(m_sketch.rgStrokeToSketch.Count - 1); m_sketch.rgDrawings.RemoveAt(m_sketch.rgDrawings.Count - 1); } else { break; } } if (m_sketch.rgSketchSet.Count > 0) { m_rgRedoList.Add(m_sketch.rgSketchSet[m_sketch.rgSketchSet.Count - 1]); m_sketch.rgSketchSet.RemoveAt(m_sketch.rgSketchSet.Count - 1); } ClearRecognitionResult(); if (m_sketch.rgSketchSet.Count > 0) { // m_recognition.PushStrokeAndWait(m_sketch.ExportRecognitionResultToXML()); m_recognition.PushStroke(m_sketch.ExportRecognitionResultToXML()); } DrawObjectsOnCanvas(); } break; } case EditCommands.Redo: { if (m_rgRedoList.Count > 0) { if (m_sketch != null) { ClearRecognitionResult(); m_bRedoing = true; m_sketch.rgSketchSet.Add(m_rgRedoList[m_rgRedoList.Count - 1]); m_preprocess.PushSketchAndWait(m_sketch, (ArrayList)m_rgRedoList[m_rgRedoList.Count - 1]); m_rgRedoList.RemoveAt(m_rgRedoList.Count - 1); DrawObjectsOnCanvas(); } } break; } } } tagEdit.HideTagWindow(); }
public LinkForm() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // pSolid = new Pen(System.Drawing.Color.Black, 1); pSolid.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid; pDot = new Pen(System.Drawing.Color.Black, 1); pDot.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot; pDash = new Pen(System.Drawing.Color.Black, 1); pDash.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; pDashDot = new Pen(System.Drawing.Color.Black, 1); pDashDot.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDot; pDashDotDot = new Pen(System.Drawing.Color.Black, 1); pDashDotDot.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDotDot; rbpSolid.Tag = pSolid; rbpDot.Tag = pDot; rbpDash.Tag = pDash; rbpDashDot.Tag = pDashDot; rbpDashDotDot.Tag = pDashDotDot; rbpNone.Tag = GOMLib.GOM_Terminal_Style.None; rbpArrow.Tag = GOMLib.GOM_Terminal_Style.Arrow; rbpCircle.Tag = GOMLib.GOM_Terminal_Style.Circle; rbpTriangle.Tag = GOMLib.GOM_Terminal_Style.Triangle; rbpDiamond.Tag = GOMLib.GOM_Terminal_Style.Diamond; m_selectedLink = null; selectedPen = null; bUnderSettingStyle = false; cbPoints.SelectedIndex = 0; plDrawTool_Click(null, null); }
public static GOM_Link CreateLink(GOM_Interface_Graphic_Object startObj, GOM_Point startPt, GOM_Interface_Graphic_Object endObj, GOM_Point endPt, GOM_Points keyPoints) { GOM_Style_Drawing drawing = new GOMLib.GOM_Style_Drawing(); drawing.drawingStyle.Color = System.Drawing.Color.Gray; GOM_Link link = new GOMLib.GOM_Link(startObj, startPt, endObj, endPt, drawing, GOMLib.GOM_Linking_Style.Line, GOMLib.GOM_Terminal_Style.None, GOMLib.GOM_Terminal_Style.None); if ( keyPoints!=null && keyPoints.Count>0 ) { link.m_linkingStyle = GOMLib.GOM_Linking_Style.Polyline; link.m_keyPts = keyPoints; } return link; }