Skip to content

JaviFRx/NexusCad

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

319 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NexusCad Logo

SolidWorks Design Automation Software

Language / Idioma: English Español


.NET 8 C# 12 PostgreSQL React License: AGPL v3

CPQ System (Configure, Price, Quote) for configurable product automation in SolidWorks through in-app capture, C# rules engine, web forms, and automatic generation of variants and documentation.

📖 User Manual

FeaturesTech StackQuick StartManualDocumentationRoadmap


📊 Project Status

✅ Phase 0: Foundations (Completed)
✅ Phase 1: WPF Administrator Shell (Completed)
✅ Phase 2: Roslyn Rules Engine (Completed) — 41/41 tests passing
✅ Phase 3: Database + Identity + Forms System (Completed)
✅ Phase 4: API Controllers + Web Frontend (Completed) — 27/27 integration tests passing
✅ Phase 5: Administrator Node Panels (Completed) — 6 panels fully functional
✅ Phase 6: SwWorker Service (Completed) — Model capture & generation working
✅ Phase 7: Document Generation (Completed) — QuestPDF + OpenXML + templates
✅ Phase 8: Web Runtime + Client Portal (Completed) — Full React portal with dynamic forms
✅ Phase 9: Production Deployment (Completed) — Docker, CI/CD, E2E, Installers, Monitoring
🎉 MVP v1.0.0-rc1 COMPLETE

