コード例 #1
0
 /**
  * @brief 저장되지 않은 임시 그룹에서 임시 그룹명 제거
  * @author 김민규
  * @date 2017-8-1
  */
 public void resetTempGroupnames()
 {
     foreach (Figure currentFigure in drawnFigures)
     {
         if (currentFigure is MergedFigure)
         {
             MergedFigure currentMergedFigure = currentFigure as MergedFigure;
             if (currentMergedFigure.groupName.StartsWith("<"))
             {
                 currentMergedFigure.recursiveGroupnameSet("");
             }
         }
     }
 }
コード例 #2
0
        /**
         * @brief 복제
         * @author 불명(김민규 담당)
         * @date 불명(2017-1-17 확인)
         * @return object 똑같은 값을 가지는 새로운 Figure를 생성해 반환한다. 사실상 팩토리 역할을 한다.
         */
        public virtual object Clone()
        {
            Figure figure = null;

            if (this.GetType() == typeof(LineFigure))
            {
                figure = new LineFigure();
            }
            else if (this.GetType() == typeof(PolyLineFigure))
            {
                figure = new PolyLineFigure();
            }
            else if (this.GetType() == typeof(FreeLineFigure))
            {
                figure = new FreeLineFigure();
            }
            else if (this.GetType() == typeof(RectFigure))
            {
                figure = new RectFigure();
            }
            else if (this.GetType() == typeof(OvalFigure))
            {
                figure = new OvalFigure();
            }
            else if (this.GetType() == typeof(ImageFigure))
            {
                figure = new ImageFigure(((ImageFigure)this).getImage());
            }
            else if (this.GetType() == typeof(MergedFigure))
            {
                FigureList figureListToClone = ((MergedFigure)this).getFigList();
                figure = new MergedFigure((FigureList)figureListToClone.Clone());
            }
            else
            {
                throw new System.NotImplementedException();
            }

            figure.coordinates = (RectList)this.coordinates.Clone();
            figure.filledColor = this.filledColor;
            figure.bFilled     = this.bFilled;
            figure.groupName   = this.groupName;
            return(figure);
        }
コード例 #3
0
        /**
         * @brief 복제 뒤 상대좌표 반영
         * @author 김민규
         * @date 2017-02-07
         * @param magnificationRatio 확대 비율
         * @param screenPos 화면의 현재 위치
         */
        public virtual Figure RelativeClone(int magnificationRatio, Pos screenPos)
        {
            Figure figure = null;

            if (this.GetType() == typeof(LineFigure))
            {
                figure = new LineFigure();
            }
            else if (this.GetType() == typeof(PolyLineFigure))
            {
                figure = new PolyLineFigure();
            }
            else if (this.GetType() == typeof(FreeLineFigure))
            {
                figure = new FreeLineFigure();
            }
            else if (this.GetType() == typeof(RectFigure))
            {
                figure = new RectFigure();
            }
            else if (this.GetType() == typeof(OvalFigure))
            {
                figure = new OvalFigure();
            }
            else if (this.GetType() == typeof(ImageFigure))
            {
                figure = new ImageFigure(((ImageFigure)this).getImage());
            }
            else if (this.GetType() == typeof(MergedFigure))
            {
                FigureList figureListToClone = ((MergedFigure)this).getFigList();
                figure = new MergedFigure((FigureList)figureListToClone.RelativeClone(magnificationRatio, screenPos));
            }
            else
            {
                throw new System.NotImplementedException();
            }

            figure.coordinates = (RectList)this.coordinates.RelativeClone(magnificationRatio, screenPos);
            figure.filledColor = this.filledColor;
            return(figure);
        }
