zoukankan      html  css  js  c++  java
  • dxf文件解析库libdxf初探

    之前文章调研过dxflib和libdxfrw,查找资料发现还有一个类似的库libdxf,本文初探一下这个库。
    官方说明:
    libDXF is a library (written in C) with DXF related functions.
    The Drawing eXchange Format (DXF) is a defacto industry standard for the exchange of drawing files between various Computer Aided Drafting programs, designed by Autodesk(TM).
    Currently this project has a "Work in progress" status.
    The code base is still incomplete and is not debugged to an acceptable level.
    You are always welcome to help with patches or bug reports :-)
    For more information see the libDXF repository on Github or the project page on Launchpad.
    For statistics see BlackDuck | Open HUB.

    github地址:https://github.com/bert/libdxf
    该项目目前正在发展中,直接的意思就是不是很成熟,有待进一步发展。
    下载当前源码后解压,里面只有一个autogen.sh可用。

    尝试Windows平台使用
    编写CMakeLists.txt

    cmake_minimum_required(VERSION 3.8.0)
    project(libdxf)
    # Find source files
    file(GLOB SOURCES src/*.c)
    # Include header files
    include_directories(src)
    # Create shared library
    add_library(${PROJECT_NAME} SHARED ${SOURCES})
    # Install library
    install(TARGETS ${PROJECT_NAME} DESTINATION lib/${PROJECT_NAME})
    # Install library headers
    file(GLOB HEADERS src/*.h)
    install(FILES ${HEADERS} DESTINATION include/${PROJECT_NAME})


    最终生成VS2017工程,打开进行构建。

     使用Qt进行编译:libdxf.pro

      1 #-------------------------------------------------
      2 #
      3 # Project created by QtCreator 2020-02-19T09:52:44
      4 #
      5 #-------------------------------------------------
      6 
      7 QT       -= core gui
      8 
      9 TARGET = libdxf
     10 TEMPLATE = lib
     11 CONFIG += staticlib
     12 
     13 # The following define makes your compiler emit warnings if you use
     14 # any feature of Qt which has been marked as deprecated (the exact warnings
     15 # depend on your compiler). Please consult the documentation of the
     16 # deprecated API in order to know how to port your code away from it.
     17 DEFINES += QT_DEPRECATED_WARNINGS
     18 
     19 # You can also make your code fail to compile if you use deprecated APIs.
     20 # In order to do so, uncomment the following line.
     21 # You can also select to disable deprecated APIs only up to a certain version of Qt.
     22 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
     23 
     24 SOURCES += 
     25         src/3dface.c 
     26         src/3dline.c 
     27         src/3dsolid.c 
     28         src/acad_proxy_entity.c 
     29         src/appid.c 
     30         src/arc.c 
     31         src/attdef.c 
     32         src/attrib.c 
     33         src/binary_data.c 
     34         src/binary_entity_data.c 
     35         src/binary_graphics_data.c 
     36         src/block.c 
     37         src/block_record.c 
     38         src/body.c 
     39         src/circle.c 
     40         src/class.c 
     41         src/color.c 
     42         src/comment.c 
     43         src/dictionary.c 
     44         src/dictionaryvar.c 
     45         src/dimension.c 
     46         src/dimstyle.c 
     47         src/donut.c 
     48         src/drawing.c 
     49         src/ellipse.c 
     50         src/endblk.c 
     51         src/endsec.c 
     52         src/endtab.c 
     53         src/entities.c 
     54         src/entity.c 
     55         src/file.c 
     56         src/group.c 
     57         src/hatch.c 
     58         src/header.c 
     59         src/helix.c 
     60         src/idbuffer.c 
     61         src/image.c 
     62         src/imagedef.c 
     63         src/imagedef_reactor.c 
     64         src/insert.c 
     65         src/layer.c 
     66         src/layer_index.c 
     67         src/layer_name.c 
     68         src/leader.c 
     69         src/light.c 
     70         src/line.c 
     71         src/ltype.c 
     72         src/lwpolyline.c 
     73         src/mesh.c 
     74         src/mleader.c 
     75         src/mleaderstyle.c 
     76         src/mline.c 
     77         src/mlinestyle.c 
     78         src/mtext.c 
     79         src/object.c 
     80         src/object_id.c 
     81         src/object_ptr.c 
     82         src/ole2frame.c 
     83         src/oleframe.c 
     84         src/point.c 
     85         src/polyline.c 
     86         src/proprietary_data.c 
     87         src/rastervariables.c 
     88         src/ray.c 
     89         src/region.c 
     90         src/rtext.c 
     91         src/section.c 
     92         src/seqend.c 
     93         src/shape.c 
     94         src/solid.c 
     95         src/sortentstable.c 
     96         src/spatial_filter.c 
     97         src/spatial_index.c 
     98         src/spline.c 
     99         src/style.c 
    100         src/sun.c 
    101         src/surface.c 
    102         src/table.c 
    103         src/tables.c 
    104         src/text.c 
    105         src/thumbnail.c 
    106         src/tolerance.c 
    107         src/trace.c 
    108         src/ucs.c 
    109         src/util.c 
    110         src/vertex.c 
    111         src/view.c 
    112         src/viewport.c 
    113         src/vport.c 
    114         src/xline.c 
    115         src/xrecord.c
    116 
    117 HEADERS += 
    118         src/3dface.h 
    119         src/3dline.h 
    120         src/3dsolid.h 
    121         src/acad_proxy_entity.h 
    122         src/appid.h 
    123         src/arc.h 
    124         src/attdef.h 
    125         src/attrib.h 
    126         src/binary_data.h 
    127         src/binary_entity_data.h 
    128         src/binary_graphics_data.h 
    129         src/block.h 
    130         src/block_record.h 
    131         src/body.h 
    132         src/circle.h 
    133         src/class.h 
    134         src/color.h 
    135         src/comment.h 
    136         src/dbg.h 
    137         src/dictionary.h 
    138         src/dictionaryvar.h 
    139         src/dimension.h 
    140         src/dimstyle.h 
    141         src/donut.h 
    142         src/drawing.h 
    143         src/dxf.h 
    144         src/ellipse.h 
    145         src/endblk.h 
    146         src/endsec.h 
    147         src/endtab.h 
    148         src/entities.h 
    149         src/entity.h 
    150         src/file.h 
    151         src/global.h 
    152         src/group.h 
    153         src/hatch.h 
    154         src/header.h 
    155         src/helix.h 
    156         src/idbuffer.h 
    157         src/image.h 
    158         src/imagedef.h 
    159         src/imagedef_reactor.h 
    160         src/insert.h 
    161         src/layer.h 
    162         src/layer_index.h 
    163         src/layer_name.h 
    164         src/leader.h 
    165         src/light.h 
    166         src/line.h 
    167         src/ltype.h 
    168         src/lwpolyline.h 
    169         src/mesh.h 
    170         src/mleader.h 
    171         src/mleaderstyle.h 
    172         src/mline.h 
    173         src/mlinestyle.h 
    174         src/mtext.h 
    175         src/object.h 
    176         src/object_id.h 
    177         src/object_ptr.h 
    178         src/ole2frame.h 
    179         src/oleframe.h 
    180         src/param.h 
    181         src/point.h 
    182         src/polyline.h 
    183         src/proprietary_data.h 
    184         src/rastervariables.h 
    185         src/ray.h 
    186         src/region.h 
    187         src/rtext.h 
    188         src/section.h 
    189         src/seqend.h 
    190         src/shape.h 
    191         src/solid.h 
    192         src/sortentstable.h 
    193         src/spatial_filter.h 
    194         src/spatial_index.h 
    195         src/spline.h 
    196         src/style.h 
    197         src/sun.h 
    198         src/surface.h 
    199         src/table.h 
    200         src/tables.h 
    201         src/text.h 
    202         src/thumbnail.h 
    203         src/tolerance.h 
    204         src/trace.h 
    205         src/ucs.h 
    206         src/util.h 
    207         src/vertex.h 
    208         src/view.h 
    209         src/viewport.h 
    210         src/vport.h 
    211         src/xline.h 
    212         src/xrecord.h
    213 unix {
    214     target.path = /usr/lib
    215     INSTALLS += target
    216 }
    217 
    218 DISTFILES += 
    219     src/Makefile.am 
    220     src/libdxf.pc.in

    构建生成静态库文件libdxf.a

     同样滴,例子tests.pro

     1 QT -= gui
     2 
     3 CONFIG += c++11 console
     4 CONFIG -= app_bundle
     5 
     6 # The following define makes your compiler emit warnings if you use
     7 # any Qt feature that has been marked deprecated (the exact warnings
     8 # depend on your compiler). Please consult the documentation of the
     9 # deprecated API in order to know how to port your code away from it.
    10 DEFINES += QT_DEPRECATED_WARNINGS
    11 
    12 # You can also make your code fail to compile if it uses deprecated APIs.
    13 # In order to do so, uncomment the following line.
    14 # You can also select to disable deprecated APIs only up to a certain version of Qt.
    15 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
    16 
    17 SOURCES += 
    18         test_point.c 
    19         tests.c
    20 
    21 # Default rules for deployment.
    22 qnx: target.path = /tmp/$${TARGET}/bin
    23 else: unix:!android: target.path = /opt/$${TARGET}/bin
    24 !isEmpty(target.path): INSTALLS += target
    25 
    26 HEADERS += 
    27     includes.h
    28 
    29 INCLUDEPATH +=../
    30 
    31 win32: LIBS += -L$$PWD/../build/bin/MinGW_32_Debug/debug/ -llibdxf
    32 
    33 INCLUDEPATH += $$PWD/../build/bin/MinGW_32_Debug/debug
    34 DEPENDPATH += $$PWD/../build/bin/MinGW_32_Debug/debug
    35 
    36 win32:!win32-g++: PRE_TARGETDEPS += $$PWD/../build/bin/MinGW_32_Debug/debug/libdxf.lib
    37 else:win32-g++: PRE_TARGETDEPS += $$PWD/../build/bin/MinGW_32_Debug/debug/liblibdxf.a

    Qt构建成功!test.c用于读取dxf文件,test_point.c是一个写操作例子。

     1 /*!
     2  * rief Reads a dxf file using libdxf form examples dir.
     3  *
     4  * version According to DXF R2000.
     5  */
     6 int main (void)
     7 {
     8     if (dxf_file_read ("../../examples/qcad-example_R2000.dxf"))
     9         fprintf (stdout, "TESTS: R2000 exited with error
    ");
    10     else
    11         fprintf (stdout, "TESTS: R2000 exited with no error
    ");
    12     
    13     return 1;
    14 }

    但是运行时,读取dxf文件一直错误,看来这个库确实还存在不少bug,这就是所谓的“work in progress”。
    期待不断完善!

  • 相关阅读:
    40个你可能不知道的Python的特点和技巧
    Python Streaming实战2: Join的实现与数据过滤
    python + Streaming框架的MR实践与优化
    python编码最佳实践之总结
    Python自然语言处理系列之模拟退火算法
    Python自然语言处理
    机器学习实践中的 7 种常见错误
    玩转python主题模型程序库gensim
    Python自然语言处理
    glusterfs
  • 原文地址:https://www.cnblogs.com/MakeView660/p/12330242.html
Copyright © 2011-2022 走看看