#pragma once #include #include "com/model/belge_modeli.hpp" // CATIA görünüm/sahne sarmalayıcıları — FikatiaV2024 I*.py (IPencere/IKamera/IEksen/...). // C++23 portu. Koleksiyon indeksleri 0-tabanlı (COM'a +1 eklenir). namespace fikatia { enum class PencereDosemeTipi : long { SiraliArkaArkaya = 0, Dikey = 1, Yatay = 2 }; enum class PencereKonumu : long { EkranKapli = 0, SimgeDurumu = 1, Normal = 2 }; enum class ResimFormati : long { CGM = 0, EMF = 1, TIFF = 2, TIFFGriTon = 3, BMP = 4, JPEG = 5 }; enum class KesmeModu : long { Temiz = 0, Yakin = 1, Uzak = 2, UzakYakin = 3 }; enum class IsikModu : long { SonsuzIsik = 0, NeonIsik = 1 }; enum class GezintiModu : long { Normal = 0, Yurume = 1, Ucma = 2 }; enum class YansitmaModu : long { Konik = 0, Silindirik = 1, Tanimsiz = 2 }; enum class EksenTipi : long { Standart = 0, Dondurulmus = 1, Eular = 2, Bagimsiz = 3 }; enum class EksenYonTipi : long { ObjeYonu = 0, VektorYonu = 1, KarsiYon = 2 }; // CATIA catRenderingMode değerleri (21 CATIA'da tanımsız). enum class RenderModu : long { Shading = 0, ShadingWithEdges = 1, WireFrame = 2, HiddenLinesRemoval = 3, QuickHiddenLinesRemoval = 4, Material = 5, MaterialWithEdges = 6, ShadingWithEdgesAndHiddenEdges = 7, ShadingWithEdgesWithoutSmoothEdges = 8, WireFrameWithoutSmoothEdgesWithoutVertices = 9, WireFrameWithHalfSmoothEdgesWithoutVertices = 10, ShadingWithEdgesWithOutlines = 11, QuickHiddenLinesRemovalWithoutVertices = 12, QuickHiddenLinesRemovalWithHiddenEdgesWithOutlines = 13, QuickHiddenLinesRemovalWithHiddenEdgesWithOutlinesWithoutVertices = 14, WireFrameWithHalfSmoothEdgeWithOutlinesWithoutVertices = 15, WireFrameWithOutlinesWithoutSmoothEdgesWithoutVertices = 16, QuickHiddenLinesRemovalWithHiddenEdgesWithoutSmoothEdgesWithoutVertices = 17, QuickHiddenLinesRemovalWithHiddenEdgesWithHalfSmoothEdgeWithoutVertices = 18, QuickHiddenLinesRemovalWithoutSmoothEdgesWithoutVertices = 19, QuickHiddenLinesRemovalWithHalfSmoothEdgeWithoutVertices = 20, ShadingWithEdgesWithHalfSmoothEdgeWithoutVertices = 22, ShadingWithEdgesWithHalfSmoothEdge = 23, }; class Gosterim3d; // ---- Saf veri: güvenlik duzlemi (COM'suz) ---------------------------------------- struct GuvenlikDuzlemi { std::array veri{}; [[nodiscard]] constexpr std::array merkezNoktasi() const { return {veri[0], veri[1], veri[2]}; } [[nodiscard]] constexpr std::array yon1() const { return {veri[3], veri[4], veri[5]}; } [[nodiscard]] constexpr std::array yon2() const { return {veri[6], veri[7], veri[8]}; } }; // ---- Birim / Referans ----------------------------------------------------------- class Birim : public FikomSarmal { public: Birim() = default; explicit Birim(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] std::wstring cesidi() const { return com_.metin(L"Magnitude"); } void cesidiAyarla(const std::wstring& v) { com_.ozellikAyarla(L"Magnitude", _variant_t(v.c_str())); } [[nodiscard]] std::wstring sembol() const { return com_.metin(L"Symbol"); } void sembolAyarla(const std::wstring& v) { com_.ozellikAyarla(L"Symbol", _variant_t(v.c_str())); } double cevirMKSden(double deger); double cevirBirimden(double deger); double cevirMKSye(double deger); double cevirBirime(double deger); }; class Referans : public FikomSarmal { public: Referans() = default; explicit Referans(FikomNesne com) : FikomSarmal(std::move(com)) {} // Referanslarda görünen ad DisplayName'dir (taban ismi() Name okur — bilincli golgeleme). [[nodiscard]] std::wstring ismi() const { return com_.metin(L"DisplayName"); } Referans iliskilendir(const FikomNesne& referans); Referans iliskilendir(const FikomSarmal& referans) { return iliskilendir(referans.com()); } }; // ---- Görsel özellikleri (VisPropertySet) --------------------------------------- class GorunumAyarlari : public FikomSarmal { public: GorunumAyarlari() = default; explicit GorunumAyarlari(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] long katman(); // katman tipi Basic değilse -1 döner. void katmanAyarla(long deger); [[nodiscard]] bool secilebilir(); void secilebilirAyarla(bool v); [[nodiscard]] std::array renkRGB(); void renkRGBAyarla(long r, long g, long b, long kalitim = 1); [[nodiscard]] bool gorunur(); void gorunurAyarla(bool v); [[nodiscard]] long seffaflik(); void seffaflikAyarla(long v); [[nodiscard]] long cizgiTipiGercek(); void cizgiTipiGercekAyarla(long v); [[nodiscard]] long cizgiTipiGenisligi(); void cizgiTipiGenislikAyarla(long v); [[nodiscard]] long sembolTipi(); void sembolTipiAyarla(long v); }; // ---- Paylaşım (Publications) --------------------------------------------------- class Paylasilan : public FikomSarmal { public: Paylasilan() = default; explicit Paylasilan(FikomNesne com) : FikomSarmal(std::move(com)) {} void degistir(const FikomNesne& paylasilan); void degistir(const FikomSarmal& paylasilan) { degistir(paylasilan.com()); } [[nodiscard]] FikomNesne objeDegeri() const { return com_.nesne(L"Valuation"); } }; class Paylasilanlar : public FikomSarmal { public: Paylasilanlar() = default; explicit Paylasilanlar(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] long adet() const { return com_.adet(); } Paylasilan ekle(const std::wstring& isim); [[nodiscard]] Paylasilan eleman(long indeks) const { return Payalislan(com_.eleman(indeks + 1)); } Payasilan eleman(const std::wstring& ad); void sil(long indeks); void sil(const std::wstring& ad); void direktAyarla(const std::wstring& isim, const FikomNesne& referans); void direktAyarla(const std::wstring& isim, const FikomSarmal& referans) { direktAyarla(isim, referans.com()); } void degistir(const std::wstring& isim, const std::wstring& paylasimIsmi, const FikomNesne& product); }; // ---- Sistem konfigurasyonu ----------------------------------------------------- class SistemKonfigurasyonu : public FikomSarmal { public: SistemKonfigurasyonu() = default; explicit SistemKonfigurasyonu(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] std::wstring isletimSistemi() const { return com_.metin(L"OperatingSystem"); } [[nodiscard]] long urunSayisi() const { return com_.sayi(L"ProductCount"); } [[nodiscard]] long versiyon() const { return com_.sayi(L"Version"); } [[nodiscard]] long servisPaketi() const { return com_.sayi(L"ServicePack"); } [[nodiscard]] long surum() const { return com_.sayi(L"Release"); } [[nodiscard]] std::vector urunListesi(); [[nodiscard]] bool urunLisanslimi(const std::wstring& urun); }; // ---- Hareket (Move) ------------------------------------------------------------ class Hareket : public FikomSarmal { public: Hareket() = default; explicit Hareket(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] Hareket hareketObjesi() const { return Hareket(com_.nesne(L"MovableObject")); } // 12'lik dönüşüm matrisi (3x3 rotasyon satırları + orijin) — Move.Apply. void uygula(const std::array& matris); }; // ---- Gösterim noktası (Viewpoint3D) -------------------------------------------- class GosterimNoktasi3d : public FikomSarmal { public: GosterimNoktasi3d() = default; explicit GosterimNoktasi3d(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] double gorusAlani() const; void gorusAlaniAyarla(double v) { com_.ozellikAyarla(L"FieldOfView", _variant_t(v)); } [[nodiscard]] double odakUzakligi() const; void odakUzakligiAyarla(double v) { com_.ozellikAyarla(L"FocusDistance", _variant_t(v)); } [[nodiscard]] YansitmaModu yansitmaModu() const { return static_cast(com_.sayi(L"ProjectionMode")); } void yansitmaModuAyarla(YansitmaModu v) { com_.ozellikAyarla(L"ProjectionMode", _variant_t(static_cast(v))); } [[nodiscard]] double yakinlastirma() const; void yakinlastirmaAyarla(double v) { com_.ozellikAyarla(L"Zoom", _variant_t(v)); } std::array merkezNoktasi(); void merkezNoktasiAyarla(const std::array& v); std::array gormeYonu(); void gormeYonuAyarla(const std::array& v); std::array ustYon(); void ustYonAyarla(const std::array& v); }; // ---- Kamera(lar) --------------------------------------------------------------- class Kamera : public FikomSarmal { public: Kamera() = default; explicit Kamera(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] GosterimNoktasi3d gosterimNoktasi3d() const { return GosterimNoktasi3d(com_.nesne(L"ViewPoint3d")); } void gosterimNoktasiAyarla(const GosterimNoktasi3d& v); // Python'daki sahip-zinciri yerine hedef gösterim parametre olarak verilir. void goster(Gosterim3d& gosterim); [[nodiscard]] std::wstring resimDosyaya(Gosterim3d& gosterim, const std::wstring& dosya, ResimFormati format = ResimFormati::JPEG, const std::array& arkaPlan = {1.0, 1.0, 1.0}, bool agacGorunsun = false); }; class Kameralar : public FikomSarmal { public: Kameralar() = default; explicit Kameralar(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] long adet() const { return com_.adet(); } [[nodiscard]] Kamera eleman(long indeks) const { return Kamera(com_.eleman(indeks + 1)); } Kamera eleman(const std::wstring& ad); void sil(long indeks); void sil(const std::wstring& ad); }; // ---- 3B gösterim (Viewer3D) --------------------------------------------------- class Gosterim3d : public FikomSarmal { public: Gosterim3d() = default; explicit Gosterim3d(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] bool tamEkran() const; void tamEkranAyarla(bool v) { com_.ozellikAyarla(L"FullScreen", _variant_t(v)); } [[nodiscard]] long genislik() const { return com_.sayi(L"Width"); } [[nodiscard]] long yukseklik() const { return com_.sayi(L"Height"); } void aktifEt() { com_.metod(L"Activate"); } void ekranaSigdir() { com_.metod(L"Reframe"); } void guncelle() { com_.metod(L"Update"); } void yaklastir() { com_.metod(L"ZoomIn"); } void uzaklastir() { com_.metod(L"ZoomOut"); } Kamera yeniKamera(const std::wstring& ismi = {}); // Ağaç gizlenir (Specifications toggle), arka plan geçici değiştirilir, eski renk geri gelir. [[nodiscard]] std::wstring resimDosyaya(const std::wstring& dosya, ResimFormati format = ResimFormati::JPEG, const std::array& arkaPlan = {1.0, 1.0, 1.0}, bool agacGorunsun = false); std::array arkaPlanRengi(); void arkaPlanRengiAyarla(const std::array& rgb); [[nodiscard]] KesmeModu kesmeModu() const { return static_cast(com_.sayi(L"ClippingMode")); } void kesmeModuAyarla(KesmeModu v) { com_.ozellikAyarla(L"ClippingMode", _variant_t(static_cast(v))); } [[nodiscard]] double uzakLimit() const; void uzakLimitAyarla(double v) { com_.ozellikAyarla(L"FarLimit", _variant_t(v)); } [[nodiscard]] double yakinLimit() const; void yakinLimitAyarla(double v) { com_.ozellikAyarla(L"NearLimit", _variant_t(v)); } [[nodiscard]] bool sisliMod() const; void sisliModAyarla(bool v) { com_.ozellikAyarla(L"Foggy", _variant_t(v)); } [[nodiscard]] _variant_t zemin() const { return com_.ozellik(L"Ground"); } void zeminAyarla(const _variant_t& v) { com_.ozellikAyarla(L"Ground", v); } [[nodiscard]] double isikYogunlugu() const; void isikYogunluguAyarla(double v) { com_.ozellikAyarla(L"LightingIntensity", _variant_t(v)); } [[nodiscard]] IsikModu isikModu() const { return static_cast(com_.sayi(L"LightingMode")); } void isikModuAyarla(IsikModu v) { com_.ozellikAyarla(L"LightingMode", _variant_t(static_cast(v))); } [[nodiscard]] GezintiModu gezintiStili() const { return static_cast(com_.sayi(L"NavigationStyle")); } void gezintiStiliAyarla(GezintiModu v) { com_.ozellikAyarla(L"NavigationStyle", _variant_t(static_cast(v))); } [[nodiscard]] RenderModu renderModu() const { return static_cast(com_.sayi(L"RenderingMode")); } void renderModuAyarla(RenderModu v) { com_.ozellikAyarla(L"RenderingMode", _variant_t(static_cast(v))); } [[nodiscard]] GosterimNoktasi3d gosterimNoktasi3d() const { return GosterimNoktasi3d(com_.nesne(L"ViewPoint3d")); } void gosterimNoktasiAyarla(const GosterimNoktasi3d& v); void dondur(const std::array& yon, double derece, bool guncellensin = false); void gotur(const std::array& vektor, bool guncellensin = false); }; class Gosterimler : public FikomSarmal { public: Gosterimler() = default; explicit Gosterimler(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] long adet() const { return com_.adet(); } [[nodiscard]] Gosterim3d eleman(long indeks) const { return Gosterim3d(com_.eleman(indeks + 1)); } }; // ---- Pencere(ler) -------------------------------------------------------------- class Pencere : public FikomSarmal { public: Pencere() = default; explicit Pencere(FikomNesne com) : FikomSarmal(std::move(com)) {} // Python'da dokumanlar içinde FullName aramıyordu; Window.Parent zaten dokumandır. [[nodiscard]] Dokuman dokuman() const { return Dokuman(com_.nesne(L"Parent")); } [[nodiscard]] std::wstring baslik() const { return com_.metin(L"Caption"); } void baslikAyarla(const std::wstring& v) { com_.ozellikAyarla(L"Caption", _variant_t(v.c_str())); } [[nodiscard]] long sol() const { return com_.sayi(L"Left"); } void solAyarla(long v) { com_.ozellikAyarla(L"Left", _variant_t(v)); } [[nodiscard]] long ust() const { return com_.sayi(L"Top"); } void ustAyarla(long v) { com_.ozellikAyarla(L"Top", _variant_t(v)); } [[nodiscard]] long genislik() const { return com_.sayi(L"Width"); } void genislikAyarla(long v) { com_.ozellikAyarla(L"Width", _variant_t(v)); } [[nodiscard]] long yukseklik() const { return com_.sayi(L"Height"); } void yukseklikAyarla(long v) { com_.ozellikAyarla(L"Height", _variant_t(v)); } void aktifEt() { com_.metod(L"Activate"); } void aktifEtSonrakini() { com_.metod(L"ActivateNext"); } void aktifEtOncekini() { com_.metod(L"ActivatePrevious"); } void yazdir() { com_.metod(L"PrintOut"); } void yazdirDosyaya(const std::wstring& dosya); Pencere yeniPencere(); [[nodiscard]] PencereKonumu konumu() const { return static_cast(com_.sayi(L"WindowState")); } void konumuAyarla(PencereKonumu v) { com_.ozellikAyarla(L"WindowState", _variant_t(static_cast(v))); } [[nodiscard]] Gosterimler gosterimler() const { return Gosterimler(com_.nesne(L"Viewers")); } }; class Pencereler : public FikomSarmal { public: Pencereler() = default; explicit Pencereler(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] long adet() const { return com_.adet(); } [[nodiscard]] Pencere eleman(long indeks) const { return Pencere(com_.eleman(indeks + 1)); } Pencere eleman(const std::wstring& ad); void dose(PencereDosemeTipi tip) { com_.metod(L"Arrange", {_variant_t(static_cast(tip))}); } }; // ---- Eksen sistemi ------------------------------------------------------------- class Eksen : public FikomSarmal { public: Eksen() = default; explicit Eksen(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] Parametre eksenDondurmeAcisi() const { return Parametre(com_.nesne(L"AxisRotationAngle")); } void eksenDondurmeAcisiAyarla(const std::wstring& deger); // "deg" yoksa eklenir. void eksenDondurmeAcisiAyarla(double derece); [[nodiscard]] Referans eksenDondurmeReferansi() const { return Referans(com_.nesne(L"AxisRotationReference")); } void eksenDondurmeReferansiAyarla(const Referans& v); [[nodiscard]] bool gecerliEksen() const; void gecerliEksenAyarla(bool v) { com_.ozellikAyarla(L"IsCurrent", _variant_t(v)); } [[nodiscard]] Referans merkezNoktasi() const { return Referans(com_.nesne(L"OriginPoint")); } void merkezNoktasiAyarla(const Referans& v); [[nodiscard]] EksenTipi eksenTipi() const { return static_cast(com_.sayi(L"Type")); } void eksenTipiAyarla(EksenTipi v) { com_.ozellikAyarla(L"Type", _variant_t(static_cast(v))); } [[nodiscard]] Referans xYonu() const { return Referans(com_.nesne(L"XAxisDirection")); } void xYonuAyarla(const Referans& v); [[nodiscard]] Referans yYonu() const { return Referans(com_.nesne(L"YAxisDirection")); } void yYonuAyarla(const Referans& v); [[nodiscard]] Referans zYonu() const { return Referans(com_.nesne(L"ZAxisDirection")); } void zYonuAyarla(const Referans& v); [[nodiscard]] EksenYonTipi xYonTipi() const { return static_cast(com_.sayi(L"XAxisType")); } void xYonTipiAyarla(EksenYonTipi v) { com_.ozellikAyarla(L"XAxisType", _variant_t(static_cast(v))); } [[nodiscard]] EksenYonTipi yYonTipi() const { return static_cast(com_.sayi(L"YAxisType")); } void yYonTipiAyarla(EksenYonTipi v) { com_.ozellikAyarla(L"YAxisType", _variant_t(static_cast(v))); } [[nodiscard]] EksenYonTipi zYonTipi() const { return static_cast(com_.sayi(L"ZAxisType")); } void zYonTipiAyarla(EksenYonTipi v) { com_.ozellikAyarla(L"ZAxisType", _variant_t(static_cast(v))); } std::array eularAcilari(); std::array merkez(); void merkezAyarla(const std::array& v); std::array vektorXY(); // ilk 3 X, son 3 Y vektörü. void vektorXYAyarla(const std::array& v); std::array x(); void xAyarla(const std::array& v); std::array y(); void yAyarla(const std::array& v); std::array z(); void zAyarla(const std::array& v); }; class Eksenler : public FikomSarmal { public: Eksenler() = default; explicit Eksenler(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] long adet() const { return com_.adet(); } Eksen ekle(); [[nodiscard]] Eksen eleman(long indeks) const { return Eksen(com_.eleman(indeks + 1)); } Eksen eleman(const std::wstring& ad); }; // ---- PPR ürünleri (imalat dokumanı product listesi) ---------------------------- class PPRProductlar : public FikomSarmal { public: PPRProductlar() = default; explicit PPRProductlar(FikomNesne com) : FikomSarmal(std::move(com)) {} [[nodiscard]] long adet() const { return com_.adet(); } Product ekle(const FikomNesne& product); Product ekle(const FikomSarmal& product) { return ekle(product.com()); } [[nodiscard]] Product eleman(long indeks) const { return Product(com_.eleman(indeks + 1)); } }; } // namespace fikatia