cad2svg is a simple Linux command-line utility that automatically converts AutoCAD files (both dwg and dxf) to SVG.
This utility works and has been tested on Linux (RedHat 8, 9 and FC1, FC2, FC3, FC4). It should work on most x86 Linux distribution without change, and it would certainly not take too much to adapt it to Windows.
Capabilities
Since this is a command-line utility, it is perfect for batch jobs.
Capabilities:
- Output either compressed (
.sgvz) or standard (.svg) SVG (use the -z or --compress option)
- Quality of output is modifiable (use the
-g or --geometry WxH option)
- Supplied binary is standalone and does not depend on other installed libraries.
- Produced SVG is saved to
filename.svg or .svgz by default but can be saved to any file (use -o or --name outputfile option)
- Indicative performance (no formal tests were performed): it takes 2.2s to convert a 5.1MB dxf file into a compressed SVG file on an Athlon XP 1900 with 1GB of RAM. On more modern hardware this now takes a fraction of a second.
Limitations
Before you decide if this utility is right for you, note the following limitations:
- the produced SVG is a preview representation of the drawing: objects outlines are broken down into simple lines segments (polylines). This means that the produced graphic has lost all notion of the original cad objects (even curves are approximated into sets of line segments).
- Text is also broken down into a set of lines, so it is not searchable. There is also currently no link to external fonts, so there are all rendered into a default sans-serif font outline. Non-latin text strings are rendered as garbage. See cad2text for text extraction.
- There is a limit to the quality and precision of the output SVG: I wanted to do this to limit the size of the resulting file to the display size I was using, while still allowing a reasonable zoom factor for details. The advantage of this approach is that large AutoCAD files are converted into rather small SVG files. The drawback is that the resulting graphic is not very nice when zooming on details. The quality of the output is modifiable on the command line.
- Some objects may not be converted at all: bitmap graphics are ignored for instance.
- See the test sample below to check-out what works and what doesn't.
Please bear in mind that this utility is only meant to produce a preview of AutoCAD files. Do not depend on its output to be accurate enough to replace the original drawing in a decision process!
If you need a converter that does a better job, there is a commercial software available (no affiliation to me and I have not tested it):
http://www.savagesoftware.com/
Example
This example is a converted test dwg file of 229KB converted to a 70KB compressed SVG (236KB uncompressed).
To view this svg file you will need Firefox or use a free Adobe or Corel plug-in.
Note that Firefox has native support for SVG but does not appear to support compressed SVGZ.
Why?
I needed a way to display AutoCAD files (both dwg and dxf files) on our intranet. This utility is part of a larger drawing management system that collects information from CAD files from our file servers and stores them in a database for easy search.
Installation
The download package contains both a pre-compiled binary for Linux RedHat/Fedora (that should work on any x86 Linux) and the source code.
If you encounter issues, please let me know.
It is important to note that this utility relies on the OpenDesign Alliance OpenDWG Toolkit and Viewkit libraries.
It is no longer free (US$250 first time/US$100 yearly renewal fee) to become a basic Associate Member and you need to sign an agreement and you cannot redistribute the library or use them in commercial products. This is why there is a pre-compiled version of cad2svg included: you can use this free software, but to compile it yourself, you'll need to obtain the library from the OpenDesign Alliance.
The pre-compiled package is a static binary, so there is no pre-requisite requirements to use it.
Compile
Do this only if you need to.
Pre-requisites:
- binutils (they should be already installed, otherwise,
apt-get? install binutils)
- gcc (any version less than 2 year old should work and should already be installed on your machine, otherwise,
apt-get? install gcc)
- zlib (it is usually pre-packaged for each linux distribution. For RedHat for instance, you need to install the
zlib-devel-xxx.rpm package with apt-get? install zlib-devel)
I know it's bad, but there is no makefile for this.
Once you have the necessary libraries from the OpenDWG kits, untar the provided cad2svg source and copy the following OpenDWG Linux files in your cad2svg directory:
ad2.a, ad2.h
ad3.a, ad3.h
adinit.a
We first need to transform the adinit.dat into an object file to be able to include it into our binary. This file contains initialisation code and data and must be included in your project for it to work:
objcopy -I binary -O elf32-i386 -B i386 adinit.dat adinit.a
Then just compile it all together:
gcc -Wall -o cad2svg cad2svg.c ad2.a ad3.a adinit.a -lm -lz --static
License
This software is free to use and modify but can only be used in non-commercial application and must be redistributed along with its original and modified source code.
If you modify it and other could benefit from your change, then send me back your modifications so I can integrate them in the next version.
Download
Versions
- 1.0: JAN 2004, Original
- 1.1: 18JUL2008, added original file size to verbose option printout.
See also
alfredoSaturday 09 August 2008, at 01:26 GMT+8 [X] thanks for the job. It is a pity that it is no longer free to associate to the OpenDesign Alliance, I would have liked to see the code 'under the hood'
194.79.25.7Wednesday 20 August 2008, at 16:45 GMT+8 [X] great converter