Compare commits
6 Commits
4d01b2654d
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 14fa1e6906 | |||
| 41022a93cc | |||
| 0fd117da92 | |||
| 5f28a6ce2b | |||
| a4db71f074 | |||
| f418573908 |
@@ -245,3 +245,6 @@ ModelManifest.xml
|
|||||||
|
|
||||||
# Test documents
|
# Test documents
|
||||||
TestDocs/
|
TestDocs/
|
||||||
|
|
||||||
|
# Superpowers specs and plans
|
||||||
|
docs/superpowers/
|
||||||
|
|||||||
+1
-1
Submodule EtchBendLines updated: 89d987f6c6...da4d3228b0
@@ -7,8 +7,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExportDXF", "ExportDXF\Expo
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EtchBendLines", "EtchBendLines\EtchBendLines\EtchBendLines.csproj", "{229C2FB9-6AD6-4A5D-B83A-D1146573D6F9}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EtchBendLines", "EtchBendLines\EtchBendLines\EtchBendLines.csproj", "{229C2FB9-6AD6-4A5D-B83A-D1146573D6F9}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "netDxf", "EtchBendLines\netDxf\netDxf\netDxf.csproj", "{785380E0-CEB9-4C34-82E5-60D0E33E848E}"
|
|
||||||
EndProject
|
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -43,18 +41,6 @@ Global
|
|||||||
{229C2FB9-6AD6-4A5D-B83A-D1146573D6F9}.Release|x64.Build.0 = Release|Any CPU
|
{229C2FB9-6AD6-4A5D-B83A-D1146573D6F9}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{229C2FB9-6AD6-4A5D-B83A-D1146573D6F9}.Release|x86.ActiveCfg = Release|Any CPU
|
{229C2FB9-6AD6-4A5D-B83A-D1146573D6F9}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{229C2FB9-6AD6-4A5D-B83A-D1146573D6F9}.Release|x86.Build.0 = Release|Any CPU
|
{229C2FB9-6AD6-4A5D-B83A-D1146573D6F9}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{785380E0-CEB9-4C34-82E5-60D0E33E848E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{785380E0-CEB9-4C34-82E5-60D0E33E848E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{785380E0-CEB9-4C34-82E5-60D0E33E848E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
|
||||||
{785380E0-CEB9-4C34-82E5-60D0E33E848E}.Debug|x64.Build.0 = Debug|Any CPU
|
|
||||||
{785380E0-CEB9-4C34-82E5-60D0E33E848E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
|
||||||
{785380E0-CEB9-4C34-82E5-60D0E33E848E}.Debug|x86.Build.0 = Debug|Any CPU
|
|
||||||
{785380E0-CEB9-4C34-82E5-60D0E33E848E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{785380E0-CEB9-4C34-82E5-60D0E33E848E}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{785380E0-CEB9-4C34-82E5-60D0E33E848E}.Release|x64.ActiveCfg = Release|Any CPU
|
|
||||||
{785380E0-CEB9-4C34-82E5-60D0E33E848E}.Release|x64.Build.0 = Release|Any CPU
|
|
||||||
{785380E0-CEB9-4C34-82E5-60D0E33E848E}.Release|x86.ActiveCfg = Release|Any CPU
|
|
||||||
{785380E0-CEB9-4C34-82E5-60D0E33E848E}.Release|x86.Build.0 = Release|Any CPU
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
@@ -1,89 +1,109 @@
|
|||||||
# ExportDXF
|
# ExportDXF
|
||||||
|
|
||||||
A Windows desktop application that automates exporting flat pattern DXF files from SolidWorks drawings, assemblies, and parts. Built for sheet metal fabrication workflows, it extracts BOM data, generates DXF flat patterns with etch/bend line markings, and exports drawing PDFs to a local output folder with SQL Server tracking.
|
A Windows desktop application that automates exporting flat pattern DXF files from SolidWorks drawings, assemblies, and parts. Built for sheet metal fabrication workflows, it extracts BOM data, generates DXF flat patterns with etch/bend line markings, and exports everything to a local folder with an Excel workbook for downstream tools like [OpenNest](https://github.com/ajisaacs/OpenNest).
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- **Batch DXF export** from SolidWorks drawings, assemblies, or individual parts
|
- **Batch DXF export** from SolidWorks drawings, assemblies, or individual parts
|
||||||
- **Flat pattern generation** with automatic sheet metal detection
|
- **Flat pattern generation** with automatic sheet metal detection
|
||||||
- **Etch line insertion** on bend-up lines for fabrication reference (via EtchBendLines library)
|
- **Etch line insertion** on bend-up lines for fabrication reference (via EtchBendLines/ACadSharp)
|
||||||
- **PDF export** of SolidWorks drawings
|
- **PDF export** of SolidWorks drawings
|
||||||
- **Local file export** -- saves DXFs and PDFs to a configurable output folder
|
- **Excel BOM output** -- generates an xlsx workbook with a BOM sheet (direct copy of the SolidWorks BOM table) and a Cut Templates sheet (DXF filenames, thicknesses, K-factors, bend radii, content hashes)
|
||||||
- **SQL Server database** -- tracks export history and BOM data via Entity Framework Core
|
- **Revision tracking** -- content hashing detects unchanged DXFs across re-exports; changed files get revision suffixes (e.g., `PT03 Rev2.dxf`)
|
||||||
- **View flip control** with automatic, manual, and prefer-up strategies
|
- **Configurable filename template** -- format like `4321 A01 PT{item_no:2}` with placeholders for item number, part name, configuration, and material
|
||||||
- **Active document tracking** -- connects to SolidWorks and displays the active document in the title bar
|
- **Pluggable drawing info extraction** -- auto-fills the filename template from the document name; extensible via `IDrawingInfoExtractor`
|
||||||
- **BOM extraction** from drawing BOM tables or assembly component trees
|
- **View flip control** with automatic, manual, and prefer-up strategies
|
||||||
- **Drawing history dropdowns** -- equipment and drawing number filters populated from past exports
|
- **Active document tracking** -- connects to SolidWorks and updates the UI when the active document changes
|
||||||
|
- **Per-export and app-level logging** to plain text log files
|
||||||
## Requirements
|
|
||||||
|
## Requirements
|
||||||
- Windows 10/11
|
|
||||||
- .NET 8.0
|
- Windows 10/11
|
||||||
- SolidWorks (installed and licensed)
|
- .NET 8.0
|
||||||
- SQL Server (default: `localhost`, database: `ExportDxfDb`, Windows auth)
|
- SolidWorks (installed and licensed)
|
||||||
|
|
||||||
## Solution Structure
|
## Solution Structure
|
||||||
|
|
||||||
```
|
```
|
||||||
ExportDXF.sln
|
ExportDXF.sln
|
||||||
ExportDXF/ Main WinForms application
|
ExportDXF/ Main WinForms application
|
||||||
EtchBendLines/ Library for adding etch lines to DXF files (git submodule)
|
EtchBendLines/ Library for adding etch lines to DXF files (git submodule, uses ACadSharp)
|
||||||
netDxf/ DXF file read/write library
|
```
|
||||||
```
|
|
||||||
|
### Key Namespaces
|
||||||
### Key Namespaces
|
|
||||||
|
| Namespace | Purpose |
|
||||||
| Namespace | Purpose |
|
|-----------|---------|
|
||||||
|-----------|---------|
|
| `ExportDXF.Services` | Core services -- SolidWorks connection, DXF export, BOM extraction, PDF export, Excel output, logging, filename template parsing, drawing info extraction |
|
||||||
| `ExportDXF.Services` | Core services -- SolidWorks connection, DXF export, BOM extraction, PDF export, file export |
|
| `ExportDXF.Forms` | WinForms UI -- main export form with log, BOM, and cut templates grids |
|
||||||
| `ExportDXF.Forms` | WinForms UI -- main export form with log and BOM grids |
|
| `ExportDXF.Models` | Data models -- BomItem, CutTemplate, ExportContext, SolidWorksDocument |
|
||||||
| `ExportDXF.Models` | Data models -- BomItem, ExportRecord, ExportContext, SolidWorksDocument |
|
| `ExportDXF.ViewFlipDeciders` | Strategies for determining if a flat pattern view should be flipped |
|
||||||
| `ExportDXF.Data` | Entity Framework Core DbContext for SQL Server persistence |
|
| `ExportDXF.ItemExtractors` | Extract component items from BOM tables and assemblies |
|
||||||
| `ExportDXF.ViewFlipDeciders` | Strategies for determining if a flat pattern view should be flipped |
|
| `ExportDXF.Utilities` | SolidWorks helpers, content hashing, sheet metal property extraction, text utilities |
|
||||||
| `ExportDXF.ItemExtractors` | Extract component items from BOM tables and assemblies |
|
| `ExportDXF.Extensions` | Extension methods for SolidWorks, UI, unit conversion, strings, TimeSpan |
|
||||||
| `ExportDXF.Utilities` | SolidWorks helpers, sheet metal property extraction, text utilities |
|
| `EtchBendLines` | Post-processes DXF files to add etch marks on bend-up lines |
|
||||||
| `ExportDXF.Extensions` | Extension methods for SolidWorks, UI, unit conversion, strings, TimeSpan |
|
|
||||||
| `EtchBendLines` | Post-processes DXF files to add etch marks on bend-up lines |
|
## How It Works
|
||||||
|
|
||||||
## How It Works
|
1. **Startup** -- Connects to a running SolidWorks instance (or launches one). Auto-fills the filename template from the active document name using pluggable extractors.
|
||||||
|
|
||||||
1. **Startup** -- Connects to a running SolidWorks instance (or launches one) asynchronously. Loads past export history from the database to populate equipment/drawing dropdowns. Displays the active SolidWorks document name in the title bar.
|
2. **Export** -- Based on the active document type:
|
||||||
|
- **Drawing**: Copies the raw BOM table to the Excel BOM sheet, exports the drawing as PDF, then generates flat pattern DXFs for each sheet metal component.
|
||||||
2. **Export** -- Based on the active document type:
|
- **Assembly**: Extracts components from the assembly tree and generates flat pattern DXFs for each sheet metal part.
|
||||||
- **Drawing**: Extracts BOM items from BOM tables, exports the drawing as PDF, then iterates through each component to generate flat pattern DXFs.
|
- **Part**: Generates a single flat pattern DXF for the active part.
|
||||||
- **Assembly**: Extracts components from the assembly tree and generates flat pattern DXFs for each sheet metal part.
|
|
||||||
- **Part**: Generates a single flat pattern DXF for the active part.
|
3. **Post-processing** -- Each exported DXF is run through the EtchBendLines library, which identifies bend-up lines and adds short etch marks at their endpoints on a dedicated `ETCH` layer. Only up bends are etched because SolidWorks automatically flips the flat pattern so the shortest flange is the first bend. The etch marks let the press brake operator verify part orientation right off the laser table without flipping.
|
||||||
|
|
||||||
3. **Post-processing** -- Each exported DXF is run through the EtchBendLines library, which identifies bend-up lines and adds short etch marks at their endpoints on a dedicated `ETCH` layer. Only up bends are etched because SolidWorks automatically flips the flat pattern so the shortest flange is the first bend. The etch marks let the press brake operator verify part orientation right off the laser table without flipping -- the first bend (shortest flange) will always have an etch line.
|
4. **Save** -- DXF and PDF files are saved to a `Templates/` folder next to the source file. An Excel workbook is written with the BOM and Cut Templates sheets. If re-exporting, content hashes are compared against the existing workbook -- unchanged DXFs are skipped, changed DXFs get a revision suffix.
|
||||||
|
|
||||||
4. **Save** -- DXF and PDF files are copied to the configured output folder. Export records and BOM items (with sheet metal properties) are saved to the SQL Server database.
|
## Output
|
||||||
|
|
||||||
## Configuration
|
```
|
||||||
|
C:\Projects\4321\
|
||||||
Settings are in `App.config`:
|
├── 4321 A01.SLDDRW
|
||||||
|
└── Templates\
|
||||||
```xml
|
├── 4321 A01 PT01.dxf
|
||||||
<appSettings>
|
├── 4321 A01 PT02.dxf
|
||||||
<add key="MaxBendRadius" value="2.0" />
|
├── 4321 A01 PT03.dxf
|
||||||
<add key="ExportOutputFolder" value="C:\ExportDXF\Output" />
|
├── 4321 A01 PT03 Rev2.dxf (revised, original kept)
|
||||||
</appSettings>
|
├── 4321 A01.pdf
|
||||||
<connectionStrings>
|
├── 4321 A01.xlsx
|
||||||
<add name="ExportDxfDb"
|
└── 4321 A01.log
|
||||||
connectionString="Server=localhost;Database=ExportDxfDb;Trusted_Connection=True;TrustServerCertificate=True;"
|
```
|
||||||
providerName="Microsoft.Data.SqlClient" />
|
|
||||||
</connectionStrings>
|
### Excel Workbook
|
||||||
```
|
|
||||||
|
**BOM sheet** -- exact copy of all visible columns and rows from the SolidWorks BOM table (Drawing exports only).
|
||||||
## DXF Filename Format
|
|
||||||
|
**Cut Templates sheet**:
|
||||||
Exported files follow the pattern: `{DrawingNumber} PT{ItemNo}.dxf`
|
|
||||||
|
| Item # | File Name | Revision | Thickness | K-Factor | Bend Radius | Content Hash |
|
||||||
Example: `5007 A02 PT01.dxf`
|
|--------|-----------|----------|-----------|----------|-------------|--------------|
|
||||||
|
|
||||||
## Building
|
## Configuration
|
||||||
|
|
||||||
Open `ExportDXF.sln` in Visual Studio and build. The EtchBendLines submodule must be initialized:
|
Settings are in `App.config`:
|
||||||
|
|
||||||
```bash
|
```xml
|
||||||
git submodule update --init --recursive
|
<appSettings>
|
||||||
```
|
<add key="MaxBendRadius" value="2.0" />
|
||||||
|
<add key="DefaultSuffix" value="PT{item_no:2}" />
|
||||||
|
</appSettings>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Filename Template Placeholders
|
||||||
|
|
||||||
|
| Placeholder | Description | Example |
|
||||||
|
|-------------|-------------|---------|
|
||||||
|
| `{item_no:N}` | Item number, zero-padded to N digits | `{item_no:2}` → `03` |
|
||||||
|
| `{part_name}` | SolidWorks part name | `Bracket` |
|
||||||
|
| `{config}` | Configuration name | `Default` |
|
||||||
|
| `{material}` | Material name | `AISI 304` |
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
Open `ExportDXF.sln` in Visual Studio and build. The EtchBendLines submodule must be initialized:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git submodule update --init --recursive
|
||||||
|
```
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,181 +0,0 @@
|
|||||||
# ExportDXF: Remove API, Export to Excel
|
|
||||||
|
|
||||||
**Date:** 2026-04-13
|
|
||||||
**Status:** Draft
|
|
||||||
|
|
||||||
## Goal
|
|
||||||
|
|
||||||
Remove the FabWorks API and database dependencies from ExportDXF. Replace with local file output: DXF files + an Excel workbook (BOM + Cut Templates) that downstream tools like OpenNest can import directly. Make the tool self-contained — no server setup required.
|
|
||||||
|
|
||||||
## Approach
|
|
||||||
|
|
||||||
Merge the `feature/fabworks-api` branch into `master` to get its structural improvements (service layer, models, content hashing, EtchBendLines fixes), then remove the API/DB layer and replace with Excel + log file output.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Output Structure
|
|
||||||
|
|
||||||
### Output Folder
|
|
||||||
|
|
||||||
- Default location: `Templates/` folder in the same directory as the source SolidWorks file
|
|
||||||
- If `Templates/` already exists, the export writes into it (see Revision Handling below)
|
|
||||||
|
|
||||||
### Files Produced
|
|
||||||
|
|
||||||
```
|
|
||||||
C:\Projects\4321\
|
|
||||||
├── 4321 A01.SLDDRW (source drawing)
|
|
||||||
└── Templates\
|
|
||||||
├── 4321 A01 PT01.dxf
|
|
||||||
├── 4321 A01 PT02.dxf
|
|
||||||
├── 4321 A01 PT03.dxf
|
|
||||||
├── 4321 A01 PT03 Rev2.dxf (revised file, original kept)
|
|
||||||
├── 4321 A01.xlsx
|
|
||||||
└── 4321 A01.log
|
|
||||||
```
|
|
||||||
|
|
||||||
### Excel Workbook
|
|
||||||
|
|
||||||
Written with **ClosedXML 0.104.2** (same version as OpenNest).
|
|
||||||
|
|
||||||
**"BOM" sheet** — exact copy of the SolidWorks BOM table. All visible columns and rows reproduced as-is. Only present when exporting from a Drawing that contains a BOM table. Part and Assembly exports omit this sheet.
|
|
||||||
|
|
||||||
**"Cut Templates" sheet** — one row per sheet metal part:
|
|
||||||
|
|
||||||
| Column | Description |
|
|
||||||
|--------|-------------|
|
|
||||||
| Item # | Item number from the BOM or export sequence |
|
|
||||||
| File Name | DXF filename stem (no path, no extension) |
|
|
||||||
| Revision | Revision number (1 for initial, increments on change) |
|
|
||||||
| Thickness | Sheet metal thickness |
|
|
||||||
| K-Factor | K-Factor value |
|
|
||||||
| Bend Radius | Default bend radius |
|
|
||||||
| Content Hash | SHA256 of DXF content (excluding HEADER section) |
|
|
||||||
|
|
||||||
Present for all export types (Part, Assembly, Drawing).
|
|
||||||
|
|
||||||
### Log Files
|
|
||||||
|
|
||||||
**Per-export log:** `Templates/{prefix}.log`
|
|
||||||
- Timestamped lines: `2026-04-13 14:32:05 [INFO] Exported 4321 A01 PT03.dxf`
|
|
||||||
- Levels: INFO, WARNING, ERROR
|
|
||||||
- Appends on re-export
|
|
||||||
|
|
||||||
**App-level log:** `C:\ExportDXF\ExportDXF.log`
|
|
||||||
- Rolling log capturing all exports across all drawings
|
|
||||||
- Same format as per-export log
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Filename Format Template
|
|
||||||
|
|
||||||
### User Interface
|
|
||||||
|
|
||||||
A single text box replaces the equipment/drawing dropdowns. The user types a format string that controls DXF and xlsx naming.
|
|
||||||
|
|
||||||
**Example:** `4321 A01 PT{item_no:2}`
|
|
||||||
|
|
||||||
### Supported Placeholders
|
|
||||||
|
|
||||||
| Placeholder | Description | Example Output |
|
|
||||||
|-------------|-------------|----------------|
|
|
||||||
| `{item_no:N}` | Item number, zero-padded to N digits | `{item_no:2}` → `03` |
|
|
||||||
| `{part_name}` | SolidWorks part name | `Bracket` |
|
|
||||||
| `{config}` | Configuration name | `Default` |
|
|
||||||
| `{material}` | Material name | `AISI 304` |
|
|
||||||
|
|
||||||
### Naming Rules
|
|
||||||
|
|
||||||
- DXF filename: full template evaluated per part → `4321 A01 PT03.dxf`
|
|
||||||
- Excel filename: literal text before the first placeholder → `4321 A01.xlsx`
|
|
||||||
- Log filename: same stem as excel → `4321 A01.log`
|
|
||||||
- Validation: template must contain `{item_no}` (or `{item_no:N}`) to avoid filename collisions
|
|
||||||
- If the template starts with a placeholder (no literal prefix), fall back to the document name for the xlsx/log filename
|
|
||||||
|
|
||||||
### Auto-Fill
|
|
||||||
|
|
||||||
On document open, the format template text box is auto-filled via `IDrawingInfoExtractor`.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Drawing Info Extraction
|
|
||||||
|
|
||||||
### Interface
|
|
||||||
|
|
||||||
```csharp
|
|
||||||
public interface IDrawingInfoExtractor
|
|
||||||
{
|
|
||||||
bool TryExtract(string documentName, out DrawingInfo info);
|
|
||||||
}
|
|
||||||
|
|
||||||
public class DrawingInfo
|
|
||||||
{
|
|
||||||
public string EquipmentNumber { get; set; }
|
|
||||||
public string DrawingNumber { get; set; }
|
|
||||||
public string DefaultTemplate { get; set; }
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Implementations
|
|
||||||
|
|
||||||
**`DefaultDrawingInfoExtractor`** — uses the document name as literal prefix, appends the default suffix from app.config (`DefaultSuffix` setting, default `PT{item_no:2}`).
|
|
||||||
|
|
||||||
Example: document `MyPart.SLDPRT` → template `MyPart {item_no:2}` (or with configured suffix)
|
|
||||||
|
|
||||||
**`EquipmentDrawingInfoExtractor`** — parses the `{EquipmentNo} {DrawingNo}` pattern from document names in AJ's workplace format. Builds template like `4321 A01 PT{item_no:2}`.
|
|
||||||
|
|
||||||
### Resolution
|
|
||||||
|
|
||||||
Extractors are tried in order. First one that returns `true` wins. Falls back to `DefaultDrawingInfoExtractor`.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Revision Handling
|
|
||||||
|
|
||||||
When re-exporting to an existing `Templates` folder:
|
|
||||||
|
|
||||||
1. Read the existing xlsx Cut Templates sheet (if present)
|
|
||||||
2. For each part being exported, compute the DXF content hash
|
|
||||||
3. **Hash matches existing row** → skip, leave existing DXF file untouched
|
|
||||||
4. **Hash differs from existing row** → write new DXF with revision suffix (e.g., `PT03 Rev2.dxf`), update the xlsx row with new filename, new hash, incremented revision number
|
|
||||||
5. **New part (no existing row)** → write DXF, add new row to xlsx with revision 1
|
|
||||||
6. Old revision DXF files are kept in the folder as history
|
|
||||||
|
|
||||||
The BOM sheet (if present) is fully rewritten from the current drawing's BOM table on each export.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## What We Keep from feature/fabworks-api
|
|
||||||
|
|
||||||
- Service layer architecture: `DxfExportService`, `IPartExporter`, `IDrawingExporter`, `IBomExtractor`
|
|
||||||
- Models: `BomItem`, `CutTemplate`, `Item`, `ExportContext`, `LogEvent`
|
|
||||||
- `ContentHasher` utility (SHA256 excluding DXF HEADER section)
|
|
||||||
- All 9 EtchBendLines submodule fixes (ACadSharp migration, bend detection, degree symbol, etc.)
|
|
||||||
- Async export flow with cancellation
|
|
||||||
- View flip decider
|
|
||||||
- SolidWorks user input disabling during export
|
|
||||||
|
|
||||||
## What We Remove
|
|
||||||
|
|
||||||
- `FabWorksApiClient` and all API DTOs
|
|
||||||
- `ExportDxfDbContext`, EF Core migrations, SQL Server connection string
|
|
||||||
- NuGet packages: `Microsoft.EntityFrameworkCore.SqlServer`, `Microsoft.EntityFrameworkCore.Tools`
|
|
||||||
- Equipment/Drawing dropdowns from MainForm
|
|
||||||
- Any FabWorks.Core / FabWorks.Api projects (if present after merge)
|
|
||||||
|
|
||||||
## What We Add
|
|
||||||
|
|
||||||
- `IDrawingInfoExtractor` interface + two implementations
|
|
||||||
- Format template text box with placeholder parsing
|
|
||||||
- `ExcelExportService` using ClosedXML — reads/writes BOM + Cut Templates sheets
|
|
||||||
- `LogFileService` — per-export and app-level log writing
|
|
||||||
- Output folder logic (Templates folder next to source, revision handling)
|
|
||||||
- NuGet package: `ClosedXML 0.104.2`
|
|
||||||
- `DefaultSuffix` setting in app.config
|
|
||||||
|
|
||||||
## UI Changes
|
|
||||||
|
|
||||||
- Replace equipment/drawing combo boxes with a single format template text box
|
|
||||||
- Keep 3 tabs: Log Events, Bill of Materials, Cut Templates
|
|
||||||
- Keep Start/Stop button
|
|
||||||
- Keep View Flip Decider dropdown
|
|
||||||
Reference in New Issue
Block a user