当前位置: 首页>>代码示例>>C#>>正文


C# Region.createLevel方法代码示例

本文整理汇总了C#中Region.createLevel方法的典型用法代码示例。如果您正苦于以下问题:C# Region.createLevel方法的具体用法?C# Region.createLevel怎么用?C# Region.createLevel使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Region的用法示例。


在下文中一共展示了Region.createLevel方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: subtractRegions

            static void subtractRegions(int[] reg1, int[] reg2, MultiRectArea.RectCash dst, int height1, int height2)
            {
                Region d1 = new Region(reg1);
                Region d2 = new Region(reg2);

                int[] level = new int[height1 + height2];
                int[] level1 = new int[height1];
                int[] level2 = new int[height2];
                d1.createLevel(level1);
                d2.createLevel(level2);
                Region.sortOrdered(level1, level2, level);

                int top;
                int bottom = level[1] - 1;
                for(int i = 2; i < level[0]; i++) {

                top = bottom + 1;
                bottom = level[i] - 1;

                d1.findActive(top, bottom);
                if (d1.active[0] == 1) {
                    d2.deleteActive(bottom);
                    continue;
                }

                d2.findActive(top, bottom);

                int i1 = 1;
                int i2 = 1;

                int rx1 = 0;
                int rx2 = 0;

                bool next = true;

                while(true) {

                    if (next) {
                        next = false;
                        if (i1 >= d1.active[0]) {
                            break;
                        }
                        // Bottom
                        d1.active[i1 + 1] = bottom + 1;
                        rx1 = d1.active[i1];
                        rx2 = d1.active[i1 + 2];
                        i1 += 4;
                    }

                    if (i2 >= d2.active[0]) {
                        dst.addRectCashed(rx1, top, rx2, bottom);
                        for(int j = i1; j < d1.active[0]; j += 4) {
                            dst.addRectCashed(d1.active[j], top, d1.active[j + 2], bottom);
                            d1.active[j + 1] = bottom + 1;
                        }
                        break;
                    }

                    int x1 = d2.active[i2];
                    int x2 = d2.active[i2 + 2];

                    if (rx1 < x1) {
                        if (rx2 >= x1) {
                            if (rx2 <= x2) {
                                //  [-----------]
                                //       [-------------]
                                dst.addRectCashed(rx1, top, x1 - 1, bottom);
                                next = true;
                            } else {
                                // [-----------------]
                                //      [------]
                                dst.addRectCashed(rx1, top, x1 - 1, bottom);
                                rx1 = x2 + 1;
                                i2 += 4;
                            }
                        } else {
                            // [-----]
                            //         [----]
                            dst.addRectCashed(rx1, top, rx2, bottom);
                            next = true;
                        }
                    } else {
                        if (rx1 <= x2) {
                            if (rx2 <= x2) {
                                //    [------]
                                //  [-----------]
                                next = true;
                            } else {
                                //     [------------]
                                // [---------]
                                rx1 = x2 + 1;
                                i2 += 4;
                            }
                        } else {
                            //         [----]
                            // [-----]
                            i2 += 4;
                        }
                    }

//.........这里部分代码省略.........
开发者ID:sailesh341,项目名称:JavApi,代码行数:101,代码来源:MultiRectAreaOp.cs

示例2: unionRegions

            void unionRegions(int[] reg1, int[] reg2, int height1, int height2)
            {
                Region d1 = new Region(reg1);
                Region d2 = new Region(reg2);

                int[] level = new int[height1 + height2];
                int[] level1 = new int[height1];
                int[] level2 = new int[height2];
                d1.createLevel(level1);
                d2.createLevel(level2);
                Region.sortOrdered(level1, level2, level);

                bottom = level[1] - 1;
                for(int i = 2; i < level[0]; i++) {

                top = bottom + 1;
                bottom = level[i] - 1;

                d1.findActive(top, bottom);
                d2.findActive(top, bottom);

                int i1 = 1;
                int i2 = 1;
                bool res1, res2;

                if (d1.active[0] > 1) {
                    check(d1, 1, false);
                    rx1 = d1.active[1];
                    rx2 = d1.active[3];
                    i1 += 4;
                    res1 = false;
                    res2 = true;
                } else
                    if (d2.active[0] > 1) {
                        check(d2, 1, false);
                        rx1 = d2.active[1];
                        rx2 = d2.active[3];
                        i2 += 4;
                        res1 = true;
                        res2 = false;
                    } else {
                        continue;
                    }

                bool goToOuter = true;
                while(goToOuter) {
                    goToOuter = false;

                    while (res1 && ! goToOuter) {
                        if (i1 >= d1.active[0] && ! goToOuter) {
                            dst.addRectCashed(rx1, top, rx2, bottom);
                            while(i2 < d2.active[0]) {
                                check(d2, i2, true);
                                i2 += 4;
                            }
                            goToOuter = true;
                        }
                        if (!goToOuter)
                        {
                            res1 = next(d1, i1);
                            i1 += 4;
                        }
                    }

                    while (res2 && ! goToOuter) {
                        if (i2 >= d2.active[0]) {
                            dst.addRectCashed(rx1, top, rx2, bottom);
                            while(i1 < d1.active[0]) {
                                check(d1, i1, true);
                                i1 += 4;
                            }
                            goToOuter = true; ;
                        }
                        if (!goToOuter)
                        {
                            res2 = next(d2, i2);
                            i2 += 4;
                        }
                    }
                    if (!goToOuter)
                    {
                        res1 = true;
                        res2 = true;
                    }
                } // while

                d1.deleteActive(bottom);
                d2.deleteActive(bottom);

                }
            }
开发者ID:sailesh341,项目名称:JavApi,代码行数:91,代码来源:MultiRectAreaOp.cs

示例3: intersectRegions

            static void intersectRegions(int[] reg1, int[] reg2, MultiRectArea.RectCash dst, int height1, int height2)
            {
                Region d1 = new Region(reg1);
                Region d2 = new Region(reg2);

                int[] level = new int[height1 + height2];
                int[] level1 = new int[height1];
                int[] level2 = new int[height2];
                d1.createLevel(level1);
                d2.createLevel(level2);
                Region.sortOrdered(level1, level2, level);

                int top;
                int bottom = level[1] - 1;
                for(int i = 2; i < level[0]; i++) {

                top = bottom + 1;
                bottom = level[i] - 1;

                d1.findActive(top, bottom);
                d2.findActive(top, bottom);

                int i1 = 1;
                int i2 = 1;

                while(i1 < d1.active[0] && i2 < d2.active[0]) {

                    int x11 = d1.active[i1];
                    int x12 = d1.active[i1 + 2];
                    int x21 = d2.active[i2];
                    int x22 = d2.active[i2 + 2];

                    if (x11 <= x21) {
                        if (x12 >= x21) {
                            if (x12 <= x22) {
                                dst.addRectCashed(x21, top, x12, bottom);
                                i1 += 4;
                            } else {
                                dst.addRectCashed(x21, top, x22, bottom);
                                i2 += 4;
                            }
                        } else {
                            i1 += 4;
                        }
                    } else {
                        if (x22 >= x11) {
                            if (x22 <= x12) {
                                dst.addRectCashed(x11, top, x22, bottom);
                                i2 += 4;
                            } else {
                                dst.addRectCashed(x11, top, x12, bottom);
                                i1 += 4;
                            }
                        } else {
                            i2 += 4;
                        }
                    }
                }

                d1.deleteActive(bottom);
                d2.deleteActive(bottom);
                }
            }
开发者ID:sailesh341,项目名称:JavApi,代码行数:63,代码来源:MultiRectAreaOp.cs


注:本文中的Region.createLevel方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。