예제 #1
0
        private void SetFigChild(MpFigure_v1001 mpfig, Dictionary <uint, CadFigure> dic)
        {
            for (int i = 0; i < mpfig.ChildIdList.Count; i++)
            {
                uint id = mpfig.ChildIdList[i];

                mpfig.TempFigure.ChildList.Add(dic[id]);
                dic[id].Parent = mpfig.TempFigure;
            }
        }
예제 #2
0
        public static List <MpFigure_v1001> FigureListToMp_v1001(List <CadFigure> figList, bool withChild = false)
        {
            List <MpFigure_v1001> ret = new List <MpFigure_v1001>();

            for (int i = 0; i < figList.Count; i++)
            {
                ret.Add(MpFigure_v1001.Create(figList[i], withChild));
            }

            return(ret);
        }
예제 #3
0
        public static List <MpFigure_v1001> FigureMapToMp_v1001(
            Dictionary <uint, CadFigure> figMap, bool withChild = false)
        {
            List <MpFigure_v1001> ret = new List <MpFigure_v1001>();

            foreach (CadFigure fig in figMap.Values)
            {
                ret.Add(MpFigure_v1001.Create(fig, withChild));
            }

            return(ret);
        }
예제 #4
0
        public static MpFigure_v1001 Create(CadFigure fig, bool withChild = false)
        {
            MpFigure_v1001 ret = new MpFigure_v1001();

            ret.StoreCommon(fig);

            if (withChild)
            {
                ret.StoreChildList(fig);
            }
            else
            {
                ret.StoreChildIdList(fig);
            }
            return(ret);
        }
예제 #5
0
        public CadObjectDB Restore()
        {
            CadObjectDB ret = new CadObjectDB();

            ret.LayerIdProvider.Counter = LayerIdCount;
            ret.FigIdProvider.Counter   = FigureIdCount;

            // Figure map
            List <CadFigure> figList = MpUtil_v1001.FigureListFromMp_v1001(FigureList);

            var dic = new Dictionary <uint, CadFigure>();

            for (int i = 0; i < figList.Count; i++)
            {
                CadFigure fig = figList[i];

                dic.Add(fig.ID, fig);
                FigureList[i].TempFigure = fig;
            }

            ret.FigureMap = dic;


            // Child list
            for (int i = 0; i < figList.Count; i++)
            {
                MpFigure_v1001 mpfig = FigureList[i];
                SetFigChild(mpfig, dic);
            }


            // Layer map
            ret.LayerList = MpUtil_v1001.LayerListFromMp(LayerList, dic);

            ret.LayerMap = new Dictionary <uint, CadLayer>();

            for (int i = 0; i < ret.LayerList.Count; i++)
            {
                CadLayer layer = ret.LayerList[i];

                ret.LayerMap.Add(layer.ID, layer);
            }

            ret.CurrentLayerID = CurrentLayerID;

            return(ret);
        }
예제 #6
0
        public virtual void ForEachFig(Action <MpFigure_v1001> d)
        {
            d(this);

            if (ChildList == null)
            {
                return;
            }

            int i;

            for (i = 0; i < ChildList.Count; i++)
            {
                MpFigure_v1001 c = ChildList[i];
                c.ForEachFig(d);
            }
        }
예제 #7
0
        public virtual void ForEachFigID(Dictionary <uint, MpFigure_v1001> allMap, Action <uint> d)
        {
            d(ID);

            if (ChildIdList == null)
            {
                return;
            }

            int i;

            for (i = 0; i < ChildIdList.Count; i++)
            {
                uint           id       = ChildIdList[i];
                MpFigure_v1001 childFig = allMap[id];
                childFig.ForEachFigID(allMap, d);
            }
        }
예제 #8
0
        public void GarbageCollect()
        {
            var idMap = new Dictionary <uint, MpFigure_v1001>();

            foreach (MpFigure_v1001 fig in FigureList)
            {
                idMap.Add(fig.ID, fig);
            }

            var activeSet = new HashSet <uint>();

            foreach (MpLayer_v1001 layer in LayerList)
            {
                foreach (uint id in layer.FigureIdList)
                {
                    MpFigure_v1001 fig = idMap[id];

                    fig.ForEachFigID(idMap, (a) =>
                    {
                        activeSet.Add(a);
                    });
                }
            }

            int i = FigureList.Count - 1;

            for (; i >= 0; i--)
            {
                MpFigure_v1001 fig = FigureList[i];

                if (!activeSet.Contains(fig.ID))
                {
                    FigureList.RemoveAt(i);
                }
            }
        }