- Add validation framework (config, model, results, study validators) - Add Claude Code skills (create-study, run-optimization, generate-report, troubleshoot, analyze-model) - Add Atomizer Dashboard (React frontend + FastAPI backend) - Reorganize docs into structured directories (00-09) - Add neural surrogate modules and training infrastructure - Add multi-objective optimization support 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
307 lines
8.1 KiB
Markdown
307 lines
8.1 KiB
Markdown
# NXOpen Python Intellisense Setup
|
|
|
|
> **Status**: ✅ Implemented (2025-11-17)
|
|
>
|
|
> Enable intelligent code completion for NXOpen Python API using Siemens-provided stub files
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
Siemens NX 2412 includes Python stub files (`.pyi`) that provide full type hints for the NXOpen API. These enable:
|
|
|
|
- **Autocomplete**: Suggestions for classes, methods, and properties
|
|
- **Type Hints**: Parameter types and return values
|
|
- **Documentation**: Inline docstrings and API descriptions
|
|
- **Error Detection**: Type checking catches errors before runtime
|
|
|
|
This dramatically improves development speed and reduces NXOpen API lookup time.
|
|
|
|
---
|
|
|
|
## Prerequisites
|
|
|
|
- **Siemens NX 2412** (or later) installed with Programming Tools
|
|
- **VSCode** with **Pylance extension** (usually installed with Python extension)
|
|
- **Python 3.11** environment (required for NXOpen module compatibility)
|
|
|
|
---
|
|
|
|
## Setup Instructions
|
|
|
|
### Step 0: Ensure Python 3.11 Environment
|
|
|
|
NXOpen modules are compiled for Python 3.11. **You must use Python 3.11**:
|
|
|
|
```bash
|
|
# Check your Python version
|
|
python --version # Should show: Python 3.11.x
|
|
|
|
# If using conda, upgrade atomizer environment:
|
|
conda install -n atomizer python=3.11 -y
|
|
```
|
|
|
|
### Step 1: Add NXOpen to Python Path
|
|
|
|
Create a `.pth` file in your Python environment's site-packages to enable NXOpen imports:
|
|
|
|
```bash
|
|
# For atomizer environment:
|
|
# Create file: C:\Users\<username>\anaconda3\envs\atomizer\Lib\site-packages\nxopen.pth
|
|
# Contents:
|
|
C:\Program Files\Siemens\NX2412\NXBIN\python
|
|
```
|
|
|
|
This allows `import NXOpen` to work in your Python scripts!
|
|
|
|
### Step 2: Verify Stub Files Exist
|
|
|
|
Check that stub files are installed:
|
|
|
|
```bash
|
|
# Windows path:
|
|
dir "C:\Program Files\Siemens\NX2412\UGOPEN\pythonStubs\NXOpen"
|
|
|
|
# Should show: __init__.pyi and many module folders (CAE, Assemblies, etc.)
|
|
```
|
|
|
|
**If missing**: Reinstall NX 2412 and ensure "Programming Tools" is checked during installation.
|
|
|
|
### Step 3: Configure VSCode
|
|
|
|
Update `.vscode/settings.json` in your Atomizer project:
|
|
|
|
```json
|
|
{
|
|
"python.analysis.typeCheckingMode": "basic",
|
|
"python.analysis.stubPath": "C:\\Program Files\\Siemens\\NX2412\\UGOPEN\\pythonStubs"
|
|
}
|
|
```
|
|
|
|
**Note**: Use double backslashes (`\\`) in Windows paths for JSON.
|
|
|
|
### Step 4: Restart VSCode
|
|
|
|
Close and reopen VSCode to load the new stub files.
|
|
|
|
### Step 5: Verify NXOpen Import and Intellisense Works
|
|
|
|
First, test that NXOpen can be imported:
|
|
|
|
```python
|
|
python
|
|
>>> import NXOpen
|
|
>>> print("Success! NXOpen is available")
|
|
>>> exit()
|
|
```
|
|
|
|
Then test intellisense:
|
|
|
|
Open `tests/test_nxopen_intellisense.py` and verify:
|
|
|
|
1. **Import Autocomplete**:
|
|
- Type `import NXOpen.` → Should suggest: Part, Session, CAE, Assemblies, etc.
|
|
|
|
2. **Method Autocomplete**:
|
|
- Type `session.` → Should suggest: GetSession(), Parts, etc.
|
|
- Type `expressions.` → Should suggest: FindObject, CreateExpression, etc.
|
|
|
|
3. **Parameter Hints**:
|
|
- Hover over `CreateExpression()` → Shows parameter types and documentation
|
|
|
|
4. **Documentation Tooltips**:
|
|
- Hover over any NXOpen class/method → Shows docstring
|
|
|
|
**If working**: ✅ Intellisense is configured correctly!
|
|
|
|
---
|
|
|
|
## What You Get
|
|
|
|
### Before Intellisense:
|
|
```python
|
|
import NXOpen
|
|
session = NXOpen.Session.GetSession()
|
|
# ❌ No suggestions when typing "session."
|
|
# ❌ No parameter hints for methods
|
|
# ❌ Must look up API in documentation
|
|
```
|
|
|
|
### After Intellisense:
|
|
```python
|
|
import NXOpen
|
|
session = NXOpen.Session.GetSession()
|
|
# ✅ Type "session." → See: Parts, ListingWindow, LogFile, etc.
|
|
# ✅ Type "session.Parts." → See: Work, Display, FindObject, etc.
|
|
# ✅ Hover over methods → See parameter types and documentation
|
|
# ✅ Catch type errors before running code
|
|
```
|
|
|
|
---
|
|
|
|
## Available Modules
|
|
|
|
The stub files cover **all** NXOpen modules:
|
|
|
|
**Core Modules**:
|
|
- `NXOpen.Session` - NX session management
|
|
- `NXOpen.Part` - Part objects and operations
|
|
- `NXOpen.Assemblies` - Assembly operations
|
|
|
|
**CAE Modules**:
|
|
- `NXOpen.CAE` - Finite element analysis
|
|
- `NXOpen.CAE.FemPart` - FEM models
|
|
- `NXOpen.CAE.SimSolution` - Solutions and solver control
|
|
|
|
**Design Modules**:
|
|
- `NXOpen.Features` - Parametric features
|
|
- `NXOpen.Sketches` - Sketch operations
|
|
- `NXOpen.Modeling` - Modeling operations
|
|
|
|
**And many more**: Drafting, Display, Motion, Optimization, etc.
|
|
|
|
---
|
|
|
|
## Example: Using Intellisense During Development
|
|
|
|
### Scenario: Update Part Expression
|
|
|
|
**Without Intellisense** (manual lookup required):
|
|
```python
|
|
# 1. Google: "NXOpen get expression"
|
|
# 2. Find documentation
|
|
# 3. Copy method signature
|
|
# 4. Hope you got it right
|
|
work_part.Expressions.FindObject("tip_thickness")
|
|
```
|
|
|
|
**With Intellisense** (guided development):
|
|
```python
|
|
# 1. Type "work_part.Exp" → Autocomplete suggests "Expressions"
|
|
# 2. Type "work_part.Expressions." → See all methods
|
|
# 3. Select "FindObject" → See parameter types
|
|
# 4. Hover for documentation
|
|
work_part.Expressions.FindObject("tip_thickness") # ✅ Correct!
|
|
```
|
|
|
|
---
|
|
|
|
## Benefits for Atomizer Development
|
|
|
|
### 1. **Faster Development**
|
|
- No context switching to documentation
|
|
- Discover APIs as you type
|
|
- Reduce typos and API misuse
|
|
|
|
### 2. **Better Code Quality**
|
|
- Type checking catches errors early
|
|
- Method signatures documented inline
|
|
- Parameter validation before runtime
|
|
|
|
### 3. **LLM-Assisted Coding**
|
|
When using Claude Code to develop Atomizer:
|
|
- Claude can "see" NXOpen API structure via stub files
|
|
- Better code generation suggestions
|
|
- Reduced hallucination of API methods
|
|
|
|
### 4. **Onboarding**
|
|
- New contributors learn NXOpen API faster
|
|
- Inline documentation reduces learning curve
|
|
- Explore API without leaving IDE
|
|
|
|
---
|
|
|
|
## Integration with Atomizer Workflow
|
|
|
|
### Journal Script Development
|
|
|
|
When writing NX journal scripts (`optimization_engine/solve_simulation.py`):
|
|
|
|
```python
|
|
import NXOpen
|
|
|
|
theSession = NXOpen.Session.GetSession()
|
|
workPart = theSession.Parts.Work
|
|
|
|
# Intellisense shows:
|
|
# - workPart.Expressions.FindObject(...)
|
|
# - workPart.Expressions.EditWithUnits(...)
|
|
# - workPart.Update()
|
|
# - workPart.Save(...)
|
|
```
|
|
|
|
### LLM Code Generation
|
|
|
|
When LLM generates NXOpen code, stub files help:
|
|
- Validate generated code against actual API
|
|
- Suggest corrections for API misuse
|
|
- Provide parameter type hints
|
|
|
|
### Future: NXOpen Documentation Integration
|
|
|
|
This is **Step 1** of NXOpen integration. Future work:
|
|
|
|
1. ✅ **Stub files for intellisense** (current)
|
|
2. 🔜 **Documentation scraping** for LLM knowledge base
|
|
3. 🔜 **Authenticated docs access** for latest API references
|
|
4. 🔜 **LLM-generated journal scripts** with validation
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Intellisense Not Working
|
|
|
|
**Problem**: No autocomplete suggestions appear
|
|
|
|
**Solutions**:
|
|
1. **Check Pylance Extension**: VSCode → Extensions → Search "Pylance" → Ensure installed
|
|
2. **Verify Settings**: `.vscode/settings.json` has correct stub path
|
|
3. **Check Python Interpreter**: VSCode bottom-left → Select correct Python environment
|
|
4. **Restart VSCode**: Close all windows and reopen
|
|
5. **Check Stub Path**: Ensure path exists and contains `NXOpen` folder
|
|
|
|
### Wrong Suggestions
|
|
|
|
**Problem**: Autocomplete shows incorrect or outdated methods
|
|
|
|
**Solution**: Ensure stub files match your NX version:
|
|
- NX 2412 → Use `NX2412\ugopen\pythonStubs`
|
|
- Different NX version → Update stub path in settings
|
|
|
|
### Type Errors Shown
|
|
|
|
**Problem**: Pylance shows type errors for valid code
|
|
|
|
**Solutions**:
|
|
1. Set `"python.analysis.typeCheckingMode": "basic"` (not "strict")
|
|
2. Add `# type: ignore` for false positives
|
|
3. Update stub files if using newer NX version
|
|
|
|
---
|
|
|
|
## References
|
|
|
|
- **Siemens NX Documentation**: [PLM Portal](https://plm.sw.siemens.com)
|
|
- **TheScriptingEngineer**: [Blog with NXOpen examples](https://thescriptingengineer.com)
|
|
- **Pylance Documentation**: [VSCode Python](https://code.visualstudio.com/docs/python/editing)
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
Now that intellisense is configured:
|
|
|
|
1. **Try It**: Open `tests/test_nxopen_intellisense.py` and explore
|
|
2. **Develop Faster**: Use autocomplete when writing journal scripts
|
|
3. **Contribute**: Help improve Atomizer's NXOpen integration
|
|
|
|
**See**: [DEVELOPMENT_GUIDANCE.md](../DEVELOPMENT_GUIDANCE.md) for strategic roadmap including NXOpen documentation access.
|
|
|
|
---
|
|
|
|
**Implemented By**: Antoine Letarte
|
|
**Date**: 2025-11-17
|
|
**NX Version**: 2412
|
|
**Status**: Production Ready
|