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 void ReplaceCurrentSketching(TemplatePack template) { GOMLib.GOM_Object_Primitive primitive; if (status.Action == UserActions.Sketching) { m_sketch = null; primitive = new GOMLib.GOM_Object_Primitive(); primitive.InitializeFromTemplate(template.template); primitive.xOffset = template.rect.Left; primitive.yOffset = template.rect.Top; GOMLib.GOM_Default_Values.ScaleObject(primitive, 25, 25); // GOMLib.GOM_Default_Values.ScaleObject(primitive, template.rect.Width, template.rect.Height); /* double rotation = (template.rotation / System.Math.PI) * 180; if (rotation < 0) { rotation += 360; } rotation = (float)System.Math.Round(rotation / 45) * 45; primitive.rotation = (float)rotation; */ m_rgObjects.Add(primitive); //save to somewhere //end m_sketch = new GOMLib.GOM_Object_Sketch(); tagFishEye.ClearFishEyeItems(); DrawObjectsOnCanvas(); } }
public TemplatePack() { bitmap = null; template = null; primitive = null; }