Open-source batch QA/QC tool for Civil 3D drawings (headless, CI-ready)

Open-source batch QA/QC tool for Civil 3D drawings (headless, CI-ready)

asem_daaboul
Observer Observer
137 Views
3 Replies
Message 1 of 4

Open-source batch QA/QC tool for Civil 3D drawings (headless, CI-ready)

asem_daaboul
Observer
Observer

I've been working on a problem that I think a lot of us face: how do you enforce drawing standards across a team without relying on someone to manually open and check every file?

I built civil-qa-qc, an open-source CLI tool that runs automated QA/QC checks against Civil 3D drawings headlessly (via accoreconsole.exe) and generates HTML/JSON reports.

What it does:

  • 12 built-in rules: layer naming conventions, empty/unused layers, drawing units, xref status, proxy objects, annotation scale, text styles, block naming, drawing recovery, and more
  • YAML-configurable: define your own rules or customize the built-in ones
  • HTML reports with screenshots of failures, plus machine-readable JSON for CI/CD pipelines
  • Multi-version: .NET 8 for Civil 3D 2025+, .NET Framework 4.8 for 2020-2024

What it doesn't do:

  • It is not a design checker. It checks drawing hygiene and standards compliance, not engineering correctness.
  • It requires Civil 3D installed on the machine (it uses accoreconsole.exe under the hood).
  • It cannot handle recovery dialogs headlessly, so drawings with internal errors need to be opened and RECOVERed in the GUI first.

Why I built it:
The Autodesk Standardized Data Tool is great for template enforcement, but I needed something that could run in batch across hundreds of drawings and integrate into a CI pipeline. This fills that gap.

GitHub: https://github.com/Asem-D/civil-qa-qc

Would love feedback from the community, especially on which rules would be most valuable to add next. The repo has a Rule Wishlist in CONTRIBUTING.md with ~15 ideas across surface checks, alignment validation, pipe network rules, etc.

0 Likes
Accepted solutions (1)
138 Views
3 Replies
Replies (3)
Message 2 of 4

BlackBox_
Advisor
Advisor

Neat.

"It checks drawing hygiene and standards compliance" - how are you accounting for Reference Templates (TREF) governance which allows for temporary overrides and depending on the native sysvar, even allows for drawings to be out of sync? 

"It cannot handle recovery dialogs headlessly, so drawings with internal errors need to be opened and RECOVERed in the GUI first." - Civil 3D's standalone Batch Save Utility was originally shipped with a simple Script to handle this; you could easily AUDIT, etc in kind *IF* that's something you're interested in doing at scale. 

How are you managing end user's system resources? Batch just means more than one; some systems can handle hundreds of CC instances, others only a few.

If this is entirely headless, what AutoCAD Profile is executing and with which native assemblies loaded?

I see that they're not currently listed (no issue), but do you plan to include AECC Object and Label Styles in the future?

Great idea; can't wait to see what you do with this!

 

Cheers


"How we think determines what we do, and what we do determines what we get."

Chris (BlackBox) Bradley
Managing Partner / Developer / Civil Designer
Quux Software | Sincpac C3D | Style Explorer

Message 3 of 4

asem_daaboul
Observer
Observer

Hi Chris,

Thank you for the thorough feedback, these are all valid points. Let me go through them honestly.


Reference Templates (TREF):

You're right, and this is a gap. The current layer naming check validates against allowed prefixes in the host drawing's layer table, but it doesn't account for TREF-controlled styles that may have been overridden. A drawing can appear compliant while its TREF relationship is out of sync or temporarily overridden, and we wouldn't catch that.

Looking into this more, TREF governance is genuinely complex: nested TREFs, the sync behavior controlled by system variables, and the fact that overrides are intentional in some workflows while being violations in others. This probably deserves its own rule category rather than being bolted onto the existing layer checks. I've added it to the Rule Wishlist as a medium-priority item. If you have thoughts on what "out of sync" looks like from a practical standpoint, I'd be interested to hear.


AUDIT before checks:

That's a fair point about the Batch Save Utility approach. The current tool detects exit code 53 and notes the drawing needs manual recovery, but it doesn't proactively run AUDIT as a pre-step. The reason was conservative: AUDIT with fix mode modifies the drawing, and I didn't want the QA tool silently changing files. But you're right that for batch workflows, running AUDIT as an explicit opt-in pre-step (with a --repair flag or similar) would be more useful than just failing and telling the user to open the GUI. That's a practical improvement I can add.


System resources / parallel instances:

Currently the tool runs checks sequentially, one drawing at a time. Again, you're right that this is a limitation. Some machines can handle 10+ concurrent accoreconsole instances, others struggle with 2-3. A --parallel flag with a configurable concurrency limit might be the straightforward approach. The challenge is that each instance consumes ~100MB+ of memory, and Civil 3D's licensing model means concurrent instances may compete for licenses depending on the deployment. I'll add this to the roadmap.


AutoCAD Profile:

The tool currently launches accoreconsole.exe without specifying a profile, so it uses the default profile. This means it loads whatever native assemblies the default profile includes, but no custom CUI or enterprise customization. For most QA checks, I believe this is fine since we're reading entity properties, not running user customization. But you raise a good point: if someone's standards depend on profile-specific settings (e.g., a custom profile that loads specific Object Enablers or third-party assemblies), the default profile might not reflect their actual production environment. Supporting a --profile flag to specify which profile accoreconsole loads would be a useful addition.


AECC Object and Label Styles:

Not currently included, and you're right to ask. The existing rules focus on AutoCAD-level entities (layers, blocks, text styles, xrefs). Civil 3D's AECC object styles and label styles are a different layer of the drawing model entirely. They're accessible via the .NET API (CivilApplication.ActiveDocument.Styles), so it's technically feasible, but it's a significant scope expansion. The Rule Wishlist has some surface and corridor checks, but nothing specifically targeting AECC style compliance yet. I've added this as a high-priority wishlist item.


Use case where this tool is currently useful:

The practical sweet spot right now is organizations with drawing standards that are primarily AutoCAD-level: layer naming conventions, xref management, text style consistency, proxy object cleanup. These are the checks that CAD managers currently do manually or via partial LISP routines. The tool adds value by making those checks repeatable, configurable, and AI-integrable.

I feel that the Civil 3D-specific style governance (TREF, AECC styles) is where the tool needs to grow, and feedback like yours helps prioritize that.


Thanks again for the detailed review.


Asem Daaboul

"Actions are but by intentions, and every man shall have only that which he intended."

0 Likes
Message 4 of 4

BlackBox_
Advisor
Advisor
Accepted solution

Happy to help, @asem_daaboul 

 

Standards is a hard topic; it means something different to every environment but all still falls on the same systems that AutoCAD and Civil 3D provide, right?

 

One thing you'd also not mentioned is detecting STANDARDS command (DWS) association & configuration... think of TREFs as STANDARDS 2.0... does the drawing use DWS to identify issues, or self-heal on open, and which DWS records are configured, etc? 


I think you're on a solid path, as many feel standards friction everyday (to some extent).... I do for my daily work.

 

As someone who's dabbled in this arena, I can share that thinking through how to access all of the information you're after, identifying which standard actually applies (TREFs allow for more than one source too), only to complete a diff, just to identify *IF* something is in/out of standard... is the hard part. Enjoy it. 

Just trying to offer encouragement where I can... I look forward to what you come up with.  

 

Cheers


"How we think determines what we do, and what we do determines what we get."

Chris (BlackBox) Bradley
Managing Partner / Developer / Civil Designer
Quux Software | Sincpac C3D | Style Explorer