__author__ = 'CAM'

from IFikomObject import IFikomObject
from IKamera import IKamera
from IGosterimNoktasi3d import IGosterimNoktasi3d
from win32com.client import CDispatch,  Dispatch
from enum import Enum





class KesmeModu(Enum) :
	Temiz = 0
	Yakin = 1
	Uzak = 2
	Uzak_Yakin = 3





class IsikModu(Enum) :
	SonsuzIsik = 0
	NeonIsik = 1





class GezintiModu(Enum) :
	Normal = 0
	Yurume = 1
	Ucma = 2





class RenderModu(Enum) :
	catRenderShading = 0
	catRenderShadingWithEdges = 1
	catRenderWireFrame = 2
	catRenderHiddenLinesRemoval = 3
	catRenderQuickHiddenLinesRemoval = 4
	catRenderMaterial = 5
	catRenderMaterialWithEdges = 6
	catRenderShadingWithEdgesAndHiddenEdges = 7
	catRenderShadingWithEdgesWithoutSmoothEdges = 8
	catRenderWireFrameWithoutSmoothEdgesWithoutVertices = 9
	catRenderWireFrameWithHalfSmoothEdgesWithoutVertices = 10
	catRenderShadingWithEdgesWithOutlines = 11
	catRenderQuickHiddenLinesRemovalWithoutVertices = 12
	catRenderQuickHiddenLinesRemovalWithHiddenEdgesWithOutlines = 13
	catRenderQuickHiddenLinesRemovalWithHiddenEdgesWithOutlinesWithoutVertices = 14
	catRenderWireFrameWithHalfSmoothEdgeWithOutlinesWithoutVertices = 15
	catRenderWireFrameWithOutlinesWithoutSmoothEdgesWithoutVertices = 16
	catRenderQuickHiddenLinesRemovalWithHiddenEdgesWithoutSmoothEdgesWithoutVertices = 17
	catRenderQuickHiddenLinesRemovalWithHiddenEdgesWithHalfSmoothEdgeWithoutVertices = 18
	catRenderQuickHiddenLinesRemovalWithoutSmoothEdgesWithoutVertices = 19
	catRenderQuickHiddenLinesRemovalWithHalfSmoothEdgeWithoutVertices = 20
	catRenderShadingWithEdgesWithHalfSmoothEdgeWithoutVertices = 22
	catRenderShadingWithEdgesWithHalfSmoothEdge = 23





