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”。
期待不断完善!

原文地址:https://www.cnblogs.com/MakeView660/p/12330242.html