📄 doc.cs
字号:
if(fromPoint.X!=0&&toPoint.X!=0)
{
Graphics g=this.CreateGraphics();
g.DrawLine(new Pen(Color.Blue,1),fromPoint,toPoint);
}
//this.Cursor=Cursors.Cross;*/
//Invalidate();
//CurrentLine = new Line();
//CurrenLine
// this.Refresh();
#endregion
private void Doc_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
#region 画图代码
//foreach (BNode1 node in myNodeArray)
//{
// if (node.IsInNode(new Point(e.X, e.Y)))
// {
// node.BackColor = Color.DarkSeaGreen;
// }
// else
// {
// node.BackColor = tempColor;
// }
//}
if (this.Cursor == Cursors.SizeAll && e.Button == MouseButtons.Left)
{
myNodeArray.AddNewNode(e.X, e.Y);
this.Cursor = Cursors.Arrow;
}
if (this.Cursor == Cursors.Cross)
{
foreach (BNode1 node in myNodeArray)
{
if (node.IsInNode(new Point(e.X, e.Y)))
{
from = node.from;
CurrentLine = new Line();
CurrentLine.StartPoint = from;
CurrentLine.sNode = node.Text;
node.OutDegree++;
}
}
}
Invalidate();
foreach (Line l in Lines)
{
if (((l.EndPoint.X > l.StartPoint.X && l.StartPoint.X < e.X && e.X < l.EndPoint.X) || (l.StartPoint.X > l.EndPoint.X && l.EndPoint.X < e.X && e.X < l.StartPoint.X)) && (l.yPositon(e.X) - e.Y) > -5 && (l.yPositon(e.X) - e.Y) < 5)
{
l.PenWidth = 5;
}
else
{
l.PenWidth = 1;
}
}
#endregion
}
private void Doc_MouseEnter(object sender, System.EventArgs e)
{
#region 注释
//Point MouseLocation=Control.MousePosition;
//MessageBox.Show(MouseLocation.X.ToString());
//foreach(BNode1 node in myNodeArray)
//{
//if(node.Left <= MouseLocation.X &&MouseLocation.X<= (node.Left+node.Width)&&node.Top <= MouseLocation.Y&& MouseLocation.Y<= (node.Top+node.Height))
// MessageBox.Show(node.from.X.ToString());
//}
//}
#endregion
}
private void Doc_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
#region 注释
//int i=0;
//if(e.KeyCode==Keys.A)
//{
//i=3;
//MessageBox.Show(i.ToString());
//}
// {
// foreach(BNode1 node in myNodeArray)
// {
// MessageBox.Show(node.from.X.ToString());
// }
// }
#endregion
}
private void Doc_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
#region 注释
//int i=0;
//if(e.KeyChar==(char)61)
//{
//i=3;
//MessageBox.Show(i.ToString());
//}
#endregion
}
#region 注释
/* private void Doc_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
//Graphics g=this.CreateGraphics();
foreach(Line l in Lines)
l.DrawLine(e.Graphics);
//this.Refresh();
//Invalidate();
//Graphics g=this.CreateGraphics();
///
//for(int i=0;i<myNodeArray.Count;i++)
// for(int j=i+1;j<myNodeArray.Count;j++)
// {
// g.DrawLine(new Pen(Color.Blue,1),myNodeArray[i].from,myNodeArray[j].to);
//Invalidate();
//this.Refresh();
// }
//foreach(BNode1 node in myNodeArray)
//{
//if(node.ClientRectangle.Contains(new Point(e.ClipRectangle.X,e.ClipRectangle.Y)))
// MessageBox.Show("dfdF");
///else
//{
//}
}*/
#endregion
protected override void OnPaint(PaintEventArgs pe)
{
foreach(Line l in Lines)
l.DrawLine(this);
base.OnPaint(pe);
}
private void Doc_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{ // originto=to;
#region 画图的代码
if (this.Cursor == Cursors.Cross)
{
foreach (BNode1 node in myNodeArray)
{
if (node.IsInNode(new Point(e.X, e.Y)))
{
to = node.to;
CurrentLine.EndPoint = to;
CurrentLine.dNode = node.Text;
Graphics g = this.CreateGraphics();
CurrentLine.DrawLine(this);
Lines.Add(CurrentLine);
node.InDegree++;
}
}
if (from != originfrom || to != originto)
{
Graphics g = this.CreateGraphics();
}
else
{
MessageBox.Show("the edge is already exist");
}
this.Cursor = Cursors.Arrow;
}
#endregion
}
//这是表示画一条边的时候鼠标起来的地点
public new ArrayList Parent(string assessNode)
{
ArrayList parent=new ArrayList();
foreach(Line l in Lines)
{
if(l.dNode==assessNode)
{
parent.Add(l.sNode);
}
}
return parent;
}
public int AssessNumRows(ArrayList assessParent)
{
int numRows=1;
for(int i=0;i<assessParent.Count;i++)
{
foreach(BNode1 node in myNodeArray)
if(assessParent[i].ToString()==node.name)
numRows=numRows*node.State.Count;
}
return numRows;
}
public ArrayList parentNodeRange(ArrayList assessParent)
{
ArrayList m_parentNodeRange=new ArrayList();
for(int i=0;i<assessParent.Count;i++)
{
foreach(BNode1 node in myNodeArray)
if(assessParent[i].ToString()==node.name)
m_parentNodeRange.Add(node.Range);
}
return m_parentNodeRange;
}//assessParent代表什么意思?range又是什么意思?
//public string[,] parentNodeState(ArrayList assessParent)
#region 图的邻接矩阵
public int[] minDegree()
{
const int MaxInt=100;
int indWidth=0;
int size=myNodeArray.Count;
int[] order=new int[size];
int[] index=new int[size];
//temporary array for keeping current degree
int[] deg=new int[size];
for(int i=0;i<size;i++)
deg[i]=myNodeArray[i].Degree;
// .... how to add edges without changing the graph?
// well, let's just have a temporary adjacency matrix
bool[][] adjMatrix=new bool[size][];
for(int i=0;i<size;i++)
adjMatrix[i]=new bool[size];
//initial
for(int i=0;i<size;i++)
for(int j=0;j<size;j++)
adjMatrix[i][j]=false;
//node's truth connection states
foreach(Line l in Lines)
{
int lform=0;
int lto=0;
foreach(BNode1 node in myNodeArray)
{
if(l.sNode==node.name)
lform=node.ID;
if(l.dNode==node.name)
lto=node.ID;
}
adjMatrix[lform-1][lto-1]=true;
adjMatrix[lto-1][lform-1]=true;
//这表示形成一个对称矩阵,但是以后利用此矩阵的时候就会有麻烦。可以屏蔽此句!
}
// Put nodes in the ordering
int next=size-1;// starting index in the ordering 起始位置为0
while(next>=0)
{
int minDeg=MaxInt;
int minNode=-1;
//select node with minimum degree
for(int i=0;i<size;i++)
if(deg[i]<minDeg)
{
minDeg=deg[i];
minNode=i;
}
//put node next in the ordering
order[next]=minNode;
index[minNode]=next;
//update induced width
if(deg[minNode]>indWidth)
indWidth=deg[minNode];
// do not ever select this node again
deg[minNode]=MaxInt;
// connect parents using adjMatrix
for ( int i = 0; i<size ; i++ )
if ( adjMatrix[minNode][i] )
for ( int j = i+1; j < size; j++ )
if (adjMatrix[minNode][j])
// connect i to j
if ( ! adjMatrix[i][j] )
{
deg[i]++;
deg[j]++;
adjMatrix[i][j] = true;
adjMatrix[j][i] = true;
}
// now delete node maxNode from the graph (from adjMatrix)
for (int i = 0; i < size ; i++ )
if ( adjMatrix[minNode][i] )
{
adjMatrix[minNode][i] = false;
adjMatrix[i][minNode] = false;
deg[i]--;
}
next--;
}
for(int i=0;i<size;i++)
MessageBox.Show(myNodeArray[order[i]].name.ToString());
return order;
}//没明白是干什么的?
#endregion
private void toolStripButton1_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.SizeAll;
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.Cross;
originfrom = this.from;
originto = this.to;
}
private void toolStripButton3_Click(object sender, EventArgs e)
{
//MessageBox.Show(this.AutoScaleBaseSize.Width.ToString());
//this.AutoScaleBaseSize.Width=12;
SizeF sf=new SizeF(2.0f,2.0f);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -