;-----------------------------------------------------------------------------
; LSP- zur Stuecklistenersstellung aus Bloecken  AW 12.8.92
; Eingabevariablen:
; 1. Name der Stuecklistendatei
; 2. Auswahlsatz - frei definierbar
;
; - es wird eine *.adf-Datei im Zeichnungsverzeichnis erstellt
; - die Symbole werden einzeln ausgeschrieben und spaeter mit Clipper addiert
; - ST/STL/ap60/AP110/APG110/DRT80/RT8080/HFSPROF/HFSFOR werden in Variablen abgelegt 
;   und am Ende der Datei angefuegt - als LAYR:43,etc.
; 20.12.2006 - AutoCAD 2007 - alles auf GROSSSCHREIBUNG angepasst
;-----------------------------------------------------------------------------

(defun LAENGEN_EINTRAGEN ()
  ; FIXE STRINGS ------------------------------------------------------------------------------------
  (setq string1 "          0          0          0                                             1    0")
  (setq string2 " ")
  (setq string3 "0                                               ")
  (setq string5 "                                                                                ")
  ;--------------------------------------------------------------------------------------------------
  (if (> st 0)		; ST
    (PROFIL_EINTRAGEN st "ST" "821084001") 
  )
  (if (> stl 0)		; STL
    (PROFIL_EINTRAGEN stl "STL" "821084051") 
  )
  (if (> ap110 0)
    (PROFIL_EINTRAGEN ap110 "AP110" "821106001")   
  )	
  (if (> apg110 0)
    (PROFIL_EINTRAGEN apg110 "APG110" "821106002")   
  )	
  (if (> ap60 0)
    (PROFIL_EINTRAGEN ap60 "AP60" "821096001")   
  )	
  (if (> drt80 0)
    (PROFIL_EINTRAGEN drt80 "DRT80" "825084001")   
  )	
  (if (> rt8080 0)
    (PROFIL_EINTRAGEN rt8080 "RT8080" "825144001")   
  )	
  (if (> ils2100_lp 0)
    (PROFIL_EINTRAGEN ils2100_lp "ILS2100-LP" "0_B3000100")   
  )	
  (if (> ils2100_lp_pin 0)
    (PROFIL_EINTRAGEN ils2100_lp_pin "ILS2100-LP MIT PIN" "0_B3000110")   
  )	
  (if (> ils2100_sp 0)
    (PROFIL_EINTRAGEN ils2100_sp "ILS2100-SP" "0_B3000120")   
  )	
  (princ)
	(close datei)                                    ;Datei schliessen
)

(defun PROFIL_EINTRAGEN(LAENGE_IN_MM PROFIL_ART ARTIKEL_NR)
;  (setq ges_menge (rtos (/ LAENGE_IN_MM 1000) 2 0))
  (setq ges_menge (rtos LAENGE_IN_MM 2 0))
  (setq InputLaenge (strlen ges_menge))
  (setq ArtikelNrLaenge (strlen ARTIKEL_NR))
  (STRING_BERECHNEN)
  (setq string4 PROFIL_ART)			
  
  (princ (strcat string1 ARTIKEL_NR DisplayString string3 string4  string5) datei)
  
  (princ "\n" datei)
)

(defun STRING_BERECHNEN()
  (if (= ArtikelNrLaenge 9)
    (cond 
      ((= InputLaenge 1)
        (setq DisplayString (strcat "        " ges_menge))
      )
      ((= InputLaenge 2)
        (setq DisplayString (strcat "       " ges_menge))    
      )
      ((= InputLaenge 3)
        (setq DisplayString (strcat "      " ges_menge))    
      )
      ((= InputLaenge 4)
        (setq DisplayString (strcat "     " ges_menge))    
      )
      ((= InputLaenge 5)
        (setq DisplayString (strcat "    " ges_menge))    
      )
      ((= InputLaenge 6)
        (setq DisplayString (strcat "   " ges_menge))    
      )
      ((= InputLaenge 7)
        (setq DisplayString (strcat "  " ges_menge))    
      )
      ((= InputLaenge 8)
        (setq DisplayString (strcat " " ges_menge))    
      )
    )  ; end cond
  )  ; endif

  (if (= ArtikelNrLaenge 10)
    (cond 
      ((= InputLaenge 1)
        (setq DisplayString (strcat "       " ges_menge))
      )
      ((= InputLaenge 2)
        (setq DisplayString (strcat "      " ges_menge))    
      )
      ((= InputLaenge 3)
        (setq DisplayString (strcat "     " ges_menge))    
      )
      ((= InputLaenge 4)
        (setq DisplayString (strcat "    " ges_menge))    
      )
      ((= InputLaenge 5)
        (setq DisplayString (strcat "   " ges_menge))    
      )
      ((= InputLaenge 6)
        (setq DisplayString (strcat "  " ges_menge))    
      )
      ((= InputLaenge 7)
        (setq DisplayString (strcat " " ges_menge))    
      )
      ((= InputLaenge 8)
        (setq DisplayString ges_menge)    
      )
    )  ; end cond
  )  ; endif
    
)

(defun LAENGE_BERECHNEN()
	(setq startpunkt	(cdr (assoc 10 (entget (ssname asatz alauf)))))		;Startpunkt berechnen
	(setq endpunkt		(cdr (assoc 11 (entget (ssname asatz alauf)))))		;Endpunkt berechnen
	(setq laenge			(distance startpunkt endpunkt))   								;Laenge berechnen
)

