AnsysLink/test/save_mesh_files.py

149 lines
6.0 KiB
Python

#!/usr/bin/env python3
"""
Enhanced mesh generation that saves the mesh files
"""
import sys
import os
import shutil
from pathlib import Path
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from backend.pymechanical.session_manager import ANSYSSessionManager
import logging
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(levelname)s:%(name)s:%(message)s'
)
def generate_and_save_mesh():
"""Generate mesh and save the files to results directory"""
print("Generating and Saving Mesh Files")
print("=" * 50)
session_manager = None
try:
# Create results directory
results_dir = Path("results/mesh_files")
results_dir.mkdir(parents=True, exist_ok=True)
# Initialize ANSYS session
session_manager = ANSYSSessionManager(simulation_mode=False)
session_manager.start_session()
print("✓ ANSYS session started")
# Get project directory
project_dir_script = 'ExtAPI.DataModel.Project.ProjectDirectory'
project_dir = session_manager.mechanical.run_python_script(project_dir_script)
print(f"ANSYS Project Directory: {project_dir}")
# Import geometry
geometry_file = "resource\\blade.step"
print(f"\n1. Importing geometry from {geometry_file}...")
if session_manager.import_geometry(geometry_file):
print("✓ Geometry imported successfully")
else:
print("✗ Geometry import failed")
return
# Create named selections
print("\n2. Creating named selections...")
selection_result = session_manager.create_named_selections()
if selection_result['success']:
print(f"✓ Created {selection_result['total_selections']} named selections")
# Apply mesh controls
print("\n3. Applying mesh controls...")
named_selections = selection_result.get('selections_created', [])
mesh_result = session_manager.apply_mesh_controls(named_selections)
if mesh_result['success']:
print(f"✓ Applied {len(mesh_result['controls_applied'])} mesh controls")
# Generate mesh
print("\n4. Generating mesh...")
generation_result = session_manager.generate_mesh()
if generation_result['success']:
print(f"✓ Mesh generated: {generation_result['element_count']} elements, {generation_result['node_count']} nodes")
else:
print(f"✗ Mesh generation failed: {generation_result.get('error_message', 'Unknown error')}")
return
# Check mesh quality
print("\n5. Checking mesh quality...")
quality_result = session_manager.check_mesh_quality()
if quality_result['success']:
print(f"✓ Quality check: {quality_result['overall_status']} (Score: {quality_result['quality_score']:.1f})")
# Save project file
print("\n6. Saving project file...")
timestamp = __import__('datetime').datetime.now().strftime("%Y%m%d_%H%M%S")
save_script = f'''
import os
project_dir = ExtAPI.DataModel.Project.ProjectDirectory
save_filename = "blade_mesh_{timestamp}.mechdb"
save_path = os.path.join(project_dir, save_filename)
try:
ExtAPI.DataModel.Project.SaveAs(save_path)
if os.path.exists(save_path):
file_size = os.path.getsize(save_path)
print("Project saved: " + save_filename + " (" + str(file_size) + " bytes)")
save_filename + ":" + str(file_size)
else:
"save_failed"
except Exception as e:
"error:" + str(e)
'''
save_result = session_manager.mechanical.run_python_script(save_script)
print(f"Save result: {save_result}")
# Copy the saved file to our results directory
if save_result and ":" in save_result and not save_result.startswith("error"):
filename, size = save_result.split(":", 1)
source_file = os.path.join(project_dir, filename)
dest_file = results_dir / filename
try:
if os.path.exists(source_file):
shutil.copy2(source_file, dest_file)
print(f"✓ Mesh file copied to: {dest_file}")
print(f" File size: {int(size):,} bytes ({int(size)/1024/1024:.1f} MB)")
# Create a summary file
summary_file = results_dir / f"mesh_summary_{timestamp}.txt"
with open(summary_file, 'w') as f:
f.write(f"Blade Mesh Generation Summary\n")
f.write(f"Generated: {timestamp}\n")
f.write(f"Mesh File: {filename}\n")
f.write(f"File Size: {int(size):,} bytes ({int(size)/1024/1024:.1f} MB)\n")
f.write(f"Elements: {generation_result['element_count']}\n")
f.write(f"Nodes: {generation_result['node_count']}\n")
f.write(f"Quality Score: {quality_result.get('quality_score', 'N/A')}\n")
f.write(f"Quality Status: {quality_result.get('overall_status', 'N/A')}\n")
f.write(f"Named Selections: {len(named_selections)}\n")
f.write(f"Mesh Controls: {len(mesh_result.get('controls_applied', []))}\n")
print(f"✓ Summary saved to: {summary_file}")
else:
print(f"✗ Source file not found: {source_file}")
except Exception as e:
print(f"✗ Error copying file: {e}")
print(f"\n✓ Mesh generation and saving completed!")
print(f"Check the results directory: {results_dir}")
except Exception as e:
print(f"\n✗ Mesh generation failed: {str(e)}")
import traceback
traceback.print_exc()
finally:
if session_manager:
session_manager.close_session()
if __name__ == "__main__":
generate_and_save_mesh()