首页 新闻 会员 周边

怎么能给矩形分出层次来呢!!大家帮忙提供源码或者思路!!!

0
悬赏园豆:50 [已关闭问题] 关闭于 2012-08-29 10:11

 

矩形框是鼠标随意拖拽的数量不定!数字是自己用ps,画上去的!!呵呵,献丑了!

这种情况,程序里做了限定,子矩形不会大于父矩形!!!

这种情况,还没有什么好的处理方法呢,大家也可以提供个思路!!!


拖拽画的矩形而且位置不定的,都是一层套一层的!有可能先画小矩形,然后再画大的矩形!也有可能先画大矩形再画小的矩形!如何给矩形分层次啊!数字是层次,让程序分出来,矩形框,是一层包着一层的实现无限的分级!!
win的程序!!

wys0301mm的主页 wys0301mm | 初学一级 | 园豆:12
提问于:2012-08-28 16:26
< >
分享
所有回答(2)
0

把画出来的矩形的长[加上负数]作为当前矩形的立体高度, 矩形越大,负数矩形的长度值越小,高度就越低,自然就排列在下面一层一层。

longmeimei | 园豆:292 (菜鸟二级) | 2012-08-28 16:47
0

C#使用GDI+的话,接收一个画矩形l的队列,重新封装画矩形的方法增加层次参数,层高的后画。坐标轴你可以先绘制在一个底图上,每次贴图,或是每次clear后重绘。

参考资料:http://topic.csdn.net/u/20100910/15/d74f4c8d-5ca1-4d24-9005-3aca5842bb45.html

参考代码:

其实这个程序完全重画也不会很慢的,我给你改了下:
C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace Paint
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        int x1=10;
        int max = 600;
        public  void GrahpicsUpdate(Graphics graphics)
        {
            Pen mypen = new Pen(Color.Black);
            Pen mypen1 = new Pen(Color.Red);
            System.Drawing.Font font = new System.Drawing.Font("Arial", 8, FontStyle.Regular);
            graphics.DrawLine(mypen, 0, 192, 700, 192);
            String[] n = { "0%", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "100%" };
            int xstart = 10;
            for (int i = 0; i < 11; i++)
            {
                graphics.DrawString(n[i].ToString(), font, Brushes.DarkGray, xstart - 7, 192);//.Red
                int Xmin = xstart;
                for (int j = 0; j < 9; j++)
                {
                    Xmin += 6;
                    if (j == 4) graphics.DrawLine(mypen, Xmin, 184, Xmin, 192);
                    else graphics.DrawLine(mypen, Xmin, 188, Xmin, 192);
                }
                graphics.DrawLine(mypen, xstart, 182, xstart, 192);
                xstart = xstart + 60;
            }
            graphics.DrawLine(mypen1, x1, 180, x1, 200);
        }

        private void groupBox2_Paint(object sender, PaintEventArgs e)
        {
            GrahpicsUpdate(e.Graphics);
        }

        private void textBox5_TextChanged(object sender, EventArgs e)
        {
            double d = Convert.ToDouble(textBoxPresentVal.Text);
            x1 = (int)(d / 100 * max)+10;
            groupBox1.Invalidate(); //这里可以传入要更新的区域,不过我觉得没有必要,反而破坏了算法的简洁性,如果不是刻意地追求效率
        }
    }
}
acepro | 园豆:1218 (小虾三级) | 2012-08-28 17:10

单次添加的时候并没有什么问题。可以在添加矩形的时候自己算应该在谁的子矩形或者自己是父矩形。

 

大家帮忙想下,在最后都绘制完成的时候,应该会有一部验证分层的函数!!这个函数怎么写啊!!

 

我想了一下:

优先判断出拿个矩形框没有被包含,确定一级分层,然后由一级框往下确定二级框,然后在数组里面移除一级分层,把剩下的数组数据,进行没有被包含的计算,往下依次类推!!!直到数组里面没有数据为止!!

方法笨了点,哈哈!!
支持(0) 反对(0) wys0301mm | 园豆:12 (初学一级) | 2012-08-29 06:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册