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

8.1 KiB

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:

# 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:

# 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:

# 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:

{
    "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
>>> 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:

import NXOpen
session = NXOpen.Session.GetSession()
# ❌ No suggestions when typing "session."
# ❌ No parameter hints for methods
# ❌ Must look up API in documentation

After Intellisense:

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):

# 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):

# 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):

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


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 for strategic roadmap including NXOpen documentation access.


Implemented By: Antoine Letarte Date: 2025-11-17 NX Version: 2412 Status: Production Ready