;---------------------------------------------------------------------------------------------------
(defun c:stueckl(/ datei datei1 asatz alen alauf name typ st 
                   stl ap60 ap110 apg110 drt80 rt8080 hfsprof hfsfor ils2100_lp ils2100_lp_pin ils2100_sp 
                   startpunkt endpunkt laenge
                )

	;Laengen-Variablen initialisieren
	(setq st 0 stl 0 ap60 0 ap110 0 apg110 0 drt80 0 rt8080 0 hfsprof 0 hfsfor 0 ils2100_lp 0 ils2100_lp_pin 0 ils2100_sp 0)
	;Ausgabedatei abfragen und eroeffnen
  (Setq 
     datei1 (Getfiled "Auswahl Stuecklistendatei" (strcat "h:" "/daten") "txt" 8 )
  )
	(setq datei (open datei1 "a")) 

	; Auswahlsatz bilden

	(setq asatz (ssget) 
		alen (sslength asatz)
		alauf 0
	)
;	(alert "richtige liste")
	(while (< alauf alen)                                          
		; In TYP speichern was gefunden worden ist

		(setq typ (cdr (assoc 0 (entget (ssname asatz alauf)))))
		(princ typ)
		(terpri)

		; Analyse des gefundenen Teiles

		;--> ein Block gefunden
;>>>		(if (equal typ "INSERT")
;>>>			(progn
;>>>				(setq blockname (strcase (cdr (assoc 2 (entget (ssname asatz alauf))))))
;>>>				(princ "\n" datei)
;>>>				(princ (strcat (chr 34) blockname (chr 34) ",1") datei)
;>>>;				(print blockname datei)                ;Ausgabe der Assoziationsliste
;>>>			)
;>>>		)

		;--> b) Linie gefunden
		;** ST
		(if (and (equal (cdr (assoc 0 (entget (ssname asatz alauf)))) "LINE")
				(or (equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "L-2") 
						(equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "l-2"))
				)
				(progn
					(LAENGE_BERECHNEN)
					(setq st	(+ st laenge))
				)
		)
		;** STL
		(if (and (equal (cdr (assoc 0 (entget (ssname asatz alauf)))) "LINE")
				(or (equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "L-7") 
						(equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "l-7"))
				)
				(progn
					(LAENGE_BERECHNEN)
					(setq stl	(+ stl laenge))
				)
		)
		;** AP110
		(if (and (equal (cdr (assoc 0 (entget (ssname asatz alauf)))) "LINE")
				(or (equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "A-7") 
						(equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "a-7"))
				)
				(progn
					(LAENGE_BERECHNEN)
					(setq ap110	(+ ap110 laenge))
				)
		)
		;** APG110
		(if (and (equal (cdr (assoc 0 (entget (ssname asatz alauf)))) "LINE")
				(or (equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "A-2") 
						(equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "a-2"))
				)
				(progn
					(LAENGE_BERECHNEN)
					(setq apg110	(+ apg110 laenge))
				)
		)
		;** AP60
		(if (and (equal (cdr (assoc 0 (entget (ssname asatz alauf)))) "LINE")
				(or (equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "A-4") 
						(equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "a-4"))
				)
				(progn
					(LAENGE_BERECHNEN)
					(setq ap60	(+ ap60 laenge))
				)
		)
		;** DRT80
		(if (and (equal (cdr (assoc 0 (entget (ssname asatz alauf)))) "LINE")
				(or (equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "D-1") 
						(equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "d-1"))
				)
				(progn
					(LAENGE_BERECHNEN)
					(setq drt80	(+ drt80 laenge))
				)
		)
		;** RT8080
		(if (and (equal (cdr (assoc 0 (entget (ssname asatz alauf)))) "LINE")
				(or (equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "D-5") 
						(equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "d-5"))
				)
				(progn
					(LAENGE_BERECHNEN)
					(setq rt8080	(+ rt8080 laenge))
				)
		)
		;** HFS - Lagerstrecke
		(if (and (equal (cdr (assoc 0 (entget (ssname asatz alauf)))) "LINE")
				(or (equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "H-2") 
						(equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "h-2"))
				)
				(progn
					(LAENGE_BERECHNEN)
					(setq hfsprof	(+ hfsprof laenge))
				)
		)
		;** HFS - Förderstrecke
		(if (and (equal (cdr (assoc 0 (entget (ssname asatz alauf)))) "LINE")
				(or (equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "H-1") 
						(equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "h-1"))
				)
				(progn
					(LAENGE_BERECHNEN)
					(setq hfsfor	(+ hfsfor laenge))
				)
		)
		;** ILS - Laufprofil
		(if (and (equal (cdr (assoc 0 (entget (ssname asatz alauf)))) "LINE")
				(or (equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "ILS-LP") 
						(equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "ils-lp"))
				)
				(progn
					(LAENGE_BERECHNEN)
					(setq ils2100_lp	(+ ils2100_lp laenge))
				)
		)
		;** ILS - Laufprofil mit Pin
		(if (and (equal (cdr (assoc 0 (entget (ssname asatz alauf)))) "LINE")
				(or (equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "ILS-LP-PIN") 
						(equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "ils-lp-pin"))
				)
				(progn
					(LAENGE_BERECHNEN)
					(setq ils2100_lp_pin	(+ ils2100_lp_pin laenge))
				)
		)
		;** ILS - Stauprofil (Gefällestrecke)
		(if (and (equal (cdr (assoc 0 (entget (ssname asatz alauf)))) "LINE")
				(or (equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "ILS-SP") 
						(equal (cdr (assoc 8 (entget (ssname asatz alauf)))) "ils-sp"))
				)
				(progn
					(LAENGE_BERECHNEN)
					(setq ils2100_sp	(+ ils2100_sp laenge))
				)
		)

	
		(setq alauf (1+ alauf))
	)  ; end while
	(LAENGEN_EINTRAGEN)
)


