EXCEL VBA读取DXF文件

因业务要求,需要读取DXF文件

开发环境:Excel 2013

Option Explicit
    
Dim dxfFile As String

Dim linesCount As Integer
'Start Point(x,y)、End Point(x,y)
'Parameters count: 4 Double
Dim Lines()

Dim circlesCount As Integer
'Arc Center(x,y)、Radius
'Parameters count: 3 Double
Dim Circles()

Dim arcsCount As Integer
'Arc Center(x,y)、Radius、StartAngle、EndAngle
'Parameters count: 5 Double
Dim Arcs()
    

'redim 将数组的数值也初始化了
Sub GetDXFEntities(ByVal maxCount As Integer)
    ReDim Lines(maxCount, 4) As Variant
    ReDim Circles(maxCount, 3) As Variant
    ReDim Arcs(maxCount, 5) As Variant

    linesCount = 0
    circlesCount = 0
    arcsCount = 0

    Dim strSection As String
    
    dxfFile = "input.dxf"
    strSection = "ENTITIES"
    
    Dim lastObj As String
    
    linesCount = 0
    
    Dim codes As Variant
    
    Open dxfFile For Input As #1
    ' 获取第一个代码/值对
    codes = ReadCodes()
    ' 遍历整个文件,直到“EOF”行
    While codes(1) <> "EOF"
        ' 如果组码为“0”,并且值为“SECTION”,则
        If codes(0) = "0" And codes(1) = "SECTION" Then
            ' 这必须是一个新的段,以便获取下一个代码/值对。
            codes = ReadCodes()
            ' 如果此段是要获取的段,则
            If codes(1) = strSection Then
                ' 获取下一个代码/值对,并
                codes = ReadCodes()
                ' 遍历此段,直到“ENDSEC”
                While codes(1) <> "ENDSEC"
                    ' 在某一段中,所有的“0”代码都表示对象。如果找到了“0”代码,则存储
                    ' 对象名称,供以后使用。
                    If codes(0) = "0" Then lastObj = codes(1)
                    ' 如果此对象是用户所需的对象,
                    If lastObj = "LINE" Then
                        If codes(0) = 5 Then
                            linesCount = linesCount + 1
                        ElseIf codes(0) = 10 Then
                            Lines(linesCount, 1) = codes(1)
                        ElseIf codes(0) = 20 Then
                            Lines(linesCount, 2) = codes(1)
                        ElseIf codes(0) = 11 Then
                            Lines(linesCount, 3) = codes(1)
                        ElseIf codes(0) = 21 Then
                            Lines(linesCount, 4) = codes(1)
                        End If
                    ElseIf lastObj = "CIRCLE" Then
                        If codes(0) = 5 Then
                            circlesCount = circlesCount + 1
                        ElseIf codes(0) = 10 Then
                            Circles(circlesCount, 1) = codes(1)
                        ElseIf codes(0) = 20 Then
                            Circles(circlesCount, 2) = codes(1)
                        ElseIf codes(0) = 40 Then
                            Circles(circlesCount, 3) = codes(1)
                        End If
                    ElseIf lastObj = "ARC" Then
                        If codes(0) = 5 Then
                            arcsCount = arcsCount + 1
                        ElseIf codes(0) = 10 Then
                            Arcs(arcsCount, 1) = codes(1)
                        ElseIf codes(0) = 20 Then
                            Arcs(arcsCount, 2) = codes(1)
                        ElseIf codes(0) = 40 Then
                            Arcs(arcsCount, 3) = codes(1)
                        ElseIf codes(0) = 50 Then
                            Arcs(arcsCount, 4) = codes(1)
                        ElseIf codes(0) = 51 Then
                            Arcs(arcsCount, 5) = codes(1)
                        End If
                    End If
                    ' 读取其他代码/值对
                    codes = ReadCodes()
                Wend
            End If
        Else
            codes = ReadCodes()
        End If
    Wend
    Close #1
    
End Sub


' ReadCodes 从打开的文件中读取两行,并返回一个包含两个项目的数组、一个组码及其组码值。只要一次读取 DXF 文件中的两行代码,
' 所有程序应该都能够顺利运行。但为了使代码更可靠,应该添加一些进行错误检查和其他检查的代码。
Function ReadCodes() As Variant
    Dim codeStr, valStr As String
    Line Input #1, codeStr
    Line Input #1, valStr
    ' 修剪代码中的前导空格和后续空格
    ReadCodes = Array(Trim(codeStr), valStr)
End Function

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MFC(Microsoft Foundation Class)是微软公司提供的一套用于开发Windows应用程序的类库,它提供了一系列的类和函数,方便开发者进行Windows应用的开发。 而DXF(Drawing Exchange Format)是一种用于CAD(Computer-Aided Design,计算机辅助设计)软件的文件格式,用于存储二维或三维图形数据。 要在MFC中读取DXF文件,可以通过以下步骤完成: 1. 打开DXF文件:使用MFC提供的CFile类打开DXF文件,并进行读取操作。 2. 解析DXF文件DXF文件采用特定的文本格式,其中包含了用于描述图形的实体、图层、属性等信息。可以逐行读取DXF文件内容,并根据特定的关键字进行解析,将图形数据提取出来。 3. 创建图形对象:根据DXF文件中的图形数据,可以在MFC应用程序中创建相应的图形对象,如直线、圆等。可以使用MFC提供的GDI(Graphic Device Interface,图形设备接口)函数或自定义的类库来实现。 4. 显示图形:将创建的图形对象绘制到MFC应用程序的窗口中,可以使用MFC提供的绘图函数来实现。 需要注意的是,DXF文件的解析需要根据具体的DXF版本进行,不同的版本可能有一些差异。另外,MFC作为一个老旧的类库,可能并没有直接提供读取DXF文件的特定函数,需要根据自己的需求进行更多的开发和调试工作。 总之,通过以上步骤,可以在MFC应用程序中实现对DXF文件读取和显示,从而实现与CAD软件的交互和数据处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_16215957

如果有帮助一杯咖啡奶茶均可

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值