} else if(!this.IsMouseOnAnyControl(e.X,e.Y)) { this.iMouseDownX=e.X; this.iMouseDownY=e.Y; this.iMouseSelectX=e.X; this.iMouseSelectY=e.Y; this.bNotSelectAnyOne=true; this.bSelectRectangleReday=false; this.arrLineSelectList.Clear(); this.arrNodeSelectList.Clear(); this.arrDrawStringSelectList.Clear(); this.arrLineNotSelectList.Clear(); this.arrNodeNotSelectList.Clear(); this.arrDrawStringNotSelectList.Clear(); this.lastEdit=null; this.AttriShow(); this.control.Invalidate(); return; } else { this.bNotSelectAnyOne=true; this.bSelectRectangleReday=false; this.arrLineSelectList.Clear(); this.arrNodeSelectList.Clear(); this.arrDrawStringSelectList.Clear(); this.arrLineNotSelectList.Clear(); this.arrNodeNotSelectList.Clear(); this.arrDrawStringNotSelectList.Clear(); this.lastEdit=null; this.AttriShow(); this.control.Invalidate(); return; } } this.nodeSelectNode=this.IsMouseOnNode(e.X,e.Y,this.arrNodeList);//鼠标是否在节点上 if(this.nodeSelectNode!=null && this.nodeTempNode==null)//当nodeSelectNode不为空,表示鼠标在该节点上 { if(e.Clicks==2) { this.control.testDrawLength.Text=this.nodeSelectNode.NodeText; if(this.control.testDrawLength.Width<50) { this.TBnodeContent.Width=50; } else { this.TBnodeContent.Width=this.control.testDrawLength.Width+3; } this.TBnodeContent.Font=this.nodeSelectNode.NodeTextFont; this.TBnodeContent.Location=new Point(this.nodeSelectNode.X+this.nodeSelectNode.Width/2-this.TBnodeContent.Width/2,this.nodeSelectNode.Y+this.nodeSelectNode.Height); this.TBnodeContent.Text=this.nodeSelectNode.NodeText; this.TBnodeContent.Visible=true; this.TBnodeContent.Focus(); this.TBnodeContent.SelectAll(); this.RefreshBackground(); return; } else { this.iMouseInitX=e.X; this.iMouseInitY=e.Y; this.iNodeX=this.nodeSelectNode.X; this.iNodeY=this.nodeSelectNode.Y; this.iNodeWidth=this.nodeSelectNode.Width; this.iNodeHeight=this.nodeSelectNode.Height; this.GetConnectNodeLine(this.nodeSelectNode); this.selectPoint.SetRectanglePoint(this.iNodeX,this.iNodeY,this.iNodeWidth,this.iNodeHeight); if(this.arrLineConnectNode.Count!=0)//该节点上是否有线连接到 0表示没有线连接 其他值表示有count条线连接 {//有线连接 让该节点成为活动节点 和 让所有连接的线成为活动线 this.ReDrawBitmapNodeMove(this.graDrawPanel,this.nodeSelectNode.NodeListIndex); } else {//没有线连接 让该节点成为活动节点 this.reDrawBitmap(this.graDrawPanel,0,this.nodeSelectNode.NodeListIndex); } this.bDrawConnectNodeLine=true; this.bDrawNode=true; this.RefreshBackground(); // this.control.Invalidate(); return; } } else if(this.nodeSelectNode==null) { this.drawStringSelectDS=this.IsMouseOnDrawString(e.X,e.Y,this.arrDrawStringList); if(this.drawStringSelectDS!=null)//移动画板 { if(e.Clicks==2) { this.TBDrawStringContent.Font=this.drawStringSelectDS.DSTextFont; this.TBDrawStringContent.SetBounds(this.drawStringSelectDS.X,this.drawStringSelectDS.Y,this.drawStringSelectDS.Width,this.drawStringSelectDS.Height); this.TBDrawStringContent.Text=this.strDSContent; this.TBDrawStringContent.Visible=true; this.TBDrawStringContent.Focus(); this.TBDrawStringContent.SelectAll(); return; } else { this.iMouseInitX=e.X; this.iMouseInitY=e.Y; this.iDrawStringX=this.drawStringSelectDS.X; this.iDrawStringY=this.drawStringSelectDS.Y; this.iDrawStringWidth=this.drawStringSelectDS.Width; this.iDrawStringHeight=this.drawStringSelectDS.Height; this.strDSContent=this.drawStringSelectDS.Content; this.selectPoint.SetRectanglePoint(this.iDrawStringX,this.iDrawStringY,this.iDrawStringWidth,this.iDrawStringHeight); this.reDrawBitmap(this.graDrawPanel,2,this.drawStringSelectDS.DrawStrListIndex); this.bDrawString=true; this.RefreshBackground(); // this.control.Invalidate(); return; } } else if(this.drawStringSelectDS==null && this.nodeSelectNode==null) { this.lineSelectLine=this.IsMouseOnLine(e.X,e.Y,this.arrLineList); if(this.lineSelectLine!=null) { if(e.Clicks==2) { this.control.testDrawLength.Text=this.lineSelectLine.Content; if(this.control.testDrawLength.Width<50) { this.TBLineContent.Width=50; } else { this.TBLineContent.Width=this.control.testDrawLength.Width+3; } this.TBLineContent.Font=this.lineSelectLine.LineTextFont; if(this.lineSelectLine.ObjectType==Line.DrawObjectType.DrawBeeLine) { this.TBLineContent.Location=new Point((this.lineSelectLine.X0+this.lineSelectLine.X1)/2-this.TBLineContent.Width/2,(this.lineSelectLine.Y0+this.lineSelectLine.Y1)/2); } else { this.TBLineContent.Location=new Point((this.lineSelectLine.X1+this.lineSelectLine.X2)/2-this.control.testDrawLength.Width/2,(this.lineSelectLine.Y1+this.lineSelectLine.Y2)/2); } this.TBLineContent.Text=this.lineSelectLine.Content; this.TBLineContent.Visible=true; if(this.lineSelectLine.Modality) { this.iLineFirstNodeX=this.lineSelectLine.GetLineNodeInfo(0); this.iLineFirstNodeY=this.lineSelectLine.GetLineNodeInfo(1); this.iLineSecondNodeX=this.lineSelectLine.GetLineNodeInfo(2); this.iLineSecondNodeY=this.lineSelectLine.GetLineNodeInfo(3); this.iLine3thNodeX=this.lineSelectLine.GetLineNodeInfo(4); this.iLine3thNodeY=this.lineSelectLine.GetLineNodeInfo(5); this.iLine4thNodeX=this.lineSelectLine.GetLineNodeInfo(6); this.iLine4thNodeY=this.lineSelectLine.GetLineNodeInfo(7); } this.TBLineContent.Focus(); this.TBLineContent.SelectAll(); this.RefreshBackground(); return; } this.iSelectNodeIndex=99; this.iMouseInitX=e.X; this.iMouseInitY=e.Y; this.iMouseDownX=e.X; this.iMouseDownY=e.Y; this.reDrawBitmap(this.graDrawPanel,1,this.lineSelectLine.LineListIndex); this.RefreshBackground(); if(this.lineSelectLine.ObjectType==Line.DrawObjectType.DrawBeeLine) { this.iLineFirstNodeX=this.lineSelectLine.GetLineNodeInfo(0); this.iLineFirstNodeY=this.lineSelectLine.GetLineNodeInfo(1); this.iLineSecondNodeX=this.lineSelectLine.GetLineNodeInfo(2); this.iLineSecondNodeY=this.lineSelectLine.GetLineNodeInfo(3); this.selectPoint.SetLinePoint(this.iLineFirstNodeX,this.iLineFirstNodeY,this.iLineSecondNodeX,this.iLineSecondNodeY); } else { this.iLineFirstNodeX=this.lineSelectLine.GetLineNodeInfo(0); this.iLineFirstNodeY=this.lineSelectLine.GetLineNodeInfo(1); this.iLineSecondNodeX=this.lineSelectLine.GetLineNodeInfo(2); this.iLineSecondNodeY=this.lineSelectLine.GetLineNodeInfo(3); this.iLine3thNodeX=this.lineSelectLine.GetLineNodeInfo(4); this.iLine3thNodeY=this.lineSelectLine.GetLineNodeInfo(5); this.iLine4thNodeX=this.lineSelectLine.GetLineNodeInfo(6); this.iLine4thNodeY=this.lineSelectLine.GetLineNodeInfo(7); this.selectPoint.SetFlodLinePoint(this.lineSelectLine); } this.bDrawLine=true; this.control.Invalidate(); return; } else { this.iMouseDownX=e.X; this.iMouseDownY=e.Y; this.iMouseSelectX=e.X; this.iMouseSelectY=e.Y; this.bNotSelectAnyOne=true; this.bSelectRectangleReday=false; this.arrLineSelectList.Clear(); this.arrNodeSelectList.Clear(); this.arrDrawStringSelectList.Clear(); this.arrLineNotSelectList.Clear(); this.arrNodeNotSelectList.Clear(); this.arrDrawStringNotSelectList.Clear(); this.lastEdit=null; this.AttriShow(); this.control.Invalidate(); } } } } } } /// <summary> /// 鼠标移动事件 /// </summary> /// <param name="e"></param> public void MouseMove(System.Windows.Forms.MouseEventArgs e) { if(e.Button==MouseButtons.Left) { if(this.bSelectAllReday && this.control.Cursor==Cursors.SizeAll) { int iMoveWidth=e.X-this.iMouseInitX; int iMoveHeight=e.Y-this.iMouseInitY; Line line; Node node; DrawString drawString; for(int i=0;i<this.arrLineList.Count;i++) { line=(Line)this.arrLineList[i]; line.X0+=iMoveWidth; line.Y0+=iMoveHeight; line.X1+=iMoveWidth; line.Y1+=iMoveHeight; if(line.ObjectType==Line.DrawObjectType.DrawFoldLine) { line.X2+=iMoveWidth; line.Y2+=iMoveHeight; line.X3+=iMoveWidth; line.Y3+=iMoveHeight; } } for(int i=0;i<this.arrNodeList.Count;i++) { node=(Node)this.arrNodeList[i]; node.X+=iMoveWidth; node.Y+=iMoveHeight; } for(int i=0;i<this.arrDrawStringList.Count;i++) { drawString=(DrawString)this.arrDrawStringList[i]; drawString.X+=iMoveWidth; drawString.Y+=iMoveHeight; } this.bSelectAll=true; this.control.Invalidate(); this.iMouseInitX=e.X; this.iMouseInitY=e.Y; return; } else if(this.lineThisLine!=null)//正在生成新线 { this.size=this.control.Size; if(0<e.X && e.X<this.size.Width && 0<e.Y && e.Y<this.size.Height) { if(this.lineThisLine.ObjectType==Line.DrawObjectType.DrawBeeLine) { this.iLineSecondNodeX=e.X; this.iLineSecondNodeY=e.Y; this.selectPoint.LinePoint[1].X=e.X; this.selectPoint.LinePoint[1].Y=e.Y; this.isLineRoundNode(e.X,e.Y,this.lineThisLine,1);//判断是否靠近某节点的连接点 } else { this.iLineSecondNodeX=(this.iLineFirstNodeX+e.X)/2; this.iLineSecondNodeY=this.iLineFirstNodeY; this.iLine3thNodeX=(this.iLineFirstNodeX+e.X)/2; this.iLine3thNodeY=e.Y; this.iLine4thNodeX=e.X; this.iLine4thNodeY=e.Y; this.selectPoint.LinePoint[1].X=(this.iLineFirstNodeX+e.X)/2; this.selectPoint.LinePoint[1].Y=this.iLineFirstNodeY; this.selectPoint.LinePoint[2].X=(this.iLineFirstNodeX+e.X)/2; this.selectPoint.LinePoint[2].Y=e.Y; this.selectPoint.LinePoint[3].X=e.X; this.selectPoint.LinePoint[3].Y=e.Y; this.isLineRoundNode(e.X,e.Y,this.lineThisLine,3);//判断是否靠近某节点的连接点 } this.bDrawLine=true; this.control.Invalidate(); } return; } else if(this.nodeThisNode!=null)//正在生成新节点 { this.size=this.control.Size; if(e.X<=this.iTempNodeX) { this.iNodeX=e.X; this.iNodeWidth=this.iTempNodeX-e.X; } else { this.iNodeX=this.iTempNodeX; this.iNodeWidth=e.X-this.iTempNodeX; } if(e.Y<=this.iTempNodeY) { this.iNodeY=e.Y; this.iNodeHeight=this.iTempNodeY-e.Y; } else { this.iNodeY=this.iTempNodeY; this.iNodeHeight=e.Y-this.iTempNodeY; } this.selectPoint.SetRectanglePoint(this.iNodeX,this.iNodeY,this.iNodeWidth,this.iNodeHeight); this.bDrawNode=true; this.control.Invalidate(); return; } else if(this.drawStringThisDS!=null)//正在生成新写字板 { this.size=this.control.Size; if(0<e.X && e.X<this.size.Width && 0<e.Y && e.Y<this.size.Height) { if(e.X<=this.iTempDSX) { this.iDrawStringX=e.X; this.iDrawStringWidth=this.iTempDSX-e.X; } else { this.iDrawStringX=this.iTempDSX; this.iDrawStringWidth=e.X-this.iTempDSX; } if(e.Y<=this.iTempDSY) { this.iDrawStringY=e.Y; this.iDrawStringHeight=this.iTempDSY-e.Y; } else { this.iDrawStringY=this.iTempDSY; this.iDrawStringHeight=e.Y-this.iTempDSY; } this.selectPoint.SetRectanglePoint(this.iDrawStringX,this.iDrawStringY,this.iDrawStringWidth,this.iDrawStringHeight); this.bDrawString=true; this.control.Invalidate(); } return; } else if(this.lineSelectLine!=null && this.iSelectNodeIndex!=99 && this.TBLineContent.Visible==false)//正在编辑选中的线(变型)
public string GetControlInfo() { ArrayList arrNodeList = drawObject.NodeList; ArrayList arrLineList = drawObject.LineList; ArrayList arrStringList = drawObject.StringList; string controlXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"; controlXml += "<WorkFlow>\r\n"; controlXml += " <arrNodeList>\r\n"; for (int i = 0; i < arrNodeList.Count; i++) { Node node = (Node)arrNodeList[i]; controlXml += " <node nodeID='" + node.NodeListIndex + "' nodeType='" + (int)node.ObjectType + "'>\r\n" + " <nodeText><![CDATA[" + node.NodeText.Replace("<", "<") + "]]></nodeText>\r\n" + " <nodeFontName>" + node.NodeTextFont.Name + "</nodeFontName>\r\n" + " <nodeFontSize>" + node.TextSize + "</nodeFontSize>\r\n" + " <nodeTextColor>" + node.NodeTextColor.ToArgb() + "</nodeTextColor>\r\n" + " <nodeBorderColor>" + node.BorderColor.ToArgb() + "</nodeBorderColor>\r\n" + " <nodeFillColor>" + node.FillColor.ToArgb() + "</nodeFillColor>\r\n" + " <nodeHeight>" + node.Height + "</nodeHeight>\r\n" + " <nodeWidth>" + node.Width + "</nodeWidth>\r\n" + " <nodeX>" + node.X + "</nodeX>\r\n" + " <nodeY>" + node.Y + "</nodeY>\r\n" + " <nodeInCount>" + node.ConnectInCount + "</nodeInCount>\r\n" + " <nodeOutCount>" + node.ConnectOutCount + "</nodeOutCount>\r\n" + " <nodeInFlowTime>" + node.InFolwTime.ToString() + "</nodeInFlowTime>\r\n" + " <nodeOutFlowTime>" + node.OutFlowTime.ToString() + "</nodeOutFlowTime>\r\n" + " <nodeFunction><![CDATA[" + node.Function.Replace("<", "<") + "]]></nodeFunction>\r\n" + " <nodeOperationRole><![CDATA[" + node.OperationRole.Replace("<", "<") + "]]></nodeOperationRole>\r\n" + " <nodeFunctionInfo><![CDATA[" + node.FunctionInfo.Replace("<", "<") + "]]></nodeFunctionInfo>\r\n" + " <nodeInfo><![CDATA[" + node.Info.Replace("<", "<") + "]]></nodeInfo>\r\n" + " </node>\r\n"; } controlXml += " </arrNodeList>\r\n <arrLineList>"; string firstIndex = ""; string secondIndex; for (int i = 0; i < arrLineList.Count; i++) { Line line = (Line)arrLineList[i]; if (line.FirstNode != null) { firstIndex = Convert.ToString(line.FirstNode.NodeListIndex); } else { firstIndex = "null"; } if (line.SecondNode != null) { secondIndex = Convert.ToString(line.SecondNode.NodeListIndex); } else { secondIndex = "null"; } if (line.LineNodeCount == 4) { controlXml += " <line lineID='" + line.LineListIndex + "' lineType='" + (int)line.ObjectType + "'>\r\n" + " <X0>" + line.X0 + "</X0>\r\n" + " <Y0>" + line.Y0 + "</Y0>\r\n" + " <X1>" + line.X1 + "</X1>\r\n" + " <Y1>" + line.Y1 + "</Y1>\r\n"; } else if (line.LineNodeCount == 8) { controlXml += " <line lineID='" + line.LineListIndex + "' lineType='" + (int)line.ObjectType + "'>\r\n" + " <X0>" + line.X0 + "</X0>\r\n" + " <Y0>" + line.Y0 + "</Y0>\r\n" + " <X1>" + line.X1 + "</X1>\r\n" + " <Y1>" + line.Y1 + "</Y1>\r\n" + " <X2>" + line.X2 + "</X2>\r\n" + " <Y2>" + line.Y2 + "</Y2>\r\n" + " <X3>" + line.X3 + "</X3>\r\n" + " <Y3>" + line.Y3 + "</Y3>\r\n"; } controlXml += " <lineNodeCount>" + line.LineNodeCount + "</lineNodeCount>\r\n" + " <lineFirstNode>" + firstIndex + "</lineFirstNode>\r\n" + " <lineSecondNode>" + secondIndex + "</lineSecondNode>\r\n" + " <lineFirstNodeIndex>" + line.FirNodeInterfaceIndex + "</lineFirstNodeIndex>\r\n" + " <lineSecondNodeIndex>" + line.SecNodeInterfaceIndex + "</lineSecondNodeIndex>\r\n" + " <lineSize>" + line.LineSize + "</lineSize>\r\n" + " <lineColor>" + line.LineColor.ToArgb() + "</lineColor>\r\n" + " <lineText><![CDATA[" + line.Content + "]]></lineText>\r\n" + " </line>\r\n"; } controlXml += " </arrLineList>\r\n <arrStringList>"; string contentTemp = ""; for (int i = 0; i < arrStringList.Count; i++) { DrawString ds = (DrawString)arrStringList[i]; contentTemp = "<![CDATA[" + ds.Content.Replace("<", "<") + "]]>\r\n"; controlXml += " <textString textID='" + ds.DrawStrListIndex + "'>\r\n" + " <textContent>" + contentTemp + "</textContent>\r\n" + " <textX>" + ds.X + "</textX>\r\n" + " <textY>" + ds.Y + "</textY>\r\n" + " <textHeight>" + ds.Height + "</textHeight>\r\n" + " <textWidth>" + ds.Width + "</textWidth>\r\n" + " <textColor>" + ds.DSTextColor.ToArgb() + "</textColor>\r\n" + " <textFontName>" + ds.DSTextFont.Name + "</textFontName>\r\n" + " <textFontSize>" + ds.DSTextFont.Size + "</textFontSize>\r\n" + " </textString>\r\n"; } controlXml += " </arrStringList>\r\n"; controlXml += "</WorkFlow>"; return(controlXml); }
/// <summary> /// 区域选择的元素归纳 /// </summary> /// <param name="x">区域的开始横坐标</param> /// <param name="y">区域的开始纵坐标</param> /// <param name="width">区域的宽度</param> /// <param name="height">区域的长度</param> public void RegionSelect(int x,int y,int width,int height) { this.arrLineSelectList.Clear(); this.arrNodeSelectList.Clear(); this.arrDrawStringSelectList.Clear(); this.arrLineNotSelectList.Clear(); this.arrNodeNotSelectList.Clear(); this.arrDrawStringNotSelectList.Clear(); Line line; Node node; DrawString drawString; for(int i=0;i<this.arrLineList.Count;i++) { line=(Line)this.arrLineList[i]; if(((x<line.X0 && line.X0<x+width)&&(y<line.Y0 && line.Y0<y+height))||((x<line.X1 && line.X1<x+width)&&(y<line.Y1 && line.Y1<y+height))) { this.arrLineSelectList.Add(line); } else { this.arrLineNotSelectList.Add(line); } } for(int i=0;i<this.arrNodeList.Count;i++) { node=(Node)this.arrNodeList[i]; if(((x<node.X && node.X<x+width)&&(y<node.Y && node.Y<y+height))||((x<node.X+node.Width && node.X+node.Width<x+width)&&(y<node.Y && node.Y<y+height))||((x<node.X && node.X<x+width)&&(y<node.Y+node.Height && node.Y+node.Height<y+height))||((x<node.X+node.Width && node.X+node.Width<x+width)&&(y<node.Y+node.Height&& node.Y+node.Height<y+height))) { this.arrNodeSelectList.Add(node); } else { this.arrNodeNotSelectList.Add(node); } } for(int i=0;i<this.arrDrawStringList.Count;i++) { drawString=(DrawString)this.arrDrawStringList[i]; if(((x<drawString.X && drawString.X<x+width)&&(y<drawString.Y && drawString.Y<y+height))||((x<drawString.X+drawString.Width && drawString.X+drawString.Width<x+width)&&(y<drawString.Y && drawString.Y<y+height))||((x<drawString.X && drawString.X<x+width)&&(y<drawString.Y+drawString.Height && drawString.Y+drawString.Height<y+height))||((x<drawString.X+drawString.Width && drawString.X+drawString.Width<x+width)&&(y<drawString.Y+drawString.Height&& drawString.Y+drawString.Height<y+height))) { this.arrDrawStringSelectList.Add(drawString); } else { this.arrDrawStringNotSelectList.Add(drawString); } } } /// <summary> /// 全部选择 /// </summary> public void SelectAll() { if(this.lineSelectLine!=null || this.lineThisLine!=null || this.nodeSelectNode!=null || this.nodeThisNode!=null || this.drawStringThisDS!=null || this.drawStringSelectDS!=null) { return; } if(this.TBDrawStringContent!=null || this.TBLineContent!=null || this.TBnodeContent !=null) { this.InputContentEnter(); } this.bSelectAll=true; this.lastEdit=null; this.AttriShow(); this.control.Invalidate(); } #endregion #region 删除元素 /// <summary> /// 删除所有元素 /// </summary> public void DeleteAll() { if(this.lineThisLine!=null || this.nodeThisNode!=null || this.drawStringThisDS!=null || this.lineSelectLine!=null || this.nodeSelectNode!=null || this.drawStringSelectDS!=null || this.lineTempLine!=null || this.nodeTempNode!=null || this.TBDrawStringContent.Visible!=false || this.TBnodeContent.Visible!=false) { return; } this.arrLineList.Clear(); this.arrNodeList.Clear(); this.arrDrawStringList.Clear(); this.arrLineSelectList.Clear(); this.arrNodeSelectList.Clear(); this.arrDrawStringSelectList.Clear(); this.arrLineNotSelectList.Clear(); this.arrNodeNotSelectList.Clear(); this.arrDrawStringNotSelectList.Clear(); this.bSelectAllReday=false; this.bStartFlag=false; this.bEndFlag=false; this.i_GeneralCount=0; this.lastEdit=null; this.AttriShow(); ReflashNodeIn_OutNodeID(); GetTableList(); this.reDrawBitmap(this.graDrawPanel,10,10); this.RefreshBackground(); this.control.Invalidate(); GC.Collect(); } /// <summary> /// 删除区域选择的元素 /// </summary> public void DeleteSelectRegion() { Line line; Node node; DrawString drawString; for(int i=0;i<this.arrLineSelectList.Count;i++) { line=((Line)this.arrLineSelectList[i]); this.arrLineList.Remove(line); this.FlashArrayList(0); } for(int i=0;i<this.arrNodeSelectList.Count;i++) { node=(Node)this.arrNodeSelectList[i]; if(node.ObjectType==Node.DrawObjectType.DrawNodeBegin) { this.bStartFlag=false; } else if(node.ObjectType==Node.DrawObjectType.DrawNodeEnd) { this.bEndFlag=false; } else if(node.ObjectType==Node.DrawObjectType.DrawNodeGeneral) { this.i_GeneralCount--; } this.DelLineNode(node); this.arrNodeList.Remove(node); this.FlashArrayList(1); } for(int i=0;i<this.arrDrawStringSelectList.Count;i++) { drawString=(DrawString)this.arrDrawStringSelectList[i]; this.arrDrawStringList.Remove(drawString); this.FlashArrayList(2); } this.arrLineSelectList.Clear(); this.arrNodeSelectList.Clear(); this.arrDrawStringSelectList.Clear(); this.arrLineNotSelectList.Clear(); this.arrNodeNotSelectList.Clear(); this.arrDrawStringNotSelectList.Clear(); this.lastEdit=null; this.AttriShow(); ReflashNodeIn_OutNodeID(); GetTableList(); this.reDrawBitmap(this.graDrawPanel,10,10); this.RefreshBackground(); this.control.Invalidate(); } /// <summary> /// 删除选定的元素 /// </summary> public void DeleteSelectElement()//删除选中的元素 { if(this.lineThisLine!=null || this.nodeThisNode!=null || this.drawStringThisDS!=null || this.lineSelectLine!=null || this.nodeSelectNode!=null || this.drawStringSelectDS!=null || this.lineTempLine!=null || this.nodeTempNode!=null || this.drawStringTempDS!=null) { return; } if(this.TBDrawStringContent.Visible==true) { this.TBDrawStringContent.Text=""; return; } else if(this.TBLineContent.Visible==true) { this.TBLineContent.Text=""; return; } else if(this.TBnodeContent.Visible==true) { this.TBnodeContent.Text=""; return; } Object objectEle=this.lastEdit; if(this.bSelectAllReday) { this.DeleteAll(); } else if(this.bSelectRectangleReday) { this.DeleteSelectRegion(); } else { if(objectEle is Line) { this.arrLineList.Remove((Line)objectEle); this.FlashArrayList(0); ReflashNodeIn_OutNodeID(); GetTableList(); } else if(objectEle is Node) { if(this.TBnodeContent.Visible==true) { return; } this.arrNodeList.Remove((Node)objectEle); if(((Node)objectEle).ObjectType==Node.DrawObjectType.DrawNodeBegin) { this.bStartFlag=false; } else if(((Node)objectEle).ObjectType==Node.DrawObjectType.DrawNodeEnd) { this.bEndFlag=false; } else if(((Node)objectEle).ObjectType==Node.DrawObjectType.DrawNodeGeneral) { this.i_GeneralCount--; } this.FlashArrayList(1); this.DelLineNode((Node)objectEle); ReflashNodeIn_OutNodeID(); GetTableList(); } else if(objectEle is DrawString) { if(this.TBDrawStringContent.Visible==true) { return; } this.arrDrawStringList.Remove((DrawString)objectEle); this.FlashArrayList(2); } this.objPrepareDel=null; this.lastEdit=null; this.AttriShow(); this.reDrawBitmap(this.graDrawPanel,10,10); this.ReflashNodeIn_OutNodeID(); this.RefreshBackground(); this.control.Invalidate(); } } /// <summary> ///清除连接到某一节点上的线 的连接 /// </summary> /// <param name="node">节点</param> public void DelLineNode(Node node) { Line line; for(int i=0;i<this.arrLineList.Count;i++) { line=(Line)this.arrLineList[i]; if(line.FirstNode==node) { line.FirstNode.ConnectOutCount--; line.FirstNode=null; line.FirNodeInterfaceIndex=9; } if(line.SecondNode==node) { line.SecondNode.ConnectInCount--; line.SecondNode=null; line.SecNodeInterfaceIndex=9; } } } #endregion #region 其他 /// <summary> /// 线,节点,写字板上的内容输入结束的处理 /// </summary> public void InputContentEnter() { if(this.TBDrawStringContent.Visible==true) { if(this.lastEdit is DrawString) { ((DrawString)this.lastEdit).Content=this.TBDrawStringContent.Text; this.TBDrawStringContent.Visible=false; this.reDrawBitmap(this.graDrawPanel,10,10); this.RefreshBackground(); // this.control.Invalidate(); } } else if(this.TBnodeContent.Visible==true) { if(this.lastEdit is Node) { ((Node)this.lastEdit).NodeText=this.TBnodeContent.Text; this.TBnodeContent.Visible=false; this.reDrawBitmap(this.graDrawPanel,10,10); this.RefreshBackground(); // this.control.Invalidate(); } } else if(this.TBLineContent.Visible==true) { if(this.lastEdit is Line) { ((Line)this.lastEdit).Content=this.TBLineContent.Text; this.TBLineContent.Visible=false; this.reDrawBitmap(this.graDrawPanel,10,10); this.RefreshBackground(); } } } /// <summary> /// 区域选择的时候只选中一个元素 /// </summary> public void ifSelectAngle() { if(this.arrLineSelectList.Count+this.arrNodeSelectList.Count+this.arrDrawStringSelectList.Count==1) { if(this.arrLineSelectList.Count==1) { this.lastEdit=(Line)this.arrLineSelectList[0]; this.AttriShow(); // this.lineSelectLine=(Line)this.arrLineSelectList[0]; return; } else if(this.arrNodeSelectList.Count==1) { this.lastEdit=(Node)this.arrNodeSelectList[0]; this.AttriShow(); // this.nodeSelectNode=(Node)this.arrNodeSelectList[0]; return; } else if(this.arrDrawStringSelectList.Count==1) { this.lastEdit=(DrawString)this.arrDrawStringSelectList[0]; this.AttriShow(); // this.drawStringSelectDS=(DrawString)this.arrDrawStringSelectList[0]; return; } } else { this.lastEdit=null; this.AttriShow(); } } /// <summary> /// 刷新所有节点内的流入流出节点的ID /// </summary> public void ReflashNodeIn_OutNodeID() { for(int i=0;i<this.arrNodeList.Count;i++) { Node node=(Node)this.arrNodeList[i]; node.InFlowNodeID.Clear(); node.OutFlowNodeID.Clear(); } for(int i=0;i<this.arrLineList.Count;i++) { Line line=(Line)this.arrLineList[i]; if(line.FirstNode!=null && line.SecondNode!=null) { line.FirstNode.OutFlowNodeID.Add(line.SecondNode.NodeListIndex); line.SecondNode.InFlowNodeID.Add(line.FirstNode.NodeListIndex); } } } /// <summary> /// 记录正在编辑的元素 /// </summary> public void MemThisObject() { if(this.lineThisLine!=null) { this.obj_SeriesDrawEle=this.lineThisLine; } else if(this.nodeThisNode!=null) { this.obj_SeriesDrawEle=this.nodeThisNode; } else if(this.drawStringThisDS!=null) { this.obj_SeriesDrawEle=this.drawStringThisDS; } } /// <summary> /// 清除编辑的元素 /// </summary> public void ClearThisObject() { this.obj_SeriesDrawEle=null; this.control.Cursor=Cursors.Default; } /// <summary> /// 显示鼠标的样式 /// </summary> public void ShowCursor() { if(this.obj_SeriesDrawEle!=null) { if(this.obj_SeriesDrawEle is Line) { if(((Line)this.obj_SeriesDrawEle).ObjectType==Line.DrawObjectType.DrawBeeLine) { this.control.Cursor=this.getTypeCursor.GetCursor(GetTypeCursor.DrawType.BeeLine); return; } else { this.control.Cursor=this.getTypeCursor.GetCursor(GetTypeCursor.DrawType.FoldLine); return; } } else if(this.obj_SeriesDrawEle is Node)
{ this.SetNodeCursor(((Node)this.obj_SeriesDrawEle).ObjectType); return; } else if(this.obj_SeriesDrawEle is DrawString) { this.control.Cursor=this.getTypeCursor.GetCursor(GetTypeCursor.DrawType.String); return; } return; } else if(this.lineThisLine!=null || this.nodeThisNode!=null || this.drawStringThisDS!=null) { if(this.lineThisLine!=null) { if(this.lineThisLine.ObjectType==Line.DrawObjectType.DrawBeeLine) { this.control.Cursor=this.getTypeCursor.GetCursor(GetTypeCursor.DrawType.BeeLine); return; } else { this.control.Cursor=this.getTypeCursor.GetCursor(GetTypeCursor.DrawType.FoldLine); return; } } else if(this.nodeThisNode!=null) { this.SetNodeCursor(this.nodeThisNode.ObjectType); return; } else if(this.drawStringThisDS!=null) { this.control.Cursor=this.getTypeCursor.GetCursor(GetTypeCursor.DrawType.String); return; } } this.control.Cursor=Cursors.Default; } /// <summary> /// 元素的完整性检查 /// </summary> public bool CheckIntegrity() { if(!this.bStartFlag) { MessageForm.Show("您没有创建开始节点.","DrawFlow"); return false; } else if(!this.bEndFlag) { MessageForm.Show("您没有创建结束节点.","DrawFlow"); return false; } for(int i=0;i<this.arrNodeList.Count;i++) { Node node=(Node)this.arrNodeList[i]; if(node.ObjectType==Node.DrawObjectType.DrawNodeBegin) { if(node.ConnectOutCount<1) { MessageForm.Show("开始结点未有后继结点.","DrawFlow"); return false; } } else if(node.ObjectType==Node.DrawObjectType.DrawNodeEnd) { if(node.ConnectInCount<1) { MessageForm.Show("结束结点未有前驱结点.","DrawFlow"); return false; } } else if(node.ObjectType==Node.DrawObjectType.DrawNodeGeneral) { if(node.ConnectInCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的任务结点未有前驱结点.","DrawFlow"); return false; } if(node.ConnectOutCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的任务结点未有后继结点.","DrawFlow"); return false; } } else if(node.ObjectType==Node.DrawObjectType.DrawSpecificallyOperation) { if(node.ConnectInCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的特定操作结点未有前驱结点.","DrawFlow"); return false; } } else if(node.ObjectType==Node.DrawObjectType.DrawGradation) { if(node.ConnectInCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的顺序结点未有前驱结点.","DrawFlow"); return false; } if(node.ConnectOutCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的顺序结点未有后继结点.","DrawFlow"); return false; } } else if(node.ObjectType==Node.DrawObjectType.DrawSynchronization) { if(node.ConnectInCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的同步结点未有前驱结点.","DrawFlow"); return false; } if(node.ConnectOutCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的同步结点未有后继结点.","DrawFlow"); return false; } } else if(node.ObjectType==Node.DrawObjectType.DrawAsunder) { if(node.ConnectInCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的分支结点未有前驱结点.","DrawFlow"); return false; } if(node.ConnectOutCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的分支结点未有后继结点.","DrawFlow"); return false; } } else if(node.ObjectType==Node.DrawObjectType.DrawConverge) { if(node.ConnectInCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的汇聚结点未有前驱结点.","DrawFlow"); return false; } if(node.ConnectOutCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的汇聚结点未有后继结点.","DrawFlow"); return false; } } else if(node.ObjectType==Node.DrawObjectType.DrawGather) { if(node.ConnectInCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的汇总连接结点未有前驱结点.","DrawFlow"); return false; } if(node.ConnectOutCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的汇总连接结点未有后继结点.","DrawFlow"); return false; } } else if(node.ObjectType==Node.DrawObjectType.DrawJudgement) { if(node.ConnectInCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的判断结点未有前驱结点.","DrawFlow"); return false; } if(node.ConnectOutCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的判断结点未有后继结点.","DrawFlow"); return false; } } else if(node.ObjectType==Node.DrawObjectType.DrawDataNode) { if(node.ConnectOutCount<1) { MessageForm.Show("结点ID为"+node.NodeListIndex+"的应用数据结点未有后继结点.","DrawFlow"); return false; } } } return true; } /// <summary> /// /// </summary> public void MinMoveElement(System.Windows.Forms.Keys key) { if(this.lastEdit is Line) { this.line_OperationTemp=(Line)this.lastEdit; switch(key) { case Keys.Up: { this.line_OperationTemp.Y0--; this.line_OperationTemp.Y1--; if(this.line_OperationTemp.ObjectType==Line.DrawObjectType.DrawFoldLine) { this.line_OperationTemp.Y2--; this.line_OperationTemp.Y3--; } break; } case Keys.Down: { this.line_OperationTemp.Y0++; this.line_OperationTemp.Y1++; if(this.line_OperationTemp.ObjectType==Line.DrawObjectType.DrawFoldLine) { this.line_OperationTemp.Y2++; this.line_OperationTemp.Y3++; } break; } case Keys.Right: { this.line_OperationTemp.X0++; this.line_OperationTemp.X1++; if(this.line_OperationTemp.ObjectType==Line.DrawObjectType.DrawFoldLine) { this.line_OperationTemp.X2++; this.line_OperationTemp.X3++; } break; } case Keys.Left: { this.line_OperationTemp.X0--; this.line_OperationTemp.X1--; if(this.line_OperationTemp.ObjectType==Line.DrawObjectType.DrawFoldLine) { this.line_OperationTemp.X2--; this.line_OperationTemp.X3--; } break; } } this.MinLineMoveRoundNode(this.line_OperationTemp,0); if(this.line_OperationTemp.ObjectType==Line.DrawObjectType.DrawBeeLine) { this.MinLineMoveRoundNode(this.line_OperationTemp,1); } else { this.MinLineMoveRoundNode(this.line_OperationTemp,3); } this.reDrawBitmap(this.graDrawPanel,10,10); this.RefreshBackground(); } else if(this.lastEdit is Node) { this.node_OperationTemp=(Node)this.lastEdit; int iMoveWidth=0,iMoveHeight=0; switch(key) { case Keys.Up:this.node_OperationTemp.Y--;iMoveWidth=0;iMoveHeight=-1;break; case Keys.Down:this.node_OperationTemp.Y++;iMoveWidth=0;iMoveHeight=1;break; case Keys.Right:this.node_OperationTemp.X++;iMoveWidth=1;iMoveHeight=0;break; case Keys.Left:this.node_OperationTemp.X--;iMoveWidth=-1;iMoveHeight=0;break; } this.GetConnectNodeLine(this.node_OperationTemp); if(this.arrLineConnectNode.Count>0) { Line line; for(int i=0;i<this.arrLineConnectNode.Count;i++)//使连接到该节点的线也转变 { line=((Line)this.arrLineConnectNode[i]); if(line.FirstNode== this.node_OperationTemp) { if(line.ObjectType==Line.DrawObjectType.DrawBeeLine) { line.X0+=iMoveWidth; line.Y0+=iMoveHeight; } else { this.iNodeX=this.node_OperationTemp.X; this.iNodeY=this.node_OperationTemp.Y; this.iNodeWidth=this.node_OperationTemp.Width; this.iNodeHeight=this.node_OperationTemp.Height; this.MoveNodeChangeLine(line,0,this.node_OperationTemp,line.FirNodeInterfaceIndex); } } if(line.SecondNode==this.node_OperationTemp) { if(line.ObjectType==Line.DrawObjectType.DrawBeeLine) { line.X1+=iMoveWidth; line.Y1+=iMoveHeight; } else { this.iNodeX=this.node_OperationTemp.X; this.iNodeY=this.node_OperationTemp.Y; this.iNodeWidth=this.node_OperationTemp.Width; this.iNodeHeight=this.node_OperationTemp.Height; this.MoveNodeChangeLine(line,3,this.node_OperationTemp,line.SecNodeInterfaceIndex); } } } } this.reDrawBitmap(this.graDrawPanel,10,10); this.RefreshBackground(); } else if(this.lastEdit is DrawString) { this.ds_OperationTemp=(DrawString)this.lastEdit; switch(key) { case Keys.Up:this.ds_OperationTemp.Y--;break; case Keys.Down:this.ds_OperationTemp.Y++;break; case Keys.Right:this.ds_OperationTemp.X++;break; case Keys.Left:this.ds_OperationTemp.X--;break; } this.reDrawBitmap(this.graDrawPanel,10,10); this.RefreshBackground(); } } /// <summary> /// 检测是否可以绘制节点 /// </summary> public void CheckCanDraw() { if(this.control.isNodeLimit) { if(nodeThisNode.ObjectType==Node.DrawObjectType.DrawNodeBegin && this.bStartFlag) { this.nodeThisNode=null; MessageForm.Show("对不起,开始节点创建受限制。","DrawFlow"); return; } else if(nodeThisNode.ObjectType==Node.DrawObjectType.DrawNodeEnd && this.bEndFlag) { this.nodeThisNode=null; MessageForm.Show("对不起,结束节点创建受限制。","DrawFlow"); return; } else if(this.i_GeneralCount>=20 && nodeThisNode.ObjectType==Node.DrawObjectType.DrawNodeGeneral) { this.nodeThisNode=null; MessageForm.Show("对不起,您目前选择的节点限制为20个.","DrawFlow"); return; } } } /// <summary> /// 显示鼠标指针 /// </summary> public void CursorsDefault() { this.lineThisLine=null; this.lineSelectLine=null; this.nodeThisNode=null; this.nodeSelectNode=null; this.drawStringThisDS=null; this.drawStringSelectDS=null; this.control.Cursor=Cursors.Default; } #endregion #region 鼠标操作 /// <summary> /// 点击鼠标右键操作 /// </summary> /// <param name="e"></param> public void MouseDown_Right(System.Windows.Forms.MouseEventArgs e) { location.X=e.X; location.Y=e.Y; this.b_IsDownMouseRight=true; this.IsMouseOnAnyControl(e.X,e.Y); if(this.arrLineList.Count<=0 && this.arrNodeList.Count<=0 && this.arrDrawStringList.Count<=0) { this.control.menuItem1.Enabled=false; this.control.menuItem3.Enabled=false; } else { this.control.menuItem1.Enabled=true; this.control.menuItem3.Enabled=true; } } /// <summary> /// 鼠标按下事件 /// </summary> /// <param name="e"></param> public void MouseDown(System.Windows.Forms.MouseEventArgs e) { if(this.TBDrawStringContent.Visible==true) { if(this.lastEdit is DrawString) { ((DrawString)this.lastEdit).Content=this.TBDrawStringContent.Text; this.TBDrawStringContent.Visible=false; this.reDrawBitmap(this.graDrawPanel,10,10); this.RefreshBackground(); // this.control.Invalidate(); } } else if(this.TBnodeContent.Visible==true) { if(this.lastEdit is Node) { ((Node)this.lastEdit).NodeText=this.TBnodeContent.Text; this.TBnodeContent.Visible=false; this.reDrawBitmap(this.graDrawPanel,10,10); this.RefreshBackground(); // this.control.Invalidate(); } } else if(this.TBLineContent.Visible==true) { if(this.lastEdit is Line) { ((Line)this.lastEdit).Content=this.TBLineContent.Text; this.TBLineContent.Visible=false; this.reDrawBitmap(this.graDrawPanel,10,10); this.RefreshBackground(); } } if(e.Button==MouseButtons.Left) { if(this.obj_SeriesDrawEle!=null && (this.lineThisLine==null && this.nodeThisNode==null && this.drawStringThisDS==null)) { if(this.obj_SeriesDrawEle is Line) { this.lineThisLine=new Line(((Line)this.obj_SeriesDrawEle).ObjectType,this.arrLineList.Count); this.newLine=this.lineThisLine; } else if(this.obj_SeriesDrawEle is Node) { this.nodeThisNode=new Node(this.arrNodeList.Count,((Node)this.obj_SeriesDrawEle).ObjectType,getDefaultText(((Node)this.obj_SeriesDrawEle).ObjectType)); this.newNode=this.nodeThisNode; } else if(this.obj_SeriesDrawEle is DrawString) { this.drawStringThisDS=new DrawString(this.arrDrawStringList.Count); this.newDrawString=this.drawStringThisDS; } } else if(this.obj_SeriesDrawEle!=null && (this.lineThisLine!=null || this.nodeThisNode!=null || this.drawStringThisDS!=null)) { if(this.lineThisLine!=null) { this.obj_SeriesDrawEle=this.lineThisLine; } else if(this.nodeThisNode!=null) { this.CheckCanDraw(); this.obj_SeriesDrawEle=this.nodeThisNode; } else if(this.drawStringThisDS!=null) { this.obj_SeriesDrawEle=this.drawStringThisDS; } this.ShowCursor(); } if(this.bSelectAllReday)//是否已经全部选择 { if(this.IsMouseOnAnyControl(e.X,e.Y)) { this.control.Cursor=Cursors.SizeAll; this.iMouseInitX=e.X; this.iMouseInitY=e.Y; this.bSelectAll=true; this.DrawBackGround(); this.RefreshBackground(); this.bSelectRectangleReday=false; return; } } else if(this.lineThisLine!=null)//正在生成新线 ,当lineThisLine为null表示不在画线 { this.arrLineList.Add(this.newLine); this.newLine=null; this.iLineFirstNodeX=e.X; this.iLineFirstNodeY=e.Y; this.selectPoint.LinePoint[0].X=e.X; this.selectPoint.LinePoint[0].Y=e.Y; this.lineThisLine.addPoint(this.iLineFirstNodeX,this.iLineFirstNodeY); this.lineThisLine.LineNodeCount=2; return; } else if(this.nodeThisNode!=null)//正在生成新节点 ,当nodeThisNode为null表示不在画节点 { if(this.control.isNodeLimit) { if(nodeThisNode.ObjectType==Node.DrawObjectType.DrawNodeBegin && this.bStartFlag) { this.nodeThisNode=null; MessageForm.Show("对不起,开始节点创建受限制。","DrawFlow"); return; } else if(nodeThisNode.ObjectType==Node.DrawObjectType.DrawNodeEnd && this.bEndFlag) { this.nodeThisNode=null; MessageForm.Show("对不起,结束节点创建受限制。","DrawFlow"); return; } else if(this.i_GeneralCount>=20 && nodeThisNode.ObjectType==Node.DrawObjectType.DrawNodeGeneral) { this.nodeThisNode=null; MessageForm.Show("对不起,您目前选择的节点限制为20个.","DrawFlow"); return; } } this.arrNodeList.Add(this.newNode); this.newNode=null; this.iNodeX=e.X; this.iNodeY=e.Y; this.iTempNodeX=e.X; this.iTempNodeY=e.Y; this.nodeThisNode.X=this.iNodeX; this.nodeThisNode.Y=this.iNodeY; return; } else if(this.drawStringThisDS!=null)//生成新写字板 { this.arrDrawStringList.Add(this.newDrawString); this.newDrawString=null; this.iDrawStringX=e.X; this.iDrawStringY=e.Y; this.iTempDSX=e.X; this.iTempDSY=e.Y; this.drawStringThisDS.X=this.iDrawStringX; this.drawStringThisDS.Y=this.iDrawStringY; return; } else if(this.nodeTempNode!=null) { this.nodeSelectNode=this.nodeTempNode; this.nodeTempNode=null; this.iMouseInitX=e.X; this.iMouseInitY=e.Y; this.iNodeX=this.nodeSelectNode.X; this.iNodeY=this.nodeSelectNode.Y; this.iNodeWidth=this.nodeSelectNode.Width; this.iNodeHeight=this.nodeSelectNode.Height; this.GetConnectNodeLine(this.nodeSelectNode); this.selectPoint.SetRectanglePoint(this.iNodeX,this.iNodeY,this.iNodeWidth,this.iNodeHeight); if(this.arrLineConnectNode.Count!=0)//该节点上是否有线连接到 0表示没有线连接 其他值表示有count条线连接 {//有线连接 让该节点成为活动节点 和 让所有连接的线成为活动线 this.ReDrawBitmapNodeMove(this.graDrawPanel,this.nodeSelectNode.NodeListIndex); } else {//没有线连接 让该节点成为活动节点 this.reDrawBitmap(this.graDrawPanel,0,this.nodeSelectNode.NodeListIndex); } this.bDrawConnectNodeLine=true; this.bDrawNode=true; this.RefreshBackground(); // this.control.Invalidate(); return; } else if(this.drawStringTempDS!=null) { this.drawStringSelectDS=this.drawStringTempDS; this.drawStringTempDS=null; this.iMouseInitX=e.X; this.iMouseInitY=e.Y; this.iDrawStringX=this.drawStringSelectDS.X; this.iDrawStringY=this.drawStringSelectDS.Y; this.iDrawStringWidth=this.drawStringSelectDS.Width; this.iDrawStringHeight=this.drawStringSelectDS.Height; this.strDSContent=this.drawStringSelectDS.Content; this.selectPoint.SetRectanglePoint(this.iDrawStringX,this.iDrawStringY,this.iDrawStringWidth,this.iDrawStringHeight); this.reDrawBitmap(this.graDrawPanel,2,this.drawStringSelectDS.DrawStrListIndex); this.bDrawString=true; this.RefreshBackground(); // this.control.Invalidate(); return; } else if(this.lineTempLine!=null)//鼠标在某条的变化点上 { this.lineSelectLine=this.lineTempLine; this.iSelectNodeIndex=this.iTempNodeIndex; this.iLineFirstNodeX=this.lineSelectLine.GetLineNodeInfo(0); this.iLineFirstNodeY=this.lineSelectLine.GetLineNodeInfo(1); this.iLineSecondNodeX=this.lineSelectLine.GetLineNodeInfo(2); this.iLineSecondNodeY=this.lineSelectLine.GetLineNodeInfo(3); if(this.lineSelectLine.ObjectType==Line.DrawObjectType.DrawBeeLine) { this.selectPoint.SetLinePoint(this.iLineFirstNodeX,this.iLineFirstNodeY,this.iLineSecondNodeX,this.iLineSecondNodeY); } else { this.iLine3thNodeX=this.lineSelectLine.GetLineNodeInfo(4); this.iLine3thNodeY=this.lineSelectLine.GetLineNodeInfo(5); this.iLine4thNodeX=this.lineSelectLine.GetLineNodeInfo(6); this.iLine4thNodeY=this.lineSelectLine.GetLineNodeInfo(7); this.selectPoint.SetFlodLinePoint(this.lineSelectLine); } this.reDrawBitmap(this.graDrawPanel,1,this.lineSelectLine.LineListIndex); this.bDrawLine=true; this.RefreshBackground(); // this.control.Invalidate(); return; } else { if(this.bSelectRectangleReday) { if(this.IsMouseOnAnySelectControl(e.X,e.Y)) { this.control.Cursor=Cursors.SizeAll; this.iMouseInitX=e.X; this.iMouseInitY=e.Y; this.ReDrawNotSelect(this.graDrawPanel); this.bDrawSelectElement=true; // this.control.Invalidate(); this.RefreshBackground();
if((LinePointIndex==1 || LinePointIndex==3)) { return true; }
#endregion
// this.getTypeImage=((GetTypeImage)formatter.Deserialize(stream)); // stream.Close();
/// <summary> /// 从服务器的XML文件中,获取流程图数组 /// </summary> public void CreateArrDraw() { arrNodeList = new ArrayList(); arrLineList = new ArrayList(); arrStringList = new ArrayList(); XmlDocument doc = new XmlDocument(); doc.LoadXml(serverXml); //获取结点列表 XmlNodeList nodeChilds = doc.SelectNodes("//arrNodeList//node"); foreach (XmlNode node in nodeChilds) { XmlNodeList xnl = node.ChildNodes; int index = Convert.ToInt32(node.Attributes.Item(0).InnerText); int nodetype = Convert.ToInt32(node.Attributes.Item(1).InnerText); string nodetext = xnl.Item(0).InnerText; Node xmlnode = new Node(index, (Node.DrawObjectType)nodetype, nodetext); string fontname = xnl.Item(1).InnerText; int fontSize = Convert.ToInt32(xnl.Item(2).InnerText); xmlnode.NodeTextFont = new System.Drawing.Font(fontname, fontSize); xmlnode.TextSize = fontSize; xmlnode.NodeTextColor = System.Drawing.Color.FromArgb(int.Parse(xnl.Item(3).InnerText)); xmlnode.BorderColor = Color.FromArgb(int.Parse(xnl.Item(4).InnerText)); xmlnode.FillColor = Color.FromArgb(int.Parse(xnl.Item(5).InnerText)); xmlnode.Height = Convert.ToInt32(xnl.Item(6).InnerText); xmlnode.Width = Convert.ToInt32(xnl.Item(7).InnerText); xmlnode.X = Convert.ToInt32(xnl.Item(8).InnerText); xmlnode.Y = Convert.ToInt32(xnl.Item(9).InnerText); xmlnode.ConnectInCount = Convert.ToInt32(xnl.Item(10).InnerText); xmlnode.ConnectOutCount = Convert.ToInt32(xnl.Item(11).InnerText); xmlnode.InFolwTime = Convert.ToDateTime(xnl.Item(12).InnerText); xmlnode.OutFlowTime = Convert.ToDateTime(xnl.Item(13).InnerText); xmlnode.Function = xnl.Item(14).InnerText; xmlnode.OperationRole = xnl.Item(15).InnerText; xmlnode.FunctionInfo = xnl.Item(16).InnerText; xmlnode.Info = xnl.Item(17).InnerText; arrNodeList.Add(xmlnode); } //获取线列表 XmlNodeList lineChilds = doc.SelectNodes("//arrLineList//line"); foreach (XmlNode node in lineChilds) { XmlNodeList xnl = node.ChildNodes; int index = Convert.ToInt32(node.Attributes.Item(0).InnerText); int lineType = Convert.ToInt32(node.Attributes.Item(1).InnerText); Line line = new Line((Line.DrawObjectType)lineType, index); line.X0 = Convert.ToInt32(xnl.Item(0).InnerText); line.Y0 = Convert.ToInt32(xnl.Item(1).InnerText); line.X1 = Convert.ToInt32(xnl.Item(2).InnerText); line.Y1 = Convert.ToInt32(xnl.Item(3).InnerText); if (lineType == 1) { line.X2 = Convert.ToInt32(xnl.Item(4).InnerText); line.Y2 = Convert.ToInt32(xnl.Item(5).InnerText); line.X3 = Convert.ToInt32(xnl.Item(6).InnerText); line.Y3 = Convert.ToInt32(xnl.Item(7).InnerText); line.LineNodeCount = Convert.ToInt32(xnl.Item(8).InnerText); if (xnl.Item(9).InnerText == "null") { line.FirstNode = null; } else { int firstIndex = Convert.ToInt32(xnl.Item(9).InnerText); line.FirstNode = (Node)arrNodeList[firstIndex]; } if (xnl.Item(10).InnerText == "null") { line.SecondNode = null; } else { int secondIndex = Convert.ToInt32(xnl.Item(10).InnerText); line.SecondNode = (Node)arrNodeList[secondIndex]; } line.FirNodeInterfaceIndex = Convert.ToInt32(xnl.Item(11).InnerText); line.SecNodeInterfaceIndex = Convert.ToInt32(xnl.Item(12).InnerText); line.LineSize = Convert.ToInt32(xnl.Item(13).InnerText); line.LineColor = System.Drawing.Color.FromArgb(int.Parse(xnl.Item(14).InnerText)); line.Content = xnl.Item(15).InnerText; arrLineList.Add(line); } else if (lineType == 0) { line.LineNodeCount = Convert.ToInt32(xnl.Item(4).InnerText); if (xnl.Item(5).InnerText == "null") { line.FirstNode = null; } else { line.FirstNode = (Node)arrNodeList[Convert.ToInt32(xnl.Item(5).InnerText)]; } if (xnl.Item(6).InnerText == "null") { line.SecondNode = null; } else { line.SecondNode = (Node)arrNodeList[Convert.ToInt32(xnl.Item(6).InnerText)]; } line.FirNodeInterfaceIndex = Convert.ToInt32(xnl.Item(7).InnerText); line.SecNodeInterfaceIndex = Convert.ToInt32(xnl.Item(8).InnerText); line.LineSize = Convert.ToInt32(xnl.Item(9).InnerText); line.LineColor = System.Drawing.Color.FromArgb(int.Parse(xnl.Item(10).InnerText)); line.Content = xnl.Item(11).InnerText; arrLineList.Add(line); } } //获取说明文字 XmlNodeList textChilds = doc.SelectNodes("//arrStringList//textString"); foreach (XmlNode node in textChilds) { XmlNodeList xnl = node.ChildNodes; int index = Convert.ToInt32(node.Attributes.Item(0).InnerText); DrawString ds = new DrawString(index); ds.Content = xnl.Item(0).InnerText; ds.X = Convert.ToInt32(xnl.Item(1).InnerText); ds.Y = Convert.ToInt32(xnl.Item(2).InnerText); ds.Height = Convert.ToInt32(xnl.Item(3).InnerText); ds.Width = Convert.ToInt32(xnl.Item(4).InnerText); ds.DSTextColor = System.Drawing.Color.FromArgb(int.Parse(xnl.Item(5).InnerText)); string fontName = xnl.Item(6).InnerText; int fontSize = Convert.ToInt32(xnl.Item(7).InnerText); ds.DSTextFont = new System.Drawing.Font(fontName, fontSize); ds.TextSize = fontSize; arrStringList.Add(ds); } }
/// <summary> /// �ӷ�������XML�ļ��У���ȡ����ͼ���� /// </summary> public void CreateArrDraw() { arrNodeList=new ArrayList (); arrLineList=new ArrayList (); arrStringList=new ArrayList(); XmlDocument doc=new XmlDocument (); doc.LoadXml(serverXml); //��ȡ����б� XmlNodeList nodeChilds=doc.SelectNodes("//arrNodeList//node"); foreach (XmlNode node in nodeChilds) { XmlNodeList xnl=node.ChildNodes; int index=Convert.ToInt32(node.Attributes.Item(0).InnerText); int nodetype=Convert.ToInt32(node.Attributes.Item(1).InnerText); string nodetext=xnl.Item(0).InnerText; Node xmlnode=new Node (index,(Node.DrawObjectType)nodetype,nodetext); string fontname=xnl.Item(1).InnerText; int fontSize=Convert.ToInt32(xnl.Item(2).InnerText); xmlnode.NodeTextFont=new System.Drawing.Font (fontname,fontSize); xmlnode.TextSize=fontSize; xmlnode.NodeTextColor=System.Drawing.Color.FromArgb(int.Parse(xnl.Item(3).InnerText)); xmlnode.BorderColor=Color.FromArgb(int.Parse(xnl.Item(4).InnerText)); xmlnode.FillColor=Color.FromArgb(int.Parse(xnl.Item(5).InnerText)); xmlnode.Height=Convert.ToInt32(xnl.Item(6).InnerText); xmlnode.Width=Convert.ToInt32(xnl.Item(7).InnerText); xmlnode.X=Convert.ToInt32(xnl.Item(8).InnerText); xmlnode.Y=Convert.ToInt32(xnl.Item(9).InnerText); xmlnode.ConnectInCount=Convert.ToInt32(xnl.Item(10).InnerText); xmlnode.ConnectOutCount=Convert.ToInt32(xnl.Item(11).InnerText); xmlnode.InFolwTime=Convert.ToDateTime(xnl.Item(12).InnerText); xmlnode.OutFlowTime=Convert.ToDateTime(xnl.Item(13).InnerText); xmlnode.Function=xnl.Item(14).InnerText; xmlnode.OperationRole=xnl.Item(15).InnerText; xmlnode.FunctionInfo=xnl.Item(16).InnerText; xmlnode.Info=xnl.Item(17).InnerText; arrNodeList.Add(xmlnode); } //��ȡ���б� XmlNodeList lineChilds=doc.SelectNodes("//arrLineList//line"); foreach (XmlNode node in lineChilds) { XmlNodeList xnl=node.ChildNodes; int index=Convert.ToInt32(node.Attributes.Item(0).InnerText); int lineType=Convert.ToInt32(node.Attributes.Item(1).InnerText); Line line=new Line ((Line.DrawObjectType)lineType,index); line.X0=Convert.ToInt32(xnl.Item(0).InnerText); line.Y0=Convert.ToInt32(xnl.Item(1).InnerText); line.X1=Convert.ToInt32(xnl.Item(2).InnerText); line.Y1=Convert.ToInt32(xnl.Item(3).InnerText); if(lineType==1) { line.X2=Convert.ToInt32(xnl.Item(4).InnerText); line.Y2=Convert.ToInt32(xnl.Item(5).InnerText); line.X3=Convert.ToInt32(xnl.Item(6).InnerText); line.Y3=Convert.ToInt32(xnl.Item(7).InnerText); line.LineNodeCount=Convert.ToInt32(xnl.Item(8).InnerText); if(xnl.Item(9).InnerText=="null") { line.FirstNode=null; } else { int firstIndex=Convert.ToInt32(xnl.Item(9).InnerText); line.FirstNode=(Node)arrNodeList[firstIndex]; } if(xnl.Item(10).InnerText=="null") { line.SecondNode=null; } else { int secondIndex=Convert.ToInt32(xnl.Item(10).InnerText); line.SecondNode=(Node)arrNodeList[secondIndex]; } line.FirNodeInterfaceIndex=Convert.ToInt32(xnl.Item(11).InnerText); line.SecNodeInterfaceIndex=Convert.ToInt32(xnl.Item(12).InnerText); line.LineSize=Convert.ToInt32(xnl.Item(13).InnerText); line.LineColor=System.Drawing.Color.FromArgb(int.Parse(xnl.Item(14).InnerText)); line.Content=xnl.Item(15).InnerText; arrLineList.Add(line); } else if(lineType==0) { line.LineNodeCount=Convert.ToInt32(xnl.Item(4).InnerText); if(xnl.Item(5).InnerText=="null") { line.FirstNode=null; } else { line.FirstNode=(Node)arrNodeList[Convert.ToInt32(xnl.Item(5).InnerText)]; } if(xnl.Item(6).InnerText=="null") { line.SecondNode=null; } else { line.SecondNode=(Node)arrNodeList[Convert.ToInt32(xnl.Item(6).InnerText)]; } line.FirNodeInterfaceIndex=Convert.ToInt32(xnl.Item(7).InnerText); line.SecNodeInterfaceIndex=Convert.ToInt32(xnl.Item(8).InnerText); line.LineSize=Convert.ToInt32(xnl.Item(9).InnerText); line.LineColor=System.Drawing.Color.FromArgb(int.Parse(xnl.Item(10).InnerText)); line.Content=xnl.Item(11).InnerText; arrLineList.Add(line); } } //��ȡ˵������ XmlNodeList textChilds=doc.SelectNodes("//arrStringList//textString"); foreach (XmlNode node in textChilds) { XmlNodeList xnl=node.ChildNodes; int index=Convert.ToInt32(node.Attributes.Item(0).InnerText); DrawString ds=new DrawString (index); ds.Content=xnl.Item(0).InnerText; ds.X=Convert.ToInt32(xnl.Item(1).InnerText); ds.Y=Convert.ToInt32(xnl.Item(2).InnerText); ds.Height=Convert.ToInt32(xnl.Item(3).InnerText ); ds.Width=Convert.ToInt32(xnl.Item(4).InnerText); ds.DSTextColor=System.Drawing.Color.FromArgb(int.Parse(xnl.Item(5).InnerText)); string fontName=xnl.Item(6).InnerText; int fontSize=Convert.ToInt32(xnl.Item(7).InnerText); ds.DSTextFont=new System.Drawing.Font (fontName,fontSize); ds.TextSize=fontSize; arrStringList.Add(ds); } }