- 积分
- 30
- 注册时间
- 2004-11-17
- 仿真币
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2005-8-13 14:08:48
|
显示全部楼层
来自 北京东城
Re:最近做的AutoCAD画线工具——里面有读Mat文件的部分——看有没有高手给点意见!
'ToolForm的所有响应函数
Private Sub cmdLine_Click()
'============================================================================
'
' 这是一个AucoCAD-VBA的画线程序,线是3维的空间曲线,平面曲线只需要将Z坐标
'置为0由于程序支持从文本文件和mat文件中读入数据点的数据,所以需要线注册一个
'打开文件的dll:
'
' safrcdlg.dll
'
' 请先运行Reg.VBS文件注册这个dll文件。由于注册程序中使用了FSO文件对象,所以您
'的防毒软件可能会提示遇到病毒,同时如果您的防毒软件禁止了FSO对象,请手动注册这
'个dll文件.
'
'
' 免责声明:个人不担保代码在传播过程中不会被恶意修改,对您再使用过程中遇到的
' 任何损失,将不负任何责任
'
'WaitingForMe
'2005/8/1
'
'============================================================================
Dim data As Variant
Dim m, n, i, j, k As Integer
Dim FileName As String
Dim objDialog As Object
Dim intReturn As Boolean
'===========================================================
'读数据
If Not ExistFileDlg Then
MsgBox "缺少必要组件,请运行附带的VBS脚本程序!", 0, "出错了!"
Exit Sub
End If
Set objDialog = CreateObject("SAFRCFileDlg.FileOpen")
intReturn = objDialog.OpenFileOpenDlg
If intReturn Then
FileName = objDialog.FileName
If StrComp(".mat", Right(FileName, 4), vbTextCompare) = 0 Then
==================
'这里开始与Matlab相关的程序
==================
Dim Result As String
Dim sca(0, 0) As Double '标量实部临时数组
Dim scaimg() As Double '标量虚部临时数组
Dim nvar As Double
Dim ValideVar As String
Dim size1 As Double
Dim size2 As Double
Set Matlab = CreateObject("Matlab.Application")
Matlab.Visible = False
Result = Matlab.Execute("load('" & FileName & "');acad_varnames=who;acad_n=length(acad_varnames);")
Call Matlab.GetFullMatrix("acad_n", "base", sca, scaimg)
nvar = sca(0, 0)
If nvar = 0 Then
MsgBox "Mat文件中不含变量!", 0, "出错了"
Exit Sub
End If
NvalideVar = 0
VarForm.combVars.Clear
For i = 1 To nvar
Result = Matlab.Execute("acad_cols=eval(['size(' acad_varnames{" & i & "} ',2)']);")
Call Matlab.GetFullMatrix("acad_cols", "base", sca, scaimg)
size2 = sca(0, 0)
If size2 = 3# Then
Result = Matlab.Execute("acad_validevar=acad_varnames{" & i & "};")
ValideVar = Matlab.GetCharArray("acad_validevar", "base")
If VarForm.combVars.Value = "" Then
VarForm.combVars.Value = ValideVar
End If
Call VarForm.combVars.AddItem(ValideVar)
NvalideVar = NvalideVar + 1
End If
Next i
'MsgBox "合法变量个数" & NvalideVar
If NvalideVar = 0 Then
MsgBox "没有找到合法变量!变量空间中的变量的列数必须是3!", 0, "出错了"
Exit Sub
Else
VarForm.Show
ToolForm.Hide
objDialog.FileName = Left(FileName, Len(FileName) - 4) & ".txt"
Exit Sub
End If
Exit Sub
End If
data = ReadTxtFile(objDialog.FileName, ",")
m = UBound(data, 1)
n = UBound(data, 2)
k = -1
ReDim points((m + 1) * (n + 1) - 1)
For i = 0 To m
For j = 0 To 2
k = k + 1
points(k) = data(i, j)
Next j
Next i
Else
Exit Sub
End If
'===========================================================
'画线
Call DrawLine(points)
End Sub
Private Function ReadTxtFile(FileName, dlm)
'从文本文件读入数据,dlm表示分隔符
Dim Fso As Object
Dim TextStream As Object
Dim data() As Double
Dim i As Integer
Dim n As Integer
Dim sLine As String
Dim Temp As Variant
Set Fso = CreateObject("Scripting.FileSystemObject")
Set TextStream = Fso.OpenTextFile(FileName, 1)
n = 0
While Not TextStream.AtEndOfStream
n = n + 1
TextStream.SkipLine
Wend
TextStream.Close
ReDim data(n - 1, 2)
Set TextStream = Fso.OpenTextFile(FileName, 1)
For i = 0 To n - 1
sLine = TextStream.ReadLine
Temp = SplitData(sLine, dlm)
data(i, 0) = Temp(0)
data(i, 1) = Temp(1)
data(i, 2) = Temp(2)
Next i
Set Fso = Nothing
ReadTxtFile = data
End Function
Private Function ExistFileDlg()
'检查打开文件的对话框组件是否存在
On Error Resume Next
Dim objDlg As Object
Set objDlg = CreateObject("SAFRCFileDlg.FileSave")
Set objDlg = Nothing
If Err.Number <> 0 Then
ExistFileDlg = False
Err.Clear
Else
ExistFileDlg = True
End If
End Function
Private Sub Label1_Click()
'点这个标签访问我的Web-Log,哈哈
On Error Resume Next
Call Shell("C:\Program Files\Internet Explorer\IEXPLORE.EXE http://waitingforme.yculblog.com")
End Sub
Private Sub Label2_Click()
'点这个标签给我发送Email,呵呵
On Error Resume Next
Call Shell("C:\Program Files\Outlook Express\msimn.exe /mailurl:mailto:heroaq_2002@163.com?subject=ACAD_Line_Tool")
End Sub |
|