RetangleF.Union的奇怪表现

  这几天有一个问题困扰了我很久。
  我用.Net 2.0做一个CAD/CAM方面的图形显示。结果,有一个文件显示不正常:本来应该填充一个图形的包围盒,结果填充了半个屏幕。
  最困扰的地方是,在开发机上显示正常,而在用户的机器上不正常。于是,换一台机器试,哈,出问题了。于是就在出故障机上进行调试——见鬼了,不出问题了。
  鼓捣了半天,发现debug版本都不会出问题,release版本会出问题,而且release版本在编译它的机器上不会出问题——狂晕。
  只好在一台机器编译好后,拷到另一台进行附加进程调试,最终锁定BUG:
bounds[i] = RectangleF.Union(bounds[i], elem.BoundsBox);

  跟踪中发现,在某些时候,elem.BoundsBox会出现{0,0,0,0}值,于是bounds[i]就变成从{0,0}坐标开始,把屏幕填充个够。
  解决方法倒是挺简单,判断elem.BoundsBox.IsEmpty,如果为真就不进行Union。

  就是不知道为什么Union对于Empty矩形的操作,居然能在编译它的机器上运行正常!实在不解,只有先记下来,以后遇到Union的使用,一定要排除Empty矩形。
posted @ 2006-06-27 09:43  沐枫  阅读(444)  评论(0编辑  收藏  举报