返回首页

{A}介绍
本文旨在提供一个简单的C图形库,为更换旧的基本图形,如HPLOT和HCOLOR命令。此库不提供屏幕上的图形功能,但有能力出口BMP或WMF图形输出。我希望这个图书馆将是一个程序员谁想要使他们自己的图形库,为简单的物理模拟的帮助。背景
我的物理模拟研究,并发现了一个精彩的书,于1984年出版的。笔者在苹果II基本实现了所有的模拟算法,和他HPLOT和HCOLOR用于图形结果。因此,有进一步研究的一些问题。不再使用旧的BASIC语言。如Turbo-C的编译器的C / C不能没有DOSBox中运行。我不想安装Python或GD库。我想要的是一个微小的和便携式的图形库,可以产生物理模拟栅格或矢量图形输出。
Python和Python扩展包是一个伟大的解决方案,但它不符合我的要求。也没有GD库的支持只是栅格图形输出。因此,我决定把自己的简单的图形库,这将是能够导出BMP和WMF图形结果。使用代码
以下基本代码实现了一个简单的运动。此方案图的X(位置)=的dv / dt =-X与T(时间)。

'Simple motion with a = dv/dt = -x

 

 10  REM DY2

 15  REM X-T GRAPH OF DY1

 20  INPUT "SCALE OF T-AXIS ="; K

 30  INPUT "SCALE OF X-AXIS ="; L

 40  HGR : HCOLOR=3

 50  HPLOT 0, 40 TO 0, 140

 60  HPLOT 0, 90 TO 279, 90

 70  X0 = 1:V0 = 0:DT = 0.1

 80  X = X0:V = V0

 90  A = -X

 100 V = V + A * (DT/2)

 110 X = X + V * DT

 120 T = T + DT

 130 T1 = T * K:X1 = X * L

 140 IF T1 > 270 THEN END

 150 HPLOT T1, -X1 + 90

 160 A = -X

 170 V = V + A * DT

 180 GOTO 110

 

 ]RUN

 SCALE OF T-AXIS =5

 SCALE OF X-AXIS = 40

下面的C代码给出了相同的图形结果:{C}
{S0的}坐标系
LibTG默认的坐标系是世界坐标系统,其起源是左下角。然而,导出功能逻辑(纸)坐标系统转换成世界坐标系,对BMP为WMF或像素坐标系统。 BMP和WMF的起源是相同的,左上角。 WMF和BMP之间的差异在坐标系统的单位。 WMF的使用英寸单元,内部缇,BMP使用像素单位。你可能会改变使用SetWindowsOrg的WMF的坐标系的原点,但我不会去这里进入该主题。
通常情况下,旧的基本模拟代码使用像素坐标系统(如:HPLOT T1-X1的90)。因此,XXXAPI_SetReverseWorldCoord(1)必须被调用之前,任何绘图功能; XXX可以是BMP或WMF。第一个图像代表了世界坐标系和下一个显示的文件或像素坐标系统。映射LibTG有两个过程:世界的逻辑和逻辑像素。 BMP出口需要,和WMF只需要世界逻辑。逻辑坐标系统是英寸单元的纸张坐标系统的别名。这将花费大量的时间来详细解释WMF格式。你可以在互联网上找到的格式规范,或检查的LibTG的WMF部分出口。
{S}
{S2的}
//Example1: BMP export



TG_Point world, logical, pixel;

world.x = x, world.y = y;

World2Length(&&world, &&logical);

Length2Pixel(&&logical, &&pixel);

... putpixel(..., pixel.x, pixel.y, ...);



Example2: WMF export



TG_Point world, logical, pixel;

world.x = x, world.y = y;

World2Length(&&world, &&logical);

... putpixel(..., _to_twip(pixel.x), _to_twip(pixel.y), ...);

现在,让我们出口的WMF的图形。这是非常简单。你只需要以替换用的WMF BMP和删除的最后三个参数的OpenExport(...,xwid,xhgt,1)。{体C3}
您可以通过插入短短三行的一个象征。功能gsave和grestore保护线或从像素更改后绘制的符号图形状态的属性。 gsave和grestore是唯一有效的WMF出口。如果你只想BMP和你不需要,使用gsave和grestore,。{的C4}
{S3的}
{四至}
下面是一些有趣的例子,我将发布的图像。检查源代码,以了解他们的情况。这些图像是在均匀流的一些潜在功能的地块。的主题通常是在流体力学开始处理。第一个是根据均匀流(BMP)的偶极子。二是根据统一的流量(BMP)的旋涡。最后一盘攻击(BMP)的角度来看周围的流动行为。
{五} {六} {七}
我插入到Microsoft PowerPoint BMP和WMF文件:
{S8的}
我做了一个简单的WMF分析仪作为一个文本格式的WMF文件保存在元命令。这是非常有用的,直观的,当我从头开始开发一个WMF库。该计划有三个按钮:WMF的,确定,取消。如果您单击的WMF文件对话框出现。选择一个WMF文件和文本文件具有相同的名称和quot;。txtquot;扩展将自动创建,或单击"确定"按钮。不幸的是,我失去了源代码,但有可执行程序。我不能上传任何可执行程序CodeProject上。如果您需要它,给我发电子邮件。
{S9的}
{S10的} SMW.TXT

回答

评论会员:Kschuler 时间:2012/02/04
1 - 这是我使用的代码,以"补"的细胞都具有相同的价值选择。我填写,无论是在剪贴板或任何最近复制......,但你可以改变你的TextBox的文本。
{5233}
2 - 对这个解决方案取决于如何你有你的项目设置。你只是一格,每次用户更改列表框你加载该文件的数据网格?如果是这样,你是如何保持在内存中的变化?例如,如果我在文件和做出改变,然后看看文件B ......哪里是信息,这仍然是跟踪我的变化,提出呢?也许我想这是你的问题。具体是什么,你有保存文件的麻烦
评论会员:游客 时间:2012/02/04
?samehafez:感谢的人,我真的感谢您的帮助,其实我用这个代码替换选定的值{C7-}第二个问题是杀害我其实,我的项目是这样1-浏览文件夹并选择该文件夹中的所有csv文件和子文件夹2-csv文件沐浴在列表框中列出3-选择ListBox中的文件和点击csv文件插入填充的DataGridView(几个文件一次填充的DataGridView)4-编辑在DataGridView装csv文件 5-在DataGridView导出到一个csv文件---------------------------------------------一切都是我的到这里,但......6-(((节省每一个在它自己的地方从ListBox使用的文件名和洗澡再见单个csv文件的更改)))这是我现在的问题