🔄 Branch dev — Architectural pivot underway:
  ✅ Phase A: NexusCad.SwAddIn — Task Pane shell (xCAD.NET)
  ✅ Phase B: Capture dimensions from active selection
  ✅ Phase C: Custom Properties / Features / Drawings / File Formats
  📋 Phase D: @nexuscad/cli + Vite plugin + create-nexuscad-form template
  📋 Phase E: Form runtime loader (iframe sandbox + postMessage)
  📋 Phase F: Web admin (users, rules, jobs) in web/admin/*
  📋 Phase G: Remove NexusCad.Admin WPF + migrate legacy forms

🚀 Status: MVP complete. Branch dev replaces the WPF Administrator with NexusCad.SwAddIn (capture inside SolidWorks) + VSCode-based form authoring + web admin. See ADR-001 for full rationale.


📋 Table of Contents


🎯 What is NexusCad?

NexusCad enables companies with configurable products to capture engineering knowledge from their SolidWorks models and expose it to non-technical users (sales, customers, partners) through intuitive web forms.

When a form is filled out, NexusCad automatically generates:

  • SolidWorks model variants (parts, assemblies, drawings)
  • Derived documentation: quotes, technical sheets, BOMs
  • Drawings: PDF, DXF, STEP, IGES, Parasolid, STL
  • Complete traceability of each generated variant

✨ Key Features

Feature Description
🎯 SolidWorks Capture Add-in Task Pane inside SolidWorks — capture dimensions, features, custom properties, drawings, and file formats (DriveWorks-style)
C# Rules Engine Sandboxed Roslyn expressions, no Excel, with dependency analysis and incremental recalc
📝 VSCode Form Authoring @nexuscad/cli + create-nexuscad-form (Vite + TS) for authoring configurators locally
🌐 Web Client Portal React 18 + TypeScript — runtime for end users, bundles loaded in <iframe sandbox>
🛡️ Web Admin Manage users, rules, jobs, projects, and document templates at /admin/*
🤖 SolidWorks Worker COM Interop (external, no UI) for background variant generation
📄 Document Generation QuestPDF + OpenXML for quotes, technical sheets, and BOMs
🔐 Multi-user Roles: Admin, Author, Commercial, Client
📊 Job Monitoring Hangfire dashboard + Serilog → Seq
🗄️ Flexible Database SQLite (dev) / PostgreSQL 16 with JSONB (prod)

🛠️ Tech Stack

Backend

.NET C# PostgreSQL Entity Framework

  • Language: C# 12 on .NET 8 LTS
  • REST API: ASP.NET Core Web API + Swagger/OpenAPI
  • ORM: Entity Framework Core 8 + Npgsql / SQLite
  • Job Queue: Hangfire
  • Rules Engine: Microsoft.CodeAnalysis.CSharp.Scripting (Roslyn)
  • Documents: QuestPDF (PDF) + DocumentFormat.OpenXml (DOCX)
  • Logging: Serilog + Seq
  • Auth: ASP.NET Core Identity + JWT

Frontend

React TypeScript Vite Tailwind

  • Client & Commercial Web (NexusCad.Web): React 19 + TypeScript + Vite + Tailwind CSS 4
  • State / data: Zustand (auth) + TanStack Query (API cache)
  • Package Manager: npm

SolidWorks Integration

SolidWorks xCAD

  • Capture Add-in: NexusCad.SwAddIn — xCAD.NET 0.8.3 COM Add-in, Task Pane hosted inside SolidWorks
  • Generation Worker: NexusCad.SwWorker — external COM Interop (no UI), pool per SW license

DevOps & Testing

Docker GitHub Actions Playwright xUnit

  • Unit Tests: xUnit + FluentAssertions + NSubstitute
  • Integration Tests: Testcontainers + PostgreSQL
  • E2E Tests: Playwright + TypeScript
  • Containers: Docker + Docker Compose (PostgreSQL 16 + Seq)
  • CI/CD: GitHub Actions
  • Installers: Inno Setup (Windows)

🚫 No-Excel Policy

NexusCad does NOT use Excel anywhere:

  • ❌ Rules engine → C# with Roslyn, not =IF(...) formulas
  • ❌ Templates → DOCX and PDF, not XLSX
  • ❌ Import/Export → CSV / JSON, not .xlsx

🏗️ Architecture

SolidWorks                    Web portal                    Author's machine
┌─────────────────────────┐  ┌──────────────────────────┐  ┌─────────────────────────┐
│ NexusCad.SwAddIn        │  │ web/  (React 18 + MUI 9) │  │ VSCode + @nexuscad/cli  │
│  · Task Pane "Capture"  │  │  · Runtime cliente       │  │  · create-nexuscad-form │
│  · Captured Models      │  │  · Bundles en iframe     │  │  · vite dev + push      │
│  · Dimensions/Features  │  │    sandbox               │  │  · autogen'd typings    │
│  · Custom Properties    │  │  · /admin/*              │  └────────────┬────────────┘
│  · Drawings/File Fmts   │  └────────────┬─────────────┘               │
└────────────┬────────────┘               │ REST + JWT                  │ REST (push bundle)
             │ REST + JWT                 └──────────────┬──────────────┘
             └────────────────────────────────────────── ┘
                                          ▼
                     ┌────────────────────────────────────────────┐
                     │ NexusCad.Api (ASP.NET Core, .NET 8)        │
                     │  · /api/projects, /api/captures, /api/rules│
                     │  · Roslyn rules engine (NexusCad.Rules)    │
                     │  · QuestPDF + OpenXML (NexusCad.Documents) │
                     │  · ASP.NET Identity + JWT + Hangfire        │
                     └─────────────────┬──────────────────────────┘
                                       │
                           ┌───────────┴───────────┐
                           ▼                       ▼
                ┌─────────────────────┐  ┌─────────────────────┐
                │ SQLite (dev)        │  │ NexusCad.SwWorker   │
                │ PostgreSQL 16 (prod)│  │  · External COM     │
                │  · domain + captures│  │  · variant export   │
                └─────────────────────┘  └─────────────────────┘

Layer Structure

NexusCad.Core           → Domain entities, interfaces, role constants
NexusCad.Infrastructure → EF Core, Identity, Repositories, Migrations
NexusCad.Rules          → Roslyn C# scripting engine + dependency graph
NexusCad.Documents      → QuestPDF + OpenXML generation
NexusCad.Api            → REST API + JWT + Swagger (Windows Service in prod)
NexusCad.SwAddIn        → SolidWorks COM Add-in (xCAD.NET), Capture Task Pane
NexusCad.SwWorker       → Background process for variant generation via COM
NexusCad.Forms          → Legacy form schema (deprecated, compat read-only)
NexusCad.Admin          → (Deprecated) WPF shell — removal in Phase G
web/                    → React 18 + TS + MUI 9 (runtime + /admin/*)

🚀 Quick Start

Step 1: Clone

git clone https://github.com/JaviFRx/NexusCad.git
cd NexusCad
git checkout dev
dotnet restore

Step 2: Run the API

.\dev-scripts\start-dev.ps1

Stops the NexusCadApi Windows Service if installed, then runs in console mode on http://localhost:5140. Swagger at /swagger.

Default credentials: admin@nexuscad.local / Admin123!

Step 3: Register the SolidWorks Add-in

In a separate elevated PowerShell window (run as Administrator):

.\dev-scripts\register-swaddin.ps1

Builds the Add-in, runs regsvr32 on the comhost DLL, and writes the SOLIDWORKS Addins registry entries.

Step 4: Use the Task Pane

  1. Open SolidWorks → Herramientas → Complementos → tick NexusCad Capture
  2. The "NexusCad Capture" tab appears in the right-side strip
  3. Loginhttp://localhost:5140, seed credentials
  4. + Nuevo creates a project
  5. Open any .SLDPRTAñadir doc activo como Master captures it
  6. Click a dimension in the FeatureManager → Capturar dimensión seleccionada
  7. Verify via Swagger: GET /api/projects/{projectId}/captures/models

Add-in log: Get-Content "$env:TEMP\nexuscad-swaddin.log"

Web portal (optional, in another shell)

cd src/NexusCad.Web
npm install
npm run dev   # Vite on http://localhost:5173

📦 Requirements

Component Version Required for
Windows 10/11 or Server 2019+ All (SolidWorks is Windows-only)
.NET SDK 8.0 Build and run all .NET projects
SolidWorks 2024+ (tested on 2026) SwAddIn + SwWorker
Node.js 20+ NexusCad.Web client portal
npm 10+ included with Node.js
Docker Desktop latest Optional — Postgres + Seq locally

SQLite is the default dev database (nexuscad.db in repo root). Postgres is only required for prod-equivalent testing.


💻 Development Installation

👀 Option A: Just exploring / Read-only
git clone https://github.com/JaviFRx/NexusCad.git C:\Programacion\NexusCad
cd C:\Programacion\NexusCad
dotnet restore

✅ Quick and simple
⚠️ You won't be able to push changes

🤝 Option B: Contributing (Recommended)
  1. Fork at https://github.com/JaviFRx/NexusCad (click Fork)
  2. Clone your fork:
git clone https://github.com/YOUR_USERNAME/NexusCad.git C:\Programacion\NexusCad
cd C:\Programacion\NexusCad
git remote add upstream https://github.com/JaviFRx/NexusCad.git
dotnet restore

✅ You can commit to your fork
✅ You can create Pull Requests
✅ You can sync with upstream via git fetch upstream

🔧 Option C: Core team / Direct access
git clone https://github.com/JaviFRx/NexusCad.git C:\Programacion\NexusCad
cd C:\Programacion\NexusCad
dotnet restore

✅ Direct push access
⚠️ Be careful with main branch


📚 Documentation

Document Description
MANUAL.md 📖 End-user manual — how to operate NexusCad (Capture, authoring, web portal)
PLAN.md 📋 Full architecture, domain model, roadmap (authoritative source of truth)
CLAUDE.md 🤖 Guidance for AI assistance — current decisions and conventions
docs/ADR-001-sw-addin-vscode-authoring.md 🔄 The dev branch architectural pivot
docs/FORMS-HYBRID-ARCHITECTURE.md 📋 Legacy hybrid form schema (slated for removal Phase G)
docs/FASE-*.md ✅ MVP v1 phase write-ups — historical
dev-scripts/README.md 🔧 PowerShell helper scripts

Useful commands

# Build (solution = .slnx, not .sln)
dotnet build NexusCad.slnx

# Tests
dotnet test
dotnet test tests/NexusCad.Rules.Tests
dotnet test --filter "FullyQualifiedName~RoslynSandboxTests"

# EF Core migrations
dotnet ef migrations add <Name> `
  --project src/NexusCad.Infrastructure `
  --startup-project src/NexusCad.Api

dotnet ef database update `
  --project src/NexusCad.Infrastructure `
  --startup-project src/NexusCad.Api

# Postgres + Seq locally
docker-compose up -d

# SwAddIn lifecycle (elevated PowerShell)
.\dev-scripts\register-swaddin.ps1
.\dev-scripts\unregister-swaddin.ps1

# Web
pnpm --dir web install
pnpm --dir web dev
pnpm --dir web build
pnpm --dir web lint

# E2E Playwright (web must be running)
cd tests/e2e; pnpm install; pnpm exec playwright install
cd tests/e2e; pnpm test

🗺️ Roadmap

MVP v1 (Phases 0–9) — ✅ Complete

Phase Description Status
0 Foundation (solution, projects, Docker, EF Core) ✅ Complete
1 Administrator WPF shell + Auth ✅ Complete
2 Roslyn rules engine + dependency graph ✅ Complete — 41/41 tests
3 Database + Identity + Hybrid Forms System ✅ Complete
4 API Controllers + Web Runtime (React) ✅ Complete — 27/27 tests
5 Administrator panels (Security, Tables, Autopilot) ✅ Complete
6 SolidWorks Worker (COM Interop + capture) ✅ Complete
7 Document generation (PDF, DOCX, templates) ✅ Complete
8 Web Portal + Dynamic Forms Runtime ✅ Complete
9 Production deployment + optimization ✅ Complete

Architectural Pivot — Branch dev

Phase Scope Status
A Bootstrap NexusCad.SwAddIn — Task Pane shell via xCAD.NET ✅ Done
B Capture dimensions from active SW selection ✅ Done
C Custom Properties / Features / Drawings / Replacement Models / File Formats ✅ Done
D @nexuscad/cli + Vite plugin + create-nexuscad-form template 📋 Next
E Form runtime loader (<iframe sandbox> + postMessage bridge) 📋
F Migrate admin (users, rules, jobs, monitoring) into web/admin/* 📋
G Remove NexusCad.Admin WPF + migrate legacy forms 📋

See PLAN.md for complete details.


🔄 DriveWorks Equivalence

NexusCad takes DriveWorks Pro as a functional reference:

DriveWorks Pro NexusCad Technology
Capture (panel inside SW) NexusCad.SwAddIn xCAD.NET Task Pane
Administrator (rules / forms author) web/admin/* + VSCode + @nexuscad/cli React + VSCode CLI
User / Live web/ runtime React 18 + TypeScript
Autopilot NexusCad.SwWorker .NET Background Service + COM
Group / Individual NexusCad.Api + Database ASP.NET Core + EF Core
Engine (Excel) NexusCad.Rules Roslyn C# Scripting
Documents NexusCad.Documents QuestPDF + OpenXML

Key differences

Aspect DriveWorks NexusCad
License Proprietary AGPL v3 + Commercial
Rules engine Excel formulas C# with Roslyn
Database SQL Server PostgreSQL / SQLite
Form authoring Built-in GUI VSCode + TS + Vite
Documents Excel + Word QuestPDF + OpenXML (no Excel)

🤝 Contributing

⚠️ Project in active architectural pivot. External PRs not accepted yet.

🐛 Found a bug?

  1. Search existing issues: https://github.com/JaviFRx/NexusCad/issues
  2. Open a new Issue with: steps to reproduce, expected vs. actual behavior, environment info

💡 Have a suggestion?

Open an Issue with the enhancement label describing the problem, your proposed solution, and alternatives considered.


📄 License — dual

License Use it when… File
AGPL-3.0 You're fine sharing modifications and complying with §13 (network use). Internal use, open-source forks, evaluation. LICENSE
Commercial You want to ship NexusCad inside a proprietary product, or run a modified version as SaaS without releasing your fork. COMMERCIAL-LICENSE.md

Contributors must accept the CLA. Sign off commits with git commit -s.


⚖️ Legal Notice

NexusCad is an independent project with no affiliation, sponsorship, or endorsement from DriveWorks Ltd. or Dassault Systèmes.

  • "DriveWorks", "DriveWorks Pro", "DriveWorks Administrator", "DriveWorks Autopilot" and "DriveWorks Live" are registered trademarks of DriveWorks Ltd., mentioned here exclusively for descriptive purposes under nominative fair use.
  • "SOLIDWORKS" is a registered trademark of Dassault Systèmes SolidWorks Corporation.
  • No logos or screenshots of third-party commercial products are included in this repository.

Built with .NET 8, SolidWorks API, xCAD.NET, React, Roslyn, and EF Core

⬆ Back to top

About

▎ Automatización de diseño sobre SolidWorks: captura de modelos, motor de reglas C# y generación automática de variantes y documentación.

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors