Imports System.Collections.Generic
Imports System.Runtime.InteropServices
Imports SolidWorks.Interop.sldworks
Imports SolidWorks.Interop.swconst
[Guid("D07B8F24-3B1B-4C99-BF44-8F6E3E3F4A4A")] // Yeni GUID oluşturabilirsiniz
public class PdmMacroAddIn : IEdmAddIn5
private const string VaultName = "CRYSTAL"; // PDM kasası adı
public void GetAddInInfo(ref EdmAddInInfo info, IEdmVault5 vault, IEdmCmdMgr5 cmdMgr)
info.mbsAddInName = "PDM Yeniden Oluştur Görevi";
info.mbsCompany = "CRYSTAL";
info.mlRequiredVersionMajor = 20;
info.mlRequiredVersionMinor = 0;
// Menüye komut ekleyelim
cmdMgr.AddCmd(1, "Yeniden Oluştur Görevi", (int)EdmMenuFlags.EdmMenu_Nothing);
public void OnCmd(ref EdmCmd cmd, ref EdmCmdData[] ppoData)
if (cmd.meCmdType == EdmCmdType.EdmCmd_Menu && ppoData.Length > 0)
string filePath = ppoData[0].mbsStrData1;
private void ProcessFile(string partFilePath)
IEdmVault5 vault = new EdmVault5();
vault.LoginAuto(VaultName, 0);
LogError("PDM giriş başarısız! Vault adı veya yetkiler kontrol edilmeli.");
IEdmFile5 file = vault.GetFileFromPath(partFilePath, out IEdmFolder5 folder);
LogError($"Dosya bulunamadı: {partFilePath}");
// Dosya kilitli mi kontrol et
file.GetLockInfo(out IEdmUser5 user, out _, out _);
LogError($"Dosya başka bir kullanıcı tarafından alınmış: {user.Name}");
string previousState = GetFileState(file);
Log($"Dosyanın mevcut durumu: {previousState}");
List<string> relatedFiles = GetWhereUsedFiles(vault, file);
Log($"Bulunan ilişkili dosya sayısı: {relatedFiles.Count}");
UpdateSolidWorksFiles(relatedFiles, vault);
if (previousState == "Onaylandı")
SetFileState(file, "Onaylandı");
LogSuccess("İşlem tamamlandı.");
LogError($"Beklenmedik hata: {ex.Message}");
Marshal.FinalReleaseComObject(vault);
private void UpdateSolidWorksFiles(List<string> files, IEdmVault5 vault)
SldWorks swApp = Marshal.GetActiveObject("SldWorks.Application") as SldWorks;
Log("SolidWorks başlatılıyor...");
swApp = new SldWorks { Visible = false };
foreach (string file in files)
string extension = Path.GetExtension(file).ToLower();
int docType = extension switch
".sldprt" => (int)swDocumentTypes_e.swDocPART,
".sldasm" => (int)swDocumentTypes_e.swDocASSEMBLY,
".slddrw" => (int)swDocumentTypes_e.swDocDRAWING,
if (docType == -1) continue;
ModelDoc2 doc = swApp.OpenDoc6(file, docType, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "", out int errors, out int warnings);
Log($"Güncelleniyor: {file}");
doc.ForceRebuild3(false);
bool saveSuccess = doc.Save3((int)swSaveAsOptions_e.swSaveAsOptions_SaveReferenced, errors, warnings);
if (!saveSuccess) LogError($"Dosya kaydedilemedi: {file}");
IEdmFile5 edmFile = vault.GetFileFromPath(file, out IEdmFolder5 folder);
edmFile.LockFile(folder.ID, 0);
edmFile.CheckIn(folder.ID, 0, "Dosya Yeniden Oluşturuldu");
LogSuccess($"Güncellendi ve PDM'e yüklendi: {file}");
private void Log(string message)