コード例 #4
0
        /**
         * @brief 병합된 상태에서 크기를 조정할 때 비율을 제대로 조정하기 위해서 사용
         * @details 병합된 상태에서 각 Figure의 위치의 비율값을 각 Figure에 저장한다. 병합된 상태에서 확대 축소를 올바르게 작동시키기 위해 사용한다. 각 Figure들에 대해서 현재 MergeFigure에 대한 각 객체의 상대적인 위치를 저장해서 확대 축소 시 그 값을 사용한다.
         * @param merged 비율을 조절하기 위한 mergedFigure
         * @author 방준혁
         * @date 07-24
         */
        public void setRatio(MergedFigure merged)
        {
            Rect r       = (Rect)merged.getVectorElementAt(0);
            int  mLeft   = r.getLeft();
            int  mRight  = r.getRight();
            int  mTop    = r.getTop();
            int  mBottom = r.getBottom();
            int  mWidth  = r.getWidth();
            int  mHeight = r.getHeight();

            for (int i = 0; i < merged.getFigList().Count; i++)
            {
                r = (Rect)((Figure)merged.getFigList()[i]).getVectorElementAt(0);

                r.setRatio(0, (float)(mRight - r.getLeft()) / mWidth);
                r.setRatio(1, (float)(mRight - r.getRight()) / mWidth);
                r.setRatio(2, (float)(mBottom - r.getTop()) / mHeight);
                r.setRatio(3, (float)(mBottom - r.getBottom()) / mHeight);
            }
        }
コード例 #5
0
        /**
         * @brief 그룹명이 부여되지 않은 그룹에 임시 그룹명 부여
         * @author 김민규
         * @date 2017-8-1
         */
        public void setTempGroupnames()
        {
            int currentUnnamedIndex = 1;

            foreach (Figure currentFigure in drawnFigures)
            {
                if (currentFigure is MergedFigure)
                {
                    MergedFigure currentMergedFigure = currentFigure as MergedFigure;
                    if (currentMergedFigure.groupName == "")
                    {
                        currentMergedFigure.recursiveGroupnameSet(
                            "<Unnamed" + currentUnnamedIndex.ToString() + ">");
                        ++currentUnnamedIndex;
                    }
                }
                else
                {
                }
            }
        }
コード例 #6
0
 /**
  * @brief mergedFigure를 unmerge된 상태의 Figure들로 분리한다.
  */
 public void unmergeFigure()
 {
     if (drawingFigures.Count > 0)
     {
         foreach (Figure f in drawingFigures)
         {
             if (f is MergedFigure)
             {
                 MergedFigure mf          = f as MergedFigure;
                 string       motherGName = f.groupName;
                 mf.deselect();
                 FigureList unmerge = mf.getFigList();
                 foreach (Figure temp in unmerge)
                 {
                     temp.groupName = motherGName;
                 }
                 drawnFigures.Remove(mf);
                 drawnFigures.AddRange(unmerge);
             }
         }
     }
 }
コード例 #7
0
 /**
  * @brief 여러개의 객체들을 모두 합치기 위해서 사용한다.
  * @details figList는 현재 선택된 도형들을 담고있다. 선택된 객체가 저장된 figList에서 객체들을 선택해서 select 필드를 false로 변경하고 figList에서 삭제한다. 그리고 mergedFigure 객체를 새로 생성해서 선택되었던 객체들을 모두 포함하는 Figure를 생성한다.
  * @author 불분명(이혜리 확인)
  * @date 불분명
  */
 public Figure mergeFigure()
 {
     if (drawingFigures.Count > 0)
     {
         foreach (Figure f in drawingFigures)
         {
             //FreeLine은 현재 merge가 불가능하다.
             if (f is FreeLineFigure)
             {
                 MessageBox.Show("FreeLine is not able to Merge", "Editor");
                 deselectAll();
                 UpdateAllViews();
                 return(null);
             }
             else if (f is MergedFigure)
             {
                 MessageBox.Show("Recursive merging is not available", "Editor");
                 deselectAll();
                 UpdateAllViews();
                 return(null);
             }
         }
         MergedFigure merged = new MergedFigure(drawingFigures);
         merged.groupName = drawingFigures[0].groupName;
         setRatio(merged);
         for (int i = 0; i < drawingFigures.Count; i++)
         {
             drawingFigures[i].deselect();
             removeOriginalFigure(drawingFigures[i].RelativeClone(magnificationRatio, screenPos));
         }
         addFigure(merged);
         drawingFigures.Clear();
         return(merged);
     }
     return(null);
 }