View Issue Details

IDProjectCategoryView StatusLast Update
0002205FreeCADFeaturepublic2016-01-19 02:06
Reporteryorik Assigned Toyorik  
PrioritynormalSeverityminorReproducibilityN/A
Status closedResolutionfixed 
PlatformPCOSDebianOS VersionTesting 64bit
Fixed in Version0.16 
Summary0002205: Draft - Recode a DXF importer in C++
DescriptionThe current importer is way too slow for big files.
Maybe borrow dxf import code from heekscad:
https://github.com/Heeks/heekscad/tree/master/src
see HDxf.cpp (reimplements/extends dxf.cpp)
TagsNo tags attached.
FreeCAD Information

Activities

lambda

2015-08-04 13:40

reporter   ~0006266

The main problem I had with big files and DXF export has been that FreeCAD consumes insane amounts of memory, which probably is more related to the algorithm then to the programming language. I was wondering if ezdxf by Manfred Moitzi http://bitbucket.org/mozman/ezdxf might be a suitable base for future DXF support. Did anybody look into this?

I notice that you wrote only about import, while I wrote about export, but I guess support for both should come from the some codebase if possible.

yorik

2015-08-04 13:54

administrator   ~0006267

The problem of the amount of memory is indeed not related to the programming language, but the speed is. Python is notoriously slow at treating huge lists of objects, which is exactly the case of a dxf file...

In any case recoding this from scratch with a simpler and faster code is the way to go,and doing it in C++ even better.

The ezdxf module you mention is pretty similar to the one we currently use, that comes from blender... There shouldn't be much difference in efficiency.

Export is actually less of a problem, because 1) You usually work with far less objects in FreeCAD and 2) We already have pretty fast dxf export code in the Drawing WB, it could just be extended...

yorik

2016-01-03 19:14

administrator   ~0006664

Almost done, still missing: dimensions support

Related Changesets

FreeCAD: master d5f80ff6

2015-08-11 00:55:59

yorik

Details Diff
Draft: Starting a C++ DXF importer - issue 0002205 Affected Issues
0002205
add - src/Mod/Draft/App/AppDraftUtils.cpp Diff File
add - src/Mod/Draft/App/AppDraftUtilsPy.cpp Diff File
add - src/Mod/Draft/App/CMakeLists.txt Diff File
add - src/Mod/Draft/App/DraftDxf.cpp Diff File
add - src/Mod/Draft/App/DraftDxf.h Diff File
add - src/Mod/Draft/App/PreCompiled.cpp Diff File
add - src/Mod/Draft/App/PreCompiled.h Diff File
add - src/Mod/Draft/App/dxf.cpp Diff File
add - src/Mod/Draft/App/dxf.h Diff File
mod - src/Mod/Draft/CMakeLists.txt Diff File

FreeCAD: master 51cff8f0

2015-08-12 15:23:55

yorik

Details Diff
Draft: Added blocks support to the new dxf importer 0002205 Affected Issues
0002205
mod - src/Mod/Draft/App/DraftDxf.cpp Diff File
mod - src/Mod/Draft/App/DraftDxf.h Diff File
mod - src/Mod/Draft/App/dxf.cpp Diff File
mod - src/Mod/Draft/App/dxf.h Diff File

FreeCAD: master 9d10f3e0

2015-08-13 15:06:43

yorik

Details Diff
Draft: Added text support to new DXF importer - issue 0002205 Affected Issues
0002205
mod - src/Mod/Draft/App/DraftDxf.cpp Diff File
mod - src/Mod/Draft/App/DraftDxf.h Diff File

FreeCAD: master 273131c0

2016-01-04 21:01:34

yorik

Details Diff
Draft: finished new DXF importer - fixes 0002205 Affected Issues
0002205
mod - src/Mod/Draft/App/DraftDxf.cpp Diff File
mod - src/Mod/Draft/App/DraftDxf.h Diff File
mod - src/Mod/Draft/App/dxf.cpp Diff File

Issue History

Date Modified Username Field Change
2015-08-03 14:25 yorik New Issue
2015-08-03 14:25 yorik Status new => assigned
2015-08-03 14:25 yorik Assigned To => yorik
2015-08-04 13:40 lambda Note Added: 0006266
2015-08-04 13:54 yorik Note Added: 0006267
2015-08-10 22:56 yorik Changeset attached => FreeCAD Master master d5f80ff6
2015-08-12 13:26 yorik Changeset attached => FreeCAD Master master 51cff8f0
2015-08-13 18:56 yorik Changeset attached => FreeCAD Master master 9d10f3e0
2016-01-03 19:14 yorik Note Added: 0006664
2016-01-04 20:01 yorik Changeset attached => FreeCAD Master master 273131c0
2016-01-04 20:01 yorik Status assigned => closed
2016-01-04 20:01 yorik Resolution open => fixed
2016-01-19 02:06 yorik Fixed in Version => 0.16