class IGosterim3d(IFikomObject) :
	def __init__(self , obj:CDispatch , sahip:IFikomObject = None) :
		super(IGosterim3d , self).__init__(obj , sahip)
		self.sahip = sahip
		self.tipi = "IGosterim3d"

		# --->Sabit Degiskenler

	@property
	def tamEkran(self) -> bool :
		return self.catNesne.FullScreen

	@tamEkran.setter
	def tamEkran(self , value:bool) :
		self.catNesne.FullScreen = value

	@property
	def genislik(self) -> int :  # Salt Okunur
		return self.catNesne.Width

	@property
	def yukseklik(self) -> int :  # Salt Okunur
		return self.catNesne.Height

	def aktifEt(self) :
		self.catNesne.Activate()

	def resimDosyaya(self , Dosya , Format = 5 , ArkaPlan = [1 , 1 , 1] , Agac = False) -> str :
		"""
		  0:catCaptureFormatCGM,
		  1:catCaptureFormatEMF,
		  2:catCaptureFormatTIFF,
		  3:catCaptureFormatTIFFGreyScale,
		  4:catCaptureFormatBMP,
		  5:catCaptureFormatJPEG
		"""
		try :
			if not Agac :
				self.anaProgram.komut("Specifications")
			# --->
			self.arkaPlanRengi = ArkaPlan
			# --->
			self.catNesne.CaptureToFile(Format , Dosya)
			# --->
			self.arkaPlanRengi = [0.0 , 0.20000000298023224 , 0.2980392277240753]
			# --->
			if not Agac :
				self.anaProgram.komut("Specifications")
		except :
			raise Warning("Hata Olustu")
		return Dosya

	# c:specifications

	@property
	def arkaPlanRengi(self) :
		EvalCode = """
			Dim origin(2)
			ViewPoint3d.GetBackgroundColor origin
			return = origin
		"""
		rslt = self.anaProgram.eval(EvalCode , "ViewPoint3d as Viewer3D" , [self.catNesne])
		return rslt

	@arkaPlanRengi.setter
	def arkaPlanRengi(self , value) :
		self.catNesne.PutBackgroundColor(value)

	def ekranaSigdir(self) :
		self.catNesne.Reframe()

	def guncelle(self) :
		self.catNesne.Update()

	def yaklastir(self) :
		self.catNesne.ZoomIn()

	def uzaklastir(self) :
		self.catNesne.ZoomOut()

	def yeniKamera(self , Ismi = None) -> IKamera :
		rslt = self.catNesne.NewCamera()
		rslt1 = IKamera(rslt , sahip = self.sahip.sahip.dokuman.kameralar)
		if not Ismi == None :
			rslt1.Ismi(Ismi)
		del rslt
		return rslt1

	@property
	def kesmeModu(self) -> KesmeModu :
		return KesmeModu(self.catNesne.ClippingMode)

	@kesmeModu.setter
	def kesmeModu(self , value:KesmeModu) :
		self.catNesne.ClippingMode = value.value

	@property
	def uzakLimit(self) -> float :
		return self.catNesne.FarLimit

	@uzakLimit.setter
	def uzakLimit(self , value:float) :
		self.catNesne.FarLimit = value

	@property
	def yakinLimit(self) -> float :
		return self.catNesne.NearLimit

	@yakinLimit.setter
	def yakinLimit(self , value:float) :
		self.catNesne.NearLimit = value

	@property
	def sisliMod(self) -> bool :
		return self.catNesne.Foggy

	@sisliMod.setter
	def sisliMod(self , value:bool) :
		self.catNesne.Foggy = value

	@property
	def zemin(self) :
		return self.catNesne.Ground

	@zemin.setter
	def zemin(self , value) :
		self.catNesne.Ground = value

	@property
	def isikKaynaklari(self) :
		pass

	# Light Sources Yazildiktan Sonra Yapilacak

	@property
	def isikYogunlugu(self) -> float :
		return self.catNesne.LightingIntensity

	@isikYogunlugu.setter
	def isikYogunlugu(self , value:float) :
		self.catNesne.LightingIntensity = value

	@property
	def isikModu(self) -> IsikModu :
		return IsikModu(self.catNesne.LightingMode)

	@isikModu.setter
	def isikModu(self , value:IsikModu) :
		self.catNesne.LightingMode = value.value

	@property
	def gezintiStili(self) -> GezintiModu :
		return GezintiModu(self.catNesne.NavigationStyle)

	@gezintiStili.setter
	def gezintiStili(self , value:GezintiModu) :
		self.catNesne.NavigationStyle = value.value

	@property
	def renderModu(self) -> RenderModu :
		return RenderModu(self.catNesne.RenderingMode)

	@renderModu.setter
	def renderModu(self , value:RenderModu) :
		self.catNesne.RenderingMode = value.value

	@property
	def gosterimNoktasi3d(self) -> IGosterimNoktasi3d :
		return IGosterimNoktasi3d(obj = self.catNesne.Viewpoint3D , sahip = self)

	@gosterimNoktasi3d.setter
	def gosterimNoktasi3d(self , value) :
		if isinstance(value , IGosterimNoktasi3d) :
			self.catNesne.ViewPoint3d = value.catNesne
		else :
			self.catNesne.ViewPoint3d = value

	def dondur(self , Yon , Derece , Guncelle = False) :
		self.catNesne.Rotate(Yon , Derece)
		if Guncelle :
			self.guncelle()

	def gotur(self , Vector , Guncelle = False) :
		self.catNesne.Translate(Vector)
		if Guncelle :
			self.guncelle()

