public void OnLayersPainterFormMouseMove(object sender, MouseEventArgs e) { if (MouseMovedRealPosition != null) { Position_Connected_Edit mouseChickedRealPosition = new Position_Connected_Edit(); mouseChickedRealPosition.SetX(layersPaintedControl.ConvertMouseXToRealX(e.X)); mouseChickedRealPosition.SetY(layersPaintedControl.ConvertMouseYToRealY(e.Y)); if (MouseMovedRealPosition != null) { MouseMovedRealPosition(mouseChickedRealPosition); } } }
public IPosition GetMouseDoubleChickedNearestPositionInCurrentPositionSet(IPositionSet currentPositionSet) { M2M_NN m2m_NN = new M2M_NN(); m2m_NN.PreProcess(currentPositionSet); layersPaintedControl.state_PainterForm_MouseDown = LayersPaintedControl.State_PainterForm_MouseDown.onDaggle; ResetEventHandler(); //layersPainterForm.state_PainterForm_MouseDown = LayersPainterForm.State_PainterForm_MouseDown.Other; IPosition nearestPoint = new Position_Connected_Edit(0, 0); PositionSetEdit_ImplementByICollectionTemplate positionSetEdit_ImplementByICollectionTemplate = new PositionSetEdit_ImplementByICollectionTemplate(); positionSetEdit_ImplementByICollectionTemplate.AddPosition(nearestPoint); Layer_PositionSet_Square layer = new Layer_PositionSet_Square(positionSetEdit_ImplementByICollectionTemplate); MouseMovedRealPosition = delegate(IPosition position) { positionSetEdit_ImplementByICollectionTemplate.RemovePosition(nearestPoint); nearestPoint = m2m_NN.NearestNeighbor(position); positionSetEdit_ImplementByICollectionTemplate.AddPosition(nearestPoint); layer.SpringLayerRepresentationChangedEvent(layer); layersPaintedControl.Invalidate(); }; layer.VisibleInOptDlg = false; layer.Active = true; layer.Name = "Edited Figure"; layer.SquareFrameDrawer.RectangleRadiusWidth = 8; layer.SquareFrameDrawer.LineWidth = 1; layer.SquareFrameDrawer.LineColor = Color.Red; layer.CenterPointCoordinate.Visible = true; layer.CenterPointCoordinate.CoordinateFont = new Font(layer.CenterPointCoordinate.CoordinateFont, FontStyle.Bold); System.Threading.Thread currentThread = System.Threading.Thread.CurrentThread; Position_Connected_Edit mouseChickedRealPosition = null; IPosition nearestPositionInCurrentPositionSet = null; this.BeginInvoke(new dShow(MessageBox.Show), new object[] { "please double chick on the screen." }); MouseDoubleChickOnLayersPaintedControl += delegate(object sender, MouseEventArgs e) { mouseChickedRealPosition = new Position_Connected_Edit(); mouseChickedRealPosition.SetX(layersPaintedControl.ConvertMouseXToRealX(e.X)); mouseChickedRealPosition.SetY(layersPaintedControl.ConvertMouseYToRealY(e.Y)); nearestPositionInCurrentPositionSet = m2m_NN.NearestNeighbor(mouseChickedRealPosition); if ((currentThread.ThreadState & System.Threading.ThreadState.Suspended) == System.Threading.ThreadState.Suspended) { currentThread.Resume(); } }; if (currentLayer != null) { layers.Remove(currentLayer); } currentLayer = layer; layers.Add(layer); currentThread.Suspend(); MouseDoubleChickOnLayersPaintedControl = null; return(nearestPositionInCurrentPositionSet); }
public override void Draw(Graphics graphics) { if (Visible) { SetDrawerGraphic(graphics); List <IPosition_Connected> PartMiddlePointList = new List <IPosition_Connected>(); List <PointF[]> PointArrayList = new List <PointF[]>(); ILevel level = m2mStructure.GetLevel(levelSequence); IPart rootPart = m2mStructure.GetLevel(0).GetPartRefByPartIndex(0, 0); IPositionSet positionSet = m2mStructure.GetDescendentPositionSetByAncestorPart(levelSequence, rootPart, 0); Dictionary <IPosition, IPosition_Connected_Edit> partToPositionDictionary = new Dictionary <IPosition, IPosition_Connected_Edit>(); positionSet.InitToTraverseSet(); while (positionSet.NextPosition()) { Position_Connected_Edit PartDeputyPosition_Connected = new Position_Connected_Edit(); partToPositionDictionary.Add(positionSet.GetPosition(), PartDeputyPosition_Connected); } positionSet.InitToTraverseSet(); while (positionSet.NextPosition()) { IPart_Connected currentPart = (IPart_Connected)positionSet.GetPosition(); IPositionSet bottomLevelPositionSet = m2mStructure.GetBottonLevelPositionSetByAncestorPart(currentPart, levelSequence); IPosition tempPoint = PositionSetAttribute.GetGravityCenter(bottomLevelPositionSet); IPosition_Connected_Edit PartDeputyPosition_Connected; partToPositionDictionary.TryGetValue(positionSet.GetPosition(), out PartDeputyPosition_Connected); PartDeputyPosition_Connected.SetX(tempPoint.GetX()); PartDeputyPosition_Connected.SetY(tempPoint.GetY()); currentPart.GetAdjacencyPositionSet().InitToTraverseSet(); while (currentPart.GetAdjacencyPositionSet().NextPosition()) { IPosition_Connected_Edit adjDeputy; partToPositionDictionary.TryGetValue(currentPart.GetAdjacencyPositionSet().GetPosition(), out adjDeputy); PartDeputyPosition_Connected.GetAdjacencyPositionSetEdit().AddAdjacency( adjDeputy, currentPart.GetAdjacencyPositionSet().GetDistanceToAdjacency()); } PartMiddlePointList.Add(PartDeputyPosition_Connected); IPositionSet ConvexHullPointSet = null; if (bottomLevelPositionSet.GetNum() > 1) { ConvexHullPointSet = new QuickHull().ConvexHull(bottomLevelPositionSet); } else { ConvexHullPointSet = bottomLevelPositionSet; } PointF[] tempArray = new PointF[ConvexHullPointSet.GetNum()]; int sequence = 0; ConvexHullPointSet.InitToTraverseSet(); while (ConvexHullPointSet.NextPosition()) { tempArray[sequence].X = ConvertRealXToScreenX(ConvexHullPointSet.GetPosition().GetX()); tempArray[sequence].Y = ConvertRealYToScreenY(ConvexHullPointSet.GetPosition().GetY()); sequence++; } PointArrayList.Add(tempArray); } Pen pen = new Pen(partColor, partBorderWidth); Brush brush = new SolidBrush(Color.FromArgb(alpha, partColor)); foreach (PointF[] pointArray in PointArrayList) { if (pointArray.Length >= 2) { graphics.DrawPolygon(pen, pointArray); graphics.FillPolygon(brush, pointArray); } } this.positionSet = new PositionSet_ConnectedEdit(PartMiddlePointList); positionSetDrawerPump.ResetPump(); positionSetDrawerPump.DrawCoordinate(pointCoordinateDrawer); positionSetDrawerPump.DrawPoint(pointDrawer); positionSetDrawerPump.DrawConnection(connectionDrawer); positionSetDrawerPump.Run(); } }