在我正在进行的项目中http://sourcecodecloud.codeplex.com/我有一个包含非平凡几何图形的库。布局算法。它们完全独立于图形引擎。
该应用程序最初是为GDI +编写的,现在我要实现它的Silverlight和/或WPF端口。问题是我的所有算法都使用System.Drawing.PointF
,SizeF
,RectangleF
结构。它们都是基于float
的。相应的WPF / Silverlight类是double
。
问题是,有没有人经历过这个?什么是最好的方式?
答案 0 :(得分:4)
可能适用的一种方法是使用命名空间别名。您使用别名而不是实际类型和编译器指令在它们之间切换。由于命名空间别名是每个文件,如果代码分布在许多文件上,它可能不合适。
#if GDI
using Point=System.Drawing.Point;
#else
using Point=System.Windows.Point;
#endif
如果您使用var
,则可以消除大量检查,强制转换并保持性能。您仍然需要查看获取和返回特定类型的函数,例如Math.Sin e.t.c。
答案 1 :(得分:1)
我使用WPF类型,并使用一些全局(扩展?)方法转换为GDI。它们比Gdi更完整,更明智。缺点是它们是双重的,所以它们更大。但是,凭借我们现在拥有的所有记忆,你不太可能遇到问题。
答案 2 :(得分:1)
我会以Portable Library Tools为基础开始。其中的任何类型都适合在所有项目中使用。对于那里没有的任何类型,我将创建您自己的抽象类型,并实现派生类型,它们分别从每个框架包装相关类型。使用您自己代码中创建的抽象类型。
答案 3 :(得分:1)
我正在开发一个具有大量几何和图形计算的制图/ GIS应用程序。最初我在渲染代码中直接使用GDI +的类Point
和PointF
,但它越来越成为问题,因为我想支持Cairo,SVG,Direct2D和其他图形引擎。所以最后我制作了自己的基于接口的层次结构,比如IPointF2
,IPointD2
,IPointD3
等。当涉及到性能时,它当然不是完美的,但我不是看看一种更好的方法,让你的算法代码与图形引擎分开。