- docs/USAGE.md: Full usage guide with CLI options, Python API, troubleshooting - docs/ATOMIZER_INTEGRATION.md: Guide for FEA/Atomizer integration - examples/sample_config.toml: Annotated configuration example - README.md: Expanded with installation, usage, architecture
5.2 KiB
5.2 KiB
Atomizer Integration Guide
CAD-Documenter generates FEA optimization hints that integrate with Atomizer, the Atomaste optimization framework.
Overview
When you explain your CAD model in a video walkthrough, CAD-Documenter extracts:
- Optimization objectives - What you want to minimize/maximize
- Design constraints - Limits and requirements
- Design parameters - Variables that could be optimized
- Critical regions - Areas requiring careful FEA attention
Verbal Cues → Atomizer Hints
Objectives
| What You Say | Generated Objective |
|---|---|
| "minimize the weight" | {"name": "mass", "direction": "minimize"} |
| "maximize stiffness" | {"name": "stiffness", "direction": "maximize"} |
| "reduce stress" | {"name": "stress", "direction": "minimize"} |
| "keep the frequency high" | {"name": "frequency", "direction": "maximize"} |
| "minimize deflection" | {"name": "displacement", "direction": "minimize"} |
Constraints
| What You Say | Generated Constraint |
|---|---|
| "must fit in 200mm" | {"type": "envelope", "value": "200mm"} |
| "under 500 grams" | {"type": "limit", "value": "500g"} |
| "frequency above 100 Hz" | {"type": "minimum", "value": "100 Hz"} |
| "stress cannot exceed 150 MPa" | {"type": "maximum", "value": "150 MPa"} |
Parameters
Mentioning these terms adds them to potential design parameters:
- thickness, wall thickness
- radius, fillet radius
- diameter, hole size
- length, width, height
- angle, spacing, count
- rib dimensions
Critical Regions
| What You Mention | FEA Concern |
|---|---|
| "this fillet is important" | Stress concentration |
| "corner stress" | Stress concentration |
| "bearing load here" | Contact stress |
| "weld joint" | Fatigue concern |
| "interface between parts" | Contact analysis |
Output Format
atomizer_hints.json
{
"assembly_name": "Motor Bracket Assembly",
"generated": "2026-01-27T20:15:00",
"model_understanding": {
"components": [
{
"name": "Main Bracket",
"material": "Aluminum 6061-T6",
"function": "Motor mounting",
"features": ["M6 holes", "fillet radii"]
}
],
"materials_mentioned": ["Aluminum 6061-T6", "Steel"]
},
"optimization_hints": {
"objectives": [
{"name": "mass", "direction": "minimize", "source": "Mentioned 'lightweight' in transcript"},
{"name": "stiffness", "direction": "maximize", "source": "Mentioned 'stiff' in transcript"}
],
"constraints": [
{"type": "envelope", "value": "200mm", "raw_match": "must fit in (\\d+)"},
{"type": "minimum", "value": "100 Hz", "raw_match": "greater than (\\d+)"}
],
"parameters": ["thickness", "fillet_radius", "rib_count"]
},
"fea_hints": {
"critical_regions": [
{"feature": "fillet", "concern": "stress_concentration"},
{"feature": "interface", "concern": "contact_analysis"}
],
"study_suggestions": [
"Modal analysis recommended - frequency/vibration mentioned",
"Topology optimization could reduce mass while maintaining performance"
]
},
"transcript_summary": "This assembly provides structural support for a NEMA 23 motor..."
}
Using with Atomizer
1. Generate Hints
cad-doc walkthrough.mp4 --atomizer-hints
2. Load in Atomizer
# In Atomizer study setup
from atomizer import Study
import json
with open("walkthrough_docs/atomizer_hints.json") as f:
hints = json.load(f)
study = Study.from_hints(hints)
# Hints pre-populate:
# - Objective functions
# - Constraints
# - Suggested parameters
# - Critical regions for mesh refinement
3. Review and Refine
The hints are suggestions, not final configurations:
- Verify objectives match your actual goals
- Add specific constraint values
- Map parameters to CAD model variables
- Adjust mesh refinement regions
Best Practices
During Recording
-
State objectives clearly
- "The goal is to minimize weight while maintaining stiffness"
- "We need to keep the first natural frequency above 100 Hz"
-
Quantify constraints
- "Maximum envelope is 200mm by 150mm by 100mm"
- "Weight budget is 500 grams"
- "Stress must stay below 150 MPa"
-
Point out critical features
- "This fillet is critical for stress concentration"
- "The bearing surface here sees high contact stress"
-
Mention what could be optimized
- "The wall thickness could potentially be reduced"
- "These rib dimensions are candidates for optimization"
After Generation
- Review
atomizer_hints.jsonfor accuracy - Add missing numerical values
- Map parameters to your CAD model
- Use critical regions to guide mesh refinement
- Run initial FEA to validate hints
Example Workflow
- Record walkthrough explaining bracket design
- Run CAD-Documenter with
--atomizer-hints - Review hints in generated JSON
- Import into Atomizer for optimization study
- Iterate based on FEA results
Limitations
- Hints are extracted from verbal/visual cues only
- Numerical values may need refinement
- Complex multi-objective problems need manual setup
- Material properties should be verified against database