#!/usr/bin/env python3
"""
CAD Conversion Demo - Complete workflow for STEP files to Blender
This demo shows how to use the integrated CAD conversion capabilities
across robotics-mcp and blender-mcp servers.
"""
import asyncio
import os
from pathlib import Path
async def demo_cad_conversion_workflow():
"""
Complete CAD conversion workflow demonstration.
This shows the integrated workflow:
1. Check available CAD conversion tools
2. Convert STEP files to mesh formats
3. Import converted models into Blender
4. Use in robotics applications
"""
# Example STEP files (your pilot labs scout robot files)
step_files = [
"C:\\Users\\sandr\\Downloads\\Track_Version_STP_20220821\\mid-l-0718.stp",
"C:\\Users\\sandr\\Downloads\\Track_Version_STP_20220821\\mid-r-0718.stp",
"C:\\Users\\sandr\\Downloads\\Track_Version_STP_20220821\\yudai-0821.stp",
]
print("CAD Conversion Workflow Demo")
print("=" * 50)
# Step 1: Check CAD conversion support
print("\nStep 1: Checking CAD conversion support...")
print("Use robotics-mcp cad_converter tool:")
print('result = await cad_converter(operation="check_cad_support")')
# Step 2: Convert STEP files
print("\nStep 2: Converting STEP files to OBJ format...")
for step_file in step_files:
if os.path.exists(step_file):
filename = Path(step_file).name
print(f"Converting {filename}...")
print("await cad_converter(")
print(' operation="convert_cad",')
print(f' cad_path=r"{step_file}",')
print(' output_format="obj",')
print(' mesh_quality="high"')
print(")")
else:
print(f"File not found: {step_file}")
# Step 3: Import to Blender
print("\nStep 3: Importing converted models into Blender...")
print("Use blender-mcp import tools:")
print("await blender_import(")
print(' operation="import_cad",')
print(' filepath="converted_robot_part.obj",')
print(' cad_conversion_tool="mayo",')
print(' mesh_quality="high"')
print(")")
# Step 4: Robotics integration
print("\nStep 4: Using in robotics workflows...")
print("Create robot model with converted parts:")
print("await robot_model_tools(")
print(' operation="create_robot",')
print(' robot_type="scout",')
print(' model_files=["scout_body.obj", "scout_wheel_left.obj", "scout_wheel_right.obj"]')
print(")")
print("\nWorkflow complete!")
print("Your STEP CAD files are now usable in Blender and robotics simulations.")
async def show_available_tools():
"""Show all available CAD conversion tools and their capabilities."""
tools_info = {
"Mayo Converter": {
"type": "Local CAD converter",
"formats": ["STEP", "STP", "IGES", "IGS", "BREP"],
"outputs": ["OBJ", "STL", "PLY"],
"pros": ["Free", "Fast", "High quality"],
"setup": "Download from fougue/mayo releases, place mayo-conv.exe in PATH",
},
"FreeCAD": {
"type": "Open-source CAD software",
"formats": ["STEP", "STP", "IGES", "IGS"],
"outputs": ["OBJ", "STL", "PLY", "glTF"],
"pros": ["Full CAD software", "Parametric modeling"],
"setup": "Install FreeCAD, ensure Python integration",
},
"CAD Assistant": {
"type": "Web-based converter",
"formats": ["STEP", "STP", "IGES", "IGS", "BREP"],
"outputs": ["OBJ", "STL", "PLY"],
"pros": ["No installation", "Cross-platform"],
"setup": "Visit blender3darchitect.com",
},
"Online Converters": {
"type": "Web services",
"formats": ["STEP", "STP"],
"outputs": ["OBJ", "STL", "BLEND"],
"pros": ["Easy to use", "No software installation"],
"cons": ["File size limits", "Privacy concerns"],
"examples": ["imagetostl.com", "dorchester3d.com"],
},
}
print("\nAvailable CAD Conversion Tools")
print("=" * 50)
for tool_name, info in tools_info.items():
print(f"\n{tool_name}")
print(f" Type: {info['type']}")
print(f" Input: {', '.join(info['formats'])}")
print(f" Output: {', '.join(info['outputs'])}")
print(f" Pros: {', '.join(info['pros'])}")
if "cons" in info:
print(f" Cons: {', '.join(info['cons'])}")
if "setup" in info:
print(f" Setup: {info['setup']}")
if "examples" in info:
print(f" Examples: {', '.join(info['examples'])}")
async def show_mcp_integration():
"""Show how MCP servers integrate CAD conversion."""
print("\nMCP Server Integration")
print("=" * 50)
integration_steps = [
{
"server": "robotics-mcp",
"tool": "cad_converter",
"capabilities": [
"Check available conversion tools",
"Convert CAD files to mesh formats",
"Batch conversion of multiple files",
"Analyze CAD file metadata",
"Direct Blender import integration",
],
},
{
"server": "blender-mcp",
"tool": "blender_import (enhanced)",
"capabilities": [
"Direct CAD file import",
"Automatic conversion pipeline",
"Mesh quality control",
"Scale adjustment for units",
"Material and texture import",
],
},
]
for integration in integration_steps:
print(f"\n{integration['server']}")
print(f" Tool: {integration['tool']}")
print(" Capabilities:")
for cap in integration["capabilities"]:
print(f" • {cap}")
async def main():
"""Run the complete CAD conversion demo."""
print("CAD Conversion Integration Demo")
print("This demonstrates how your MCP ecosystem now supports CAD files!")
print()
await demo_cad_conversion_workflow()
await show_available_tools()
await show_mcp_integration()
print("\n" + "=" * 50)
print("SUCCESS: Your STEP files are now part of the robotics workflow!")
print("Use robotics-mcp cad_converter and blender-mcp import tools")
print("to convert and visualize your pilot labs scout robot designs.")
if __name__ == "__main__":
asyncio.run(main())