YazılarCAD Otomasyon

Python API ile SolidWorks Otomasyonu

Tekrarlayan tasarım görevlerini azaltmak için SolidWorks API üzerinden script yazmaya giriş.

  • 4 dk okuma
Python API ile SolidWorks Otomasyonu
Bu Yazıda

SolidWorks API ekosisteminde tekrarlayan CAD operasyonlarını otomatikleştirmek, mühendislik ekiplerinin tekrarlayan modelleme yükünü azaltmanın en doğrudan yollarından biridir. Python, COM arayüzü veya .NET köprüleri üzerinden bu otomasyonu hızlı prototipleme için kullanılabilir; üretim ortamında ise genellikle C# / .NET tercih edilir.

SolidWorks API otomasyonunu temsil eden illüstrasyon
SolidWorks otomasyon ve API katmanı
01 / 08

API bağlantı modeli

SolidWorks otomasyonu tipik olarak uygulama oturumunu açma, aktif doküman/montaj referansını alma, feature ve dimension API'leri üzerinden güncelleme ve çıktı üretme adımlarından oluşur. Script dili seçimi; performans, dağıtım ve mevcut ekip yetkinliğine göre yapılmalıdır.

Python hızlı deney ve otomasyon scriptleri için uygundur; kurumsal eklenti ve makro mimarisinde C# / .NET daha yaygındır.
02 / 08

Parametrik montaj akışı

  1. Kullanıcı ölçü girdilerinin alınması
  2. Global değişken ve dimension güncellemesi
  3. Montaj ilişkilerinin yeniden değerlendirilmesi
  4. Doğrulama (çakışma, eksik referans)
  5. Teknik resim ve üretim çıktılarının paketlenmesi
Parametrik tasarım sürecini temsil eden illüstrasyon
Parametrik girdi ve kural paneli
Teknik veri akışını temsil eden illüstrasyon
Otomasyon veri hattı
03 / 08

Çıktı paketleri

Tek tuş veya tek komutla PDF, DWG, DXF ve büküm resimleri gibi standart çıktı setleri üretmek, filo ve seri üretim senaryolarında tutarlılığı artırır. Çıktı adlandırma, klasör yapısı ve revizyon numaralandırması otomasyonun parçası olmalıdır.

CAD ve teknik tasarımı temsil eden illüstrasyon
Teknik dokümantasyon ve CAD çıktıları
04 / 08

COM bağlantısı: ilk çalışan script

Python tarafında SolidWorks'e bağlanmanın yolu COM arayüzüdür. pywin32 ile oturum açmak birkaç satır sürer, ama iki nokta baştan doğru kurulmalı: uygulamanın zaten açık olup olmadığını kontrol etmek ve görünürlüğü açıkça ayarlamak.

import win32com.client as win32

# Dispatch açık oturumu bulur, yoksa yeni başlatır.
sw = win32.Dispatch("SldWorks.Application")
sw.Visible = True

model = sw.ActiveDoc
if model is None:
    raise RuntimeError("Açık bir doküman yok — parça veya montaj açın.")

print(model.GetTitle(), "|", model.GetType())

GetType() dönüş değeri işin geri kalanını belirler: 1 parça, 2 montaj, 3 teknik resim. Otomasyonun ilk dalı hemen burada ayrılır — montaja parça mantığı uygulamak en sık yapılan hatadır.

05 / 08

Parametre güncellemenin doğru yolu

Ölçüleri tek tek Dimension nesnesinden çekmek çalışır ama kırılgandır: feature adı değişince script susar. Daha dayanıklı yol, tasarımı global değişkenler üzerinden sürmektir; denklem tablosuna bağlanan ölçüler tek noktadan yönetilir.

def set_global(model, name: str, value_mm: float) -> None:
    """Global değişkeni günceller. SolidWorks metre bekler, mm'den çeviririz."""
    eq = model.GetEquationMgr()
    for i in range(eq.GetCount()):
        if eq.Equation(i).startswith(f'"{name}"'):
            eq.Equation(i, f'"{name}" = {value_mm}mm')
            return
    raise KeyError(f"Global değişken bulunamadı: {name}")

