如何用VB做一个绘图程序

orange494 2009-10-11 08:20:06
功能:在输入点的坐标后,画出对应的点;在画了点后,可以修改点的坐标,并从新画;重复直到图形轮廓画完。并可以将点的坐标作为文本文档输出。
我不知道怎么能实现,谢谢!
...全文
870 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhone99 2009-10-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 getemail 的回复:]
MSDN里面有VB的帮助
我这个机器上没装VB
单位和公司的机器上装的是VB,这个机器上放着6000G的电影
[/Quote]

这么大,应该好多电影
嗷嗷叫的老马 2009-10-16
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 getemail 的回复:]
5天前的帖子
我顶上来清理版面的
你费什么劲。
看15#
[/Quote]
虽然在我们看来没啥技术含量,可是这些技术点本身收藏着也是无法带来利润的,能帮就帮吧.

反正这几天忙过了正闲着,就当是为了技术分罗.
Like_328 2009-10-16
  • 打赏
  • 举报
回复
ding
getemail 2009-10-16
  • 打赏
  • 举报
回复
5天前的帖子
我顶上来清理版面的
你费什么劲。
看15#
嗷嗷叫的老马 2009-10-16
  • 打赏
  • 举报
回复
如果仅是根据已知的坐标来绘点,那就比较简单,直接使用PSet函数就行了.

因为是一次性绘图,所以性能问题可以不考虑.

为了显示不同的大小,指定一下坐标系统即可.

你可以试下这个代码:

'窗体内添加一个Picture1,五个CommandButton,从1到5分别为:放大/缩小/清除/读取/保存
Option Explicit
'简单矢量绘图例子
'
'BY 嗷嗷叫的老马
'紫水晶工作室 http://www.m5home.com/

Private Const SS As Single = 1.3 '缩小/放大的倍数

Dim RecPoint() As String, MaxIndex As Long '主要数据存储数组及其最大的下标
Dim P1X As Long, P1Y As Long, P2X As Long, P2Y As Long '内部坐标系统的左上角坐标与右下角坐标

Private Sub Command1_Click()
'清除显示,但不清除数据
Picture1.Cls
End Sub

Private Sub Command2_Click()
'从硬盘中读入点数据
Dim Buff As String

Open "c:\123.txt" For Binary As #1
Buff = Space(LOF(1))
Get #1, , Buff
Close #1

RecPoint() = Split(Buff, vbCrLf)
Call DrawPoint
End Sub

Private Sub Command3_Click()
'保存点数据
Open "c:\123.txt" For Binary As #1
Put #1, , Join(RecPoint(), vbCrLf)
Close #1
End Sub

Private Sub Command4_Click()
'放大,将'画布'变小就是放大
P1Y = P1Y / SS: P2X = P2X / SS
Picture1.Scale (P1X, P1Y)-(P2X, P2Y) '改变坐标系统

Call DrawPoint
End Sub

Private Sub Command5_Click()
'缩小,将'画布'变小就是缩小
P1Y = P1Y * SS: P2X = P2X * SS
Picture1.Scale (P1X, P1Y)-(P2X, P2Y) '改变坐标系统

Call DrawPoint
End Sub

Private Sub Form_Load()
P1X = 0: P1Y = 500
P2X = 500: P2Y = 0

Picture1.Scale (P1X, P1Y)-(P2X, P2Y) '初始化坐标系统

MaxIndex = -1: ReDim RecPoint(0)
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Me.Caption = X & "/" & Y
If (Button And vbLeftButton) = vbLeftButton Then '按下鼠标左键时记录坐标并显示
MaxIndex = MaxIndex + 1: ReDim Preserve RecPoint(MaxIndex)
RecPoint(MaxIndex) = X & "," & Y
Picture1.PSet (X, Y), vbBlack
End If
End Sub

Private Sub DrawPoint()
'绘图过程.
Dim I As Long, PBuff() As String

Picture1.Cls
For I = 0 To UBound(RecPoint)
PBuff = Split(RecPoint(I), ",")
Picture1.PSet (PBuff(0), PBuff(1)), vbBlack
Next I
End Sub

鼠标左键是画点,连续的点就构成了线.

保存与读取为了方便,固定读写C:\1.txt.
threenewbee 2009-10-12
  • 打赏
  • 举报
回复
画线比较简单

复杂的是修改。

首先应该定义一个模型。包括一个顶点的集合。

当用户按住鼠标拖动的时候,根据坐标移动最近的线。

可以画出一条虚线提示用户当前位置。

然后再绘制实线。
三楼の郎 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 clear_zero 的回复:]
你会到哪布?

这样的可以用line控件,作一个line的控件数组

收到一个坐标
load line(i)
line(i).x1=x1
line(i).y1=y1
line(i).x2=x2
line(i).y2=y2
line(i).visible=true

