之前文章调研过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”。
期待不断完善!