set_global(model, "Genislik", 2400)
set_global(model, "Yukseklik", 1800)

# Rebuild'i zorla: True → tüm ağacı yeniden kur.
model.ForceRebuild3(True)

ForceRebuild3(True) pahalıdır. Toplu işlemde her parametreden sonra değil, parametre setinin tamamı yazıldıktan sonra bir kez çağrılmalı.

Parametrik tasarım sürecini temsil eden illüstrasyon
Parametrik girdi ve kural paneli
06 / 08

Oturum yönetimi ve hata yakalama

Otomasyon scriptlerinin üretimde patlamasının bir numaralı sebebi, SolidWorks'ün açtığı modal diyaloglardır: bir uyarı penceresi açılır, script cevap bekler, işlem sonsuza kadar asılı kalır. Çözüm, işlem başında kullanıcı denetimini kapatmaktır.

# 0 = hiçbir uyarı gösterme, sessizce varsayılanı seç
sw.SetUserPreferenceToggle(
    win32.constants.swInputDimValOnCreate if hasattr(win32, "constants") else 109,
    False,
)

errors, warnings = win32.VARIANT(win32.pythoncom.VT_BYREF | win32.pythoncom.VT_I4, 0),                    win32.VARIANT(win32.pythoncom.VT_BYREF | win32.pythoncom.VT_I4, 0)

model.Save3(1, errors, warnings)   # 1 = sessiz kaydet
if errors.value != 0:
    raise IOError(f"Kaydetme hatası kodu: {errors.value}")

Buradaki VARIANT sarmalayıcıları COM'un ByRef parametreleri içindir; Python'da en çok zaman kaybettiren ayrıntı budur. Hata kodunu kontrol etmeden bir sonraki adıma geçmeyin — sessiz kaydetme, sessiz başarısızlık da demektir.

07 / 08

Çıktı paketi üretimi

Tek komutla PDF, DWG ve DXF çıkarmak, otomasyonun sahada en çok hissedilen faydasıdır.

from pathlib import Path

def export(model, out_dir: Path, stem: str) -> None:
    out_dir.mkdir(parents=True, exist_ok=True)
    for ext in ("pdf", "dwg", "dxf"):
        target = out_dir / f"{stem}.{ext}"
        ok = model.SaveAs3(str(target), 0, 2)   # 2 = sessiz
        if not ok:
            print(f"UYARI: {ext.upper()} üretilemedi → {target}")

Adlandırma, klasör yapısı ve revizyon numarası otomasyonun parçası olmalı. Aksi halde dosyalar üretilir ama kimse hangi revizyonun hangi klasörde olduğunu bilmez; kazanılan zaman arama zamanında geri gider.

08 / 08

Python nerede biter, C# nerede başlar

Python bu işin keşif dilidir: bir fikri yarım saatte deneyip çalışıp çalışmadığını görürsünüz. Ama üretime giden eklentide üç sebeple C# / .NET tercih ediyorum:

  1. Dağıtım. Kullanıcının makinesine Python yorumlayıcısı ve bağımlılık kurmak, tek bir imzalı eklenti DLL'i kurmaktan çok daha kırılgan.
  2. Performans. COM çağrı sayısı yükseldiğinde (yüzlerce parçalı montaj) yönetilen kodun doğrudan API bağlaması belirgin biçimde hızlı.
  3. Arayüz. SolidWorks görev bölmesine (Task Pane) gömülü bir panel, kullanıcı için harici bir script penceresinden kıyaslanamayacak kadar doğal.
Pratik kural: fikri Python ile doğrula, kalıcı olacak akışı C# ile yaz. Aradaki köprü, iki tarafın da aynı kural setini okumasıdır — kuralları koda değil, veriye koyun.
İlgili projeAI Destekli SolidWorks Add-inAI destekli SolidWorks Add-in: parametrik tasarım, 2D→3D otomasyon ve CAD workflow'unu yazılımla tanımlayan mühendislik yazılımı projesi.