上面是一个小例子,然后每次接收到坐标就依次画下去,这个方法对待没有那么复杂的图形就够了

至于具体怎么建立控件数组可以搜索下,你如何接收坐标这是你的逻辑安排了
[/Quote]
picturebox都不知道,你就当他什么都不会好了,就等着你把程序写好然后打上他的名字好交差呢!
clear_zero 2009-10-12
  • 打赏
  • 举报
回复
你会到哪布?

这样的可以用line控件,作一个line的控件数组

收到一个坐标
load line(i)
line(i).x1=x1
line(i).y1=y1
line(i).x2=x2
line(i).y2=y2
line(i).visible=true

上面是一个小例子,然后每次接收到坐标就依次画下去,这个方法对待没有那么复杂的图形就够了

至于具体怎么建立控件数组可以搜索下,你如何接收坐标这是你的逻辑安排了
lsftest 2009-10-12
  • 打赏
  • 举报
回复
这样的需求,初学者建议使用shape控件和line控件完成.
orange494 2009-10-12
  • 打赏
  • 举报
回复
能帮忙一个吗
东方之珠 2009-10-12
  • 打赏
  • 举报
回复
建立画笔和刷子,这是高级一点的做法。其实,网上有很多这样的程序。
orange494 2009-10-12
  • 打赏
  • 举报
回复
老马 谢谢 我看了你的控件 差不多吧。我想要的是输入图形的点的坐标,然后画出图形,最后保存坐标数据到txt文档中。你的例子基本上改一下应该就行。能帮帮忙吗。
getemail 2009-10-12
  • 打赏
  • 举报
回复
#15楼的回复看过了么?

[Quote=引用 17 楼 myjian 的回复:]
是想做类似这样的效果吧?

http://www.m5home.com/temp/drawdemo.htm

不过这个控件的代码上次换硬盘时不知道扔哪去了,简单给你说一下思路吧.

将整个图象分解为基本的图元,每个图元作为一个对象来处理,分别有圆,线段,点,方框等,不同的对象有不同的属性.

然后每次重绘时根据各个对象所在层,从低向高绘制即可.

选中效果是对这些对象进行遍历,在点击范围内就设置一个标志,重绘时根据这个标志决定用什么颜色绘出来以示选中与未选中.

保存的东西是这些图元的参数,比如圆的圆心坐标,半径;线段的起点坐标,终点坐标等.
[/Quote]
orange494 2009-10-12
  • 打赏
  • 举报
回复
图形不复杂 直线、圆弧的组合
orange494 2009-10-12
  • 打赏
  • 举报
回复
谢谢大家的帮忙!
首先,声明一下。本人对编程基本上不会。我发问不是为了叫什么差!
我是做硬件的,工作中用到一个Fortran编的计算程序,程序比较老,没有输入界面,要编写输入文件,就是把一个图形的所有点的坐标写到文件中,非常的麻烦。看到另外一个程序的输入界面很友好,在输入点坐标时画出对应的点,核对无误后保存在文本文件中。很方便。因为近期工作较忙,没时间学,所以请求大家帮忙!
嗷嗷叫的老马 2009-10-12
  • 打赏
  • 举报
回复
是想做类似这样的效果吧?

http://www.m5home.com/temp/drawdemo.htm

不过这个控件的代码上次换硬盘时不知道扔哪去了,简单给你说一下思路吧.

将整个图象分解为基本的图元,每个图元作为一个对象来处理,分别有圆,线段,点,方框等,不同的对象有不同的属性.

然后每次重绘时根据各个对象所在层,从低向高绘制即可.

选中效果是对这些对象进行遍历,在点击范围内就设置一个标志,重绘时根据这个标志决定用什么颜色绘出来以示选中与未选中.

保存的东西是这些图元的参数,比如圆的圆心坐标,半径;线段的起点坐标,终点坐标等.
getemail 2009-10-11
  • 打赏
  • 举报
回复
四块移动硬盘
没做RAID0

[Quote=引用 11 楼 caozhy 的回复:]
引用 5 楼 getemail 的回复:
MSDN里面有VB的帮助
我这个机器上没装VB
单位和公司的机器上装的是VB,这个机器上放着6000G的电影

1500Gx4,RAID0?
[/Quote]
threenewbee 2009-10-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 getemail 的回复:]
MSDN里面有VB的帮助
我这个机器上没装VB
单位和公司的机器上装的是VB,这个机器上放着6000G的电影
[/Quote]
1500Gx4,RAID0?
getemail 2009-10-11
  • 打赏
  • 举报
回复
你那里有VB就给他做个吧,满足人家

[Quote=引用 9 楼 veron_04 的回复:]
......
光一个例子有什么用?
[/Quote]
贝隆 2009-10-11
  • 打赏
  • 举报
回复
......
光一个例子有什么用?
加载更多回复(8)

7,766

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