import sys

sys.coinit_flags = 0


from asyncio import sleep
from random import shuffle
from typing import List, Optional
from flet import (
    AppBar,
    ElevatedButton,
    Page,
    Text,
    View,
    colors,
    Row,
    MainAxisAlignment,
    CrossAxisAlignment,
    Image,
    ImageFit,
    TextAlign,
    Column,
    TextField,
    KeyboardType,
    icons,
    Slider,
    ProgressBar,
    OutlinedButton,
    IconButton,
    BottomSheet,
    Container,
    AlertDialog,
    ButtonStyle,
    TextButton,
    Icon,
)
from flet_core import Control
from flet_core.control import OptionalNumber
from flet_core.floating_action_button import FloatingActionButton
from flet_core.navigation_bar import NavigationBar
from flet_core.types import (
    CrossAxisAlignment,
    MainAxisAlignment,
    PaddingValue,
    ScrollMode,
)
from IEksen import IEksen
from IHibridBody import IHibridBody
from IHibridBodyler import IHibridBodyler
from IPart import IPart
from IPartDokuman import IPartDokuman
from resimler import fikoyt_logo, eksen_simge, mdf_kutuk_resim
import pythoncom
import win32com
from IFikatia import IFikatia


class FikoDilimleAnaSayfa(View):
    renkler = [
        [0, 255, 0, 0],
        [0, 255, 255, 0],
        [0, 0, 255, 0],
        [255, 255, 0, 0],
    ]

    @property
    def mdf_kalinlik(self):
        return self._mdf_kalinlik

    @mdf_kalinlik.setter
    def mdf_kalinlik(self, value):
        self._mdf_kalinlik = value

    @property
    def mdf_offset(self):
        return self._mdf_offset

    @mdf_offset.setter
    def mdf_offset(self, value):
        self._mdf_offset = value

    @property
    def data_yukseklik(self):
        return self._data_yukseklik

    @data_yukseklik.setter
    def data_yukseklik(self, value):
        self._data_yukseklik = value

    @property
    def secilen_eksen(self):
        return self._secilen_eksen

    @secilen_eksen.setter
    def secilen_eksen(self, value):
        self._secilen_eksen = value

    @property
    def secilen_data(self):
        return self._secilen_data

    @secilen_data.setter
    def secilen_data(self, value):
        self._secilen_data = value

    def __init__(
        self,
        mainPage: Page,
    ):
        super().__init__()
        self.route = "/"
        # --->
        self.mainPage = mainPage
        self._mdf_kalinlik = 30
        self._mdf_offset = 10
        self._data_yukseklik = 250
        self._secilen_data = None
        self._secilen_eksen = None
        # --->
        self.hazirla()
        self.fikatia = IFikatia(win32com.client.Dispatch("Catia.Application"))
        self.fikatia.marshalHazirla()
        self.fikatia.aktifEt()

    def hazirla(self):
        self.vertical_alignment = MainAxisAlignment.START
        self.horizontal_alignment = CrossAxisAlignment.CENTER
        self.spacing = 0

        self.logo = Image(
            src_base64=fikoyt_logo,
            width=200,
            fit=ImageFit.COVER,
        )

        self.mdf_kalinlik_slider = Slider(
            min=5,
            max=100,
            divisions=95,
            label="{value}mm",
            value=self._mdf_kalinlik,
            on_change=self.mdf_kalinlik_slider_degisti,
        )

        self.mdf_kalinlik_baslik = Text(
            "MDF Kalınlığını Ayarlayınız:",
            style="bodySmall",
        )

        self.mdf_kalinlik_baslik.value = (
            f"MDF Kalınlığını Ayarlayınız:{self.mdf_kalinlik_slider.value}mm"
        )

        self.mdf_offset_slider = Slider(
            min=1,
            max=50,
            divisions=49,
            label="{value}mm",
            value=self._mdf_offset,
            on_change=self.mdf_offset_slider_degisti,
        )

        self.mdf_offset_baslik = Text(
            "MDF Offsetini Ayarlayınız:",
            style="bodySmall",
        )

        self.mdf_offset_baslik.value = (
            f"MDF Offsetini Ayarlayınız:{self.mdf_offset_slider.value}mm"
        )

        self.eksen_sec_bilesenleri = Row(
            [
                Text(
                    "Datanın Tabanına Attığınız Ekseni Seçiniz:",
                    style="bodySmall",
                    color="red400",
                ),
                IconButton(
                    icon=icons.MOUSE,
                    icon_color="red400",
                    scale=0.65,
                    on_click=self.tiklandi_eksen_sec,
                ),
            ],
            alignment=MainAxisAlignment.SPACE_BETWEEN,
            vertical_alignment=CrossAxisAlignment.CENTER,
            spacing=0,
        )

        self.data_sec_bilesenleri = Row(
            [
                Text("Dilimlenecek Datayı Seçiniz:", style="bodySmall", color="red400"),
                IconButton(
                    icon=icons.MOUSE,
                    icon_color="red400",
                    scale=0.65,
                    on_click=self.tiklandi_data_sec,
                ),
            ],
            alignment=MainAxisAlignment.SPACE_BETWEEN,
            vertical_alignment=CrossAxisAlignment.CENTER,
            spacing=0,
        )

        # --->
        self.data_yukseklik_slider = Slider(
            min=1,
            max=5000,
            divisions=4999,
            label="{value}mm",
            value=self.data_yukseklik,
            on_change=self.data_yukseklik_slider_degisti,
        )

        self.data_yukseklik_baslik = Text(
            "Data Yüksekliğini Ayarlayınız:",
            style="bodySmall",
        )

        self.data_yukseklik_baslik.value = (
            f"Data Yüksekliğini Ayarlayınız:{self.data_yukseklik_slider.value}mm"
        )

        # ---->
        self.progressBar = ProgressBar(color="Blue", visible=False)
        # ---->
        self.controls = [
            Row(
                [self.logo],
                spacing=0,
                alignment=MainAxisAlignment.CENTER,
                vertical_alignment=CrossAxisAlignment.END,
            ),
            Text(
                "MDF Kütükçüsü  v0.0.1",
                style="bodySmall",
                text_align=TextAlign.CENTER,
            ),
            Column(
                controls=[
                    Container(
                        Row(
                            [
                                TextButton(
                                    content=Text(
                                        "🎨",
                                    ),
                                    tooltip="Catia'da Seçili Grubun İçindekileri Sırasıyla Farklı Renklendirir",
                                    on_click=self.tiklandi_renklendir,
                                ),
                                TextButton(
                                    content=Text(
                                        "🖊️",
                                    ),
                                    tooltip="Catia'da Seçili Grubun İsmi İle Beraber İçindekileri Sıra Numarası Ekleyerek İsimlendirir",
                                    on_click=self.tiklandi_isimlendir,
                                ),
                            ],
                            spacing=0,
                            alignment=MainAxisAlignment.CENTER,
                            vertical_alignment=CrossAxisAlignment.END,
                            scale=0.7,
                        ),
                        height=36,
                        padding=0,
                    ),
                    self.eksen_sec_bilesenleri,
                    self.data_sec_bilesenleri,
                    self.mdf_kalinlik_baslik,
                    self.mdf_kalinlik_slider,
                    self.mdf_offset_baslik,
                    self.mdf_offset_slider,
                    self.data_yukseklik_baslik,
                    self.data_yukseklik_slider,
                    self.progressBar,
                ],
                spacing=0,
            ),
            Row(
                [
                    OutlinedButton(
                        "İşleme Başla",
                        icon=icons.COMPUTER_OUTLINED,
                        icon_color="green400",
                        scale=0.65,
                        on_click=self.tiklandi_isleme_basla,
                    ),
                ],
                alignment=MainAxisAlignment.CENTER,
                vertical_alignment=CrossAxisAlignment.CENTER,
                spacing=0,
            )
            # AppBar(title=Text("Flet app")),
            # ElevatedButton(
            #     "Go to settings", on_click=lambda e: self.page.go("/settings/mail")
            # ),
        ]

    def mdf_kalinlik_slider_degisti(self, val):
        self.mdf_kalinlik_baslik.value = (
            f"MDF Kalınlığını Ayarlayınız:{self.mdf_kalinlik_slider.value}mm"
        )
        self.mdf_kalinlik = val
        self.page.update()
        pass

    def mdf_offset_slider_degisti(self, val):
        self.mdf_offset_baslik.value = (
            f"MDF Offsetini Ayarlayınız:{self.mdf_offset_slider.value}mm"
        )
        self.mdf_offset = val
        self.page.update()
        pass

    def data_yukseklik_slider_degisti(self, val):
        self.data_yukseklik_baslik.value = (
            f"Data Yüksekliğini Ayarlayınız:{self.data_yukseklik_slider.value}mm"
        )
        self.data_yukseklik = val
        self.page.update()
        pass

    def tiklandi_eksen_sec(self, event):
        def bs_dismissed(e):
            print("Dismissed!")

        def show_bs(e):
            bs.open = True
            bs.update()

        def close_bs(e):
            bs.open = False
            bs.update()

        bs = AlertDialog(
            content=Container(
                Column(
                    [
                        Row(
                            [
                                Image(
                                    src_base64=eksen_simge,
                                    width=150,
                                    height=150,
                                    fit=ImageFit.CONTAIN,
                                )
                            ],
                            spacing=0,
                            alignment=MainAxisAlignment.CENTER,
                            vertical_alignment=CrossAxisAlignment.CENTER,
                        ),
                        Text(
                            "Lütfen Catia'da Tabana Eklediğiniz Ekseni Seçiniz", size=10
                        ),
                    ],
                    tight=True,
                ),
                padding=5,
            ),
            open=True,
            on_dismiss=bs_dismissed,
            modal=True,
        )
        # self.page.overlay.clear()
        self.page.overlay.append(bs)

        pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED)

        self.fikatia.marshalOku()
        aktif_dokuman = self.fikatia.aktifDokuman

        bs.open = True
        self.page.update()
        bs.update()

        self.eksen_sec_bilesenleri.controls[0].color = "orange400"
        self.eksen_sec_bilesenleri.controls[1].icon_color = "orange400"
        self.page.update()

        secilen_eksen = aktif_dokuman.secililer.sec2(
            ["AxisSystem"], "Lütfen Ekseni Seçiniz"
        )

        bs.open = False
        self.page.update()
        bs.update()

        if secilen_eksen == "Normal":
            secilen_eksen = aktif_dokuman.secililer[0].nesne
            self.secilen_eksen_ismi = secilen_eksen.ismi
            self.secilen_eksen = secilen_eksen
            self.secilen_eksen.marshalHazirla()

            self.eksen_sec_bilesenleri.controls[0].color = "green"
            self.eksen_sec_bilesenleri.controls[1].icon_color = "green"
            self.page.update()

    def tiklandi_data_sec(self, event):
        def bs_dismissed(e):
            print("Dismissed!")

        def show_bs(e):
            bs.open = True
            bs.update()

        def close_bs(e):
            bs.open = False
            bs.update()

        bs = AlertDialog(
            content=Container(
                Column(
                    [
                        Row(
                            [
                                Image(
                                    src_base64=mdf_kutuk_resim,
                                    width=150,
                                    height=100,
                                    fit=ImageFit.CONTAIN,
                                )
                            ],
                            spacing=0,
                            alignment=MainAxisAlignment.CENTER,
                            vertical_alignment=CrossAxisAlignment.CENTER,
                        ),
                        Text(
                            "Lütfen Catia'da Dilimleme İçin Hazır Ettiğiniz Datayı Seçiniz",
                            size=10,
                        ),
                    ],
                    tight=True,
                ),
                padding=5,
            ),
            open=True,
            on_dismiss=bs_dismissed,
            modal=True,
        )
        # self.page.overlay.clear()
        self.page.overlay.append(bs)

        pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED)
        self.fikatia.marshalOku()
        aktif_dokuman = self.fikatia.aktifDokuman

        bs.open = True
        self.page.update()
        bs.update()

        self.data_sec_bilesenleri.controls[0].color = "orange400"
        self.data_sec_bilesenleri.controls[1].icon_color = "orange400"
        self.page.update()

        secilen_data = aktif_dokuman.secililer.sec2(
            ["Body"], "Lütfen Hazırladığınız Datayı Seçiniz"
        )
        bs.open = False
        self.page.update()
        bs.update()

        if secilen_data == "Normal":
            secilen_data = aktif_dokuman.secililer[0].nesne
            self.secilen_data = secilen_data
            self.secilen_data.marshalHazirla()

            self.data_sec_bilesenleri.controls[0].color = "green"
            self.data_sec_bilesenleri.controls[1].icon_color = "green"
            self.page.update()

        part: IPart = aktif_dokuman.asPartDokuman.part
        olculer = aktif_dokuman.asPartDokuman.part.olcuAl(
            part.eksenler.item(self.secilen_eksen_ismi), secilen_data.catNesne
        )

        self.data_yukseklik_slider.value = olculer.ZOlcusu
        self.data_yukseklik_slider_degisti(olculer.ZOlcusu)
        self.page.update()
        self.update()

        # pythoncom.CoUninitialize()

    def tiklandi_isleme_basla(self, *args, **kwargs):
        pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED)

        if not self.secilen_data or not self.secilen_eksen:
            return
        
        self.secilen_data.marshalOku()
        self.secilen_eksen.marshalOku()

        self.progressBar.visible = True
        self.progressBar.color = "blue"
        self.page.update()


        # catia.interaktif = False
        # catia.ekraniTazele = False
        self.fikatia.marshalOku()
        aktif_dokuman: IPartDokuman = self.fikatia.aktifDokuman.asPartDokuman
        # if self.secilen_eksen:
        #     self.secilen_eksen.Seek(0, 0)
        # secilen_eksen = win32com.client.Dispatch(
        #     pythoncom.CoGetInterfaceAndReleaseStream(
        #         self.secilen_eksen, pythoncom.IID_IDispatch
        #     )
        # )

        # if self.secilen_data:
        #     self.secilen_data.Seek(0, 0)
        # secilen_data = win32com.client.Dispatch(
        #     pythoncom.CoGetInterfaceAndReleaseStream(
        #         self.secilen_data, pythoncom.IID_IDispatch
        #     )
        # )

        _bodyAna = aktif_dokuman.part.hibridBodyler.ekle()
        _bodyAna.ismi = "FikoYT Kütükçü"

        _bodyDuzlemler = _bodyAna.hibrid_body_ekle("Düzlemler")
        _bodyKesisimler = _bodyAna.hibrid_body_ekle("Kesişimler")
        _bodyMdfHatlar = _bodyAna.hibrid_body_ekle("Offsetli Mdf Hatları")
        _bodyDoldurmalar = _bodyAna.hibrid_body_ekle("Doldurmalar")
        _bodyUzatmalar = _bodyAna.hibrid_body_ekle("Uzatmalar")

        aktif_dokuman.part.catNesne.InWorkObject = _bodyDuzlemler.catNesne

        try:
            # self.duzlem_kesisim_ekle_yzy(
            #     aktif_dokuman.part,
            #     _bodyDuzlemler,
            #     _bodyKesisimler,
            #     _bodyMdfHatlar,
            #     _bodyDoldurmalar,
            #     _bodyUzatmalar,
            #     secilen_eksen,
            #     secilen_data,
            # )
           
            self.duzlem_kesisim_ekle_solid(
                aktif_dokuman.part,
                _bodyDuzlemler,
                _bodyKesisimler,
                _bodyMdfHatlar,
                _bodyDoldurmalar,
                _bodyUzatmalar,
                self.secilen_eksen,
                self.secilen_data,
            )
        except Exception as e:
            print(e)
            self.progressBar.color = "red"
            self.page.update()

        # ---->
        self.fikatia.aktifDokuman.secililer.temizle()
        self.fikatia.aktifDokuman.secililer.ekle(_bodyDuzlemler)
        self.fikatia.aktifDokuman.secililer.ekle(_bodyKesisimler)
        self.fikatia.aktifDokuman.secililer.ekle(_bodyDoldurmalar)
        self.fikatia.aktifDokuman.secililer.ekle(_bodyMdfHatlar)
        self.fikatia.aktifDokuman.secililer.gorunum.gorunur = False
        # ---->
        # catia.aktifDokuman.secililer.temizle()
        # catia.aktifDokuman.secililer.ekle(_bodyUzatmalar)
        # catia.aktifDokuman.secililer.gorunum.seffaflik = 1
        try:
            aktif_dokuman.part.guncelle()
        except Exception as e:
            print(e)
            self.progressBar.color = "red"
            self.page.update()
        # _bodyUzatmalar.catNesne.HybridShapes.Count

        # renk_sayac = 0
        # for x in range(0, _bodyUzatmalar.catNesne.HybridShapes.Count):
        #     _obj = _bodyUzatmalar.catNesne.HybridShapes.Item(x + 1)

        #     catia.aktifDokuman.secililer.temizle()
        #     catia.aktifDokuman.secililer.ekle(_obj)
        #     catia.aktifDokuman.secililer.ekle(_obj)
        #     catia.aktifDokuman.secililer.gorunum.renkRGB = self.renkler[renk_sayac]
        #     renk_sayac += 1

        #     if renk_sayac > len(self.renkler) - 1:
        #         renk_sayac = 0

        # try:
        #     aktif_dokuman.part.guncelle()
        # except:
        #     self.progressBar.color = "red"
        #     self.page.update()

        # catia.interaktif = True
        # catia.ekraniTazele = True
        # pythoncom.CoUninitialize()
        # self.secilen_data = None
        # self.secilen_eksen = None
        # self.secilen_ismi = None
        # self.eksen_sec_bilesenleri.controls[0].color = "red400"
        # self.eksen_sec_bilesenleri.controls[1].icon_color = "red400"

        # self.data_sec_bilesenleri.controls[0].color = "red400"
        # self.data_sec_bilesenleri.controls[1].icon_color = "red400"

        self.progressBar.visible = False

        self.page.update()
        pass

    def duzlem_kesisim_ekle_yzy(
        self,
        part: IPart,
        bodyDuzlemler: IHibridBody,
        bodyKesisimler: IHibridBody,
        bodyMdfHatlar: IHibridBody,
        bodyDoldurmalar: IHibridBody,
        bodyUzatmalar: IHibridBody,
        eksen: IEksen,
        data,
    ):
        sayac_kalinlik = 0.1

        sekil_fabrikasi = part.catNesne.HybridShapeFactory

        # eksen = win32com.client.Dispatch(
        #     pythoncom.CoGetInterfaceAndReleaseStream(eksen, pythoncom.IID_IDispatch)
        # )

        # secilen_data = win32com.client.Dispatch(
        #     pythoncom.CoGetInterfaceAndReleaseStream(data, pythoncom.IID_IDispatch)
        # )

        referansXY = part.catNesne.CreateReferenceFromBRepName(
            f"RSur:(Face:(Brp:({self.secilen_eksen_ismi};1);None:();Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)",
            None,
        )

        referans_data = part.catNesne.CreateReferenceFromObject(data)

        parca_sayac = 1
        while sayac_kalinlik < self.data_yukseklik_slider.value:
            duzlem = sekil_fabrikasi.AddNewPlaneOffset(
                referansXY, sayac_kalinlik, False
            )
            sayac_kalinlik += self.mdf_kalinlik_slider.value

            bodyDuzlemler.catNesne.AppendHybridShape(duzlem)
            duzlem.Name = f"Parça-Düzlem.{parca_sayac}"
            # --->
            referans_duzlem = part.catNesne.CreateReferenceFromObject(duzlem)
            kesisim = sekil_fabrikasi.AddNewIntersection(referans_data, referans_duzlem)
            kesisim.PointType = 0

            bodyKesisimler.catNesne.AppendHybridShape(kesisim)
            kesisim.Name = f"Parça-Kesişim.{parca_sayac}"
            # ---->
            referans_kesisim = part.catNesne.CreateReferenceFromObject(kesisim)
            offset = sekil_fabrikasi.AddNewCurvePar(
                referans_kesisim,
                referans_duzlem,
                self.mdf_offset_slider.value,
                False,
                False,
            )
            offset.SmoothingType = 2
            offset.MaximumDeviationValue = 0.01
            offset.p3DSmoothing = False

            bodyMdfHatlar.catNesne.AppendHybridShape(offset)
            offset.Name = f"Parça-Offset.{parca_sayac}"
            # ---->
            referans_offset = part.catNesne.CreateReferenceFromObject(offset)
            doldurma = sekil_fabrikasi.AddNewFill()
            doldurma.AddBound(referans_offset)
            doldurma.Continuity = 0

            bodyDoldurmalar.catNesne.AppendHybridShape(doldurma)
            doldurma.Name = f"Parça-Doldurma.{parca_sayac}"
            # ---->
            referans_doldurma = part.catNesne.CreateReferenceFromObject(doldurma)
            referans_yon = sekil_fabrikasi.AddNewDirection(referansXY)

            uzatma = sekil_fabrikasi.AddNewExtrude(
                referans_doldurma, self.mdf_kalinlik_slider.value, 0, referans_yon
            )
            uzatma.SymmetricalExtension = 0

            bodyUzatmalar.catNesne.AppendHybridShape(uzatma)
            uzatma.Name = f"Parça.{parca_sayac}"

            parca_sayac += 1

    def duzlem_kesisim_ekle_solid(
        self,
        part: IPart,
        bodyDuzlemler: IHibridBody,
        bodyKesisimler: IHibridBody,
        bodyMdfHatlar: IHibridBody,
        bodyDoldurmalar: IHibridBody,
        bodyUzatmalar: IHibridBody,
        eksen: IEksen,
        data,
    ):
        sayac_kalinlik = 0

        yzy_sekil_fabrikasi = part.catNesne.HybridShapeFactory
        solid_sekil_fabrikasi = part.catNesne.ShapeFactory
       
        # eksen = win32com.client.Dispatch(
        #     pythoncom.CoGetInterfaceAndReleaseStream(eksen, pythoncom.IID_IDispatch)
        # )

        # secilen_data = win32com.client.Dispatch(
        #     pythoncom.CoGetInterfaceAndReleaseStream(data, pythoncom.IID_IDispatch)
        # )
        # eksen = part.eksenler.item(self.secilen_eksen_ismi)
        # print(data.olculer(part, eksen))

        referansXY = part.catNesne.CreateReferenceFromBRepName(
            f"FSur:(Face:(Brp:({self.secilen_eksen_ismi};1);None:();Cf11:());WithTemporaryBody;WithoutBuildError;WithInitialFeatureSupport;MonoFond;MFBRepVersion_CXR15",
            # f"RSur:(Face:(Brp:({self.secilen_eksen_ismi};1);None:();Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)",
            None,
        )

        referans_data = part.catNesne.CreateReferenceFromObject(data.catNesne)
        # parcalarBody = part.bodyler.ekle(f"Parçalar")
        parca_sayac = 0
        while sayac_kalinlik < self.data_yukseklik_slider.value:
            parca_sayac += 1
            if sayac_kalinlik == 0:
                sayac_kalinlik += 0.1

            duzlem = yzy_sekil_fabrikasi.AddNewPlaneOffset(
                referansXY, sayac_kalinlik, False
            )
            sayac_kalinlik += self.mdf_kalinlik_slider.value

            bodyDuzlemler.catNesne.AppendHybridShape(duzlem)
            duzlem.Name = f"Parça-Düzlem.{parca_sayac}"
            # --->
            referans_duzlem = part.catNesne.CreateReferenceFromObject(duzlem)
            kesisim = yzy_sekil_fabrikasi.AddNewIntersection(
                referans_data, referans_duzlem
            )
            kesisim.PointType = 0

            bodyKesisimler.catNesne.AppendHybridShape(kesisim)
            kesisim.Name = f"Parça-Kesişim.{parca_sayac}"
            # ---->
            referans_kesisim = part.catNesne.CreateReferenceFromObject(kesisim)
            offset = yzy_sekil_fabrikasi.AddNewCurvePar(
                referans_kesisim,
                referans_duzlem,
                self.mdf_offset_slider.value,
                False,
                False,
            )
            offset.SmoothingType = 2
            offset.MaximumDeviationValue = 0.01
            offset.p3DSmoothing = False

            bodyMdfHatlar.catNesne.AppendHybridShape(offset)
            offset.Name = f"Parça-Offset.{parca_sayac}"
            # ---->
            parcaSolidBody = part.bodyler.ekle(f"Parça.{parca_sayac}")
            referans_offset = part.catNesne.CreateReferenceFromObject(offset)

            referansXY = part.catNesne.CreateReferenceFromBRepName(
                f"FSur:(Face:(Brp:({self.secilen_eksen_ismi};1);None:();Cf11:());WithTemporaryBody;WithoutBuildError;WithInitialFeatureSupport;MonoFond;MFBRepVersion_CXR15",
                # f"RSur:(Face:(Brp:({self.secilen_eksen_ismi};1);None:();Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)",
                None,
            )

            pad = solid_sekil_fabrikasi.AddNewPadFromRef(
                part.catNesne.CreateReferenceFromName(""),
                self.mdf_kalinlik_slider.value,
            )
            pad.SetProfileElement(referans_offset)

            pad.FirstLimit.Dimension.Value = self.mdf_kalinlik_slider.value

            pad.SetDirection(referansXY)

            pad.DirectionOrientation = 0
        
            # pad.Name = f"Parça.{parca_sayac}"

            # doldurma = sekil_fabrikasi.AddNewFill()
            # doldurma.AddBound(referans_offset)
            # doldurma.Continuity = 0

            # bodyDoldurmalar.catNesne.AppendHybridShape(doldurma)
            # doldurma.Name = f"Parça-Doldurma.{parca_sayac}"
            # ---->
            # referans_doldurma = part.catNesne.CreateReferenceFromObject(doldurma)
            # referans_yon = sekil_fabrikasi.AddNewDirection(referansXY)

            # uzatma = sekil_fabrikasi.AddNewExtrude(
            #     referans_doldurma, self.mdf_kalinlik_slider.value, 0, referans_yon
            # )
            # uzatma.SymmetricalExtension = 0

            # bodyUzatmalar.catNesne.AppendHybridShape(uzatma)
            # uzatma.Name = f"Parça.{parca_sayac}"

    def tiklandi_renklendir(self, *args, **kwargs):

        pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED)

        self.progressBar.visible = True
        self.progressBar.color = "blue"
        self.page.update()

        catia = IFikatia(win32com.client.Dispatch("Catia.Application"))
        catia.aktifEt()
        aktif_dokuman = catia.aktifDokuman

        secililer = aktif_dokuman.secililer

        print(f"Seçililer Sayısı {secililer.sayisi}")

        if secililer.sayisi == 0:
            return

        if secililer[0].turu == "HybridBody":
            seciliBody = secililer[0].nesne.catNesne

            renk_sayac = 0
            shuffle(self.renkler)
            for x in range(0, seciliBody.HybridShapes.Count):
                item = seciliBody.HybridShapes.item(x + 1)
                print(item.Name)
                secililer.temizle()
                secililer.ekle(item)
                secililer.gorunum.renkRGB = self.renkler[renk_sayac]
                renk_sayac += 1

                if renk_sayac > len(self.renkler) - 1:
                    renk_sayac = 0
        else:
            secilmis_secilenler = []
            for sx in range(secililer.sayisi):
                secilmis_secilenler.append(secililer[sx].nesne)

            renk_sayac = 0
            shuffle(self.renkler)
            for s in secilmis_secilenler:
                secililer.temizle()
                print(s.ismi)
                secililer.ekle(s.catNesne)
                secililer.gorunum.renkRGB = self.renkler[renk_sayac]
                renk_sayac += 1

                if renk_sayac > len(self.renkler) - 1:
                    renk_sayac = 0
        self.progressBar.visible = False
        self.progressBar.color = "blue"
        self.page.update()

    def tiklandi_isimlendir(self, *args, **kwargs):
        pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED)

        self.progressBar.visible = True
        self.progressBar.color = "blue"
        self.page.update()

        catia = IFikatia(win32com.client.Dispatch("Catia.Application"))
        catia.aktifEt()
        aktif_dokuman = catia.aktifDokuman

        secililer = aktif_dokuman.secililer

        print(f"Seçililer Sayısı {secililer.sayisi}")

        if secililer.sayisi == 0:
            return

        if not secililer[0].turu == "HybridBody":
            return

        seciliBody = secililer[0].nesne.catNesne

        for x in range(0, seciliBody.HybridShapes.Count):
            item = seciliBody.HybridShapes.item(x + 1)
            item.Name = f"{seciliBody.Name}.{x+1}"

        self.progressBar.visible = False
        self.progressBar.color = "blue"
        self.page.update()
