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  * \brief 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\n");
10     else
11         fprintf (stdout, "TESTS: R2000 exited with no error\n");
12     
13     return 1;
14 }

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

posted on 2020-02-19 10:55  我来乔23  阅读(2962)  评论(0编辑  收藏  举报

导航