English | Русский
Explore an AutoCAD drawing by layer, object type, and property. CAD Lens helps you find, select, focus on, and temporarily isolate objects without changing stored DWG geometry or properties.
Download the latest release · Installation · Report an issue
- Overview
- Install and run
- Language
- Use the Layers lens
- Use the Object Types lens
- Appearance
- Development
- Verification
- Layers: browse Layer → Type → Object and see how the drawing is organized.
- Object Types: browse Type → Object across layers, inspect properties, and combine property groups.
- Drawing controls: focus the camera, select objects in CAD, or temporarily isolate a target.
- Object scope: explore all direct objects in the active space or a captured CAD selection.
- Preferences: choose English or Russian, customize appearance, and keep separate settings for each lens.
The panel opens as a compact bar over the drawing. Activate a lens to explore; collapsing or closing it clears temporary isolation and restores the ordinary display. Drag the empty space in the header to move the panel.
The current bundle targets 64-bit Windows, AutoCAD 2019–2027, and Civil 3D 2019–2027, using WPF. It includes separate payloads selected automatically by the host:
| Host version | AutoCAD series | Bundle payload |
|---|---|---|
| AutoCAD / Civil 3D 2019–2020 | R23.0–R23.1 | Contents/net47 |
| AutoCAD / Civil 3D 2021–2024 | R24.0–R24.3 | Contents/net48 |
| AutoCAD / Civil 3D 2025 | R25.0 | Contents/net8.0-windows |
| AutoCAD / Civil 3D 2026 | R25.1 | Contents/net8.0-windows |
| AutoCAD / Civil 3D 2027 | R26.0 | Contents/net10.0-windows |
The 2019, 2021, and 2025 APIs cover their respective version ranges; AutoCAD 2027 uses the 2027 API and .NET 10. See Autodesk's managed .NET compatibility table. The 2019–2020 payload requires .NET Framework 4.7; the 2021–2024 payload requires .NET Framework 4.8. A compatible later .NET Framework 4.x runtime also satisfies these requirements; see Microsoft's version and dependency guide. These are the intended hosts; native compatibility needs verification in each host/version and update. AutoCAD 2018 and earlier, AutoCAD LT, and macOS are outside the current release scope.
The screenshots below show the production WPF interface with sample drawing data. They illustrate the interface and do not establish behavior inside AutoCAD or Civil 3D. See Verification.
- Open the latest GitHub release and download CadLens.bundle.zip from Assets.
- Extract the ZIP and copy the complete
CadLens.bundledirectory to%PROGRAMFILES%\Autodesk\ApplicationPlugins. - Restart AutoCAD or Civil 3D, open a DWG, and click CAD Lens on the Plug-Ins ribbon tab or run
CADLENS. - Press Layers or Objects in the compact bar to explore the active drawing space.
The bundle loads the plugin when CADLENS is invoked. Check the release notes and the
verification guide for evidence limits. See the privacy policy
for local preferences, diagnostic exports, and external links.
To update, close the host and replace the entire CadLens.bundle directory with the new one. To uninstall,
close the host and remove that directory. Do not replace plugin DLLs while the host is running.
Install the .NET 8 and .NET 10 SDKs and the .NET Framework 4.8 or 4.8.1 runtime, then build with the .NET 10 SDK. The .NET Framework reference assemblies are restored through NuGet; a separate developer pack is not required:
dotnet build CadLens.slnx -c DebugDebug builds copy the plugin and its dependencies to
%APPDATA%\Autodesk\ApplicationPlugins\CadLens.bundle\Contents\<TargetFramework>. For manual NETLOAD, select
CadLens.AutoCAD.dll from net47 for 2019–2020, net48 for 2021–2024, net8.0-windows for 2025–2026, or
net10.0-windows for 2027, then enter CADLENS. Library and test project outputs stay in their local build
directories. If the build directory is not in TRUSTEDPATHS, copy the complete matching output directory, including its
ru satellite-resource subdirectory, into an existing trusted directory without disabling SECURELOAD. Restart the
host before loading rebuilt assemblies from a previously loaded plugin.
CAD Lens starts with the current user's Windows display language: Russian for a Russian display language, English for English or any unsupported language. This is independent of Windows regional formatting and the AutoCAD interface language.
Use the EN/RU button in the header to choose Use Windows language, English, or Русский. The change applies immediately, including tooltips, details, and status messages, while preserving navigation, inclusion filters, and drawing effects. Layer names, layout names, entity type names, and handles remain as supplied by the drawing. Third-party exception details remain in their original language.
The preference is saved per Windows user in %LOCALAPPDATA%\CadLens\language.json. An absent or
invalid file uses Windows mode; an unwritable file keeps the selected language for the current session
and shows a save explanation in the menu. Windows mode reads the display language at startup and
when selected again. A Windows display-language change usually also requires Windows sign-out.
A new CADLENS session opens as a compact bar with both lenses inactive. Press Layers to read the active drawing space
automatically when it has at most 10,000 direct objects.
For a larger space, use Refresh to load all objects or choose Selected objects. Browse layers, object types, and objects
with the list, breadcrumbs, Back, and Previous/Next. Use Refresh after drawing edits. Press Layers again to collapse the
panel; reopen it to restore valid navigation, inclusion filters, and Auto settings without moving the camera. Pending or
failed cleanup appears in the compact status tooltip and can delay reactivation. Running CADLENS again brings the
existing panel forward.
Both lenses start with All objects, which reads direct objects in the active model or paper space.
Automatic loading stops above 10,000 objects before reading their properties. Refresh and explicit scope
changes can load the full space. Selected objects are read immediately regardless of the full-space size.
To change the threshold, close the panel and set AutoLoadObjectLimit in each lens settings file
(%LOCALAPPDATA%\CadLens\lens-layers.json or lens-object-types.json). Zero defers every nonempty space;
negative values use the default threshold. Loaded inventories are reused when reopening a lens or changing
inclusion filters; use Refresh after drawing edits.
Every click on Selected objects, including when already checked, uses the current CAD selection
or asks you to select objects when nothing is selected, then reads them immediately. Press Escape to cancel selection
and keep the previous view. Only live direct objects in the active space are included. The existing
off/frozen inclusion filters still apply.
Navigation, grouping, inclusion-filter changes, Reset, and Select/Auto Select keep the captured inventory. Collapsing the panel or switching lenses also keeps each lens's selected inventory and navigation. Refresh selected objects also uses the current CAD selection or asks you to select objects, then updates the list immediately. It can replace the inventory with a selection made by Select/Auto Select. Switching drawings or spaces clears the old inventory and returns the scope to All objects. Each new panel session starts with All objects.
| Action | Effect | Auto default |
|---|---|---|
| Focus | Fits the current target in the active camera | Off |
| Select | Replaces the CAD selection | Off |
| Isolate | Temporarily hides other direct active-space objects | Off |
Each action has its own Auto toggle. All three default to off; saved choices are restored for each lens. Enabled actions follow navigation. For selection without camera movement, turn Auto Select on and leave Auto Focus off. Select remains available when Focus cannot use bounds or the viewport is locked.
Press Isolate on a layer, type, or object to keep its direct active-space objects in their original appearance and temporarily hide the other direct active-space objects. Auto Isolate repeats this as you browse; with Auto Isolate off, the next navigation clears a manual isolation. Objects on off or frozen layers stay hidden even when included in the list. Isolation uses the same target set in every viewport where those objects are visible, without moving cameras or changing CAD selection.
Turning Auto Isolate off, returning to the root list, pressing Reset, collapsing or closing the panel, or switching drawings or spaces restores the ordinary display. Isolation does not write entity or layer visibility properties to the DWG.
Reset also clears CAD selection and turns off all Auto modes while keeping the camera, navigation, and inclusion filters. It saves the Auto modes as off. Effects stay clear during later navigation until a mode is enabled again. Reset is disabled while work is pending. Turning Auto Select off clears only CAD selection. With Auto Select off, a manual selection persists until replaced or cleared.
Layers and Objects save their inclusion filters, search text, sorting column/direction, and Auto modes
independently under %LOCALAPPDATA%\CadLens. Closing and reopening the panel or restarting AutoCAD
restores these preferences. The panel still starts collapsed; activate a lens to read the drawing.
Each fresh session starts at the root list, with drawing-specific targets and navigation cleared.
The panel also saves its expanded width and height when collapsed or closed. Activating a lens restores
that size within the current monitor's work area. Window position is not saved.
Restored Auto modes apply when you choose a target. If saving fails, the controls remain usable for
the current session and the lens status explains that the preferences could not be saved.
CAD Lens uses one exploration session for the active drawing. Focus moves only the active view. Switching drawings or spaces clears old data and automatically reloads the active lens within its size threshold. These actions do not change stored DWG geometry or properties.
Press Objects to browse object types across all included layers in the current model or paper space and see their counts. Search the type names or sort by name/count, then browse Type → Object; each object shows its own layer and visibility details. A block insertion counts as one object. Nested block and external-reference contents are not traversed.
Object Types shares the drawing controls and inclusion filters described above. Switching lenses clears the previous lens's selection/isolation and restores the destination lens's valid navigation and settings. Counts include off-screen objects and stay unchanged when panning or zooming. Use Refresh after drawing edits.
Within a primitive type in either lens, object rows show a useful measurement: vertices for polylines, direct definition entities for blocks, boundary loops for hatches, control points for splines, length for lines, radius for circles/arcs, and height for text. Use Show property to choose which observed property appears beside each object and controls value sorting. Numeric values sort numerically; text and assigned properties use their typed values. Click the value column header to reverse the order; Previous/Next follows the displayed order. Unavailable values display a dash and sort last. Geometry distances use drawing units; assigned lineweights use millimeters. The displayed property is saved per lens and type. Group rows show object counts; open a group to enable Show property for its individual object rows.
Area is available for every curve and hatch in details, Show property, and Group by; values
that AutoCAD can calculate also support numeric filtering. Area uses square drawing units and LUPREC
display precision. Open planar curves use AutoCAD's area with the endpoints joined by a straight segment.
If the native area is unavailable, including unsupported or nonplanar curves and failed hatch calculations,
CAD Lens shows a dash rather than substituting zero. A valid native zero remains zero.
Decimal measurements display up to the drawing's LUPREC digits, and angles use AUPREC in degrees.
Trailing zeros are omitted. Counts remain integers, and assigned lineweights retain their millimeter
precision. Numeric grouping uses the same rounded values as the display: values that appear as Area: 0
form one group, separate from unavailable values (—). Refresh applies changed drawing precision to
rows, group membership, captions, details, and tooltips. Object values, sorting, and numeric filters
retain their exact stored values; a displayed zero group can include small nonzero measurements.
Use Group by to combine properties such as Color + Linetype + Lineweight, or hatch Pattern + Angle. Each distinct combination creates one subgroup with its own object count and drawing controls. Clear the checkboxes to return to individual objects. Grouping choices are saved separately per lens and primitive type. Grouping and sorting use the last inventory; Refresh rereads changed drawing properties.
Block attribute tags and dynamic block properties are available in the same display, grouping, and filter
controls. They are marked Attribute: TAG and Dynamic: Name, with localized prefixes, so a
block attribute named Layer remains distinct from the built-in Layer property. Names and attribute
text stay as supplied by the drawing; numeric-looking attribute text such as 002 is not converted to
a number. Dynamic properties retain their native numeric units or text values. Missing, unreadable,
and duplicate same-name values are unavailable for grouping/filtering; blank text remains distinct.
Saved property selections and named filters can reuse these keys across sessions and drawings.
Use Refresh after changing a block value in CAD. No block values are edited by these controls.
The dropdown lists the properties observed on objects of the current type, including measurements.
Use Filter inside a primitive type to choose one property, comparison, and value, then press Apply. For example, find open polylines, lengths below a threshold, or objects with a particular assigned color. Numeric comparisons use exact stored values; enter distances in drawing units and angles in degrees. Text comparisons ignore case. Unavailable values do not match, including a not-equal condition. Invalid input keeps the previous result. Clear removes the condition, including when no objects match.
Each lens keeps one filter per primitive type for the current panel session. In Layers, a type's filter
also applies to that type in other layers. Counts, property groups, and drawing actions use the matching
objects. Changing a filter uses the captured inventory; Refresh rereads the drawing. Filters survive
navigation and lens switching, and clear when the drawing or space changes.
Use Filter → Saved filters to save a valid condition under a name for the current object type.
Both lenses share these conditions across sessions through property-filters.json in the settings directory.
Applying uses the current inventory and scope; deleting a preset leaves the applied condition unchanged.
Saved filters contain no drawing object IDs. Layer conditions resolve the saved layer name in the current drawing.
When matching targets change, enabled Auto modes follow the result and manual isolation clears. Manual CAD selection stays until explicitly replaced or cleared; a zero-match result clears selection and isolation while keeping the camera.
Grouping compares assigned values, preserving ByLayer, ByBlock, indexed colors, true colors, and named color-book entries. Numeric group keys use drawing precision while retaining their numeric type and units; localized captions never determine identity. Lineweight, constant polyline width, and extrusion thickness are separate properties.
A block insertion remains one drawing target. Its structural measurement counts live direct entities in the referenced definition, including attribute definitions; a nested insertion counts once. Attached insertion attributes are reported separately. Dynamic blocks use their original name and the referenced definition's count. This does not promise a visible-geometry count. Xref contents are not counted.
Open the gear button in the compact bar to choose a theme, surface palette, and accent color.
Follow AutoCAD is the default: CAD Lens reads COLORTHEME when the panel opens and follows later
host theme changes. Light and Dark override that preference for CAD Lens only. Quiet, Graphite,
and Paper palettes each support both themes, with Mint, Blue, Violet, or Amber accents.
Changes apply immediately to the bar, both lenses, and their controls. Restore defaults returns to
Follow AutoCAD, Quiet, and Mint. Preferences are saved per Windows user in
%LOCALAPPDATA%\CadLens\appearance.json and survive closing the panel or host. If the file is damaged,
CAD Lens uses defaults; if it cannot be saved, the choices still work for the current session.
Appearance changes do not change AutoCAD's theme, the drawing, navigation, or temporary effects.
Click CAD Lens ⓘ in the compact bar to read about the program, open the GitHub project, read the privacy policy, or submit questions and suggestions through GitHub Issues. The links open in your default browser.
From the repository root, run:
./scripts/New-Bundle.ps1The script publishes all four target frameworks, generates a version-specific PackageContents.xml, and creates
artifacts/bundle/CadLens.bundle.zip, including the partial ribbon CUIX, offline help, and privacy policy.
A successful GitHub Actions run also provides the ZIP as a build artifact; GitHub Releases provide the versioned
download for users.
CadLens.Commoncontains host results, typed ID contracts, and the object visualization contract without WPF or AutoCAD.CadLens.Common.AutoCADowns queued AutoCAD work, database helpers, temporary visual isolation, Focus, and bounds reading.CadLens.Lensesgroups detached drawing inventories by layer or object type and owns navigation state.CadLens.UIowns the window, lens switching, and the shared object explorer view and view model.CadLens.AutoCADconnects the UI to AutoCAD and owns plugin and panel lifetime.
Both lenses use ObjectExplorerViewModel and ObjectExplorerView. A refresh requests its grouping through
IObjectExplorerActions; the AutoCAD adapter invokes DrawingLensProvider, which reads a detached DrawingInventory
and builds either Layer → Type → Object or Type → Object groups. Drawing actions use the same
IObjectVisualizationService. Analysis runs over ordinary .NET models after the inventory is read in the proper
document context.
All objects use the same EntitySnapshot model with one immutable DrawingPropertyKey → DrawingValue?
dictionary for built-in properties, attached attributes, and dynamic block properties, plus an optional
primary row measurement. DrawingPropertyKey.Source distinguishes BuiltIn, Attribute, and DynamicBlock,
so identical names from different sources stay separate. Duplicate same-source names become one
unavailable value; native properties with no readable name are omitted. Native extraction lives in
AutoCadEntitySnapshotReader; DrawingProperties provides shared
property access, and DrawingLensProvider builds both exploration trees. Details, combined grouping,
and numeric sorting use these same detached values. A new primitive reader does not require a new UI
model or a separate grouping implementation.
Drawing precision is read once with the inventory. DrawingPrecision supplies the same numeric
rounding for group keys and DrawingValueFormatter; raw object values remain available for details,
sorting, and filters.
CadLens.AutoCAD owns plugin and panel lifetime, cleanup, snapshot construction, and panel messages. Create
AutoCadTaskService on the host UI thread. Capture preselection on that thread before queuing interactive selection
work. Clear temporary isolation when leaving the drawing context, then stop and drain the queue before disposing it.
A lens implements ILens in CadLens.UI. It supplies a descriptor and WPF view, handles activation and deactivation,
and receives context-change and close notifications. Register its own dependencies and the lens in the composition root:
services.AddScoped<MyLensService>();
services.AddScoped<MyLensViewModel>();
services.AddScoped<ILens, MyLens>();The shell discovers ILens registrations, creates their views lazily on the UI thread, and shows one active module at a
time. Descriptor IDs must be unique. Deactivation must settle module work and remove its effects; failed cleanup blocks
switching until a retry succeeds. Context changes invalidate saved targets, and Close cancels work and removes effects
before the host queue stops. Module services are scoped to the panel session.
Production registers two ObjectExplorerLens instances with different groupings. Each owns its navigation,
filters, search, and Auto settings; both reuse one scoped inventory provider and host-action adapter.
SettingsService handles JSON loading and atomic saves for language, appearance, and lens preferences.
Shared WPF files live in src/CadLens.UI/Lenses/ObjectExplorer, and drawing models/grouping live in
src/CadLens.Lenses/Drawing. Tests register an unrelated Counter lens to check that the shell still
supports other modules.
Current code and tests describe the supported behavior. Keep documentation for usage, important decisions, and host constraints; ordinary changes do not require separate planning artifacts.
On every push, the Windows GitHub Actions workflow installs the .NET 8 and .NET 10 SDKs, restores dependencies, builds the solution, runs managed tests for all four target frameworks, packages the bundle, checks legacy dependency loading, and uploads the ZIP. Native AutoCAD rendering and lifecycle checks are separate.
To publish a prerelease, update Version in Directory.Build.props and merge it into main. After a successful build,
the workflow creates the v<Version> tag and attaches CadLens.bundle.zip to the GitHub Release. Runs with an existing
release version leave that release unchanged. You can also start the workflow with Run workflow or
gh workflow run build.yml --ref main.
GitHub generates the release description from merged pull request titles, contributors, and a link to the full commit history. Use descriptive pull request titles for changes users should see in release notes.
See the verification guide for managed checks, native AutoCAD scenarios, and the current evidence limits. Build and test results do not establish native rendering, lifecycle, or host compatibility. Earlier Layers and Highlight acceptance does not verify the current Isolate behavior.

