Features
The free edition makes a drawing visible in QGIS — one drawing at a time. Pro turns a whole folder of them into data you can query and analyse.
| Feature | Free | Pro |
|---|---|---|
| Layers, colours, line types, hatches, text | yes | yes |
| How many drawings per run | one, by hand | a whole folder |
| Drawing text turned into shape attributes | — | yes |
| Batch conversion with a CSV report | — | yes |
| Open polylines closed into polygons | — | yes |
| Georeferencing from two reference points | — | yes |
| Elevations (Z) kept | — | yes |
| Mapping profiles | — | yes |
| Block attributes as fields | — | yes |
| Runs from the Processing toolbox / models | — | yes |
| Getting the converter | one button | bundled — no internet |
0. What both editions do — reading the drawing
This part is the same code in both editions. Nothing is held back to make the free edition worse: a drawing that opens correctly in Pro opens correctly free.
- One QGIS layer per CAD layer, split by geometry type
- Entity colour, line type (solid / dashed / dash-dot) and line width kept
- Text placed at its original size, rotation and colour
- Hatch patterns rebuilt from the drawing’s own definitions — not flattened to a solid blob
- Korean, Japanese and Chinese text read correctly whatever the drawing’s encoding says
- Optional GeoPackage output, and the coordinate system taken from your project
- Failures say why — unsupported format, empty drawing and timeout are told apart
The difference is how much of it you can do at once, and what you get back. Free is one drawing per run, through the import window, by hand, with no limit on how many. What Pro adds is below.
1. Block attributes as queryable fields
Most of the information in a drawing is not in the lines. It is in block attributes (ATTRIB): manhole numbers, pipe diameters, asset codes, parcel numbers. QGIS’s own importer does not bring these across. The drawing opens; the attributes are gone.
Pro builds one block-reference point layer per CAD layer and spreads every attribute tag found there into a field.
cad_layerandblock_namecome first, then the tag fields- Tags a block does not carry are left
NULL, so blocks with different tag sets still land in one layer - The original tag name is kept as the QGIS field alias, so a normalised field name loses nothing
Below is a room-information layer actually extracted from a public sample (a Swiss facility-management drawing), opened in the QGIS attribute table. 85 room-stamp blocks in the drawing became 85 rows with fields.
| block_name | FLAECHE | RAUMBEZ | RNR2 | B | W | D |
|---|---|---|---|---|---|---|
| bbl-raumstempel | 11.58 | Treppe | 2011.DM.04.001V | Beton gestrichen | Beton gestrichen | Beton gestrichen |
| bbl-raumstempel | 1.78 | Steigzone | 2011.DM.04.003F | |||
| bbl-raumstempel | 10.11 | Warenlift | 2011.DM.04.004V | Holz | Metall | Holz |
| bbl-raumstempel | 10.11 | Warenlift | 2011.DM.04.005V | Holz | Metall | Holz |
Sum the areas (FLAECHE), classify by room name (RAUMBEZ),
join to your register on the room number (RNR2). The door layer of the
same drawing produced 16 fields including fire rating, acoustic rating and size.
In the free edition this table does not exist at all.
2. Mapping profiles — CAD layers onto your schema
A hundred drawings arrive with a hundred layer namings. A-WALL-EXST,
A-WALL-NEW and A-WALL-2F are all the same building wall,
but QGIS receives three layers.
A profile is a list of glob-pattern rules. The first rule that matches wins, so order is priority.
{
"version": 1,
"name": "example",
"rules": [
{ "match": "A-WALL-*", "layer_name": "building_wall", "geometry": "polygon" },
{ "match": "*-TEXT", "layer_name": "annotation", "geometry": "point" }
],
"default": { "layer_name": "{cad_layer}", "geometry": "auto" }
}
Same drawing. Seven rules turned 23 layers into 10. The Defpoints at the
top matched no rule: it keeps its original name and is listed as unmatched,
so you know immediately whether something was left out.
- Several CAD layers merge into one output layer
geometryfixes the geometry type, orautosplits as the drawing does{cad_layer}is replaced by the original layer name- One JSON file, so a team can share it and keep it in git
You do not have to write the rules from scratch. Create example… in the dialog writes the file above, and you edit it in any text editor.
3. Batch folder conversion with a per-file report
Drawings usually arrive by the folder, not one at a time. The free edition converts one drawing per run — open the window, pick the file, pick the coordinate system, import, repeat. That is fine for one drawing and unusable for eighty.
- Point it at a folder and every DWG inside is converted. Subfolders optional
- One file failing does not stop the rest. It does not halt half way
- Per-file results go into a CSV report, so you can see later what failed and why
- The mapping profile and coordinate system apply to the whole run
- It runs as a Processing algorithm, so it goes into a model or a script and can be re-run on next month’s delivery unchanged
import processing
processing.run("echocad:batchimportdwg", {
"INPUT_FOLDER": "D:/deliveries/2026-03/dwg",
"RECURSIVE": True,
"CRS": "EPSG:5186",
"PROFILE": "D:/office/office-schema.json",
"EXTRACT_ATTRIBS": True,
"OUTPUT": "D:/work/gpkg",
"REPORT": "D:/work/report.csv",
})
Below is a real report from one run over a folder of nine drawings. One of them was an R13 file. The run did not stop there, and what failed and why is on the record.
| file | status | note | layers | features | sec |
|---|---|---|---|---|---|
| facility-2011-dm-a04.dwg | ok | 42 | 7,172 | 8.8 | |
| cafm-plan-de.dwg | ok | Dropped 1 features with broken coordinates | 23 | 3,517 | 3.9 |
| fire-station.dwg | ok | 13 | 3,621 | 2.2 | |
| floorplan-elevation.dwg | ok | 19 | 1,111 | 4.0 | |
| building-a-floor0.dwg | ok | 18 | 327 | 2.3 | |
| site-survey-3.dwg | unsupported | Format AC1012. Only R14 and newer are supported. | 0 | 0 | 0.0 |
| tourist-home.dwg | ok | Dropped 5 features with broken coordinates | 34 | 17,496 | 6.6 |
Features dropped for broken coordinates are counted too. Drop them silently and nobody can explain the missing count later.
The free edition registers no Processing algorithms at all. Everything there goes through the import window, one drawing at a time.
4. Converter bundled — works on an isolated network
The free edition gets its converter with a single Set up automatically button too — but only where there is internet. The converter (LibreDWG) is GPL-3, so it cannot ship inside the free edition.
Pro carries the Windows and macOS builds. Install it and it works. On macOS the execute permission and the quarantine flag are handled for you, so there is no reason to open a terminal.
Corresponding source for the bundled converter is pointed to in bin/SOURCE.md,
as GPL-3 requires.