[求助]如何在VB环境下获取AutoCAD的Text(文本对象),请教各位啦
本帖最后由 作者 于 2007-5-1 0:54:49 编辑 <br /><br /> <p>我现在需要完成一个应用程序,其中一个步骤是从AutoCAD中获取数据,开发工具是VB</p><p>这个步骤要实现:当我点击CAD图形中的Text(实际上是图斑的编号,都是数字)的时候,自动获取它并放到一个VB文本框中。最近一周一直在学习ActiveX方面的知识,但是自己没有这方面的书籍,网上的东西零零碎碎地,AutoCAD的developer help也看得头大,现在比较急用,希望能有人帮忙写这段代码或者给点参考代码也好。这里先感谢了</p> 这个是我的代码,希望能有人帮帮忙啦<br/>Dim sset As Object<br/>Dim utilobj As Object<br/>Dim pnt<br/>Dim temppoint(0 To 2) As Double<br/>Dim pointl<br/>Dim strsqltext As String<br/><br/>'错误陷阱<br/>On Error GoTo error_show<br/>enablecommandbuttons (False)<br/>'状态栏提示信息<br/>lblstatus.Caption = "在AUTOCAD窗口中选择一个对象"<br/>'激活AUTOCAD程序窗口<br/>Set utilobj = objacad.ActiveDocument.Utility<br/>'在AUTOCAD命令窗口显示信息<br/>pnt = utilobj.GetPoint(, "在图形窗口中选择一个对象:")<br/>temppoint(0) = pnt(0)<br/>temppoint(1) = pnt(1)<br/>temppoint(2) = pnt(2)<br/>pointl = utilobj.TranslateCoordinates(temppoint, 0, 1, 0)<br/>point(0) = pointl(0)<br/>point(1) = pointl(2)<br/>point(2) = pointl(2)<br/>lblstatus.Caption = ""<br/><br/>'出错处理<br/>On Error Resume Next<br/>'如果存在<br/>If Not IsNull(objdoc.sesectionsets.Item("ss1")) Then<br/> Set sset = objdoc.SelectionSets.Item("ss1")<br/> sset.Delete<br/>End If<br/><br/><br/>Set sset = objdoc.SelectionSets.add("ss1")<br/><br/><br/>'出错处理<br/> On Error GoTo error_show<br/> Call sset.SelectAtPoint(point)<br/> <br/> '检查是否选择了一个对象<br/>If sset.Count = 1 Then<br/> If StrComp(sset(0).EntityName, "acdbblockreferrence", 1) = 0 Then<br/> <br/> '链接到数据库<br/> strHandle1 = sset(0).Handle<br/> strsqltext = "seleCt * from sheet1 where handle='" & Trim(strHandle1) & "'"<br/> Data1.RecordSource = strsqltext<br/> Data1.Refresh<br/> <br/> '数据库中有相关信息<br/> If checkallfilled Then<br/> cmdeditrecord.Enabled = True '按钮状态###################<br/> cmddeleterecord.Enabled = True<br/> <br/> '没有相关信息<br/> Else<br/> MsgBox "记录不存在,请添加相关信息"<br/> cmdaddrecord.Enabled = True<br/> clearsql<br/> <br/> End If<br/>Else<br/>'没有选择对象<br/> If sset.Count = 0 Then<br/> Form1.ide<br/> MsgBox "未选中图块"<br/> End If<br/>End If<br/>Exit Sub<br/><br/>'错误陷阱<br/>error_show<br/> MsgBox Err.Description<br/> Exit Sub<br/>End Sub<br/><br/> <br/><br/>Private Sub cmdstart_Click()<br/>' 运行AUTOCAD<br/> startautocad<br/> '设定按钮状态##############<br/> cmdstart.Enabled = False<br/> 'cmdclearsql.Enabled = True<br/> cmdshowrecord.Enabled = True<br/> cmdlink.Enabled = True<br/> cmdhighlight.Enabled = True<br/> <br/> End Sub<br/>Private Sub startautocad()<br/>'设定文件名目录变量<br/> Dim dwgname As String<br/> <br/> '错误陷阱<br/> On Error Resume Next<br/> <br/> '设定AUTOCAD对象<br/> Set objacad = GetObject(, "autocad.application")<br/> If Err Then<br/> '打开autocad程序<br/> <br/> Set objacad = CreateObject("autocad.application")<br/> Err.Clear<br/> End If<br/> <br/> <br/> If Right(App.Path, 1) = "\" Then<br/> dwgname = App.Path & "虹口02.dwg"<br/> Else<br/> dwgname = App.Path & "\虹口02.dwg"<br/> End If<br/> <br/> <br/> Set objdoc = objacad.ActiveDocument<br/> <br/> <br/> sysvarname = "osmode"<br/> sysvardata = objdoc.GetVariable(sysvarname)<br/> osMode = CInt(sysvardata)<br/> objdoc.SetVariable sysvarname, 0<br/> sysvarname = "sdi"<br/> sysvardata = objdoc.GetVariable(sysvarname)<br/> sdimode = CInt(sysvardata)<br/> objdoc.SetVariable sysvarname, 1<br/> <br/> If objdoc.FullName <> dwgname Then<br/> objdoc.Open dwgname<br/> End If<br/> objacad.Visible = True<br/> <br/>End Sub<br/><br/><br/><br/><br/><br/><br/><br/><br/>Private Sub txtUse_click()<br/> MsgBox "this box cannot be edited"<br/>End Sub<br/><br/><br/>Private Function checkallfilled() As Boolean<br/> Dim chkstr As String<br/> checkallfilled = False<br/> chkstr = Trim(txtLSH.Text & txtName.Text & txtPzwh.Text & txtPzwh2.Text & txtDate.Text & txtPzwh3.Text & txtPosition.Text)<br/> If (chkstr <> "") Then<br/> checkallfilled = True<br/> End If<br/> End Function<br/><br/>'获取文件句柄<br/>Private Function gethandle() As String<br/><br/> Dim utilobj As Object<br/> Dim pnt<br/> Dim temppoint(0 To 2) As Double<br/> Dim point(0 To 2) As Double<br/> Dim pointl<br/> Dim sset As Object<br/> <br/> '出错处理<br/> On Error GoTo error_gethandle<br/> Set utilobj = objacad.ActiveDocument.Utility<br/> pnt = utilobj.GetPoint(, "选择一个CAD对象连接记录:")<br/> <br/> <br/> <br/> temppoint(0) = pnt(0)<br/> temppoint(1) = pnt(1)<br/> temppoint(2) = pnt(2)<br/> pointl = utilobj.TranslateCoordinates(temppoint, 0, 1, 0)<br/> point(0) = pointl(0)<br/> point(1) = pointl(1)<br/> point(2) = pointl(2)<br/> lblstatus.Caption = ""<br/> <br/> <br/> '获取选择集对象<br/> Set sset = objacad.ActiveDocument.SelectionSets.add("ss1")<br/> Call sset.SelectAtPoint(point)<br/> If sset.Count = 1 Then<br/> If StrComp(sset(0).EntityName, "acdbblockreference", 1) = 0 Then<br/> gethandle = sset(0).Handle<br/> Else<br/> MsgBox "没有图块被选中"<br/> gethandle = ""<br/> End If<br/> Else<br/> If sset.Count = 0 Then<br/> Form1.Hide<br/> MsgBox "没有图块被选中"<br/> Form1.Show<br/> End If<br/> If sset.Count > 1 Then<br/> MsgBox "选中图块超过一个"<br/> End If<br/> gethandle = ""<br/> End If<br/> Exit Function<br/> <br/> <p>选择单个对象要以使用GetEntity方法,而判断选中对象是否为文本可以使用ObjectName属性来判断是否为“AcDbText”,获取文本的内容可以使用TextString属性。</p> 谢谢您的提示,我用您的方法试试看<br/><br/>
页:
[1]