Files
Atomizer/docs/NXOPEN_INTELLISENSE_SETUP.md
Anto01 a2ca28a247 feat: Upgrade atomizer to Python 3.11 and enable full NXOpen integration
Upgraded atomizer environment from Python 3.10 to 3.11 to match NX2412's
Python version, enabling seamless NXOpen module import for development.

Changes:
- Upgraded atomizer conda environment to Python 3.11.14
- Added nxopen.pth to site-packages pointing to NX2412 Python modules
- Updated VSCode stub path from Simcenter3D to NX2412
- Verified NXOpen import works successfully in atomizer environment

Configuration:
- Python version: 3.11.14 (matches NX2412)
- NXOpen path: C:\Program Files\Siemens\NX2412\NXBIN\python
- Stub path: C:\Program Files\Siemens\NX2412\UGOPEN\pythonStubs

Benefits:
- NXOpen modules can now be imported directly in Python scripts
- No version conflicts between atomizer and NX
- Seamless development workflow for NXOpen code
- Full intellisense support with type hints and documentation

Documentation Updated:
- Added Python 3.11 requirement to NXOPEN_INTELLISENSE_SETUP.md
- Added Step 0: Python version check
- Added Step 1: NXOpen path setup with .pth file
- Updated all paths to use NX2412 instead of Simcenter3D_2412

Testing:
- Verified: import NXOpen successful
- Verified: NXOpen.__file__ points to correct location
- Ready for use in optimization workflows

This completes the NXOpen integration foundation for Atomizer.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 08:55:09 -05:00

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 `Simcenter3D_2412\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