#pragma once #include #include #include "com/fikom_nesne.hpp" // CATIA belge modeli sarmalayıcıları — FikatiaV2024 I*.py dosyalarının C++23 portu. // Python'daki "I" ön eki kaldirildi (IDokuman → Dokuman). Koleksiyon indeksleri Python // portundaki gibi 0-tabanlıdır (COM'a gecerken +1 uygulanır; FikomNesne::eleman ham // 1-tabanlı CATIA kuralındadır — ikisini karıştırma). namespace fikatia { enum class TedarikYontemi : long { Bilinmiyor = 0, Yapilacak = 1, SatinAlinacak = 2 }; enum class IsModu : long { Gecerli = 0, Gorsel = 1, Dizayn = 2 }; enum class CiktiTuru : long { Txt = 0, Csv = 1, Html = 2 }; // IFikomObject karşılığı ortak taban: COM nesnesini tutar, Name erişimi sağlar. class FikomSarmal { public: FikomSarmal() = default; explicit FikomSarmal(FikomNesne com) : com_(std::move(com)) {} [[nodiscard]] bool gecerli() const { return com_.gecerli(); } [[nodiscard]] explicit operator bool() const { return gecerli(); } [[nodiscard]] FikomNesne& com() { return com_; } [[nodiscard]] const FikomNesne& com() const { return com_; } [[nodiscard]] std::wstring ismi() const { return com_.metin(L"Name"); } void ismiAyarla(const std::wstring& ad) { com_.ozellikAyarla(L"Name", _variant_t(ad.c_str())); } protected: FikomNesne com_; }; class Dokuman; class Dokumanlar; class PartDokuman; class ProductDokuman; class Part; class Product; class Productlar; class Body; class Bodyler; class HibridBody; class HibridBodyler; class Parametre; class Parametreler; class ParametreSeti; class Secililer; class SeciliEleman; // ---- Body / HibridBody --------------------------------------------------------- class Body : public FikomSarmal { public: Body() = default; explicit Body(FikomNesne com) : FikomSarmal(std::move(com)) {} }; class HibridBody : public FikomSarmal { public: HibridBody() = default; explicit HibridBody(FikomNesne com) : FikomSarmal(std::move(com)) {} HibridBody hibridBodyEkle(const std::wstring& ismi = {}); }; class Bodyler : public FikomSarmal { public: Bodyler() = default; explicit Bodyler(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] long adet() const { return com_.adet(); } Body ekle(const std::wstring& ismi = {}); [[nodiscard]] Body eleman(long indeks) const; Body eleman(const std::wstring& ad); }; class HibridBodyler : public FikomSarmal { public: HibridBodyler() = default; explicit HibridBodyler(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] long adet() const { return com_.adet(); } HibridBody ekle(const std::wstring& ismi = {}); [[nodiscard]] HibridBody eleman(long indeks) const; HibridBody eleman(const std::wstring& ad); }; // ---- Parametre sistemi --------------------------------------------------------- class Parametre : public FikomSarmal { public: Parametre() = default; explicit Parametre(FikomNesne com) : FikomSarmal(std::move(com)) {} void ismiAyarla(const std::wstring& ad); // Name ataması değil, Rename() çağrısı. [[nodiscard]] bool isimDegismisMi() const; [[nodiscard]] std::wstring aciklama() const { return com_.metin(L"Comment"); } void aciklamaAyarla(const std::wstring& v) { com_.ozellikAyarla(L"Comment", _variant_t(v.c_str())); } [[nodiscard]] FikomNesne kaynakObje() const { return com_.nesne(L"Context"); } bool gizli() const; void gizliAyarla(bool v) { com_.ozellikAyarla(L"Hidden", _variant_t(v)); } [[nodiscard]] bool parametreGercekMi() const; void parametreGercekMiAyarla(bool v) { com_.ozellikAyarla(L"IsTrueParameter", _variant_t(v)); } bool saltOkunur() const; [[nodiscard]] long kullaniciYetkiModu() const { return com_.sayi(L"UserAccessMode"); } std::wstring degeriStr(); void degeriStrAyarla(const std::wstring& v); [[nodiscard]] _variant_t degeri() const { return com_.ozellik(L"Value"); } void degeriAyarla(const _variant_t& v) { com_.ozellikAyarla(L"Value", v); } [[nodiscard]] FikomNesne birim() const { return com_.nesne(L"Unit"); } }; class Parametreler : public FikomSarmal { public: Parametreler() = default; explicit Parametreler(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] long adet() const { return com_.adet(); } ParametreSeti kaynakParametreSeti() const; Parametreler altParametreler(const FikomNesne& obje, bool yinelemeli = false); Parametreler altParametreler(const FikomSarmal& obje, bool yinelemeli = false); [[nodiscard]] bool parametreVarmi(const std::wstring& ad); Parametre eleman(long indeks) const; // Ad ">>>" içerirse: oncesindeki kısa ad, tüm parametrelerin "\\" son parçasında // sondan başa aranır (IParametreler.item portu); bulunamazsa boş Parametre. Parametre eleman(const std::wstring& ad); void sil(long indeks); void sil(const std::wstring& ad); Parametre yaratBoolean(const std::wstring& ismi, bool degeri = false); Parametre yaratOlcu(const std::wstring& ismi, const std::wstring& birimi = L"LENGTH", double degeri = 0.0); Parametre yaratTamSayi(const std::wstring& ismi, long degeri = -1); Parametre yaratSayi(const std::wstring& ismi, double degeri = -1.0); Parametre yaratYazi(const std::wstring& ismi, const std::wstring& degeri = {}); void parametreSetiYarat(const FikomNesne& obje); [[nodiscard]] std::wstring iliskidekiIsmi(const FikomNesne& obje); }; class ParametreSeti : public FikomSarmal { public: ParametreSeti() = default; explicit ParametreSeti(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] Parametreler tumParametreler() const; [[nodiscard]] Parametreler direktParametreler() const; ParametreSeti parametreSetleri() const; }; // ---- Secim sistemi ------------------------------------------------------------ class SeciliEleman : public FikomSarmal { public: SeciliEleman() = default; explicit SeciliEleman(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] Dokuman dokuman() const; [[nodiscard]] FikomNesne productYapragi() const { return com_.nesne(L"LeafProduct"); } Product product() const; // LeafProduct.ReferenceProduct. [[nodiscard]] FikomNesne referans() const { return com_.nesne(L"Reference"); } [[nodiscard]] std::wstring turu() const { return com_.metin(L"Type"); } [[nodiscard]] FikomNesne nesne() const { return com_.nesne(L"Value"); } }; class Secililer : public FikomSarmal { public: Secililer() = default; explicit Secililer(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] long adet() const { return com_.adet(); } [[nodiscard]] long adet2() const { return com_.sayi(L"Count2"); } void ekle(const FikomNesne& obje); void ekle(const FikomSarmal& obje) { ekle(obje.com()); } void temizle() { com_.metod(L"Clear"); } void kopyala() { com_.metod(L"Copy"); } void kes() { com_.metod(L"Cut"); } void sil() { com_.metod(L"Delete"); } FikomNesne bul(const std::wstring& objeIsmi); SeciliEleman eleman(long indeks) const; SeciliEleman eleman2(long indeks); void yapistir() { com_.metod(L"Paste"); } void yapistirOzel(const std::wstring& format); void kaldir(long indeks); void kaldir2(long indeks); void ara(const std::wstring& sorgu); [[nodiscard]] FikomNesne gorunum() const { return com_.nesne(L"VisProperties"); } }; // ---- Dokuman ------------------------------------------------------------------ class Dokuman : public FikomSarmal { public: Dokuman() = default; explicit Dokuman(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] std::wstring tamIsmi() const { return com_.metin(L"FullName"); } [[nodiscard]] std::wstring klasoru() const { return com_.metin(L"Path"); } bool kaydedilmisMi() const; bool gizliOlanlariGoster() const; void gizliOlanlariGosterAyarla(bool v) { com_.ozellikAyarla(L"SeeHiddenElements", _variant_t(v)); } bool saltOkunur() const; [[nodiscard]] std::wstring gecerliFilitre() const { return com_.metin(L"CurrentFilter"); } void gecerliFilitreAyarla(const std::wstring& v) { com_.ozellikAyarla(L"CurrentFilter", _variant_t(v.c_str())); } [[nodiscard]] std::wstring gecerliKatman() const { return com_.metin(L"CurrentLayer"); } void gecerliKatmanAyarla(const std::wstring& v) { com_.ozellikAyarla(L"CurrentLayer", _variant_t(v.c_str())); } [[nodiscard]] std::wstring turu() const; // tamIsmi uzantısı, nokta dahil (".CATPart"). Secililer secililer() const; FikomNesne kameralar() const { return com_.nesne(L"Cameras"); } void ac(); // Application.Documents.Open(tamIsmi). void kapat() { com_.metod(L"Close"); } void aktifEt() { com_.metod(L"Activate"); } void veriAktar(const std::wstring& dosya, const std::wstring& format); void yeniPencere() { com_.metod(L"NewWindow"); } void kaydet() { com_.metod(L"Save"); } void farkliKaydet(const std::wstring& dosya); void klasoruAc(); void klasoruAcSecimli(); PartDokuman asPartDokuman() const; ProductDokuman asProductDokuman() const; }; class Dokumanlar : public FikomSarmal { public: Dokumanlar() = default; explicit Dokumanlar(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] long adet() const { return com_.adet(); } Dokuman ekle(const std::wstring& dokumanTipi = L"Part"); // Part | Product | Drawing. Dokuman eleman(long indeks) const; Dokuman eleman(const std::wstring& ad); Dokuman yeniDosyadan(const std::wstring& dosyaYolu); Dokuman ac(const std::wstring& dosya); Dokuman oku(const std::wstring& dosya); }; // ---- Part / Product ----------------------------------------------------------- class Part : public FikomSarmal { public: Part() = default; explicit Part(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] FikomNesne eksenler() const { return com_.nesne(L"AxisSystems"); } double yogunluk() const; void yogunlukAyarla(double v) { com_.ozellikAyarla(L"Density", _variant_t(v)); } Bodyler bodyler() const; HibridBodyler hibridBodyler() const; Parametreler parametreler() const; void guncelle() { com_.metod(L"Update"); } HibridBody geometricSetEkle(const std::wstring& ismi = {}); }; class Product : public FikomSarmal { public: Product() = default; explicit Product(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] std::wstring tanimlama() const { return com_.metin(L"Definition"); } void tanimlamaAyarla(const std::wstring& v) { com_.ozellikAyarla(L"Definition", _variant_t(v.c_str())); } [[nodiscard]] std::wstring bilesenAciklamasi() const { return com_.metin(L"DescriptionInst"); } void bilesenAciklamasiAyarla(const std::wstring& v) { com_.ozellikAyarla(L"DescriptionInst", _variant_t(v.c_str())); } [[nodiscard]] std::wstring referansAciklamasi() const { return com_.metin(L"DescriptionRef"); } void referansAciklamasiAyarla(const std::wstring& v) { com_.ozellikAyarla(L"DescriptionRef", _variant_t(v.c_str())); } [[nodiscard]] std::wstring yayginIsmi() const { return com_.metin(L"Nomenclature"); } void yayginIsmiAyarla(const std::wstring& v) { com_.ozellikAyarla(L"Nomenclature", _variant_t(v.c_str())); } [[nodiscard]] std::wstring parcaNumarasi() const { return com_.metin(L"PartNumber"); } void parcaNumarasiAyarla(const std::wstring& v) { com_.ozellikAyarla(L"PartNumber", _variant_t(v.c_str())); } [[nodiscard]] std::wstring revizyonNo() const { return com_.metin(L"Revision"); } void revizyonNoAyarla(const std::wstring& v) { com_.ozellikAyarla(L"Revision", _variant_t(v.c_str())); } [[nodiscard]] TedarikYontemi tedarikYontemi() const { return static_cast(com_.sayi(L"Source")); } void tedarikYontemiAyarla(TedarikYontemi v) { com_.ozellikAyarla(L"Source", _variant_t(static_cast(v))); } Parametreler parametreler() const; Parametreler kullaniciParametreleri() const; // UserRefProperties. Productlar productlar() const; [[nodiscard]] FikomNesne paylasilanlar() const { return com_.nesne(L"Publications"); } Product referansProduct() const; FikomNesne isimdenReferansYarat(const std::wstring& ad); void gecerliModeliAktifEt() { com_.metod(L"ActivateDefaultShape"); } void modeliAktifEt(const std::wstring& modelIsmi); void gecerliModeliDeaktifEt() { com_.metod(L"DesactivateDefaultShape"); } void modeliDeaktifEt(const std::wstring& modelIsmi); void anaModelEkle(const std::wstring& dosyaYolu); void modelEkle(const std::wstring& dosyaYolu, const std::wstring& modelIsmi, const std::wstring& davranis, bool baglam); void isModuUygula(IsModu mod); void malzemeListesiniCikar(CiktiTuru tur, const std::wstring& dosya); [[nodiscard]] std::wstring aktifModelIsmi(); [[nodiscard]] std::wstring gecerliModelIsmi(); [[nodiscard]] std::wstring anaModelYolu(); long modelSayisi(); std::wstring modelYolu(const std::wstring& modelIsmi); FikomNesne anaModel(bool gerekirseYukle); FikomNesne model(bool gerekirseYukle, const std::wstring& modelIsmi, const std::wstring& davranis, bool baglam); FikomNesne teknolojikObje(const std::wstring& uygulamaTipi); [[nodiscard]] bool anaModelVarmi(); [[nodiscard]] bool modelVarmi(const std::wstring& modelIsmi, const std::wstring& davranis, bool baglam); void anaModeliSil() { com_.metod(L"RemoveMasterShapeRepresentation"); } void modelSil(const std::wstring& modelIsmi, const std::wstring& davranis, bool baglam); void guncelle() { com_.metod(L"Update"); } [[nodiscard]] bool productMi() const; [[nodiscard]] bool partMi() const { return !productMi(); } Dokuman dokuman() const; // ReferenceProduct.Parent. [[nodiscard]] long toplamParcaSayisi() const; [[nodiscard]] long farkliParcaSayisi() const; PartDokuman partaCevir(const std::wstring& partIsmi = {}); }; class Productlar : public FikomSarmal { public: Productlar() = default; explicit Productlar(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] long adet() const { return com_.adet(); } Product bilesenEkle(const FikomNesne& product); Product bilesenEkle(const FikomSarmal& product) { return bilesenEkle(product.com()); } Product bilesenEkleDosyalardan(const std::vector& dosyalar, const std::wstring& metod); Product bilesenEkleAcikDosyadan(const FikomNesne& product); Product bilesenEkleAcikDosyadan(const FikomSarmal& product) { return bilesenEkleAcikDosyadan(product.com()); } [[nodiscard]] Product yeniProduct(const std::wstring& parcaNo); Product yeniBilesen(const std::wstring& bilesenTuru, const std::wstring& parcaNo); Product bilesenDegistir(const FikomNesne& product, const std::wstring& yeniDosya, bool ikili); Product productDegistir(const FikomNesne& eski, const FikomNesne& yeni, bool ikili); [[nodiscard]] Product eleman(long indeks) const; Product eleman(const std::wstring& ad); void sil(long indeks); }; // ---- Tipli dokumanlar ---------------------------------------------------------- class PartDokuman : public Dokuman { public: PartDokuman() = default; explicit PartDokuman(FikomNesne com) : Dokuman(std::move(com)) {} [[nodiscard]] Part part() const; Product product() const; }; class ProductDokuman : public Dokuman { public: ProductDokuman() = default; explicit ProductDokuman(FikomNesne com) : Dokuman(std::move(com)) {} [[nodiscard]] Product product() const; }; } // namespace fikatia