(princ "\n- utasítás: blokk2kötés")
(defun c:blokk2kötés (/ fn e bln s h f a r p x y sor)
	(setvar "cmdecho" 0)
	(setq dir (getvar "dwgprefix"))
	(setq fn (getvar "dwgname"))
	(setq fn (substr fn 1 (- (strlen fn) 4)))
	(setq fn (strcat dir fn ".csv"))
	; ezek az értékek módosíthatóak
	(setq kotkodatt "AZONOSITO")	; a kötést szimbolizáló blokkelem kötéskódját tartalmazó attribútum cimkéje
	;(setq kotkodatt nil)					; minta arra, ha a blokkelem nem tartalmazna kötéskódot tartalmazó attribútumot.
																; Ebben az esetben a kiíráskor a kötéskód mező üresen fog maradni és a mentett fájlban az űrlapba betöltés előtt kell ezt az adatot megadni
																; FONTOS: a pontosvessző után az adott sort a program végrehajtása alól kiveszi (comment lesz belőle)
																;	ha egy sort szeretnénk beüzemelni, akkor a pontosvesszőt az elejéről törölni szükséges.
	(setq infraeho "")
	(if (setq e (car (entsel "\nVálassz blokkelemet: ")))
		(if (setq bln (cdr (assoc 2 (entget e))))
			(if (setq s (ssget "X" (list (cons 410 "Model") (cons 2 bln))))
				(progn
					(setq h (sslength s))
					(if (setq f (open fn "w"))
						(progn
							; fejléc megírása
							(princ "E_AM;E_ASZ;FAJTA;FID;QUALITY;EHO_ID;EHO_OBJ;TERV_ID;ORIENTATION;Z" f)
							(princ ";NY_STATUSZ;HSIK;TIPUS;OK_KOD;SZ_ID;BEEPEV;EBE;IF_EHO_ID;EC_CIK;ENGEDELYES;EC_ENG;GEOM.Y;GEOM.X\n" f)
							; minden paraméternek alapérték megadása
							(setq E_AM "")							; Eközmű adatszolgáltatá módja (üres, mert kötésnél nem értelmezett)
							(setq E_ASZ "")							; Eközmű adatszolgáltatási szint (üres, mert kötésnél nem értelmezett)
							(setq FAJTA "1")						; 1=Gerinc kötés
							(setq FID "")								; automatikusan beillesztéskor generálódik. itt mindig üres.
							(setq QUALITY "")						; nem kell kitölteni
							(setq EHO_ID "")						; automatikusan beillesztéskor generálódik. itt mindig üres.
							(setq EHO_OBJ "417176")			; optikai kötés EHO azonosítója
							(setq TERV_ID "1000000010")	; tervazonosító
							(setq ORIENTATION 0.0)			; irány
							(setq Z "")									; EOMA
							(setq NY_STATUSZ "1")				; 1=meglévő saját
							(setq HSIK "1")							; hálózati sík (1=helyi)
							(setq TIPUS "101")					; kötés típusa 101=Ismeretlen Kötés
							(setq OK_KOD "")						; Eszteren belüli kötéskód (max 10 karakter)
							(setq SZ_ID "")							; szolgáltatói azonosító
							(setq BEEPEV "2003")				; beépítés éve
							(setq EBE "0")							; 0=nem épületen belüli
							(setq IF_EHO_ID "")					; infrastruktúra EHO azonosító, mely betöltéskor fog kitöltődni, ha lesz a kötés 30 cm-es távolságában oszlop vagy akna
							(setq EC_CIK "3")						; 3=Üzemelő
							(setq ENGEDELYES "4")				; 4=Nem ismert
							(setq EC_ENG "")						; Engedély száma
							(setq GEOMY 0.0)
							(setq GEOMX 0.0)
							; objektumok mentése
							(while (> h 0)
								(setq e (ssname s (setq h (1- h))))																			; vizsgált elem neve
								(setq a (entget e))																											; vizsgált elem adatai
								; tervezési státusz meghatározása fólia nevéből
								(setq folia (cdr (assoc 8 a)))																					; vizsgált elem fólia neve
								(if (= folia "kötés_meglévő")																						; ha a fólia neve "kötés_meglévő", akkor tervezési státusz legyen 2 (meglévő saját), ellenkező esetben 1 (tervezett)
									(setq NY_STATUSZ "2")
									(setq NY_STATUSZ "1")
								)
								; illesztési pont meghatározása blokk illesztési pontjából
								(setq p (cdr (assoc 10 a)))																							; blokkelem illesztési pontja
								(setq GEOMX (vl-string-subst "." "," (rtos (car p) 2 16)))							; illesztési pont x dimenziója
								(setq GEOMY (vl-string-subst "." "," (rtos (cadr p) 2 16)))							; illesztési pont y dimenziója
								; orientáció meghatározása blokk irányából
								(setq ORIENTATION (+ (* (* (/ 180 pi) (cdr (assoc 50 a))) (- 0 1)) 90))	; blokkelem irányából számolni a megjelenő adatelem orientációját
								(while (or (> ORIENTATION 360.0) (< ORIENTATION 0.0))										; 0 és 360 fok közé beállítani az orientációt
									(if (< ORIENTATION 0.0) (setq ORIENTATION (+ ORIENTATION 360.0)))
									(if (> ORIENTATION 360.0) (setq ORIENTATION (- ORIENTATION 360.0)))
								)
								(setq ORIENTATION (vl-string-subst "." "," (rtos ORIENTATION 2 2)))
								; Szolgáltatói azonosító meghatározása blokk attribútum értékből
								(if kotkodatt (setq SZ_ID (read-att e kotkodatt)) (setq SZ_ID ""))			; kötéskód olvasása a blokkból, ha van attribútumnév. egyébként kötéskód üres karakterlánc.
								(if (not SZ_ID) (setq SZ_ID "<HIBÁS KÖTÉSKÓD CIMKE A BLOKKBAN>"))				; ha kötéskód nem olvasható és nincs értéke, akkor HIBA szöveg kerüljön be a kötéskód paraméterbe
								;
								; mentendő sor összeállítása
								(setq sor (strcat E_AM ";"))
								(setq sor (strcat sor E_ASZ ";"))
								(setq sor (strcat sor FAJTA ";"))
								(setq sor (strcat sor FID ";"))
								(setq sor (strcat sor QUALITY ";"))
								(setq sor (strcat sor EHO_ID ";"))
								(setq sor (strcat sor EHO_OBJ ";"))
								(setq sor (strcat sor TERV_ID ";"))
								(setq sor (strcat sor ORIENTATION ";"))
								(setq sor (strcat sor Z ";"))
								(setq sor (strcat sor NY_STATUSZ ";"))
								(setq sor (strcat sor HSIK ";"))
								(setq sor (strcat sor TIPUS ";"))
								(setq sor (strcat sor OK_KOD ";"))
								(setq sor (strcat sor SZ_ID ";"))
								(setq sor (strcat sor BEEPEV ";"))
								(setq sor (strcat sor EBE ";"))
								(setq sor (strcat sor IF_EHO_ID ";"))
								(setq sor (strcat sor EC_CIK ";"))
								(setq sor (strcat sor ENGEDELYES ";"))
								(setq sor (strcat sor EC_ENG ";"))
								(setq sor (strcat sor GEOMY ";"))
								(setq sor (strcat sor GEOMX "\n"))
								;
								; sor mentése
								(princ sor f)
							)
							(close f)
							(startapp "C:\\Program Files\\Microsoft Office\\root\\Office16\\EXCEL.EXE" fn)
	)	)	)	)	)	)
	(setvar "cmdecho" 1)
	(princ)
)
;
;
(princ "\n- függvény: (read-att <elemnév> <attribútum>)")
(princ "\n            visszatérés: attribútum értéke")
(defun read-att (en at / ea out)
	(if (= (type en) 'ENAME)
		(if (= (cdr (assoc 0 (setq ea (entget en)))) "INSERT")
			(if (= (cdr (assoc 66 ea)) 1)
				(if (= (type at) 'STR)
					(if (/= at "")
						(progn
							(while (/= (cdr (assoc 0 (setq ea (entget (setq en (entnext en)))))) "SEQEND")
								(if (= (cdr (assoc 2 ea)) at) (setq out (cdr (assoc 1 ea))))
	)	)	)	)	)	)	)
	out
)
