项目中要求用Winform做一个动态流程图,现在我遇到的问题是:
1:当线连接两框一样的范围图片时,如果这两对象不在同一水平线,或不在同一垂直线,要让这线自动变为折线,这折线的两个折点怎么计算,给个思路或公式都行?当鼠标拖动这根线时,这点要有相应变化,(就是vs2005里面的那个画类图的线一样的功能)
2:还有把界面上的图型保存起来,下次再用。当前是借鉴别人的一个方案是new Datatable保存信息,再保存到数据库。
3:设置状态怎么使选中的线让头中尾出现3个框?尤其是中间的。
问得比较多啊 ,哈哈。请教高手。最优答案我给100分。明天再补50分,鼓励辛苦的各位。
若有类似的源码希望能发份给我参考参考,先谢了。邮箱:[email protected]

解决方案 »

  1.   

    问题1:可取第一个对象和第二个对象之间X或Y坐标距离的中点。假设第一个对象在左下,坐标为(x1,y1),第二个对象在右上,坐标为(x2,y2),那第一个转折点坐标可以取((x2+x1)/2,y1),第二个转折点取((x2-x1)/2,y2),也可以取(x1,(y2+y1)/2)(x2,(y2+y1)/2)这两个转折点,都是一样,转的方向不同而已,自己画一下就知道了。拖动时根据鼠标方向相应增减两个坐标的值就行了。
    问题2:可以保存为XML文件,当然,原理和数据库是一样的,保存方式不同而已。
    问题3:这个线最好做成个类,就可以添加事件、属性控制不同情况的样子了。比如添加鼠标点选时在自身头中尾画三个框的事件是很容易的。网上有现成的自定义控件画焦点框的代码,参考改一下就行了。
      

  2.   

    1:折点的计算要看你自己的选择,方法是区分这根线是属于垂直方向的还是水平方向的,如果是垂直方向的,就计算Y的坐标应改在那个地方有一个断点,水平亦然。建议参考Visio。
    2:保存基本上有几个方法,系列化、实体,如果使用系列化方法,可以把这些图形对象直接系列化保存,如果使用每一个图形的实体的话,记录这些图形的基本信息就可以了,转换为文本即可保存。3:靠计算,然后重绘,CAD中都有现成的处理算法。 
      

  3.   

    cnming  他要做的就是类似Visio的功能。
      

  4.   

    那就体会一下Visio,就能体会出他们使用的算法。
      

  5.   

    我那个设置线的选中状态问题还是没有解决啊 
    找到了DrawTools的源码,但是看了半天,晕
    他好会封装,汗了折线问题解决了