private void RemoveNodeButton_Click(object sender, EventArgs e) { ResetEventHandler(); layersPaintedControl.state_PainterForm_MouseDown = LayersPaintedControl.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); if (currentLayer != null) { layers.Remove(currentLayer); } currentLayer = layer; layers.Add(layer); MouseLBottonCheckRealPosition = delegate(IPosition position) { //((IPositionSetEdit)selectedPositionSetEdit).RemovePosition(nearestPoint); if (selectedPositionSetEdit is IPositionSet_ConnectedEdit && nearestPoint is IPosition_Connected) { ((IPositionSet_ConnectedEdit)selectedPositionSetEdit).RemovePosition_Connected((IPosition_Connected)nearestPoint); } else if (selectedPositionSetEdit is IPositionSetEdit) { ((IPositionSetEdit)selectedPositionSetEdit).RemovePosition(nearestPoint); } else { throw new Exception(error_position); } selectedPositionSetLayer.SpringLayerRepresentationChangedEvent(selectedPositionSetLayer); m2m_NN.Remove(nearestPoint); layersPaintedControl.Invalidate(); }; }
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 void testDictionary() { float value = 3.14f; IPosition_Connected p = new Position_Connected_Edit(2, 5); Tag l = new Tag(p, value), temp; dict.Add(p, l); dict.TryGetValue(p, out temp); Assert.AreEqual(l, temp); Console.WriteLine(l.GetHashCode()); Console.WriteLine(temp.GetHashCode()); temp.g *= 2; dict.TryGetValue(p, out temp); Assert.AreEqual(l, temp); Console.WriteLine(l.GetHashCode()); Console.WriteLine(temp.GetHashCode()); }
private static IPositionSet_Connected ConvertDBFToPositionSet_Connected(string fileFolder) { Dictionary <string, Position_Connected_Edit> boundaryPointDictioinary = new Dictionary <string, Position_Connected_Edit>(); List <IPosition_Connected> position_ConnectedList = new List <IPosition_Connected>(); int a1 = Create(new StringBuilder("J50F001019\\")); int a2 = Create(new StringBuilder("J50F002020\\")); int a3 = Create(new StringBuilder("J50F001020\\")); int a4 = Create(new StringBuilder("J50F002019\\")); for (int currentDBFIndex = a1; currentDBFIndex <= a4; currentDBFIndex++) { SetCurrentIndex(currentDBFIndex); if ((OpenNodeDBF() == 1) && (OpenRoadDBF() == 1) && (OpenS_ATTDBF() == 1)) { int aTTRecordCount = GetS_ATTRecordCount(); int roadRecordCount = GetRoadRecordCount(); int nodeRecordCount = GetNodeRecordCount(); Position_Connected_Edit[] aryPosition_Connected_Edit = new Position_Connected_Edit[nodeRecordCount]; for (int i = 0; i < nodeRecordCount; i++) { Position_Connected_Edit point = aryPosition_Connected_Edit[i]; //如果之前没有被创建 if (point == null) { //如果是边界点 if (ReadNodeBOUNDARY(i) != 0) { string str = ReadNodeX_COORD(i).ToString() + ReadNodeY_COORD(i).ToString(); //如果没添加进hash表 if (!boundaryPointDictioinary.TryGetValue(str, out point)) { point = new Position_Connected_Edit((float)ReadNodeX_COORD(i), (float)ReadNodeY_COORD(i)); aryPosition_Connected_Edit[i] = point; boundaryPointDictioinary.Add(str, point); } } else { double x = ReadNodeX_COORD(i); double y = ReadNodeY_COORD(i); point = new Position_Connected_Edit((float)x, (float)y); aryPosition_Connected_Edit[i] = point; } } int beginId = ReadNodeBEGS_ID(i); int endId = ReadNodeENDS_ID(i); //if (endId < GetS_ATTRecordCount()) { for (int j = beginId; j < endId; j++) { int roadId = ReadAdjacentRoadID(j) - 1; int FNodeId = ReadRoadFNODE(roadId) - 1; int TNodeId = ReadRoadTNODE(roadId) - 1; int aNodeId = (FNodeId == i) ? TNodeId : FNodeId; bool isConnectToAdjacent = false; bool isAdjacentConnectToCurrentPoint = false; if (FNodeId == i) { if (ReadRoadDIRECTION(roadId) == 1) { isConnectToAdjacent = true; isAdjacentConnectToCurrentPoint = true; } else if (ReadRoadDIRECTION(roadId) == 2) { isConnectToAdjacent = true; } else if (ReadRoadDIRECTION(roadId) == 3) { isAdjacentConnectToCurrentPoint = true; } } else if (TNodeId == i) { if (ReadRoadDIRECTION(roadId) == 1) { isConnectToAdjacent = true; isAdjacentConnectToCurrentPoint = true; } else if (ReadRoadDIRECTION(roadId) == 2) { isAdjacentConnectToCurrentPoint = true; } else if (ReadRoadDIRECTION(roadId) == 3) { isConnectToAdjacent = true; } } //如果存在当前点到邻接点的路径 if (isConnectToAdjacent || isAdjacentConnectToCurrentPoint) { Position_Connected_Edit aNode = aryPosition_Connected_Edit[aNodeId]; //如果该节点未被创建 if (aNode == null) { //如果是边界点 if (ReadNodeBOUNDARY(aNodeId) != 0) { string str = ReadNodeX_COORD(aNodeId).ToString() + ReadNodeY_COORD(aNodeId).ToString(); //如果没添加进hash表 if (!boundaryPointDictioinary.TryGetValue(str, out aNode)) { aNode = new Position_Connected_Edit((float)ReadNodeX_COORD(aNodeId), (float)ReadNodeY_COORD(aNodeId)); aryPosition_Connected_Edit[aNodeId] = aNode; boundaryPointDictioinary.Add(str, aNode); } } else { aNode = new Position_Connected_Edit((float)ReadNodeX_COORD(aNodeId), (float)ReadNodeY_COORD(aNodeId)); aryPosition_Connected_Edit[aNodeId] = aNode; } } if (isConnectToAdjacent) { point.GetAdjacencyPositionSetEdit().AddAdjacency(aNode, (float)ReadRoadLENGTH(roadId)); } if (isAdjacentConnectToCurrentPoint) { aNode.GetAdjacencyPositionSetEdit().AddAdjacency(point, (float)ReadRoadLENGTH(roadId)); } } } } position_ConnectedList.Add(point); } CloseNodeDBF(); CloseRoadDBF(); CloseS_ATTDBF(); } } IPositionSet_Connected positionSet_Connected = new PositionSet_Connected(position_ConnectedList); return(positionSet_Connected); }
private void AddDoubleConnectionButton_Click(object sender, EventArgs e) { selectedNode = null; layersPaintedControl.state_PainterForm_MouseDown = LayersPaintedControl.State_PainterForm_MouseDown.onDaggle; ResetEventHandler(); 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.YellowGreen; layer.CenterPointCoordinate.Visible = true; layer.CenterPointCoordinate.CoordinateFont = new Font(layer.CenterPointCoordinate.CoordinateFont, FontStyle.Bold); if (currentLayer != null) { layers.Remove(currentLayer); } currentLayer = layer; layers.Add(layer); MouseLBottonCheckRealPosition = delegate(IPosition position) { if (selectedNode == null) { selectedNode = nearestPoint; positionSetEdit_ImplementByICollectionTemplate.AddPosition(selectedNode); } else { if (selectedNode != nearestPoint) { float x1 = selectedNode.GetX(), y1 = selectedNode.GetY(), x2 = nearestPoint.GetX(), y2 = nearestPoint.GetY(); float distance = (float)Math.Sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); if (selectedNode is IPosition_Connected_Edit) { ((IPosition_Connected_Edit)selectedNode).GetAdjacencyPositionSetEdit().AddAdjacency((IPosition_Connected)nearestPoint, distance); } else { throw new Exception(error_connection); } if (nearestPoint is IPosition_Connected_Edit) { ((IPosition_Connected_Edit)nearestPoint).GetAdjacencyPositionSetEdit().AddAdjacency((IPosition_Connected)selectedNode, distance); } else { throw new Exception(error_connection); } positionSetEdit_ImplementByICollectionTemplate.RemovePosition(selectedNode); selectedNode = null; } } selectedPositionSetLayer.SpringLayerRepresentationChangedEvent(selectedPositionSetLayer); layersPaintedControl.Invalidate(); }; }
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); }
private void AddNodeButton_Click(object sender, EventArgs e) { layersPaintedControl.state_PainterForm_MouseDown = LayersPaintedControl.State_PainterForm_MouseDown.Other; IPosition currentPoint = new Position_Connected_Edit(0, 0); PositionSetEdit_ImplementByICollectionTemplate positionSetEdit_ImplementByICollectionTemplate = new PositionSetEdit_ImplementByICollectionTemplate(); positionSetEdit_ImplementByICollectionTemplate.AddPosition(currentPoint); Layer_PositionSet_Point layer = new Layer_PositionSet_Point(positionSetEdit_ImplementByICollectionTemplate); MouseMovedRealPosition = delegate(IPosition position) { positionSetEdit_ImplementByICollectionTemplate.RemovePosition(currentPoint); currentPoint = position; positionSetEdit_ImplementByICollectionTemplate.AddPosition(currentPoint); layer.SpringLayerRepresentationChangedEvent(layer); layersPaintedControl.Invalidate(); }; layer.VisibleInOptDlg = false; layer.Active = true; layer.Name = "Edited Figure"; layer.Point.IsDrawPointBorder = true; layer.Point.PointColor = Color.Red; layer.Point.PointRadius = 3; layer.PointCoordinate.CoordinateFont = new Font(layer.PointCoordinate.CoordinateFont, FontStyle.Bold); layer.PointCoordinate.Visible = true; if (currentLayer != null) { layers.Remove(currentLayer); } currentLayer = layer; layers.Add(layer); MouseLBottonCheckRealPosition = delegate(IPosition position) { //((IPositionSetEdit)selectedPositionSetEdit).AddPosition(position); if (selectedPositionSetEdit is IPositionSet_ConnectedEdit && position is IPosition_Connected) { ((IPositionSet_ConnectedEdit)selectedPositionSetEdit).AddPosition_Connected((IPosition_Connected)position); } else if (selectedPositionSetEdit is IPositionSetEdit) { ((IPositionSetEdit)selectedPositionSetEdit).AddPosition(position); } else { throw new Exception(error_position); } selectedPositionSetLayer.SpringLayerRepresentationChangedEvent(selectedPositionSetLayer); if (m2m_NN.CanInsert(position)) { m2m_NN.Insert(position); } else { m2m_NN.PreProcess(selectedPositionSetEdit); selectedPositionSetLayer.SpringLayerMaxRectChangedEvent(); } layersPaintedControl.Invalidate(); }; }
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(); } }