示例#1
0
        //flag 用于标识是有限的还是无限的. flag=0,表示高度无限制,1表示有高度限制
        private void sort(int flag, int n, int width, int height, int xleft, int yleft)
        {
            int index = 0;

            if (m_MaterialList.Count <= 0)
            {
                return;
            }
            RectMaterial rectI = ((RectMaterial)m_MaterialList[index]);;

            if (flag == 0)
            {
                while (index < n)
                {
                    rectI = ((RectMaterial)m_MaterialList[index]);
                    if (rectI.m_bUsed == false && rectI.m_dWidth <= width)
                    {
                        break;
                    }
                    index++;
                }
                if (index >= n)
                {
                    return;
                }
                rectI.m_bUsed = true;   //该零件已经放进去了.
                rectI.m_dX    = xleft;
                rectI.m_dY    = yleft;

                sort(1, n, (int)(width - rectI.m_dWidth), (int)(rectI.m_dHeight), (int)(xleft + rectI.m_dWidth), yleft);
                sort(0, n, width, INFINITY, xleft, (int)(yleft + rectI.m_dHeight));
            }
            else if (flag == 1)
            {
                while (index < n)
                {
                    if (index >= m_MaterialList.Count)
                    {
                        Console.WriteLine(index + "/" + m_MaterialList.Count);
                    }
                    rectI = ((RectMaterial)m_MaterialList[index]);
                    if (rectI.m_bUsed == false && rectI.m_dWidth <= width && rectI.m_dHeight <= height)
                    {
                        break;
                    }
                    index++;
                }
                if (index >= n)
                {
                    return;
                }

                rectI.m_bUsed = true;
                rectI.m_dX    = xleft;
                rectI.m_dY    = yleft;

                sort(1, n, (int)(width - rectI.m_dWidth), (int)(rectI.m_dHeight), (int)(xleft + rectI.m_dWidth), yleft);
                sort(1, n, width, (int)(height - rectI.m_dHeight), xleft, (int)(yleft + rectI.m_dHeight));
            }
        }
示例#2
0
 private RectMaterial(RectMaterial pMaterial)
 {
     m_dX        = pMaterial.m_dX;
     m_dY        = pMaterial.m_dY;
     m_dHeight   = pMaterial.m_dHeight;
     m_dWidth    = pMaterial.m_dWidth;
     m_bUsed     = pMaterial.m_bUsed;
     optmizeClip = pMaterial.optmizeClip;
 }
 private RectMaterial(RectMaterial pMaterial)
 {
  m_dX=pMaterial.m_dX;
  m_dY=pMaterial.m_dY;
  m_dHeight=pMaterial.m_dHeight;
  m_dWidth=pMaterial.m_dWidth;
  m_bUsed=pMaterial.m_bUsed;
  optmizeClip = pMaterial.optmizeClip;
 }
示例#4
0
 //拷贝材料
 private void copyMaterial()
 {
     m_MaterialList.Clear();
     for (int i = 0; i < back_MaterialList.Count; i++)
     {
         RectMaterial rect = (RectMaterial)back_MaterialList[i];
         rect.m_bUsed = false;
         m_MaterialList.Add(rect);
     }
 }
示例#5
0
        public int getUsedSize()
        {
            int size = 0;

            for (int j = 0; j < this.m_MaterialList.Count; j++)
            {
                RectMaterial material = (RectMaterial)m_MaterialList[j];
                int          imgW     = (int)(material.m_dWidth);
                int          imgH     = (int)(material.m_dHeight);
                size += imgW * imgH;
            }
            return(size);
        }
示例#6
0
        //生成排样材料
        private void GenerateMaterial()
        {
            RectMaterial iter2 = null;
            RectMaterial iter3 = null;

            //将m_MaterialList中的元素从大到小排序
            while (m_MaterialList.Count != 0)
            {
                double dMaxHeight  = 0; //挑选最大高度
                double dMaxHeightW = 0; //最大高度的元素的宽度
                iter2 = m_MaterialList[0];
                RectMaterial p = null;
                iter3 = iter2;
                while (iter2 != null)
                {
                    if (iter2.m_dHeight > dMaxHeight)
                    {
                        p           = iter2;
                        iter3       = iter2;
                        dMaxHeight  = iter2.m_dHeight;
                        dMaxHeightW = iter2.m_dWidth;
                    }
                    else if (iter2.m_dHeight == dMaxHeight)
                    {
                        if (iter2.m_dWidth > dMaxHeightW)
                        {
                            p           = iter2;
                            iter3       = iter2;
                            dMaxHeight  = iter2.m_dHeight;
                            dMaxHeightW = iter2.m_dWidth;
                        }
                    }
                    if (m_MaterialList.IndexOf(iter2) >= m_MaterialList.Count - 1)
                    {
                        iter2 = null;
                    }
                    else
                    {
                        iter2 = m_MaterialList[m_MaterialList.IndexOf(iter2) + 1];
                    }
                }

                if (p != null)
                {
                    back_MaterialList.Add(p);
                    m_MaterialList.Remove(iter3);
                }
            }
        }
示例#7
0
        private Size getSortedSize()
        {
            int imgW = 1;
            int imgH = 1;

            for (int j = 0; j < this.m_MaterialList.Count; j++)
            {
                RectMaterial material = (RectMaterial)m_MaterialList[j];
                if (imgW < material.m_dX + material.m_dWidth)
                {
                    imgW = (int)(material.m_dX + material.m_dWidth);
                }
                if (imgH < material.m_dY + material.m_dHeight)
                {
                    imgH = (int)(material.m_dY + material.m_dHeight);
                }
            }
            return(new Size(imgW, imgH));
        }
 public void Add(RectMaterial pMaterial)
 {
     m_MaterialList.Add(pMaterial);
     m_iCurIndex++;
 }
示例#9
0
        public RectMaterial Copy()
        {
            RectMaterial p = new RectMaterial(this);

            return(p);
        }
示例#10
0
 public void Add(RectMaterial pMaterial)
 {
     m_MaterialList.Add(pMaterial);
     m_iCurIndex++;
 }
 public RectMaterial Copy()
 {
  RectMaterial p=new RectMaterial(this);
  return p;
 }