springsky 发表于 2003-5-20 11:10:00

用vba编写全站仪的转换程序?

我用vba编写了一个全站仪的转换程序,将采到的点绘到cad下面,但是发现与草图不相符,
不知道斑竹有没有全站仪的转换程序?可否给我,或者关于全站仪的一些技术资料,最好是关于数据点的转换方面的。谢谢!

springsky 发表于 2003-5-20 15:07:00

全站仪

全站仪,采回来的数据可以保存为*.txt or *.dat 的格式,我现在不明白的是,全站仪的设站点与测量得到的点之间有没有关系?是和关系?不知那位大虾帮忙搞定!或给点资料!

zzlzz 发表于 2003-5-21 10:08:00

123

有没有必要vba啊,如果是txt文件,应该可以在命令行中直接粘贴坐标(一次可以贴多个,最好每点坐标是一行)就画上去了吧。
设站点与测量点?应该是换一个设站点就要输入其坐标?

南子 发表于 2003-5-22 11:04:00

每个站点应该输入绝对坐标,那你所测得点就是绝对坐标。

由绝对坐标纪录所绘的点组成的图形就一定入你所愿

springsky 发表于 2003-5-22 17:30:00

又一问题?

测绘时,由第一个设站点(p1)测得(pn)点,然后转站(pn)点,那么输入的转站点的点号应该是那个呢?后视点是否可以随便定义呢?

zzlzz 发表于 2003-5-23 10:52:00

123

输入的转站点的点号应该是pn;后视点一般是pn的前面一个点(保证通视),不是随便定义的。

myfreemind 发表于 2003-5-24 00:44:00

这是我写的全站仪展点程序,你参考一下吧!

Dim i As Integer
On Error Resume Next
Dim textline(5000)
Dim ds As Integer
Dim s As Integer
Dim pnt(0 To 2) As Double
Dim tpnt(0 To 2) As Double
Dim pntobj As AcadPoint
Dim dm As AcadText
'Dim us1 As String
Dim us2 As String
Dim us3 As String
Dim ur5 As String

i = 1 '初始值



CommonDialog1.ShowOpen
Open CommonDialog1.FileName For Input As #1
If CommonDialog1.FileName = "" Then Exit Sub
ProgressBar1.Visible = True
'Me.hide
Do While Not EOF(1)
'读取坐标数据
Input #1, textline(i)
i = i + 1
Loop
Label1.Caption = i '读取终值
Close #1
'总点数
ds = textline(1) - 1
'进度条初始设置
ProgressBar1.Min = 1
ProgressBar1.Max = ds


us2 = ThisDrawing.GetVariable("userr2")
us3 = ThisDrawing.GetVariable("userr3")
ur5 = ThisDrawing.GetVariable("userr5")

If ThisDrawing.GetVariable("useri5") <> 666 Then
ThisDrawing.SetVariable "useri5", 666
End If




'读取数据
For s = 0 To ds
ProgressBar1.Value = s '进度条取值
'点坐标





Select Case us1
Case 500
If us2 = 0 And us3 = 0 Then '0,0的情况
pnt(0) = (textline(5 * s + 4)) * 2 + 100
pnt(1) = (textline(5 * s + 5)) * 2 + 100
pnt(2) = textline(5 * s + 6)

ElseIf us2 = 100 And us3 = 100 Then '100,100的情况

pnt(0) = (textline(5 * s + 4)) * 2 - 100
pnt(1) = (textline(5 * s + 5)) * 2 - 100
pnt(2) = textline(5 * s + 6)
End If
Case 1000
If us2 = 0 And us3 = 0 Then '0,0的情况
pnt(0) = textline(5 * s + 4) + 100
pnt(1) = textline(5 * s + 5) + 100
pnt(2) = textline(5 * s + 6)


ElseIf us2 = 100 And us3 = 100 Then '100,100的情况

pnt(0) = textline(5 * s + 4)
pnt(1) = textline(5 * s + 5)
pnt(2) = textline(5 * s + 6)
End If
End Select


'**********




'点名坐标
tpnt(0) = pnt(0) + 1
tpnt(1) = pnt(1)
tpnt(2) = 0
'创建点
Set pntobj = ThisDrawing.ModelSpace.AddPoint(pnt) '点位
Set dm = ThisDrawing.ModelSpace.AddText(textline(5 * s + 2), tpnt, 2) '点名

Next
Me.hide
ProgressBar1.Visible = False
MsgBox "展点完成"

ThisDrawing.Application.ZoomExtents '缩放全图

myfreemind 发表于 2003-5-24 00:48:00

你可以用数组来存储主站和后视坐标!

myfreemind 发表于 2003-5-24 00:50:00

记得X,Y要交换!

autocad的坐标系是数学坐标系!

myfreemind 发表于 2003-5-24 12:52:00

设站点只是提供给全站仪一个基点坐标和定向方位,在导出时只取测量点就可以!

页: [1] 2
查看完整版本: 用vba编写全站仪的转换程序?