Changing a block normally means opening the block editor, or exploding and redefining it. BLOCKABSORB lets you draw the addition exactly where you want it to appear, pick the block, and have the geometry absorbed into the definition — so it appears on every reference of that block throughout the drawing.
What BlockAbsorb does
Draw the new geometry in place, on top of an existing block reference, positioned the way it should look. Run the command, select those objects, then pick the block. The objects land in the definition in exactly the position they were drawn, relative to the reference you picked.
That is the whole appeal: you are working in the drawing, at the right scale and rotation, against the surrounding geometry — not in the block editor guessing at where things go relative to an origin you cannot see.
How to use it
- Load the routine with
APPLOAD, or put it on your support file search path. - Draw the new geometry where you want it to appear, over an existing reference of the target block.
- Type
BLOCKABSORB. - Select the objects to absorb.
- Pick the block reference to absorb them into.
How it works
The transformation is the whole problem. Geometry inside a block definition is stored relative to the block’s own origin, unrotated and unscaled. The objects you have just drawn are in world coordinates, positioned relative to a block reference that may be rotated, scaled and inserted anywhere.
So before they can be copied into the definition, they must be transformed by the inverse of the picked reference’s placement — undoing its rotation, its scale and its insertion offset. That reverse geometry matrix is what makes “draw it where you want it” work at all.
A block cannot contain itself, directly or through any chain of nesting. Before proceeding, the routine maps out which blocks reference which and refuses if the target block appears anywhere inside the selection, however deeply. Without that check the drawing would end up with a circular definition, which corrupts it — and the corruption would not be apparent until something tried to regenerate.
Notes and limits
- Dynamic blocks are not supported. Their definitions are generated per reference and there is no single stable definition to add to. Checked at selection time.
- Non-uniformly scaled references are not supported, because the inverse transformation would distort the added geometry. Also checked at selection time rather than failing part way through.
- Circular references are refused. The target block cannot appear anywhere within the selection, at any depth.
- Every reference changes. That is the point, but it means checking one is not enough — the addition appears everywhere the block is used.
Download and details
| Name | BlockAbsorb — add selected objects into an existing block definition |
| Download | BlockAbsorb.lsp — 14.7 KB, plain AutoLISP source. Downloads directly; no zip to unpack. |
| Type | AutoCAD AutoLISP routine |
| Command | BLOCKABSORB |
| Requires | the ActiveX layer (loaded automatically by the routine with vl-load-com). |
| Source size | 14.7 KB, 353 lines |
| Error handling | Yes — a *error* handler restores every system variable it changed, on cancel as well as on error. |
| Undo | The whole operation is wrapped in a single undo group, so one U reverses all of it. |
| Compatibility | AutoCAD (any release with AutoLISP), BricsCAD, ZWCAD, GstarCAD, ProgeCAD and other IntelliCAD-based platforms. AutoCAD LT needs a LISP enabler. No .NET, no ObjectARX, no installer. |
| Author | YZ, August 2026 |
| Licence | Free to use, supplied “as is” with no warranty. |
References
- BLOCKPROMOTE LISP — the opposite job: pull a nested block out to the top level
- UPDBLOCK LISP — change layer or colour inside block definitions
- FixBlock LISP — reset block entities to layer 0
- More free AutoLISP routines on this site
- Wisey’s Steel Shapes — free structural steel section drawing program