Solution · Floor plan extraction

Turn floor plan drawings into geometry your application can measure.

Property, construction, and facilities software keeps receiving DWG and DXF floor plans and needing numbers out of them. CADLens parses the file and returns sheets, layers, and per-entity geometry with bounding boxes and metrics — in the drawing's own units — over a single REST call.

Start free · 50 parses/mo →View documentationSee example output
01THE PIPELINE

From a drawing file to addressable geometry.

DWG / DXF
     ↓
sheets         one per layout — extents, area, perimeter, preview
     ↓
layers         names, colours, per-layer entity counts
     ↓
entities       typed geometry with coordinates in drawing units
     ↓
your app       measurement, routing, indexing, display

Nothing in that chain is inferred. Each level is a structure that already exists in the drawing, made explicit and queryable. The bundled sample shows exactly this shape for a real DWG file — 4 layers, 2,096 entities, extents in mm.

02WHAT YOU GET PER ENTITY

Geometry, and the measurements already computed.

Every entity arrives in the same envelope regardless of type, so your code has one shape to handle:

  • geometry — spatial data only, at the original CAD precision. Vertices for polylines; centre, radius and angles for arcs; insertion point and rotation for text.
  • bboxminX, minY, maxX, maxY. Always present, so spatial indexing and hit-testing need no preprocessing pass.
  • metricslength, area, perimeter, vertexCount, with null where a value does not apply rather than a misleading approximation.
  • layer, category, properties — layer name, one of Geometry / Annotation / BlockReference / Hatch / Other, and display attributes such as colour index and line type.

Sheet-level boundingBox, area, and perimeter come back too, which is often all a floor-area estimate needs.

03WHERE THE MEANING COMES FROM

Layer conventions are the semantic layer.

CADLens deliberately does not guess what a polyline represents. What it does give you is the layer structure the draughtsman used, with per-layer entity counts, so you can route geometry by the conventions your industry already follows — AIA layer names, a client's in-house standard, or whatever your customers actually send.

That boundary matters for the same reason type safety does: a parser that quietly labelled a line "wall" would be wrong on some fraction of drawings and you would have no way to tell which. A layer name is a fact from the file. Your mapping from layer names to meaning is a decision you can test, version, and correct.

04PNG IS NOT A SUBSTITUTE

A preview shows the plan. It doesn't answer questions about it.

Plenty of tools convert CAD to PNG or PDF. That is genuinely useful for display, and CADLens renders a preview per sheet for exactly that reason. But a raster image cannot tell you which polyline is on A-WALL, how long it is in millimetres, or how many door blocks sit on level two. Those questions need entities.

The distinction is the whole point of the product: CAD → PNG is a rendering problem, while CAD → entities / layers / geometry / metrics is a data problem. See DWG to image vs DWG to JSON for the longer comparison.

05 — FAQ

Questions, answered.

No, and it is important to be precise about that. CADLens returns what the file contains: typed entities (LINE, LWPOLYLINE, ARC, CIRCLE, TEXT, HATCH, INSERT), the layer each sits on, coordinates in the drawing’s units, and computed bbox and metrics. It does not classify geometry semantically. In practice most floor plans encode that meaning in layer names and blocks — A-WALL, A-DOOR, and so on — so your application maps layers to concepts using conventions you control.

TEXT and MTEXT entities come back with category "Annotation" and a text object holding value, height and style, plus the insertion position and a bounding box. Pairing a label with an enclosing boundary is geometry work your application does with the coordinates provided.

Each layout comes back as its own object in sheets[], with its own entities, layers, bounding box, area, perimeter, and PNG preview URL. Model space and paper-space layouts are both represented, so a drawing set stays addressable sheet by sheet rather than collapsing into one blob.

Block inserts appear as entities with category "BlockReference" carrying the block name and insertion geometry. Dimension entities are mapped by the parser to inserts of their anonymous dimension block, so they surface as BlockReference rather than a dedicated dimension type.

The drawing’s own units, unchanged — file.units reports which (mm in the bundled sample). Nothing is rescaled to pixels or normalised, so measurements you compute are measurements in the drawing.

Per-upload file size is capped by plan, from 10 MB on the free plan up to 1 GB on Enterprise. Large drawings are converted and parsed asynchronously: POST returns a job, and you poll or receive a webhook when it completes.

START FREE

Parse a floor plan today.

The free plan includes 50 parse requests per month. No credit card, and keys are issued as soon as you sign in.

Start free · 50 parses/mo View documentationSee example output
— RELATED

Keep reading.