update docs workflow
This commit is contained in:
parent
ed1009fd15
commit
5f1f77add9
2 changed files with 34 additions and 20 deletions
14
.github/workflows/build-docs.yml
vendored
14
.github/workflows/build-docs.yml
vendored
|
|
@ -24,15 +24,14 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Setup bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
bun-version: latest
|
||||
node-version: '22'
|
||||
- name: Install dependencies
|
||||
run: bun install
|
||||
- name: Build docs
|
||||
run:
|
||||
bun docs-build
|
||||
run: npm ci
|
||||
- name: Build docs
|
||||
run: npm run docs-build
|
||||
- name: Setup Pages
|
||||
uses: actions/configure-pages@v5
|
||||
- name: Upload artifact
|
||||
|
|
@ -43,4 +42,3 @@ jobs:
|
|||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
# DXF Import Implementation Review
|
||||
|
||||
## Overview
|
||||
|
||||
Added DXF import functionality to complement the existing DXF export feature, following the same architecture as SVG import.
|
||||
|
||||
## Implementation Summary
|
||||
|
|
@ -28,6 +29,7 @@ Added DXF import functionality to complement the existing DXF export feature, fo
|
|||
### Export Format (from `src/kiri/mode/laser/init-work.js`)
|
||||
|
||||
The existing `exportDXF()` function generates:
|
||||
|
||||
```dxf
|
||||
0
|
||||
SECTION
|
||||
|
|
@ -58,12 +60,14 @@ ENDSEC
|
|||
### Import Implementation Compatibility
|
||||
|
||||
✅ **Fully Compatible** with exported format:
|
||||
|
||||
- Parses POLYLINE entities with VERTEX sub-entities
|
||||
- Reads group code 70 (closed flag)
|
||||
- Reads group codes 10, 20, 30 (X, Y, Z coordinates)
|
||||
- Handles SEQEND terminator
|
||||
|
||||
✅ **Additional Entity Support**:
|
||||
|
||||
- LWPOLYLINE (modern compact format)
|
||||
- LINE (simple two-point segments)
|
||||
- CIRCLE (converted to polygon)
|
||||
|
|
@ -74,23 +78,27 @@ ENDSEC
|
|||
### Entity Parsing
|
||||
|
||||
#### POLYLINE (Traditional Format)
|
||||
|
||||
- Uses VERTEX sub-entities for each point
|
||||
- Flag 70 bit 0: closed (1) or open (0)
|
||||
- Group codes: 10=X, 20=Y, 30=Z
|
||||
- Terminated by SEQEND
|
||||
|
||||
#### LWPOLYLINE (Lightweight Format)
|
||||
|
||||
- Direct vertex coordinates (no VERTEX entities)
|
||||
- More compact than POLYLINE
|
||||
- Flag 70 bit 0: closed/open
|
||||
- **Limitation**: Bulge values (arcs) not yet supported
|
||||
|
||||
#### LINE
|
||||
|
||||
- Simple two-point entity
|
||||
- Group codes: 10,20,30 = start, 11,21,31 = end
|
||||
- Always treated as open polyline
|
||||
|
||||
#### CIRCLE
|
||||
|
||||
- Center point (10,20,30) + radius (40)
|
||||
- Converted to polygon based on segment size
|
||||
- **Default**: 1mm segments (e.g., 10mm radius circle = ~63 segments)
|
||||
|
|
@ -98,6 +106,7 @@ ENDSEC
|
|||
- Calculation: `segments = max(minSegments, ceil(2πr / segmentSize))`
|
||||
|
||||
#### ARC
|
||||
|
||||
- Center (10,20,30) + radius (40)
|
||||
- Start angle (50) and end angle (51) in degrees
|
||||
- Converted to polyline based on segment size
|
||||
|
|
@ -138,7 +147,7 @@ Load into scene
|
|||
✅ **Line Ending Handling**: Normalizes \r\n, \r, \n
|
||||
✅ **Whitespace**: Trims all lines (handles varying spacing in group codes)
|
||||
✅ **Bounds Checking**: Prevents index out of bounds errors
|
||||
✅ **Empty Entity Skip**: Ignores entities with < 2 points
|
||||
✅ **Empty Entity Skip**: Ignores entities with fewer than 2 points
|
||||
✅ **Default Values**: Safe defaults for missing Z coordinates
|
||||
✅ **Error Handling**: Try/catch in parseAsync wrapper
|
||||
|
||||
|
|
@ -231,6 +240,7 @@ The DXF import dialog provides the following options:
|
|||
## Comparison with SVG Import
|
||||
|
||||
### Similarities
|
||||
|
||||
- Both use polygon-based pipeline
|
||||
- Both support nesting for holes
|
||||
- Both extrude 2D to 3D
|
||||
|
|
@ -238,18 +248,19 @@ The DXF import dialog provides the following options:
|
|||
|
||||
### Differences
|
||||
|
||||
| Feature | SVG Import | DXF Import |
|
||||
|---------|-----------|------------|
|
||||
| Parser | THREE.SVGLoader | Custom implementation |
|
||||
| Dependency | three.js library | None (pure JS) |
|
||||
| Arc Resolution | User-configurable | Fixed algorithm |
|
||||
| DPI Setting | Yes | No (DXF is unitless) |
|
||||
| Curve Types | Bezier, arcs, ellipses | Lines, arcs, circles |
|
||||
| Y-Axis | Inverted (SVG quirk) | Standard (CAD) |
|
||||
| Feature | SVG Import | DXF Import |
|
||||
| -------------- | ---------------------- | --------------------- |
|
||||
| Parser | THREE.SVGLoader | Custom implementation |
|
||||
| Dependency | three.js library | None (pure JS) |
|
||||
| Arc Resolution | User-configurable | Fixed algorithm |
|
||||
| DPI Setting | Yes | No (DXF is unitless) |
|
||||
| Curve Types | Bezier, arcs, ellipses | Lines, arcs, circles |
|
||||
| Y-Axis | Inverted (SVG quirk) | Standard (CAD) |
|
||||
|
||||
## Code Quality
|
||||
|
||||
### Strengths
|
||||
|
||||
✅ Follows existing architecture patterns
|
||||
✅ No external dependencies
|
||||
✅ Clear, readable code with comments
|
||||
|
|
@ -257,6 +268,7 @@ The DXF import dialog provides the following options:
|
|||
✅ Consistent with SVG import style
|
||||
|
||||
### Areas for Improvement
|
||||
|
||||
⚠️ No comprehensive unit tests yet
|
||||
⚠️ Could add SPLINE support for advanced CAD
|
||||
⚠️ Could expose layer information to UI
|
||||
|
|
@ -265,12 +277,14 @@ The DXF import dialog provides the following options:
|
|||
## Security Considerations
|
||||
|
||||
✅ **Safe Parsing**:
|
||||
|
||||
- No `eval()` or code execution
|
||||
- No file system access
|
||||
- Bounds checking prevents array overflow
|
||||
- String operations only (no binary exploits)
|
||||
|
||||
✅ **Input Validation**:
|
||||
|
||||
- parseFloat() for numeric values (NaN-safe)
|
||||
- Trim whitespace (prevents injection)
|
||||
- Length checks before array access
|
||||
|
|
@ -278,11 +292,13 @@ The DXF import dialog provides the following options:
|
|||
## Performance
|
||||
|
||||
**Expected Performance**:
|
||||
- Small files (<100 entities): <10ms
|
||||
- Medium files (100-1000 entities): <100ms
|
||||
- Large files (1000-10000 entities): <1s
|
||||
|
||||
- Small files (fewer than 100 entities): under 10ms
|
||||
- Medium files (100-1000 entities): under 100ms
|
||||
- Large files (1000-10000 entities): under 1s
|
||||
|
||||
**Optimization Opportunities**:
|
||||
|
||||
- Could use worker thread for large files
|
||||
- Could stream parse (currently loads entire file)
|
||||
- Could skip unknown entities faster (regex match)
|
||||
|
|
|
|||
Loading…
Reference in a new issue