Search Site:

About

Linux

Printers?

Programming

Windows?

Download

Skins

Edit - To Do - AllRecentChanges

Recent Changes Printable View Page History Edit Page

cad2text is a simple Linux command-line utility that automatically reads AutoCAD files (both dwg and dxf) and extract text strings and their drawing co-ordinates.

This utility works and has been tested on Linux (RedHat 8, 9 and FC1, FC2, FC3). 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:

  • Prints on standard output a tab-separated list of 4 columns containing: the text string found and its x, y and z location in the drawing coordinate system.
  • Works with both simple text and mtext strings.
  • Supplied binary does not depend on installed libraries
  • Indicative performance (no formal tests were performed): it took 2.2s to convert a 5.1MB dxf file into the compressed SVG file in the example below on an Athlon XP 1900 with 1GB of RAM.

Limitations

Before you decide if this utility is right for you, note the following limitiations:

  • strings are output as they are stored in the AutoCAD file. It's up to you to interpret the codepage used if it is different from standard latin.
  • AutoCAD special character escape sequences are not interpreted, so you may need to take care of those separately in multiline text (for isntance \P indicates a newline escape sequence.
  • Some software sometimes explodes text into graphic line segments in DXF files. For those files, it may look as if there is text in the drawing, but there is in fact nothing meaningful that can be extracted (your would need some sort of OCR for that).

Please bear in mind that this utility may not be suitable for jobs that require highly accurate information. Do not depend on its output to be accurate enough to replace the original drawing in a decision process!

Example

Below is a sample output from the utility:

# ./cad2text drawing.dwg

LCS\POPB\PCPB 91.5377 279.3607 0.0000
\PBOS 170.8706 422.7293 0.0000
\PBOS 170.8706 275.9461 0.0000

Notice the \P escape sequence within strings that are to be interpreted as newlines.

Why?

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.

Being able to make arbitrary searches on drawing content is very useful.

Installation

The download package contains both a pre-compiled binary for Linux RedHat (that should work on any x86 Linux) and the source code.

It is important to note that this utility relies on the OpenDesign Alliance OpenDWG Toolkit and Viewkit libraries. It is free to become a basic Associate Member, but 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 librairies 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 cad2text cad2text.c ad2.a ad3.a adinit.a -lm --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.

Please note that the source code is inspired in part on the mtext2text example given in the Open Design Alliance Toolkit.

Download

See also

Comments
196.206.10.189Thursday 29 June 2006, at 23:26 GMT+8 [X]
merci
Enter your comment (no links allowed): Author:

Edit Page - Page History - Printable View - Recent Changes - WikiHelp - Search - RSS -
Page last modified on Thursday 11 January 2007, at 11:34 GMT+8 - Viewed 3130 times