田草博客

互联网田草博客


网友交流QQ群:11740834 需注明申请加入原因

微信 公众号:ByCAD

邮箱:tiancao1001x126.com
ByCAD,微信公众号
首页 | 普通 | 电脑 | AutoCAD | VB/VB.NET | FLash | 结构 | 建筑 | 电影 | BIM | 规范 | 软件 | ID
-随机-|-分布-
-博客论坛-|-﨣﨤﨧﨨-
-网站导航-|-规范下载-
-BelovedFLash欣赏-

用户登陆
用户:
密码:
 

站点日历
73 2024 - 12 48
1234567
891011121314
15161718192021
22232425262728
293031


站点统计

最新评论



dxfcode可以用来设置过滤条件,我想用来获取对象的某属性怎么使用? AutoCAD VB.Net 选择一个参照块后自动选择所有同名的参照块
未知 请教 vb.net 向cad发送一个命令后,得到cad执行命令后在命令行输出的内容??   [ 日期:2009-11-22 ]   [ 来自:本站原创 ]  HTML
请教 vb.net 向cad发送一个命令后,得到cad执行命令后在命令行输出的内容??


我正在尝试捕获AutoCAD的“List”命令的输出的文本。选择对象的List方法不返回任何内容,而是直接输出在命令行。

可以通过以下三个系统变量控制是否保存命令行信息,保存到指定文件。
LOGFILEMODE 
LOGFILENAME 
LOGFILEPATH 


这是个例子,天正对象(很到属性我们不知道,程序也不好访问,只能通过list名称查看,但是程序怎么得到list查询的结果呢?)

Public Class tdb
    <CommandMethod("tdb")> _
    Public Sub TZBH()
        On Error Resume Next
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database
        Dim acEditor As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
        '过滤条件
        Dim acTypValAr(0) As TypedValue
        acTypValAr.SetValue(New TypedValue(DxfCode.Start, "TCH_OPENING"), 0)
        'acTypValAr.SetValue(New TypedValue(DxfCode.Start, "BlockReference"), 0)
        Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)
        Dim acSSPrompt As PromptSelectionResult = acEditor.GetSelection(acSelFtr)
        Dim acSSet As SelectionSet = acSSPrompt.Value
        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
            Dim I As Long
            For I = 0 To acSSet.Count - 1
                Dim e As Entity = acTrans.GetObject(acSSet.Item(I).ObjectId, OpenMode.ForRead)
                Application.SetSystemVariable("LOGFILEMODE", 1) 'Log开
                e.List() '就是AutoCAD的list命令
                Application.SetSystemVariable("LOGFILEMODE", 0) 'Log关
                Dim LogPath As String = Application.GetSystemVariable("LOGFILENAME")
                acDoc.Editor.WriteMessage(vbCrLf + LogPath)
                MsgBox(LogPath)
                Dim DataString As Object
                DataString = ReadFile(LogPath)
                Dim J As Int16 = UBound(DataString)
                Dim N As Int16
                Dim Str As String = ""
                For N = J - 13 To J
                    Str = Str & vbCrLf & DataString(N)
                Next
                MsgBox(Str)
            Next
            acTrans.Commit()
        End Using
        MsgBox(Err.Source)
    End Sub
    Function ReadFile(ByVal Path As String) As Object
        Dim DataString() As String = Nothing
        Dim F As System.IO.StreamReader
        F = FileIO.FileSystem.OpenTextFileReader(Path, System.Text.Encoding.Default)
        Dim I As Long
        Do While Not F.EndOfStream
            ReDim Preserve DataString(I)
            DataString(I) = F.ReadLine
            I = I + 1
        Loop
        ReadFile = DataString
    End Function
End Class


输入tdb命令后,选择天正的窗户,得到list查询的结果显示在msgbox中。

List<string> lines = Autodesk.AutoCAD.Internal.Utils.GetLastCommandLines(4, true);


[本日志由 tiancao1001 于 2024-11-23 05:39 PM 编辑]


引用这个评论 tiancao1001 于 2009-11-24 04:50 PM 发表评论: 
这是个例子,天正对象(很到属性我们不知道,程序也不好访问,只能通过list名称查看,但是程序怎么得到list查询的结果呢?)
Public Class tdb
    <CommandMethod("tdb")> _
    Public Sub TZBH()
        On Error Resume Next
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database
        Dim acEditor As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
        '过滤条件
        Dim acTypValAr(0) As TypedValue
        acTypValAr.SetValue(New TypedValue(DxfCode.Start, "TCH_OPENING"), 0)
        'acTypValAr.SetValue(New TypedValue(DxfCode.Start, "BlockReference"), 0)
        Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)
        Dim acSSPrompt As PromptSelectionResult = acEditor.GetSelection(acSelFtr)
        Dim acSSet As SelectionSet = acSSPrompt.Value
        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
            Dim I As Long
            For I = 0 To acSSet.Count - 1
                Dim e As Entity = acTrans.GetObject(acSSet.Item(I).ObjectId, OpenMode.ForRead)
                Application.SetSystemVariable("LOGFILEMODE", 1) 'Log开
                e.List() '就是AutoCAD的list命令
                Application.SetSystemVariable("LOGFILEMODE", 0) 'Log关
                Dim LogPath As String = Application.GetSystemVariable("LOGFILENAME")
                acDoc.Editor.WriteMessage(vbCrLf + LogPath)
                MsgBox(LogPath)
                Dim DataString As Object
                DataString = ReadFile(LogPath)
                Dim J As Int16 = UBound(DataString)
                Dim N As Int16
                Dim Str As String = ""
                For N = J - 13 To J
                    Str = Str & vbCrLf & DataString(N)
                Next
                MsgBox(Str)
            Next
            acTrans.Commit()
        End Using
        MsgBox(Err.Source)
    End Sub
    Function ReadFile(ByVal Path As String) As Object
        Dim DataString() As String = Nothing
        Dim F As System.IO.StreamReader
        F = FileIO.FileSystem.OpenTextFileReader(Path, System.Text.Encoding.Default)
        Dim I As Long
        Do While Not F.EndOfStream
            ReDim Preserve DataString(I)
            DataString(I) = F.ReadLine
            I = I + 1
        Loop
        ReadFile = DataString
    End Function
End Class

输入tdb命令后,选择天正的窗户,得到list查询的结果显示在msgbox中。

发表评论 - 不要忘了输入验证码哦!
作者: 用户:  密码:   注册? 验证:  防止恶意留言请输入问题答案:1*7=?  
评论:

禁止表情
禁止UBB
禁止图片
识别链接
识别关键字

字体样式 文字大小 文字颜色
插入粗体文本 插入斜体文本 插入下划线
左对齐 居中对齐 右对齐
插入超级链接 插入邮件地址 插入图像
插入 Flash 插入代码 插入引用
插入列表 插入音频文件 插入视频文件
插入缩进符合
点击下载按钮 下标 上标
水平线 简介分割标记
表  情
 
Tiancao Blog All Rights Reserved 田草博客 版权所有
Copyright ©