bool isOver; //指定状態 /**********************↑ 描画用変数 ↑**********************/ /********************↓ コンストラクタ ↓********************/ /// <summary> /// /// </summary> public EdgeView() { vertex1 = new VertexView(); vertex2 = new VertexView(); Pen = new Pen(Color.Black, 3); isSelect = false; isOver = false; }
/// <summary> /// 辺の両端の頂点を指定して初期化します。 /// </summary> /// <param name="vtx1">第1端点</param> /// <param name="vtx2">第2端点</param> public EdgeView(VertexView vtx1, VertexView vtx2) { vertex1 = vtx1; vertex2 = vtx2; vertex1.AddNeighbor(vertex2); vertex2.AddNeighbor(vertex1); Pen = new Pen(Color.Black, 3); isSelect = false; isOver = false; }
/********************↑ コンストラクタ ↑********************/ /***********************↓ 基本処理 ↓***********************/ /// <summary> /// オブジェクトを複製します。 /// </summary> public object Clone() { VertexView vtx = new VertexView(id); vtx.SetColor(this.color); vtx.SetPosition(this.positionX, this.positionY); return vtx; }
/// <summary> /// Edge の頂点1つの座標を Vertex インスタンスで指定して設定します。 /// </summary> /// <param name="index">頂点番号(VERTEX_FIRST or VERTEX_SECOND)</param> /// <param name="vtx">設定したい Vertex</param> public void SetEdgeVertex(int index, VertexView vtx) { if (index == VERTEX_FIRST) vertex1 = vtx; else if (index == VERTEX_SECOND) vertex2 = vtx; }
/// <summary> /// Graph データの読込処理をします。 /// </summary> /// <param name="reader">BinaryReader</param> public void Load(BinaryReader reader) { int vNum = reader.ReadInt32(); int eNum = reader.ReadInt32(); VertexView Vtemp; for (int i = 0; i < vNum; i++) { Vtemp = new VertexView(); Vtemp.Load(reader); vertex.Add(Vtemp); } VertexView temp1, temp2; for (int i = 0; i < eNum; i++) { temp1 = (VertexView)GetVertexIdOf(reader.ReadInt32()); temp2 = (VertexView)GetVertexIdOf(reader.ReadInt32()); edge.Add(new EdgeView(temp1, temp2)); } }
/// <summary> /// Graph に辺を追加します。 /// </summary> /// <param name="vtx1">第1頂点</param> /// <param name="vtx2">第2頂点</param> public void AddEdge(VertexView vtx1, VertexView vtx2) { edge.Add(new EdgeView(vtx1, vtx2)); }
/// <summary> /// 指定した頂点に接続する辺をすべて削除します。 /// </summary> /// <param name="vtx">頂点</param> private void RemoveEdgeOfVertex(VertexView vtx) { for (int i = 0; i < edge.Count; i++) if (edge[i].CheckContain(vtx)) RemoveEdgeAt(i--); }