日期:2014-05-18  浏览次数:20825 次

最近在用C#做一个地图编辑器……
最近想用C#做一个平面的地图编辑器,但在绘图区不知道该用什么控件picturebox还是form?还有在这种情况下新建文件该怎么建,绘图区的网格怎么生成(可以显示或隐藏),哪个大侠可以提供帮组

------解决方案--------------------
都可以,关键你要知道如何用gdi绘图,并控制每一个图形元素
------解决方案--------------------
探讨

引用:

要保存到数据库,为何还要建立文件?


保存到数据库?

------解决方案--------------------
可缩放矢量图 听说过没LZ .SVG文件格式听说过没 
XML 也学会给你带来帮助!
------解决方案--------------------
你说的两种控件都可以进行图形绘制。把绘制的图形存储为相关的文件,可以已使用泛型保存。具体的代码你可以到网上搜一下.

------解决方案--------------------
发个贴解决不了问题
有空看看深蓝色右手的blog,这么好的文章在那里却没人会欣赏
http://www.cnblogs.com/alamiye010/
http://www.cnblogs.com/alamiye010/archive/2009/06/17/1505346.html
------解决方案--------------------

我对C# CS模式的API不太熟,所以代码上帮不了你了 说一下我的思路吧
我以前学VC,做了一款坦克大战玩,也写了个很简单的地图编辑器。为了不使画面在编辑地图时出现闪动和效率考虑,先创建了一个内存兼容的Bitmap,你可以看作是一个画布,是一个n*m的矩阵,每个格子的大小最好等于图形元件的大小,不然你要缩放比较麻烦,图形就画在格子上,而显示,就把画布画到控件上就可以了,至于是控件picturebox还是form,都无所谓,是窗口都是可以绘图的,label这些都可以,这些窗口控件都会有一个自绘函数OnPaint,重载这个函数,把画布画在窗口上就可以了,
绘图函数自己找找,绘制预览窗口的话,可以把画布缩小,画在指定大小的控件上,绘图API应该已实现了缩放功能,编辑地图时同步刷新预览控件。
绘图区的网格显示,用一个函数实现就可以了,用两个for循环,画行和列,用一个bool来控制,true调用这个函数就可以了,调用也在OnPaint里调用。
一个图像文件可以包含多个图形元件,也可以是一个图像文件一个图形,这都无所谓。程序打开初始化时,把所有图像文件读取到内存,得到索引,这个索引可以找到图形元件。
一个格子可以是一个结构体或类,struct{位置,索引}例如struct{int x,int y,索引}或struct{int index,索引} index%n得到列 index%m得到行
n*m 就有n*m个struct,保存文件就按一定顺序保存这些结构,读还是按这个顺序读
注意,图形都先画到画布缓存上,画完了,再把画布画到窗口

------解决方案--------------------
先搞清楚 要做什么 然后 明白怎么做 。。。
------解决方案--------------------
劝你用arcengine吧,好好学学,里边很多东西,涉及到地图的,还是用专业的好,你总不想自己重新开发一个arcmap吧。。。
------解决方案--------------------
我用的是 PictureBox ,其实用其他的比如 Lable , Form 都可以,因为是在控件 Pain 事件中画上去的。网格的显示和隐藏用一个 bool 值保存,当状态发生改变时,强制重绘控件就可以生效了,调用控件重绘有几种方法:Invalidate()或者 Refresh(),具体的实现方法去参考一些 GDI+ 的书籍吧。。。
------解决方案--------------------
探讨

都可以,关键你要知道如何用gdi绘图,并控制每一个图形元素