Skip to content

Instantly share code, notes, and snippets.

@stephensmitchell
Created October 12, 2025 11:40
Show Gist options
  • Save stephensmitchell/63715994ee55d99e95e8d6d6ce2af39e to your computer and use it in GitHub Desktop.
Save stephensmitchell/63715994ee55d99e95e8d6d6ce2af39e to your computer and use it in GitHub Desktop.
AlibreX and Alibre Script API export script with STEP AP242 for IronPython (Alibre Script addon) access
"""
Alibre Export Script
"""
import clr
import sys
from System import Environment, IO
try:
clr.AddReference('AlibreX')
import AlibreX
ALIBREX_AVAILABLE = True
except:
ALIBREX_AVAILABLE = False
print("Warning: AlibreX not available. OBJ and AP242 export will not work.")
try:
import AlibreScript
ALIBRESCRIPT_AVAILABLE = True
except:
ALIBRESCRIPT_AVAILABLE = False
print("Warning: AlibreScript not available.")
class ExportError(Exception):
"""Custom exception for export errors"""
pass
class AlibreExporter(object):
"""
Comprehensive exporter supporting both AlibreScript and AlibreX APIs
"""
def __init__(self, part=None):
"""
Initialize the exporter
Args:
part: Optional AlibreScript Part object. If None, will use CurrentPart()
"""
self.alibrescript_part = None
self.alibrex_session = None
if part is not None:
self.alibrescript_part = part
else:
try:
self.alibrescript_part = CurrentPart()
except:
raise ExportError("Unable to access current part via AlibreScript API")
if ALIBREX_AVAILABLE and ALIBRESCRIPT_AVAILABLE:
try:
root = AlibreScript.API.Global.Root
self.alibrex_session = root.TopmostSession
if self.alibrex_session is None:
print("Warning: AlibreX session not available")
except Exception as e:
print("Warning: Could not access AlibreX session: " + str(e))
def export_STEPAP203(self, filepath):
if not self.alibrescript_part:
raise ExportError("AlibreScript Part not available")
try:
self.alibrescript_part.ExportSTEP203(filepath)
return True
except Exception as e:
raise ExportError("STEP 203 export failed: " + str(e))
def export_STEPAP214(self, filepath):
if not self.alibrescript_part:
raise ExportError("AlibreScript Part not available")
try:
self.alibrescript_part.ExportSTEP214(filepath)
return True
except Exception as e:
raise ExportError("STEP 214 export failed: " + str(e))
def export_STEPAP242(self, filepath):
if not self.alibrex_session:
raise ExportError("AlibreX session not available for AP242 export")
try:
self.alibrex_session.ExportAP242(filepath)
return True
except Exception as e:
raise ExportError("STEP AP242 export failed: " + str(e))
def export_IGES(self, filepath):
if not self.alibrescript_part:
raise ExportError("AlibreScript Part not available")
try:
self.alibrescript_part.ExportIGES(filepath)
return True
except Exception as e:
raise ExportError("IGES export failed: " + str(e))
def export_STL(self, filepath):
if not self.alibrescript_part:
raise ExportError("AlibreScript Part not available")
try:
self.alibrescript_part.ExportSTL(filepath)
return True
except Exception as e:
raise ExportError("STL export failed: " + str(e))
def export_OBJ(self, filepath):
if not self.alibrex_session:
raise ExportError("AlibreX session not available for OBJ export")
try:
self.alibrex_session.ExportOBJ(filepath)
return True
except Exception as e:
raise ExportError("OBJ export failed: " + str(e))
def export_SAT(self, filepath, version=7, save_colors=True):
if not self.alibrescript_part:
raise ExportError("AlibreScript Part not available")
try:
self.alibrescript_part.ExportSAT(filepath, version, save_colors)
return True
except Exception as e:
raise ExportError("SAT export failed: " + str(e))
def export_BIP(self, filepath):
if not self.alibrescript_part:
raise ExportError("AlibreScript Part not available")
try:
self.alibrescript_part.ExportBIP(filepath)
return True
except Exception as e:
raise ExportError("BIP export failed: " + str(e))
desktop_path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\" + "exports" + "\\"
print("Exporting all formats to Desktop...")
print("Destination folder: " + desktop_path + "\n" + "exports" + "\n" )
try:
exporter = AlibreExporter()
step203_path = IO.Path.Combine(desktop_path, "exported_part_STEP203")
step214_path = IO.Path.Combine(desktop_path, "exported_part_STEP214")
ap242_path = IO.Path.Combine(desktop_path, "exported_part_STEPAP242")
iges_path = IO.Path.Combine(desktop_path, "exported_part")
stl_path = IO.Path.Combine(desktop_path, "exported_part.stl")
obj_path = IO.Path.Combine(desktop_path, "exported_part.obj")
sat_path = IO.Path.Combine(desktop_path, "exported_part.sat")
bip_path = IO.Path.Combine(desktop_path, "exported_part.bip")
results = []
try:
exporter.export_STEPAP203(step203_path)
results.append("✅ STEP 203 exported: " + step203_path)
except Exception as e:
results.append("❌ STEP 203 failed: " + str(e))
try:
exporter.export_STEPAP214(step214_path)
results.append("✅ STEP 214 exported: " + step214_path)
except Exception as e:
results.append("❌ STEP 214 failed: " + str(e))
try:
exporter.export_STEPAP242(ap242_path)
results.append("✅ STEP AP242 exported: " + ap242_path)
except Exception as e:
results.append("❌ STEP AP242 failed: " + str(e))
try:
exporter.export_IGES(iges_path)
results.append("✅ IGES exported: " + iges_path)
except Exception as e:
results.append("❌ IGES failed: " + str(e))
try:
exporter.export_STL(stl_path)
results.append("✅ STL exported: " + stl_path)
except Exception as e:
results.append("❌ STL failed: " + str(e))
try:
exporter.export_OBJ(obj_path)
results.append("✅ OBJ exported: " + obj_path)
except Exception as e:
results.append("❌ OBJ failed: " + str(e))
try:
exporter.export_SAT(sat_path)
results.append("✅ SAT exported: " + sat_path)
except Exception as e:
results.append("❌ SAT failed: " + str(e))
try:
exporter.export_BIP(bip_path)
results.append("✅ BIP exported: " + bip_path)
except Exception as e:
results.append("❌ BIP failed: " + str(e))
print("\n--- Export Summary ---")
for line in results:
print(line)
except Exception as e:
print("❌ Batch export failed: " + str(e))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment