本文整理汇总了C#中Region.deleteActive方法的典型用法代码示例。如果您正苦于以下问题:C# Region.deleteActive方法的具体用法?C# Region.deleteActive怎么用?C# Region.deleteActive使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Region
的用法示例。
在下文中一共展示了Region.deleteActive方法的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;
}
}
//.........这里部分代码省略.........
示例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);
}
}
示例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);
}
}