Blocks inherited from elsewhere routinely have their base point somewhere arbitrary, so they never snap where you want them. BASESNAP puts it on a corner or the middle of the block’s own bounding box, chosen from a nine-point grid exactly like text justification — for any number of blocks at once.
What BaseSnap does
Pick the justification from the grid, pick the blocks, and every selected block definition has its base point moved to that position on its own extents. Bottom-left, centre, top-right and the six in between.
Two methods, and the difference matters. Retain visual position moves every reference to compensate, so nothing appears to shift and the insertion coordinates change instead — usually what you want. Retain insertion point position keeps the coordinates and lets the geometry swing around them, which is what you need when blocks sit at meaningful coordinates like survey points or grid intersections.
Your choice of justification and method is remembered between sessions.
How to use it
- Load the routine with
APPLOAD, or put it on your support file search path. - Type
BASESNAP. - Pick the justification point from the nine-point grid.
- Choose the method — retain visual position, or retain insertion coordinates.
- Select the blocks. Any number, and they need not be the same block.
- If you undo afterwards, run
REGEN— see the note below.
How it works
Text, MText and attribute definitions are deliberately excluded from the measurement. A block’s label often extends well beyond its geometry, and including it would put the “bottom-left” corner somewhere in empty space below the drawing. Only real geometry counts, which is what makes the result match where you would have put the base point by eye.
Nested blocks are measured properly, by recursing into them and transforming the result by each nesting level’s placement. A block containing a rotated, scaled sub-block still gets an accurate bounding box.
Attributed blocks get an ATTSYNC afterwards, so their attributes follow the new base point instead of staying where they were and drifting away from the block that owns them.
Notes and limits
- After an undo, run REGEN. The change is undone correctly but the display does not refresh on its own, so the drawing looks unchanged until you regenerate.
- Choose the method deliberately. Retaining the visual position changes the insertion coordinates; retaining the coordinates moves the geometry.
- The box is the geometry, not the label. If a block looks like it justified to the wrong place, check whether you were expecting the text to be included — it is not.
- It changes block definitions, so every reference of each selected block is affected.
Download and details
| Name | BaseSnap — justify block base points to a corner or centre |
| Download | BaseSnap.lsp — 27.4 KB, plain AutoLISP source. Downloads directly; no zip to unpack. |
| Type | AutoCAD AutoLISP routine |
| Command | BASESNAP |
| Requires | the ActiveX layer (loaded automatically by the routine with vl-load-com); nothing extra — the dialog is written to a temporary file at run time and deleted again, so there is no .dcl to install. |
| Source size | 27.4 KB, 658 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
- BASEPIN LISP — move a base point to a picked point rather than a corner
- BSCALE LISP — scale blocks about their own insertion point
- More free AutoLISP routines on this site
- Wisey’s Steel Shapes — free structural steel section drawing program