private void UpdateSketchTrack() { if ((m_rgStroke != null) && (m_LButtonPressed)) { System.Drawing.Point pt; pt = plDraw.PointToClient(System.Windows.Forms.Cursor.Position); if ((pt.X == m_orgX) && (pt.Y == m_orgY)) { return; } m_orgX = pt.X; m_orgY = pt.Y; GOMLib.SketchPoint point = new GOMLib.SketchPoint(); point.x = pt.X; point.y = pt.Y; point.time = Environment.TickCount; m_rgStroke.Add(point); DrawCurrentStroke(plDraw.CreateGraphics()); } }
private System.Collections.ArrayList DecodePointTrackFromXML(string xmlTrack) { System.Xml.XmlDocument doc; System.Collections.ArrayList rgStroke; GOMLib.SketchPoint pt; rgStroke = new ArrayList(); try { doc = new System.Xml.XmlDocument(); doc.LoadXml(xmlTrack); if (System.String.Compare(doc.DocumentElement.Name, "input", true) == 0) { for (int i = 0; i < doc.DocumentElement.ChildNodes.Count; i++) { pt = new GOMLib.SketchPoint(); pt.x = int.Parse(doc.DocumentElement.ChildNodes[i].Attributes["x"].Value); pt.y = int.Parse(doc.DocumentElement.ChildNodes[i].Attributes["y"].Value); pt.time = int.Parse(doc.DocumentElement.ChildNodes[i].Attributes["t"].Value); rgStroke.Add(pt); } } } catch { System.Windows.Forms.MessageBox.Show("Invalid format in mouse tracking."); } return rgStroke; }
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; } } }