210 lines
5.9 KiB
Markdown
210 lines
5.9 KiB
Markdown
|
|
# NX Documentation Lookup Module
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
This module provides on-demand access to Siemens NX Open and Simcenter documentation via the Dalidou MCP server. Use these tools when building new extractors, NX automation scripts, or debugging NX-related issues.
|
||
|
|
|
||
|
|
## CRITICAL: When to AUTO-SEARCH Documentation
|
||
|
|
|
||
|
|
**You MUST call `siemens_docs_search` BEFORE writing any code that uses NX Open APIs.**
|
||
|
|
|
||
|
|
### Automatic Search Triggers
|
||
|
|
|
||
|
|
| User Request | Action Required |
|
||
|
|
|--------------|-----------------|
|
||
|
|
| "Create extractor for {X}" | → `siemens_docs_search("{X} NXOpen")` |
|
||
|
|
| "Get {property} from part" | → `siemens_docs_search("{property} NXOpen.Part")` |
|
||
|
|
| "Extract {data} from FEM" | → `siemens_docs_search("{data} NXOpen.CAE")` |
|
||
|
|
| "How do I {action} in NX" | → `siemens_docs_search("{action} NXOpen")` |
|
||
|
|
| Any code with `NXOpen.*` | → Search before writing |
|
||
|
|
|
||
|
|
### Example: User asks "Create an extractor for inertia values"
|
||
|
|
|
||
|
|
```
|
||
|
|
STEP 1: Immediately search
|
||
|
|
→ siemens_docs_search("inertia mass properties NXOpen")
|
||
|
|
|
||
|
|
STEP 2: Review results, fetch details
|
||
|
|
→ siemens_docs_fetch("NXOpen.MeasureManager")
|
||
|
|
|
||
|
|
STEP 3: Now write code with correct API calls
|
||
|
|
```
|
||
|
|
|
||
|
|
**DO NOT guess NX Open API names.** Always search first.
|
||
|
|
|
||
|
|
## When to Load
|
||
|
|
|
||
|
|
Load this module when:
|
||
|
|
- Creating new NX Open scripts or extractors
|
||
|
|
- Working with `NXOpen.*` namespaces
|
||
|
|
- Debugging NX automation errors
|
||
|
|
- User mentions "NX API", "NX Open", "Simcenter docs"
|
||
|
|
- Building features that interact with NX/Simcenter
|
||
|
|
|
||
|
|
## Available MCP Tools
|
||
|
|
|
||
|
|
### `siemens_docs_search`
|
||
|
|
|
||
|
|
**Purpose**: Search across NX Open, Simcenter, and Teamcenter documentation
|
||
|
|
|
||
|
|
**When to use**:
|
||
|
|
- Finding which class/method performs a specific task
|
||
|
|
- Discovering available APIs for a feature
|
||
|
|
- Looking up Nastran card references
|
||
|
|
|
||
|
|
**Examples**:
|
||
|
|
```
|
||
|
|
siemens_docs_search("get node coordinates FEM")
|
||
|
|
siemens_docs_search("CQUAD4 element properties")
|
||
|
|
siemens_docs_search("NXOpen.CAE mesh creation")
|
||
|
|
siemens_docs_search("extract stress results OP2")
|
||
|
|
```
|
||
|
|
|
||
|
|
### `siemens_docs_fetch`
|
||
|
|
|
||
|
|
**Purpose**: Fetch a specific documentation page with full content
|
||
|
|
|
||
|
|
**When to use**:
|
||
|
|
- Need complete class reference
|
||
|
|
- Getting detailed method signatures
|
||
|
|
- Reading full examples
|
||
|
|
|
||
|
|
**Examples**:
|
||
|
|
```
|
||
|
|
siemens_docs_fetch("NXOpen.CAE.FemPart")
|
||
|
|
siemens_docs_fetch("Nastran Quick Reference CQUAD4")
|
||
|
|
```
|
||
|
|
|
||
|
|
### `siemens_auth_status`
|
||
|
|
|
||
|
|
**Purpose**: Check if the Siemens SSO session is valid
|
||
|
|
|
||
|
|
**When to use**:
|
||
|
|
- Before a series of documentation lookups
|
||
|
|
- When fetch requests fail
|
||
|
|
- Debugging connection issues
|
||
|
|
|
||
|
|
### `siemens_login`
|
||
|
|
|
||
|
|
**Purpose**: Re-authenticate with Siemens if session expired
|
||
|
|
|
||
|
|
**When to use**:
|
||
|
|
- After `siemens_auth_status` shows expired
|
||
|
|
- When documentation fetches return auth errors
|
||
|
|
|
||
|
|
## Workflow: Building New Extractor
|
||
|
|
|
||
|
|
When creating a new extractor that uses NX Open APIs:
|
||
|
|
|
||
|
|
### Step 1: Search for Relevant APIs
|
||
|
|
```
|
||
|
|
→ siemens_docs_search("element stress results OP2")
|
||
|
|
```
|
||
|
|
Review results to identify candidate classes/methods.
|
||
|
|
|
||
|
|
### Step 2: Fetch Detailed Documentation
|
||
|
|
```
|
||
|
|
→ siemens_docs_fetch("NXOpen.CAE.Result")
|
||
|
|
```
|
||
|
|
Get full class documentation with method signatures.
|
||
|
|
|
||
|
|
### Step 3: Understand Data Formats
|
||
|
|
```
|
||
|
|
→ siemens_docs_search("CQUAD4 stress output format")
|
||
|
|
```
|
||
|
|
Understand Nastran output structure.
|
||
|
|
|
||
|
|
### Step 4: Build Extractor
|
||
|
|
Following EXT_01 template, create the extractor with:
|
||
|
|
- Proper API calls based on documentation
|
||
|
|
- Docstring referencing the APIs used
|
||
|
|
- Error handling for common NX exceptions
|
||
|
|
|
||
|
|
### Step 5: Document API Usage
|
||
|
|
In the extractor docstring:
|
||
|
|
```python
|
||
|
|
def extract_element_stress(op2_path: Path) -> Dict:
|
||
|
|
"""
|
||
|
|
Extract element stress results from OP2 file.
|
||
|
|
|
||
|
|
NX Open APIs Used:
|
||
|
|
- NXOpen.CAE.Result.AskElementStress
|
||
|
|
- NXOpen.CAE.ResultAccess.AskResultValues
|
||
|
|
|
||
|
|
Nastran Cards:
|
||
|
|
- CQUAD4, CTRIA3 (shell elements)
|
||
|
|
- STRESS case control
|
||
|
|
"""
|
||
|
|
```
|
||
|
|
|
||
|
|
## Workflow: Debugging NX Errors
|
||
|
|
|
||
|
|
When encountering NX Open errors:
|
||
|
|
|
||
|
|
### Step 1: Search for Correct API
|
||
|
|
```
|
||
|
|
Error: AttributeError: 'FemPart' object has no attribute 'GetNodes'
|
||
|
|
|
||
|
|
→ siemens_docs_search("FemPart get nodes")
|
||
|
|
```
|
||
|
|
|
||
|
|
### Step 2: Fetch Correct Class Reference
|
||
|
|
```
|
||
|
|
→ siemens_docs_fetch("NXOpen.CAE.FemPart")
|
||
|
|
```
|
||
|
|
Find the actual method name and signature.
|
||
|
|
|
||
|
|
### Step 3: Apply Fix
|
||
|
|
Document the correction:
|
||
|
|
```python
|
||
|
|
# Wrong: femPart.GetNodes()
|
||
|
|
# Right: femPart.BaseFEModel.FemMesh.Nodes
|
||
|
|
```
|
||
|
|
|
||
|
|
## Common Search Patterns
|
||
|
|
|
||
|
|
| Task | Search Query |
|
||
|
|
|------|--------------|
|
||
|
|
| Mesh operations | `siemens_docs_search("NXOpen.CAE mesh")` |
|
||
|
|
| Result extraction | `siemens_docs_search("CAE result OP2")` |
|
||
|
|
| Geometry access | `siemens_docs_search("NXOpen.Features body")` |
|
||
|
|
| Material properties | `siemens_docs_search("Nastran MAT1 material")` |
|
||
|
|
| Load application | `siemens_docs_search("CAE load force")` |
|
||
|
|
| Constraint setup | `siemens_docs_search("CAE boundary condition")` |
|
||
|
|
| Expressions/Parameters | `siemens_docs_search("NXOpen Expression")` |
|
||
|
|
| Part manipulation | `siemens_docs_search("NXOpen.Part")` |
|
||
|
|
|
||
|
|
## Key NX Open Namespaces
|
||
|
|
|
||
|
|
| Namespace | Domain |
|
||
|
|
|-----------|--------|
|
||
|
|
| `NXOpen.CAE` | FEA, meshing, results |
|
||
|
|
| `NXOpen.Features` | Parametric features |
|
||
|
|
| `NXOpen.Assemblies` | Assembly operations |
|
||
|
|
| `NXOpen.Part` | Part-level operations |
|
||
|
|
| `NXOpen.UF` | User Function (legacy) |
|
||
|
|
| `NXOpen.GeometricUtilities` | Geometry helpers |
|
||
|
|
|
||
|
|
## Integration with Extractors
|
||
|
|
|
||
|
|
All extractors in `optimization_engine/extractors/` should:
|
||
|
|
|
||
|
|
1. **Search before coding**: Use `siemens_docs_search` to find correct APIs
|
||
|
|
2. **Document API usage**: List NX Open APIs in docstring
|
||
|
|
3. **Handle NX exceptions**: Catch `NXOpen.NXException` appropriately
|
||
|
|
4. **Follow 20-line rule**: If extraction is complex, check if existing extractor handles it
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
| Issue | Solution |
|
||
|
|
|-------|----------|
|
||
|
|
| Auth errors | Run `siemens_auth_status`, then `siemens_login` if needed |
|
||
|
|
| No results | Try broader search terms, check namespace spelling |
|
||
|
|
| Incomplete docs | Fetch the parent class for full context |
|
||
|
|
| Network errors | Verify Dalidou is accessible: `ping dalidou.local` |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
*Module Version: 1.0*
|
||
|
|
*MCP Server: dalidou.local:5000*
|