;======================================-------------------------------------------- RELOAD -------------------------------------------------------------===================
  (defun c:ll(/)
    (load "C:/NXYZ/nxyz.lsp")
    (princ)
  )
;======================================-------------------------------------------- KONFIGURACJA -------------------------------------------------------===================
  (setvar "LOGFILEMODE" 1)
  (defun c:NXYZSetup ()    
    (setq cui-file-EN "C:/NXYZ/bin/Setup.cuix")
    (setq cui-file-PL "C:/NXYZ/bin/Setup-PL.cuix")
    (setq support-path (getenv "ACAD"))
    (if support-path
      (progn
        (cond
          ((vl-string-search "en-US" support-path)
            (if (findfile cui-file-EN)
              (progn
                (setq acadObj (vlax-get-acad-object))
                (setq menugroups (vla-get-Menugroups acadObj))
                (setq already-loaded nil)
                (vlax-for group menugroups
                  (if (equal (strcase (vla-get-Name group)) (strcase (vl-filename-base cui-file-EN)))
                    (setq already-loaded T)
                  )
                )
                (if already-loaded
                  (command "_.CUIUNLOAD" (vl-filename-base cui-file-EN))
                )
                (command "_.CUILOAD" cui-file-EN)
                (alert "\nSkonfigurowano pomyślnie.")
              )
              (alert (strcat "\nBrak pliku konfiguracyjnego w ścieżce: " cui-file-EN)) 
            )
          )
          ((vl-string-search "pl-PL" support-path)
            (if (findfile cui-file-PL)
              (progn
                (setq acadObj (vlax-get-acad-object))
                (setq menugroups (vla-get-Menugroups acadObj))
                (setq already-loaded nil)
                (vlax-for group menugroups
                  (if (equal (strcase (vla-get-Name group)) (strcase (vl-filename-base cui-file-PL)))
                    (setq already-loaded T)
                  )
                )
                (if already-loaded
                  (command "_.CUIUNLOAD" (vl-filename-base cui-file-PL))
                )
                (command "_.CUILOAD" cui-file-PL)
                (alert "\nSkonfigurowano pomyślnie.")
              )
              (alert (strcat "\nBrak pliku konfiguracyjnego w ścieżce: " cui-file-PL)) 
            )
          )
        )
      )
      (prompt "\nNie można ustalić wersji językowej AutoCad.")
    )
    (princ)
  )
  (defun NXYZSetup ()    
    (setq cui-file-EN "C:/NXYZ/bin/Setup.cuix")
    (setq cui-file-PL "C:/NXYZ/bin/Setup-PL.cuix")
    (setq support-path (getenv "ACAD"))
    (if support-path
      (progn
        (cond
          ((vl-string-search "en-US" support-path)
            (if (findfile cui-file-EN)
              (progn
                (setq acadObj (vlax-get-acad-object))
                (setq menugroups (vla-get-Menugroups acadObj))
                (setq already-loaded nil)
                (vlax-for group menugroups
                  (if (equal (strcase (vla-get-Name group)) (strcase (vl-filename-base cui-file-EN)))
                    (setq already-loaded T)
                  )
                )
                (if already-loaded
                  (command "_.CUIUNLOAD" (vl-filename-base cui-file-EN))
                )
                (command "_.CUILOAD" cui-file-EN)
                (alert "\nSkonfigurowano pomyślnie.")
              )
              (alert (strcat "\nBrak pliku konfiguracyjnego w ścieżce: " cui-file-EN)) 
            )
          )
          ((vl-string-search "pl-PL" support-path)
            (if (findfile cui-file-PL)
              (progn
                (setq acadObj (vlax-get-acad-object))
                (setq menugroups (vla-get-Menugroups acadObj))
                (setq already-loaded nil)
                (vlax-for group menugroups
                  (if (equal (strcase (vla-get-Name group)) (strcase (vl-filename-base cui-file-PL)))
                    (setq already-loaded T)
                  )
                )
                (if already-loaded
                  (command "_.CUIUNLOAD" (vl-filename-base cui-file-PL))
                )
                (command "_.CUILOAD" cui-file-PL)
                (alert "\nSkonfigurowano pomyślnie.")
              )
              (alert (strcat "\nBrak pliku konfiguracyjnego w ścieżce: " cui-file-PL)) 
            )
          )
        )
      )
      (prompt "\nNie można ustalić wersji językowej AutoCad.")
    )
    (princ)
  )
  (defun c:NXYZ ()
    (setq old_cmdecho (getvar "cmdecho"))
    (setvar "cmdecho" 0)
    (command "_OPENDCL")
    (dcl-Project-Load "c:/NXYZ/geostation")
    (vl-load-all "c:/NXYZ/nxyz.lsp")
    (vl-load-com)
    (setq acad (vlax-get-acad-object))
    (setq doc (vla-get-activedocument acad))
    (setq mspace (vla-get-modelspace doc))
    (setq documentname (vla-get-name doc))
    (if (equal (getenv "AutoLispAutoUpdate") nil)
      (setenv "AutoLispAutoUpdate" "1")
    )
    (dcl-Form-Show geostation/Form7)
    (setvar "cmdecho" old_cmdecho)
    (if (equal (getenv "AutoLispAutoUpdate") "1")
      (dcl-Control-SetValue geostation/Form7/CheckBox1 1)
      (dcl-Control-SetValue geostation/Form7/CheckBox1 0)
    )
    (princ)
  )
  (defun c:geostation/Form7/TextButton1#OnClicked (/)
    (dcl-Form-Close geostation/Form7)
    (princ)
  )
  (defun c:geostation/Form7/TextButton2#OnClicked (/)
    (NXYZSetup)
    (dcl-Form-Close geostation/Form7)
  )
  (defun c:geostation/Form7/CheckBox1#OnClicked (Value /)
    (setq CheckBoxUpdate Value)
    (cond
      ((equal CheckBoxUpdate 1)
        (setenv "AutoLispAutoUpdate" "1")
      )
      ((equal CheckBoxUpdate 0)
        (setenv "AutoLispAutoUpdate" "0")
      )
      (t
        (princ)
      )
    )
    (setq autoUpdate (getenv "AutoLispAutoUpdate"))
    (princ)
  )
  (defun consolelogpath ()
    (setq old_cmdecho (getvar "cmdecho"))
    (setvar "cmdecho" 0)
    (setq acadObj (vlax-get-acad-object))
    (setq preferences (vla-get-Preferences acadObj))
    (setq newLogFilePath "C:/NXYZ/console/")
    (vla-put-LogFilePath (vla-get-Files preferences) newLogFilePath)
    (setvar "cmdecho" old_cmdecho)
  )
  (consolelogpath)
;======================================-------------------------------------------- FUNKCJE STAŁE ------------------------------------------------------===================
  ;                    ---------------------------- ZAOKRĄGLANIE ----------------------------------------------------
    (defun zaokraglaj0 (wartosc)
      (cond
        ;; Jeśli to liczba – zaokrągl i zwróć string
        ((numberp wartosc)
        (rtos (fix (+ wartosc (if (< wartosc 0) -0.5 0.5))) 2 0))

        ;; Jeśli to nie liczba – spróbuj potraktować jako string i skonwertuj
        ((not (numberp wartosc))
        (rtos (fix (+ (atof wartosc) (if (< (atof wartosc) 0) -0.5 0.5))) 2 0))

        ;; Jeśli wszystko inne zawiedzie – błąd
        (t (princ "\nNiepoprawny typ danych!"))
      )
    )
    (defun zaokraglaj1 (wartosc)
      (defun format-wartosc (s)
        (setq dot-pos (vl-string-search "." s)
              decimal-part-length (if dot-pos (- (strlen s) (+ dot-pos 1)) 0)
        )
          ;; Dodaj brakujące zera, jeśli potrzeba
          (cond
            ((= decimal-part-length 0) (strcat s ".0"))
            (t s)
          )
      ) 
      (cond
        ((numberp wartosc)
        (format-wartosc (rtos wartosc 2 1)))  ;; Zamień liczbę na tekst z dwoma miejscami po przecinku
        ((/= numberp wartosc)
        (format-wartosc (rtos (atof wartosc) 2 1)))
        (t (princ "\nNiepoprawny typ danych!"))  ;; Obsługuje niepoprawne typy danych
      )
    )
    (defun zaokraglaj2 (wartosc)
      (defun format-wartosc (s)
        (setq dot-pos (vl-string-search "." s)
              decimal-part-length (if dot-pos (- (strlen s) (+ dot-pos 1)) 0)
        )
          ;; Dodaj brakujące zera, jeśli potrzeba
          (cond
            ((= decimal-part-length 0) (strcat s ".00"))
            ((= decimal-part-length 1) (strcat s "0"))
            (t s)  ;; Jeśli już są dwa miejsca po przecinku
          )
      ) 
      (cond
        ((numberp wartosc)
        (format-wartosc (rtos wartosc 2 2)))  ;; Zamień liczbę na tekst z dwoma miejscami po przecinku
        ((/= numberp wartosc)
        (format-wartosc (rtos (atof wartosc) 2 2)))
        (t (princ "\nNiepoprawny typ danych!"))  ;; Obsługuje niepoprawne typy danych
      )
    )
    (defun zaokraglaj3 (wartosc)
      (defun format-wartosc (s)
        (setq dot-pos (vl-string-search "." s)
              decimal-part-length (if dot-pos (- (strlen s) (+ dot-pos 1)) 0)
        )
          ;; Dodaj brakujące zera, jeśli potrzeba
          (cond
            ((= decimal-part-length 0) (strcat s ".000"))
            ((= decimal-part-length 1) (strcat s "00"))
            ((= decimal-part-length 2) (strcat s "0"))
            (t s)
          )
      ) 
      (cond
        ((numberp wartosc)
        (format-wartosc (rtos wartosc 2 3)))  ;; Zamień liczbę na tekst z dwoma miejscami po przecinku
        ((/= numberp wartosc)
        (format-wartosc (rtos (atof wartosc) 2 3)))
        (t (princ "\nNiepoprawny typ danych!"))  ;; Obsługuje niepoprawne typy danych
      )
    )
  
  ;                    ---------------------------- OBLICZANIE ODLEGLOŚCI 2D ----------------------------------------
    (defun odleglosc2D (punkt1 punkt2 /)
      "Oblicza odległość 2D między dwoma punktami (x1, y1) i (x2, y2)"
      (sqrt 
        (+ 
          (expt (- (car punkt2) (car punkt1)) 2) ; różnica x, podniesiona do kwadratu
          (expt (- (cadr punkt2) (cadr punkt1)) 2) ; różnica y, podniesiona do kwadratu
        )
      )
    )
  ;                    ---------------------------- LOADING SCREEN ----------------------------------------
    (defun StartLoading (nazwa)      
      (if (dcl-Form-IsActive geostation/Form13)
        (princ)
        (progn
          (setq screensize (dcl-GetScreenSize))
          (dcl-Form-Show geostation/Form13)
          (dcl-Control-SetPos geostation/Form13 (- (/ (car screensize) 2) 328) (- (/ (cadr screensize) 2) 56) 656 112)
          (dcl-Control-SetCaption geostation/Form13/Label1 nazwa)
          (dcl-Control-SetCaption geostation/Form13/Label2 "")
        )
      )
    )
    (defun ChangeLoading (nazwa postep minp maxp)
      (if (dcl-Form-IsActive geostation/Form13)
        (progn
          (dcl-Control-SetCaption geostation/Form13/Label1 (strcat nazwa " " postep))
          (if (= maxp 0)
            (dcl-Control-SetCaption geostation/Form13/Label2 "")
            (dcl-Control-SetCaption geostation/Form13/Label2 (strcat "entycja: " (zaokraglaj0 minp) "/" (zaokraglaj0 maxp)))
          )  
        )    
        (princ)
      )
    )
    (defun CloseLoading ()
      (if (dcl-Form-IsActive geostation/Form13)
        (dcl-Form-Close geostation/Form13)
        (princ)
      )
    )
  ;                    ---------------------------- MULTILINE TO POLYLINE ----------------------------------------
    (defun ml2pl ( / *error* doc el en i s1 s2 val var )
      (vl-load-com)
      (defun *error* ( msg )
          (if val (mapcar 'setvar var val))
          (if doc (LM:endundo doc))
          (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
              (princ (strcat "\nError: " msg))
          )
          (princ)
      )
      
      (setq doc (vla-get-activedocument (vlax-get-acad-object))
            var '("CMDECHO" "PEDITACCEPT" "QAFLAGS")
            val  (mapcar 'getvar var)
      )
      (if (setq s1 (ssget "_X" '((0 . "MLINE"))))
          (progn
              (LM:startundo doc)
              (mapcar 'setvar var '(0 1 0))
              (repeat (setq i (sslength s1))
                  (setq en (ssname s1 (setq i (1- i)))
                        el (entlast)
                        s2 (ssadd)
                  )
                  (command "_.explode" en)
                  (while (setq el (entnext el))
                      (ssadd el s2)
                  )
                  (command "_.pedit" "_M" s2 "" "_J" "" "")
                  (setq s2 nil)
              )
              (mapcar 'setvar var val)
              (LM:endundo doc)
          )
      )
      (princ)
    )
    (defun LM:startundo ( doc )
        (LM:endundo doc)
        (vla-startundomark doc)
    )
    (defun LM:endundo ( doc )
        (while (= 8 (logand 8 (getvar 'undoctl)))
            (vla-endundomark doc)
        )
    )

;======================================-------------------------------------------- IMPORT -------------------------------------------------------------===================
  ;                    ---------------------------- DZIAŁANIE PROGRAMU ----------------------------------------------------  
    (defun c:NXYZIMPORT ()
      (setq old_cmdecho (getvar "cmdecho"))
      (setvar "cmdecho" 0)
      (command "_OPENDCL")
      (dcl-Project-Load "c:/NXYZ/geostation")
      (vl-load-all "c:/NXYZ/nxyz.lsp")
      (vl-load-com)
      (setq acad (vlax-get-acad-object))
      (setq doc (vla-get-activedocument acad))
      (setq mspace (vla-get-modelspace doc))
      (setq documentname (vla-get-name doc))
      (dcl-Form-Show geostation/Form4)
      (CheckUpdate "Form4")
      (dcl-ImageComboBox-SetCurSel geostation/Form4/ImageCombo1 0)
      ; (dcl-ComboBox-SetCurSel geostation/Form4/ComboBox1 3)
      (setq indexTab 1000)
      (princ)
      (setvar "cmdecho" old_cmdecho)
      (dcl-Control-SetPicture geostation/Form4/GraphicButton6 132)
      (if (= (dcl-ListView-GetColumnCount geostation/Form4/ListView1) 0)
        (dcl-ListView-AddColumns geostation/Form4/ListView1
          (LIST (LIST "" 1 30)
                (LIST "Nazwa" 1 100)
                (LIST "X" 1 90)
                (LIST "Y" 1 90)
                (LIST "H" 1 70)
                (LIST "Kod" 1 90)
          )     
        ) 
        (princ)
      )
      (if closeList
        (dcl-ListView-FillList geostation/Form4/ListView1 closeList)
        (princ)
      )
      (princ)
    )
    (defun loadLinetype (doc LineTypeName FileName)
      (if (and (not (existLinetype doc LineTypeName)) (vl-catch-all-error-p (vl-catch-all-apply 'vla-load (list (vla-get-Linetypes doc) LineTypeName FileName))))
        nil
        T
      )
    )
    (defun existLinetype (doc LineTypeName / item loaded)
      (vlax-for item (vla-get-linetypes doc)
      (if (= (strcase (vla-get-name item)) (strcase LineTypeName))
          (setq loaded T)
        )
      )
    )
    (defun wybor-warstwy-import (/)
      (setq layer-name (dcl-Control-GetText geostation/Form4/TextBox2))
      (setq fakecolor (dcl-ImageComboBox-GetCurSel geostation/Form4/ImageCombo1))
      (setq layer-color (1+ fakecolor))
      (setq acad (vlax-get-acad-object))
      (setq doc (vla-get-activedocument acad))
      (setq mspace (vla-get-modelspace doc))
      (setq curLayer (vla-get-ActiveLayer doc))
      (setq layers (vla-get-layers doc))
      (vla-Add layers layer-name)
      (vla-put-ActiveLayer doc (vla-item layers layer-name))
      (vla-put-Color (vla-item layers layer-name) layer-color)
      (setq rozmiarTekstu (dcl-Control-GetText geostation/Form4/TextBox1))
      (setq IMPORTCB1 (dcl-Control-GetValue geostation/Form4/CheckBox1))
      (setq IMPORTCB2 (dcl-Control-GetValue geostation/Form4/CheckBox2))  
      (setq IMPORTCB3 (dcl-Control-GetValue geostation/Form4/CheckBox3)) 
      (setq IMPORT3D (dcl-Control-GetValue geostation/Form4/CheckBox4))
      (setq currentColor (getvar "CECOLOR"))
      (setvar "CECOLOR" "ByLayer")
      (cond 
        ((= IMPORT3D 0)
        (setq thepoint (vla-AddPoint mspace (vlax-3d-point WSKAZ_PUNKT_BEZ_H)))
        )
        ((= IMPORT3D 1)
        (setq thepoint (vla-AddPoint mspace (vlax-3d-point WSKAZ_PUNKT)))
        )
      )
      (setvar "TEXTSTYLE" "IMPORT")
      (setvar "TEXTSIZE" (atof rozmiarTekstu))
      (cond
        ((and (= IMPORTCB1 1) (= IMPORTCB2 0) (= IMPORTCB3 0))
        (setq theMText (vla-AddMText mspace (vlax-3d-point WSKAZ_PUNKT) (atof rozmiarTekstu) NAZWA)) 
        )
        ((and (= IMPORTCB1 1) (= IMPORTCB2 1) (= IMPORTCB3 0))
          (setq theMText (vla-AddMText mspace (vlax-3d-point WSKAZ_PUNKT) (atof rozmiarTekstu) NAZWA)) 
          (setq layer-name-rzedna (strcat (dcl-Control-GetText geostation/Form4/TextBox2) "(rzedna)"))   
          (vla-Add layers layer-name-rzedna)
          (vla-put-ActiveLayer doc (vla-item layers layer-name-rzedna))
          (vla-put-Color (vla-item layers layer-name-rzedna) layer-color)      
          (setq theMText (vla-AddMText mspace (vlax-3d-point WSKAZ_PUNKTT) (atof rozmiarTekstu) WSPOLRZEDNA_ZT))
          (vla-put-ActiveLayer doc (vla-item layers layer-name))
        )
        ((and (= IMPORTCB1 1) (= IMPORTCB2 1) (= IMPORTCB3 1))
          (setq theMText (vla-AddMText mspace (vlax-3d-point WSKAZ_PUNKT) (atof rozmiarTekstu) NAZWA)) 
          (setq layer-name-rzedna (strcat (dcl-Control-GetText geostation/Form4/TextBox2) "(rzedna)"))   
          (vla-Add layers layer-name-rzedna)
          (vla-put-ActiveLayer doc (vla-item layers layer-name-rzedna))
          (vla-put-Color (vla-item layers layer-name-rzedna) layer-color)   
          (setq theMText (vla-AddMText mspace (vlax-3d-point WSKAZ_PUNKTT) (atof rozmiarTekstu) WSPOLRZEDNA_ZT))
          (setq layer-name-kod (strcat (dcl-Control-GetText geostation/Form4/TextBox2) "(kod)"))   
          (vla-Add layers layer-name-kod)
          (vla-put-ActiveLayer doc (vla-item layers layer-name-kod))
          (vla-put-Color (vla-item layers layer-name-kod) layer-color)  
          (setq theMText (vla-AddMText mspace (vlax-3d-point WSKAZ_PUNKTTT) (atof rozmiarTekstu) KOD))
          (vla-put-ActiveLayer doc (vla-item layers layer-name))
        )
        ((and (= IMPORTCB1 0) (= IMPORTCB2 1) (= IMPORTCB3 0))
          (setq layer-name-rzedna (strcat (dcl-Control-GetText geostation/Form4/TextBox2) "(rzedna)"))   
          (vla-Add layers layer-name-rzedna)
          (vla-put-ActiveLayer doc (vla-item layers layer-name-rzedna))
          (vla-put-Color (vla-item layers layer-name-rzedna) layer-color)    
          (setq theMText (vla-AddMText mspace (vlax-3d-point WSKAZ_PUNKT) (atof rozmiarTekstu) WSPOLRZEDNA_ZT))
          (vla-put-ActiveLayer doc (vla-item layers layer-name))
        )
        ((and (= IMPORTCB1 0) (= IMPORTCB2 1) (= IMPORTCB3 1))
          (setq layer-name-rzedna (strcat (dcl-Control-GetText geostation/Form4/TextBox2) "(rzedna)"))   
          (vla-Add layers layer-name-rzedna)
          (vla-put-ActiveLayer doc (vla-item layers layer-name-rzedna))
          (vla-put-Color (vla-item layers layer-name-rzedna) layer-color)    
          (setq theMText (vla-AddMText mspace (vlax-3d-point WSKAZ_PUNKT) (atof rozmiarTekstu) WSPOLRZEDNA_ZT))
          (setq layer-name-kod (strcat (dcl-Control-GetText geostation/Form4/TextBox2) "(kod)"))
          (vla-Add layers layer-name-kod)
          (vla-put-ActiveLayer doc (vla-item layers layer-name-kod))
          (vla-put-Color (vla-item layers layer-name-kod) layer-color)  
          (setq theMText (vla-AddMText mspace (vlax-3d-point WSKAZ_PUNKTT) (atof rozmiarTekstu) KOD)) 
          (vla-put-ActiveLayer doc (vla-item layers layer-name))
        )
        ((and (= IMPORTCB1 0) (= IMPORTCB2 0) (= IMPORTCB3 1))
          (setq layer-name-kod (strcat (dcl-Control-GetText geostation/Form4/TextBox2) "(kod)"))
          (vla-Add layers layer-name-kod)
          (vla-put-ActiveLayer doc (vla-item layers layer-name-kod))
          (vla-put-Color (vla-item layers layer-name-kod) layer-color)  
          (setq theMText (vla-AddMText mspace (vlax-3d-point WSKAZ_PUNKT) (atof rozmiarTekstu) KOD)) 
          (vla-put-ActiveLayer doc (vla-item layers layer-name))
        )
        ((and (= IMPORTCB1 1) (= IMPORTCB2 0) (= IMPORTCB3 1))
          (setq theMText (vla-AddMText mspace (vlax-3d-point WSKAZ_PUNKT) (atof rozmiarTekstu) NAZWA)) 
          (setq layer-name-kod (strcat (dcl-Control-GetText geostation/Form4/TextBox2) "(kod)"))
          (vla-Add layers layer-name-kod)
          (vla-put-ActiveLayer doc (vla-item layers layer-name-kod))
          (vla-put-Color (vla-item layers layer-name-kod) layer-color) 
          (setq theMText (vla-AddMText mspace (vlax-3d-point WSKAZ_PUNKTT) (atof rozmiarTekstu) KOD)) 
          (vla-put-ActiveLayer doc (vla-item layers layer-name))
        )
      )
      (cond
        ((or (= indexTab -1) (= indexTab NIL))
          (princ)
        )
        ((= indexTab 1000) ;------------ BRAK
          (princ)
        )
        ((= indexTab 1001) ;--------- PKR 
          (PKR)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "PKR")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          )  
        )
        ((= indexTab 1002) ;--------- KROPKA  
          (KROPKA)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "KROPKA")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          ) 
        ) 
        ((= indexTab 2000) ;--------- DRZEWO_LISCIASTE 
          (DRZEWO_LISCIASTE)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "DRZEWO_LISCIASTE")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          ) 
        )     
        ((= indexTab 2001) ;--------- DRZEWO IGLASTE 
          (DRZEWO_IGLASTE)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "DRZEWO_IGLASTE")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          )   
        ) 
        ((= indexTab 2002) ;--------- DRZEWO INNA BUDOWLA
          (INNA_BUDOWLA)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "INNA_BUDOWLA")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          ) 
        )  
        ((= indexTab 2003) ;--------- INNY_OBIEKT_ZAGOSPODAROWANIA_TERENU
          (INNY_OBIEKT_ZAGOSPODAROWANIA_TERENU)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "INNY_OBIEKT_ZAGOSPODAROWANIA_TERENU")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          )  
        )  
        ((= indexTab 2004) ;--------- PIKIETA_SZTUCZNA
          (PIKIETA_SZTUCZNA)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "PIKIETA_SZTUCZNA")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          ) 
        )  
        ((= indexTab 2005) ;--------- PIKIETA_NATURALNA
          (PIKIETA_NATURALNA)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "PIKIETA_NATURALNA")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          )  
        )      
        ((= indexTab 3000) ;--------- KRATKA_SCIEKOWA
          (KRATKA_SCIEKOWA)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "KRATKA_SCIEKOWA")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          ) 
        ) 
        ((= indexTab 3001) ;--------- WLAZ
          (WLAZ)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "WLAZ")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          ) 
        )  
        ((= indexTab 3002) ;--------- LATARNIA
          (LATARNIA)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "LATARNIA")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          )     
        )  
        ((= indexTab 3003) ;--------- STACJA_LADOWANIA 
          (STACJA_LADOWANIA)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "STACJA_LADOWANIA")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          )
        )  
        ((= indexTab 3004) ;--------- HYDRANT  
          (HYDRANT)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "HYDRANT")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          ) 
        )  
        ((= indexTab 3005) ;--------- WODOCIAGOWE_URZ_TECH
          (WODOCIAGOWE_URZ_TECH)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "WODOCIAGOWE_URZ_TECH")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          ) 
        )  
        ((= indexTab 3006) ;--------- ELEKTROENERGETYCZNE_URZ_TECH 
          (ELEKTROENERGETYCZNE_URZ_TECH)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "ELEKTROENERGETYCZNE_URZ_TECH")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          ) 
        )  
        ((= indexTab 3007) ;--------- GAZOWE_URZ_TECH
          (GAZOWE_URZ_TECH)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "GAZOWE_URZ_TECH")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          ) 
        )  
        ((= indexTab 3008) ;--------- TELEKOMUNIKACYJNE_URZ_TECH
          (TELEKOMUNIKACYJNE_URZ_TECH)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "TELEKOMUNIKACYJNE_URZ_TECH")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          ) 
        )  
        ((= indexTab 3009) ;--------- CIEPLOWNICZE_URZ_TECH
          (CIEPLOWNICZE_URZ_TECH)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "CIEPLOWNICZE_URZ_TECH")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          )  
        )  
        ((= indexTab 3010) ;--------- URZ_TECH_SIECI_SPECJ 
          (URZ_TECH_SIECI_SPECJ)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "URZ_TECH_SIECI_SPECJ")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          )  
        )  
        ((= indexTab 3011) ;--------- URZ_TECH_SIECI_NIEZIDENT 
          (URZ_TECH_SIECI_NIEZIDENT)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "URZ_TECH_SIECI_NIEZIDENT")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          )  
        )  
        ((= indexTab 3012) ;--------- SZAFA_ELEKTROENERGETYCZNA
          (SZAFA_ELEKTROENERGETYCZNA)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "SZAFA_ELEKTROENERGETYCZNA")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          )  
        )  
        ((= indexTab 3013) ;--------- SZAFA_GAZOWA
          (SZAFA_GAZOWA)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "SZAFA_GAZOWA")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          )  
        )  
        ((= indexTab 3014) ;--------- SZAFA_TELEKOMUNIKACYJNA
          (SZAFA_TELEKOMUNIKACYJNA)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "SZAFA_TELEKOMUNIKACYJNA")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          ) 
        )  
        ((= indexTab 3015) ;--------- SLUPEK_TELEKOMUNIKACYJNY
          (SLUPEK_TELEKOMUNIKACYJNY)
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "SLUPEK_TELEKOMUNIKACYJNY")
              (cons 10 WSKAZ_PUNKT)
              (cons 41 1.0) ;; Skala X
              (cons 42 1.0) ;; Skala Y
              (cons 43 1.0) ;; Skala Z
              (cons 50 0.0) ;; Kąt rotacji
            )
          ) 
        )      
      )
      (vla-put-ActiveLayer doc curLayer)
      (setvar "CECOLOR" currentColor)
      (princ)
    )
    (defun contains-letters (str)    ;----------- SPRAWDZANIE LITER WE WSPOLRZEDNYCH
      (if (not (eq (type str) 'STR))
        (princ "\nBłąd: argument nie jest stringiem")
        (progn
          (setq containsLetters nil)
          (foreach char (vl-string->list str)
            (if (or (and (>= char 65) (<= char 90))  ; ASCII 65-90 to wielkie litery A-Z
                    (and (>= char 97) (<= char 122))) ; ASCII 97-122 to małe litery a-z
              (setq containsLetters T)
            )
          )
          containsLetters
        )
      )
    )
    (defun c:geostation/Form4/ListView1#OnMouseDown (Button Flags X Y /) ;------------ ZAZNACZANIE W TABELI MYSZKĄ
      (setq Button 1)
      (setq Flags 1)
      (setq X 8)
      (setq Y 8)
      (setq old_cmdecho (getvar "cmdecho"))
      (setvar "cmdecho" 0)  
      (setq listaindexow (dcl-ListView-GetSelectedNths geostation/Form4/ListView1))
      (setq rowCount (dcl-ListView-GetSelCount geostation/Form4/ListView1))
      (if (> rowCount 1)
        (progn
          (repeat rowCount
            (setq rowCount (1- rowCount))
            (setq aktindex (nth rowCount listaindexow))
            (setq AKTIMG (dcl-ListView-GetItemImage geostation/Form4/ListView1 aktindex 0))
            (if (= AKTIMG 0)
              (dcl-ListView-SetItemImage geostation/Form4/ListView1 aktindex 0 1)
              (dcl-ListView-SetItemImage geostation/Form4/ListView1 aktindex 0 0)
            )
          )
          (dcl-ListView-SetCurSel geostation/Form4/ListView1 -1)
          (setvar "cmdecho" old_cmdecho)  
        )
      )
      (princ)
    )
    (defun c:geostation/Form4/ListView1#OnDblClicked (Row Column /);------------ ZAZNACZANIE W TABELI MYSZKĄ DBLCLICK
      (setq old_cmdecho (getvar "cmdecho"))
      (setvar "cmdecho" 0)
      (setq aktSel (dcl-ListView-GetCurSel geostation/Form4/ListView1))
      (setq aktImg (dcl-ListView-GetItemImage geostation/Form4/ListView1 aktSel 0))
      (if (= aktImg 0)
        (dcl-ListView-SetItemImage geostation/Form4/ListView1 aktSel 0 1)
        (dcl-ListView-SetItemImage geostation/Form4/ListView1 aktSel 0 0)
      ) 
      (setvar "cmdecho" old_cmdecho)  
      (princ)
    )
    (defun c:geostation/Form4/ListView1#OnKeyUp (Character RepeatCount Flags /) ;-------- ZAZNACZANIE SPACJA/USUWANIE DELETE
      (if (= Character " ") 
        (progn
          (setq selItem (dcl-ListView-GetSelectedNths geostation/Form4/ListView1))
          (if (or (= selItem nil) (= selItem -1))
            (princ)
            (progn
              (setq AKTIMG (dcl-ListView-GetItemImage geostation/Form4/ListView1 (car selItem) 0))
              (if (= AKTIMG 0)
                (dcl-ListView-SetItemImage geostation/Form4/ListView1 (car selItem) 0 1)
                (dcl-ListView-SetItemImage geostation/Form4/ListView1 (car selItem) 0 0) 
              )  
            )
          ) 
        )      
      )
      (if (= Character ".") 
        (progn
          (setq rowCount (dcl-ListView-GetCount geostation/Form4/ListView1))
          (repeat rowCount
            (setq rowCount (1- rowCount))
            (setq rowDane (dcl-ListView-GetRowItems geostation/Form4/ListView1 rowCount))
            (setq aktIMG (dcl-ListView-GetItemImage geostation/Form4/ListView1 rowCount 0))
            (if (= aktIMG 1)
                (dcl-ListView-DeleteItem geostation/Form4/ListView1 rowCount)
            )
          )
        )    
      )
      (princ)
    )    
    (defun c:geostation/Form4/GraphicButton1#OnClicked () ;------------- GRAPTHICBUTTON WYBIERZ PLIK
      (setq old_cmdecho (getvar "cmdecho")) ; Zapisz aktualny stan cmdecho
      (setvar "cmdecho" 0) ; Wyłącz wyświetlanie poleceń
      (setvar "FILEDIA" 1) ; Włącz okno dialogowe dla plików
      (dcl-Form-Show geostation/Form2) ; Pokaż Form2
      (DEFAULTONTROLKI)
      (if (not (getenv "lastSC"))
        (setenv "lastSC" (getvar 'dwgprefix))
        (princ)
      )
      (setq SCIEZKAIMPORT (getfiled "Wybierz plik" (getenv "lastSC") "txt" 0)) ; Wybór pliku 
      (setenv  "lastSC" SCIEZKAIMPORT) 
      (setvar "cmdecho" old_cmdecho) ; Przywróć pierwotny stan cmdecho
      (AKTUALNYSTANLISTYIMPORTU)
      (if SCIEZKAIMPORT
        (progn
          (setq file (open SCIEZKAIMPORT "r")) ; Otwórz wybrany plik do odczytu
          (if file
            (progn
              (setq content "")
              (while (setq line (read-line file))
              (setq content (strcat content line "\r\n"))
              )
              (close file) 
              (dcl-Control-SetText geostation/Form2/TextBox2 content)
              (setq content "")
            )
            (dcl-Form-Close geostation/Form2)
          )
        )
        (dcl-Form-Close geostation/Form2)
      )
      (princ)
    )
    (defun c:geostation/Form4/GraphicButton5#OnClicked (/) ;--------- GRAPHICBUTTON FTP
      (verifyAutoLogin)
    )
    (defun c:geostation/Form4/TextButton2#OnClicked () ;------------- BUTTON IMPORTUJ PUNKTY
      (setq old_cmdecho (getvar "cmdecho"))
      (setvar "cmdecho" 0)
      (setq minX nil
            minY nil
            maxX nil
            maxY nil)
      (if (not (tblsearch "style" "IMPORT"))
        (progn
          (entmakex
            (list
              '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
              '(100 . "AcDbSymbolTableRecord")
              '(100 . "AcDbTextStyleTableRecord")
              (cons 2 "IMPORT")             ; Nazwa stylu
              (cons 3 "simplex.shx")              ; Nazwa czcionki
              (cons 40 0)                ; Wysokość tekstu
              (cons 41 0.62)                   ; Skala szerokości (domyślnie 1.0)
              (cons 50 0.261799)               ; Kąt pochylenia tekstu
              (cons 70 0)
            )
          )
        )
        (princ)
      )
      (setvar "cmdecho" old_cmdecho)
      (setq rowCount (dcl-ListView-GetCount geostation/Form4/ListView1))
      (setq rowCountMax rowCount)
      (setq rozmiarTeksturzedna (* (atof (dcl-Control-GetText geostation/Form4/TextBox1)) 1.2))
      (StartLoading (strcat "Importowanie punktów..."))
      (repeat rowCount     
        (setq rowCount (1- rowCount))
        (setq postep (strcat (rtos (* (/ (- rowCountMax rowCount) (float rowCountMax)) 100) 2 0) "%"))
        (ChangeLoading "Importowanie punktów... " postep 0 0)
        (setq rowDane (dcl-ListView-GetRowItems geostation/Form4/ListView1 rowCount))
        (setq aktIMG (dcl-ListView-GetItemImage geostation/Form4/ListView1 rowCount 0))
        (if (= aktIMG 1)
          (progn
            (setq NAZWA (nth 1 rowDane)
                  WSPOLRZEDNA_X (nth 3 rowDane)
                  WSPOLRZEDNA_Y (nth 2 rowDane)
                  WSPOLRZEDNA_YT (- (atof WSPOLRZEDNA_Y) rozmiarTeksturzedna)
                  WSPOLRZEDNA_YTT (- (atof WSPOLRZEDNA_Y) (* rozmiarTeksturzedna 2))
                  WSPOLRZEDNA_Z (nth 4 rowDane)
                  WSPOLRZEDNA_ZT    (cond
                                      ((= (dcl-ComboBox-GetCurSel geostation/Form4/ComboBox1) 0)
                                        (zaokraglaj0 WSPOLRZEDNA_Z)
                                      )   
                                      ((= (dcl-ComboBox-GetCurSel geostation/Form4/ComboBox1) 1)
                                        (zaokraglaj1 WSPOLRZEDNA_Z)
                                      )  
                                      ((= (dcl-ComboBox-GetCurSel geostation/Form4/ComboBox1) 2)
                                        (zaokraglaj2 WSPOLRZEDNA_Z)
                                      )  
                                      ((= (dcl-ComboBox-GetCurSel geostation/Form4/ComboBox1) 3)
                                        (zaokraglaj3 WSPOLRZEDNA_Z)
                                      )                                    
                                    )
                  WSKAZ_PUNKT_BEZ_H  (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) 0)
                  WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z))
                  WSKAZ_PUNKTT (list (atof WSPOLRZEDNA_X) WSPOLRZEDNA_YT (atof WSPOLRZEDNA_Z))
                  WSKAZ_PUNKTTT (list (atof WSPOLRZEDNA_X) WSPOLRZEDNA_YTT (atof WSPOLRZEDNA_Z))
                  KOD (nth 5 rowDane)
            )
            (wybor-warstwy-import) 
            (setq minX (if (or (null minX) (< (atof WSPOLRZEDNA_X) minX)) (atof WSPOLRZEDNA_X) minX))
            (setq maxX (if (or (null maxX) (> (atof WSPOLRZEDNA_X) maxX)) (atof WSPOLRZEDNA_X) maxX))
            (setq minY (if (or (null minY) (< (atof WSPOLRZEDNA_Y) minY)) (atof WSPOLRZEDNA_Y) minY))
            (setq maxY (if (or (null maxY) (> (atof WSPOLRZEDNA_Y) maxY)) (atof WSPOLRZEDNA_Y) maxY))
          )
        )
      )
      (CloseLoading)
      (if (and minX minY maxX maxY)
        (progn
          (setq acadApp (vlax-get-acad-object))
          (setq acadDoc (vla-get-ActiveDocument acadApp))
          (vla-ZoomWindow acadApp
                          (vlax-3D-point minX minY 0)   ; dolny lewy róg
                          (vlax-3D-point maxX maxY 0)   ; górny prawy róg
          )
        )
      )
      (setvar "cmdecho" old_cmdecho)
      (princ)
    )
    (defun AKTUALNYSTANLISTYIMPORTU () ;----------- AKTUALNY STAN LISTY IMPORTU
      (setq closeList '())
      (setq closeCount (dcl-ListView-GetCount geostation/Form4/ListView1))
      (repeat closeCount
        (setq closeCount (1- closeCount))
        (setq closeIMG (dcl-ListView-GetItemImage geostation/Form4/ListView1 closeCount 0))
        (setq closeDane (cdr (dcl-ListView-GetRowItems geostation/Form4/ListView1 closeCount)))
        (setq closeDane (cons closeIMG closeDane))
        (setq closeDane (cons "" closeDane))
        (setq closeList (cons closeDane closeList))
        (setq closeDane '())
      )
      (princ)
    )
    (defun c:geostation/Form4#OnClose (UpperLeftX UpperLeftY /) ;----------- ZAPIS STANU PO ZAMKNIECIU
      (AKTUALNYSTANLISTYIMPORTU)
    )
    (defun c:geostation/Form4/GraphicButton2#OnClicked (/) ;---------- GRAPHICBUTTON ODZNACZ/ZAZNACZ WSZYSTKO
      (setq rowCount (dcl-ListView-GetCount geostation/Form4/ListView1))
      (setq 1stRow (dcl-ListView-GetItemImage geostation/Form4/ListView1 0 0))
      (if (= 1stRow 0)
        (progn
          (repeat rowCount
            (setq rowCount (1- rowCount))
            (dcl-ListView-SetItemImage geostation/Form4/ListView1 rowCount 0 1)        
          )
        )
        (progn
          (repeat rowCount
            (setq rowCount (1- rowCount))
            (dcl-ListView-SetItemImage geostation/Form4/ListView1 rowCount 0 0)
          )
        )
      )
      (princ)
    )
    (defun c:geostation/Form4/GraphicButton4#OnClicked (/) ;------------ GRAPTHICBUTTON WYCZYSC WSZYSTKO
      (dcl-ListView-Clear geostation/Form4/ListView1)
    )
    (defun c:geostation/Form4/GraphicButton3#OnClicked () ;------------- GRAPTHICBUTTON USUN ZAZNACZONE PUNKTY
      (setq rowCount (dcl-ListView-GetCount geostation/Form4/ListView1))
      (repeat rowCount
        (setq rowCount (1- rowCount))
        (setq rowDane (dcl-ListView-GetRowItems geostation/Form4/ListView1 rowCount))
        (setq aktIMG (dcl-ListView-GetItemImage geostation/Form4/ListView1 rowCount 0))
        (if (= aktIMG 1)
            (dcl-ListView-DeleteItem geostation/Form4/ListView1 rowCount)
        )
      )
      (princ)
    )
    (defun c:geostation/Form4/GraphicButton6#OnClicked (/) ;--------------- GRAPTHICBUTTON WSTAW SYMBOL
      (dcl-Form-Show geostation/Form5)
      ;---------- BAZA EGIB
      (dcl-ListView-AddItem geostation/Form5/ListView1 0 "Brak")
      (dcl-ListView-AddItem geostation/Form5/ListView1 1 "PKR")
      (dcl-ListView-AddItem geostation/Form5/ListView1 2 "Kropka")
      ;---------- BAZA BDOT
      (dcl-ListView-AddItem geostation/Form5/ListView2 0 "Drzewo liściaste")
      (dcl-ListView-AddItem geostation/Form5/ListView2 1 "Drzewo iglaste")
      (dcl-ListView-AddItem geostation/Form5/ListView2 2 "Inna budowla")
      (dcl-ListView-AddItem geostation/Form5/ListView2 3 "Inny obiekt zagospodarowania terenu")
      (dcl-ListView-AddItem geostation/Form5/ListView2 4 "Pikieta sztuczna")
      (dcl-ListView-AddItem geostation/Form5/ListView2 5 "Pikieta natualna")
      ;---------- BAZA GESUT
      (dcl-ListView-AddItem geostation/Form5/ListView3 0 "Kartka ściekowa")
      (dcl-ListView-AddItem geostation/Form5/ListView3 1 "Właz")
      (dcl-ListView-AddItem geostation/Form5/ListView3 2 "Latarnia")
      (dcl-ListView-AddItem geostation/Form5/ListView3 3 "Stacja ładowania")
      (dcl-ListView-AddItem geostation/Form5/ListView3 4 "Hydrant")
      (dcl-ListView-AddItem geostation/Form5/ListView3 5 "Wodociągowe urządzenie techniczne lub zasuwa")
      (dcl-ListView-AddItem geostation/Form5/ListView3 6 "Elektroenergetyczne urządzenie techniczne lub zasuwa")
      (dcl-ListView-AddItem geostation/Form5/ListView3 7 "Gazowe urządzenie techniczne lub zasuwa")
      (dcl-ListView-AddItem geostation/Form5/ListView3 8 "Telekomunikacyjne urządzenie techniczne lub zasuwa")
      (dcl-ListView-AddItem geostation/Form5/ListView3 9 "Ciepłownicze urządzenie techniczne lub zasuwa")
      (dcl-ListView-AddItem geostation/Form5/ListView3 10 "Urządzenie techniczne sieci specjalnej")
      (dcl-ListView-AddItem geostation/Form5/ListView3 11 "Urządzenie techniczne sieci niezidentyfikowanej")
      (dcl-ListView-AddItem geostation/Form5/ListView3 12 "Szafa elektroenergetyczna")
      (dcl-ListView-AddItem geostation/Form5/ListView3 13 "Szafa gazowa")
      (dcl-ListView-AddItem geostation/Form5/ListView3 14 "Szafa telekomunikacyjna")
      (dcl-ListView-AddItem geostation/Form5/ListView3 15 "Słupek telekomunikacyjny")
      (princ)
    )
    (defun c:geostation/Form5/TabStrip1#OnChanged (ItemIndex /) ;-------- IDENTYFIKACJA BAZY
      (setq aktTab (* (+ ItemIndex 1) 1000))
      (princ)
    )
    (defun c:geostation/Form5/TextButton1#OnClicked (/) ;-------------- BUTTON OK WSTAW SYMBOL
      (if (= aktTab 1000)
        (setq indexTab (+ (dcl-ListView-GetCurSel geostation/Form5/ListView1) 1000))
        (if (= aktTab 2000)
          (setq indexTab (+ (dcl-ListView-GetCurSel geostation/Form5/ListView2) 2000))
          (if (= aktTab 3000)
            (setq indexTab (+ (dcl-ListView-GetCurSel geostation/Form5/ListView3) 3000))
          )
        )
      )
      (cond
        ((= indexTab 1000) ;----- brak
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 132)
        ) 
        ((= indexTab 1001) ;------ PKR
        (dcl-Control-SetPicture geostation/Form4/GraphicButton6 133)
        ) 
        ((= indexTab 1002) ;--------- KROPKA
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 134) 
        ) 
        ((= indexTab 2000) ;---------- DRZEWO LISCIASTE
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 135) 
        ) 
        ((= indexTab 2001) ;------- DRZEWO IGLASTE
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 136) 
        )
        ((= indexTab 2002) ;------- INNA BUDOWLA
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 137) 
        )
        ((= indexTab 2003) ;-------- INNY_OBIEKT_ZAGOSPODAROWANIA_TERENU
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 138) 
        )
        ((= indexTab 2004) ;-------- PIKIETA SZTUCZNA
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 139) 
        )
        ((= indexTab 2005) ;-------- PIKIETA NATUALNA
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 140) 
        )
        ((= indexTab 3000) ;-------- KRATKA_SCIEKOWA
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 141) 
        )
        ((= indexTab 3001) ;-------- WLAZ
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 142) 
        )
        ((= indexTab 3002) ;-------- LATARNIA
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 143) 
        )
        ((= indexTab 3003) ;-------- STACJA_LADOWANIA
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 144) 
        )
        ((= indexTab 3004) ;-------- HYDRANT
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 145) 
        )
        ((= indexTab 3005) ;-------- WODOCIAGOWE_URZ_TECH
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 146) 
        )
        ((= indexTab 3006) ;-------- ELEKTROENERGETYCZNE_URZ_TECH
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 147) 
        )
        ((= indexTab 3007) ;--------  GAZOWE_URZ_TECH
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 148) 
        )
        ((= indexTab 3008) ;-------- TELEKOMUNIKACYJNE_URZ_TECH
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 149) 
        )
        ((= indexTab 3009) ;-------- CIEPLOWNICZE_URZ_TECH
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 150) 
        )
        ((= indexTab 3010) ;-------- URZ_TECH_SIECI_SPECJ
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 151) 
        )
        ((= indexTab 3011) ;--------  URZ_TECH_SIECI_NIEZIDENT
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 152) 
        )
        ((= indexTab 3012) ;-------- SZAFA_ELEKTROENERGETYCZNA
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 153) 
        )
        ((= indexTab 3013) ;-------- SZAFA_GAZOWA
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 154) 
        )
        ((= indexTab 3014) ;-------- SZAFA_TELEKOMUNIKACYJNA
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 155) 
        )
        ((= indexTab 3015) ;-------- SLUPEK_TELEKOMUNIKACYJNY
          (dcl-Control-SetPicture geostation/Form4/GraphicButton6 156) 
        )    
      )
      (dcl-Form-Close geostation/Form5)
      (princ)
    )
    (defun c:geostation/Form5/TextButton2#OnClicked (/) ;----------------- OTWORZ DZIENNIK USTAW
      (startapp "cmd.exe" "/c start \"\" /b \"C:/NXYZ/bin/Dziennik.pdf\"")
      (princ)
    )
    (defun OPIS_SYMBOLU ()
      (setq formXY (dcl-GetMouseCoords))
      (setq formX (nth 0 formXY))
      (setq formY (nth 1 formXY))
      (if (= (dcl-Form-IsActive geostation/Form10) T)
        (dcl-Form-Close geostation/Form10)
      )
      (dcl-Form-Show geostation/Form10)
      (dcl-Control-SetPos geostation/Form10 formX formY 600 186)
      (if (= aktTab 1000)
        (setq indexTab (+ (dcl-ListView-GetCurSel geostation/Form5/ListView1) 1000))
        (if (= aktTab 2000)
          (setq indexTab (+ (dcl-ListView-GetCurSel geostation/Form5/ListView2) 2000))
          (if (= aktTab 3000)
            (setq indexTab (+ (dcl-ListView-GetCurSel geostation/Form5/ListView3) 3000))
          )
        )
      )
      (cond
        ((= indexTab 2000) ;---------- DRZEWO LISCIASTE
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 166) 
        ) 
        ((= indexTab 2001) ;------- DRZEWO IGLASTE
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 167) 
        )
        ((= indexTab 2002) ;------- INNA BUDOWLA
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 168) 
        )
        ((= indexTab 2003) ;-------- INNY_OBIEKT_ZAGOSPODAROWANIA_TERENU
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 169) 
        )
        ((= indexTab 2004) ;-------- PIKIETA SZTUCZNA
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 170) 
        )
        ((= indexTab 2005) ;-------- PIKIETA NATUALNA
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 171) 
        )
        ((= indexTab 3000) ;-------- KRATKA_SCIEKOWA
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 172) 
        )
        ((= indexTab 3001) ;-------- WLAZ
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 173) 
        )
        ((= indexTab 3002) ;-------- LATARNIA
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 174) 
        )
        ((= indexTab 3003) ;-------- STACJA_LADOWANIA
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 175) 
        )
        ((= indexTab 3004) ;-------- HYDRANT
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 176) 
        )
        ((= indexTab 3005) ;-------- WODOCIAGOWE_URZ_TECH
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 177) 
        )
        ((= indexTab 3006) ;-------- ELEKTROENERGETYCZNE_URZ_TECH
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 178) 
        )
        ((= indexTab 3007) ;--------  GAZOWE_URZ_TECH
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 179) 
        )
        ((= indexTab 3008) ;-------- TELEKOMUNIKACYJNE_URZ_TECH
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 180) 
        )
        ((= indexTab 3009) ;-------- CIEPLOWNICZE_URZ_TECH
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 181) 
        )
        ((= indexTab 3010) ;-------- URZ_TECH_SIECI_SPECJ
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 182) 
        )
        ((= indexTab 3011) ;--------  URZ_TECH_SIECI_NIEZIDENT
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 183) 
        )
        ((= indexTab 3012) ;-------- SZAFA_ELEKTROENERGETYCZNA
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 184) 
        )
        ((= indexTab 3013) ;-------- SZAFA_GAZOWA
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 185) 
        )
        ((= indexTab 3014) ;-------- SZAFA_TELEKOMUNIKACYJNA
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 186) 
        )
        ((= indexTab 3015) ;-------- SLUPEK_TELEKOMUNIKACYJNY
          (dcl-Control-SetPicture geostation/Form10/PictureBox1 187) 
        )    
      )
      (princ)
    )
    (defun c:geostation/Form5/ListView2#OnRightClick (Row Column /)
      (OPIS_SYMBOLU)
    )
    (defun c:geostation/Form5/ListView3#OnRightClick (Row Column /)
      (OPIS_SYMBOLU)
    )
    (defun c:geostation/Form10/PictureBox1#OnClicked (/)
      (dcl-Form-Close geostation/Form10)
      (princ)
    )
    (defun c:geostation/Form4/ListView1#OnColumnClick (Column /)    
      (if (not toggle)
        (progn
          (StartLoading (strcat "Sortowanie punktów..."))
          (dcl-ListView-SortTextItems geostation/Form4/ListView1 Column T)
          (dcl-ListView-SortNumericItems geostation/Form4/ListView1 Column T)
          (setq toggle T)
          (CloseLoading)
        )
        (progn
          (StartLoading (strcat "Sortowanie punktów..."))
          (dcl-ListView-SortTextItems geostation/Form4/ListView1 Column NIL)
          (dcl-ListView-SortNumericItems geostation/Form4/ListView1 Column NIL)
          (setq toggle nil)
          (CloseLoading)
        )
      )
    )
    (defun c:geostation/Form14/TreeControl1#OnSelChanged (Label Key /)
      (vl-load-com) 
      (setq url (strcat "http://teren.rozacki.pl/api/synchfiles.php?folder=" Label))
      (setq logText "")
      (setq listFiles '())
      (dcl-ListView-Clear geostation/Form14/ListView1)
      (setq result
        (vl-catch-all-apply
          '(lambda ()
            (setq http (vlax-create-object "MSXML2.XMLHTTP.6.0"))
            (vlax-invoke-method http 'open "POST" url :vlax-false)
            (vlax-invoke-method http 'setRequestHeader "Authorization" "Bearer tajny_token")
            (vlax-invoke-method http 'setRequestHeader "Content-Type" "text/plain")
            (vlax-invoke-method http 'send logText)            
            (setq replay (vlax-get-property http 'responseText))
            (setq files (my-split-string replay ";"))
            (foreach file files
              (dcl-ListView-AddItem geostation/Form14/ListView1 0 file)
            )
          )
        )
      )
      (if (vl-catch-all-error-p result)
        (prompt "\nBłąd połączenia z serwerem1.")
      )
      (princ)
    )
    (defun synchdir ()
      (vl-load-com)
      (setq url "http://teren.rozacki.pl/api/synchdir.php")
      (setq logText "")
      (setq listDir '())
      (dcl-Tree-Clear geostation/Form14/TreeControl1)
      (setq result
        (vl-catch-all-apply
          '(lambda ()
            (setq http (vlax-create-object "MSXML2.XMLHTTP.6.0"))
            (vlax-invoke-method http 'open "POST" url :vlax-false)
            (vlax-invoke-method http 'setRequestHeader "Authorization" "Bearer tajny_token" )
            (vlax-invoke-method http 'setRequestHeader "Content-Type" "text/plain")
            (vlax-invoke-method http 'send logText)
            (setq replay (vlax-get-property http 'responseText))
            (setq lines (my-split-string replay ";"))
            (foreach line lines
              (setq listDir (reverse listDir))
              (setq part (LIST line line 0))
              (setq listDir (cons part listDir))
              (setq listDir (reverse listDir))
            )
              (dcl-Tree-AddParent geostation/Form14/TreeControl1 listDir)
          )
        )
      )
      (if (vl-catch-all-error-p result)
        (prompt "\nBłąd połączenia z serwerem2.")
      )
      (princ)
    )
    (defun chooseFileFTP ( filedirFTP fileNameFTP /)
      (setq old_cmdecho (getvar "cmdecho")) ; Zapisz aktualny stan cmdecho
      (setvar "cmdecho" 0) ; Wyłącz wyświetlanie poleceń
      (setvar "FILEDIA" 1) ; Włącz okno dialogowe dla plików
      (setq dataFTP nil)
      (dcl-Form-Show geostation/Form15)
      (DEFAULTONTROLKIFTP)      
      (setvar "cmdecho" old_cmdecho) ; Przywróć pierwotny stan cmdecho
      (AKTUALNYSTANLISTYIMPORTU)
      (StartLoading (strcat "Pobieranie danych..."))
      (setq dataFTP (dataFileFTP filedirFTP fileNameFTP)) ; Wybór pliku
      (if dataFTP
        (progn
          (setq lines (my-split-string dataFTP "\n"))
          (setq contentFTP "")
          (foreach line lines
            (setq contentFTP (strcat contentFTP line "\r\n"))
          )
          (dcl-Control-SetText geostation/Form15/TextBox2 contentFTP)
        )
        (princ)
      )
      (CloseLoading)
      (princ)
    )
    (defun c:geostation/Form14/ListView1#OnDblClicked (Row Column /)  
      (setq filedirFTP (dcl-Tree-GetItemLabel geostation/Form14/TreeControl1 (dcl-Tree-GetSelectedItem geostation/Form14/TreeControl1)))
      (setq fileNameFTP (car (dcl-ListView-GetSelectedItems geostation/Form14/ListView1)))      
      (if (dcl-Form-IsActive geostation/Form4)
        (chooseFileFTP filedirFTP fileNameFTP)
        (progn      
          (dcl-Form-Show geostation/Form4)
          (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "NXYZIMPORT ")
          (while (not (dcl-Form-IsActive geostation/Form4))
          )
          (princ)
          (chooseFileFTP filedirFTP fileNameFTP)
        )
      )
    )
    (defun dataFileFTP ( filedirFTP fileNameFTP /)
      (vl-load-com)
      (setq url (strcat "http://teren.rozacki.pl/api/filecontent.php?file=" filedirFTP "/" fileNameFTP))
      (setq logText "")
      (setq listFiles '())
      (setq replay nil)
      (setq result
        (vl-catch-all-apply
          '(lambda ()
            (setq http (vlax-create-object "MSXML2.XMLHTTP.6.0"))
            (vlax-invoke-method http 'open "POST" url :vlax-false)
            (vlax-invoke-method http 'setRequestHeader "Authorization" "Bearer tajny_token")
            (vlax-invoke-method http 'setRequestHeader "Content-Type" "text/plain")
            (vlax-invoke-method http 'send logText)            
            (setq replay (vlax-get-property http 'responseText))
          )
        )
      )
      (if (vl-catch-all-error-p result)
        (prompt "\nBłąd połączenia z serwerem3.")
      )
      (princ)
      replay
    )
    (defun c:geostation/Form14/TextButton1#OnClicked (/)
      (dcl-MessageBox "To Do: code must be added to event handler\r\nc:geostation/Form14/TextButton1#OnClicked" "To do")
    )
    (defun c:geostation/Form14/TextButton2#OnClicked (/)
      (dcl-Form-Close geostation/Form14)
    )


  ;                    ---------------------------- RZECZY POBOCZNE ----------------------------------------------------  
    ;------------------------------ LOCAL IMPORT -------------------------------
      (defun DEFAULTONTROLKI () ;------------- DEFAULT KONTROLEK
        (dcl-Control-SetValue geostation/Form2/SpinButton1 1)
        (dcl-Control-SetText geostation/Form2/TextBox3 (dcl-Control-GetValue geostation/Form2/SpinButton1))
        (dcl-Control-SetValue geostation/Form2/SpinButton2 3)
        (dcl-Control-SetText geostation/Form2/TextBox4 (dcl-Control-GetValue geostation/Form2/SpinButton2))
        (dcl-Control-SetValue geostation/Form2/SpinButton3 2)
        (dcl-Control-SetText geostation/Form2/TextBox5 (dcl-Control-GetValue geostation/Form2/SpinButton3))
        (dcl-Control-SetValue geostation/Form2/SpinButton4 4)
        (dcl-Control-SetText geostation/Form2/TextBox6 (dcl-Control-GetValue geostation/Form2/SpinButton4))
        (dcl-Control-SetValue geostation/Form2/SpinButton5 5)
        (dcl-Control-SetText geostation/Form2/TextBox7 (dcl-Control-GetValue geostation/Form2/SpinButton5))
      )
      (defun c:geostation/Form2/SpinButton1#OnChanged (Value Delta /) ;------------ MANIPULACJA NAZWA
        (dcl-Control-SetText geostation/Form2/TextBox3 Value)
      )
      (defun c:geostation/Form2/SpinButton2#OnChanged (Value Delta /) ;------------ MANIPULACJA Y
        (dcl-Control-SetText geostation/Form2/TextBox4 Value)
      )
      (defun c:geostation/Form2/SpinButton3#OnChanged (Value Delta /) ;------------ MANIPULACJA X
        (dcl-Control-SetText geostation/Form2/TextBox5 Value)
      )
      (defun c:geostation/Form2/SpinButton4#OnChanged (Value Delta /) ;------------ MANIPULACJA Z
        (dcl-Control-SetText geostation/Form2/TextBox6 Value)
      )
      (defun c:geostation/Form2/SpinButton5#OnChanged (Value Delta /) ;------------ MANIPULACJA KOD
        (dcl-Control-SetText geostation/Form2/TextBox7 Value)
      )    
      (defun c:geostation/Form2/TextButton3#OnClicked () ;------------- BUTTON OK
        (setq file (open SCIEZKAIMPORT "r"))
        (setq 
          nthNAZWA2 (dcl-Control-GetText geostation/Form2/TextBox3)
          nthY (dcl-Control-GetText geostation/Form2/TextBox4)
          nthX (dcl-Control-GetText geostation/Form2/TextBox5)
          nthZ (dcl-Control-GetText geostation/Form2/TextBox6)
          nthKOD (dcl-Control-GetText geostation/Form2/TextBox7)
        )
        (if (= (dcl-Control-GetValue geostation/Form2/OptionButton1) 1)
          (setq SEPARATOR " ")
          (if (= (dcl-Control-GetValue geostation/Form2/OptionButton2) 1)
            (setq SEPARATOR "	")
            (if (= (dcl-Control-GetValue geostation/Form2/OptionButton3) 1)
              (setq SEPARATOR (dcl-Control-GetText geostation/Form2/TextBox1))
              (princ)
            )
          )
        )
        (if file
          (progn          
            (setq filename (vl-filename-base SCIEZKAIMPORT))
            (setq fullfilename (strcat filename (vl-filename-extension SCIEZKAIMPORT)))
            (setq line-count 0)  ; Zmienna do przechowywania liczby wierszy
            (while (not (eq (read-line file) nil))  ; Przeczytaj linie pliku
              (setq line-count (1+ line-count))
            )
            (close file)
            (StartLoading (strcat "Rozpoczynam importowanie punktów do tableli..."))
            (setq file (open SCIEZKAIMPORT "r"))
            (setq current-line-count 0)
            (while (setq line (read-line file))
              (setq parts (my-split-string line SEPARATOR))
              (if parts
                (progn
                  (setq NAZWA2 (nth (1- (atoi nthNAZWA2)) parts))
                  (setq Y (nth (1- (atoi nthY)) parts))
                  (setq X (nth (1- (atoi nthX)) parts))
                  (setq Z (nth (1- (atoi nthZ)) parts))
                  (setq KOD (nth (1- (atoi nthKOD)) parts))
                  (if (and (contains-letters X) (contains-letters Y))
                    (princ)  
                    (dcl-ListView-AddItem geostation/Form4/ListView1 0 "" NAZWA2 X Y Z KOD)                  
                  )
                  (setq current-line-count (1+ current-line-count))
                  (setq postep (strcat (rtos (* (/ current-line-count (float line-count)) 100) 2 0) "%"))
                  (ChangeLoading "Importowanie punktów... " postep current-line-count line-count)
                )
                (princ)
              )
            )
            (CloseLoading)
            (dcl-Control-SetText geostation/Form4/TextBox2 (strcat "!" filename))
          )
          (princ)
        )
        (dcl-Control-SetText geostation/Form2/TextBox2 "")
        (dcl-Form-Close geostation/Form2)
      )
      (defun c:geostation/Form2/TextButton4#OnClicked () ;------------- BUTTON ANULUJ
        (dcl-Form-Close geostation/Form2)
      )
    ;------------------------------ FTP IMPORT ---------------------------------   
      (defun DEFAULTONTROLKIFTP () ;------------- DEFAULT KONTROLEK
        (dcl-Control-SetValue geostation/Form15/SpinButton1 1)
        (dcl-Control-SetText geostation/Form15/TextBox3 (dcl-Control-GetValue geostation/Form15/SpinButton1))
        (dcl-Control-SetValue geostation/Form15/SpinButton2 3)
        (dcl-Control-SetText geostation/Form15/TextBox4 (dcl-Control-GetValue geostation/Form15/SpinButton2))
        (dcl-Control-SetValue geostation/Form15/SpinButton3 2)
        (dcl-Control-SetText geostation/Form15/TextBox5 (dcl-Control-GetValue geostation/Form15/SpinButton3))
        (dcl-Control-SetValue geostation/Form15/SpinButton4 4)
        (dcl-Control-SetText geostation/Form15/TextBox6 (dcl-Control-GetValue geostation/Form15/SpinButton4))
        (dcl-Control-SetValue geostation/Form15/SpinButton5 5)
        (dcl-Control-SetText geostation/Form15/TextBox7 (dcl-Control-GetValue geostation/Form15/SpinButton5))
      )
      (defun c:geostation/Form15/SpinButton1#OnChanged (Value Delta /) ;------------ MANIPULACJA NAZWA
        (dcl-Control-SetText geostation/Form15/TextBox3 Value)
      )
      (defun c:geostation/Form15/SpinButton2#OnChanged (Value Delta /) ;------------ MANIPULACJA Y
        (dcl-Control-SetText geostation/Form15/TextBox4 Value)
      )
      (defun c:geostation/Form15/SpinButton3#OnChanged (Value Delta /) ;------------ MANIPULACJA X
        (dcl-Control-SetText geostation/Form15/TextBox5 Value)
      )
      (defun c:geostation/Form15/SpinButton4#OnChanged (Value Delta /) ;------------ MANIPULACJA Z
        (dcl-Control-SetText geostation/Form15/TextBox6 Value)
      )
      (defun c:geostation/Form15/SpinButton5#OnChanged (Value Delta /) ;------------ MANIPULACJA KOD
        (dcl-Control-SetText geostation/Form15/TextBox7 Value)
      )    
      (defun c:geostation/Form15/TextButton3#OnClicked () ;------------- BUTTON OK        
        (StartLoading (strcat "Importowanie danych..."))
        (setq 
          nthNAZWA2 (dcl-Control-GetText geostation/Form15/TextBox3)
          nthY (dcl-Control-GetText geostation/Form15/TextBox4)
          nthX (dcl-Control-GetText geostation/Form15/TextBox5)
          nthZ (dcl-Control-GetText geostation/Form15/TextBox6)
          nthKOD (dcl-Control-GetText geostation/Form15/TextBox7)
        )
        (if (= (dcl-Control-GetValue geostation/Form15/OptionButton1) 1)
          (setq SEPARATOR " ")
          (if (= (dcl-Control-GetValue geostation/Form15/OptionButton2) 1)
            (setq SEPARATOR "	")
            (if (= (dcl-Control-GetValue geostation/Form15/OptionButton3) 1)
              (setq SEPARATOR (dcl-Control-GetText geostation/Form15/TextBox1))
              (princ)
            )
          )
        )
        (if dataFTP
          (progn
            (setq lines (my-split-string dataFTP "\n"))
            (foreach line lines
              (setq parts (my-split-string line SEPARATOR))
              (if parts
                (progn
                  (setq NAZWA2 (nth (1- (atoi nthNAZWA2)) parts))
                  (setq Y (nth (1- (atoi nthY)) parts))
                  (setq X (nth (1- (atoi nthX)) parts))
                  (setq Z (nth (1- (atoi nthZ)) parts))
                  (setq KOD (nth (1- (atoi nthKOD)) parts))
                  (if (and (contains-letters X) (contains-letters Y))
                    (princ)  
                    (dcl-ListView-AddItem geostation/Form4/ListView1 0 "" NAZWA2 X Y Z KOD)                  
                  )
                )
                (princ)
              )
            )
          )
          (princ "noFTP")
        )
        (dcl-Control-SetText geostation/Form15/TextBox2 "")
        (dcl-Form-Close geostation/Form15)
        (if (dcl-Form-IsActive geostation/Form14)
          (dcl-Form-Close geostation/Form14)
          (princ)
        )
        (CloseLoading)
      )
      (defun c:geostation/Form15/TextButton4#OnClicked () ;------------- BUTTON ANULUJ
        (dcl-Control-SetText geostation/Form15/TextBox2 "")
        (dcl-Form-Close geostation/Form15)
      )
      (defun loginFTP (login password /)
        (vl-load-com)
        (setq url "http://teren.rozacki.pl/api/login_lisp.php")       
        (setq logText (strcat "login=" login "&password=" password))
        (setq replay nil)
        (setq result
          (vl-catch-all-apply
            '(lambda ()
              (setq http (vlax-create-object "MSXML2.XMLHTTP.6.0"))
              (vlax-invoke-method http 'open "POST" url :vlax-false)
              (vlax-invoke-method http 'setRequestHeader "Authorization" "Bearer tajny_token")
              (vlax-invoke-method http 'setRequestHeader "Content-Type" "application/x-www-form-urlencoded")
              (vlax-invoke-method http 'send logText)
              (setq replay (vlax-get-property http 'responseText))
            )
          )
        )
        (if (vl-catch-all-error-p result)
          (prompt "\nBłąd połączenia z serwerem4.")
        )
        replay
      )
      (defun verifyAutoLogin ()
        (if (= (getenv "autologin") "1")
          (progn
            (setq replayAutoLogin (loginFTP (getenv "login") (getenv "password")))
            (if (= replayAutoLogin "success")
              (dialogFTP)
              (progn
                (alert "Błędne dane lub problem z połączeniem")
                (setenv "autologin" "0")
              )              
            )
          )
          (dcl-Form-Show geostation/Form16)    
        )      
      )
      (defun dialogFTP ()
        (if (dcl-Form-IsActive geostation/Form16)
          (dcl-Form-Close geostation/Form16)
          (princ)
        )
        (dcl-Form-Show geostation/Form14)
        (if (dcl-Form-IsActive geostation/Form14)
          (synchdir)
          (princ)
        )
      )
      (defun okButtonFTP ()
        (if (= (dcl-Control-GetValue geostation/Form16/CheckBox1) 1)
          (progn
            (setenv "autologin" "1")
            (setenv "login" (dcl-Control-GetText geostation/Form16/TextBox1))
            (setenv "password" (dcl-Control-GetText geostation/Form16/TextBox2))
          )
          (princ)
        )
        (setq replayLogin (loginFTP (dcl-Control-GetText geostation/Form16/TextBox1) (dcl-Control-GetText geostation/Form16/TextBox2)))
        (if (= replayLogin "success")
          (dialogFTP)
          (progn
            (alert "Błędne dane lub problem z połączeniem")
            (setenv "autologin" "0")
          )        
        )
      )
      (defun c:geostation/Form16/TextButton1#OnClicked (/)
        (okButtonFTP)
      )    
      (defun c:geostation/Form16#OnOK (/)
        (okButtonFTP)
      )
      ; (defun c:offauto ()
      ;   (setenv "autologin" "0")
      ; )
    ;------------------------------ RYSOWANIE ----------------------------------
      (defun SCIANA_OP ()
        (vl-load-com)
        (setq points '())
        (setq temp-lines '())
        (setq doc (vla-get-activedocument (vlax-get-acad-object)))
        (setq ms (vla-get-modelspace doc))

        (defun draw-temp-line (pt1 pt2)
          (if (and pt1 pt2)
            (progn
              (setq temp-lines (cons (vla-addline ms
                                                    (vlax-3d-point (car pt1) (cadr pt1) 0)
                                                    (vlax-3d-point (car pt2) (cadr pt2) 0))
                                    temp-lines))
            )
          )
        )

        (while (setq pt (getpoint "\nWskaź punkt (naciśnij Enter lub PPM, aby zakończyć): "))
          (if (null (car points))
            (setq start-pt pt)
          (draw-temp-line start-pt pt)
          )
          (setq points (cons pt points))
          (setq start-pt pt)  ; Zaktualizuj ostatni punkt jako punkt początkowy dla następnej linii
        )

        (mapcar 'vla-delete temp-lines)

        (if (>= (length points) 2)
          (progn
            (setq old_cmdecho (getvar "cmdecho"))
            (setvar "cmdecho" 0)
            (if (null (tblsearch "LTYPE" "SCIANA_OPOROWA"))
              (progn
                (vla-loadshapefile doc "C:/NXYZ/bin/shape_MO.shx")
                (loadLinetype doc "SCIANA_OPOROWA" "C:/NXYZ/bin/linetype.lin")
              )
              (princ)
            )
            (setq polyline (entmakex (append (list (cons 0 "LWPOLYLINE")
                                (cons 100 "AcDbEntity")
                                (cons 100 "AcDbPolyline")
                                (cons 90 (length points))
                                (cons 70 0))
                          (mapcar (function (lambda (p) (cons 10 p))) points)))
            )
            (setvar "cmdecho" old_cmdecho)
          )
          (princ "\nNie zaznaczone wystarczającej liczby punktów do narysowania polilinii.")
        )
        (if (and polyline (= "LWPOLYLINE" (cdr (assoc 0 (entget polyline)))))
          (progn
            (setq offset-distance 0.25) ; Odległość offsetu na zewnątrz
            (setq offset-distance2 -0.25) ; Odległość offsetu do wewnątrz
            (setq offset-polyline (vla-Offset (vlax-ename->vla-object polyline) offset-distance))
            (setq OPent (entlast))
            (setq offset-polyline2 (vla-Offset (vlax-ename->vla-object polyline) offset-distance2))
            (setq OP2ent (entlast))
            (vla-put-linetype (vlax-ename->vla-object polyline) "SCIANA_OPOROWA") 
            (vla-put-linetype (vlax-ename->vla-object OPent) "Continuous")      
            (vla-put-linetype (vlax-ename->vla-object OP2ent) "Continuous")
            (if (and OPent OP2ent)
              (progn
                (setq op1 (vla-get-coordinates (vlax-ename->vla-object OPent)))
                (setq op2 (vla-get-coordinates (vlax-ename->vla-object OP2ent)))
                (setq revp1 (reverse (vlax-safearray->list (vlax-variant-value op1))))
                (setq revp2 (reverse (vlax-safearray->list (vlax-variant-value op2))))
                (entmake
                  (list
                    (cons 0 "LINE")
                    (cons 100 "AcDbEntity")
                    (cons 100 "AcDbLine")
                    (cons 10 (list (cadr revp1)(car revp1)))
                    (cons 11 (list (cadr revp2) (car revp2)))
                    (cons 6 "Continuous")
                  )
                )
                (setq p1 (vlax-safearray->list (vlax-variant-value op1)))
                (setq p2 (vlax-safearray->list (vlax-variant-value op2)))
                (entmake
                  (list
                    (cons 0 "LINE")
                    (cons 100 "AcDbEntity")
                    (cons 100 "AcDbLine")
                    (cons 10 (list (car p1)(cadr p1)))
                    (cons 11 (list (car p2) (cadr p2)))
                    (cons 6 "Continuous")
                  )
                )
              )
              (princ "\nNie udało się utworzyć offsetowanych polilinii.")
            )
          )
          (princ "\nUtworzona polilinia nie jest LWPOLYLINE.")
        )
        (princ) ; Kończymy komendę
      )
      (defun OGRODZENIE ();--------------- RYSOWANIE OGRODZENIE
        (vl-load-com)
        (setq doc (vla-get-activedocument (vlax-get-acad-object)))
        (setq ms (vla-get-modelspace doc))
        (setq points '())
        (setq temp-lines '())
        (defun draw-temp-line (pt1 pt2)
          (if (and pt1 pt2)
            (progn
              (setq temp-lines (cons (entmakex
                                      (list
                                        (cons 0 "LINE")
                                        (cons 10 pt1)
                                        (cons 11 pt2)
                                      )
                                    )
                                    temp-lines))
            )
          )
        )
        (while (setq pt (getpoint "\nWskaź punkt (naciśnij Enter lub PPM, aby zakończyć): "))
          (if (null (car points))
            (setq start-pt pt)
          (draw-temp-line start-pt pt)
          )
          (setq points (cons pt points))
          (setq start-pt pt)  ; Zaktualizuj ostatni punkt jako punkt początkowy dla następnej linii
        )
        (mapcar 'entdel temp-lines)
        (setq old_cmdecho (getvar "cmdecho"))
        (setvar "cmdecho" 0)
        (if (not (tblsearch "style" "ogrodzenie"))
          (progn
            (entmakex
              (list
                '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbTextStyleTableRecord")
                (cons 2 "ogrodzenie")             ; Nazwa stylu
                (cons 3 "Arial")              ; Nazwa czcionki
                (cons 40 0)                ; Wysokość tekstu
                (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                (cons 50 0)               ; Kąt pochylenia tekstu
                (cons 70 0)
              )
            )
          )
          (princ)
        )
        (if (null (tblsearch "LTYPE" "OGRODZENIE"))
          (loadLinetype doc "OGRODZENIE" "C:/NXYZ/bin/linetype.lin")
          (princ)
        )
        (setq polyline (entmakex (append (list (cons 0 "LWPOLYLINE")
                                (cons 100 "AcDbEntity")
                                (cons 100 "AcDbPolyline")
                                (cons 90 (length points))
                                (cons 70 0))
                          (mapcar (function (lambda (p) (cons 10 p))) points)))
        )
        (setvar "cmdecho" old_cmdecho)
        (vla-put-linetype (vlax-ename->vla-object polyline) "OGRODZENIE") 
        (vla-put-Lineweight (vlax-ename->vla-object polyline) acLnWt035)  
        (princ)
      )
      (defun MPZP ();--------------- RYSOWANIE MPZP
        (vl-load-com)
        (setq doc (vla-get-activedocument (vlax-get-acad-object)))
        (setq ms (vla-get-modelspace doc))
        (setq points '())
        (setq temp-lines '())
        (defun draw-temp-line (pt1 pt2)
          (if (and pt1 pt2)
            (progn
              (setq temp-lines (cons (entmakex
                                      (list
                                        (cons 0 "LINE")
                                        (cons 10 pt1)
                                        (cons 11 pt2)
                                      )
                                    )
                                    temp-lines))
            )
          )
        )
        (while (setq pt (getpoint "\nWskaź punkt (naciśnij Enter lub PPM, aby zakończyć): "))
          (if (null (car points))
            (setq start-pt pt)
          (draw-temp-line start-pt pt)
          )
          (setq points (cons pt points))
          (setq start-pt pt)  ; Zaktualizuj ostatni punkt jako punkt początkowy dla następnej linii
        )
        (mapcar 'entdel temp-lines)
        (setq old_cmdecho (getvar "cmdecho"))
        (setvar "cmdecho" 0)
        (if (null (tblsearch "LTYPE" "MPZP2"))
          (progn
            (vla-loadshapefile doc "C:/NXYZ/bin/shape_MO.shx")
            (loadLinetype doc "MPZP2" "C:/NXYZ/bin/linetype.lin")
          )
          (princ)
        )
        (setq polyline (entmakex (append (list (cons 0 "LWPOLYLINE")
                                (cons 100 "AcDbEntity")
                                (cons 100 "AcDbPolyline")
                                (cons 90 (length points))
                                (cons 70 0))
                          (mapcar (function (lambda (p) (cons 10 p))) points)))
        )
        (setvar "cmdecho" old_cmdecho)
        (vla-put-linetype (vlax-ename->vla-object polyline) "MPZP2") 
        (princ)
      )

                  ;--------- OGÓlNE
      (defun STRZALKAPOLNOCY (/) ;NNN ------------------ STRZALKA POLNOCY
        (setq blockName "STRZALKAPOLNOCY")  
        (if (not (tblsearch "block" blockName))
          (progn
            (setq doc (vla-get-activedocument (vlax-get-acad-object)))
            (setq blk (vla-add (vla-get-blocks doc) (vlax-3d-point 0 0 0) blockName))
            (setq circleObj1 (vla-addcircle blk (vlax-3d-point 0 0 0) 1.8134))
            (setq circleObj2 (vla-addcircle blk (vlax-3d-point 0 0 0) 2.1637))
            (setq arcObj1 (vla-addarc blk (vlax-3d-point 0 0 0) 2.8336 (* 192 (/ pi 180.0)) (* 348 (/ pi 180.0))))
            (setq arcObj2 (vla-addarc blk (vlax-3d-point 0 0 0) 2.8336 (* 12 (/ pi 180.0)) (* 168 (/ pi 180.0))))
            (setq lineObj1 (vla-addline blk (vlax-3d-point -2.768 0.6063 0) (vlax-3d-point -3.8433 0.6057 0)))
            (setq lineObj2 (vla-addline blk (vlax-3d-point -2.3333 -0.0003 0) (vlax-3d-point -4.6507 0.0009 0)))
            (setq lineObj3 (vla-addline blk (vlax-3d-point -2.7683 -0.6049 0) (vlax-3d-point -3.8428 -0.605 0)))
            (setq lineObj4 (vla-addline blk (vlax-3d-point -2.1637 -0.0003 0) (vlax-3d-point -1.8134 -0.0002 0)))
            (setq lineObj5 (vla-addline blk (vlax-3d-point 1.8134 0.0002 0) (vlax-3d-point 2.1637 0.0003 0)))
            (setq lineObj6 (vla-addline blk (vlax-3d-point 2.7682 0.6057 0) (vlax-3d-point 3.8259 0.6061 0)))
            (setq lineObj7 (vla-addline blk (vlax-3d-point 2.3333 0.0003 0) (vlax-3d-point 4.6325 0.0005 0)))
            (setq lineObj8 (vla-addline blk (vlax-3d-point 2.7683 -0.6051 0) (vlax-3d-point 3.8251 -0.6055 0)))
            (setq lineObj9 (vla-addline blk (vlax-3d-point -0.6138 0.219 0) (vlax-3d-point -0.6139 0.7839 0)))
            (setq points1 (vlax-make-safearray vlax-vbDouble '(0 . 14)))
            (vlax-safearray-fill points1 '(-0.6139 0.7839 0
                                        0.6456 -0.1519 0
                                        0.6456 -0.7168 0
                                        -0.6138 0.219 0
                                        -0.6139 0.7839 0
                                      )
            )
            (setq polylineObj1 (vla-AddPolyline blk points1))
            (vla-put-closed polylineObj1 :vlax-true)
            (setq hatchObj1 (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))
            (vla-appendOuterLoop hatchObj1 (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list polylineObj1)))
            (setq lineObj10 (vla-addline blk (vlax-3d-point 0.6456 -0.1519 0) (vlax-3d-point 0.6456 0.7839 0)))
            (setq lineObj11 (vla-addline blk (vlax-3d-point 0.6456 0.7839 0) (vlax-3d-point 0.7928 0.7839 0)))
            (setq lineObj12 (vla-addline blk (vlax-3d-point -0.6139 -0.7167 0) (vlax-3d-point -0.6138 0.219 0)))
            (setq lineObj13 (vla-addline blk (vlax-3d-point -0.7611 -0.7167 0) (vlax-3d-point -0.6139 -0.7167 0)))
            (setq lineObj14 (vla-addline blk (vlax-3d-point -0.0072 4.0359 0) (vlax-3d-point -0.0076 2.8255 0)))
            (setq lineObj15 (vla-addline blk (vlax-3d-point 0.5982 4.4404 0) (vlax-3d-point -0.0072 4.0359 0)))
            (setq lineObj16 (vla-addline blk (vlax-3d-point -0.0064 10.8977 0) (vlax-3d-point 0.5982 4.4404 0)))
            (setq lineObj17 (vla-addline blk (vlax-3d-point -0.009 -2.8252 0) (vlax-3d-point -0.8158 -13.3189 0)))
            (setq lineObj18 (vla-addline blk (vlax-3d-point -0.8158 -13.3189 0) (vlax-3d-point -0.0088 -17.3552 0)))
            (setq points2 (vlax-make-safearray vlax-vbDouble '(0 . 14)))
            (vlax-safearray-fill points2 '(-0.0072 4.0359 0
                                        -0.6128 4.4404 0
                                        -0.0064 10.8977 0
                                        -0.0072 4.0359 0
                                        -0.6128 4.4404 0
                                      )
            )
            (setq polylineObj2 (vla-AddPolyline blk points2))
            (vla-put-closed polylineObj2 :vlax-true)
            (setq hatchObj2 (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))
            (vla-appendOuterLoop hatchObj2 (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list polylineObj2)))
            (setq points3 (vlax-make-safearray vlax-vbDouble '(0 . 14)))
            (vlax-safearray-fill points3 '(-0.009 -2.8252 0
                                        0.7981 -13.3189 0
                                        -0.0088 -17.3552 0
                                        -0.009 -2.8252 0
                                        0.7981 -13.3189 0
                                      )
            )
            (setq polylineObj3 (vla-AddPolyline blk points3))
            (vla-put-closed polylineObj3 :vlax-true)
            (setq hatchObj3 (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))
            (vla-appendOuterLoop hatchObj3 (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list polylineObj3)))
          )
        )
        (princ)
      )
      (defun PKR (/ blockName circleObj lineObj blk)     ;1001--------------- BLOCK PKR
        (setq blockName "PKR")
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.05))       ;; Dodawanie okręgu do bloku
          )
        )
        (princ)
      )
      (defun KROPKA (/ blockName circleObj lineObj blk)    ;1002-------------- BLOCK KROPKA
        (setq blockName "KROPKA")
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.05))       ;; Dodawanie okręgu do bloku
            (setq hatchObj (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))       ;; Dodawanie hatch do okręgu
            (vla-appendOuterLoop hatchObj (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list circleObj)))      ;; Dodanie okręgu jako granicy hatcha
          )
        )
        (princ)
      )

                  ;--------- BDOT500

      (defun DRZEWO_LISCIASTE (/ blockName circleObj lineObj blk)   ;2000------------- BLOCK DRZEWO_LISCIASTE
        (setq blockName "DRZEWO_LISCIASTE")
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.05))       ;; Dodawanie okręgu do bloku
            (setq arcObj1 (vla-addarc blk (vlax-3d-point 0 0.375 0) 0.375 (* 30 (/ pi 180.0)) (* 150 (/ pi 180.0))))
            (setq arcObj2 (vla-addarc blk (vlax-3d-point 0.357 0.116 0) 0.375 (* 318 (/ pi 180.0)) (* 78 (/ pi 180.0))))
            (setq arcObj3 (vla-addarc blk (vlax-3d-point 0.22 -0.303 0) 0.375 (* 246 (/ pi 180.0)) (* 6 (/ pi 180.0))))
            (setq arcObj4 (vla-addarc blk (vlax-3d-point -0.22 -0.303 0) 0.375 (* 174 (/ pi 180.0)) (* 294 (/ pi 180.0))))
            (setq arcObj5 (vla-addarc blk (vlax-3d-point -0.357 0.116 0) 0.375 (* 102 (/ pi 180.0)) (* 222 (/ pi 180.0))))
          )
        )
        (princ)
      )
      (defun DRZEWO_IGLASTE (/ blockName circleObj lineObj blk)   ;2001------------- BLOCK DRZEWO_IGLASTE
        (setq blockName "DRZEWO_IGLASTE")
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.05))       ;; Dodawanie okręgu do bloku
            (setq lineObj1 (vla-addline blk (vlax-3d-point -0.55 0.7 0) (vlax-3d-point 0 0.3 0)))
            (setq lineObj2 (vla-addline blk (vlax-3d-point 0 0.3 0) (vlax-3d-point 0.55 0.7 0)))
            (setq lineObj3 (vla-addline blk (vlax-3d-point 0.55 0.7 0) (vlax-3d-point 0.3 0.05 0)))
            (setq lineObj4 (vla-addline blk (vlax-3d-point 0.3 0.05 0) (vlax-3d-point 0.75 -0.3 0)))
            (setq lineObj5 (vla-addline blk (vlax-3d-point 0.75 -0.3 0) (vlax-3d-point 0.2 -0.3 0)))
            (setq lineObj6 (vla-addline blk (vlax-3d-point 0.2 -0.3 0) (vlax-3d-point 0 -0.9 0)))
            (setq lineObj7 (vla-addline blk (vlax-3d-point 0 -0.9 0) (vlax-3d-point -0.2 -0.3 0)))
            (setq lineObj8 (vla-addline blk (vlax-3d-point -0.2 -0.3 0) (vlax-3d-point -0.8 -0.3 0)))
            (setq lineObj9 (vla-addline blk (vlax-3d-point -0.8 -0.3 0) (vlax-3d-point -0.3 0.05 0)))
            (setq lineObj10 (vla-addline blk (vlax-3d-point -0.3 0.05 0) (vlax-3d-point -0.55 0.7 0)))
          )
        )
        (princ)
      )
      (defun INNA_BUDOWLA (/ blockName circleObj lineObj blk)    ;2002-------------- BLOCK INNA BUDOWLA
        (setq blockName "INNA_BUDOWLA")
        (if (not (tblsearch "style" "IMPORTBLOCKS"))
          (progn
            (entmakex
              (list
                '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbTextStyleTableRecord")
                (cons 2 "IMPORTBLOCKS")             ; Nazwa stylu
                (cons 3 "simplex.shx")              ; Nazwa czcionki
                (cons 40 0)                ; Wysokość tekstu
                (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                (cons 50 0)               ; Kąt pochylenia tekstu
                (cons 70 0)
              )
            )
          )
          (princ)
        )
        (setvar "TEXTSTYLE" "IMPORTBLOCKS")
        (setvar "TEXTSIZE" 0.87)
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.1875))       ;; Dodawanie okręgu do bloku
            (setq hatchObj (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))       ;; Dodawanie hatch do okręgu
            (vla-appendOuterLoop hatchObj (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list circleObj)))      ;; Dodanie okręgu jako granicy hatcha
            (setq textObj (vla-addmtext blk (vlax-3d-point 0.313 0.056 0) 0.87 "ib"))
          )
        )
        (princ)
      )
      (defun INNY_OBIEKT_ZAGOSPODAROWANIA_TERENU (/ blockName circleObj lineObj blk)    ;2003-------------- BLOCK INNY_OBIEKT_ZAGOSPODAROWANIA_TERENU
        (setq blockName "INNY_OBIEKT_ZAGOSPODAROWANIA_TERENU")
        (if (not (tblsearch "style" "IMPORTBLOCKS"))
          (progn
            (entmakex
              (list
                '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbTextStyleTableRecord")
                (cons 2 "IMPORTBLOCKS")             ; Nazwa stylu
                (cons 3 "simplex.shx")              ; Nazwa czcionki
                (cons 40 0)                ; Wysokość tekstu
                (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                (cons 50 0)               ; Kąt pochylenia tekstu
                (cons 70 0)
              )
            )
          )
          (princ)
        )
        (setvar "TEXTSTYLE" "IMPORTBLOCKS")
        (setvar "TEXTSIZE" 0.87)
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.1875))       ;; Dodawanie okręgu do bloku
            (setq hatchObj (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))       ;; Dodawanie hatch do okręgu
            (vla-appendOuterLoop hatchObj (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list circleObj)))      ;; Dodanie okręgu jako granicy hatcha
            (setq textObj (vla-addmtext blk (vlax-3d-point 0.313 0.056 0) 0.87 "it"))
          )
        )
        (princ)
      )
      (defun PIKIETA_SZTUCZNA (/ blockName circleObj lineObj blk)    ;2004-------------- BLOCK PIKIETA_SZTUCZNA
        (setq blockName "PIKIETA_SZTUCZNA")
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.05))       ;; Dodawanie okręgu do bloku
            (setq hatchObj (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))       ;; Dodawanie hatch do okręgu
            (vla-appendOuterLoop hatchObj (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list circleObj)))      ;; Dodanie okręgu jako granicy hatcha
          )
        )
        (princ)
      )
      (defun PIKIETA_NATURALNA (/ blockName circleObj lineObj blk)    ;2005-------------- BLOCK PIKIETA_NATURALNA
        (setq blockName "PIKIETA_NATURALNA")
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.05))       ;; Dodawanie okręgu do bloku
            (setq hatchObj (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))       ;; Dodawanie hatch do okręgu
            (vla-appendOuterLoop hatchObj (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list circleObj)))      ;; Dodanie okręgu jako granicy hatcha
          )
        )
        (princ)
      )
                  ;--------- GESUT
      (defun KRATKA_SCIEKOWA (/ blockName circleObj lineObj blk)   ;3000------------- BLOCK KRATKA_SCIEKOWA
        (setq blockName "KRATKA_SCIEKOWA")
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq lineObj1 (vla-addline blk (vlax-3d-point -0.525 0.25 0) (vlax-3d-point 0.525 0.25 0)))
            (setq lineObj2 (vla-addline blk (vlax-3d-point 0.525 0.25 0) (vlax-3d-point 0.525 -0.25 0)))
            (setq lineObj3 (vla-addline blk (vlax-3d-point 0.525 -0.25 0) (vlax-3d-point -0.525 -0.25 0)))
            (setq lineObj4 (vla-addline blk (vlax-3d-point -0.525 -0.25 0) (vlax-3d-point -0.525 0.25 0)))
            (setq lineObj5 (vla-addline blk (vlax-3d-point -0.175 0.25 0) (vlax-3d-point -0.175 -0.25 0)))
            (setq lineObj6 (vla-addline blk (vlax-3d-point 0.175 -0.25 0) (vlax-3d-point 0.175 0.25 0)))
          )
        )
        (princ)
      )
      (defun WLAZ (/ blockName circleObj lineObj blk)   ;3001------------- BLOCK WLAZ
        (setq blockName "WLAZ")
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.3))       ;; Dodawanie okręgu do bloku
          )
        )
        (princ)
      )
      (defun LATARNIA (/ blockName circleObj lineObj blk)   ;3002------------- BLOCK LATARNIA
        (setq blockName "LATARNIA")
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.3))       ;; Dodawanie okręgu do bloku
            (setq lineObj1 (vla-addline blk (vlax-3d-point -0.5303 0.5303 0) (vlax-3d-point -0.8839 0.8839 0)))
            (setq lineObj2 (vla-addline blk (vlax-3d-point 0.8839 0.8839 0) (vlax-3d-point 0.5303 0.5303 0)))
            (setq lineObj3 (vla-addline blk (vlax-3d-point 0.8839 -0.8839 0) (vlax-3d-point 0.5303 -0.5303 0)))
            (setq lineObj4 (vla-addline blk (vlax-3d-point -0.8839 -0.8839 0) (vlax-3d-point -0.5303 -0.5303 0)))
          )
        )
        (princ)
      )
      (defun STACJA_LADOWANIA (/ blockName circleObj lineObj blk)    ;3003-------------- BLOCK STACJA_LADOWANIA
        (setq blockName "STACJA_LADOWANIA")
        (if (not (tblsearch "style" "IMPORTBLOCKS"))
          (progn
            (entmakex
              (list
                '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbTextStyleTableRecord")
                (cons 2 "IMPORTBLOCKS")             ; Nazwa stylu
                (cons 3 "simplex.shx")              ; Nazwa czcionki
                (cons 40 0)                ; Wysokość tekstu
                (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                (cons 50 0)               ; Kąt pochylenia tekstu
                (cons 70 0)
              )
            )
          )
          (princ)
        )
        (setvar "TEXTSTYLE" "IMPORTBLOCKS")
        (setvar "TEXTSIZE" 0.87)
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.6))       ;; Dodawanie okręgu do bloku
            (setq textObj (vla-addmtext blk (vlax-3d-point -0.266 0.415 0) 0.87 "E"))
          )
        )
        (princ)
      )
      (defun HYDRANT (/ blockName circleObj lineObj blk)   ;3004------------- BLOCK HYDRANT
        (setq blockName "HYDRANT")
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.5))       ;; Dodawanie okręgu do bloku
            (setq lineObj1 (vla-addline blk (vlax-3d-point 0 0.5 0) (vlax-3d-point 0 1 0)))
            (setq lineObj2 (vla-addline blk (vlax-3d-point 0 1 0) (vlax-3d-point -0.354 0.646 0)))
            (setq lineObj3 (vla-addline blk (vlax-3d-point 0 1 0) (vlax-3d-point 0.354 0.646 0)))
          )
        )
        (princ)
      )
      (defun WODOCIAGOWE_URZ_TECH (/ blockName circleObj lineObj blk)    ;3005-------------- BLOCK WODOCIAGOWE_URZ_TECH
        (setq blockName "WODOCIAGOWE_URZ_TECH")
        (if (not (tblsearch "style" "IMPORTBLOCKS"))
          (progn
            (entmakex
              (list
                '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbTextStyleTableRecord")
                (cons 2 "IMPORTBLOCKS")             ; Nazwa stylu
                (cons 3 "simplex.shx")              ; Nazwa czcionki
                (cons 40 0)                ; Wysokość tekstu
                (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                (cons 50 0)               ; Kąt pochylenia tekstu
                (cons 70 0)
              )
            )
          )
          (princ)
        )
        (setvar "TEXTSTYLE" "IMPORTBLOCKS")
        (setvar "TEXTSIZE" 0.87)
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.1875))       ;; Dodawanie okręgu do bloku
            (setq hatchObj (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))       ;; Dodawanie hatch do okręgu
            (vla-appendOuterLoop hatchObj (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list circleObj)))      ;; Dodanie okręgu jako granicy hatcha
            (setq textObj (vla-addmtext blk (vlax-3d-point 0.313 0.056 0) 0.87 "w"))
          )
        )
        (princ)
      )
      (defun ELEKTROENERGETYCZNE_URZ_TECH (/ blockName circleObj lineObj blk)    ;3006-------------- BLOCK ELEKTROENERGETYCZNE_URZ_TECH
        (setq blockName "ELEKTROENERGETYCZNE_URZ_TECH")
        (if (not (tblsearch "style" "IMPORTBLOCKS"))
          (progn
            (entmakex
              (list
                '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbTextStyleTableRecord")
                (cons 2 "IMPORTBLOCKS")             ; Nazwa stylu
                (cons 3 "simplex.shx")              ; Nazwa czcionki
                (cons 40 0)                ; Wysokość tekstu
                (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                (cons 50 0)               ; Kąt pochylenia tekstu
                (cons 70 0)
              )
            )
          )
          (princ)
        )
        (setvar "TEXTSTYLE" "IMPORTBLOCKS")
        (setvar "TEXTSIZE" 0.87)
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.1875))       ;; Dodawanie okręgu do bloku
            (setq hatchObj (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))       ;; Dodawanie hatch do okręgu
            (vla-appendOuterLoop hatchObj (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list circleObj)))      ;; Dodanie okręgu jako granicy hatcha
            (setq textObj (vla-addmtext blk (vlax-3d-point 0.313 0.056 0) 0.87 "e"))
          )
        )
        (princ)
      )
      (defun GAZOWE_URZ_TECH (/ blockName circleObj lineObj blk)    ;3007-------------- BLOCK GAZOWE_URZ_TECH
        (setq blockName "GAZOWE_URZ_TECH")
        (if (not (tblsearch "style" "IMPORTBLOCKS"))
          (progn
            (entmakex
              (list
                '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbTextStyleTableRecord")
                (cons 2 "IMPORTBLOCKS")             ; Nazwa stylu
                (cons 3 "simplex.shx")              ; Nazwa czcionki
                (cons 40 0)                ; Wysokość tekstu
                (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                (cons 50 0)               ; Kąt pochylenia tekstu
                (cons 70 0)
              )
            )
          )
          (princ)
        )
        (setvar "TEXTSTYLE" "IMPORTBLOCKS")
        (setvar "TEXTSIZE" 0.87)
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.1875))       ;; Dodawanie okręgu do bloku
            (setq hatchObj (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))       ;; Dodawanie hatch do okręgu
            (vla-appendOuterLoop hatchObj (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list circleObj)))      ;; Dodanie okręgu jako granicy hatcha
            (setq textObj (vla-addmtext blk (vlax-3d-point 0.313 0.056 0) 0.87 "g"))
          )
        )
        (princ)
      )
      (defun TELEKOMUNIKACYJNE_URZ_TECH (/ blockName circleObj lineObj blk)    ;3008-------------- BLOCK TELEKOMUNIKACYJNE_URZ_TECH
        (setq blockName "TELEKOMUNIKACYJNE_URZ_TECH")
        (if (not (tblsearch "style" "IMPORTBLOCKS"))
          (progn
            (entmakex
              (list
                '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbTextStyleTableRecord")
                (cons 2 "IMPORTBLOCKS")             ; Nazwa stylu
                (cons 3 "simplex.shx")              ; Nazwa czcionki
                (cons 40 0)                ; Wysokość tekstu
                (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                (cons 50 0)               ; Kąt pochylenia tekstu
                (cons 70 0)
              )
            )
          )
          (princ)
        )
        (setvar "TEXTSTYLE" "IMPORTBLOCKS")
        (setvar "TEXTSIZE" 0.87)
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.1875))       ;; Dodawanie okręgu do bloku
            (setq hatchObj (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))       ;; Dodawanie hatch do okręgu
            (vla-appendOuterLoop hatchObj (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list circleObj)))      ;; Dodanie okręgu jako granicy hatcha
            (setq textObj (vla-addmtext blk (vlax-3d-point 0.313 0.056 0) 0.87 "t"))
          )
        )
        (princ)
      )
      (defun CIEPLOWNICZE_URZ_TECH (/ blockName circleObj lineObj blk)    ;3009-------------- BLOCK CIEPLOWNICZE_URZ_TECH
        (setq blockName "CIEPLOWNICZE_URZ_TECH")
        (if (not (tblsearch "style" "IMPORTBLOCKS"))
          (progn
            (entmakex
              (list
                '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbTextStyleTableRecord")
                (cons 2 "IMPORTBLOCKS")             ; Nazwa stylu
                (cons 3 "simplex.shx")              ; Nazwa czcionki
                (cons 40 0)                ; Wysokość tekstu
                (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                (cons 50 0)               ; Kąt pochylenia tekstu
                (cons 70 0)
              )
            )
          )
          (princ)
        )
        (setvar "TEXTSTYLE" "IMPORTBLOCKS")
        (setvar "TEXTSIZE" 0.87)
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.1875))       ;; Dodawanie okręgu do bloku
            (setq hatchObj (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))       ;; Dodawanie hatch do okręgu
            (vla-appendOuterLoop hatchObj (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list circleObj)))      ;; Dodanie okręgu jako granicy hatcha
            (setq textObj (vla-addmtext blk (vlax-3d-point 0.313 0.056 0) 0.87 "c"))
          )
        )
        (princ)
      )
      (defun URZ_TECH_SIECI_SPECJ (/ blockName circleObj lineObj blk)    ;3010-------------- BLOCK URZ_TECH_SIECI_SPECJ
        (setq blockName "URZ_TECH_SIECI_SPECJ")
        (if (not (tblsearch "style" "IMPORTBLOCKS"))
          (progn
            (entmakex
              (list
                '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbTextStyleTableRecord")
                (cons 2 "IMPORTBLOCKS")             ; Nazwa stylu
                (cons 3 "simplex.shx")              ; Nazwa czcionki
                (cons 40 0)                ; Wysokość tekstu
                (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                (cons 50 0)               ; Kąt pochylenia tekstu
                (cons 70 0)
              )
            )
          )
          (princ)
        )
        (setvar "TEXTSTYLE" "IMPORTBLOCKS")
        (setvar "TEXTSIZE" 0.87)
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.1875))       ;; Dodawanie okręgu do bloku
            (setq hatchObj (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))       ;; Dodawanie hatch do okręgu
            (vla-appendOuterLoop hatchObj (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list circleObj)))      ;; Dodanie okręgu jako granicy hatcha
            (setq textObj (vla-addmtext blk (vlax-3d-point 0.313 0.056 0) 0.87 "s"))
          )
        )
        (princ)
      )
      (defun URZ_TECH_SIECI_NIEZIDENT (/ blockName circleObj lineObj blk)    ;3011-------------- BLOCK URZ_TECH_SIECI_NIEZIDENT
        (setq blockName "URZ_TECH_SIECI_NIEZIDENT")
        (if (not (tblsearch "style" "IMPORTBLOCKS"))
          (progn
            (entmakex
              (list
                '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbTextStyleTableRecord")
                (cons 2 "IMPORTBLOCKS")             ; Nazwa stylu
                (cons 3 "simplex.shx")              ; Nazwa czcionki
                (cons 40 0)                ; Wysokość tekstu
                (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                (cons 50 0)               ; Kąt pochylenia tekstu
                (cons 70 0)
              )
            )
          )
          (princ)
        )
        (setvar "TEXTSTYLE" "IMPORTBLOCKS")
        (setvar "TEXTSIZE" 0.87)
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.1875))       ;; Dodawanie okręgu do bloku
            (setq hatchObj (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))       ;; Dodawanie hatch do okręgu
            (vla-appendOuterLoop hatchObj (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list circleObj)))      ;; Dodanie okręgu jako granicy hatcha
            (setq textObj (vla-addmtext blk (vlax-3d-point 0.313 0.056 0) 0.87 "x"))
          )
        )
        (princ)
      )
      (defun SZAFA_ELEKTROENERGETYCZNA (/ blockName circleObj lineObj blk)   ;3012------------- BLOCK SZAFA_ELEKTROENERGETYCZNA
        (setq blockName "SZAFA_ELEKTROENERGETYCZNA")
        (if (not (tblsearch "style" "IMPORTBLOCKS"))
          (progn
            (entmakex
              (list
                '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbTextStyleTableRecord")
                (cons 2 "IMPORTBLOCKS")             ; Nazwa stylu
                (cons 3 "simplex.shx")              ; Nazwa czcionki
                (cons 40 0)                ; Wysokość tekstu
                (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                (cons 50 0)               ; Kąt pochylenia tekstu
                (cons 70 0)
              )
            )
          )
          (princ)
        )
        (setvar "TEXTSTYLE" "IMPORTBLOCKS")
        (setvar "TEXTSIZE" 0.87)
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq lineObj1 (vla-addline blk (vlax-3d-point -0.500 0.25 0) (vlax-3d-point 0.500 0.25 0)))
            (setq lineObj2 (vla-addline blk (vlax-3d-point 0.500 0.25 0) (vlax-3d-point 0.500 -0.25 0)))
            (setq lineObj3 (vla-addline blk (vlax-3d-point 0.500 -0.25 0) (vlax-3d-point -0.500 -0.25 0)))
            (setq lineObj4 (vla-addline blk (vlax-3d-point -0.500 -0.25 0) (vlax-3d-point -0.500 0.25 0)))
            (setq textObj (vla-addmtext blk (vlax-3d-point 0.500 -0.25 0) 0.87 "e"))
          )
        )
        (princ)
      )
      (defun SZAFA_GAZOWA (/ blockName circleObj lineObj blk)   ;3013------------- BLOCK SZAFA_GAZOWA
        (setq blockName "SZAFA_GAZOWA")
        (if (not (tblsearch "style" "IMPORTBLOCKS"))
          (progn
            (entmakex
              (list
                '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbTextStyleTableRecord")
                (cons 2 "IMPORTBLOCKS")             ; Nazwa stylu
                (cons 3 "simplex.shx")              ; Nazwa czcionki
                (cons 40 0)                ; Wysokość tekstu
                (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                (cons 50 0)               ; Kąt pochylenia tekstu
                (cons 70 0)
              )
            )
          )
          (princ)
        )
        (setvar "TEXTSTYLE" "IMPORTBLOCKS")
        (setvar "TEXTSIZE" 0.87)
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq lineObj1 (vla-addline blk (vlax-3d-point -0.500 0.25 0) (vlax-3d-point 0.500 0.25 0)))
            (setq lineObj2 (vla-addline blk (vlax-3d-point 0.500 0.25 0) (vlax-3d-point 0.500 -0.25 0)))
            (setq lineObj3 (vla-addline blk (vlax-3d-point 0.500 -0.25 0) (vlax-3d-point -0.500 -0.25 0)))
            (setq lineObj4 (vla-addline blk (vlax-3d-point -0.500 -0.25 0) (vlax-3d-point -0.500 0.25 0)))
            (setq textObj (vla-addmtext blk (vlax-3d-point 0.500 -0.25 0) 0.87 "g"))
          )
        )
        (princ)
      )
      (defun SZAFA_TELEKOMUNIKACYJNA (/ blockName circleObj lineObj blk)   ;3014------------- BLOCK SZAFA_TELEKOMUNIKACYJNA
        (setq blockName "SZAFA_TELEKOMUNIKACYJNA")
        (if (not (tblsearch "style" "IMPORTBLOCKS"))
          (progn
            (entmakex
              (list
                '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbTextStyleTableRecord")
                (cons 2 "IMPORTBLOCKS")             ; Nazwa stylu
                (cons 3 "simplex.shx")              ; Nazwa czcionki
                (cons 40 0)                ; Wysokość tekstu
                (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                (cons 50 0)               ; Kąt pochylenia tekstu
                (cons 70 0)
              )
            )
          )
          (princ)
        )
        (setvar "TEXTSTYLE" "IMPORTBLOCKS")
        (setvar "TEXTSIZE" 0.87)
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq lineObj1 (vla-addline blk (vlax-3d-point -0.500 0.25 0) (vlax-3d-point 0.500 0.25 0)))
            (setq lineObj2 (vla-addline blk (vlax-3d-point 0.500 0.25 0) (vlax-3d-point 0.500 -0.25 0)))
            (setq lineObj3 (vla-addline blk (vlax-3d-point 0.500 -0.25 0) (vlax-3d-point -0.500 -0.25 0)))
            (setq lineObj4 (vla-addline blk (vlax-3d-point -0.500 -0.25 0) (vlax-3d-point -0.500 0.25 0)))
            (setq textObj (vla-addmtext blk (vlax-3d-point 0.500 -0.25 0) 0.87 "t"))
          )
        )
        (princ)
      )
      (defun SLUPEK_TELEKOMUNIKACYJNY (/ blockName circleObj lineObj blk)    ;3015-------------- BLOCK SLUPEK_TELEKOMUNIKACYJNY
        (setq blockName "SLUPEK_TELEKOMUNIKACYJNY")
        (if (not (tblsearch "style" "IMPORTBLOCKS"))
          (progn
            (entmakex
              (list
                '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                '(100 . "AcDbSymbolTableRecord")
                '(100 . "AcDbTextStyleTableRecord")
                (cons 2 "IMPORTBLOCKS")             ; Nazwa stylu
                (cons 3 "simplex.shx")              ; Nazwa czcionki
                (cons 40 0)                ; Wysokość tekstu
                (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                (cons 50 0)               ; Kąt pochylenia tekstu
                (cons 70 0)
              )
            )
          )
          (princ)
        )
        (setvar "TEXTSTYLE" "IMPORTBLOCKS")
        (setvar "TEXTSIZE" 0.87)
        (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
          (progn
            (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))      ;; Tworzenie nowego bloku
            (setq circleObj (vla-addcircle blk (vlax-3d-point 0 0 0) 0.25))       ;; Dodawanie okręgu do bloku
            (setq hatchObj (vla-addHatch blk acHatchPatternTypePreDefined "SOLID" :vlax-false))       ;; Dodawanie hatch do okręgu
            (vla-appendOuterLoop hatchObj (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list circleObj)))      ;; Dodanie okręgu jako granicy hatcha
            (setq textObj (vla-addmtext blk (vlax-3d-point 0.313 0.056 0) 0.87 "ts"))
          )
        )
        (princ)
      )

;======================================-------------------------------------------- EXPORT -------------------------------------------------------------===================
  ;                    ---------------------------- DZIAŁANIE PROGRAMU ----------------------------------------------------  
    (defun C:NXYZEXPORT (/ SC old_cmdecho PRZEDR NR PRZYR NAZWA TH MPP PD)
      (setq old_cmdecho (getvar "cmdecho"))
      (setvar "cmdecho" 0)
      (command "_OPENDCL")
      (dcl-Project-Load "c:/NXYZ/geostation")
      (dcl-Form-Show geostation/Form1)
      (dcl-Control-SetCaption geostation/Form1/Label5 "made by Paweł Różacki")
      (vl-load-all "c:/NXYZ/nxyz.lsp")
      (vl-load-com)
      (CheckUpdate "Form1")
      (princ)
      (setq acad (vlax-get-acad-object))
      (setq doc (vla-get-activedocument acad))
      (setq mspace (vla-get-modelspace doc))
      (setq documentname (vla-get-name doc))
      (dcl-ImageComboBox-SetCurSel geostation/Form1/ImageCombo1 0)
      (dcl-Control-SetEnabled geostation/Form1/TextButton4 NIL)
      (dcl-Control-SetText geostation/Form1/TextBox9 "")
      (dcl-Control-SetEnabled geostation/Form1/CheckBox2 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox5 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox6 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox7 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox8 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox1 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox3 NIL)
      (dcl-Control-SetCaption geostation/Form1/TextButton1 "Wskaż punkty")
      (dcl-Control-SetValue geostation/Form1/OptionButton3 1)
      (dcl-Control-SetValue geostation/Form1/OptionButton4 0)
      (dcl-Control-SetValue geostation/Form1/OptionButton1 0)
      (blokuj-licznik)
      (if (= (dcl-ListView-GetColumnCount geostation/Form1/ListView1) 0)
        (dcl-ListView-AddColumns geostation/Form1/ListView1
          (LIST (LIST "NAZWA" 1 60)
                (LIST "X" 1 85)
                (LIST "Y" 1 85)
                (LIST "H" 1 70)
          ) 
        ) 
        (princ)
      ) 
      (dcl-ListView-Clear geostation/Form1/ListView1)
      (dcl-Control-SetVisible geostation/Form1/TextButton2 NIL)
      (setq SCIEZKAPATH (dcl-Control-GetText geostation/Form1/TextBox6))
      (setq file (open SCIEZKAPATH "r"))
      (if file
        (progn  
          (dcl-Control-SetVisible geostation/Form1/TextButton2 T)        
          (while (setq line (read-line file))
            (setq parts (my-split-string line " "))
            (if parts
              (progn
                (setq NAZWA2 (nth 0 parts))
                (setq X (nth 1 parts))
                (setq Y (nth 2 parts))
                (setq Z (nth 3 parts))
                (if (and (contains-letters X) (contains-letters Y))
                  (princ)                
                  (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA2 X Y Z)
                )
              )
              (princ)
            )
          )
          (close file)
        )
        (princ)
      )
      (setvar "cmdecho" old_cmdecho)
      (princ)
    )
    (defun wybor-warstwy (/)
      (setq layer-name (dcl-Control-GetText geostation/Form1/TextBox7))
      (setq fakecolor (dcl-ImageComboBox-GetCurSel geostation/Form1/ImageCombo1))
      (setq layer-color (1+ fakecolor))
      (setq acad (vlax-get-acad-object))
      (setq doc (vla-get-activedocument acad))
      (setq curLayer (vla-get-ActiveLayer doc))
      (setq layers (vla-get-layers doc))
      (vla-Add layers layer-name)
      (vla-put-ActiveLayer doc (vla-item layers layer-name))
      (vla-put-Color (vla-item layers layer-name) layer-color)
      (setq currentColor (getvar "CECOLOR"))
      (setvar "CECOLOR" "ByLayer")
      (setq thepoint (vla-AddPoint mspace (vlax-3d-point WSKAZ_PUNKT)))
      (setvar "TEXTSTYLE" "Standard") ; Zmień styl tekstu na "Standard"
      (setvar "TEXTSIZE" (atof TH)) ; Ustaw wysokość tekstu na 5.0 jednostek w stylu "Standard"
      (setq theMText (vla-AddMText mspace (vlax-3d-point WSKAZ_PUNKT) (atof TH) NAZWA))
      (vla-put-ActiveLayer doc curLayer)
      (setvar "CECOLOR" currentColor)
      (princ)
    )
    (defun AUTOPLINE ()
      (if ss
        (progn
          (setq PRZEDR (dcl-Control-GetText geostation/Form1/TextBox1))
          (setq NR (dcl-Control-GetText geostation/Form1/TextBox2))
          (setq PRZYR (dcl-Control-GetText geostation/Form1/TextBox3))
          (setq KOD (dcl-Control-GetText geostation/Form1/TextBox8))
          (setq MPP (dcl-ComboBox-GetCurSel geostation/Form1/ComboBox1))
          (setq TH (dcl-Control-GetText geostation/Form1/TextBox4))
          (setq NAZWA (strcat PRZEDR NR PRZYR))
          (setq count (sslength ss))
          (setq countMax count)
          (setq fileContents (list))
          (setq i 0)
          ;; Iteracja po wszystkich wybranych obiektach w zbiorze wyboru
          (repeat count        
            (setq ent (ssname ss (setq count (1- count)))) ;; Pobieramy nazwę encji
            (setq entData (entget ent)) ;; Pobieramy dane DXF encji za pomocą entget
            (setq postep (strcat (rtos (* (/ (- countMax count) (float countMax)) 100) 2 0) "%"))
            (ChangeLoading "Pobieranie polilinii... " postep (- countMax count) countMax)
            (cond
              ((= (cdr (assoc 0 entData)) "POLYLINE")
                      (if (= (cdr (assoc 0 entData)) "POLYLINE")
                        (progn
                          (setq RP_list (vlax-safearray->list (vlax-variant-value (vlax-get-Property (vlax-ename->vla-object ent) 'Coordinates)))
                                    RP_count -1
                          )
                          (setq len (length RP_list))
                          (setq numb (/ len 3)) ; even and odd check required
                          (setq m 0)
                          (repeat numb
                            (setq xyz (list (nth m RP_list)(nth (+ m 1) RP_list)(nth (+ m 2) RP_list) ))
                            (setq co-ordsxy (cons xyz co-ordsxy))
                            (setq m (+ m 3))
                          )
                          

                          ;; Przetwarzamy wierzchołki, konwertując współrzędne na format tekstowy
                          (foreach vertex co-ordsxy
                            (setq WSPOLRZEDNA_X (rtos (car vertex) 2 MPP))
                            (setq WSPOLRZEDNA_Y (rtos (cadr vertex) 2 MPP))
                            (setq WSPOLRZEDNA_Z (rtos (caddr vertex) 2 MPP))
                            (setq KOD (dcl-Control-GetText geostation/Form1/TextBox8))                  
                            (setq LINIA (strcat NAZWA " " WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " WSPOLRZEDNA_Z " " KOD))
                            (cond 
                              ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 1)
                                (setq PD (open SC "a"))
                                (write-line LINIA PD)
                                (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                                (wybor-warstwy)
                                (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                                (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                                (setq NR (1+ (atoi TB2)))
                                (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                                (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                      
                                (close PD)
                              )
                              ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 0)
                                (setq exists nil)
                                (setq PD (open SC "r"))
                                (while (setq line1 (read-line PD))
                                  (setq fileContents (cons line1 fileContents))
                                )
                                (close PD)                                
                                ;; Sprawdzanie, czy linia już istnieje
                                (setq PD (open SC "a"))
                                (foreach line1 fileContents
                                  (if (wcmatch line1 (strcat "*" WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " "*" "*"))
                                    (setq exists t)
                                    (princ)
                                  )
                                )                                
                                ;; Jeśli linia nie istnieje, zapisz nową linię
                                (if (not exists)
                                  (progn
                                    (write-line LINIA PD)
                                    (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                                    (wybor-warstwy)
                                    (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                                    (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                                    (setq NR (1+ (atoi TB2)))
                                    (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                                    (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                      
                                    (close PD)
                                  )
                                  (princ)
                                ) 
                              )                            
                            )                                        
                          ) ;; Koniec przetwarzania wierzchołków
                        )
                        (princ)
                      )
              )
              ((= (cdr (assoc 0 entData)) "LWPOLYLINE")
                  (if (= (cdr (assoc 0 entData)) "LWPOLYLINE")
                    (progn
                      (setq vertices '())
                      (setq numVertices (cdr (assoc 90 entData))) ; Oryginalny kod używał funkcji FIX, która może prowadzić do problemów
                      (if (numberp numVertices) ; Sprawdźmy, czy numVertices jest liczbą
                        (progn
                          (repeat numVertices
                            (setq vertex (cdr (assoc 10 entData))) ; Pobieramy bezpośrednio punkt wierzchołka
                            (setq vertices (cons vertex vertices)) ; Dodajemy wierzchołek do listy
                            (setq entData (cdr (member (assoc 10 entData) entData))) ; Przechodzimy do następnego punktu wierzchołka
                          )
                          (foreach vertex vertices                    
                            (setq WSPOLRZEDNA_X (rtos (car vertex) 2 MPP))
                            (setq WSPOLRZEDNA_Y (rtos (cadr vertex) 2 MPP))
                            (setq WSPOLRZEDNA_Z "0")
                            (setq KOD (dcl-Control-GetText geostation/Form1/TextBox8))                  
                            (setq LINIA (strcat NAZWA " " WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " WSPOLRZEDNA_Z " " KOD))       
                            (cond
                              ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 1)
                                (setq PD (open SC "a"))
                                (write-line LINIA PD)
                                (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                                (wybor-warstwy)
                                (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                                (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                                (setq NR (1+ (atoi TB2)))
                                (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                                (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                      
                                (close PD)
                              )
                              ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 0)
                                (setq exists nil)
                                (setq PD (open SC "r"))
                                (while (setq line1 (read-line PD))
                                  (setq fileContents (cons line1 fileContents))
                                )
                                (close PD)
                                (setq PD (open SC "a"))
                                (foreach line1 fileContents
                                  (if (wcmatch line1 (strcat "*" WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " "*" "*"))
                                    (setq exists t)
                                    (princ)
                                  )
                                )
                                (if (not exists)
                                  (progn
                                    (write-line LINIA PD)
                                    (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                                    (wybor-warstwy)
                                    (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                                    (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                                    (setq NR (1+ (atoi TB2)))
                                    (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                                    (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                      
                                    (close PD)
                                  )
                                  (princ)
                                )
                              )
                            )
                          )     
                        )
                        (princ)
                      )
                    )
                    (princ)
                  )
              )   
            )            
          )
          (close PD)
          (policz-linie)
          (blokuj-licznik) 
        )
        (princ "Nie wybrano żadnych polilinii.\n")
      )
      (princ)
    )
    (defun AUTOLINE ()
      (if ss
        (progn
          (setq PRZEDR (dcl-Control-GetText geostation/Form1/TextBox1))
          (setq NR (dcl-Control-GetText geostation/Form1/TextBox2))
          (setq PRZYR (dcl-Control-GetText geostation/Form1/TextBox3))
          (setq KOD (dcl-Control-GetText geostation/Form1/TextBox8))
          (setq MPP (dcl-ComboBox-GetCurSel geostation/Form1/ComboBox1))
          (setq TH (dcl-Control-GetText geostation/Form1/TextBox4))
          (setq NAZWA (strcat PRZEDR NR PRZYR))
          (setq count (sslength ss))
          (setq countMax count)
          (setq fileContents (list))
          (repeat count
            (setq ent (ssname ss (setq count (1- count))))
            (setq entData (entget ent))
            (setq postep (strcat (rtos (* (/ (- countMax count) (float countMax)) 100) 2 0) "%"))
            (ChangeLoading "Pobieranie linii... " postep (- countMax count) countMax)
            (if (= (cdr (assoc 0 entData)) "LINE")
              (progn
                (setq startPoint (cdr (assoc 10 entData)))  ; Punkt początkowy linii
                (setq endPoint (cdr (assoc 11 entData)))    ; Punkt końcowy linii
                (setq WSPOLRZEDNA_X (rtos (car startPoint) 2 MPP))
                (setq WSPOLRZEDNA_Y (rtos (cadr startPoint) 2 MPP))
                (if (or (null (dcl-Control-GetText geostation/Form1/TextBox9))
                    (= (dcl-Control-GetText geostation/Form1/TextBox9) ""))
                  (setq WSPOLRZEDNA_Z (rtos (caddr startPoint) 2 MPP))
                  (setq WSPOLRZEDNA_Z (dcl-Control-GetText geostation/Form1/TextBox9))
                )
                (setq KOD (dcl-Control-GetText geostation/Form1/TextBox8))            
                (setq LINIA (strcat NAZWA " " WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " WSPOLRZEDNA_Z " " KOD))  
                (cond
                  ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 1)
                    (setq PD (open SC "a"))
                    (write-line LINIA PD)
                    (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                    (wybor-warstwy)
                    (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                    (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                    (setq NR (1+ (atoi TB2)))
                    (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                    (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                      
                    (close PD)
                  )
                  ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 0)
                    (setq exists nil)
                    (setq PD (open SC "r"))
                    (while (setq line1 (read-line PD))
                      (setq fileContents (cons line1 fileContents))
                    )
                    (close PD)
                    (setq PD (open SC "a"))
                    (foreach line1 fileContents
                      (if (wcmatch line1 (strcat "*" WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " "*" "*"))
                        (setq exists t)
                        (princ)
                      )
                    )
                    (if (not exists)
                      (progn
                        (write-line LINIA PD)
                        (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                        (wybor-warstwy)
                        (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                        (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                        (setq NR (1+ (atoi TB2)))
                        (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                        (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                    
                        (close PD)
                      )
                      (princ)
                    )
                  )
                )
                (setq WSPOLRZEDNA_X (rtos (car endPoint) 2 MPP))
                (setq WSPOLRZEDNA_Y (rtos (cadr endPoint) 2 MPP))
                (if (or (null (dcl-Control-GetText geostation/Form1/TextBox9))
                    (= (dcl-Control-GetText geostation/Form1/TextBox9) ""))
                  (setq WSPOLRZEDNA_Z (rtos (caddr endPoint) 2 MPP))
                  (setq WSPOLRZEDNA_Z (dcl-Control-GetText geostation/Form1/TextBox9))
                )
                (setq KOD (dcl-Control-GetText geostation/Form1/TextBox8))
                (setq LINIA (strcat NAZWA " " WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " WSPOLRZEDNA_Z " " KOD))    
                (cond
                  ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 1)
                    (setq PD (open SC "a"))
                    (write-line LINIA PD)
                    (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                    (wybor-warstwy)
                    (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                    (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                    (setq NR (1+ (atoi TB2)))
                    (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                    (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                      
                    (close PD)
                  )
                  ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 0)
                    (setq exists nil)
                    (setq PD (open SC "r"))
                    (while (setq line1 (read-line PD))
                      (setq fileContents (cons line1 fileContents))
                    )
                    (close PD)
                    (setq PD (open SC "a"))
                    (foreach line1 fileContents
                      (if (wcmatch line1 (strcat "*" WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " "*" "*"))
                        (setq exists t)
                        (princ)
                      )
                    )
                    (if (not exists)
                      (progn
                        (write-line LINIA PD)
                        (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                        (wybor-warstwy)
                        (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                        (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                        (setq NR (1+ (atoi TB2)))
                        (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                        (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                      
                        (close PD)
                      )
                      (princ)
                    )
                  )
                )
              )
              (princ)
            )
          )
          (close PD)
          (policz-linie)
          (blokuj-licznik) 
        )
        (princ "Nie wybrano żadnych linii.\n")
      )
      (princ)
    )
    (defun AUTOPKT ()
      (if ss
        (progn
          (setq PRZEDR (dcl-Control-GetText geostation/Form1/TextBox1))
          (setq NR (dcl-Control-GetText geostation/Form1/TextBox2))
          (setq PRZYR (dcl-Control-GetText geostation/Form1/TextBox3))
          (setq KOD (dcl-Control-GetText geostation/Form1/TextBox8))
          (setq MPP (dcl-ComboBox-GetCurSel geostation/Form1/ComboBox1))
          (setq TH (dcl-Control-GetText geostation/Form1/TextBox4))
          (setq NAZWA (strcat PRZEDR NR PRZYR))      
          (setq count (sslength ss))
          (setq countMax count)
          (setq fileContents (list))
          (repeat count
            (setq ent (ssname ss (setq count (1- count))))
            (setq entData (entget ent))
            (setq postep (strcat (rtos (* (/ (- countMax count) (float countMax)) 100) 2 0) "%"))
            (ChangeLoading "Pobieranie punktów... " postep (- countMax count) countMax)
            (if (= (cdr (assoc 0 entData)) "POINT")
              (progn
                (setq punktOBSZAR (cdr (assoc 10 entData)))  ; Współrzędne punktu                        
                (setq WSPOLRZEDNA_X (rtos (car punktOBSZAR) 2 MPP))
                (setq WSPOLRZEDNA_Y (rtos (cadr punktOBSZAR) 2 MPP))
                (if (or (null (dcl-Control-GetText geostation/Form1/TextBox9))
                    (= (dcl-Control-GetText geostation/Form1/TextBox9) ""))
                  (setq WSPOLRZEDNA_Z (rtos (caddr punktOBSZAR) 2 MPP))
                  (setq WSPOLRZEDNA_Z (dcl-Control-GetText geostation/Form1/TextBox9))
                ) 
                (setq KOD (dcl-Control-GetText geostation/Form1/TextBox8))
                (setq LINIA (strcat NAZWA " " WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " WSPOLRZEDNA_Z " " KOD))
                (cond
                  ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 1)
                    (setq PD (open SC "a"))
                    (write-line LINIA PD)
                    (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                    (wybor-warstwy)
                    (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                    (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                    (setq NR (1+ (atoi TB2)))
                    (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                    (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                      
                    (close PD)
                  )
                  ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 0)
                    (setq exists nil)
                    (setq PD (open SC "r"))
                    (while (setq line1 (read-line PD))
                      (setq fileContents (cons line1 fileContents))
                    )
                    (close PD)
                    (setq PD (open SC "a"))
                    (foreach line1 fileContents
                      (if (wcmatch line1 (strcat "*" WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " "*" "*"))
                        (setq exists t)
                        (princ)
                      )
                    )
                    (if (not exists)
                      (progn
                        (write-line LINIA PD)
                        (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                        (wybor-warstwy)
                        (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                        (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                        (setq NR (1+ (atoi TB2)))
                        (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                        (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                      
                        (close PD)
                      )
                      (princ)
                    )   
                  )
                )
              )
              (princ)
            )
          )
          (close PD)
          (policz-linie)
          (blokuj-licznik) 
        )
        (princ "\nNie wybrano żadnych punktów.")
      )
      (princ)
    )
    (defun AUTOCIRCLE ()
      (if ss
        (progn
          (setq PRZEDR (dcl-Control-GetText geostation/Form1/TextBox1))
          (setq NR (dcl-Control-GetText geostation/Form1/TextBox2))
          (setq PRZYR (dcl-Control-GetText geostation/Form1/TextBox3))
          (setq KOD (dcl-Control-GetText geostation/Form1/TextBox8))
          (setq MPP (dcl-ComboBox-GetCurSel geostation/Form1/ComboBox1))
          (setq TH (dcl-Control-GetText geostation/Form1/TextBox4))
          (setq NAZWA (strcat PRZEDR NR PRZYR))      
          (setq count (sslength ss))
          (setq countMax count)
          (setq fileContents (list))
          (repeat count
            (setq ent (ssname ss (setq count (1- count))))
            (setq entData (entget ent))
            (setq postep (strcat (rtos (* (/ (- countMax count) (float countMax)) 100) 2 0) "%"))
            (ChangeLoading "Pobieranie środka okręgów... " postep (- countMax count) countMax)
            (if (= (cdr (assoc 0 entData)) "CIRCLE")
              (progn
                (setq CIRCLEWSP (cdr (assoc 10 entData)))  ; Współrzędne punktu                        
                (setq WSPOLRZEDNA_X (rtos (car CIRCLEWSP) 2 MPP))
                (setq WSPOLRZEDNA_Y (rtos (cadr CIRCLEWSP) 2 MPP))
                (if (or (null (dcl-Control-GetText geostation/Form1/TextBox9))
                    (= (dcl-Control-GetText geostation/Form1/TextBox9) ""))
                  (setq WSPOLRZEDNA_Z (rtos (caddr CIRCLEWSP) 2 MPP))
                  (setq WSPOLRZEDNA_Z (dcl-Control-GetText geostation/Form1/TextBox9))
                ) 
                (setq KOD (dcl-Control-GetText geostation/Form1/TextBox8))
                (setq LINIA (strcat NAZWA " " WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " WSPOLRZEDNA_Z " " KOD))
                (cond
                  ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 1)
                    (setq PD (open SC "a"))
                    (write-line LINIA PD)
                    (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                    (wybor-warstwy)
                    (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                    (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                    (setq NR (1+ (atoi TB2)))
                    (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                    (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                      
                    (close PD)
                  )
                  ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 0)
                    (setq exists nil)
                    (setq PD (open SC "r"))
                    (while (setq line1 (read-line PD))
                      (setq fileContents (cons line1 fileContents))
                    )
                    (close PD)
                    (setq PD (open SC "a"))
                    (foreach line1 fileContents
                      (if (wcmatch line1 (strcat "*" WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " "*" "*"))
                        (setq exists t)
                        (princ)
                      )
                    )
                    (if (not exists)
                      (progn
                        (write-line LINIA PD)
                        (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                        (wybor-warstwy)
                        (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                        (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                        (setq NR (1+ (atoi TB2)))
                        (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                        (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                      
                        (close PD)
                      )
                      (princ)
                    ) 
                  )
                )           
              )
              (princ)
            )
          )
          (close PD)
          (policz-linie)
          (blokuj-licznik) 
        )
        (princ "\nNie wybrano żadnych okręgów.")
      )
      (princ)
    )
    (defun AUTOPRZECIECIA (/)
      (if ss
        (progn
          (setq PRZEDR (dcl-Control-GetText geostation/Form1/TextBox1))
          (setq NR (dcl-Control-GetText geostation/Form1/TextBox2))
          (setq PRZYR (dcl-Control-GetText geostation/Form1/TextBox3))
          (setq KOD (dcl-Control-GetText geostation/Form1/TextBox8))
          (setq MPP (dcl-ComboBox-GetCurSel geostation/Form1/ComboBox1))
          (setq TH (dcl-Control-GetText geostation/Form1/TextBox4))
          (setq NAZWA (strcat PRZEDR NR PRZYR)) 
          (setq countMax (sslength ss))          
          (setq i 0)
          (while (< i (sslength ss))
            (setq postep (strcat (rtos (* (/ i (float countMax)) 100) 2 0) "%"))
            (ChangeLoading "Pobieranie przecięć... " postep i countMax)
            (setq ent1 (vlax-ename->vla-object (ssname ss i)))  ; Konwertuj na obiekt VLA
            ;; Sprawdź, czy obiekt jest linią lub polilinią
            (if (or (equal (vla-get-ObjectName ent1) "AcDbLine")
                    (equal (vla-get-ObjectName ent1) "AcDbPolyline"))
              (progn
                (setq j (+ i 1))
                (while (< j (sslength ss))
                  (setq ent2 (vlax-ename->vla-object (ssname ss j)))  ; Konwertuj na obiekt VLA
                  ;; Sprawdź, czy obiekt jest linią lub polilinią
                  (if (or (equal (vla-get-ObjectName ent2) "AcDbLine")
                          (equal (vla-get-ObjectName ent2) "AcDbPolyline"))
                    (progn
                      ;; Znajdź punkty przecięcia między ent1 i ent2
                      (setq pt-list (vlax-invoke ent1 'IntersectWith ent2 acExtendNone))
                      ;; Jeśli są punkty przecięcia, wstaw punkty
                      (if pt-list
                        (progn
                          (setq k 0)
                          (while (< k (length pt-list))
                            (setq pt (list (nth k pt-list) (nth (+ k 1) pt-list) (nth (+ k 2) pt-list)))
                            (setq WSPOLRZEDNA_X (rtos (car pt) 2 MPP))
                            (setq WSPOLRZEDNA_Y (rtos (cadr pt) 2 MPP))
                            (if (or (null (dcl-Control-GetText geostation/Form1/TextBox9))
                              (= (dcl-Control-GetText geostation/Form1/TextBox9) ""))
                              (setq WSPOLRZEDNA_Z (rtos (caddr pt) 2 MPP))
                              (setq WSPOLRZEDNA_Z (dcl-Control-GetText geostation/Form1/TextBox9))
                            ) 
                            (setq LINIA (strcat NAZWA " " WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " WSPOLRZEDNA_Z " " KOD))
                            (cond
                              ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 1)
                                (setq PD (open SC "a"))
                                (write-line LINIA PD)
                                (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                                (wybor-warstwy)
                                (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                                (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                                (setq NR (1+ (atoi TB2)))
                                (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                                (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                      
                                (close PD)
                              )
                              ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 0)
                                (setq exists nil)
                                (setq PD (open SC "r"))
                                (while (setq line1 (read-line PD))
                                  (setq fileContents (cons line1 fileContents))
                                )
                                (close PD)
                                (setq PD (open SC "a"))
                                (foreach line1 fileContents
                                  (if (wcmatch line1 (strcat "*" WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " "*" "*"))
                                    (setq exists t)
                                    (princ)
                                  )
                                )
                                (if (not exists)
                                  (progn
                                    (write-line LINIA PD)
                                    (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                                    (wybor-warstwy)
                                    (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                                    (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                                    (setq NR (1+ (atoi TB2)))
                                    (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                                    (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                      
                                    (close PD)
                                  )
                                  (princ)
                                ) 
                              )
                            )                        
                            (setq k (+ k 3))  ; Przesuń do następnego punktu (punkty są w formacie [x y z])
                          )
                        )
                      )
                    )
                  )
                  (setq j (+ j 1))
                )
              )
            )
            (setq i (+ i 1))
          )
          (close PD)
          (policz-linie)
          (blokuj-licznik) 
        )
      )
      (princ)
    )
    (defun AUTOBLOK ()
      (if ss
        (progn
          (setq PRZEDR (dcl-Control-GetText geostation/Form1/TextBox1))
          (setq NR (dcl-Control-GetText geostation/Form1/TextBox2))
          (setq PRZYR (dcl-Control-GetText geostation/Form1/TextBox3))
          (setq KOD (dcl-Control-GetText geostation/Form1/TextBox8))
          (setq MPP (dcl-ComboBox-GetCurSel geostation/Form1/ComboBox1))
          (setq TH (dcl-Control-GetText geostation/Form1/TextBox4))
          (setq NAZWA (strcat PRZEDR NR PRZYR))      
          (setq count (sslength ss))
          (setq countMax count)
          (setq fileContents (list))
          (repeat count
            (setq ent (ssname ss (setq count (1- count))))
            (setq entData (entget ent))
            (setq postep (strcat (rtos (* (/ (- countMax count) (float countMax)) 100) 2 0) "%"))
            (ChangeLoading "Pobieranie bloków... " postep (- countMax count) countMax)
            (if (= (cdr (assoc 0 entData)) "INSERT")
              (progn
                (setq BLOKWSP (cdr (assoc 10 entData)))  ; Współrzędne punktu                        
                (setq WSPOLRZEDNA_X (rtos (car BLOKWSP) 2 MPP))
                (setq WSPOLRZEDNA_Y (rtos (cadr BLOKWSP) 2 MPP))
                (if (or (null (dcl-Control-GetText geostation/Form1/TextBox9))
                    (= (dcl-Control-GetText geostation/Form1/TextBox9) ""))
                  (setq WSPOLRZEDNA_Z (rtos (caddr BLOKWSP) 2 MPP))
                  (setq WSPOLRZEDNA_Z (dcl-Control-GetText geostation/Form1/TextBox9))
                ) 
                (setq KOD (dcl-Control-GetText geostation/Form1/TextBox8))
                (setq LINIA (strcat NAZWA " " WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " WSPOLRZEDNA_Z " " KOD))
                (cond
                  ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 1)
                    (setq PD (open SC "a"))
                    (write-line LINIA PD)
                    (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                    (wybor-warstwy)
                    (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                    (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                    (setq NR (1+ (atoi TB2)))
                    (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                    (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                      
                    (close PD)
                  )
                  ((= (dcl-Control-GetValue geostation/Form1/CheckBox2) 0)
                    (setq exists nil)
                    (setq PD (open SC "r"))
                    (while (setq line1 (read-line PD))
                      (setq fileContents (cons line1 fileContents))
                    )
                    (close PD)
                    (setq PD (open SC "a"))
                    (foreach line1 fileContents
                      (if (wcmatch line1 (strcat "*" WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " "*" "*"))
                        (setq exists t)
                        (princ)
                      )
                    )
                    (if (not exists)
                      (progn
                        (write-line LINIA PD)
                        (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                        (wybor-warstwy)
                        (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)
                        (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                        (setq NR (1+ (atoi TB2)))
                        (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                        (setq NAZWA (strcat PRZEDR (itoa NR) PRZYR))                      
                        (close PD)
                      )
                      (princ)
                    ) 
                  )
                )           
              )
              (princ)
            )
          )
          (close PD)
          (policz-linie)
          (blokuj-licznik) 
        )
        (princ "\nNie wybrano żadnych okręgów.")
      )
      (princ)
    )
    (defun c:geostation/Form1/TextButton1#OnClicked (/)
      (cond
        ((= (dcl-Control-GetValue geostation/Form1/OptionButton3) 1)
          (progn
            (setq old_cmdecho (getvar "cmdecho"))
            (setvar "cmdecho" 0)  
            (if (or (= SC nil) (= SC ""))
              (alert "Wybierz ścieżkę pliku!")
              (progn
                (setq acad (vlax-get-acad-object))
                (setq doc (vla-get-activedocument acad))
                (setq mspace (vla-get-modelspace doc))
                (while
                  (setq PD (open SC "a"))
                  (setq WSKAZ_PUNKT (getpoint "\nWskaz punkt"))
                  (setq PRZEDR (dcl-Control-GetText geostation/Form1/TextBox1))
                  (setq NR (dcl-Control-GetText geostation/Form1/TextBox2))
                  (setq PRZYR (dcl-Control-GetText geostation/Form1/TextBox3))
                  (setq NAZWA (strcat PRZEDR NR PRZYR))
                  (setq TH (dcl-Control-GetText geostation/Form1/TextBox4))
                  (setq MPP (dcl-ComboBox-GetCurSel geostation/Form1/ComboBox1))
                  (setq KOD (dcl-Control-GetText geostation/Form1/TextBox8))
                  (setq WSPOLRZEDNA_X (rtos (car WSKAZ_PUNKT) 2 MPP))
                  (setq WSPOLRZEDNA_Y (rtos (cadr WSKAZ_PUNKT) 2 MPP))
                  (if (or (null (dcl-Control-GetText geostation/Form1/TextBox9))
                      (= (dcl-Control-GetText geostation/Form1/TextBox9) ""))
                    (setq WSPOLRZEDNA_Z (rtos (caddr WSKAZ_PUNKT) 2 MPP))
                    (setq WSPOLRZEDNA_Z (dcl-Control-GetText geostation/Form1/TextBox9))
                  )
                  (setq LINIA
                      (strcat NAZWA " " WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " WSPOLRZEDNA_Z " " KOD)
                  )
                  (write-line LINIA PD)
                    (wybor-warstwy) 
                  (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA WSPOLRZEDNA_Y WSPOLRZEDNA_X WSPOLRZEDNA_Z)            
                  (setq TB2 (dcl-Control-GetText geostation/Form1/TextBox2))
                  (setq NR (1+ (atoi TB2)))
                  (dcl-Control-SetText geostation/Form1/TextBox2 NR)
                  (close PD)
                  (policz-linie)
                  (blokuj-licznik)
                )
              )
            )  
            (close PD)
            (setvar "cmdecho" old_cmdecho)
          )
        )
        ((= (dcl-Control-GetValue geostation/Form1/OptionButton4) 1)
          (progn
            (setq old_cmdecho (getvar "cmdecho"))
            (setvar "cmdecho" 0)  
            (if (or (= SC nil) (= SC ""))
              (alert "Wybierz ścieżkę pliku!")
              (progn
                (setq reply-nxyz (acet-ui-message "Ta procedura może zająć kilka minut.\nCzy chcesz kontynuować?" "Message" 52))
                (if (= reply-nxyz 6)
                  (progn
                    (setq acad (vlax-get-acad-object))
                    (setq doc (vla-get-activedocument acad))
                    (setq mspace (vla-get-modelspace doc))
                    (setq ss (ssget))
                    (if ss
                      (progn  
                        (setq CheckBoxPLINE (dcl-Control-GetValue geostation/Form1/CheckBox5))
                        (setq CheckBoxLINE (dcl-Control-GetValue geostation/Form1/CheckBox6))
                        (setq CheckBoxPKT (dcl-Control-GetValue geostation/Form1/CheckBox7))
                        (setq CheckBoxCIRCLE (dcl-Control-GetValue geostation/Form1/CheckBox8))
                        (setq CheckBoxPRZECIECIA (dcl-Control-GetValue geostation/Form1/CheckBox1))
                        (setq CheckBoxBLOK (dcl-Control-GetValue geostation/Form1/CheckBox3))
                        (StartLoading (strcat "Rozpoczynam pobieranie..."))
                        (if (= CheckBoxPLINE 1)
                          (progn
                            (StartLoading "Pobieranie polilinii...")
                            (AUTOPLINE)
                            (CloseLoading)
                          )  
                          (princ)
                        )
                        (if (= CheckBoxLINE 1)
                          (progn
                            (StartLoading "Pobieranie linii...")
                            (AUTOLINE)
                            (CloseLoading)
                          ) 
                          (princ)                          
                        )
                        (if (= CheckBoxPKT 1)
                          (progn
                            (StartLoading "Pobieranie punktów...")
                            (AUTOPKT) 
                            (CloseLoading)
                          )  
                          (princ)                          
                        )
                        (if (= CheckBoxCIRCLE 1)
                          (progn  
                            (StartLoading "Pobieranie środka okręgów...")
                            (AUTOCIRCLE) 
                            (CloseLoading)
                          )  
                          (princ)  
                        )
                        (if (= CheckBoxPRZECIECIA 1)
                          (progn  
                            (StartLoading "Pobieranie punktów przecięcia...")
                            (AUTOPRZECIECIA) 
                            (CloseLoading)
                          ) 
                          (princ)                            
                        )
                        (if (= CheckBoxBLOK 1)
                          (progn  
                            (StartLoading "Pobieranie bloków...")
                            (AUTOBLOK) 
                            (CloseLoading)
                          ) 
                          (princ)                            
                        )
                        (CloseLoading)
                        (alert "Zakończono.")
                      )
                      (princ "Nie zaleziono żadnych obiektów\n")
                    )
                  )
                  (princ "Anulowano.\n")
                )            
              )
            )
          )
        )
        ((= (dcl-Control-GetValue geostation/Form1/OptionButton1) 1)
          (progn
            (EXPORT_OSI)
          )
        )
      ) 
      (princ)  
    )
    (defun c:geostation/Form1/OptionButton3#OnClicked (Value /)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox2 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox5 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox6 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox7 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox8 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox1 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox3 NIL)
      (dcl-Control-SetCaption geostation/Form1/TextButton1 "Wskaż punkty")
      (princ)
    )
    (defun c:geostation/Form1/OptionButton4#OnClicked (Value /)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox2 T)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox5 T)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox6 T)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox7 T)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox8 T)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox1 T)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox3 T)
      (dcl-Control-SetCaption geostation/Form1/TextButton1 "Wskaż obszar")
      (princ)
    )
    (defun c:geostation/Form1/OptionButton1#OnClicked (Value /)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox2 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox5 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox6 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox7 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox8 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox1 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox3 NIL)
      (dcl-Control-SetCaption geostation/Form1/TextButton1 "Wskaż osie")
      (princ)
    )
    (defun c:geostation/Form1/Label4#OnClicked (/)
      (if SC 
        (startapp "notepad" SC)
      )
      (princ)
    )
    (defun c:geostation/Form1#OnDocActivated (/)
      (dcl-ImageComboBox-SetCurSel geostation/Form1/ImageCombo1 0)
      (dcl-Control-SetEnabled geostation/Form1/TextButton4 NIL)
      (dcl-Control-SetText geostation/Form1/TextBox9 "")
      (dcl-Control-SetEnabled geostation/Form1/CheckBox2 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox5 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox6 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox7 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox8 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox1 NIL)
      (dcl-Control-SetEnabled geostation/Form1/CheckBox3 NIL)
      (dcl-Control-SetCaption geostation/Form1/TextButton1 "Wskaż punkty")
      (dcl-Control-SetValue geostation/Form1/OptionButton3 1)
      (dcl-Control-SetValue geostation/Form1/OptionButton4 0)
      (dcl-Control-SetValue geostation/Form1/OptionButton1 0)
      (dcl-Control-SetText geostation/Form1/TextBox6 "")
      (zamknijPlik)
      (blokuj-licznik)
      (policz-linie)
      (dcl-Control-SetVisible geostation/Form1/Label6 T)
      (dcl-Control-SetVisible geostation/Form1/Label9 T)
      (dcl-Control-SetVisible geostation/Form1/ListView1 NIL)
      (dcl-Form-StartTimer geostation/Form1 5000)
      (princ)
    )
    (defun c:geostation/Form1#OnTimer (/)
      (endTimer)
    )
    (defun endTimer (/)
      (dcl-Control-SetVisible geostation/Form1/Label6 NIL)
      (dcl-Control-SetVisible geostation/Form1/Label9 NIL)
      (dcl-Control-SetVisible geostation/Form1/ListView1 T)
      (princ)
    )
    (defun zamknijPlik (/)
      ; (if (= (dcl-Control-GetText geostation/Form1/TextBox6) "")
      ;   (princ "No PD")
      ;   (progn
          (if PD
            (close PD)
          )
          (setq PD nil)
          (dcl-Control-SetText geostation/Form1/TextBox6 "")
          (setq SC nil)
          (policz-linie)
          (blokuj-licznik)
          (princ)
      ;   )        
      ; )
    )
    (defun c:geostation/Form1/Label6#OnClicked (/)
      (endTimer)
    )
    (defun c:geostation/Form1/Label9#OnClicked (/)
      (endTimer)
    )
    (defun c:geostation/Form1/ListView1#OnDblClicked (Row Column /)
      (vl-load-com)
      (vla-zoomcenter (vlax-get-acad-object) (vlax-3d-point (atoi (caddr (dcl-ListView-GetRowItems geostation/Form1/ListView1 Row))) (atoi (cadr (dcl-ListView-GetRowItems geostation/Form1/ListView1 Row))) 0) (getvar "VIEWSIZE"))
    )


  ;                    ---------------------------- EXPORT OSI ------------------------------------------------------------
    (defun EXPORT_OSI (/) ;----------------- OTWORZ FORM12
      (setq old_cmdecho (getvar "cmdecho"))
      (setvar "cmdecho" 0)  
      (if (or (= SC nil) (= SC ""))
        (alert "Wybierz ścieżkę pliku!")
        (progn
          (dcl-Form-Show geostation/Form12)
          (setq lineA nil
                lineB nil
                lineC nil
                lineD nil
                lineE nil
                lineF nil
                lineG nil
                lineH nil
                lineI nil
                line1 nil
                line2 nil
                line3 nil
                line4 nil
                line5 nil
                line6 nil
                line7 nil
                line8 nil
                line9 nil)
          (refresh_status)
        )
      )
      (setvar "cmdecho" old_cmdecho)
      (princ)
    )
    (defun c:geostation/Form12/TextButton1#OnClicked (/) ;------------- BUTTON EXPORTUJ PUNKTY
      ;; Inicjalizacja list
      (setq lineList '())
      (setq markedIntersections '())
      (setq KOD (dcl-Control-GetText geostation/Form1/TextBox8))
      (setq MPP (dcl-ComboBox-GetCurSel geostation/Form1/ComboBox1))
      (setq TH (dcl-Control-GetText geostation/Form1/TextBox4))
      ;; Funkcja pomocnicza do dodawania linii i tekstów do listy
      (defun add-line-to-list (line textbox)
        (if (/= line nil)
          (progn
            (setq lineData (list (car line) (dcl-Control-GetText textbox)))
            (setq lineList (append lineList (list lineData)))
          )
        )
      )

      ;; Dodawanie linii do listy
      (add-line-to-list lineA geostation/Form12/TextBox1)
      (add-line-to-list lineB geostation/Form12/TextBox2)
      (add-line-to-list lineC geostation/Form12/TextBox3)
      (add-line-to-list lineD geostation/Form12/TextBox4)
      (add-line-to-list lineE geostation/Form12/TextBox5)
      (add-line-to-list lineF geostation/Form12/TextBox6)
      (add-line-to-list lineG geostation/Form12/TextBox7)
      (add-line-to-list lineH geostation/Form12/TextBox8)
      (add-line-to-list lineI geostation/Form12/TextBox9)
      (add-line-to-list line1 geostation/Form12/TextBox10)
      (add-line-to-list line2 geostation/Form12/TextBox11)
      (add-line-to-list line3 geostation/Form12/TextBox12)
      (add-line-to-list line4 geostation/Form12/TextBox13)
      (add-line-to-list line5 geostation/Form12/TextBox14)
      (add-line-to-list line6 geostation/Form12/TextBox15)
      (add-line-to-list line7 geostation/Form12/TextBox16)
      (add-line-to-list line8 geostation/Form12/TextBox17)
      (add-line-to-list line9 geostation/Form12/TextBox18)

      ;; Sprawdzenie, czy mamy co najmniej dwie linie do przetwarzania
      (if (>= (length lineList) 2)
        (progn
          ;; Funkcja pomocnicza do wstawiania tekstu w punkcie przecięcia
          (defun insert-text-at-intersection (line1 line2)
            (setq p1 (cdr (assoc 10 (entget (car line1))))) ;; Punkt początkowy linii 1
            (setq p2 (cdr (assoc 11 (entget (car line1))))) ;; Punkt końcowy linii 1
            (setq p3 (cdr (assoc 10 (entget (car line2))))) ;; Punkt początkowy linii 2
            (setq p4 (cdr (assoc 11 (entget (car line2))))) ;; Punkt końcowy linii 2
            (setq intersectPoint (inters p1 p2 p3 p4 nil)) ;; Punkt przecięcia

            (if intersectPoint
              (progn
                (setq PD (open SC "a"))
                (setq NAZWA (strcat (cadr line1) (cadr line2))) ;; Tekst do wstawienia
                (setq WSPOLRZEDNA_X (rtos (car intersectPoint) 2 MPP))
                (setq WSPOLRZEDNA_Y (rtos (cadr intersectPoint) 2 MPP))
                (if (or (null (dcl-Control-GetText geostation/Form1/TextBox9))
                  (= (dcl-Control-GetText geostation/Form1/TextBox9) ""))
                  (setq WSPOLRZEDNA_Z (rtos (caddr intersectPoint) 2 MPP))
                  (setq WSPOLRZEDNA_Z (dcl-Control-GetText geostation/Form1/TextBox9))
                ) 
                (setq WSKAZ_PUNKT (list (atof WSPOLRZEDNA_X) (atof WSPOLRZEDNA_Y) (atof WSPOLRZEDNA_Z)))
                (setq LINIA (strcat NAZWA " " WSPOLRZEDNA_Y " " WSPOLRZEDNA_X " " WSPOLRZEDNA_Z " " KOD))
                (write-line LINIA PD)
                (wybor-warstwy) 
                (close PD)
                (policz-linie)
                (blokuj-licznik) 
                (refreshListView)
                ;; Dodanie oznaczenia przecięcia do listy
                (setq markedIntersections (cons (list (car line1) (car line2)) markedIntersections))
              )
            )
          )

          ;; Porównywanie każdej pary linii
          (foreach aline1 lineList
            (foreach aline2 lineList
              (if (and (/= aline1 aline2)
                      (not (member (list (car aline1) (car aline2)) markedIntersections))
                      (not (member (list (car aline2) (car aline1)) markedIntersections)))
                (insert-text-at-intersection aline1 aline2)
              )
            )
          )
        )
        (princ "\nWymagane są co najmniej dwie linie.")
      )
      (princ)
    )
    (defun c:geostation/Form12/TextButton2#OnClicked (/) ;----------------- BUTTON RESETUJ OSIE
      (setq lineA nil
            lineB nil
            lineC nil
            lineD nil
            lineE nil
            lineF nil
            lineG nil
            lineH nil
            lineI nil
            line1 nil
            line2 nil
            line3 nil
            line4 nil
            line5 nil
            line6 nil
            line7 nil
            line8 nil
            line9 nil)
      (refresh_status)
      (princ)
    )
    (defun refresh_status (/)
      (if (= lineA nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox1 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox1 200)
      )
      (if (= lineB nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox2 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox2 200)
      )
      (if (= lineC nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox3 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox3 200)
      )
      (if (= lineD nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox4 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox4 200)
      )
      (if (= lineE nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox5 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox5 200)
      )
      (if (= lineF nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox6 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox6 200)
      )
      (if (= lineG nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox7 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox7 200)
      )
      (if (= lineH nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox8 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox8 200)
      )
      (if (= lineI nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox9 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox9 200)
      )
      (if (= line1 nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox10 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox10 200)
      )
      (if (= line2 nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox11 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox11 200)
      )
      (if (= line3 nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox12 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox12 200)
      )
      (if (= line4 nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox13 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox13 200)
      )
      (if (= line5 nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox14 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox14 200)
      )
      (if (= line6 nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox15 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox15 200)
      )
      (if (= line7 nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox16 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox16 200)
      )
      (if (= line8 nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox17 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox17 200)
      )
      (if (= line9 nil)
        (dcl-Control-SetPicture geostation/Form12/PictureBox18 199)
        (dcl-Control-SetPicture geostation/Form12/PictureBox18 200)
      )
    )
    (defun seek:line (podp / temp1 temp2)
      (setq temp1 nil)
      (while (not temp1)
        (setq temp2 (entsel podp))
        (if temp2 
          (setq temp1 (equal (cdr (assoc 0 (entget (car temp2)))) "LINE"))
        )
        (princ)
      )
      (princ)
      temp2
      
    )

  ;                    ---------------------------- RZECZY POBOCZNE -------------------------------------------------------
    ;----------------- GRAPHIC BUTTONS WYBORY LINII OSI
      (defun c:geostation/Form12/GraphicButton1#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq lineA (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= lineA nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox1 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton2#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq lineB (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= lineB nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox2 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton3#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq lineC (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= lineC nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox3 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton4#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq lineD (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= lineD nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox4 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton5#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq lineE (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= lineE nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox5 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton6#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq lineF (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= lineF nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox6 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton7#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq lineG (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= lineG nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox7 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton8#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq lineH (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= lineH nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox8 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton9#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq lineI (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= lineI nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox9 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton10#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq line1 (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= line1 nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox10 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton11#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq line2 (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= line2 nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox11 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton12#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq line3 (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= line3 nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox12 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton13#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq line4 (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= line4 nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox13 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton14#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq line5 (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= line5 nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox14 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton15#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq line6 (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= line6 nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox15 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton16#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq line7 (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= line7 nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox16 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton17#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq line8 (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= line8 nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox17 200)
          (princ)
        )
        (princ)
      )
      (defun c:geostation/Form12/GraphicButton18#OnClicked (/)
        (dcl-Form-Close geostation/Form12)
        (setq line9 (seek:line "\nWskaż oś:"))
        (dcl-Form-Show geostation/Form12)
        (if (/= line9 nil)
          (dcl-Control-SetPicture geostation/Form12/PictureBox18 200)
          (princ)
        )
        (princ)
      )
    ;----------------- PICTURE BOXES USUWANIE LINII
      (defun c:geostation/Form12/PictureBox1#OnClicked (/)
        (setq lineA nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox2#OnClicked (/)
        (setq lineB nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox3#OnClicked (/)
        (setq lineC nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox4#OnClicked (/)
        (setq lineD nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox5#OnClicked (/)
        (setq lineE nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox6#OnClicked (/)
        (setq lineF nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox7#OnClicked (/)
        (setq lineG nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox8#OnClicked (/)
        (setq lineH nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox9#OnClicked (/)
        (setq lineI nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox10#OnClicked (/)
        (setq line1 nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox11#OnClicked (/)
        (setq line2 nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox12#OnClicked (/)
        (setq line3 nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox13#OnClicked (/)
        (setq line4 nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox14#OnClicked (/)
        (setq line5 nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox15#OnClicked (/)
        (setq line6 nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox16#OnClicked (/)
        (setq line7 nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox17#OnClicked (/)
        (setq line8 nil)
        (refresh_status)
        (princ)
      )
      (defun c:geostation/Form12/PictureBox18#OnClicked (/)
        (setq line9 nil)
        (refresh_status)
        (princ)
      )
    ;----------------- LICZNIKI
      (defun policz-linie ()
        (setq line-count 0)
        (if (= SC nil)
          (dcl-Control-SetCaption geostation/Form1/Label10 0)
          (progn
            (setq file (findfile SC))
            (if file
              (progn
                (setq PD (open file "r"))
                (if PD
                  (progn
                    (setq first-line (read-line PD))
                    (if (= first-line "Nr X Y Z Kod")
                      (princ "error1")
                      (princ)
                    )
                    (while (setq line (read-line PD))
                      (setq line-count (1+ line-count))
                    )
                    (close PD)
                  )
                  (princ)
                )
              )
              (princ)
            )
            (dcl-Control-SetCaption geostation/Form1/Label10 line-count)
          )
        )
        (princ)
      )

      (defun blokuj-licznik ()
        (setq aktlicznik (dcl-Control-GetCaption geostation/Form1/Label10))
        (if (< (atoi aktlicznik) 1)
          (progn
            ; (dcl-Control-SetEnabled geostation/Form1/TextButton2 NIL)
            (dcl-Control-SetEnabled geostation/Form1/TextButton4 NIL)
          )
          (progn
            ; (dcl-Control-SetEnabled geostation/Form1/TextButton2 T)
            (dcl-Control-SetEnabled geostation/Form1/TextButton4 T)
          )
        )
        (princ)
      )
    ;----------------- WYBOR SCIEZKI
      (defun c:geostation/Form1/TextButton3#OnClicked (/)
        (setq old_cmdecho (getvar "cmdecho"))
        (setvar "cmdecho" 0)
        (setvar "FILEDIA" 1)
        (if (not (getenv "lastSC"))
          (setenv "lastSC" (getvar 'dwgprefix))
          (princ)
        )
        (setq SC (getfiled "Wpisz nazwę pliku" (getenv "lastSC") "txt" 1))
        (setenv "lastSC" SC)
        (setvar "cmdecho" old_cmdecho)
        (if SC
          (progn
            (setq new-file-path (findfile SC))
            (if (null new-file-path)
              (progn
                (setq new-file-path SC)
                (setq new-PD (open new-file-path "w"))
                (if new-PD
                  (progn
                    (write-line (strcat "Nr" " " "X" " " "Y" " " "Z" " " "KOD") new-PD)
                    (close new-PD)
                    (dcl-Control-SetText geostation/Form1/TextBox6 SC)
                    (policz-linie)
                    (blokuj-licznik)
                  )
                  (princ)
                )
              )
              (princ)
            )
            (if (null new-file-path)
              (alert "Nie udało się utworzyć pliku.")
              (progn
                (setq new-PD (open new-file-path "a"))
                (if new-PD
                  (progn
                    (setq new-data '())
                    (foreach line new-data
                      (write-line line new-PD)
                    )
                    (close new-PD)
                    (dcl-Control-SetText geostation/Form1/TextBox6 SC)
                    (policz-linie)
                    (blokuj-licznik)
                  )
                  (princ)
                )
              )
            )
          )
          (progn
          (dcl-Control-SetText geostation/Form1/TextBox6 "")
          (policz-linie)
          (blokuj-licznik)
          )
        )
        (princ)
      )
      (defun c:geostation/Form1/TextBox6#OnUpdate (NewValue /)
        (if (= NewValue "")
          (progn 
            (dcl-ListView-Clear geostation/Form1/ListView1)
            (setq SCIEZKALISTVIEW1 nil)
            (dcl-Control-SetVisible geostation/Form1/TextButton2 NIL)
          )
          (progn
            (dcl-Control-SetVisible geostation/Form1/TextButton2 T)
            (dcl-ListView-Clear geostation/Form1/ListView1)
            (setq SCIEZKALISTVIEW1 NewValue)
            (setq file (open SCIEZKALISTVIEW1 "r"))
            (if file
              (progn          
                (while (setq line (read-line file))
                  (setq parts (my-split-string line " "))
                  (if parts
                    (progn
                      (setq NAZWA2 (nth 0 parts))
                      (setq X (nth 1 parts))
                      (setq Y (nth 2 parts))
                      (setq Z (nth 3 parts))
                      (if (and (contains-letters X) (contains-letters Y))
                        (princ)                
                        (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA2 X Y Z)
                      )
                    )
                    (princ)
                  )
                )
                (close file)
              )
              (princ)
            )
          )
        )
        (princ)
      )
      (defun refreshListView ()
          (dcl-ListView-Clear geostation/Form1/ListView1)
          (setq SCIEZKALISTVIEW1 (dcl-Control-GetText geostation/Form1/TextBox6))
          (setq file (open SCIEZKALISTVIEW1 "r"))
          (if file
            (progn          
              (while (setq line (read-line file))
                (setq parts (my-split-string line " "))
                (if parts
                  (progn
                    (setq NAZWA2 (nth 0 parts))
                    (setq X (nth 1 parts))
                    (setq Y (nth 2 parts))
                    (setq Z (nth 3 parts))
                    (if (and (contains-letters X) (contains-letters Y))
                      (princ)                
                      (dcl-ListView-AddItem geostation/Form1/ListView1 0 NAZWA2 X Y Z)
                    )
                  )
                  (princ)
                )
              )
              (close file)
            )
            (princ)
          )
          (princ)
      )

    ;----------------- USUWANIE
      (defun my-split-string (input-string delimiter)
        (if (and input-string delimiter)
          (progn
            (setq result '())
            (setq current-part "")
            (setq i 1)
            (setq len (strlen input-string))
            (while (<= i len)
              (setq char (substr input-string i 1))
              (if (= char delimiter)
                (progn
                  (if (/= current-part "")
                    (setq result (cons current-part result))
                  )
                  (setq current-part "")
                )
                (setq current-part (strcat current-part char))
              )
              (setq i (1+ i))
            )
            (if (/= current-part "")
              (setq result (cons current-part result))
              (princ)
            )
            (reverse result)
          )
          (princ)
        )
      )
      (defun c:geostation/Form1/TextButton4#OnClicked (/) ;--------- USUN PUNKT
        (setq inputFile (dcl-Control-GetText geostation/Form1/TextBox6))
        (setq usunCurSel (dcl-ListView-GetCurSel geostation/Form1/ListView1))
        (setq usunRowData (dcl-ListView-GetRowItems geostation/Form1/ListView1 usunCurSel))
        (setq usunNazwa (nth 0 usunRowData))
        (setq usunX (nth 2 usunRowData))
        (setq usunY (nth 1 usunRowData))
        (setq usunZ (nth 3 usunRowData))
        (setq usun1 (strcat usunNazwa " " usunX " " usunY " " usunZ " "))
        (setq acadApp (vlax-get-acad-object))
        (setq acadDoc (vla-get-ActiveDocument acadApp))
        (setq modelSpace (vla-get-ModelSpace acadDoc))
        (if (= -1 usunCurSel)
          (princ)
          (progn
            (setq reply-usun (acet-ui-message (strcat "Czy na pewno chcesz usunąć punkt " usunNazwa "?") "Message" 52))
            (if (= reply-usun 6)
              (progn
                (if inputFile
                  (progn
                    (setq lines2 '()) ; Inicjalizacja listy linii
                    (setq file2 (open inputFile "r")) ; Otwórz plik wejściowy do odczytu
                    (while (setq lineData2 (read-line file2)) ; Czytaj linie z pliku
                      (setq lines2 (cons lineData2 lines2)) ; Dodaj linię do listy
                    )
                    (close file2) ; Zamknij plik wejściowy
                    (setq newLines2 '())
                    (foreach line2 lines2
                      (setq parts2 (my-split-string line2 " "))
                      (setq liniaNAZWA (nth 0 parts2))
                      (setq liniaX (nth 2 parts2))
                      (setq liniaY (nth 1 parts2))
                      (setq liniaZ (nth 3 parts2))
                      (setq linia1 (strcat liniaNAZWA " " liniaX " " liniaY " " liniaZ " "))
                      (if (/= linia1 usun1)
                        (setq newLines2 (cons line2 newLines2))
                        (progn
                          (setq pt (list (atof usunX) (atof usunY) (atof usunZ)))
                          (vlax-for obj modelSpace
                            (cond
                              ((and (eq "AcDbPoint" (vla-get-ObjectName obj))
                                    (equal (vlax-get obj 'Coordinates) pt 0.001))
                              (vla-Delete obj))
                              ((and (eq "AcDbMText" (vla-get-ObjectName obj))
                                    (equal (vlax-get obj 'InsertionPoint) pt 0.001))
                              (vla-Delete obj))
                            )
                          )
                        )
                      )
                    )
                    (if (setq file2 (open inputFile "w")) ; Otwórz plik wejściowy do zapisu
                      (progn
                        (foreach line2 newLines2
                          (write-line line2 file2) ; Zapisz linię do pliku
                        )
                        (close file2) ; Zamknij plik wejściowy
                        (policz-linie)
                        (blokuj-licznik)
                        (refreshListView)
                        (alert (strcat "Punkt " usunNazwa " został usunięty."))
                      )
                      (princ "\nWystąpił błąd podczas otwierania pliku.")
                    )
                  )
                  (princ "\nNie wybrano pliku.")
                )
              )
              (princ)
            )
          )
        )
        (princ)
      )

;======================================-------------------------------------------- NARZĘDZIA ----------------------------------------------------------===================
  ;                    ---------------------------- INICJACJA PROGRAMU ----------------------------------------------------
    (defun c:MAPTOOLBAR ()
        (setq old_cmdecho (getvar "cmdecho"))
        (setvar "cmdecho" 0)
        (command "_OPENDCL")
        (dcl-Project-Load "c:/NXYZ/geostation")
        (vl-load-all "c:/NXYZ/nxyz.lsp")
        (vl-load-com)
        (setq acad (vlax-get-acad-object))
        (setq doc (vla-get-activedocument acad))
        (setq mspace (vla-get-modelspace doc))
        (setq documentname (vla-get-name doc))
        (dcl-Form-Show geostation/Form3)
        (CheckUpdate "Form3")
        (princ)
        (dcl-Control-SetCaption geostation/Form3/Label5 "made by Paweł Różacki")
        (dcl-ComboBox-SetCurSel geostation/Form3/ComboBox1 0)
        (setq suma-dlugosci-linii 0.0)
        (setq suma-powierzchni 0.0) 
        (dcl-ComboBox-SetCurSel geostation/Form3/ComboBox3 3)
        (dcl-ComboBox-SetCurSel geostation/Form3/ComboBox4 0)
        (if (= (dcl-ListView-GetColumnCount geostation/Form3/ListView1) 0)
          (dcl-ListView-AddColumns geostation/Form3/ListView1
            (LIST "NAZWA" 0 330)  
          ) 
          (princ)
        )
        (LISTAWSTAWSYMBOL)
        (setvar "cmdecho" old_cmdecho)
        (princ)
      )
  ;                    ---------------------------- DZIAŁANIE PROGRAMU ----------------------------------------------------
    ;                          >>>>>>>>>>>>>>>>>>>>> RYSOWANIE <<<<<<<<<<<<<<<<<<<
      ;----------------- WSTAW SYMBOL
        (defun LISTAWSTAWSYMBOL (/) ;--------------- WYPEŁNIENIE LISTY SYMBOLI DO WSTAWIENIA
          (dcl-ListView-Clear geostation/Form3/ListView1)
          (dcl-ListView-AddItem geostation/Form3/ListView1 0 "  strzałka północy")
          (dcl-ListView-AddItem geostation/Form3/ListView1 1 "  ściana oporowa")
          (dcl-ListView-AddItem geostation/Form3/ListView1 2 "  ogrodzenie")
          (dcl-ListView-AddItem geostation/Form3/ListView1 3 "  kropka")
          (dcl-ListView-AddItem geostation/Form3/ListView1 4 "  drzewo liściaste")
          (dcl-ListView-AddItem geostation/Form3/ListView1 5 "  drzewo iglaste") 
          (dcl-ListView-AddItem geostation/Form3/ListView1 6 "  kratka ściekowa") 
          (dcl-ListView-AddItem geostation/Form3/ListView1 7 "  właz") 
          (dcl-ListView-AddItem geostation/Form3/ListView1 8 "  latarnia")
          (dcl-ListView-AddItem geostation/Form3/ListView1 9 "  linia MPZP")
          (princ)
        )
        (defun c:geostation/Form3/TextButton4#OnClicked (/) ;---------------- BUTTON RYSUJ
          (setq indexTab2 (+ (dcl-ListView-GetCurSel geostation/Form3/ListView1) 9000))
          (while
            (cond
              ((= indexTab2 8999)
              (alert "Wybierz symbol")
              )
              ((= indexTab2 9000) ;----- STRZALKA POLNOCY
                (setq wstawSymbolXY (getpoint "\nWskaż punkt wstawienia: "))
                (STRZALKAPOLNOCY)
                (entmake
                  (list
                    (cons 0 "INSERT")
                    (cons 2 "STRZALKAPOLNOCY")
                    (cons 10 wstawSymbolXY)
                    (cons 41 1.0) ;; Skala X
                    (cons 42 1.0) ;; Skala Y
                    (cons 43 1.0) ;; Skala Z
                    (cons 50 0.0) ;; Kąt rotacji
                  )
                ) 
              ) 
              ((= indexTab2 9001) ;----- SCIANA OPOROWA
                (SCIANA_OP)
              )  
              ((= indexTab2 9002) ;----- OGRODZENIE
                (OGRODZENIE)
              ) 
              ((= indexTab2 9003) ;----- KROPKA
              (setq wstawSymbolXY (getpoint "\nWskaż punkt wstawienia: "))
                (KROPKA)
                (entmake
                  (list
                    (cons 0 "INSERT")
                    (cons 2 "KROPKA")
                    (cons 10 wstawSymbolXY)
                    (cons 41 1.0) ;; Skala X
                    (cons 42 1.0) ;; Skala Y
                    (cons 43 1.0) ;; Skala Z
                    (cons 50 0.0) ;; Kąt rotacji
                  )
                ) 
              ) 
              ((= indexTab2 9004) ;----- DRZEWO LISCIASTE
              (setq wstawSymbolXY (getpoint "\nWskaż punkt wstawienia: "))
                (DRZEWO_LISCIASTE)
                (entmake
                  (list
                    (cons 0 "INSERT")
                    (cons 2 "DRZEWO_LISCIASTE")
                    (cons 10 wstawSymbolXY)
                    (cons 41 1.0) ;; Skala X
                    (cons 42 1.0) ;; Skala Y
                    (cons 43 1.0) ;; Skala Z
                    (cons 50 0.0) ;; Kąt rotacji
                  )
                ) 
              ) 
              ((= indexTab2 9005) ;----- DRZEWO IGLASTE
              (setq wstawSymbolXY (getpoint "\nWskaż punkt wstawienia: "))
                (DRZEWO_IGLASTE)
                (entmake
                  (list
                    (cons 0 "INSERT")
                    (cons 2 "DRZEWO_IGLASTE")
                    (cons 10 wstawSymbolXY)
                    (cons 41 1.0) ;; Skala X
                    (cons 42 1.0) ;; Skala Y
                    (cons 43 1.0) ;; Skala Z
                    (cons 50 0.0) ;; Kąt rotacji
                  )
                )  
              ) 
              ((= indexTab2 9006) ;----- KRATKA SCIEKOWA
              (setq wstawSymbolXY (getpoint "\nWskaż punkt wstawienia: "))
                (KRATKA_SCIEKOWA)
                (entmake
                  (list
                    (cons 0 "INSERT")
                    (cons 2 "KRATKA_SCIEKOWA")
                    (cons 10 wstawSymbolXY)
                    (cons 41 1.0) ;; Skala X
                    (cons 42 1.0) ;; Skala Y
                    (cons 43 1.0) ;; Skala Z
                    (cons 50 0.0) ;; Kąt rotacji
                  )
                )  
              ) 
              ((= indexTab2 9007) ;----- WLAZ
              (setq wstawSymbolXY (getpoint "\nWskaż punkt wstawienia: "))
                (WLAZ)
                (entmake
                  (list
                    (cons 0 "INSERT")
                    (cons 2 "WLAZ")
                    (cons 10 wstawSymbolXY)
                    (cons 41 1.0) ;; Skala X
                    (cons 42 1.0) ;; Skala Y
                    (cons 43 1.0) ;; Skala Z
                    (cons 50 0.0) ;; Kąt rotacji
                  )
                ) 
              )
              ((= indexTab2 9008) ;----- LATARNIA
              (setq wstawSymbolXY (getpoint "\nWskaż punkt wstawienia: "))
                (LATARNIA)
                (entmake
                  (list
                    (cons 0 "INSERT")
                    (cons 2 "LATARNIA")
                    (cons 10 wstawSymbolXY)
                    (cons 41 1.0) ;; Skala X
                    (cons 42 1.0) ;; Skala Y
                    (cons 43 1.0) ;; Skala Z
                    (cons 50 0.0) ;; Kąt rotacji
                  )
                ) 
              )   
              ((= indexTab2 9009) ;----- MPZP
                (MPZP)
              )        
            )
          )
          (princ)
        )
        (defun c:geostation/Form3/TextButton5#OnClicked (/) ;---------------- BUTTON AKTUALIZUJ .SHX
          (setq dwg-path (getvar "DWGPREFIX")) ; Pobierz ścieżkę bieżącego rysunku
          (setq dwg-name (getvar "DWGNAME"))   ; Pobierz nazwę bieżącego rysunku
          (setq full-path-dwg (strcat dwg-path dwg-name)) ; Połącz ścieżkę i nazwę, aby uzyskać pełną ścieżkę pliku .dwg
          (setq full-path-shx (strcat dwg-path "shape_MO.shx")) ; Zdefiniuj pełną ścieżkę do pliku .shx
          (if (findfile full-path-shx)
            (progn
              (setq reply-shxIstn (acet-ui-message (strcat "Plik .shx znajduje się już w ścieżce z .dwg:\n" full-path-dwg "\nCzy chcesz go nadpisać?") "Message" 36))
              (if (= reply-shxIstn 6)
                (progn
                  (startapp "cmd.exe" (strcat "/C xcopy C:\\NXYZ\\bin\\shape_MO.shx " dwg-path " /y")) ; Wykonaj kopiowanie pliku
                  (acet-ui-message "Plik .shx został utworzony w folderze z rysunkiem." "Message" 64) ; Wyświetl komunikat po zakończeniu kopiowania
                )
              )
            )
            (progn
              (setq reply-shxBrak (acet-ui-message (strcat "Czy chcesz utworzyć plik .shx w ścieżce:\n" full-path-dwg " ?") "Message" 36))
              (if (= reply-shxBrak 6)
                (progn
                  (startapp "cmd.exe" (strcat "/C xcopy C:\\NXYZ\\bin\\shape_MO.shx " dwg-path " /y")) ; Wykonaj kopiowanie pliku
                  (acet-ui-message "Plik .shx został utworzony w folderze z rysunkiem." "Message" 64) ; Wyświetl komunikat po zakończeniu kopiowania
                )
              )
            )
          )
          (princ)
        )
      ;----------------- OBLICZ SPADEK
        (defun c:F1TB7 (/)
          (oblicz-spadek-linia)
          (princ)
        )
        (defun c:F3TB27 (/)
          (oblicz-spadek-punkt)
          (princ)
        )
        (defun oblicz-spadek-linia ()
          (vl-load-com)
          (setq acad (vlax-get-acad-object))
          (setq doc (vla-get-activedocument acad))
          (setq mspace (vla-get-modelspace doc))
          (setq THSPADEK (dcl-Control-GetText geostation/Form3/TextBox12)
                MPPSPADEK (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox5)
          )
          (setvar "TEXTSIZE" (atof THSPADEK))
          (setq czolowki-checkbox (dcl-Control-GetValue geostation/Form3/CheckBox1))
          (setq linie-checkbox (dcl-Control-GetValue geostation/Form3/CheckBox2))
          (if (= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox1) 0)
            (progn
              (setq symbol "%")
              (setq jednostka 100)
            )
            (if (= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox1) 1)
              (progn
                (setq symbol "‰")
                (setq jednostka 1000)
              )
              (princ "Wybierz jednostkę!\n")
            )
          )
          (setq z1 nil)
          (setq z2 nil)
          (setq ss nil)
          (while (not ss)
            (princ "\nWybierz linię: ")
            (setq ss (ssget "_+.:S" '((0 . "LINE"))))
            (if ss
              (progn
                (setq ent (ssname ss 0))
                (setq entdata (entget ent))
                (setq entity-type (cdr (assoc 0 entdata)))
                      (setq punkt1 (cdr (assoc 10 entData)))  
                      (setq punkt2 (cdr (assoc 11 entData)))
                      (setq odl (odleglosc2D punkt1 punkt2))
                      (setq midpoint (mapcar '(lambda (a b) (/ (+ a b) 2.0)) punkt1 punkt2))
                      (if (and
                            (= (caddr punkt1) 0)
                            (listp punkt1))
                        (progn
                          (vla-zoomcenter acad (vlax-3d-point (car midpoint) (cadr midpoint) 0) (* odl 1.2))
                          (setq theMText1 (vla-addtext mspace "1" (vlax-3d-point punkt1) (* odl 0.06)))
                          (setq z1 (getreal "\nWybrany punkt nie posiada wysokości lub jest równa 0. Wprowadź wysokość ręcznie dla punktu 1:"))
                          (if (= z1 nil)
                            (setq z1 0)
                            (princ)
                          )
                          (entdel (vlax-vla-object->ename theMText1))
                        )
                        (setq z1 (caddr punkt1))
                      )
                      (if (and
                            (= (caddr punkt2) 0)
                            (listp punkt2))
                        (progn
                          (vla-zoomcenter acad (vlax-3d-point (car midpoint) (cadr midpoint) 0) (* odl 1.2))
                          (setq theMText2 (vla-addtext mspace "2" (vlax-3d-point punkt2) (* odl 0.06)))
                          (setq z2 (getreal "\nWybrany punkt nie posiada wysokości lub jest równa 0. Wprowadź wysokość ręcznie dla punktu 2:"))
                          (if (= z2 nil)
                            (setq z2 0)
                            (princ)
                          )
                          (entdel (vlax-vla-object->ename theMText2))
                        )
                        (setq z2 (caddr punkt2))
                      )  
                      (if (and
                          (listp punkt1)
                          (listp punkt2)
                          (= (length punkt1) 3)
                          (= (length punkt2) 3))
                        (progn
                          (setq x1 (car punkt1)
                                y1 (cadr punkt1)
                                x2 (car punkt2)
                                y2 (cadr punkt2))
                          (setq dx (- x2 x1)
                                dy (- y2 y1)
                                dz (- z2 z1)
                                dlugosc (sqrt (+ (* dx dx) (* dy dy))))
                          (setq spadek (if (= dlugosc 0.0) 0.0 (/ (abs dz) dlugosc)))
                          (setq spadek-jednostka (* spadek jednostka))
                          (if (< dlugosc 0.0001)
                            (princ "\nOdległość pomiędzy punktami jest zbyt mała, aby obliczyć spadek.")
                            (progn
                              (setq dlugosc-tekst (strcat "- " (zaokraglaj2 dlugosc) " -"))
                              (setq srodekX (/ (+ x1 x2) 2.0))
                              (setq srodekY (/ (+ y1 y2) 2.0))  
                              (setq kat-rad (angle punkt1 punkt2))
                              (if (and (< kat-rad (/ pi 2)) (>= z1 z2))
                                (progn
                                  (setq pkat-rad kat-rad)
                                  (setq tekst (strcat (rtos spadek-jednostka 2 MPPSPADEK) symbol " ->"))
                                )
                                (if (and (< kat-rad (/ pi 2)) (< z1 z2))
                                  (progn
                                    (setq pkat-rad kat-rad)
                                    (setq tekst (strcat "<- " (rtos spadek-jednostka 2 MPPSPADEK) symbol))
                                  )
                                  (if (and (and (>= kat-rad (/ pi 2)) (< kat-rad (* 1.5 pi))) (>= z1 z2))
                                    (progn
                                      (setq pkat-rad (+ kat-rad pi))
                                      (setq tekst (strcat "<- " (rtos spadek-jednostka 2 MPPSPADEK) symbol))
                                    )
                                    (if (and (and (>= kat-rad (/ pi 2)) (< kat-rad (* 1.5 pi))) (< z1 z2))
                                      (progn
                                        (setq pkat-rad (+ kat-rad pi))
                                        (setq tekst (strcat (rtos spadek-jednostka 2 MPPSPADEK) symbol " ->"))
                                      )
                                      (if (and (and (>= kat-rad (* 1.5 pi)) (<= kat-rad (* 2 pi))) (>= z1 z2))
                                        (progn
                                          (setq pkat-rad kat-rad)
                                          (setq tekst (strcat (rtos spadek-jednostka 2 MPPSPADEK) symbol " ->"))
                                        )
                                        (if (and (and (>= kat-rad (* 1.5 pi)) (<= kat-rad (* 2 pi))) (< z1 z2))
                                          (progn
                                            (setq pkat-rad kat-rad)
                                            (setq tekst (strcat "<- " (rtos spadek-jednostka 2 MPPSPADEK) symbol))
                                          )
                                          (princ "Błąd obliczania spadku 1\n")
                                        )                   
                                      )  
                                    )                  
                                  )
                                )
                              )
                              (setq listwsp (list srodekX srodekY 0.0))
                              (setq listwspvar (vlax-3d-point srodekX srodekY 0.0))
                              (setvar "TEXTSIZE" (atof THSPADEK))
                              (setq theMText (vla-addtext mspace tekst (vlax-3d-point listwsp) (atof THSPADEK)))
                              (vla-put-Rotation theMText pkat-rad)
                              (vla-put-alignment theMText acalignmentbottomcenter)
                              (vla-put-textalignmentpoint theMText listwspvar)
                              (if (= czolowki-checkbox 1)
                                (progn
                                  (setvar "TEXTSIZE" (atof THSPADEK))
                                  (setq theMTextCZ (vla-addtext mspace dlugosc-tekst (vlax-3d-point listwsp) (atof THSPADEK)))
                                  (vla-put-Rotation theMTextCZ pkat-rad)
                                  (vla-put-alignment theMTextCZ acalignmenttopcenter)
                                  (vla-put-textalignmentpoint theMTextCZ listwspvar)
                                )
                                (princ)
                              )
                              (if (= linie-checkbox 1)
                                (setq theLine (vla-addline mspace (vlax-3d-point punkt1) (vlax-3d-point punkt2)))
                                (princ)
                              )
                            )
                          )
                        )
                        (princ "\nNieprawidłowe dane punktów. Oczekiwano list z trzema współrzędnymi (x, y, z).")
                      )
              )
            )
          )
          (princ)
        )
        (defun oblicz-spadek-punkt ()
          (setq acad (vlax-get-acad-object))
          (setq doc (vla-get-activedocument acad))
          (setq mspace (vla-get-modelspace doc))
          (setq THSPADEK (dcl-Control-GetText geostation/Form3/TextBox12)
                MPPSPADEK (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox5)
          )
          (setvar "TEXTSIZE" (atof THSPADEK))
          (setq czolowki-checkbox (dcl-Control-GetValue geostation/Form3/CheckBox1))
          (setq linie-checkbox (dcl-Control-GetValue geostation/Form3/CheckBox2))
          (if (= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox1) 0)
            (progn
              (setq symbol "%")
              (setq jednostka 100)
            )
            (if (= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox1) 1)
              (progn
                (setq symbol "‰")
                (setq jednostka 1000)
              )
              (princ "Wybierz jednostkę!\n")
            )
          )
          (setq sspkt1 nil)
          (setq sspkt2 nil)
          (while (not sspkt1)
            (princ "\nWybierz pierwszy punkt: ")
            (setq sspkt1 (ssget "_+.:S" '((0 . "POINT"))))
          )
          (setq ent1 (ssname sspkt1 0))
          (setq entdata1 (entget ent1))
          (setq punkt1 (cdr (assoc 10 entData1))) 
          (if (and
                (= (caddr punkt1) 0)
                (listp punkt1))
            (setq z1 (getreal "\nWybrany punkt nie posiada wysokości lub jest równa 0. Wprowadź wysokość ręcznie: "))
            (setq z1 (caddr punkt1))
          )
          (while (not sspkt2)
            (princ "\nWybierz drugi punkt: ")
            (setq sspkt2 (ssget "_+.:S" '((0 . "POINT"))))
          )
          (setq ent2 (ssname sspkt2 0))
          (setq entdata2 (entget ent2))
          (setq punkt2 (cdr (assoc 10 entData2))) 
          (if (and
                (= (caddr punkt2) 0)
                (listp punkt2))
            (setq z2 (getreal "\nWybrany punkt nie posiada wysokości lub jest równa 0. Wprowadź wysokość ręcznie: "))
            (setq z2 (caddr punkt2))
          )  
          (if (and
              (listp punkt1)
              (listp punkt2)
              (= (length punkt1) 3)
              (= (length punkt2) 3))
            (progn
              (setq x1 (car punkt1)
                    y1 (cadr punkt1)
                    x2 (car punkt2)
                    y2 (cadr punkt2))
              (setq dx (- x2 x1)
                    dy (- y2 y1)
                    dz (- z2 z1)
                    dlugosc (sqrt (+ (* dx dx) (* dy dy))))
              (setq spadek (if (= dlugosc 0.0) 0.0 (/ (abs dz) dlugosc)))
              (setq spadek-jednostka (* spadek jednostka))
              (if (< dlugosc 0.0001)
                (princ "\nOdległość pomiędzy punktami jest zbyt mała, aby obliczyć spadek.")
                (progn
                  (setq dlugosc-tekst (strcat "- " (zaokraglaj2 dlugosc) " -"))
                  (setq srodekX (/ (+ x1 x2) 2.0))
                  (setq srodekY (/ (+ y1 y2) 2.0))  
                  (setq kat-rad (angle punkt1 punkt2))
                  (if (and (< kat-rad (/ pi 2)) (>= z1 z2))
                    (progn
                      (setq pkat-rad kat-rad)
                      (setq tekst (strcat (rtos spadek-jednostka 2 MPPSPADEK) symbol " ->"))
                    )
                    (if (and (< kat-rad (/ pi 2)) (< z1 z2))
                      (progn
                        (setq pkat-rad kat-rad)
                        (setq tekst (strcat "<- " (rtos spadek-jednostka 2 MPPSPADEK) symbol))
                      )
                      (if (and (and (>= kat-rad (/ pi 2)) (< kat-rad (* 1.5 pi))) (>= z1 z2))
                        (progn
                          (setq pkat-rad (+ kat-rad pi))
                          (setq tekst (strcat "<- " (rtos spadek-jednostka 2 MPPSPADEK) symbol))
                        )
                        (if (and (and (>= kat-rad (/ pi 2)) (< kat-rad (* 1.5 pi))) (< z1 z2))
                          (progn
                            (setq pkat-rad (+ kat-rad pi))
                            (setq tekst (strcat (rtos spadek-jednostka 2 MPPSPADEK) symbol " ->"))
                          )
                          (if (and (and (>= kat-rad (* 1.5 pi)) (<= kat-rad (* 2 pi))) (>= z1 z2))
                            (progn
                              (setq pkat-rad kat-rad)
                              (setq tekst (strcat (rtos spadek-jednostka 2 MPPSPADEK) symbol " ->"))
                            )
                            (if (and (and (>= kat-rad (* 1.5 pi)) (<= kat-rad (* 2 pi))) (< z1 z2))
                              (progn
                                (setq pkat-rad kat-rad)
                                (setq tekst (strcat "<- " (rtos spadek-jednostka 2 MPPSPADEK) symbol))
                              )
                              (princ "Błąd obliczania spadku 1\n")
                            )                   
                          )  
                        )                  
                      )
                    )
                  )
                  (setq listwsp (list srodekX srodekY 0.0))
                  (setq listwspvar (vlax-3d-point srodekX srodekY 0.0))
                  (setvar "TEXTSIZE" (atof THSPADEK))
                  (setq theMText (vla-addtext mspace tekst (vlax-3d-point listwsp) (atof THSPADEK)))
                  (vla-put-Rotation theMText pkat-rad)
                  (vla-put-alignment theMText acalignmentbottomcenter)
                  (vla-put-textalignmentpoint theMText listwspvar)
                  (if (= czolowki-checkbox 1)
                    (progn
                      (setvar "TEXTSIZE" (atof THSPADEK))
                      (setq theMTextCZ (vla-addtext mspace dlugosc-tekst (vlax-3d-point listwsp) (atof THSPADEK)))
                      (vla-put-Rotation theMTextCZ pkat-rad)
                      (vla-put-alignment theMTextCZ acalignmenttopcenter)
                      (vla-put-textalignmentpoint theMTextCZ listwspvar)
                    )
                    (princ)
                  )
                  (if (= linie-checkbox 1)
                    (setq theLine (vla-addline mspace (vlax-3d-point punkt1) (vlax-3d-point punkt2)))
                    (princ)
                  )
                )
              )
            )
            (princ "\nNieprawidłowe dane punktów. Oczekiwano list z trzema współrzędnymi (x, y, z).")
          )
          (princ)
        )
      ;----------------- METODA ORTOGNONALNA
        (defun c:F1TB8 (/)
          (setq acadapp (vlax-get-acad-object))
          (setq doc (vla-get-activedocument acadapp))
          (setq mspace (vla-get-modelspace doc))
          (setq old_cmdecho (getvar "cmdecho"))
          (setvar "cmdecho" 0)
          (STRZALKA)
          (setq currentLineType (getvar "CELTYPE"))
          (if (not (tblsearch "style" "Metoda_orto"))
            (progn
              (entmakex
                (list
                  '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                  '(100 . "AcDbSymbolTableRecord")
                  '(100 . "AcDbTextStyleTableRecord")
                  (cons 2 "Metoda_orto")             ; Nazwa stylu
                  (cons 3 "TechnicLite")              ; Nazwa czcionki
                  (cons 40 0)                ; Wysokość tekstu
                  (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                  (cons 50 0)               ; Kąt pochylenia tekstu
                  (cons 70 0)
                )
              )
            )
            (princ)
          )
          (if (null (tblsearch "LTYPE" "OrtoDashedDot"))
            (loadLinetype doc "OrtoDashedDot" "C:/NXYZ/bin/linetype.lin")
            (princ)
          )
          (if (null (tblsearch "LTYPE" "OrtoDashed"))
            (loadLinetype doc "OrtoDashed" "C:/NXYZ/bin/linetype.lin")
            (princ)
          )
          (setvar "CELTYPE" currentLineType)
          (setvar "cmdecho" old_cmdecho)
          (setq punkt1 (getpoint "\nWskaż pierwszy punkt linii: "))
          (setq punkt2 (getpoint "\nWskaż drugi punkt linii: "))
          (setq linia (vla-addline mspace (vlax-3d-point punkt1) (vlax-3d-point punkt2)))
          (vla-put-Linetype linia "OrtoDashedDot")
          (setq THORTO (dcl-Control-GetText geostation/Form3/TextBox12))
          (if (and
              (listp punkt1)
              (listp punkt2)
              (= (length punkt1) 3)
              (= (length punkt2) 3))
            (progn
              (setq x1 (car punkt1)
                    y1 (cadr punkt1)
                    z1 (caddr punkt1)
                    x2 (car punkt2)
                    y2 (cadr punkt2)
                    z2 (caddr punkt2)
              )
              (setq dx (- x2 x1)
                    dy (- y2 y1)
                    dz (- z2 z1)
                    dlugosc (sqrt (+ (* dx dx) (* dy dy)))
                    dlugosc (zaokraglaj2 dlugosc)
              )
            )
            (princ "Błąd metody ortogonalnej 1\n")
          )
          (setq kat-rad (angle punkt1 punkt2))
          (setvar "TEXTSIZE" (atof THORTO))
          (setq theMText000 (vla-addtext mspace " 0.00" (vlax-3d-point punkt1) (atof THORTO)))
          (vla-put-Rotation theMText000 (- kat-rad (/ pi 2)))
          (vla-put-alignment theMText000 acAlignmentTopLeft)
          (vla-put-textalignmentpoint theMText000 (vlax-3d-point punkt1))
          (setq theMTextkoniec (vla-addtext mspace (strcat " " dlugosc) (vlax-3d-point punkt2) (atof THORTO)))
          (vla-put-Rotation theMTextkoniec (- kat-rad (/ pi 2)))
          (vla-put-alignment theMTextkoniec acAlignmentBottomLeft)
          (vla-put-textalignmentpoint theMTextkoniec (vlax-3d-point punkt2))
          (setq dlugosclp (1- (strlen dlugosc)))
          (setq lp1x1 (+ x2 (* (* (atof THORTO) 0.5) (cos (- kat-rad (/ pi 2))))))
          (setq lp1y1 (+ y2 (* (* (atof THORTO) 0.5) (sin (- kat-rad (/ pi 2))))))
          (setq lp1x2 (+ x2 (* (* (atof THORTO) (* dlugosclp 1.1)) (cos (- kat-rad (/ pi 2))))))
          (setq lp1y2 (+ y2 (* (* (atof THORTO) (* dlugosclp 1.1)) (sin (- kat-rad (/ pi 2))))))
          (setq lp1 (vla-addline mspace (vlax-3d-point lp1x1 lp1y1 0.0) (vlax-3d-point lp1x2 lp1y2 0.0)))
          (vla-put-Linetype lp1 "Continuous")
          (setvar "CELTYPE" currentLineType)
          (setq offset (* (atof THORTO) -0.2))
          (setq angle3 (atan (sin (- kat-rad (/ pi 2))) (cos (- kat-rad (/ pi 2)))))
          (setq lp2x1 (+ lp1x1 (* offset (cos (+ angle3 (/ pi 2))))))
          (setq lp2y1 (+ lp1y1 (* offset (sin (+ angle3 (/ pi 2))))))
          (setq lp2x2 (+ lp1x2 (* offset (cos (+ angle3 (/ pi 2))))))
          (setq lp2y2 (+ lp1y2 (* offset (sin (+ angle3 (/ pi 2))))))
          (setq lp2 (vla-addline mspace (vlax-3d-point lp2x1 lp2y1 0.0) (vlax-3d-point lp2x2 lp2y2 0.0)))
          (vla-put-Linetype lp2 "Continuous")
          (setvar "CELTYPE" currentLineType)
          (setq strzalkax1 (+ x1 (* (* (atof THORTO) 1.6) (cos (- kat-rad (/ pi 2))))))
          (setq strzalkay1 (+ y1 (* (* (atof THORTO) 1.6) (sin (- kat-rad (/ pi 2))))))
          (entmake
            (list
              (cons 0 "INSERT")
              (cons 2 "STRZALKA")
              (cons 10 (list strzalkax1 strzalkay1 0.0))
              (cons 41 (* (atof THORTO) 10)) ;; Skala X
              (cons 42 (* (atof THORTO) 10)) ;; Skala Y
              (cons 43 (* (atof THORTO) 10)) ;; Skala Z
              (cons 50 (- kat-rad (/ pi 2))) ;; Kąt rotacji
            )
          ) 
          (while
            (setq punkt3 (getpoint "\nWskaż punkt do zrzutowania: "))
            (setq u (mapcar '- punkt2 punkt1))
            (setq v (mapcar '- punkt3 punkt1))
            (setq projection (/ (apply '+ (mapcar '* u v)) (apply '+ (mapcar '* u u))))
            (setq proj-point (mapcar '+ punkt1 (mapcar '* (list projection projection projection) u)))
            (if (and (>= (car proj-point) (min (car punkt1) (car punkt2)))
                  (<= (car proj-point) (max (car punkt1) (car punkt2)))
                  (>= (cadr proj-point) (min (cadr punkt1) (cadr punkt2)))
                  (<= (cadr proj-point) (max (cadr punkt1) (cadr punkt2)))
                  (>= (caddr proj-point) (min (caddr punkt1) (caddr punkt2)))
                  (<= (caddr proj-point) (max (caddr punkt1) (caddr punkt2))))
              (progn
                (setq punkt4 (vlax-curve-getClosestPointTo linia punkt3))  
                (setq linia2 (vla-addline mspace (vlax-3d-point punkt3) (vlax-3d-point punkt4)))
                (vla-put-Linetype linia2 "OrtoDashed")
                (setvar "CELTYPE" currentLineType)
                (setq x3 (car punkt3)
                      y3 (cadr punkt3)
                      z3 (caddr punkt3)
                      x4 (car punkt4)
                      y4 (cadr punkt4)
                      z4 (caddr punkt4)
                      rzut-dx (- x4 x1)
                      rzut-dy (- y4 y1)
                      rzut-dz (- z4 z1)
                      rzut-dlugosc (sqrt (+ (* rzut-dx rzut-dx) (* rzut-dy rzut-dy)))
                      rzut-dlugosc (zaokraglaj2 rzut-dlugosc)
                      czol-dx (- x4 x3)
                      czol-dy (- y4 y3)
                      czol-dz (- z4 z3)
                      czol-dlugosc (sqrt (+ (* czol-dx czol-dx) (* czol-dy czol-dy)))
                      czol-dlugosc (zaokraglaj2 czol-dlugosc)
                )
                (setq srodekX (/ (+ x3 x4) 2.0))
                (setq srodekY (/ (+ y3 y4) 2.0))
                (setq rzut-kat-rad (angle punkt3 punkt4))
                (setq theMTextrzutdlugosc (vla-addtext mspace (strcat " " rzut-dlugosc " ") (vlax-3d-point punkt4) (atof THORTO)))
                (setq side (- (* (- x2 x1) (- y3 y1)) (* (- y2 y1) (- x3 x1))))
                (vla-put-Rotation theMTextrzutdlugosc (- kat-rad (/ pi 2)))
                (if (< side 0)
                  (vla-put-alignment theMTextrzutdlugosc acAlignmentMiddleRight)
                  (vla-put-alignment theMTextrzutdlugosc acAlignmentMiddleLeft)
                )
                (vla-put-textalignmentpoint theMTextrzutdlugosc (vlax-3d-point punkt4))
                (setq theMTextczolowka (vla-addtext mspace (strcat "- " czol-dlugosc " -") (vlax-3d-point srodekX srodekY 0.0) (atof THORTO)))
                (vla-put-Rotation theMTextczolowka (- kat-rad (/ pi 2)))
                (vla-put-alignment theMTextczolowka acAlignmentBottomCenter)
                (vla-put-textalignmentpoint theMTextczolowka (vlax-3d-point srodekX srodekY 0.0))
              )
              (princ "\nRzut prostokątny punktu znajduje się poza linią odciętej.")
            )
          )
          (princ)
        )
        (defun STRZALKA (/ blockName circleObj lineObj blk)   ;------------- BLOCK STRZALKA
          (setq blockName "STRZALKA")
          (if (not (tblsearch "block" blockName))   ;; Sprawdzenie, czy blok już istnieje
            (progn
              (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) blockName))
              (setq lineObj1 (vla-addline blk (vlax-3d-point 0 0 0) (vlax-3d-point 0 0.12 0)))
              (setq lineObj2 (vla-addline blk (vlax-3d-point 0 0.12 0) (vlax-3d-point -0.0233 0.0723 0)))
              (setq lineObj3 (vla-addline blk (vlax-3d-point 0 0.12 0) (vlax-3d-point 0.0233 0.0723 0)))
            )
          )
        )
      ;----------------- WSTAWIANIE SEKCJI
        (defun SIATKA_KRZYZY (x y nazwa gruboscLinii odlMiedzyKrzyzami polowaKrzyza iloscPrawo iloscGora /)
          (progn

            (UTWORZ_WARSTWE nazwa 7 "Continuous" gruboscLinii "1")

            (setq
              licznik1 0
              licznik2 0
              listaLinii (list)
            )

            (repeat iloscGora
              (progn

          (repeat iloscPrawo
            (progn

              ;
              (if (and (= licznik1 0) (= licznik2 0))
                (progn
            (setq
              p1 (polar (list 0 0) (* 0.5 pi) polowaKrzyza)
              p2 (polar (list 0 0) 0.00 polowaKrzyza)
              listaLinii (append listaLinii
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 (list 0.0 0.0))
                      (cons 11 p1)
                          )     )
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 (list 0.0 0.0))
                      (cons 11 p2)
                          )     )
                    )
            )
                      )
              )

              ;
              (if (and (= licznik1 0) (and (> licznik2 0)(< licznik2 (1- iloscPrawo))))
                (progn
            (setq
              p1 (list (+ 0.0 (*  odlMiedzyKrzyzami licznik2)) 0.0)
              p2 (polar p1 pi polowaKrzyza)
              p3 (polar p1 0.00 polowaKrzyza)
              p4 (polar p1 (* 0.5 pi) polowaKrzyza)
              listaLinii (append listaLinii
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p2)
                      (cons 11 p3)
                          )     )
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p1)
                      (cons 11 p4)
                          )     )
                    )
            )
                      )
              )

              (if (and (= licznik1 0) (= licznik2 (1- iloscPrawo)))
                (progn
            (setq
              p1 (list (+ 0.0 (*  odlMiedzyKrzyzami licznik2)) 0.0)
              p2 (polar p1 pi polowaKrzyza)
              p3 (polar p1 (* 0.5 pi) polowaKrzyza)
              listaLinii (append listaLinii
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p1)
                      (cons 11 p2)
                          )     )
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p1)
                      (cons 11 p3)
                          )     )
                    )
            )
                      )
              )

              (if (and (> licznik1 0) (< licznik1 (1- iloscGora)))
                (progn

            (if (= licznik2 0)
              (progn
                (setq
                  p1 (list 0.0 (+ 0.0 (* licznik1 odlMiedzyKrzyzami)))
                  p2 (polar p1 (* 0.5 pi) polowaKrzyza)
                  p3 (polar p1 (* 1.5 pi) polowaKrzyza)
                  p4 (polar p1 0.00 polowaKrzyza)
                  listaLinii (append listaLinii
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p2)
                      (cons 11 p3)
                          )     )
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p1)
                      (cons 11 p4)
                          )     )
                    )
                )
              )
            )

            (if (and (> licznik2 0) (< licznik2 (1- iloscPrawo)))
              (progn
                (setq
                  p1 (list (+ 0.0 (* licznik2 odlMiedzyKrzyzami))  (+ 0.0 (* licznik1 odlMiedzyKrzyzami)))
                  p2 (polar p1 pi polowaKrzyza)
                  p3 (polar p1 0.00 polowaKrzyza)
                  p4 (polar p1 (* 0.5 pi) polowaKrzyza)
                  p1 (polar p4 (* 1.5 pi) (* 2 polowaKrzyza))
                  listaLinii (append listaLinii
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p2)
                      (cons 11 p3)
                          )     )
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p1)
                      (cons 11 p4)
                          )     )
                    )
                )
              )
            )

            (if (= licznik2 (1- iloscPrawo))
              (progn
                
                (setq
                  p1 (list (+ 0.0 (* licznik2 odlMiedzyKrzyzami)) (+ 0.0 (* licznik1 odlMiedzyKrzyzami)))
                  p2 (polar p1 (* 0.5 pi) polowaKrzyza)
                  p3 (polar p1 (* 1.5 pi) polowaKrzyza)
                  p4 (polar p1 pi polowaKrzyza)
                  listaLinii (append listaLinii
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p2)
                      (cons 11 p3)
                          )     )
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p1)
                      (cons 11 p4)
                          )     )
                    )
                )
              )
            )
            
                      )
              )

              ;
              (if (= licznik1 (1- iloscGora))
                (progn

            (if (= licznik2 0)
              (progn
                (setq
                  p1 (list 0.0 (+ 0.0 (* licznik1 odlMiedzyKrzyzami)))
                  p2 (polar p1 (* 0.0 pi) polowaKrzyza)
                  p3 (polar p1 (* 1.5 pi) polowaKrzyza)
                  listaLinii (append listaLinii
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p1)
                      (cons 11 p2)
                          )     )
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p1)
                      (cons 11 p3)
                          )     )
                    )
                )
              )
            )

            (if (and (> licznik2 0) (< licznik2 (1- iloscPrawo)))
              (progn
                (setq
                  p1 (list (+ 0.0 (* licznik2 odlMiedzyKrzyzami)) (+ 0.0 (* licznik1 odlMiedzyKrzyzami)))
                  p2 (polar p1 (* 0.0 pi) polowaKrzyza)
                  p3 (polar p1 (* 1.5 pi) polowaKrzyza)
                  p4 (polar p1 pi polowaKrzyza)
                  listaLinii (append listaLinii
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p2)
                      (cons 11 p4)
                          )     )
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p1)
                      (cons 11 p3)
                          )     )
                    )
                )
              )
            )

            (if (= licznik2 (1- iloscPrawo))
              (progn
                (setq
                  p1 (list (+ 0.0 (* licznik2 odlMiedzyKrzyzami)) (+ 0.0 (* licznik1 odlMiedzyKrzyzami)))
                  p2 (polar p1 pi polowaKrzyza)
                  p3 (polar p1 (* 1.5 pi) polowaKrzyza)
                  listaLinii (append listaLinii
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p1)
                      (cons 11 p2)
                          )     )
                    (list (list
                      (cons 0 "LINE")
                      (cons 100 "AcDbEntity")
                      (cons 8 nazwa)
                      (cons 100 "AcDbLine")
                      (cons 10 p1)
                      (cons 11 p3)
                          )     )
                    )
                )
              )
            )

            
                      )
              )
              

              

              (setq licznik2 (1+ licznik2))
              
            )
          )

          (setq
            licznik1 (1+ licznik1)
            licznik2 0
          )
          
              )
            )

            
            (if
              (= (tblsearch "block" nazwa) nil)
              (progn
          (entmake (list (cons 0 "BLOCK") (cons 2 nazwa) (cons 70 0) (cons 10 (list 0 0 0))))
          
          (RYSUJ_LINIE_Z_LISTY_SIATKAKRZYZY listaLinii)
          ;--------------------------------------------
          (entmake '((0 . "ENDBLK"))) ;koniec def bloku
          ;wstawienie bloku, w przypadku definiowania bloku
          (entmake (list (cons 0 "insert") (cons 2 nazwa) (cons 10 (list y x)) (cons 8 nazwa)))
              );progn
              ;
              (progn ;else - jezeli definicja bloku juz jest
          (entmake (list (cons 0 "insert") (cons 2 nazwa) (cons 10 (list y x)) (cons 8 nazwa)))
              );progn
            )
            ;
            (princ)
          )
          (princ)
        )
        (defun RYSUJ_LINIE_Z_LISTY_SIATKAKRZYZY (listaLinii /
                  licznik3 dlugosc elem
                  )
          (progn

            (setq licznik3 0
            dlugosc (length listaLinii)
            )

            (repeat dlugosc
              (progn
          (setq
            elem (nth licznik3 listaLinii)
          )
          
          (entmake elem)

          (setq licznik3 (1+ licznik3))
              )
            )
            
          )
        )
        (defun GODLO2000 (wspl sekcja /
          ;;;	      x y
          ;;;	      pierwszaLiczba
          ;;;	      xi yi
          ;;;	      drugaLiczba
          ;;;	      trzeciaLiczba
          ;;;	      xl yl_1 yl_2 yl
          ;;;	      wsplLewyDolnyRog
          ;;;	      xldr yldr
          ;;;	      opis
                )
          (progn
            
            (setq
              x (nth 1 wspl)
              xStr (rtos x 2 2)
              y (nth 0 wspl)
              yStr (rtos y 2 2)
              ;
              pierwszaLiczba (substr yStr 1 1)
              ;
              xi (* 0.001 x)
              yi (- (atof (substr yStr 2 3)) 332)
              ;
              drugaLiczba (fix (/ (- xi 4920) 5))
              trzeciaLiczba (fix (/ yi 8))
              ;
              ;obliczenie lewego dolnego rogu sekcji 1:10000
              xl (* (+ (* drugaLiczba 5) 4920) 1000)
              yl_1 (+ (* trzeciaLiczba 8) 332)
              yl_2 (strcat pierwszaLiczba (rtos yl_1 2 0))
              yl (* (atof yl_2) 1000)
              ;
              ;rogi sekcji 1:10000
              wsplLewyDolnyRog (list yl xl)
              xldr (nth 1 wsplLewyDolnyRog)
              yldr (nth 0 wsplLewyDolnyRog)
              ;
              
              ;xp1 (nth 1 p1)
              ;yp1 (nth 0 p1)
              ;
              
              ;xp2 (nth 1 p2)
              ;yp2 (nth 0 p2)
              ;
              
              ;xp3 (nth 1 p3)
              ;yp3 (nth 0 p3)
              ;
              opis (strcat pierwszaLiczba "." (rtos drugaLiczba 2 0) "." (rtos trzeciaLiczba 2 0))
            )

            ;sekcja 10000
            (if (= sekcja "10000")
              (RYSUJ_SEKCJA_10000 wsplLewyDolnyRog "sekcja 1_10_000" opis 200.00)
            )
            ;
            (if (= sekcja "5000")
              (RYSUJ_SEKCJA_5000 xldr yldr "sekcja 1_5_000" opis 100.00)
            )
            ;
            (if (= sekcja "2000")
              (RYSUJ_SEKCJA_2000 xldr yldr "sekcja 1_2_000" opis 50.00)
            )
            ;
            (if (= sekcja "1000")
              (RYSUJ_SEKCJA_1000 xldr yldr "sekcja 1_1_000" opis 25.00)
            )
            ;
            (if (= sekcja "500")
              (RYSUJ_SEKCJA_500 xldr yldr "sekcja 1_5_00" opis 12.50)
            )
            ;
            (princ)
          )
        )
        (defun RYSUJ_SEKCJA_10000 (wsplLewyDolnyRog nazwaWarstwy text wysokoscTekstu /
                nazwaWarstwyOpis
                p1 p2 p3
                b1
                )
          (progn

            (setq
              nazwaWarstwyOpis (strcat nazwaWarstwy "_opis")
              ;
              p1 (polar wsplLewyDolnyRog 0.00 8000)
              p2 (polar p1 (* 0.5 pi) 5000)
              p3 (polar p2 pi 8000)
              ;
              b1 (inters wsplLewyDolnyRog p2 p1 p3)
            )

            (UTWORZ_WARSTWE nazwaWarstwy 7 "Continuous" 1.0 "0")
            (UTWORZ_WARSTWE nazwaWarstwyOpis  7 "Continuous" 1.0 "0")

            (RYSUJ_POLILINIE (list wsplLewyDolnyRog p1 p2 p3) nazwaWarstwy 0.0 1)
            ;                     listaPunktow nazwaWarstwy szerokosc czyZamknac

            (RYSUJ_TEKST nazwaWarstwyOpis wysokoscTekstu text b1 0.0 "Fl_pochyle" 0 1 2)
            ;nazwaWarstwy wysokoscTesktu text pktWstawienia kat stylTekstu atr71 atr72 atr73
          )
        )
        (defun RYSUJ_SEKCJA_5000 (xldr yldr nazwaWarstwy text wysokoscTekstu /
                ;nazwaWarstwyOpis
                ;licznik licznik2
                ;dx dy
                ;ex1 ey1
                ;ukladLicznikow
                ;ex2 ey2
                ;ex3 ey3
                ;ex4 ey4
                ;b1 opis2
                ;c1 c2 c3 c4
                )
          (progn

            (setq
              nazwaWarstwyOpis (strcat nazwaWarstwy "_opis")
              ;
              licznik 1
              licznik2 1
              dx 2500
              dy 4000
              ex1 xldr
              ey1 yldr	      
            )

            (UTWORZ_WARSTWE nazwaWarstwy 7 "Continuous" 0.5 "0")
            (UTWORZ_WARSTWE nazwaWarstwyOpis  7 "Continuous" 0.5 "0")
              
            (repeat 2
              (progn

          (repeat 2
            (progn
              
              (setq
                ukladLicznikow (strcat "(" (rtos licznik 2 0) "," (rtos licznik2 2 0) ")")
                ;
                ex2 (+ ex1 0)
                ey2 (+ ey1 dy)
                ;
                ex3 (+ ex1 dx)
                ey3 (+ ey1 dy)
                ;
                ex4 (+ ex1 dx)
                ey4 (+ ey1 0)
              )

              (if (and
              (and (>= x ex1) (>= y ey1))
              (and (>= x ex2) (<= y ey2))
              (and (< x ex3) (< y ey3))
              (and (<= x ex4) (>= y ey4))
            )
                (progn

            (setq
              b1 (inters (list ey1 ex1)(list ey3 ex3)(list ey4 ex4)(list ey2 ex2))
              opis2 (strcat text "." (CO_DODAC_DO_GODLA ukladLicznikow))
              c1 (list ey1 ex1)
              c2 (list ey2 ex2)
              c3 (list ey3 ex3)
              c4 (list ey4 ex4)
            )

            (RYSUJ_TEKST nazwaWarstwyOpis wysokoscTekstu opis2 b1 0.0 "Fl_pochyle" 0 1 2)
            ;nazwaWarstwy wysokoscTesktu text pktWstawienia kat stylTekstu atr71 atr72 atr73

            (RYSUJ_POLILINIE (list c1 c2 c3 c4) nazwaWarstwy 0.0 1)
            ;       listaPunktow nazwaWarstwy szerokosc czyZamknac

            (SIATKA_KRZYZY ex1 ey1 "siatka5000" 0.05 500.00 25.0 9 6)
            ;              xPoczatku yPoczatku nazwaWarstwy gruboscLinii polowaKrzyza iloscLewo iloscGora
            
                )
              )
              
              (setq ey1 (+ ey1 dy))
              (setq licznik2 (1+ licznik2))

            )
          )

          (setq
            ex1 (+ ex1 dx)
            ey1 yldr
            licznik2 1
            licznik (1+ licznik)
          )
              )
            )
            
          )
        )
        (defun RYSUJ_SEKCJA_2000 (xldr yldr nazwaWarstwy text wysokoscTekstu /
                nazwaWarstwyOpis
                licznik licznik2
                dx dy
                ex1 ey1
                ex2 ey2
                ex3 ey3
                ex4 ey4
                b1 opis2
                c1 c2 c3 c4
                )
          (progn
            
            (setq
              nazwaWarstwyOpis (strcat nazwaWarstwy "_opis")
              ;
              licznik 1
              licznik2 1
              dx 1000
              dy 1600
              ex1 xldr
              ey1 yldr	      
            )

            (UTWORZ_WARSTWE nazwaWarstwy 7 "Continuous" 0.25 "0")
            (UTWORZ_WARSTWE nazwaWarstwyOpis  7 "Continuous" 0.25 "0")
            
            (repeat 5
              (progn
          
          (repeat 5
            (progn
              
              (setq
                ukladLicznikow (strcat "(" (rtos licznik 2 0) "," (rtos licznik2 2 0) ")")
                ;
                ex2 (+ ex1 0)
                ey2 (+ ey1 dy)
                ;
                ex3 (+ ex1 dx)
                ey3 (+ ey1 dy)
                ;
                ex4 (+ ex1 dx)
                ey4 (+ ey1 0)
              )
              
              (if (and
              (and (>= x ex1) (>= y ey1))
              (and (>= x ex2) (<= y ey2))
              (and (< x ex3) (< y ey3))
              (and (<= x ex4) (>= y ey4))
              )
                (progn
            (setq
              b1 (inters (list ey1 ex1)(list ey3 ex3)(list ey4 ex4)(list ey2 ex2))
              opis2 (strcat text "." (CO_DODAC_DO_GODLA_2000 ukladLicznikow))
              c1 (list ey1 ex1)
              c2 (list ey2 ex2)
              c3 (list ey3 ex3)
              c4 (list ey4 ex4)
              )

            (RYSUJ_TEKST nazwaWarstwyOpis wysokoscTekstu opis2 b1 0.0 "Fl_pochyle" 0 1 2)
            ;nazwaWarstwy wysokoscTesktu text pktWstawienia kat stylTekstu atr71 atr72 atr73

            (RYSUJ_POLILINIE (list c1 c2 c3 c4) nazwaWarstwy 0.0 1)
            ;       listaPunktow nazwaWarstwy szerokosc czyZamknac

            (SIATKA_KRZYZY ex1 ey1 "siatka2000" 0.13 200.00 10.0 9 6)
            ;              xPoczatku yPoczatku nazwaWarstwy gruboscLinii polowaKrzyza iloscLewo iloscGora

                )
              )	        

              (setq ey1 (+ ey1 dy))
              (setq licznik2 (1+ licznik2))
            )
          )
          
          (setq
            ex1 (+ ex1 dx)
            ey1 yldr
            licznik2 1
            licznik (1+ licznik)
          )
              )
            )
          )
        )
        (defun RYSUJ_SEKCJA_1000 (xldr yldr nazwaWarstwy text wysokoscTekstu /
                nazwaWarstwyOpis
                licznik licznik2
                dx dy
                ex1 ey1
                ex2 ey2
                ex3 ey3
                ex4 ey4
                b1 opis2
                c1 c2 c3 c4
                licznik3 licznik4
                fx1 fy1
                fx2 fy2
                fx3 fy3
                fx4 fy4
                opis3
                d1 d2 d3 d4
                )
          (progn
            
            (setq
              nazwaWarstwyOpis (strcat nazwaWarstwy "_opis")
              ;
              licznik 1
              licznik2 1
              dx 1000
              dy 1600
              ex1 xldr
              ey1 yldr	      
            )

            (UTWORZ_WARSTWE nazwaWarstwy 7 "Continuous" 0.125 "0")
            (UTWORZ_WARSTWE nazwaWarstwyOpis  7 "Continuous" 0.125 "0")
            
            (repeat 5
              (progn
          
          (repeat 5
            (progn
              
              (setq
                ukladLicznikow (strcat "(" (rtos licznik 2 0) "," (rtos licznik2 2 0) ")")
                ;
                ex2 (+ ex1 0)
                ey2 (+ ey1 dy)
                ;
                ex3 (+ ex1 dx)
                ey3 (+ ey1 dy)
                ;
                ex4 (+ ex1 dx)
                ey4 (+ ey1 0)
              )
              
              (if (and
              (and (>= x ex1) (>= y ey1))
              (and (>= x ex2) (<= y ey2))
              (and (< x ex3) (< y ey3))
              (and (<= x ex4) (>= y ey4))
              )
                (progn
            (setq
              b1 (inters (list ey1 ex1)(list ey3 ex3)(list ey4 ex4)(list ey2 ex2))
              opis2 (strcat text "." (CO_DODAC_DO_GODLA_2000 ukladLicznikow))
              c1 (list ey1 ex1)
              c2 (list ey2 ex2)
              c3 (list ey3 ex3)
              c4 (list ey4 ex4)
              )
            ;
            ;
            ;

            ;definicja dla skali 1:1000
            (setq
              licznik3 1
              licznik4 1
              fx1 ex1
              fy1 ey1
            )
                  
            (repeat 2
              (progn

                (repeat 2
                  (progn
              
              (setq
                ukladLicznikow2 (strcat "(" (rtos licznik3 2 0) "," (rtos licznik4 2 0) ")")
                ;
                fx2 (+ fx1 0)
                fy2 (+ fy1 800)
                ;
                fx3 (+ fx1 500)
                fy3 (+ fy1 800)
                ;
                fx4 (+ fx1 500)
                fy4 (+ fy1 0)
              )

              (if (and
                    (and (>= x fx1) (>= y fy1))
                    (and (>= x fx2) (<= y fy2))
                    (and (< x fx3) (< y fy3))
                    (and (<= x fx4) (>= y fy4))
                  )

                (progn
                  
                  (setq
                    b1 (inters (list fy1 fx1)(list fy3 fx3)(list fy4 fx4)(list fy2 fx2))
                    opis3 (strcat opis2 "." (CO_DODAC_DO_GODLA ukladLicznikow2))
                    d1 (list fy1 fx1)
                    d2 (list fy2 fx2)
                    d3 (list fy3 fx3)
                    d4 (list fy4 fx4)
                  )

                  (RYSUJ_TEKST nazwaWarstwyOpis wysokoscTekstu opis3 b1 0.0 "Fl_pochyle" 0 1 2)
                  ;nazwaWarstwy wysokoscTesktu text pktWstawienia kat stylTekstu atr71 atr72 atr73

                  (RYSUJ_POLILINIE (list d1 d2 d3 d4) nazwaWarstwy 0.0 1)
                  ;       listaPunktow nazwaWarstwy szerokosc czyZamknac

                  (SIATKA_KRZYZY fx1 fy1 "siatka1000" 0.13 100.00 5.0 9 6)
                  ;              xPoczatku yPoczatku nazwaWarstwy gruboscLinii polowaKrzyza iloscLewo iloscGora
                  
                )
              )

              (setq fy1 (+ fy1 800))
              (setq licznik4 (1+ licznik4))

                  )
                )

                (setq
                  fx1 (+ fx1 500)
                  fy1 ey1
                  licznik4 1
                  licznik3 (1+ licznik3)
                )
                
              )
            )

                )
              )	        

              (setq ey1 (+ ey1 dy))
              (setq licznik2 (1+ licznik2))
            )
          )
          
          (setq
            ex1 (+ ex1 dx)
            ey1 yldr
            licznik2 1
            licznik (1+ licznik)
          )
              )
            )
          )
        )
        (defun RYSUJ_SEKCJA_500 (xldr yldr nazwaWarstwy text wysokoscTekstu /
                nazwaWarstwyOpis
                licznik licznik2
                dx dy
                ex1 ey1
                ex2 ey2
                ex3 ey3
                ex4 ey4
                b1 opis2
                c1 c2 c3 c4
                licznik3 licznik4
                fx1 fy1
                fx2 fy2
                fx3 fy3
                fx4 fy4
                opis3
                d1 d2 d3 d4
                licznik5 licznik6
                gx1 gy1
                gx2 gy2
                gx3 gy3
                gx4 gy4
                opis4
                e1 e2 e3 e4
              )
          (progn
            
            (setq
              nazwaWarstwyOpis (strcat nazwaWarstwy "_opis")
              ;
              licznik 1
              licznik2 1
              dx 1000
              dy 1600
              ex1 xldr
              ey1 yldr	      
            )

            (UTWORZ_WARSTWE nazwaWarstwy 7 "Continuous" 0.0625 "0")
            (UTWORZ_WARSTWE nazwaWarstwyOpis  7 "Continuous" 0.0625 "0")
            
            (repeat 5
              (progn
          
          (repeat 5
            (progn
              
              (setq
                ukladLicznikow (strcat "(" (rtos licznik 2 0) "," (rtos licznik2 2 0) ")")
                ;
                ex2 (+ ex1 0)
                ey2 (+ ey1 dy)
                ;
                ex3 (+ ex1 dx)
                ey3 (+ ey1 dy)
                ;
                ex4 (+ ex1 dx)
                ey4 (+ ey1 0)
              )
              
              (if (and
              (and (>= x ex1) (>= y ey1))
              (and (>= x ex2) (<= y ey2))
              (and (< x ex3) (< y ey3))
              (and (<= x ex4) (>= y ey4))
              )
                (progn
            (setq
              b1 (inters (list ey1 ex1)(list ey3 ex3)(list ey4 ex4)(list ey2 ex2))
              opis2 (strcat text "." (CO_DODAC_DO_GODLA_2000 ukladLicznikow))
              c1 (list ey1 ex1)
              c2 (list ey2 ex2)
              c3 (list ey3 ex3)
              c4 (list ey4 ex4)
              )
            ;
            ;
            ;

            ;definicja dla skali 1:1000
            (setq
              licznik3 1
              licznik4 1
              fx1 ex1
              fy1 ey1
            )
                  
            (repeat 2
              (progn

                (repeat 2
                  (progn
              
              (setq
                ukladLicznikow2 (strcat "(" (rtos licznik3 2 0) "," (rtos licznik4 2 0) ")")
                ;
                fx2 (+ fx1 0)
                fy2 (+ fy1 800)
                ;
                fx3 (+ fx1 500)
                fy3 (+ fy1 800)
                ;
                fx4 (+ fx1 500)
                fy4 (+ fy1 0)
              )

              (if (and
                    (and (>= x fx1) (>= y fy1))
                    (and (>= x fx2) (<= y fy2))
                    (and (< x fx3) (< y fy3))
                    (and (<= x fx4) (>= y fy4))
                  )

                (progn
                  
                  (setq
                    b1 (inters (list fy1 fx1)(list fy3 fx3)(list fy4 fx4)(list fy2 fx2))
                    opis3 (strcat opis2 "." (CO_DODAC_DO_GODLA ukladLicznikow2))
                    d1 (list fy1 fx1)
                    d2 (list fy2 fx2)
                    d3 (list fy3 fx3)
                    d4 (list fy4 fx4)
                  )

                  (setq
                    licznik5 1
                    licznik6 1
                    gx1 fx1
                    gy1 fy1
                  )
                  
                  (repeat 2
                    (progn
                
                (repeat 2
                  (progn

                    (setq
                      ukladLicznikow3 (strcat "(" (rtos licznik5 2 0) "," (rtos licznik6 2 0) ")")
                      ;
                      gx2 (+ gx1 0)
                      gy2 (+ gy1 400)
                      ;
                      gx3 (+ gx1 250)
                      gy3 (+ gy1 400)
                      ;
                      gx4 (+ gx1 250)
                      gy4 (+ gy1 0)
                    )

                    (if (and
                    (and (>= x gx1) (>= y gy1))
                    (and (>= x gx2) (<= y gy2))
                    (and (< x gx3) (< y gy3))
                    (and (<= x gx4) (>= y gy4))
                  )
                      (progn
                  (setq
                    b1 (inters (list gy1 gx1)(list gy3 gx3)(list gy4 gx4)(list gy2 gx2))
                    opis4 (strcat opis3 "." (CO_DODAC_DO_GODLA ukladLicznikow3))
                    e1 (list gy1 gx1)
                    e2 (list gy2 gx2)
                    e3 (list gy3 gx3)
                    e4 (list gy4 gx4)
                  )

                  (RYSUJ_TEKST nazwaWarstwyOpis wysokoscTekstu opis4 b1 0.0 "Fl_pochyle" 0 1 2)
                  ;nazwaWarstwy wysokoscTesktu text pktWstawienia kat stylTekstu atr71 atr72 atr73

                  (RYSUJ_POLILINIE (list e1 e2 e3 e4) nazwaWarstwy 0.0 1)
                  ;       listaPunktow nazwaWarstwy szerokosc czyZamknac

                  (SIATKA_KRZYZY gx1 gy1 "siatka500" 0.18 50.00 2.5 9 6)
                  ;              xPoczatku yPoczatku nazwaWarstwy gruboscLinii polowaKrzyza iloscLewo iloscGora
                  
                      )
                    )

                    (setq gy1 (+ gy1 400))
                    (setq licznik6 (1+ licznik6))
                    
                  )
                )
                
                (setq
                  gx1 (+ gx1 250)
                  gy1 fy1
                  licznik6 1
                  licznik5 (1+ licznik5)
                )	
                    )
                  )  
                )
              )

              (setq fy1 (+ fy1 800))
              (setq licznik4 (1+ licznik4))

                  )
                )

                (setq
                  fx1 (+ fx1 500)
                  fy1 ey1
                  licznik4 1
                  licznik3 (1+ licznik3)
                )
                
              )
            )

                )
              )	        

              (setq ey1 (+ ey1 dy))
              (setq licznik2 (1+ licznik2))
            )
          )
          
          (setq
            ex1 (+ ex1 dx)
            ey1 yldr
            licznik2 1
            licznik (1+ licznik)
          )
              )
            )
          )
        )
        (defun CO_DODAC_DO_GODLA_2000 (str /)
          (progn
            (if (= str "(1,1)") (setq dodac "21"))
            (if (= str "(1,2)") (setq dodac "22"))
            (if (= str "(1,3)") (setq dodac "23"))
            (if (= str "(1,4)") (setq dodac "24"))
            (if (= str "(1,5)") (setq dodac "25"))
            ;
            (if (= str "(2,1)") (setq dodac "16"))
            (if (= str "(2,2)") (setq dodac "17"))
            (if (= str "(2,3)") (setq dodac "18"))
            (if (= str "(2,4)") (setq dodac "19"))
            (if (= str "(2,5)") (setq dodac "20"))
            ;
            (if (= str "(3,1)") (setq dodac "11"))
            (if (= str "(3,2)") (setq dodac "12"))
            (if (= str "(3,3)") (setq dodac "13"))
            (if (= str "(3,4)") (setq dodac "14"))
            (if (= str "(3,5)") (setq dodac "15"))
            ;
            (if (= str "(4,1)") (setq dodac "06"))
            (if (= str "(4,2)") (setq dodac "07"))
            (if (= str "(4,3)") (setq dodac "08"))
            (if (= str "(4,4)") (setq dodac "09"))
            (if (= str "(4,5)") (setq dodac "10"))
            ;
            (if (= str "(5,1)") (setq dodac "01"))
            (if (= str "(5,2)") (setq dodac "02"))
            (if (= str "(5,3)") (setq dodac "03"))
            (if (= str "(5,4)") (setq dodac "04"))
            (if (= str "(5,5)") (setq dodac "05"))
            ;

            (if dodac (progn dodac))
          )
        )
        (defun CO_DODAC_DO_GODLA (str /)
          (progn
            (if (= str "(1,1)") (setq dodac "3"))
            (if (= str "(1,2)") (setq dodac "4"))
            ;
            (if (= str "(2,1)") (setq dodac "1"))
            (if (= str "(2,2)") (setq dodac "2"))
            ;
            (if dodac (progn dodac))
          )
        )
        (defun UTWORZ_WARSTWE (nazwa kolor rodzajLinii gruboscLinii CzyDrukowac /)
          (progn
          ;; Sprawdzenie, czy warstwa już istnieje
          (if (= (tblsearch "LAYER" nazwa) nil)
            (progn
              (entmakex
                (list
                  (cons 0 "LAYER")          ; Typ obiektu
                  (cons 100 "AcDbSymbolTableRecord")
                  (cons 100 "AcDbLayerTableRecord")
                  (cons 2 nazwa)       ; Nazwa warstwy
                  (cons 70 0)               ; Flagi warstwy (np. warstwa jest włączona)
                  (cons 62 kolor)           ; Kolor warstwy (np. 1 dla czerwonego)
                  (cons 6 rodzajLinii) 
                  (cons 290 (atoi CzyDrukowac))
                )
              )
            )
          )

            (princ)
          )
        )
        (defun RYSUJ_POLILINIE (listaPunktow nazwaWarstwy szerokosc czyZamknac /)
          (progn
            (setq
              dlugoscListy (length listaPunktow)
              licznik 0
              nowaListaPunktow (list)
              nowaLista (list)
            )

            (repeat dlugoscListy
              (progn
          (setq
            element (nth licznik listaPunktow)
            nowaListaPunktow (append nowaListaPunktow (list (cons 10 element)))
          )
          (setq licznik (1+ licznik))
              )
            )

            (setq nowaLista (append
                  
                  (list
              (cons 0 "LWPOLYLINE")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbPolyline")
              (cons 8 nazwaWarstwy)
              (cons 43 szerokosc) ; sta�a szeroko�
              (cons 90 dlugoscListy) ; Ilo�� punkt�w
              (cons 70 czyZamknac) ; Czy polilinia jest zamkni�ta?
                  )
              
                  nowaListaPunktow
                  )
            )

            (entmake nowaLista)

            (princ)
            
          )
        )
        (defun RYSUJ_TEKST (nazwaWarstwy wysokoscTesktu text pktWstawienia kat stylTekstu atr71 atr72 atr73 /)
          (progn

            (entmake
              (list
          (cons 0 "TEXT")
          (cons 100 "AcDbEntity")
          (cons 8 nazwaWarstwy)
          (cons 100 "AcDbText")
          (cons 40 wysokoscTesktu) ;wysokosc tekstu
          (cons 1 text) ;opis
          (cons 10 pktWstawienia)
          (cons 50 kat) ;kat
          (cons 71 atr71)
          (cons 72 atr72)
          (cons 7 "Standard")
          (cons 11 pktWstawienia)
          (cons 210 (list 0.0 0.0 1.0))
          (cons 100 "AcDbText")
          (cons 73 atr73)
              )
            )
          )
        )
        (defun WSTAWSEKCJE (sekcja / wspl )
          (progn
            (if (not sekcja) 
              (setq sekcja "500")
            )
            (setq wspl (getpoint "\nWskaz punkt do wstawienia sekcji mapy: "))
            (while wspl
              (progn
                (GODLO2000 wspl sekcja)
                (setq wspl (getpoint "\nWskaz punkt do wstawienia sekcji mapy: "))
                (if (not wspl) 
                  (princ "\nKoniec dzialania programu.")
                )
              )
            )
            (princ)
          ) 
        )
        (defun OPISZ_KRZYZ (/)
          (setq old_cmdecho (getvar "cmdecho"))
          (setvar "cmdecho" 0)
          (UTWORZ_WARSTWE "Siatka_krzyzy_OPIS" 7 "Continuous" "0.18" "1")
          (while
            (setq KRZYZXY (getpoint "\nWskaż środek krzyża: "))
            (setq KRZYZX (zaokraglaj0 (nth 0 KRZYZXY)))
            (setq KRZYZY (zaokraglaj0 (nth 1 KRZYZXY)))
            (entmake
              (list
                (cons 0 "TEXT")
                (cons 100 "AcDbEntity")
                (cons 8 "Siatka_krzyzy_OPIS")
                (cons 100 "AcDbText")
                (cons 40 0.5) ;wysokosc tekstu
                (cons 1 KRZYZX) ;opis
                (cons 10 KRZYZXY)
                (cons 50 (/ pi 2)) ;kat
                (cons 7 "Standard")
                (cons 11 KRZYZXY)
                (cons 210 (list 0.0 0.0 1.0))  
              )
            )
            (entmake
              (list
                (cons 0 "TEXT")
                (cons 100 "AcDbEntity")
                (cons 8 "Siatka_krzyzy_OPIS")
                (cons 100 "AcDbText")
                (cons 40 0.5) ;wysokosc tekstu
                (cons 1 KRZYZY) ;opis
                (cons 10 KRZYZXY)
                (cons 50 0) ;kat
                (cons 7 "Standard")
                (cons 11 KRZYZXY)
                (cons 210 (list 0.0 0.0 1.0))  
              )
            )
            (setvar "cmdecho" old_cmdecho)
          )
          (princ)
        )
        (defun c:geostation/Form3/TextButton3#OnClicked (/)
          (dcl-Form-Show geostation/Form9)
          (princ)
        )
        (defun c:geostation/Form9/TextButton1#OnClicked (/)
          (dcl-Form-Close geostation/Form9)
          (WSTAWSEKCJE "500")
          (princ)
        )
        (defun c:geostation/Form9/TextButton2#OnClicked (/)
          (dcl-Form-Close geostation/Form9)
          (WSTAWSEKCJE "1000")
          (princ)
        )
        (defun c:geostation/Form9/TextButton3#OnClicked (/)
          (dcl-Form-Close geostation/Form9)
          (WSTAWSEKCJE "2000")
          (princ)
        )
        (defun c:geostation/Form9/TextButton4#OnClicked (/)
          (dcl-Form-Close geostation/Form9)
          (WSTAWSEKCJE "5000")
          (princ)
        )
        (defun c:geostation/Form9/TextButton5#OnClicked (/)
          (dcl-Form-Close geostation/Form9)
          (WSTAWSEKCJE "10000")
          (princ)
        )
        (defun c:geostation/Form9/TextButton6#OnClicked (/)
          (dcl-Form-Close geostation/Form9)
          (OPISZ_KRZYZ)
          (princ)
        )
        (defun c:geostation/Form9/TextButton7#OnClicked (/)
          (dcl-Form-Close geostation/Form9)
          (princ)
        )
      ;----------------- KARTA STUDNI
        (defun c:geostation/Form3/TextButton2#OnClicked (/) ;-------------- OKNO TWORZENIA KARTY STUDNI
          (dcl-Form-Show geostation/Form8)
          (princ)
        )
        (defun c:geostation/Form8/TextButton1#OnClicked (/) ;----------- OK BUTTON
          (USTAWIENIA)
          (KARTASTUDNI_RUN)
          (princ)
        )
        (defun c:geostation/Form8/TextButton2#OnClicked (/) ;------------ ANULUJ BUTTON
          (dcl-Form-Close geostation/Form8)
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton1#OnClicked (/) ;----------- GRAPHIC BUTTON XY STUDNIA
          (dcl-Form-Close geostation/Form8)
          (setq STUDNIAXY (getpoint "\nWskaż współrzędne studni: "))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox8 (zaokraglaj2 (nth 1 STUDNIAXY)))
          (dcl-Control-SetText geostation/Form8/TextBox9 (zaokraglaj2 (nth 0 STUDNIAXY)))
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton2#OnClicked (/) ;----------- GRAPHIC BUTTON XY WLOT1
          (dcl-Form-Close geostation/Form8)
          (setq WLOT1XY (getpoint "\nWskaż współrzędne dla wlotu/wylotu nr 1: "))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox19 (zaokraglaj2 (nth 1 WLOT1XY)))
          (dcl-Control-SetText geostation/Form8/TextBox18 (zaokraglaj2 (nth 0 WLOT1XY)))
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton3#OnClicked (/) ;----------- GRAPHIC BUTTON XY WLOT2
          (dcl-Form-Close geostation/Form8)
          (setq WLOT2XY (getpoint "\nWskaż współrzędne dla wlotu/wylotu nr 2: "))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox24 (zaokraglaj2 (nth 1 WLOT2XY)))
          (dcl-Control-SetText geostation/Form8/TextBox23 (zaokraglaj2 (nth 0 WLOT2XY)))
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton4#OnClicked (/) ;----------- GRAPHIC BUTTON XY WLOT3
          (dcl-Form-Close geostation/Form8)
          (setq WLOT3XY (getpoint "\nWskaż współrzędne dla wlotu/wylotu nr 3: "))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox29 (zaokraglaj2 (nth 1 WLOT3XY)))
          (dcl-Control-SetText geostation/Form8/TextBox28 (zaokraglaj2 (nth 0 WLOT3XY)))
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton5#OnClicked (/) ;----------- GRAPHIC BUTTON XY WLOT4
          (dcl-Form-Close geostation/Form8)
          (setq WLOT4XY (getpoint "\nWskaż współrzędne dla wlotu/wylotu nr 4: "))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox34 (zaokraglaj2 (nth 1 WLOT4XY)))
          (dcl-Control-SetText geostation/Form8/TextBox33 (zaokraglaj2 (nth 0 WLOT4XY)))
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton6#OnClicked (/) ;----------- GRAPHIC BUTTON XY WLOT5
          (dcl-Form-Close geostation/Form8)
          (setq WLOT5XY (getpoint "\nWskaż współrzędne dla wlotu/wylotu nr 5: "))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox39 (zaokraglaj2 (nth 1 WLOT5XY)))
          (dcl-Control-SetText geostation/Form8/TextBox38 (zaokraglaj2 (nth 0 WLOT5XY)))
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton7#OnClicked (/) ;----------- GRAPHIC BUTTON XY WLOT6
          (dcl-Form-Close geostation/Form8)
          (setq WLOT6XY (getpoint "\nWskaż współrzędne dla wlotu/wylotu nr 6: "))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox44 (zaokraglaj2 (nth 1 WLOT6XY)))
          (dcl-Control-SetText geostation/Form8/TextBox43 (zaokraglaj2 (nth 0 WLOT6XY)))
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton9#OnClicked (/) ;----------- GRAPHIC BUTTON CLEAR STUDNIA
          (setq reply-studnia (acet-ui-message "Czy na pewno chcesz zresetować wszystkie dane dotyczące studni?" "Potwierdzenie" 68))
          (if (= reply-studnia 6)
            (progn
              (dcl-Control-SetText geostation/Form8/TextBox8 "")
              (dcl-Control-SetText geostation/Form8/TextBox9 "")
              (dcl-Control-SetText geostation/Form8/TextBox10 "")
              (dcl-Control-SetText geostation/Form8/TextBox11 "")
              (dcl-Control-SetText geostation/Form8/TextBox48 "1200")
              (dcl-Control-SetText geostation/Form8/TextBox49 "")
              (dcl-Control-SetText geostation/Form8/TextBox50 "")
            )
          )
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton8#OnClicked (/) ;----------- GRAPHIC BUTTON CLEAR WLOTY
          (setq reply-wloty (acet-ui-message "Czy na pewno chcesz zresetować wszystkie dane dotyczące wlotów i wylotów?" "Potwierdzenie" 68))
          (if (= reply-wloty 6)
            (progn
              (dcl-Control-SetText geostation/Form8/TextBox12 "")
              (dcl-Control-SetText geostation/Form8/TextBox13 "")
              (dcl-Control-SetText geostation/Form8/TextBox14 "")
              (dcl-Control-SetText geostation/Form8/TextBox15 "")
              (dcl-Control-SetText geostation/Form8/TextBox16 "")
              (dcl-Control-SetText geostation/Form8/TextBox17 "")
              (dcl-Control-SetText geostation/Form8/TextBox18 "")
              (dcl-Control-SetText geostation/Form8/TextBox19 "")
              (dcl-Control-SetText geostation/Form8/TextBox20 "")
              (dcl-Control-SetText geostation/Form8/TextBox21 "")
              (dcl-Control-SetText geostation/Form8/TextBox22 "")
              (dcl-Control-SetText geostation/Form8/TextBox23 "")
              (dcl-Control-SetText geostation/Form8/TextBox24 "")
              (dcl-Control-SetText geostation/Form8/TextBox25 "")
              (dcl-Control-SetText geostation/Form8/TextBox26 "")
              (dcl-Control-SetText geostation/Form8/TextBox27 "")
              (dcl-Control-SetText geostation/Form8/TextBox28 "")
              (dcl-Control-SetText geostation/Form8/TextBox29 "")
              (dcl-Control-SetText geostation/Form8/TextBox30 "")
              (dcl-Control-SetText geostation/Form8/TextBox31 "")
              (dcl-Control-SetText geostation/Form8/TextBox32 "")
              (dcl-Control-SetText geostation/Form8/TextBox33 "")
              (dcl-Control-SetText geostation/Form8/TextBox34 "")
              (dcl-Control-SetText geostation/Form8/TextBox35 "")
              (dcl-Control-SetText geostation/Form8/TextBox36 "")
              (dcl-Control-SetText geostation/Form8/TextBox37 "")
              (dcl-Control-SetText geostation/Form8/TextBox38 "")
              (dcl-Control-SetText geostation/Form8/TextBox39 "")
              (dcl-Control-SetText geostation/Form8/TextBox40 "")
              (dcl-Control-SetText geostation/Form8/TextBox41 "")
              (dcl-Control-SetText geostation/Form8/TextBox42 "")
              (dcl-Control-SetText geostation/Form8/TextBox43 "")
              (dcl-Control-SetText geostation/Form8/TextBox44 "")
              (dcl-Control-SetText geostation/Form8/TextBox45 "")
              (dcl-Control-SetText geostation/Form8/TextBox46 "")
              (dcl-Control-SetText geostation/Form8/TextBox47 "") 
            )
          )
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton10#OnClicked (/) ;----------- GRAPHIC BUTTON XY STUDNIA
          (dcl-Form-Close geostation/Form8)
          (setq WLAZXY (getpoint "\nWskaż współrzędne włazu: "))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox49 (zaokraglaj2 (nth 1 WLAZXY)))
          (dcl-Control-SetText geostation/Form8/TextBox50 (zaokraglaj2 (nth 0 WLAZXY)))
          (princ)
        )
        (defun USTAWIENIA (/)
          (progn
            (setvar "cmdecho" 0)
            (setq currentLineType (getvar "CELTYPE"))
            (if (not (tblsearch "style" "Arial"))
              (progn
                (entmakex
                  (list
                    '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                    '(100 . "AcDbSymbolTableRecord")
                    '(100 . "AcDbTextStyleTableRecord")
                    (cons 2 "Arial")             ; Nazwa stylu
                    (cons 3 "Arial")              ; Nazwa czcionki
                    (cons 40 0)                ; Wysokość tekstu
                    (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                    (cons 50 0)               ; Kąt pochylenia tekstu
                    (cons 70 0)
                  )
                )
              )
              (princ)
            )
            (if (not (tblsearch "style" "FL_proste"))
              (progn
                (entmakex
                  (list
                    '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                    '(100 . "AcDbSymbolTableRecord")
                    '(100 . "AcDbTextStyleTableRecord")
                    (cons 2 "FL_proste")             ; Nazwa stylu
                    (cons 3 "ISOCPEUR")              ; Nazwa czcionki
                    (cons 40 0)                ; Wysokość tekstu
                    (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                    (cons 50 0)               ; Kąt pochylenia tekstu
                    (cons 70 0)
                  )
                )
              )
              (princ)
            )
                (if (not (tblsearch "style" "FL_pochyle"))
              (progn
                (entmakex
                  (list
                    '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                    '(100 . "AcDbSymbolTableRecord")
                    '(100 . "AcDbTextStyleTableRecord")
                    (cons 2 "FL_pochyle")             ; Nazwa stylu
                    (cons 3 "ISOCPEUR")              ; Nazwa czcionki
                    (cons 40 0)                ; Wysokość tekstu
                    (cons 41 1)                   ; Skala szerokości (domyślnie 1.0)
                    (cons 50 0)               ; Kąt pochylenia tekstu
                    (cons 70 0)
                  )
                )
              )
              (princ)
            )
            (if (null (tblsearch "LTYPE" "KartaStudni"))
              (loadLinetype doc "KartaStudni" "C:/NXYZ/bin/linetype.lin")
              (princ)
            )
            (if (null (tblsearch "LTYPE" "KartaStudni2"))
              (loadLinetype doc "KartaStudni2" "C:/NXYZ/bin/linetype.lin")
              (princ)
            )
            (setvar "CELTYPE" currentLineType)
            ;
            ;pobranie zmiennych systemowych
            ;dimzin 8 - ukrywa zera po przecinku 1.5000 jest jako 1.5
            ;unitmode 0 - wyswietla wartosci ulamkowe stosujac spacje jako ograniczniki
            (setq
              zm_dimzin (getvar "dimzin")
              zm_unitmode (getvar "unitmode")
            );setq
            ;przypisanie nowy zmiennych
            (setvar "dimzin" 1)
            (setvar "unitmode" 0)
            ;
            (setq
              punkt_na_przylaczu nil
              lista_z_pliku (list)
              lista_stu (list)
              lista_rur (list)
              lista_opis_topo (list)
              lista_rzut_poz (list)
              lista_info_pol (list)
              promien 1.2
            );setq
          );progn
          (princ)
        )
        (defun PODZIEL_NA_PODLANCUCHY (string1 string2 znak /
                                      lista_podlancuchow dlugosc1
                                      dlugosc2 lista_separatorow
                                      licznik x1 x2 separator x3
                                      )
          (progn
            ;----------
            (if (and
                  (= (type string1) 'STR)
                  (= (type string2) 'STR)
                  (= (type znak) 'INT)
                );and
              (progn
                ;----------
                ;ustalenie zmiennych poczatkowych
                ;
                (setq
                  lista_podlancuchow (list)
                  lista_separatorow (list)
                  dlugosc1 (strlen string1)
                  dlugosc2 (strlen string2)
                  licznik 1
                  x1 ""
                  x2 ""
                );setq
                ;----------
                ;utworzenie listy separatorow
                ;
                (repeat dlugosc2
                  (progn
                    ;----------
                    (setq
                      separator (substr string2 licznik 1)
                      lista_separatorow
                        (append
                          lista_separatorow (list separator)
                        );append
                      licznik (1+ licznik)
                    );setq
                    ;----------
                  );progn
                );repeat dlugosc2
                ;----------
                ;wejscie w petle repeat
                ;przetwarzanie argumentu string1
                ;
                (setq licznik 1)
                (repeat dlugosc1
                  (progn
                    ;----------
                    (setq
                      x2 (substr string1 licznik 1)
                      x3 (member x2 lista_separatorow)
                    );setq
                    (if x3
                      (progn
                        (if (/= znak 0)
                          (progn
                            (setq x1 (strcat x1 (car x3)))
                          );progn
                        );if
                        (if (/= x1 "")
                          (progn
                            (setq
                              lista_podlancuchow
                                (append lista_podlancuchow (list x1))
                              x1 ""
                            );setq
                          );progn
                        );if
                      );progn
                      (progn  ;else
                        (setq
                          x1 (strcat x1 x2)
                        );setq
                      );progn
                    );if
                    (setq licznik (1+ licznik))
                    ;----------
                  );progn
                );repeat dlugosc1
                ;----------
                ;sprawdzenie, czy zapisano ostatni podlancuch
                ;
                (if (/= x1 "")
                  (progn
                    (setq
                      lista_podlancuchow
                        (append lista_podlancuchow (list x1))
                    );setq
                  );progn
                );if
                ;----------
              );progn
              (progn  ;else
                (alert
                  (strcat
                    " KOMUNIKAT FUNKCJI PODZIEL_NA_PODLANCUCHY"
                    "\n\n"
                    "Bledny typ lub wartosc argumentow funkcji."
                  );strcat
                );alert
                (exit)
              );progn
            );if
            ;----------
            ;zwrot listy podlancuchow
            ;
            lista_podlancuchow
            ;----------
          );progn
        )
        (defun SORTUJ_LISTE (nazwa_listy typ_listy /
                            nowa_lista_2 j jeszcze1 element_1
                            x1 x2 x3 nowa_lista_1 x4 x5 dlugosc
                            i element x
                            )
          (progn
            ;====================================
            ;definicje funkcji pomocniczych
            ;
            ;------------------------------------
            ;funkcja pomocnicza, gdy element nalezy umiescic
            ;w srodku listy
            ;
            (defun FUNKCJA_1 ()
              (progn
                ;----------
                (setq
                  nowa_lista_2 (list)
                  j 0  ;licznik petli
                  jeszcze1 T
                );setq
                ;----------
                (while jeszcze1  ;dopoki T - przetwarzamy liste
                                ;           nowa_lista_1
                  (progn
                    (setq element_1 (nth j nowa_lista_1))
                    (if (= typ_listy 1)
                      (setq x1 element_1)
                      (setq x1 (car element_1))  ;else
                    );if
                    (if (< x x1)
                      (progn
                        (setq
                          jeszcze1 nil
                          x2 (list)
                          x3 (list)
                        );setq
                        (repeat j
                          (progn
                            (setq
                              x2 (append x2 (list (car nowa_lista_1)))
                              nowa_lista_1 (cdr nowa_lista_1)
                            );setq
                          );progn
                        );repeat j
                        (setq
                          x2 (append x2 (list element))
                          x3 nowa_lista_1
                          nowa_lista_2 (append x2 x3)
                          nowa_lista_1 nowa_lista_2
                        );setq
                      );progn
                    );if
                    (setq j (+ j 1))
                  );progn
                );while jeszcze1
                ;----------
                (princ)
                ;----------
              );progn
            );FUNKCJA_1
            ;
            ;------------------------------------
            ;
            ;koniec definicji funkcji pomocniczych
            ;====================================
            ;definicja funkcji glownej
            ;
            (setq
              x4 nazwa_listy
              x5 (read x4)
              dlugosc (length (eval x5))
              i 0
              nowa_lista_1 (list)
            );setq
            ;----------
            ;sortowanie listy
            ;
            (repeat dlugosc
              (progn
                (setq element (nth i (eval x5)))
                (if (= typ_listy 1)
                  (setq x element)
                  (setq x (car element))  ;else
                );if
                (if (= i 0)
                  (progn
                    (setq
                      nowa_lista_1 (append nowa_lista_1 (list element))
                    );setq
                  );progn
                );if
                (if (= i 1)
                  (progn
                    (setq element_1 (nth 0 nowa_lista_1))
                    (if (= typ_listy 1)
                      (setq x1 element_1)
                      (setq x1 (car element_1))  ;else
                    );if
                    (if (< x x1)
                      (setq nowa_lista_1 (cons element nowa_lista_1))
                      (setq  ;else
                        nowa_lista_1
                          (append nowa_lista_1 (list element))
                      );setq
                    );if
                  );progn
                );if
                (if (> i 1)
                  (progn
                    (setq
                      x1 (nth 0 nowa_lista_1)
                      x2 (last nowa_lista_1)
                    );setq
                    (if (= typ_listy 1)
                      (progn
                        (setq
                          x1 x1
                          x2 x2
                        );setq
                      );progn
                      (progn  ;else
                        (setq
                          x1 (car x1)
                          x2 (car x2)
                        );setq
                      );progn
                    );if
                    (cond
                      ((< x x1)  ;umiesc na poczatku listy
                        (setq nowa_lista_1 (cons element nowa_lista_1))
                      )
                      ((> x x2)  ;umiesc na koncu listy
                        (setq
                          nowa_lista_1
                            (append nowa_lista_1 (list element))
                        );setq
                      )
                      (T (FUNKCJA_1))  ;umiesc w srodku listy
                    );cond
                  );progn
                );if
                (setq i (+ i 1))
              );progn
            );repeat
            ;----------
            ;zwrot posortowanej listy
            ;
            (set (read x4) nowa_lista_1)
            ;----------
            (princ)
          );progn
        )
        (defun SPRAWDZBLEDY ()
          (setq listabledow '())
          (if (= (dcl-Control-GetText geostation/Form8/TextBox3) "")
            (setq listabledow (cons "- godło\n" listabledow))
          )  
          (if (= (dcl-Control-GetText geostation/Form8/TextBox6) "")
            (setq listabledow (cons "- miasto, ulicę, numer domu\n" listabledow))
          )
          (if (= (dcl-Control-GetText geostation/Form8/TextBox5) "")
            (setq listabledow (cons "- rok wykonania studni\n" listabledow))
          )
          (if (= (dcl-Control-GetText geostation/Form8/TextBox4) "")
            (setq listabledow (cons "- ID zgłoszenia\n" listabledow))
          )
          (if (= (dcl-Control-GetText geostation/Form8/TextBox1) "")
            (setq listabledow (cons "- wykonawca prac polowych\n" listabledow))
          )
          (if (= (dcl-Control-GetText geostation/Form8/TextBox2) "")
            (setq listabledow (cons "- wykonawca prac kameralnych\n" listabledow))
          )
          (if (= (dcl-Control-GetText geostation/Form8/TextBox7) "")
            (setq listabledow (cons "- numer studni\n" listabledow))
          )
          (if (= (dcl-Control-GetText geostation/Form8/TextBox8) "")
            (setq listabledow (cons "- współrzędną X studni\n" listabledow))
            (dcl-Control-SetText geostation/Form8/TextBox8 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox8)))
          )
          (if (= (dcl-Control-GetText geostation/Form8/TextBox9) "")
            (setq listabledow (cons "- współrzędną Y studni\n" listabledow))
            (dcl-Control-SetText geostation/Form8/TextBox9 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox9)))
          )
          (if (= (dcl-Control-GetText geostation/Form8/TextBox10) "")
            (setq listabledow (cons "- rzędna włazu\n" listabledow))
            (if (not (varType (dcl-Control-GetText geostation/Form8/TextBox10)))
              (setq listabledow (cons "- rzędna włazu nie jest wartością liczbą!\n" listabledow))
              (dcl-Control-SetText geostation/Form8/TextBox10 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox10)))
            )
          )
          (if (= (dcl-Control-GetText geostation/Form8/TextBox11) "")
            (setq listabledow (cons "- rzędna dna\n" listabledow))
            (if (not (varType (dcl-Control-GetText geostation/Form8/TextBox11)))
              (setq listabledow (cons "- rzędna dna nie jest wartością liczbą!\n" listabledow))
              (dcl-Control-SetText geostation/Form8/TextBox11 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox11)))
            )
          )
          (if (and (/= (dcl-Control-GetText geostation/Form8/TextBox12) "") (or (= (dcl-Control-GetText geostation/Form8/TextBox19) "") (= (dcl-Control-GetText geostation/Form8/TextBox18) "") (= (dcl-Control-GetText geostation/Form8/TextBox20) "") (= (dcl-Control-GetText geostation/Form8/TextBox22) "") (= (dcl-Control-GetText geostation/Form8/TextBox21) "")))
            (setq listabledow (cons "- dane wlotu/wylotu nr 1\n" listabledow))
            (if (/= (dcl-Control-GetText geostation/Form8/TextBox12) "")            
              (progn
                (if (not (varType (dcl-Control-GetText geostation/Form8/TextBox20)))
                  (setq listabledow (cons "- rzędna rury wlotu/wylotu nr 1 nie jest wartością liczbą!\n" listabledow))
                  (dcl-Control-SetText geostation/Form8/TextBox20 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox20)))
                )
                (if (not (varType (dcl-Control-GetText geostation/Form8/TextBox22)))
                  (setq listabledow (cons "- średnica rury wlotu/wylotu nr 1 nie jest wartością liczbą!\n" listabledow))
                  (dcl-Control-SetText geostation/Form8/TextBox22 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox22)))
                )    
                (dcl-Control-SetText geostation/Form8/TextBox19 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox19)))
                (dcl-Control-SetText geostation/Form8/TextBox18 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox18)))
                (dcl-Control-SetText geostation/Form8/TextBox20 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox20)))              
              )
            )
          )
          (if (and (/= (dcl-Control-GetText geostation/Form8/TextBox13) "") (or (= (dcl-Control-GetText geostation/Form8/TextBox23) "") (= (dcl-Control-GetText geostation/Form8/TextBox24) "") (= (dcl-Control-GetText geostation/Form8/TextBox25) "") (= (dcl-Control-GetText geostation/Form8/TextBox26) "") (= (dcl-Control-GetText geostation/Form8/TextBox27) "")))
            (setq listabledow (cons "- dane wlotu/wylotu nr 2\n" listabledow))
            (if (/= (dcl-Control-GetText geostation/Form8/TextBox13) "")  
              (progn
                (if (not (varType (dcl-Control-GetText geostation/Form8/TextBox25)))
                  (setq listabledow (cons "- rzędna rury wlotu/wylotu nr 2 nie jest wartością liczbą!\n" listabledow))
                  (dcl-Control-SetText geostation/Form8/TextBox25 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox25)))
                )
                (if (not (varType (dcl-Control-GetText geostation/Form8/TextBox27)))
                  (setq listabledow (cons "- średnica rury wlotu/wylotu nr 2 nie jest wartością liczbą!\n" listabledow))
                  (dcl-Control-SetText geostation/Form8/TextBox27 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox27)))
                )    
                (dcl-Control-SetText geostation/Form8/TextBox23 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox23)))
                (dcl-Control-SetText geostation/Form8/TextBox24 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox24)))
                (dcl-Control-SetText geostation/Form8/TextBox25 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox25)))              
              )
            )
          )
          (if (and (/= (dcl-Control-GetText geostation/Form8/TextBox14) "") (or (= (dcl-Control-GetText geostation/Form8/TextBox28) "") (= (dcl-Control-GetText geostation/Form8/TextBox29) "") (= (dcl-Control-GetText geostation/Form8/TextBox30) "") (= (dcl-Control-GetText geostation/Form8/TextBox31) "") (= (dcl-Control-GetText geostation/Form8/TextBox32) "")))
            (setq listabledow (cons "- dane wlotu/wylotu nr 3\n" listabledow))
            (if (/= (dcl-Control-GetText geostation/Form8/TextBox14) "")  
              (progn
                (if (not (varType (dcl-Control-GetText geostation/Form8/TextBox30)))
                  (setq listabledow (cons "- rzędna rury wlotu/wylotu nr 3 nie jest wartością liczbą!\n" listabledow))
                  (dcl-Control-SetText geostation/Form8/TextBox30 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox30)))
                )
                (if (not (varType (dcl-Control-GetText geostation/Form8/TextBox32)))
                  (setq listabledow (cons "- średnica rury wlotu/wylotu nr 3 nie jest wartością liczbą!\n" listabledow))
                  (dcl-Control-SetText geostation/Form8/TextBox32 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox32)))
                )    
                (dcl-Control-SetText geostation/Form8/TextBox28 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox28)))
                (dcl-Control-SetText geostation/Form8/TextBox29 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox29)))
                (dcl-Control-SetText geostation/Form8/TextBox30 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox30)))          
              )
            )
          )
          (if (and (/= (dcl-Control-GetText geostation/Form8/TextBox15) "") (or (= (dcl-Control-GetText geostation/Form8/TextBox33) "") (= (dcl-Control-GetText geostation/Form8/TextBox34) "") (= (dcl-Control-GetText geostation/Form8/TextBox35) "") (= (dcl-Control-GetText geostation/Form8/TextBox36) "") (= (dcl-Control-GetText geostation/Form8/TextBox37) "")))
            (setq listabledow (cons "- dane wlotu/wylotu nr 4\n" listabledow))
            (if (/= (dcl-Control-GetText geostation/Form8/TextBox15) "")  
              (progn
                (if (not (varType (dcl-Control-GetText geostation/Form8/TextBox35)))
                  (setq listabledow (cons "- rzędna rury wlotu/wylotu nr 4 nie jest wartością liczbą!\n" listabledow))
                  (dcl-Control-SetText geostation/Form8/TextBox35 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox35)))
                )
                (if (not (varType (dcl-Control-GetText geostation/Form8/TextBox37)))
                  (setq listabledow (cons "- średnica rury wlotu/wylotu nr 4 nie jest wartością liczbą!\n" listabledow))
                  (dcl-Control-SetText geostation/Form8/TextBox37 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox37)))
                )    
                (dcl-Control-SetText geostation/Form8/TextBox33 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox33)))
                (dcl-Control-SetText geostation/Form8/TextBox34 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox34)))
                (dcl-Control-SetText geostation/Form8/TextBox35 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox35)))            
              ) 
            )              
          )
          (if (and (/= (dcl-Control-GetText geostation/Form8/TextBox16) "") (or (= (dcl-Control-GetText geostation/Form8/TextBox38) "") (= (dcl-Control-GetText geostation/Form8/TextBox39) "") (= (dcl-Control-GetText geostation/Form8/TextBox40) "") (= (dcl-Control-GetText geostation/Form8/TextBox41) "") (= (dcl-Control-GetText geostation/Form8/TextBox42) "")))
            (setq listabledow (cons "- dane wlotu/wylotu nr 5\n" listabledow))
            (if (/= (dcl-Control-GetText geostation/Form8/TextBox16) "")  
              (progn
                (if (not (varType (dcl-Control-GetText geostation/Form8/TextBox40)))
                  (setq listabledow (cons "- rzędna rury wlotu/wylotu nr 5 nie jest wartością liczbą!\n" listabledow))
                  (dcl-Control-SetText geostation/Form8/TextBox40 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox40)))
                )
                (if (not (varType (dcl-Control-GetText geostation/Form8/TextBox42)))
                  (setq listabledow (cons "- średnica rury wlotu/wylotu nr 5 nie jest wartością liczbą!\n" listabledow))
                  (dcl-Control-SetText geostation/Form8/TextBox42 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox42)))
                )    
                (dcl-Control-SetText geostation/Form8/TextBox38 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox38)))
                (dcl-Control-SetText geostation/Form8/TextBox39 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox39)))
                (dcl-Control-SetText geostation/Form8/TextBox40 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox40)))       
              )
            )
          )
          (if (and (/= (dcl-Control-GetText geostation/Form8/TextBox17) "") (or (= (dcl-Control-GetText geostation/Form8/TextBox43) "") (= (dcl-Control-GetText geostation/Form8/TextBox44) "") (= (dcl-Control-GetText geostation/Form8/TextBox45) "") (= (dcl-Control-GetText geostation/Form8/TextBox46) "") (= (dcl-Control-GetText geostation/Form8/TextBox47) "")))
            (setq listabledow (cons "- dane wlotu/wylotu nr 6\n" listabledow))
            (if (/= (dcl-Control-GetText geostation/Form8/TextBox17) "")  
              (progn
                (if (not (varType (dcl-Control-GetText geostation/Form8/TextBox45)))
                  (setq listabledow (cons "- rzędna rury wlotu/wylotu nr 6 nie jest wartością liczbą!\n" listabledow))
                  (dcl-Control-SetText geostation/Form8/TextBox45 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox45)))
                )
                (if (not (varType (dcl-Control-GetText geostation/Form8/TextBox47)))
                  (setq listabledow (cons "- średnica rury wlotu/wylotu nr 6 nie jest wartością liczbą!\n" listabledow))
                  (dcl-Control-SetText geostation/Form8/TextBox47 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox47)))
                )    
                (dcl-Control-SetText geostation/Form8/TextBox43 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox43)))
                (dcl-Control-SetText geostation/Form8/TextBox44 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox44)))
                (dcl-Control-SetText geostation/Form8/TextBox45 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox45)))        
              ) 
            )              
          )
          (if (and (= (dcl-Control-GetText geostation/Form8/TextBox12) "") (= (dcl-Control-GetText geostation/Form8/TextBox13) "") (= (dcl-Control-GetText geostation/Form8/TextBox14) "") (= (dcl-Control-GetText geostation/Form8/TextBox15) "") (= (dcl-Control-GetText geostation/Form8/TextBox16) "") (= (dcl-Control-GetText geostation/Form8/TextBox17) ""))
            (setq listabledow (cons "- studnia musi posiadać przynajmniej jeden WYLOT\n" listabledow))
          )
          (if (= (dcl-Control-GetText geostation/Form8/TextBox48) "")
            (setq listabledow (cons "- średnica studni\n" listabledow))
            (if (not (varType (dcl-Control-GetText geostation/Form8/TextBox48)))
              (setq listabledow (cons "- średnica studni nie jest wartością liczbą!\n" listabledow))
              (dcl-Control-SetText geostation/Form8/TextBox48 (ZAMIEN,NA. (dcl-Control-GetText geostation/Form8/TextBox48)))
            )
          )
          
          (if (or (= listabledow "") (= listabledow nil))
            (princ)
            (progn
              (setq listabledow (apply 'strcat listabledow))
              (alert (strcat "Uzupełnij następujące wartości:\n" listabledow))
              (exit)
            )      
          )
          (princ)
        )
        (defun POBIERZ_DANE (/ plik linia file_id rekord)
          (progn
            (SPRAWDZBLEDY)
            (dcl-Form-Close geostation/Form8)
            (setq
              punkt (getpoint "\nWskaż punkt początkowy karty studni: ")
              x (car punkt)
              y (car (cdr punkt))
            );setq
            (dcl-Form-Show geostation/Form8)
            (vl-file-delete "C:/NXYZ/bin/dane.txt")
            (setq plik "C:/NXYZ/bin/dane.txt")
            (setq plikKS (open "C:/NXYZ/bin/dane.txt" "a"))
            (cond
              ((= (dcl-Control-GetValue geostation/Form8/OptionButton6) 1)
              (setq DESSAN "DES")
              )  
              ((= (dcl-Control-GetValue geostation/Form8/OptionButton7) 1)
              (setq DESSAN "SAN")
              ) 
            )
            (setq wlazX (strcat "X=" (ZAMIEN.NA, (dcl-Control-GetText geostation/Form8/TextBox49))))
            (setq wlazY (strcat "Y=" (ZAMIEN.NA, (dcl-Control-GetText geostation/Form8/TextBox50))))
            (write-line DESSAN plikKS)
            (write-line (dcl-Control-GetText geostation/Form8/TextBox3) plikKS)
            (write-line (dcl-Control-GetText geostation/Form8/TextBox6) plikKS)
            (write-line (dcl-Control-GetText geostation/Form8/TextBox5) plikKS)
            (write-line (dcl-Control-GetText geostation/Form8/TextBox4) plikKS)
            (write-line (dcl-Control-GetText geostation/Form8/TextBox1) plikKS)
            (write-line (dcl-Control-GetText geostation/Form8/TextBox2) plikKS)
            (if (/= (dcl-Control-GetText geostation/Form8/TextBox11) "") ;------- RZEDNA DNA
              (progn
                (cond
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton9) 1)
                  (setq rzednadna (zaokraglaj2 (dcl-Control-GetText geostation/Form8/TextBox11)))
                  )
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton8) 1)
                  (setq rzednadna (zaokraglaj2 (- (atof (dcl-Control-GetText geostation/Form8/TextBox10)) (atof (dcl-Control-GetText geostation/Form8/TextBox11)))))
                  )
                )
                (write-line (strcat (dcl-Control-GetText geostation/Form8/TextBox7) " " (dcl-Control-GetText geostation/Form8/TextBox8) " " (dcl-Control-GetText geostation/Form8/TextBox9) " " (zaokraglaj2 (dcl-Control-GetText geostation/Form8/TextBox10)) " " rzednadna) plikKS)       
              )
            )
            (if (/= (dcl-Control-GetText geostation/Form8/TextBox12) "") ;------- WLOT/WYLOT 1
              (progn
                (cond
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton10) 1)
                  (setq kierunekwlotu1 "z")
                  )
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton11) 1)
                  (setq kierunekwlotu1 "do")
                  )
                )
                (cond
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton22) 1)
                  (setq glebokoscwlotu1 (zaokraglaj2 (dcl-Control-GetText geostation/Form8/TextBox20)))
                  )
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton23) 1)
                  (setq glebokoscwlotu1 (zaokraglaj2 (- (atof (dcl-Control-GetText geostation/Form8/TextBox10)) (atof (dcl-Control-GetText geostation/Form8/TextBox20)))))
                  )
                )
                (write-line (strcat "1 " kierunekwlotu1 " " (dcl-Control-GetText geostation/Form8/TextBox12) " " (dcl-Control-GetText geostation/Form8/TextBox19) " " (dcl-Control-GetText geostation/Form8/TextBox18) " " glebokoscwlotu1 " " (dcl-Control-GetText geostation/Form8/TextBox22) " " (dcl-Control-GetText geostation/Form8/TextBox21)) plikKS)        
              )
            )
            (if (/= (dcl-Control-GetText geostation/Form8/TextBox13) "") ;------- WLOT/WYLOT 2
              (progn
                (cond
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton12) 1) ;---- wlot
                  (setq kierunekwlotu2 "z")
                  )
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton13) 1) ;---- wylot
                  (setq kierunekwlotu2 "do")
                  )
                )
                (cond
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton24) 1) ;----- glebokosc
                  (setq glebokoscwlotu2 (zaokraglaj2 (dcl-Control-GetText geostation/Form8/TextBox25)))
                  )
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton25) 1) ;----- rzedna
                  (setq glebokoscwlotu2 (zaokraglaj2 (- (atof (dcl-Control-GetText geostation/Form8/TextBox10)) (atof (dcl-Control-GetText geostation/Form8/TextBox25)))))
                  )
                )
                (write-line (strcat "2 " kierunekwlotu2 " " (dcl-Control-GetText geostation/Form8/TextBox13) " " (dcl-Control-GetText geostation/Form8/TextBox24) " " (dcl-Control-GetText geostation/Form8/TextBox23) " " glebokoscwlotu2 " " (dcl-Control-GetText geostation/Form8/TextBox27) " " (dcl-Control-GetText geostation/Form8/TextBox26)) plikKS)        
              )
            )
            (if (/= (dcl-Control-GetText geostation/Form8/TextBox14) "") ;------- WLOT/WYLOT 3
              (progn
                (cond
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton14) 1) ;---- wlot
                  (setq kierunekwlotu3 "z")
                  )
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton15) 1) ;---- wylot
                  (setq kierunekwlotu3 "do")
                  )
                )
                (cond
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton26) 1) ;----- glebokosc
                  (setq glebokoscwlotu3 (zaokraglaj2 (dcl-Control-GetText geostation/Form8/TextBox30)))
                  )
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton27) 1) ;----- rzedna
                  (setq glebokoscwlotu3 (zaokraglaj2 (- (atof (dcl-Control-GetText geostation/Form8/TextBox10)) (atof (dcl-Control-GetText geostation/Form8/TextBox30)))))
                  )
                )
                (write-line (strcat "3 " kierunekwlotu3 " " (dcl-Control-GetText geostation/Form8/TextBox14) " " (dcl-Control-GetText geostation/Form8/TextBox29) " " (dcl-Control-GetText geostation/Form8/TextBox28) " " glebokoscwlotu3 " " (dcl-Control-GetText geostation/Form8/TextBox32) " " (dcl-Control-GetText geostation/Form8/TextBox31)) plikKS)        
              )
            )
            (if (/= (dcl-Control-GetText geostation/Form8/TextBox15) "") ;------- WLOT/WYLOT 4
              (progn
                (cond
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton16) 1) ;---- wlot
                  (setq kierunekwlotu4 "z")
                  )
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton17) 1) ;---- wylot
                  (setq kierunekwlotu4 "do")
                  )
                )
                (cond
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton28) 1) ;----- glebokosc
                  (setq glebokoscwlotu4 (zaokraglaj2 (dcl-Control-GetText geostation/Form8/TextBox35)))
                  )
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton29) 1) ;----- rzedna
                  (setq glebokoscwlotu4 (zaokraglaj2 (- (atof (dcl-Control-GetText geostation/Form8/TextBox10)) (atof (dcl-Control-GetText geostation/Form8/TextBox35)))))
                  )
                )
                (write-line (strcat "4 " kierunekwlotu4 " " (dcl-Control-GetText geostation/Form8/TextBox15) " " (dcl-Control-GetText geostation/Form8/TextBox34) " " (dcl-Control-GetText geostation/Form8/TextBox33) " " glebokoscwlotu4 " " (dcl-Control-GetText geostation/Form8/TextBox37) " " (dcl-Control-GetText geostation/Form8/TextBox36)) plikKS)        
              )
            )
            (if (/= (dcl-Control-GetText geostation/Form8/TextBox16) "") ;------- WLOT/WYLOT 5
              (progn
                (cond
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton18) 1) ;---- wlot
                  (setq kierunekwlotu5 "z")
                  )
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton19) 1) ;---- wylot
                  (setq kierunekwlotu5 "do")
                  )
                )
                (cond
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton30) 1) ;----- glebokosc
                  (setq glebokoscwlotu5 (zaokraglaj2 (dcl-Control-GetText geostation/Form8/TextBox40)))
                  )
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton31) 1) ;----- rzedna
                  (setq glebokoscwlotu5 (zaokraglaj2 (- (atof (dcl-Control-GetText geostation/Form8/TextBox10)) (atof (dcl-Control-GetText geostation/Form8/TextBox40)))))
                  )
                )
                (write-line (strcat "5 " kierunekwlotu5 " " (dcl-Control-GetText geostation/Form8/TextBox16) " " (dcl-Control-GetText geostation/Form8/TextBox39) " " (dcl-Control-GetText geostation/Form8/TextBox38) " " glebokoscwlotu5 " " (dcl-Control-GetText geostation/Form8/TextBox42) " " (dcl-Control-GetText geostation/Form8/TextBox41)) plikKS)        
              )
            )
            (if (/= (dcl-Control-GetText geostation/Form8/TextBox17) "") ;------- WLOT/WYLOT 6
              (progn
                (cond
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton20) 1) ;---- wlot
                  (setq kierunekwlotu6 "z")
                  )
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton21) 1) ;---- wylot
                  (setq kierunekwlotu6 "do")
                  )
                )
                (cond
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton32) 1) ;----- glebokosc
                  (setq glebokoscwlotu6 (zaokraglaj2 (dcl-Control-GetText geostation/Form8/TextBox45)))
                  )
                  ((= (dcl-Control-GetValue geostation/Form8/OptionButton33) 1) ;----- rzedna
                  (setq glebokoscwlotu6 (zaokraglaj2 (- (atof (dcl-Control-GetText geostation/Form8/TextBox10)) (atof (dcl-Control-GetText geostation/Form8/TextBox45)))))
                  )
                )
                (write-line (strcat "6 " kierunekwlotu6 " " (dcl-Control-GetText geostation/Form8/TextBox17) " " (dcl-Control-GetText geostation/Form8/TextBox44) " " (dcl-Control-GetText geostation/Form8/TextBox43) " " glebokoscwlotu6 " " (dcl-Control-GetText geostation/Form8/TextBox47) " " (dcl-Control-GetText geostation/Form8/TextBox46)) plikKS)        
              )
            )
            (if (/= (dcl-Control-GetText geostation/Form8/TextBox48) "")
              (progn
                (setq srednicaStudni (ZAMIEN.NA, (zaokraglaj2 (/ (atof (dcl-Control-GetText geostation/Form8/TextBox48)) 1000))))
                (setq srednicaStudniWIEKSZA (ZAMIEN.NA, (zaokraglaj2 (/ (- (atof (dcl-Control-GetText geostation/Form8/TextBox48)) 100) 1000))))
              )
            )
            (close plikKS)
            (if plik
              (progn
          (setq file_id (open plik "r"))
          (if (/= file_id nil)
            (progn
              (while (/= (setq linia (read-line file_id)) nil)
                (setq lista_z_pliku (append lista_z_pliku (list (PODZIEL_NA_PODLANCUCHY linia " " 0))))
              );while
            );progn
          );if
          ;
          (close file_id)
          ;
              );progn
            );if
            ;
          );progn
          (princ)
        )
        (defun TABELA (x y /)
          (progn
            ;obwodnica do druku - format A4
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x y))
          (cons 11 (list (+ x 210) y))
          (cons 8 "karta studni - zakres do druku")
          (cons 62 1)
          (cons 370 30)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 210) y))
          (cons 11 (list (+ x 210)(- y 297)))	
          (cons 8 "karta studni - zakres do druku")
          (cons 62 1)
          (cons 370 30)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 210)(- y 297)))
          (cons 11 (list x (- y 297)))
          (cons 8 "karta studni - zakres do druku")
          (cons 62 1)
          (cons 370 30)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x (- y 297)))
          (cons 11 (list x y))
          (cons 8 "karta studni - zakres do druku")
          (cons 62 1)
          (cons 370 30)
              );list
            )
            ;TUTAJ NALEZY ZROBIC ZOOM
            (command
              "_zoom" (list x y)(list (+ x 210)(- y 297))
            );command
            ;
            ;zewnetrzna tabela
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 20)))
          (cons 11 (list (+ x 190)(- y 20)))
          (cons 8 "karta studni - rama")
          (cons 370 30)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 190)(- y 20)))
          (cons 11 (list (+ x 190)(- y 269.17)))
          (cons 8 "karta studni - rama")
          (cons 370 30)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 190)(- y 269.17)))
          (cons 11 (list (+ x 20)(- y 269.17)))
          (cons 8 "karta studni - rama")
          (cons 370 30)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 269.17)))
          (cons 11 (list (+ x 20)(- y 20)))
          (cons 8 "karta studni - rama")
          (cons 370 30)
          (cons 62 7)
              );list
            )
            ;wewnetrzne kreski tabeli
            ;=====POZIOME=====
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 30)))
          (cons 11 (list (+ x 190)(- y 30)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 35.75)))
          (cons 11 (list (+ x 124.94)(- y 35.75)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 42)))
          (cons 11 (list (+ x 71.75)(- y 42)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 52)))
          (cons 11 (list (+ x 190)(- y 52)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 73.51)))
          (cons 11 (list (+ x 108.89)(- y 73.51)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 94.5)))
          (cons 11 (list (+ x 108.89)(- y 94.5)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 116.4)))
          (cons 11 (list (+ x 190)(- y 116.4)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 123.18)))
          (cons 11 (list (+ x 108.89)(- y 123.18)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 132.78)))
          (cons 11 (list (+ x 108.89)(- y 132.78)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 51.99)(- y 145.86)))
          (cons 11 (list (+ x 108.89)(- y 145.86)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 51.99)(- y 158.82)))
          (cons 11 (list (+ x 108.89)(- y 158.82)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 171.66)))
          (cons 11 (list (+ x 190)(- y 171.66)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 51.99)(- y 184.4)))
          (cons 11 (list (+ x 108.89)(- y 184.4)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 51.99)(- y 197.85)))
          (cons 11 (list (+ x 108.89)(- y 197.85)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 210)))
          (cons 11 (list (+ x 108.89)(- y 210)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 217.37)))
          (cons 11 (list (+ x 108.89)(- y 217.37)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 228.91)))
          (cons 11 (list (+ x 108.89)(- y 228.91)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 235.62)))
          (cons 11 (list (+ x 108.89)(- y 235.62)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 242.33)))
          (cons 11 (list (+ x 108.89)(- y 242.33)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 249.04)))
          (cons 11 (list (+ x 108.89)(- y 249.04)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 255.75)))
          (cons 11 (list (+ x 108.89)(- y 255.75)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 20)(- y 262.46)))
          (cons 11 (list (+ x 108.89)(- y 262.46)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            ;=====PIONOWE=====
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 71.75)(- y 30)))
          (cons 11 (list (+ x 71.75)(- y 52)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 124.94)(- y 30)))
          (cons 11 (list (+ x 124.94)(- y 52)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 44)(- y 116.4)))
          (cons 11 (list (+ x 44)(- y 52)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 108.89)(- y 52)))
          (cons 11 (list (+ x 108.89)(- y 269.17)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 44)(- y 123.18)))
          (cons 11 (list (+ x 44)(- y 210)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 51.99)(- y 123.18)))
          (cons 11 (list (+ x 51.99)(- y 210)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 64.5)(- y 123.18)))
          (cons 11 (list (+ x 64.5)(- y 210)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 82.24)(- y 123.18)))
          (cons 11 (list (+ x 82.24)(- y 210)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 44)(- y 217.37)))
          (cons 11 (list (+ x 44)(- y 269.17)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 64.5)(- y 217.37)))
          (cons 11 (list (+ x 64.5)(- y 269.17)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 86.04)(- y 217.37)))
          (cons 11 (list (+ x 86.04)(- y 269.17)))
          (cons 8 "karta studni - rama")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            ;
          );progn
        )
        (defun TEKSTOWNIK (x y /)
          (progn
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 22.5)(- y 25)))
          (cons 40 2.5)
          (cons 41 63.1783)
          (cons 7 "Fl_proste")
          (cons 71 4)
          (cons 72 5)
          (cons 1 "KARTA INWENTARYZACYJNA STUDZIENKI")
          (cons 50 0)
              )
            )
            **pierwsza zmienna - numer studzienki
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst zmienny")
          (cons 62 7)
          (cons 10 (list (+ x 22.5)(- y 32.875)))
          (cons 40 2.5)
          (cons 41 50.0000)
          (cons 7 "Fl_pochyle")
          (cons 71 4)
          (cons 72 5)
          (cons 1 zm1)
          (cons 50 0)
              )
            )
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 22.5)(- y 38.875)))
          (cons 40 2.5)
          (cons 41 50.0000)
          (cons 7 "Fl_proste")
          (cons 71 4)
          (cons 72 5)
          (cons 1 "Współrzędne środka pokrywy")
          (cons 50 0)
              )
            )
            **druga zmienna - X
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst zmienny")
          (cons 62 7)
          (cons 10 (list (+ x 22.5)(- y 48.25)))
          (cons 40 2.5)
          (cons 41 25.0000)
          (cons 7 "Fl_pochyle")
          (cons 71 4)
          (cons 72 5)
          (cons 1 wlazX)
          (cons 50 0)
              )
            )
            **trzecia zmienna - Y
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst zmienny")
          (cons 62 7)
          (cons 10 (list (+ x 46.5)(- y 48.25)))
          (cons 40 2.5)
          (cons 41 25.0000)
          (cons 7 "Fl_pochyle")
          (cons 71 4)
          (cons 72 5)
          (cons 1 wlazY)
          (cons 50 0)
              )
            )
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 98.345)(- y 32.875)))
          (cons 40 2.5)
          (cons 41 50.0000)
          (cons 7 "Fl_proste")
          (cons 71 5)
          (cons 72 5)
          (cons 1 "Mapa")
          (cons 50 0)
              )
            )
            **czwarta zmienna - numer sekcji mapy
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 98.345)(- y 43)))
          (cons 40 5.0)
          (cons 41 80.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 zm4)
          (cons 7 "FL_pochyle")
          (cons 50 0)
              )
            )
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 98.345)(- y 50.5)))
          (cons 40 1.5)
          (cons 41 100.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "(Nr godła mapy zasadniczej)")
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 176.00)(- y 23.25)))
          (cons 40 2.5)
          (cons 41 25.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "sanitarnej")
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 176.00)(- y 27.05)))
          (cons 40 2.5)
          (cons 41 25.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "deszczowej")
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;nazwa firmy
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 157.47)(- y 40)))
          (cons 40 2.0)
          (cons 41 55.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "\\pxqc;{\\C256;GEO-STATION Sp. z o.o.\\Pul. Jaśminowa 79C\\P44-251 Rybnik}")
          (cons 7 "Arial")
          (cons 50 0)
              )
            )
            ;wykonawca
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 157.47)(- y 50.5)))
          (cons 40 1.5)
          (cons 41 30.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "Wykonawca: ")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;opis topograficzny
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 110.8)(- y 55.2622)))
          (cons 40 2.5)
          (cons 41 30.0000)
          (cons 71 4)
          (cons 72 5)
          (cons 1 "Opis topograficzny")
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;opis polozenia studzienki
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 32)(- y 62.755)))
          (cons 40 2.5)
          (cons 41 25.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "\\pxqc;{\\C256;Opis położenia\\Pstudzienki}")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;stan techniczny studzienki
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 32)(- y 84.005)))
          (cons 40 2.5)
          (cons 41 25.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "\\pxqc;{\\C256;Stan \\Ptechniczny\\Pstudzienki}")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;uwagi
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 32)(- y 105.45)))
          (cons 40 2.5)
          (cons 41 25.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "Uwagi")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;adres - ul. numer domu
            **piata zmienna - lokalizacja studzienki
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst zmienny")
          (cons 62 7)
          (cons 10 (list (+ x 76.445)(- y 62.755)))
          (cons 40 2.5)
          (cons 41 55.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 zm5)
          (cons 7 "FL_pochyle")
          (cons 50 0)	
              )
            )
            ;miasto, ul., nr domu, pkt
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 76.445)(- y 71.6542)))
          (cons 40 1.5)
          (cons 41 43.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "(miasto, ul., nr domu, pkt. charakterystyczny)")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;dobry
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst zmienny")
          (cons 62 7)
          (cons 10 (list (+ x 76.445)(- y 84.005)))
          (cons 40 2.5)
          (cons 41 55.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "dobry")
          (cons 7 "FL_pochyle")
          (cons 50 0)	
              )
            )
            ;dobry, z³y - popêkane œciany, brak pokrywy
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 76.445)(- y 92.6442)))
          (cons 40 1.5)
          (cons 41 43.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "(dobry, zły - popękane ściany, brak pokrywy)")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;kreska - brak uwag
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 66.445)(- y 105.45)))
          (cons 11 (list (+ x 86.445)(- y 105.45)))
          (cons 8 "karta studni - tekst zmienny")
          (cons 370 18)
          (cons 62 7)
              );list
            )
            ;studzienka zalana, zamulona, niedro¿na
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 76.445)(- y 114.5442)))
          (cons 40 1.5)
          (cons 41 43.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "(studzienka zalana, zamulona, niedrożna)")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;Dane wysokoœciowe dotycz¹ce studzienki
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 64.445)(- y 119.79)))
          (cons 40 2.5)
          (cons 41 65.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "Dane wysokościowe dotyczące studzienki")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;Wyszczególnienie
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 32)(- y 127.98)))
          (cons 40 1.5)
          (cons 41 17.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "Wyszczególnienie")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;Oznaczenie
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 47.995)(- y 127.98)))
          (cons 40 1.5)
          (cons 41 8.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "{\\C256;Ozna-\\Pczenie}")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;Dane H[m]
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 58.2175)(- y 127.98)))
          (cons 40 1.5)
          (cons 41 8.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "{\\C256;Dane\\PH [m]}")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            ) 
            ;Rok wykonania KERG:
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 73.3697)(- y 127.98)))
          (cons 40 1.5)
          (cons 41 14.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "{\\C256;Rok wykonania\\PId. zgł.:}")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;Wykonawca: prac polowych prac kameralnych
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 95.563)(- y 127.98)))
          (cons 40 1.5)
          (cons 41 17.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "{\\C256;Wykonawca:\\Pprac polowych\\Pprac kameralnych}")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;Rzedna góry pokrywy
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 32)(- y 152.22)))
          (cons 40 2.5)
          (cons 41 19.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "{\\C256;Rzędna\\Pgóry\\Ppokrywy}")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;Rzedna dna
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 32)(- y 190.83)))
          (cons 40 2.5)
          (cons 41 19.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "{\\C256;Rzędna\\Pdna}")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;Hp
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 47.995)(- y 152.22)))
          (cons 40 2.5)
          (cons 41 6.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "Hp")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;Hd
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 47.995)(- y 190.83)))
          (cons 40 2.5)
          (cons 41 6.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "Hd")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;GORA pokrywy
            **szosta zmienna - gora studni
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst zmienny")
          (cons 62 7)
          (cons 10 (list (+ x 58.245)(- y 139.32)))
          (cons 40 2.5)
          (cons 41 12.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 zm6)
          (cons 7 "FL_pochyle")
          (cons 50 0)	
              )
            )
            ;rok wykonania KERG
            **siodma zmienna
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst zmienny")
          (cons 62 7)
          (cons 10 (list (+ x 73.372)(- y 139.32)))
          (cons 40 1.5)
          (cons 41 17.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 zm7)
          (cons 7 "FL_pochyle")
          (cons 50 0)	
              )
            )
            ;wykonawca - imie i nazwisko
            **osma zmienna - kto kreslil
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst zmienny")
          (cons 62 7)
          (cons 10 (list (+ x 95.565)(- y 139.32)))
          (cons 40 1.5)
          (cons 41 26.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 zm8)
          (cons 7 "FL_pochyle")
          (cons 50 0)	
              )
            )
            ;DOL pokrywy
            **dziewiata zmienna - gora studni
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst zmienny")
          (cons 62 7)
          (cons 10 (list (+ x 58.245)(- y 178.2)))
          (cons 40 2.5)
          (cons 41 12.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 zm9)
          (cons 7 "FL_pochyle")
          (cons 50 0)	
              )
            )
            ;DRUGI RAZ
            ;rok wykonania KERG
            **siodma zmienna
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst zmienny")
          (cons 62 7)
          (cons 10 (list (+ x 73.372)(- y 178.2)))
          (cons 40 1.5)
          (cons 41 17.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 zm7)
          (cons 7 "FL_pochyle")
          (cons 50 0)	
              )
            )
            ;DRUGI RAZ
            ;wykonawca - imie i nazwisko
            **osma zmienna - kto kreslil
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst zmienny")
          (cons 62 7)
          (cons 10 (list (+ x 95.565)(- y 178.2)))
          (cons 40 1.5)
          (cons 41 24.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 zm8)
          (cons 7 "FL_pochyle")
          (cons 50 0)	
              )
            )
            ;Dane dotycz¹ce wlotów i wylotów
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 64.445)(- y 213.685)))
          (cons 40 2.5)
          (cons 41 55.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "Dane dotyczące wlotów i wylotów")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;Oznaczenie wg rzutu pionowego
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 32)(- y 223.14)))
          (cons 40 1.5)
          (cons 41 17.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "{\\C256;Oznaczenie wg\\Przutu pionowego}")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;Glebokosc odniesienia do gory pokrywy
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 54.25)(- y 223.14)))
          (cons 40 1.5)
          (cons 41 22.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "{\\C256;Głębokość\\Podniesienia do \\Pgóry pokrywy}")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;Srednica P[m]
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 75.2563)(- y 223.14)))
          (cons 40 1.5)
          (cons 41 7.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "{\\C256;Średnica\\P[mm]}")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;Rodzaj materialu
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 97.465)(- y 223.14)))
          (cons 40 1.5)
          (cons 41 7.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "Rodzaj materiału")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;Rzut poziomy
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 110.08)(- y 119.6622)))
          (cons 40 2.5)
          (cons 41 30.0000)
          (cons 71 4)
          (cons 72 5)
          (cons 1 "Rzut poziomy")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst staly")
          (cons 62 7)
          (cons 10 (list (+ x 110.8)(- y 174.9222)))
          (cons 40 2.5)
          (cons 41 30.0000)
          (cons 71 4)
          (cons 72 5)
          (cons 1 "Rzut pionowy")
          (cons 7 "FL_proste")
          (cons 50 0)	
              )
            )
            ;
          );progn
        )
        (defun ZAMIEN,NA. (dane / dlugosc licznik baza tmp)
          (progn
            (setq
              dlugosc (strlen dane)
              licznik 1
              tmp ""
            );
            ;
            (repeat dlugosc
              (progn
          (setq baza (substr dane licznik 1))
          (if (= baza ",")
            (progn
              (setq tmp (strcat tmp "."))
            );progn
            ;
            (progn ;jezeli inny znak niz "."
              (setq tmp (strcat tmp baza))
            );progn
          );if
          ;
          (setq licznik (1+ licznik))
          ;
              );progn
            );repeat
            tmp
            ;
          );progn
        )
        (defun ZAMIEN.NA, (dane / dlugosc licznik baza tmp)
          (progn
            (setq
              dlugosc (strlen dane)
              licznik 1
              tmp ""
            );
            ;
            (repeat dlugosc
              (progn
          (setq baza (substr dane licznik 1))
          (if (= baza ".")
            (progn
              (setq tmp (strcat tmp ","))
            );progn
            ;
            (progn ;jezeli inny znak niz "."
              (setq tmp (strcat tmp baza))
            );progn
          );if
          ;
          (setq licznik (1+ licznik))
          ;
              );progn
            );repeat
            ;
            tmp
            ;
          );progn
        )
        (defun RURA (xa ya xb yb / A B xna yna xnb ynb aa bb)
          (progn
            ;
            (setq
              A (list xa ya)
              B (list xb yb)
            );setq
            (cond
              ((and (= xa xb)(< ya yb))
              (setq
          xna xa
          yna (+ ya promien)
          xnb xb
          ynb (- yb promien)
              );setq
              )
              ((and (= xa xb)(> ya yb))
              (setq
          xna xa
          yna (- ya promien)
          xnb xb
          ynb (+ yb promien)
              );setq
              )
              ((and (= ya yb)(< xa xb))
              (setq
          xna (+ xa promien)
          yna ya
          xnb (- xb promien)
          ynb yb
              );setq
              )
              ((and (= ya yb)(> xa xb))
              (setq
          xna (- xa promien)
          yna ya
          xnb (+ xb promien)
          ynb yb
              );setq
              )
              ((and (/= xa xb)(/= ya yb))
              (setq
          aa (* promien (cos (angle A B)))
          bb (* promien (sin (angle A B)))
          xna (+ xa aa)
          yna (+ ya bb)
          xnb (- xb aa)
          ynb (- yb bb)
              );setq
              )
            );cond
            ;
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list xna yna))
          (cons 11 (list xnb ynb))
          (cons 8 "karta studni - opis topograficzny")
          (cons 370 30)
          (cons 62 17)
              )
            );entmake
            ;
          );progn
        )
        (defun ODLE (xa ya xb yb / A B wys_teksu wspl_a wspl_b xs ys
              )
          (progn
            (setq
              A (list xa ya)
              B (list xb yb)
              wys_tekstu 1.4
              wspl_a -1.5
              wspl_b 1.5
              xs (/ (+ xa xb) 2)
              ys (/ (+ ya yb) 2)
            );setq
            ;
            (if (and (= xa xb)(< ya yb))
              (progn
          (setq
            kat (angle A B)
            x_odl (+ xs wspl_a)
            x_sre (+ xs wspl_b)
          );setq
          (entmake
            (list
              (cons 0 "MTEXT")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbMText")
              (cons 10 (list x_odl ys))
              (cons 40 wys_tekstu)
              (cons 1 (ZAMIEN.NA, odl))
              (cons 7 "Fl_pochyle")
              (cons 50 kat)
              (cons 71 5)
              (cons 72 5)
              (cons 8 "karta studni - opis topograficzny")
              (cons 62 7)
            )
          );entmake
          (entmake
            (list
              (cons 0 "MTEXT")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbMText")
              (cons 10 (list x_sre ys))
              (cons 40 wys_tekstu)
              (cons 1 (ZAMIEN.NA, srednica_p))
              (cons 7 "Fl_pochyle")
              (cons 50 kat)
              (cons 71 5)
              (cons 72 5)
              (cons 8 "karta studni - opis topograficzny")
              (cons 62 7)
            )
          );entmake
              )
            );if
            ;
            (if (and (= xa xb)(> ya yb))
              (progn
          (setq
            kat (angle B A)
            x_odl (+ xs wspl_a)
            x_sre (+ xs wspl_b)
          );setq
          (entmake
            (list
              (cons 0 "MTEXT")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbMText")
              (cons 10 (list x_odl ys))
              (cons 40 wys_tekstu)
              (cons 1 (ZAMIEN.NA, odl))
              (cons 7 "Fl_pochyle")
              (cons 50 kat)
              (cons 71 5)
              (cons 72 5)
              (cons 8 "karta studni - opis topograficzny")
              (cons 62 7)
            )
          );entmake
          (entmake
            (list
              (cons 0 "MTEXT")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbMText")
              (cons 10 (list x_sre ys))
              (cons 40 wys_tekstu)
              (cons 1 (ZAMIEN.NA, srednica_p))
              (cons 7 "Fl_pochyle")
              (cons 50 kat)
              (cons 71 5)
              (cons 72 5)
              (cons 8 "karta studni - opis topograficzny")
              (cons 62 7)
            )
          );entmake
          ;
              );progn
            );if
            ;
            (if (or (and (< xa xb)(< ya yb))(and (< xa xb)(> ya yb)))
              (progn
          (setq
            kat (angle A B)
            delta_x_a (* wspl_a (sin (angle A B)))
            delta_y_a (* wspl_a (cos (angle A B)))
            delta_x_b (* wspl_b (sin (angle A B)))
            delta_y_b (* wspl_b (cos (angle A B)))
            ;
            x_odl (+ xs delta_x_a)
            y_odl (- ys delta_y_a)
            ;
            x_sre (+ xs delta_x_b)
            y_sre (- ys delta_y_b)
          );setq
          ;
          (entmake
            (list
              (cons 0 "MTEXT")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbMText")
              (cons 10 (list x_odl y_odl))
              (cons 40 wys_tekstu)
              (cons 1 (ZAMIEN.NA, odl))
              (cons 7 "Fl_pochyle")
              (cons 50 kat)
              (cons 71 5)
              (cons 72 5)
              (cons 8 "karta studni - opis topograficzny")
              (cons 62 7)
            )
          );entmake
          (entmake
            (list
              (cons 0 "MTEXT")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbMText")
              (cons 10 (list x_sre y_sre))
              (cons 40 wys_tekstu)
              (cons 1 (ZAMIEN.NA, srednica_p))
              (cons 7 "Fl_pochyle")
              (cons 50 kat)
              (cons 71 5)
              (cons 72 5)
              (cons 8 "karta studni - opis topograficzny")
              (cons 62 7)
            )
          );entmake
              );progn
            );if
            ;
            (if (or (and (> xa xb)(> ya yb))(and (> xa xb)(< ya yb)))
              (progn
          (setq
            kat (angle B A)
            delta_x_a (* wspl_a (sin (angle A B)))
            delta_y_a (* wspl_a (cos (angle A B)))
            delta_x_b (* wspl_b (sin (angle A B)))
            delta_y_b (* wspl_b (cos (angle A B)))
            ;
            x_odl (- xs delta_x_a)
            y_odl (+ ys delta_y_a)
            x_sre (- xs delta_x_b)
            y_sre (+ ys delta_y_b)
          );setq
          ;
          (entmake
            (list
              (cons 0 "MTEXT")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbMText")
              (cons 10 (list x_odl y_odl))
              (cons 40 wys_tekstu)
              (cons 1 (ZAMIEN.NA, odl))
              (cons 7 "Fl_pochyle")
              (cons 50 kat)
              (cons 71 5)
              (cons 72 5)
              (cons 8 "karta studni - opis topograficzny")
              (cons 62 7)
            )
          );entmake
          (entmake
            (list
              (cons 0 "MTEXT")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbMText")
              (cons 10 (list x_sre y_sre))
              (cons 40 wys_tekstu)
              (cons 1 (ZAMIEN.NA, srednica_p))
              (cons 7 "Fl_pochyle")
              (cons 50 kat)
              (cons 71 5)
              (cons 72 5)
              (cons 8 "karta studni - opis topograficzny")
              (cons 62 7)
            )
          );entmake
              );progn
            );f
            ;
          );progn
        )
        (defun TEKST_STU (x0 y0 tekst /)
          (progn
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - tekst zmienny")
          (cons 62 7)
          (cons 10 (list (+ x x0)(- y y0)))
          (cons 40 2.5)
          (cons 41 20.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 tekst)
          (cons 7 "FL_pochyle")
          (cons 50 0)	
              )
            )
          );progn
        )
        (defun OPIS_TOPOGRAFICZNY (lista / dlugosc licznik)
          (progn
            (setq
              dlugosc (length lista)
              licznik 0
            );setq
            (repeat dlugosc
              (progn
          (setq
            nazwa_p (nth 2 (nth licznik lista))
            xp (nth 4 (nth licznik lista))
            xp (atof xp)
            yp (nth 3 (nth licznik lista))
            yp (atof yp)
            srednica_p (nth 6 (nth licznik lista))
          );setq
          ;
          (if (= rodzaj_p "sanitarka")
            (setq srednica_p (strcat "ks" srednica_p))
          );if
          (if (= rodzaj_p "deszczowka")
            (setq srednica_p (strcat "kd" srednica_p))
          )
          ;
          (setq kat (angle (list x_central y_central)(list xp yp))
                odl_int (distance (list x_central y_central)(list xp yp))
                odl_str (rtos odl_int 2 2)
                odl_str (strcat "-" odl_str "-")
                ;
                licznik (1+ licznik)
                lista_opis_topo (append lista_opis_topo (list (list odl_int nazwa_p kat odl_str srednica_p)))
                );setq
              );progn
            );repeat
            ;
            (SORTUJ_LISTE "lista_opis_topo" 2)
            (setq dlugosc (length lista_opis_topo)
            max_odl (nth 0 (nth (1- dlugosc) lista_opis_topo))
            licznik 0
            );setq
            (repeat dlugosc
              (progn
          (setq
            tmp (nth licznik lista_opis_topo)
            nazwa_p (nth 1 tmp)
            odl_int (nth 0 tmp)
            kat (nth 2 tmp)
            odl (nth 3 tmp)
            srednica_p (nth 4 tmp)
            odl_skrocona (* (/ odl_int max_odl) 27)
          );setq
          (if (< odl_skrocona 10)(setq odl_skrocona 10))
          (setq
            punkt12 (polar (list (+ x 149.3237)(- y 84.2)) kat odl_skrocona)
            punkt13 (polar (list (+ x 149.3237)(- y 84.2)) kat (+ odl_skrocona 4))
          );setq
          ;
          (RURA (+ x 149.3237) (- y 84.2) (nth 0 punkt12) (nth 1 punkt12))
          (ODLE (+ x 149.3237) (- y 84.2) (nth 0 punkt12) (nth 1 punkt12))
          (entmake
            (list
              (cons 0 "CIRCLE")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbCircle")
              (cons 8 "karta studni - opis topograficzny")
              (cons 10 punkt12)
              (cons 40 1.2)
              (cons 370 5)
              (cons 62 17)
            )
          );entmake
          (entmake
            (list
              (cons 0 "MTEXT")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbMText")
              (cons 8 "karta studni - opis topograficzny")
              (cons 62 7)
              (cons 10 punkt13)
              (cons 40 1.6)
              (cons 41 5.0000)
              (cons 71 5)
              (cons 72 5)
              (cons 1 nazwa_p)
              (cons 7 "FL_pochyle")
              (cons 50 0)
            )
          );entmake
          (setq licznik (1+ licznik))
          ;
              );progn
            );repeat
            ;
          );progn
        )
        (defun RZUT_POZIOMY ()
          (progn
            ;rzut poziomy studni
            (entmake
              (list
          (cons 0 "CIRCLE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbCircle")
          (cons 8 "karta studni - rzut poziomy")
          (cons 10 (list (+ x 149.5245)(- y 144.1095)))
          (cons 40 15.00)
          (cons 370 5)
          (cons 62 7)
              )
            )
            ;
            ;DANE ZMIENNE
            (setq
              dlugosc (length lista_stu)
              licznik 0
            );setq
            ;
            (repeat dlugosc
              (progn
          (setq
            nazwa_l (nth 0 (nth licznik lista_stu))
            kierun (nth 1 (nth licznik lista_stu))
            nazwa_p (nth 2 (nth licznik lista_stu))
            xp (nth 4 (nth licznik lista_stu))
            xp (atof xp)
            yp (nth 3 (nth licznik lista_stu))
            yp (atof yp)
            dno_p (nth 5 (nth licznik lista_stu))
            sredn_p (nth 6 (nth licznik lista_stu))
            odleg (distance (list x_central y_central)(list xp yp))
            kat (angle (list x_central y_central)(list xp yp))
            lista_info_pol (append  lista_info_pol (list (list odleg kat)))
            ;
            punkt_kon (polar (list (+ x 149.5245)(- y 144.1095)) kat 25.00)
            ;punkt_kon jest poza studnia
            ;pierwotnie dochodzil do pokrywy
            punkt_rura (polar (list (+ x 149.5245)(- y 144.1095)) kat 15.00)
            ;*punkt_rura* do sprawdzenia jaka linia rysowac rure
            *punkt_rura* (polar (list 149.5245 144.1095) kat 15.00)
            x_punkt_rura (nth 0 punkt_rura)
            y_punkt_rura (nth 1 punkt_rura)
            x_pocz (+ x 149.5245)
            y_pocz (- y 144.1095)
            x_kon (nth 0 punkt_kon)
            y_kon (nth 1 punkt_kon)
            punkt1 (polar (list (+ x 149.5245)(- y 144.1095)) (- kat 0.11942893) 25.1794)
            punkt2 (polar (list (+ x 149.5245)(- y 144.1095)) (- kat 0.20135792) 15)
            punkt3 (polar (list (+ x 149.5245)(- y 144.1095)) (+ kat 0.11942893) 25.1794)
            punkt4 (polar (list (+ x 149.5245)(- y 144.1095)) (+ kat 0.20135792) 15)
          );setq
          ;
          ;zielona linia od srodka do wylotu studni
          (entmake
            (list
              (cons 0 "LINE")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbLine")
              (cons 10 (list (+ x 149.5245)(- y 144.1095)))
              (cons 11 punkt_rura)
              (cons 8 "karta studni - rzut poziomy")
              (cons 370 18)
              (cons 62 3)
            );list
          )
          ;
          (entmake
            (list
              (cons 0 "LINE")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbLine")
              (cons 10 punkt1)
              (cons 11 punkt2)
              (cons 8 "karta studni - rzut poziomy")
              (cons 370 18)
              (cons 62 7)
            );list
          )
          (entmake
            (list
              (cons 0 "LINE")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbLine")
              (cons 10 punkt1)
              (cons 11 punkt3)
              (cons 8 "karta studni - rzut poziomy")
              (cons 370 18)
              (cons 62 7)
            );list
          )
          (entmake
            (list
              (cons 0 "LINE")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbLine")
              (cons 10 punkt3)
              (cons 11 punkt4)
              (cons 8 "karta studni - rzut poziomy")
              (cons 370 18)
              (cons 62 7)
            );list
          )
          (setq
            punkt5 (polar punkt_kon  kat 4.00)
          );setq
          (entmake
            (list
              (cons 0 "MTEXT")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbMText")
              (cons 8 "karta studni - rzut poziomy")
              (cons 62 7)
              (cons 10 punkt5)
              (cons 40 2.5)
              (cons 41 4.0000)
              (cons 71 5)
              (cons 72 5)
              (cons 1 nazwa_l)
              (cons 7 "FL_pochyle")
              (cons 50 0)	
            )
          )
          (entmake
            (list
              (cons 0 "CIRCLE")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbCircle")
              (cons 8 "karta studni - rzut poziomy")
              (cons 10 punkt5)
              (cons 40 3.00)
              (cons 370 18)
              (cons 62 7)
            )
          )
          ;
          ;
          (if (= (strcase kierun) "Z")
            (progn
              (setq
                punkt8 (polar (list x_pocz y_pocz) (- kat 0.032045385) 19.7)
                punkt9 (polar (list x_pocz y_pocz) kat 18.36)
                punkt10 (polar (list x_pocz y_pocz) (+ kat 0.032045385) 19.7)
                punkt11 (polar (list x_pocz y_pocz) kat 23.37)
              );setq
            );progn
          );if
          ;
          (if (= (strcase kierun) "DO")
            (progn
              (setq
                punkt8 (polar (list x_pocz y_pocz) (+ kat 0.028561985) 22.05)
                punkt11 (polar (list x_pocz y_pocz) kat 18.36)
                punkt10 (polar (list x_pocz y_pocz) (- kat 0.028561985) 22.05)
                punkt9 (polar (list x_pocz y_pocz) kat 23.37)
              );setq
            );progn
          );if
          ;
          (entmake
            (list
              (cons 0 "LINE")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbLine")
              (cons 10 punkt8)
              (cons 11 punkt9)
              (cons 8 "karta studni - rzut poziomy")
              (cons 370 18)
              (cons 62 7)
            );list
          )
          (entmake
            (list
              (cons 0 "LINE")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbLine")
              (cons 10 punkt9)
              (cons 11 punkt10)
              (cons 8 "karta studni - rzut poziomy")
              (cons 370 18)
              (cons 62 7)
            );list
          )
          (entmake
            (list
              (cons 0 "LINE")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbLine")
              (cons 10 punkt9)
              (cons 11 punkt11)
              (cons 8 "karta studni - rzut poziomy")
              (cons 370 18)
              (cons 62 7)
            );list
          )
          ;
          ;opis rury: Z CZEGO, LUB DO CZEGO
          ;opis rury: SREDNICA
          (setq
            punkt6 (polar (list x_pocz y_pocz) (- kat 0.22234025) 20.35)
            punkt7 (polar (list x_pocz y_pocz) (+ kat 0.22355727) 20.35)
            opkierun (strcat kierun " " nazwa_p)
            sredn (strcat "%%c"sredn_p)
          );setq
          (if (and (>= kat (* pi 0.5))(< kat (* pi 1.5)))
            (progn
              (setq
                kat (+ kat pi)
                opkierun (strcat "%%c"sredn_p)
                sredn (strcat kierun " " nazwa_p)
              );setq
            );progn
          );if
          ;
          (entmake
            (list
              (cons 0 "MTEXT")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbMText")
              (cons 8 "karta studni - rzut poziomy")
              (cons 62 7)
              (cons 10 punkt7)
              (cons 40 1.5)
              (cons 41 10.0000)
              (cons 71 5)
              (cons 72 5)
              (cons 1 opkierun)
              (cons 7 "FL_pochyle")
              (cons 50 kat)	
            )
          )
          ;srednica przylacza
          (entmake
            (list
              (cons 0 "MTEXT")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbMText")
              (cons 8 "karta studni - rzut poziomy")
              (cons 62 7)
              (cons 10 punkt6)
              (cons 40 1.5)
              (cons 41 10.0000)
              (cons 71 5)
              (cons 72 5)
              (cons 1 sredn)
              (cons 7 "FL_pochyle")
              (cons 50 kat)	
            )
          )
          ;
          ;sprawdzenie jakiej uzyc lini do narysowania rury w rzucie pionowym
          ;sprawdzenie opiera sie na wspl Y
          (if (> 144.1095 (nth 1 *punkt_rura*))
            (setq rodzaj_lini_rury "Continuous")
            (setq rodzaj_lini_rury "KartaStudni2")
          );if
          ;
          (terpri)
          ;(prin1 (rtos (nth 1 *punkt_rura*) 2 5))
          ;
              (setq
                punkt_srodek_studni (list (+ x 149.5245)(- y 144.1095))
                punkt_na_przylaczu punkt_rura
              );setq
          ; (if (= (strcase kierun) "DO")
          ;   (progn
          ;     (setq
          ;       punkt_srodek_studni (list (+ x 149.5245)(- y 144.1095))
          ;       punkt_na_przylaczu punkt_rura
          ;     );setq
          ;   );progn
          ; );if
          ;
          (setq
            lista_rzut_poz (append lista_rzut_poz (list (list nazwa_l dno_p punkt_rura rodzaj_lini_rury)))
            licznik (1+ licznik)
          );setq
          ;
              );progn
            );repeat
            ;
          );progn
        )
        (defun RZUT_PIONOWY ()
          (progn
            ;studnia
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 134.5245)(- y 186.1866)))
          (cons 11 (list (+ x 134.5245)(- y 249.2532)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 134.5245)(- y 249.2532)))
          (cons 11 (list (+ x 164.5245)(- y 249.2532)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 164.5245)(- y 186.1866)))
          (cons 11 (list (+ x 164.5245)(- y 249.2532)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;odnosnik do dolu studni
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 165.9654)(- y 255.4493)))
          (cons 11 (list (+ x 159.6266)(- y 249.2532)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 180.5983)(- y 255.4493)))
          (cons 11 (list (+ x 165.9654)(- y 255.4493)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;WYSOKOSC DNA STUDNI
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list (+ x 175.1554)(- y 253.5995)))
          (cons 40 2.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 (ZAMIEN.NA, dol_central))
          (cons 7 "FL_pochyle")
          (cons 50 0)
              )
            )
            ;
          );progn
        )
        (defun RZUT_PIONOWY_OBLICZENIA ()
          (progn
            (setq
              gora_g (atof gora_central)
              dol_g (atof dol_central)
              glebokosc (- gora_g dol_g)
              glebokosc_p (atof dno_p)
            );setq
            (if (= (rtos glebokosc_p 2 2) "0.00")
              (setq glebokosc_p glebokosc)
            );if
            (setq
              glebokosc (rtos glebokosc 2 2)
              glebokosc_p (rtos glebokosc_p 2 2)
              glebokosc (atof glebokosc)
              glebokosc_p (atof glebokosc_p)
            );
            ;
            (if (> glebokosc_p glebokosc)
              (progn
          (alert
            (strcat
              "\nNie zostanie dorysowane połaczenie ze studni głownej do " nazwa_p "!!!"
              "\nWlot z " nazwa_p " jest głębiej niż studnia główna."
              "\nSprawdz dane wejściowe."
            );strcat
          );alert
          (exit)
          ;
              );progn
            );if
            ;
            ;RURA NA DNIE
            ;TUTAJ MOZNA STWORZYC LISTE I DO NIEJ NAPISAC ZALEZNOSCI POLOZENIA
            (if (and (> glebokosc_p 0)(< glebokosc_p glebokosc))
              (progn
          (setq
            y_czesc (* (/ glebokosc_p glebokosc) 60.0666)
            x_pion (nth 0 punkt_rura)
            y_pion* (+ 189.1866 y_czesc)
            y_pion (- (- y 189.1866) y_czesc)
          );setq
          ;
          ;jezeli glebokosc_p jest wieksza od glebokosc
          ;po komunikacie narysuje wlot na dnie
          (if (> y_pion* 246.2532) (setq y_pion (- (- y 246.2532) (* (/ glebokosc_p glebokosc) (- y_czesc 60.0666)))))
          ;
          (if (and (>= x_pion (+ x 134.5245))(< x_pion (+ x 137.5245)))
            (setq x_pion (+ x 137.5245))
          );if
          (if (and (>= x_pion (+ x 161.5245))(< x_pion (+ x 164.5245)))
            (setq x_pion (+ x 161.5245))
          );if
              );progn
            );if
            (if (=  (rtos (- glebokosc glebokosc_p) 2 2) "0.00")
              (progn
          (setq
            x_pion (nth 0 punkt_rura)
            y_pion (- y 246.2532) ;wlot/wylot na dnie studni
          );setq
          (if (and (>= x_pion (+ x 134.5245))(< x_pion (+ x 137.5245)))
            (setq x_pion (+ x 137.5245))
          );if
          (if (and (>= x_pion (+ x 161.5245))(< x_pion (+ x 164.5245)))
            (setq x_pion (+ x 161.5245))
          );if
              );progn
            );if
            (setq
              lista_rur (append lista_rur (list (list x_pion nazwa_l y_pion)))
            );setq
          );progn
        )
        (defun RZUT_PIONOWY_RYSUJ_RURY (lista /)
          (progn
            (setq
              dlugosc (length lista)
              licznik 0
            );setq
            (repeat dlugosc
              (progn
          (setq
            tmp (nth licznik lista)
            nazwa_l (nth 0 tmp)
            dno_p (nth 1 tmp)
            punkt_rura (nth 2 tmp)
            rodzaj_lini_rury (nth 3 tmp)
          );setq
          (RZUT_PIONOWY_OBLICZENIA)
          (entmake
            (list
              (cons 0 "MTEXT")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbMText")
              (cons 8 "karta studni - rzut pionowy")
              (cons 62 7)
              (cons 10 (list x_pion y_pion))
              (cons 40 2.5)
              (cons 41 5.0000)
              (cons 71 5)
              (cons 72 5)
              (cons 1 nazwa_l)
              (cons 7 "FL_pochyle")
              (cons 50 0)
            )
          )
          (entmake
            (list
              (cons 0 "CIRCLE")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbCircle")
              (cons 8 "karta studni - rzut pionowy")
              (cons 10 (list x_pion y_pion))
              (cons 40 3.0)
              (cons 370 5)
              (cons 62 7)
              (cons 6 rodzaj_lini_rury)
            )
          );entmake
          ;
          (setq licznik (1+ licznik))
              );progn
            );repeat
            ;
          );progn
        )
        (defun RZUT_POZIOMY_WLAZ_SROD_TAKI_SAM_JAK_STUDNIA ()
          (progn
            ;STUDNIA linia - . - . - pozioma
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 132.0245)(- y 144.1095)))
          (cons 11 (list (+ x 167.0245)(- y 144.1095)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 9)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;STUDNIA linia - . - . - pionowa
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.5245)(- y 126.6095)))
          (cons 11 (list (+ x 149.5245)(- y 161.6095)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 9)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;opis srednic studni
            ;pozioma kreska pod opisem 0,00
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.8931)(- y 157.8079)))
          (cons 11 (list (+ x 153.1931)(- y 157.8079)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 6 "Continuous")
          (cons 62 7)
              )
            )
            ;opis 0,00
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 (list (+ x 151.5000)(- y 156.6500)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,00")
          (cons 7 "FL_proste")
          (cons 50 0)
          (cons 62 7)
              )
            )
            ;strzalka przy 0,00
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 153.9529)(- y 157.2067)))
          (cons 11 (list (+ x 153.9529)(- y 155.5693)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 153.9529)(- y 155.5693)))
          (cons 11 (list (+ x 153.6559)(- y 156.0876)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 153.9529)(- y 155.5693)))
          (cons 11 (list (+ x 154.2498)(- y 156.0876)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,50
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 (list (+ x 151.5000)(- y 131.2500)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 srednicaStudni)
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;dwia podkreslniki przy srednicy studni
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.8931)(- y 132.4079)))
          (cons 11 (list (+ x 153.1931)(- y 132.4079)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.8931)(- y 132.7579)))
          (cons 11 (list (+ x 153.1931)(- y 132.7579)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;
          );progn
        )
        (defun RZUT_PIONOWY_WLAZ_SROD_TAKI_SAM_JAK_STUDNIA ()
          (progn
            ;wlaz
            ;pozioma linia - . - . - wlazu
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 133.0245)(- y 184.4550)))
          (cons 11 (list (+ x 166.0246)(- y 184.4550)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;opis 0,00
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list (+ x 153.3652)(- y 181.0277)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,00")
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik pod 0,00
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 155.3764)(- y 182.1669)))
          (cons 11 (list (+ x 151.2773)(- y 182.1669)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;strzalka
            ;pionowa krecha
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 150.6001)(- y 179.1208)))
          (cons 11 (list (+ x 150.6001)(- y 181.9340)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;lewa krecha strzalki
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 150.1340)(- y 181.1271)))
          (cons 11 (list (+ x 150.6001)(- y 181.9340)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;prawa krecha strzalki
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 151.0604)(- y 181.1238)))
          (cons 11 (list (+ x 150.6001)(- y 181.9340)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,10
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list (+ x 152.4011)(- y 188.1148)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,10")
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik pod 0,10
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 154.4123)(- y 189.254)))
          (cons 11 (list (+ x 150.3132)(- y 189.254)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis dna (wlot)
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list (+ x 152.4011)(- y 250.6824)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 (ZAMIEN.NA, (rtos (- (atof gora_central)(atof dol_central)) 2 2)))
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik wlotu
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 154.4123)(- y 251.8216)))
          (cons 11 (list (+ x 150.3132)(- y 251.8216)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 154.4123)(- y 252.398)))
          (cons 11 (list (+ x 150.3132)(- y 252.398)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;TROJKAT NA WLAZIE - I LINIA POZIOMA POD WYS GORY
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 176.5001)(- y 181.4191)))
          (cons 11 (list (+ x 158.0458)(- y 181.4191)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 158.0458)(- y 181.4191)))
          (cons 11 (list (+ x 158.7988)(- y 182.7233)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 159.5518)(- y 181.4191)))
          (cons 11 (list (+ x 158.7988)(- y 182.7233)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;WYSOKOSC GORY POKRYWY
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list (+ x 170.8801)(- y 179.5125)))
          (cons 40 2.5)
          (cons 41 15.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 (ZAMIEN.NA, gora_central))
          (cons 7 "FL_pochyle")
          (cons 50 0)
              )
            )
            ;linia pionowa studni - . - . - . -
            ;linia - . - . - studni
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.5245)(- y 181.2233)))
          (cons 11 (list (+ x 149.5245)(- y 250.7532)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;pozioma linia na gorze wlazu
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 134.5245)(- y 182.7233)))
          (cons 11 (list (+ x 164.5245)(- y 182.7233)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;pozioma linia na DOLE wlazu
            ;dluga linia
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 134.5245)(- y 186.1866)))
          (cons 11 (list (+ x 164.5245)(- y 186.1866)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;pionowa - lewa linia - WLAZ
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 134.5245)(- y 186.1866)))
          (cons 11 (list (+ x 134.5245)(- y 182.7233)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;pionowa - prawa linia - WLAZ
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 164.5245)(- y 182.7233)))
          (cons 11 (list (+ x 164.5245)(- y 186.1866)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;
          );progn
        )
        (defun WLAZ_SROD_TAKI_SAM_JAK_STUDNIA ()
          (progn
            (RZUT_POZIOMY)
            (RZUT_POZIOMY_WLAZ_SROD_TAKI_SAM_JAK_STUDNIA)
            (RZUT_PIONOWY)
            (RZUT_PIONOWY_WLAZ_SROD_TAKI_SAM_JAK_STUDNIA)
            (RZUT_PIONOWY_RYSUJ_RURY lista_rzut_poz)
          );progn
        )
        (defun RZUT_POZIOMY_WLAZ_SROD_WIEKSZY ()
          (progn
            ;linia - . - . - pozioma
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 132.0245)(- y 144.1095)))
          (cons 11 (list (+ x 167.0245)(- y 144.1095)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 9)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;linia - . - . - pionowa
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.5245)(- y 126.6095)))
          (cons 11 (list (+ x 149.5245)(- y 161.6095)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 9)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;rzut poziomy wlazu - wiekszego od studni
            (entmake
              (list
          (cons 0 "CIRCLE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbCircle")
          (cons 8 "karta studni - rzut poziomy")
          (cons 10 (list (+ x 149.5245)(- y 144.1095)))
          (cons 40 17.00)
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis srednic studni
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.8761)(- y 163.5046)))
          (cons 11 (list (+ x 153.0761)(- y 163.5046)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;opis 0,00
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 (list (+ x 151.4761)(- y 162.4505)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,00")
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;strzalka przy 0,00
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 153.9529)(- y 163.0209)))
          (cons 11 (list (+ x 153.9529)(- y 161.3835)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 153.9529)(- y 161.3835)))
          (cons 11 (list (+ x 153.6559)(- y 161.9018)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 153.9529)(- y 161.3835)))
          (cons 11 (list (+ x 154.2498)(- y 161.9018)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,10
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 (list (+ x 151.4761)(- y 156.9469)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,10")
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik przy 0,10
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.8761)(- y 158.001)))
          (cons 11 (list (+ x 153.0761)(- y 158.001)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,60
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 (list (+ x 151.4761)(- y 131.0014)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 srednicaStudniWIEKSZA)
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik przy srednicy -0,10
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.8761)(- y 132.0554)))
          (cons 11 (list (+ x 153.0761)(- y 132.0554)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,70
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 (list (+ x 151.4761)(- y 125.0707)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 srednicaStudni)
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;dwia podkreslniki przy 0,70
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.8761)(- y 126.1248)))
          (cons 11 (list (+ x 153.0761)(- y 126.1248)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.8761)(- y 126.4283)))
          (cons 11 (list (+ x 153.0761)(- y 126.4283)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;
          );progn
        )
        (defun RZUT_PIONOWY_WLAZ_SROD_WIEKSZY ()
          (progn
            ;wlaz
            ;linia - . - . - wlazu
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 131.0245)(- y 184.4550)))
          (cons 11 (list (+ x 168.0245)(- y 184.4550)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;opis 0,00
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list (+ x 153.3652)(- y 181.0277)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,00")
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik pod 0,00
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 155.3764)(- y 182.1669)))
          (cons 11 (list (+ x 151.2773)(- y 182.1669)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;strzalka
            ;pionowa krecha
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 150.6001)(- y 179.1208)))
          (cons 11 (list (+ x 150.6001)(- y 181.9340)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;lewa krecha
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 150.1340)(- y 181.1271)))
          (cons 11 (list (+ x 150.6001)(- y 181.9340)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;prawa krecha
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 151.0604)(- y 181.1238)))
          (cons 11 (list (+ x 150.6001)(- y 181.9340)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,10
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list (+ x 152.4011)(- y 188.1148)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,10")
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik pod 0,10
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 154.4123)(- y 189.254)))
          (cons 11 (list (+ x 150.3132)(- y 189.254)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis dna (wlot)
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list (+ x 152.4011)(- y 250.6824)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 (ZAMIEN.NA, (rtos (- (atof gora_central)(atof dol_central)) 2 2)))
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik wlotu
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 154.4123)(- y 251.8216)))
          (cons 11 (list (+ x 150.3132)(- y 251.8216)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 154.4123)(- y 252.398)))
          (cons 11 (list (+ x 150.3132)(- y 252.398)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;TROJKAT NA WLAZIE - I LINIA POZIOMA POD WYS GORY
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 176.5001)(- y 181.4191)))
          (cons 11 (list (+ x 158.1201)(- y 181.4191)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 158.0458)(- y 181.4191)))
          (cons 11 (list (+ x 158.7988)(- y 182.7233)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 159.5518)(- y 181.4191)))
          (cons 11 (list (+ x 158.7988)(- y 182.7233)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;WYSOKOSC GORY POKRYWY
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list (+ x 170.8801)(- y 179.5125)))
          (cons 40 2.5)
          (cons 41 15.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 (ZAMIEN.NA, gora_central))
          (cons 7 "FL_pochyle")
          (cons 50 0)
              )
            )
            ;linia pionowa studni - . - . - . -
            ;linia - . - . - studni
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.5245)(- y 181.2233)))
          (cons 11 (list (+ x 149.5245)(- y 250.7532)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;pozioma linia na gorze wlazu
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 166.5245)(- y 182.7233)))
          (cons 11 (list (+ x 132.5245)(- y 182.7233)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;pozioma linia na dole wlazu
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 132.5245)(- y 186.1866)))
          (cons 11 (list (+ x 166.5245)(- y 186.1866)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 132.5245)(- y 182.7233)))
          (cons 11 (list (+ x 132.5245)(- y 186.1866)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;
            ;
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 166.5245)(- y 182.7233)))
          (cons 11 (list (+ x 166.5245)(- y 186.1866)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;
          );progn
        )
        (defun WLAZ_SROD_WIEKSZY ()
          (progn
            (RZUT_POZIOMY)
            (RZUT_POZIOMY_WLAZ_SROD_WIEKSZY)
            (RZUT_PIONOWY)
            (RZUT_PIONOWY_WLAZ_SROD_WIEKSZY)
            (RZUT_PIONOWY_RYSUJ_RURY lista_rzut_poz)
          );progn
        )
        (defun RZUT_POZIOMY_WLAZ_SROD_MNIEJSZY ()
          (progn
            ;linia - . - . - pozioma
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 132.0245)(- y 144.1095)))
          (cons 11 (list (+ x 167.0245)(- y 144.1095)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 9)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;linia - . - . - pionowa
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.5245)(- y 126.6095)))
          (cons 11 (list (+ x 149.5245)(- y 161.6095)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 9)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;rzut poziomy wlazu - mniejszego od studni
            ;wlaz
            (entmake
              (list
          (cons 0 "CIRCLE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbCircle")
          (cons 8 "karta studni - rzut poziomy")
          (cons 10 (list (+ x 149.5245)(- y 144.1095)))
          (cons 40 10.00)
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis srednic studni
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.8931)(- y 157.8079)))
          (cons 11 (list (+ x 153.1931)(- y 157.8079)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 6 "Continuous")
          (cons 62 7)
              )
            )
            ;opis 0,00
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 (list (+ x 151.5000)(- y 156.6500)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,00")
          (cons 7 "FL_proste")
          (cons 50 0)
          (cons 62 7)
              )
            )
            ;strzalka przy 0,00
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 153.9529)(- y 157.2067)))
          (cons 11 (list (+ x 153.9529)(- y 155.5693)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 153.9529)(- y 155.5693)))
          (cons 11 (list (+ x 153.6559)(- y 156.0876)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 153.9529)(- y 155.5693)))
          (cons 11 (list (+ x 154.2498)(- y 156.0876)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,10
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 (list (+ x 151.5000)(- y 151.6500)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,10")
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik przy 0,10
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.8931)(- y 152.8079)))
          (cons 11 (list (+ x 153.1931)(- y 152.8079)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,60
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 (list (+ x 151.5000)(- y 136.2500)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 srednicaStudniWIEKSZA)
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik przy 0,60
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.8931)(- y 137.4079)))
          (cons 11 (list (+ x 153.1931)(- y 137.4079)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,70
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 (list (+ x 151.5000)(- y 131.2500)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 srednicaStudni)
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;dwia podkreslniki przy 0,70
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.8931)(- y 132.4079)))
          (cons 11 (list (+ x 153.1931)(- y 132.4079)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.8931)(- y 132.7579)))
          (cons 11 (list (+ x 153.1931)(- y 132.7579)))
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;
          );progn
        )
        (defun RZUT_PIONOWY_WLAZ_SROD_MNIEJSZY ()
          (progn
            ;wlaz
            ;pozioma linia - . - . - wlazu
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 138.0245)(- y 184.4550)))
          (cons 11 (list (+ x 161.0245)(- y 184.4550)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;opis 0,00
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list (+ x 153.3652)(- y 181.0277)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,00")
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik pod 0,00
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 155.3764)(- y 182.1669)))
          (cons 11 (list (+ x 151.2773)(- y 182.1669)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;strzalka
            ;pionowa krecha
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 150.6001)(- y 179.1208)))
          (cons 11 (list (+ x 150.6001)(- y 181.9340)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;lewa krecha
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 150.1340)(- y 181.1271)))
          (cons 11 (list (+ x 150.6001)(- y 181.9340)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;prawa krecha
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 151.0604)(- y 181.1238)))
          (cons 11 (list (+ x 150.6001)(- y 181.9340)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,10
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list (+ x 152.4011)(- y 188.1148)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,10")
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik pod 0,10
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 154.4123)(- y 189.254)))
          (cons 11 (list (+ x 150.3132)(- y 189.254)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis dna (wlot)
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list (+ x 152.4011)(- y 250.6824)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 (ZAMIEN.NA, (rtos (- (atof gora_central)(atof dol_central)) 2 2)))
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik wlotu
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 154.4123)(- y 251.8216)))
          (cons 11 (list (+ x 150.3132)(- y 251.8216)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 154.4123)(- y 252.398)))
          (cons 11 (list (+ x 150.3132)(- y 252.398)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;TROJKAT NA WLAZIE - I LINIA POZIOMA POD WYS GORY
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 176.5001)(- y 181.4191)))
          (cons 11 (list (+ x 158.1201)(- y 181.4191)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 158.0458)(- y 181.4191)))
          (cons 11 (list (+ x 158.7988)(- y 182.7233)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 159.5518)(- y 181.4191)))
          (cons 11 (list (+ x 158.7988)(- y 182.7233)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;WYSOKOSC GORY POKRYWY
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list (+ x 170.8801)(- y 179.5125)))
          (cons 40 2.5)
          (cons 41 15.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 (ZAMIEN.NA, gora_central))
          (cons 7 "FL_pochyle")
          (cons 50 0)
              )
            )
            ;linia pionowa studni - . - . - . -
            ;linia - . - . - studni
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 149.5245)(- y 181.2233)))
          (cons 11 (list (+ x 149.5245)(- y 250.7532)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;pozioma linia na gorze wlazu
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 139.5245)(- y 182.7233)))
          (cons 11 (list (+ x 159.5249)(- y 182.7233)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;pozioma linia na DOLE wlazu
            ;dluga linia
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 134.5245)(- y 186.1866)))
          (cons 11 (list (+ x 164.5245)(- y 186.1866)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;pionowa - lewa linia - WLAZ
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 139.5245)(- y 186.1866)))
          (cons 11 (list (+ x 139.5245)(- y 182.7233)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;pionowa - prawa linia - WLAZ
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 159.5245)(- y 182.7233)))
          (cons 11 (list (+ x 159.5245)(- y 186.1866)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;
          );progn
        )
        (defun WLAZ_SROD_MNIEJSZY ()
          (progn
            (RZUT_POZIOMY)
            (RZUT_POZIOMY_WLAZ_SROD_MNIEJSZY)
            (RZUT_PIONOWY)
            (RZUT_PIONOWY_WLAZ_SROD_MNIEJSZY)
            (RZUT_PIONOWY_RYSUJ_RURY lista_rzut_poz)
          );progn
        )
        (defun RZUT_POZIOMY_WLAZ_NA_PRAWO ()
          (progn
            ;
          ;   (if (= punkt_na_przylaczu nil)
          ;     (progn
          ; (alert
          ;   (strcat
          ; 	"\nWszystkie kierunki przylaczy sa \"z\"."
          ; 	"\nBrakuje kierunku \"do\" innej studni."
          ; 	"\nPopraw blad i zaladuj program jeszcze raz."
          ;   );strcat
          ; );alert
          ; (exit)
          ;     );progn
          ;   );if
            (setq
              kat_do (angle punkt_srodek_studni punkt_rura)
              kat_z (+ kat_do pi)
              kat*do- (+ kat_do (* 0.5 pi))
              kat*do+ (- kat_do (* 0.5 pi))
              punk_srodka_wlazu (polar punkt_srodek_studni kat*do+ 3)
            );setq
            ;wlaz na prawo od srodka studni
            (entmake
              (list
          (cons 0 "CIRCLE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbCircle")
          (cons 8 "karta studni - rzut poziomy")
          (cons 10 punk_srodka_wlazu)
          (cons 40 10.00)
          (cons 370 18)
          (cons 62 7)
              )
            )
            (setq
              prawa_strona-.-.- (polar punk_srodka_wlazu kat*do+ 13.50)
              lewa_strona-.-.- (polar punk_srodka_wlazu kat*do- 19.5)
            );setq
            ;linia - . - . - przechodzaca przez wlaz
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 lewa_strona-.-.-)
          (cons 11 prawa_strona-.-.-)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 9)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;
            ;opis 0,00
            (setq
              opis_0,00 (polar prawa_strona-.-.- kat_do 2.50)
            );setq
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 opis_0,00)
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,00")
          (cons 7 "FL_proste")
          (cons 50 kat_do)
          (cons 62 7)
              )
            )
            ;
            ;podkreslnik pod 0,00
            (setq
              podkreslnik_pod_0,00srod (polar opis_0,00 kat*do+ 1.00)
              podkreslnik_pod_0,00_a (polar podkreslnik_pod_0,00srod kat_do 1.80)
              podkreslnik_pod_0,00_b (polar podkreslnik_pod_0,00_a kat_z 3.60)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 podkreslnik_pod_0,00_a) ;a na lewo
          (cons 11 podkreslnik_pod_0,00_b) ;b na prawo
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 6 "Continuous")
          (cons 62 7)
              )
            )
            ;strzalka przy 0,00
            ;pion strzalki
            (setq
              strzalka_a (polar podkreslnik_pod_0,00_a kat_do 0.7)
              strzalka_b (polar strzalka_a kat*do- 2.2)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 strzalka_a)
          (cons 11 strzalka_b)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;lewa strona strzalki
            (setq
              lewa_strzalka (polar strzalka_b (- kat*do+ 0.5204) 0.60)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 strzalka_b)
          (cons 11 lewa_strzalka)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;prawa strona strzalki
            (setq
              prawa_strzalka (polar strzalka_b (+ kat*do+ 0.5204) 0.60)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 strzalka_b)
          (cons 11 prawa_strzalka)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,10
            (setq
              opis_0,10 (polar opis_0,00 kat*do- 6.00)
            );setq
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 opis_0,10)
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,10")
          (cons 7 "FL_proste")
          (cons 50 kat_do)
              )
            )
            ;podkreslnik pod 0,10
            (setq
              podkreslnik_pod_0,10_a (polar podkreslnik_pod_0,00_a kat*do- 6.00)
              podkreslnik_pod_0,10_b (polar podkreslnik_pod_0,00_b kat*do- 6.00)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 podkreslnik_pod_0,10_a)
          (cons 11 podkreslnik_pod_0,10_b)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,60
            (setq
              opis_0,60 (polar opis_0,10 kat*do- 15.00)
            );setq
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 opis_0,60)
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,70")
          (cons 7 "FL_proste")
          (cons 50 kat_do)
              )
            )
            ;podkreslnik pod 0,60
            (setq
              podkreslnik_pod_0,60_a (polar podkreslnik_pod_0,10_a kat*do- 15.00)
              podkreslnik_pod_0,60_b (polar podkreslnik_pod_0,10_b kat*do- 15.00)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 podkreslnik_pod_0,60_a)
          (cons 11 podkreslnik_pod_0,60_b)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 1,00
            (setq
              opis_1,00 (polar opis_0,60 kat*do- 8.50)
            );setq
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 opis_1,00)
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 srednicaStudni)
          (cons 7 "FL_proste")
          (cons 50 kat_do)
              )
            )
            ;dwia podkreslniki przy 0,70
            ;pierwszy podkreslnik - zaraz pod 1,00
            (setq
              podkreslnik_pod_1,00_a (polar podkreslnik_pod_0,60_a kat*do- 8.50)
              podkreslnik_pod_1,00_b (polar podkreslnik_pod_0,60_b kat*do- 8.50)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 podkreslnik_pod_1,00_a)
          (cons 11 podkreslnik_pod_1,00_b)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;drugi podkreslnik pod pierwszym podkreslnikiem
            (setq
              podkreslnik_pod_1,00_c (polar podkreslnik_pod_0,60_a kat*do- 8.20)
              podkreslnik_pod_1,00_d (polar podkreslnik_pod_0,60_b kat*do- 8.20)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 podkreslnik_pod_1,00_c)
          (cons 11 podkreslnik_pod_1,00_d)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;obliczamy kwadranty okregu
            (setq
              kwadrant_lewy (polar punk_srodka_wlazu pi 10)
              kwadrant_prawy (polar punk_srodka_wlazu 0 10)
            );setq
            ;
          );progn
        )
        (defun RZUT_PIONOWY_WLAZ_NA_PRAWO-LEWO ()
          (progn
            (setq
              x_lin_pion_wlaz-.-.- (nth 0 punk_srodka_wlazu)
              y_lin_pion_wlaz-.-.- (nth 1 punk_srodka_wlazu)
            );setq
            ;
            ;rzutujemy dwa kwadranty
            ;kwadrant_lewy
            ;kwadrant_prawy
            ;
            ;wlaz
            ;pozioma linia - . - . - wlazu
            (setq
              x_poz_lin_wlaz_a (- (nth 0 kwadrant_lewy) 1.5)
              x_poz_lin_wlaz_b (+ (nth 0 kwadrant_prawy) 1.5)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x_poz_lin_wlaz_a (- y 184.4550)))
          (cons 11 (list x_poz_lin_wlaz_b (- y 184.4550)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
                ;linia pionowa studni - . - . - . -
            ;linia - . - . - studni
            (setq
              x_pion_lin_stu (nth 0 punk_srodka_wlazu)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x_pion_lin_stu (- y 181.2233)))
          (cons 11 (list x_pion_lin_stu (- y 250.7532)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;pozioma linia na gorze wlazu
            (setq
              x_poz_lin_na_g_wlazu_a (nth 0 kwadrant_lewy)
              x_poz_lin_na_g_wlazu_b (nth 0 kwadrant_prawy)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x_poz_lin_na_g_wlazu_a (- y 182.7233)))
          (cons 11 (list x_poz_lin_na_g_wlazu_b (- y 182.7233)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;pozioma linia na DOLE wlazu
            ;dluga linia
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list (+ x 134.5245)(- y 186.1866)))
          (cons 11 (list (+ x 164.5245)(- y 186.1866)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;pionowa - lewa linia - WLAZ
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x_poz_lin_na_g_wlazu_a (- y 186.1866)))
          (cons 11 (list x_poz_lin_na_g_wlazu_a (- y 182.7233)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;pionowa - prawa linia - WLAZ
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x_poz_lin_na_g_wlazu_b (- y 182.7233)))
          (cons 11 (list x_poz_lin_na_g_wlazu_b (- y 186.1866)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,00
            (setq
              x_opis0,00 (+ (nth 0 punk_srodka_wlazu) 3.8407)
            );setq
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list x_opis0,00 (- y 181.0277)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,00")
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik pod 0,00
            (setq
              x_podkr0,00_a (+ x_lin_pion_wlaz-.-.- 1.7528)
              x_podkr0,00_b (+ x_lin_pion_wlaz-.-.- 5.8519)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x_podkr0,00_a (- y 182.1669)))
          (cons 11 (list x_podkr0,00_b (- y 182.1669)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;strzalka
            (setq
              x_pion_strzal (+ x_lin_pion_wlaz-.-.- 1.0756)
            );setq
            ;pionowa krecha
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x_pion_strzal (- y 179.1208)))
          (cons 11 (list x_pion_strzal (- y 181.9340)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;lewa krecha
            (setq
              x_lewa_krecha_strzal (+ x_lin_pion_wlaz-.-.- 0.6095)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x_lewa_krecha_strzal (- y 181.1238)))
          (cons 11 (list x_pion_strzal (- y 181.9340)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;prawa krecha
            (setq
              x_prawa_krecha_strzal (+ x_lin_pion_wlaz-.-.- 1.5359)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x_prawa_krecha_strzal (- y 181.1238)))
          (cons 11 (list x_pion_strzal (- y 181.9340)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,10
            (setq
              x_opis0,10idna (+ x_lin_pion_wlaz-.-.- 2.8766)
            );setq
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list x_opis0,10idna (- y 188.1148)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,10")
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik pod 0,10
            (setq
              x_podkreslnika (+ x_lin_pion_wlaz-.-.- 0.7887)
              x_podkreslnikb (+ x_lin_pion_wlaz-.-.- 4.8878)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x_podkreslnika (- y 189.254)))
          (cons 11 (list x_podkreslnikb (- y 189.254)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis dna (wlot)
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list x_opis0,10idna (- y 250.6824)))
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 (ZAMIEN.NA, (rtos (- (atof gora_central)(atof dol_central)) 2 2)))
          (cons 7 "FL_proste")
          (cons 50 0)
              )
            )
            ;podkreslnik wlotu
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x_podkreslnika (- y 251.8216)))
          (cons 11 (list x_podkreslnikb (- y 251.8216)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x_podkreslnika (- y 252.398)))
          (cons 11 (list x_podkreslnikb (- y 252.398)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;TROJKAT NA WLAZIE - I LINIA POZIOMA POD WYS GORY
            (setq
              x_lin_poz_pod_wys_gory_a (+ x_lin_pion_wlaz-.-.- 8.5213)
              x_lin_poz_pod_wys_gory_b (+ x_lin_pion_wlaz-.-.- 26.9756)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x_lin_poz_pod_wys_gory_a (- y 181.4191)))
          (cons 11 (list x_lin_poz_pod_wys_gory_b (- y 181.4191)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;lewa strona trojkata
            (setq
              x_dol_lin_trojk (+ x_lin_pion_wlaz-.-.- 9.2743)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x_lin_poz_pod_wys_gory_a (- y 181.4191)))
          (cons 11 (list x_dol_lin_trojk (- y 182.7233)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;prawa strona trojkata
            (setq
              x_prawy_lin_trojk (+ x_lin_pion_wlaz-.-.- 10.0273)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 (list x_prawy_lin_trojk (- y 181.4191)))
          (cons 11 (list x_dol_lin_trojk (- y 182.7233)))
          (cons 8 "karta studni - rzut pionowy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;WYSOKOSC GORY POKRYWY
            (setq
              x_gora_centr (+ x_lin_pion_wlaz-.-.- 21.3556)
            );setq
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut pionowy")
          (cons 62 7)
          (cons 10 (list x_gora_centr (- y 179.5125)))
          (cons 40 2.5)
          (cons 41 15.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 (ZAMIEN.NA, gora_central))
          (cons 7 "FL_pochyle")
          (cons 50 0)
              )
            )
            ;
          );progn
        )
        (defun WLAZ_NA_PRAWO ()
          (progn
            (RZUT_POZIOMY)
            (RZUT_POZIOMY_WLAZ_NA_PRAWO)
            (RZUT_PIONOWY)
            (RZUT_PIONOWY_WLAZ_NA_PRAWO-LEWO)
            (RZUT_PIONOWY_RYSUJ_RURY lista_rzut_poz)
          );progn
        )
        (defun RZUT_POZIOMY_WLAZ_NA_LEWO ()
          (progn
            ;
          ;   (if (= punkt_na_przylaczu nil)
          ;     (progn
          ; (alert
          ;   (strcat
          ; 	"\nWszystkie kierunki przyłaczy sa \"z\"."
          ; 	"\nBrakuje kierunku \"do\" innej studni."
          ; 	"\nPopraw bład i załaduj program jeszcze raz."
          ;   );strcat
          ; );alert
          ; (exit)
          ;     );progn
          ;   );if
            (setq
              kat_do (angle punkt_srodek_studni punkt_na_przylaczu)
              kat_z (+ kat_do pi)
              kat*do- (+ kat_do (* 0.5 pi))
              kat*do+ (- kat_do (* 0.5 pi))
              punk_srodka_wlazu (polar punkt_srodek_studni kat*do- 3)
            );setq
            ;wlaz na prawo od srodka studni
            (entmake
              (list
          (cons 0 "CIRCLE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbCircle")
          (cons 8 "karta studni - rzut poziomy")
          (cons 10 punk_srodka_wlazu)
          (cons 40 10.00)
          (cons 370 18)
          (cons 62 7)
              )
            )
            (setq
              prawa_strona-.-.- (polar punk_srodka_wlazu kat*do+ 19.50)
              lewa_strona-.-.- (polar punk_srodka_wlazu kat*do- 13.50)
            );setq
            ;linia - . - . - przechodzaca przez wlaz
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 lewa_strona-.-.-)
          (cons 11 prawa_strona-.-.-)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 9)
          (cons 6 "KartaStudni")
          (cons 62 7)
              )
            )
            ;
            ;opis 0,00
            (setq
              opis_0,00 (polar lewa_strona-.-.- kat_do 2.50)
            );setq
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 opis_0,00)
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,00")
          (cons 7 "FL_proste")
          (cons 50 kat_do)
          (cons 62 7)
              )
            )
            ;
            ;podkreslnik pod 0,00
            (setq
              podkreslnik_pod_0,00srod (polar opis_0,00 kat*do+ 1.00)
              podkreslnik_pod_0,00_a (polar podkreslnik_pod_0,00srod kat_do 1.80)
              podkreslnik_pod_0,00_b (polar podkreslnik_pod_0,00_a kat_z 3.60)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 podkreslnik_pod_0,00_a) ;a na lewo
          (cons 11 podkreslnik_pod_0,00_b) ;b na prawo
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 6 "Continuous")
          (cons 62 7)
              )
            )
            ;strzalka przy 0,00
            ;pion strzalki
            (setq
              strzalka_a (polar podkreslnik_pod_0,00_a kat_do 0.7) ;koniec strzalki - polaczenie z lewym i prawym skrzydlem strzalki
              strzalka_b (polar strzalka_a kat*do- 2.2) ;poczatek strzalki
            );setq
            ;
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 strzalka_a)
          (cons 11 strzalka_b)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;lewa strona strzalki
            (setq
              lewa_strzalka (polar strzalka_a (- kat*do- 0.5204) 0.60)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 strzalka_a)
          (cons 11 lewa_strzalka)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;prawa strona strzalki
            (setq
              prawa_strzalka (polar strzalka_a (+ kat*do- 0.5204) 0.60)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 strzalka_a)
          (cons 11 prawa_strzalka)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,10
            (setq
              opis_0,10 (polar opis_0,00 kat*do+ 6.00)
            );setq
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 opis_0,10)
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,10")
          (cons 7 "FL_proste")
          (cons 50 kat_do)
              )
            )
            ;podkreslnik pod 0,10
            (setq
              podkreslnik_pod_0,10_a (polar podkreslnik_pod_0,00_a kat*do+ 6.00)
              podkreslnik_pod_0,10_b (polar podkreslnik_pod_0,00_b kat*do+ 6.00)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 podkreslnik_pod_0,10_a)
          (cons 11 podkreslnik_pod_0,10_b)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 0,60
            (setq
              opis_0,60 (polar opis_0,10 kat*do+ 15.00)
            );setq
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 opis_0,60)
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 "0,70")
          (cons 7 "FL_proste")
          (cons 50 kat_do)
              )
            )
            ;podkreslnik pod 0,60
            (setq
              podkreslnik_pod_0,60_a (polar podkreslnik_pod_0,10_a kat*do+ 15.00)
              podkreslnik_pod_0,60_b (polar podkreslnik_pod_0,10_b kat*do+ 15.00)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 podkreslnik_pod_0,60_a)
          (cons 11 podkreslnik_pod_0,60_b)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;opis 1,00
            (setq
              opis_1,00 (polar opis_0,60 kat*do+ 8.20)
            );setq
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - rzut poziomy")
          (cons 62 7)
          (cons 10 opis_1,00)
          (cons 40 1.5)
          (cons 41 5.0000)
          (cons 71 5)
          (cons 72 5)
          (cons 1 srednicaStudni)
          (cons 7 "FL_proste")
          (cons 50 kat_do)
              )
            )
            ;dwia podkreslniki przy 1,00
            ;pierwszy podkreslnik - zaraz pod 1,00
            (setq
              podkreslnik_pod_1,00_a (polar podkreslnik_pod_0,60_a kat*do+ 8.50)
              podkreslnik_pod_1,00_b (polar podkreslnik_pod_0,60_b kat*do+ 8.50)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 podkreslnik_pod_1,00_a)
          (cons 11 podkreslnik_pod_1,00_b)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;drugi podkreslnik pod pierwszym podkreslnikiem
            (setq
              podkreslnik_pod_1,00_c (polar podkreslnik_pod_0,60_a kat*do+ 8.20)
              podkreslnik_pod_1,00_d (polar podkreslnik_pod_0,60_b kat*do+ 8.20)
            );setq
            (entmake
              (list
          (cons 0 "LINE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbLine")
          (cons 10 podkreslnik_pod_1,00_c)
          (cons 11 podkreslnik_pod_1,00_d)
          (cons 8 "karta studni - rzut poziomy")
          (cons 370 18)
          (cons 62 7)
              )
            )
            ;obliczamy kwadranty okregu
            (setq
              kwadrant_lewy (polar punk_srodka_wlazu pi 10)
              kwadrant_prawy (polar punk_srodka_wlazu 0 10)
            );setq
            ;
          );progn
        )
        (defun WLAZ_NA_LEWO ()
          (progn
            (RZUT_POZIOMY)
            (RZUT_POZIOMY_WLAZ_NA_LEWO)
            (RZUT_PIONOWY)
            (RZUT_PIONOWY_WLAZ_NA_PRAWO-LEWO)
            (RZUT_PIONOWY_RYSUJ_RURY lista_rzut_poz)
          );progn
        )
        (defun MENU_RODZAJ_STUDNI ()
          (cond
            ((= (dcl-Control-GetValue geostation/Form8/OptionButton1) 1) (WLAZ_SROD_TAKI_SAM_JAK_STUDNIA))
            ((= (dcl-Control-GetValue geostation/Form8/OptionButton2) 1) (WLAZ_SROD_WIEKSZY))
            ((= (dcl-Control-GetValue geostation/Form8/OptionButton3) 1) (WLAZ_SROD_MNIEJSZY))
            ((= (dcl-Control-GetValue geostation/Form8/OptionButton4) 1) (WLAZ_NA_PRAWO))
            ((= (dcl-Control-GetValue geostation/Form8/OptionButton5) 1) (WLAZ_NA_LEWO))
          ) 
        )
        (defun KARTASTUDNI_RUN ( / lista_z_pliku punkt x y)
          (progn
            (graphscr)
            (POBIERZ_DANE)
            (if (= lista_z_pliku nil)
              (progn
              (alert "\nBład1.")
              (exit)
              );progn
            );if
            (if (= (strcase (nth 0 (nth 0 lista_z_pliku))) "DES")
              (progn
          (entmake
            (list
              (cons 0 "LINE")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbLine")
              (cons 10 (list (+ x 168)(- y 23.25)))
              (cons 11 (list (+ x 184)(- y 23.25)))
              (cons 8 "karta studni - tekst zmienny")
              (cons 370 18)
              (cons 62 7)
            );list
          )
          ;
          (setq rodzaj_p "deszczowka")
          ;
              );progn
            );if
            ;SPRAWDZENIE JAKA TO KANALIZACJA -=DESZCZOWKA=- , bo sanitarke przekreslamy
            (if (= (strcase (nth 0 (nth 0 lista_z_pliku))) "SAN")
              (progn
          ;
          (entmake
            (list
              (cons 0 "LINE")
              (cons 100 "AcDbEntity")
              (cons 100 "AcDbLine")
              (cons 10 (list (+ x 167)(- y 27.05)))
              (cons 11 (list (+ x 185)(- y 27.05)))
              (cons 8 "karta studni - tekst zmienny")
              (cons 370 18)
              (cons 62 7)
            );list
          );entmake
          ;
          (setq rodzaj_p "sanitarka")
          ;
              );progn
            )
            ;==================================================="Nr studzienki: D1"
            (if (nth 0 (nth 7 lista_z_pliku))
              (progn
          (setq zm1 (strcat "Nr studzienki: " (nth 0 (nth 7 lista_z_pliku)))
                nazwa_central (nth 0 (nth 7 lista_z_pliku))
          );setq
              );progn
            )
            ;========================================================"X= 555612,00"
            (if (nth 1 (nth 7 lista_z_pliku))
              (progn
          (setq zm2 (strcat "X=" (ZAMIEN.NA, (nth 1 (nth 7 lista_z_pliku))))
                x_central (nth 2 (nth 7 lista_z_pliku))
                x_central (atof x_central)
          );setq
              );progn
            )
            ;======================================================="Y= 6578948,58"
            (if (nth 2 (nth 7 lista_z_pliku))
              (progn
          (setq zm3 (strcat "Y=" (ZAMIEN.NA, (nth 2 (nth 7 lista_z_pliku))))
                y_central (nth 1 (nth 7 lista_z_pliku))
                y_central (atof y_central)
          );setq
              );progn
            )
            ;========================================================="531.423.252"
            (if (nth 0 (nth 1 lista_z_pliku))
              (progn
          (setq zm4 (nth 0 (nth 1 lista_z_pliku)))
              );progn
            )
            ;=================================="Bieruñ ul. Krakowska" - lokalizacja
            (if (nth 0 (nth 2 lista_z_pliku))
              (progn
          (setq
                zm5 ""
                licznik5 0
                dlugosc5 (length (nth 2 lista_z_pliku)))
          (repeat dlugosc5
            (progn
              (if (= licznik5 0)
                (progn
            (setq zm5 (nth 0 (nth 2 lista_z_pliku)))
                );progn
                (progn
            (setq
              tmp5 (nth licznik5 (nth 2 lista_z_pliku))
              zm5 (strcat zm5 " " tmp5)
            );setq
                );progn
              );if
              ;
              (setq licznik5 (1+ licznik5))
              ;
            );progn
          );repeat
              );progn
            )
            ;==============================================="238,183" - GORA studni
            (if (nth 3 (nth 7 lista_z_pliku))
              (progn
          (setq zm6 (ZAMIEN.NA, (nth 3 (nth 7 lista_z_pliku)))
                gora_central (nth 3 (nth 7 lista_z_pliku)))
              );progn
            )
            ;==================="{\\C256;2008\\P711-202/08}" - rok wykonania i KERG
            (if (nth 0 (nth 3 lista_z_pliku))
              (progn
          (setq zm7a (nth 0 (nth 3 lista_z_pliku)))
              );progn
            )
            (if (nth 0 (nth 3 lista_z_pliku))
              (progn
          (setq zm7b (nth 0 (nth 4 lista_z_pliku)))
              );progn
            )
            (setq zm7 (strcat "{\\C256;" zm7a "\\P" zm7b "}"))
            ;=================="{\\C256;R. Petrykowski\\PR. Petrykowski}" - kreslil
            (if (nth 0 (nth 5 lista_z_pliku))
              (progn
          (setq
            tmp8a ""
            zm8a ""
            licznik8a 0
            dlugosc8a (length (nth 5 lista_z_pliku))
          );setq
          (repeat dlugosc8a
            (progn
              (if (= licznik8a 0)
                (progn
            (setq zm8a (nth 0 (nth 5 lista_z_pliku)))
                );progn
                (progn
            (setq
              tmp8a (nth licznik8a (nth 5 lista_z_pliku))
              zm8a (strcat zm8a " " tmp8a)
            );setq
                );progn
              );if
              ;
              (setq licznik8a (1+ licznik8a))
              ;
            );progn
          );repeat
              );progn
            )
            (if (nth 0 (nth 6 lista_z_pliku))
              (progn
          (setq
            tmp8b ""
            zm8b ""
            licznik8b 0
            dlugosc8b (length (nth 6 lista_z_pliku))
          );setq
          (repeat dlugosc8b
            (progn
              (if (= licznik8b 0)
                (progn
            (setq zm8b (nth 0 (nth 6 lista_z_pliku)))
                );progn
                (progn
            (setq
              tmp8b (nth licznik8b (nth 6 lista_z_pliku))
              zm8b (strcat zm8b " " tmp8b)
            );setq
                );progn
              );if
              ;
              (setq licznik8b (1+ licznik8b))
              ;
            );progn
          );repeat
              );progn
            )
            (setq zm8 (strcat "{\\C256;" zm8a "\\P" zm8b"}"))
            ;================================================"238,183" - DOL studni
            (if (nth 4 (nth 7 lista_z_pliku))
              (progn
          (setq zm9 (ZAMIEN.NA, (nth 4 (nth 7 lista_z_pliku)))
                dol_central (nth 4 (nth 7 lista_z_pliku)))
              );progn
              (progn ;else - jezeli nie ma dna studni
          (alert
            (strcat
                    "\nKomunikat programu: "
              "\n"
                    "\nBrak dna studni " nazwa_central"."
              "\nDopisz go i załaduj jeszcze raz."
                  );strcat
          );alert
          (exit)
              );progn
            )
            ;=======================INFORMACJE O DANYCH POLACZEN===================
            (setq dlugosc (- (length lista_z_pliku) 8)
            licznik 8)
            (repeat dlugosc
              (progn
          (setq lista_stu (append lista_stu (list (nth licznik lista_z_pliku)))
                licznik (1+ licznik))
              );progn
            );repeat
            (setq dlugosc (length lista_stu)
            licznik 0
            y_pocz 232.265
            y_skok 6.71
            x1 32.00
            x2 54.25
            x3 75.27
            x4 97.465
            );setq
            (repeat dlugosc
              (progn
          (setq
            nazwa_l (nth 0 (nth licznik lista_stu))
            wlot (nth 5 (nth licznik lista_stu))
            sred (nth 6 (nth licznik lista_stu))
            mat (nth 7 (nth licznik lista_stu))
            yn (+ y_pocz (* y_skok licznik))
          );setq
          ;
          (if (= wlot "0")
            (progn
              (setq
                gora_c (atof gora_central)
                dol_c (atof dol_central)
                wlot (- gora_c dol_c)
                wlot (rtos wlot 2 2)
              );setq
            );progn
          );if
          ;
          (TEKST_STU x1 yn nazwa_l)
          (TEKST_STU x2 yn (ZAMIEN.NA, wlot))
          (TEKST_STU x3 yn sred)
          (TEKST_STU x4 yn mat)
          ;
          (setq licznik (1+ licznik))
          ;
              );progn
            );repeat
            ;
            (TABELA x y)
            (TEKSTOWNIK x y)
            ;==========================================
            ;===========srodkowa studnia===============
            ;(list x_central y_central)
            (entmake
              (list
          (cons 0 "MTEXT")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbMText")
          (cons 8 "karta studni - opis topograficzny")
          (cons 62 7)
          (cons 10 (list (+ x 151.5014)(- y 84.2)))
          (cons 40 1.6)
          (cons 41 5.0000)
          (cons 71 4)
          (cons 72 5)
          (cons 1 nazwa_central)
          (cons 7 "FL_pochyle")
          (cons 50 0)	
              )
            );entmake
            (entmake
              (list
          (cons 0 "CIRCLE")
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbCircle")
          (cons 8 "karta studni - opis topograficzny")
          (cons 10 (list (+ x 149.3237)(- y 84.2)))
          (cons 40 1.2)
          (cons 370 5)
          (cons 62 17)
              )
            );entmake
            (OPIS_TOPOGRAFICZNY lista_stu)
            (MENU_RODZAJ_STUDNI)
            ;==========================================
            ;(RZUT_POZIOMY)
            ;(SORTUJ_LISTE "lista_rur" 2)
            (setvar "dimzin" zm_dimzin)
            (setvar "unitmode" zm_unitmode)
            (vl-file-delete "C:/NXYZ/bin/dane.txt")
            (princ)
            ;
          );progn
        )
        (defun pobierzTekst ( / ent entData typ zawartosc valid)
          (setq valid nil)
          (while (not valid)
            (prompt "\nWybierz obiekt typu TEXT lub MTEXT: ")
            (setq ent (car (entsel)))

            (if ent
              (progn
                (setq entData (entget ent))
                (setq typ (cdr (assoc 0 entData)))

                (if (or (equal typ "TEXT") (equal typ "MTEXT"))
                  (setq valid T)
                  (prompt "\nWybrany obiekt nie jest TEXT ani MTEXT. Sprobuj ponownie.")
                )
              )
              (prompt "\nNie wybrano obiektu. Sprobuj ponownie.")
            )
          )
          (setq zawartosc (cdr (assoc 1 entData)))
          zawartosc
        )
        (defun pobierzLiczbe ( / ent entData typ zawartosc valid)
          (setq valid nil)
          (while (not valid)
            (prompt "\nWybierz obiekt typu TEXT lub MTEXT: ")
            (setq ent (car (entsel)))

            (if ent
              (progn
                (setq entData (entget ent))
                (setq typ (cdr (assoc 0 entData)))

                (if (or (equal typ "TEXT") (equal typ "MTEXT"))
                  (setq valid T)
                  (prompt "\nWybrany obiekt nie jest TEXT ani MTEXT. Sprobuj ponownie.")
                )
              )
              (prompt "\nNie wybrano obiektu. Sprobuj ponownie.")
            )
          )
          (setq zawartosc (ZAMIEN,NA. (cdr (assoc 1 entData))))
          zawartosc
        )
        (defun is-strict-number (txt)
          (and
            (not (wcmatch txt "*[~0-9.-]*")) ; zawiera tylko cyfry, minus i kropkę
            (numberp (read txt))             ; AutoLISP rozpozna jako liczbę
          )
        )
        (defun varType (kontrolka)
          (setq txt (ZAMIEN,NA. kontrolka))
          (is-strict-number txt)
        )


    ;                          >>>>>>>>>>>>>>>>>>>>> MODYFIKACJA <<<<<<<<<<<<<<<<<
      ;----------------- OBRACANIE TEKSTÓW DO LINII
        (defun c:F3TB1 ()
          (setq obrotteksty nil
                obrotlinia nil)
          (princ "\nWybierz tekst do obrotu: ")
          (while (not obrotteksty)
            (setq obrotteksty (ssget "_+.:S" '((0 . "TEXT,MTEXT")))) ; Wybór obiektów tekstowych
            (if (not obrotteksty)
              (princ "\nNie wybrano żadnego tekstu.")
              (princ)
            )
          )
          (setq obrottekstyent (entlast))
          (if obrotteksty
            (progn
              (princ "\nWybierz linię lub polilinię dla obrotu tekstu: ")
              (while (not obrotlinia)
                (setq obrotlinia (ssget "_+.:S" '((0 . "LINE,LWPOLYLINE")))) ; Wybór linii lub polilinii
                (if (not obrotlinia)
                  (princ "\nNie wybrano żadnej linii ani polilinii.")
                  (princ)
                )
              )
              (if obrotlinia
                (progn
                  (setq ent (ssname obrotlinia 0))
                  (setq entdata (entget ent))
                  (setq entity-type (cdr (assoc 0 entdata)))
                  (cond
                    ((= entity-type "LINE")
                      (setq p1 (cdr (assoc 10 entdata)))
                      (setq p2 (cdr (assoc 11 entdata)))
                      (setq angle2 (angle p1 p2))
                      (if (and (> angle2 (/ pi 2)) (< angle2 (+ pi (/ pi 2))))
                        (setq angle2 (+ angle2 pi))
                      )
                      (setq segment-midpoint (list (/ (+ (car p1) (car p2)) 2) (/ (+ (cadr p1) (cadr p2)) 2)))
                    )
                    ; Obsługuje polilinię
                    ((= entity-type "LWPOLYLINE")
                      (setq lista-wierzcholkow (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) entdata)))
                      (setq num-segmenty (length lista-wierzcholkow))
                      (if (> num-segmenty 1)
                        (progn
                          ; (princ "\nWskaź segment polilinii: ")
                          (setq point-pick (getpoint "\nWskaź segment polilinii: ")) ; Wskaź punkt na segment polilinii
                          (if point-pick
                            (progn
                              (setq min-dist nil)
                              (setq i 0)
                              (while (< i (1- num-segmenty))
                                (setq p1 (nth i lista-wierzcholkow))
                                (setq p2 (nth (1+ i) lista-wierzcholkow))
                                (setq segment-closest-midpoint (list (/ (+ (car p1) (car p2)) 2) (/ (+ (cadr p1) (cadr p2)) 2)))
                                (setq dist (distance segment-closest-midpoint point-pick))
                                (if (or (< dist min-dist) (= min-dist nil))
                                  (progn
                                    (setq segment-midpoint segment-closest-midpoint)
                                    (setq min-dist dist)
                                    (setq closest-segment (list p1 p2))
                                  )
                                )
                                (setq i (1+ i))
                              )
                              ; Oblicz kąt obrotu
                              (setq p1 (car closest-segment))
                              (setq p2 (cadr closest-segment))
                              (setq angle2 (angle p1 p2))
                              (if (and (> angle2 (/ pi 2)) (< angle2 (+ pi (/ pi 2))))
                                (setq angle2 (+ angle2 pi))
                              )
                            )
                            (princ "\nNie wybrano punktu.")
                          )
                        )
                        (princ "\nPolilinia musi mieć przynajmniej dwa wierzchołki.")
                      )
                    )
                    (T (princ "\nNie wybrano poprawnej linii ani polilinii."))
                  )
                  ; Obróć teksty
                  (if (and obrotteksty angle2)
                    (progn
                      (setq i 0)
                      (while (< i (sslength obrotteksty))
                        (setq obiekt (ssname obrotteksty i))                
                        (setq entdata2 (entget obiekt))
                        (setq entity-type2 (cdr (assoc 0 entdata2)))
                        (cond
                          ((= entity-type2 "TEXT")
                            (progn
                              (vla-put-alignment (vlax-ename->vla-object obiekt) acAlignmentCenter)
                              (vla-put-textalignmentpoint (vlax-ename->vla-object obiekt) (vlax-3d-point (car segment-midpoint) (cadr segment-midpoint) (caddr segment-midpoint)))
                              (vla-put-insertionpoint (vlax-ename->vla-object obiekt) (vlax-3d-point (car segment-midpoint) (cadr segment-midpoint) (caddr segment-midpoint)))
                              (vla-put-rotation (vlax-ename->vla-object obiekt) angle2)
                              (setq i (1+ i))
                            )
                          )
                          ((= entity-type2 "MTEXT")
                            (progn
                              (vla-put-attachmentpoint (vlax-ename->vla-object obiekt) acAttachmentPointBottomCenter)                      
                              (vla-put-insertionpoint (vlax-ename->vla-object obiekt) (vlax-3d-point (car segment-midpoint) (cadr segment-midpoint) (caddr segment-midpoint)))
                              (vla-put-rotation (vlax-ename->vla-object obiekt) angle2)
                              (setq i (1+ i))
                            )
                          )                  
                        )
                      )
                    )
                  )
                )
                (princ "\nNie wybrano poprawnej linii ani polilinii.")
              )
            )
            (princ "\nNie wybrano żadnych obiektów tekstowych.")
          )
          (princ)
        )
      ;----------------- ZMIANA GRUBOSCI C-GEO
        (defun c:F3TB29 ( / ss i ent entData newData)
          (prompt "\nWybierz linie lub polininie")
          (setq ss (ssget '((0 . "LINE,LWPOLYLINE,POLYLINE"))))
          (if ss
            (progn
              (setq i 0)
              (while (< i (sslength ss))
                (setq ent (ssname ss i))
                (setq entData (entget ent))
                (if (assoc 43 entData)
                  (progn
                    (setq newData (subst (cons 43 0.0) (assoc 43 entData) entData))
                    (entmod newData)
                    (entupd ent)
                  )
                )
                (setq i (1+ i))
              )
              (prompt "\nZmieniono.")
            )
            (prompt "\nNie wybrano żadnych obiektów.")
          )
          (princ)
        )
      ;----------------- WYMIAROWANIE ODCHYŁEK
        (defun c:F3TB6 (/);----------- BUTTON WSKAŻ PUNKTY
          (ODCHYLKI)
          (princ)
        )
        (defun c:geostation/Form3/ComboBox2#OnDropDown (/)
          (dcl-ComboBox-Clear geostation/Form3/ComboBox2)
          (princ)
        )
        (defun ODCHYLKI ()
          (setq layer (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox2))
          (if (= layer -1)
            (progn
              (alert "Wybierz warstwę, na której znajdują się linie do odchyłek.")
              (exit)
            )
            (setq nazwaLayer (dcl-ComboBox-GetLBText geostation/Form3/ComboBox2 layer))
          )
          (setq listOverThreshold '())
          (setq listNoPerpendicular '())
          (setq lines '())  ; Lista linii i polilinii z warstwy
          (setq points '()) ; Lista punktów wybranych przez użytkownika
          (setq countOverThreshold 0) ; Licznik wymiarów przekraczających 0.015 m
          (setq countNoPerpendicular 0) ; Licznik punktów bez prostopadłych obiektów
          (setq maxPoints 0)
          (setq currPoint 0)
          (setq threshold (dcl-Control-GetText geostation/Form3/TextBox8))

          (STYL_ODCHYLKA)

          ;; 1. Pobierz punkty od użytkownika przy użyciu ssget
          (prompt "\nWybierz punkty: ")
          (setq pointSelection (ssget '((0 . "POINT"))))  ; Pobierz punkty
          (if (not pointSelection)
            (progn
              (prompt "\nNie wybrano żadnych punktów.")
              (exit)
            )
          )  
          (StartLoading (strcat "Rozpoczynam wymiarowanie..."))  
          ;; Zapisz punkty do listy
          (setq i 0)
          (repeat (sslength pointSelection)
            (setq ent (ssname pointSelection i))
            (setq pt (cdr (assoc 10 (entget ent))))
            (setq points (cons pt points))
            (setq i (1+ i))
          )  
          (setq maxPoints (sslength pointSelection))
          ;; 2. Pobierz wszystkie linie i polilinie z warstwy
          (setq ss (ssget "X" (list (cons 0 "LINE,LWPOLYLINE,ARC") (cons 8 nazwaLayer))))
          ;; Przechodzimy przez wszystkie linie i polilinie i zapisujemy je w liście
          (if ss
            (repeat (setq i (sslength ss))
              (setq ent (ssname ss (setq i (1- i))))
              (setq entData (entget ent))
              (setq lines (cons entData lines))
            )
          )
          ;; 3. Dla każdego punktu oblicz najbliższą linię lub segment polilinii
          (foreach pt points
            (setq currPoint (1+ currPoint))
            (setq postep (strcat (rtos (* (/ currPoint (float maxPoints)) 100) 2 0) "%"))
            (ChangeLoading "Wymiarowanie punktów... " postep currPoint maxPoints)
            (setq minDist nil)
            (setq closestObj nil)
            (setq closestIntersection nil)
            (setq closestLine nil)
            
            (foreach line lines
              (setq objType (cdr (assoc 0 line)))
              (setq obj (vlax-ename->vla-object (cdr (assoc -1 line))))
              (cond
                ((equal objType "ARC")
                  (setq srodek-luku (cdr (assoc 10 line)))
                  (setq promien (cdr (assoc 40 line)))
                  (setq intersection (vlax-curve-getClosestPointTo obj pt))
                  (setq dx (- (car intersection) (car pt)))   ; różnica współrzędnych X
                  (setq dy (- (cadr intersection) (cadr pt))) ; różnica współrzędnych Y
                  (setq dist (sqrt (+ (* dx dx) (* dy dy))))
                  (setq distsl (sqrt (+ (* (- (car srodek-luku) (car pt)) (- (car srodek-luku) (car pt))) (* (- (cadr srodek-luku) (cadr pt)) (- (cadr srodek-luku) (cadr pt))))))
                  (if (<= distsl promien)
                    (progn
                      (setq vector1kat (atan (- (cadr intersection) (cadr pt)) (- (car intersection) (car pt))))
                      (setq vector2kat (atan (- (cadr intersection) (cadr srodek-luku)) (- (car intersection) (car srodek-luku))))      
                      (setq tolerance 0.0001) ; Tolerancja dla iloczynu skalarnego
                      (setq isPerpendicular (<= (abs (- vector1kat vector2kat)) tolerance)) ; Sprawdź, czy iloczyn skalarny jest bliski zeru
                      (if (or (and isPerpendicular (or (not minDist) (< dist minDist))) (= dist 0))
                        (progn
                          (setq minDist dist)
                          (setq closestObj obj)
                          (setq closestIntersection intersection)
                          ; (setq closestLine line)
                        )
                      )
                    )
                    (progn
                      (setq vector1kat (atan (- (cadr pt) (cadr intersection)) (- (car pt) (car intersection))))
                      (setq vector2kat (atan (- (cadr intersection) (cadr srodek-luku)) (- (car intersection) (car srodek-luku))))      
                      (setq tolerance 0.0001) ; Tolerancja dla iloczynu skalarnego
                      (setq isPerpendicular (<= (abs (- vector1kat vector2kat)) tolerance)) ; Sprawdź, czy iloczyn skalarny jest bliski zeru
                      (if (or (and isPerpendicular (or (not minDist) (< dist minDist))) (= dist 0))
                        (progn
                          (setq minDist dist)
                          (setq closestObj obj)
                          (setq closestIntersection intersection)
                          ; (setq closestLine line)
                        )
                      )
                    )
                    
                  )
                )
                ((equal objType "LINE")
                  (setq intersection (vlax-curve-getClosestPointTo obj pt))
                  (setq dx (- (car intersection) (car pt)))   ; różnica współrzędnych X
                  (setq dy (- (cadr intersection) (cadr pt))) ; różnica współrzędnych Y
                  (setq dist (sqrt (+ (* dx dx) (* dy dy))))
                  
                  ;; Sprawdź, czy punkt jest prostopadły do linii
                  (setq startPt (vlax-curve-getStartPoint obj))
                  (setq endPt (vlax-curve-getEndPoint obj))
                  (setq lineDir (mapcar '- endPt startPt)) ; Wektor kierunkowy linii
                  (setq ptDir (mapcar '- pt intersection)) ; Wektor od punktu do przecięcia
                  (setq dotProduct (apply '+ (mapcar '* lineDir ptDir))) ; Iloczyn skalarny
                  
                  ;; Tolerancja dla prostopadłości
                  (setq tolerance 0.0001) ; Tolerancja dla iloczynu skalarnego
                  (setq isPerpendicular (<= (abs dotProduct) tolerance)) ; Sprawdź, czy iloczyn skalarny jest bliski zeru
                  (if (or (and isPerpendicular (or (not minDist) (< dist minDist))) (= dist 0))
                    (progn
                      (setq minDist dist)
                      (setq closestObj obj)
                      (setq closestIntersection intersection)
                      ; (setq closestLine line)
                    )
                  )
                )
                ((equal objType "LWPOLYLINE")
                  (setq numSegments (1+ (fix (vlax-curve-getEndParam obj)))) ; Poprawka w obliczeniu liczby segmentów      
                  (setq j 0)
                  (repeat numSegments
                    (setq pt1 (vlax-curve-getPointAtParam obj j))
                    (setq pt2 (vlax-curve-getPointAtParam obj (1+ j)))
                    (if (and pt1 pt2)
                      (progn
                        (setq segment (list pt1 pt2))                         
                        ;; Znajdź najbliższy punkt na segmencie
                        (setq intersection (ClosestPointOnLineSegment pt pt1 pt2))
                        (setq dx (- (car intersection) (car pt)))   ; różnica współrzędnych X
                        (setq dy (- (cadr intersection) (cadr pt))) ; różnica współrzędnych Y
                        (setq dist (sqrt (+ (* dx dx) (* dy dy))))
                        (setq isPerpendicular nil)
                        (setq segDir (mapcar '- pt2 pt1)) ; Wektor kierunkowy segmentu
                        (setq ptDir (mapcar '- pt intersection)) ; Wektor od punktu do przecięcia
                        (setq dotProduct (apply '+ (mapcar '* segDir ptDir))) ; Iloczyn skalarny          
                        ;; Dodaj komunikaty diagnostyczne
                        (setq tolerance 0.0001)
                        (if (<= (abs dotProduct) tolerance)
                          (setq isPerpendicular T)
                        )          
                        (if (or (and isPerpendicular (or (not minDist) (< dist minDist))) (= dist 0))
                          (progn
                            (setq minDist dist)
                            (setq closestObj obj)
                            (setq closestIntersection intersection)
                            ; (setq closestLine line)                           
                          )
                        )                                             
                        (setq j (1+ j))                      
                      )
                    )                  
                  )
                )             
              ) 
            )
            ;; 4. Dodaj wymiar prostopadły od punktu do najbliższej linii/polilinii z użyciem ActiveX
            (if (and closestObj closestIntersection)
              (progn
                ;; Pobierz obiekt modelu przestrzeni
                (setq modelSpace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))))
                
                ;; Dodaj wymiar liniowy
                (setq dimension (vla-AddDimAligned modelSpace (vlax-3d-point pt) (vlax-3d-point closestIntersection) (vlax-3d-point pt)))
                (vla-put-StyleName dimension "odchylka")
                (setq dxclosest (- (car closestIntersection) (car pt)))   ; różnica współrzędnych X
                (setq dyclosest (- (cadr closestIntersection) (cadr pt))) ; różnica współrzędnych Y
                (setq dimensionLength (sqrt (+ (* dxclosest dxclosest) (* dyclosest dyclosest))))
                (if (> dimensionLength (atof threshold))
                  (progn
                    (setq countOverThreshold (1+ countOverThreshold))
                    (setq listOverThreshold (cons (cons dimensionLength pt) listOverThreshold))
                  )
                )
              )
              ;; Jeśli nie znaleziono prostopadłego obiektu
              (progn
                (setq countNoPerpendicular (1+ countNoPerpendicular))
                (setq listNoPerpendicular (cons (cons dimensionLength pt) listNoPerpendicular))
              )
            )
          )
          (CloseLoading)
            ;; Wyświetl alerty z wynikami
          (if (or (> countOverThreshold 0) (> countNoPerpendicular 0))
            (progn
              (dcl-Form-Show geostation/Form11)
              (if (= (dcl-ListView-GetColumnCount geostation/Form11/ListView1) 0)
                (dcl-ListView-AddColumns geostation/Form11/ListView1
                  (LIST (LIST "Lp." 0 30)
                        (LIST "X" 1 100)
                        (LIST "Y" 1 100)
                        (LIST "Odchyłka [m]" 1 90)
                        (LIST "Opis" 0 260)
                  ) 
                ) 
                (princ)
              )
              (dcl-Control-SetCaption geostation/Form11/Label3 (itoa countOverThreshold))
              (dcl-Control-SetCaption geostation/Form11/Label4 (itoa countNoPerpendicular))
              (setq l 0)
              (foreach PtNoPerpendicular listNoPerpendicular
                (setq l (1+ l))
                (dcl-ListView-AddItem geostation/Form11/ListView1 0 (strcat (zaokraglaj0 l) ".") (zaokraglaj3 (caddr PtNoPerpendicular)) (zaokraglaj3 (cadr PtNoPerpendicular)) "-" "Nie odnaleziono prostopadłego obiektu dla punktu")
              )
              (foreach PtOverThreshold listOverThreshold
                (setq l (1+ l))
                (dcl-ListView-AddItem geostation/Form11/ListView1 0 (strcat (zaokraglaj0 l) ".") (zaokraglaj3 (caddr PtOverThreshold)) (zaokraglaj3 (cadr PtOverThreshold)) (zaokraglaj3 (car PtOverThreshold)) "Punkt poza dopuszczalną odchyłką")
              )
            )
          )  
          (princ)
        )
        (defun ClosestPointOnLineSegment (pt1 pt2 pt3 / vec-line vec-proj y u closestPt)
          ;; Wektor od pt2 do pt3 (linia)
          (setq vec-line (mapcar '- pt3 pt2))
          ;; Wektor od pt2 do pt1
          (setq vec-proj (mapcar '- pt1 pt2))

          ;; Oblicz u = (vec-proj • vec-line) / (vec-line • vec-line)
          (setq y (apply '+ (mapcar '* vec-proj vec-line)))
          (setq u (apply '+ (mapcar '* vec-line vec-line)))
          (setq u (/ y u))

          ;; Sprawdź, czy u jest w przedziale [0, 1]
          (cond
            ((< u 0) (setq closestPt pt2))  ; najbliżej pt2
            ((> u 1) (setq closestPt pt3))  ; najbliżej pt3
            (T
            ;; Najbliższy punkt leży na odcinku: pt2 + u * vec-line
            (setq closestPt (mapcar '+ pt2 (mapcar '(lambda (x) (* u x)) vec-line)))
            )
          )

          closestPt
        )
        (defun c:geostation/Form11/TextButton1#OnClicked (/);------------- BUTTON OK BLAD
          (dcl-Form-Close geostation/Form11)
          (princ)
        )
        (defun STYL_ODCHYLKA ()
          ;; Pobierz dokument i kolekcję stylów wymiarowania
          (setq acadObj (vlax-get-acad-object))
          (setq doc (vla-get-ActiveDocument acadObj))
          (setq dimStyles (vla-get-DimStyles doc))
          (setq styleName "odchylki")
          (if (tblobjname "STYLE" styleName)
            (princ)
            (progn
              (entmake 
                (list
                  (cons 0 "STYLE") 
                  (cons 100 "AcDbSymbolTableRecord") 
                  (cons 100 "AcDbTextStyleTableRecord") 
                  (cons 2 "odchylki");; Style Name
                  (cons 70 0)
                  (cons 40 0.0);; Fixed text height
                  (cons 41 1.0);; Width Factor
                  (cons 50 0.0);; Oblique angle
                  (cons 71 0)
                  (cons 42 2.5);; Last height used
                  (cons 3 "romans.shx");; Primary font name 
                  (cons 4 "");;  Big font name
                )
              )
            )
          )
          (setq stylWymiaru (vl-catch-all-apply 'vla-item (list dimStyles "odchylka")))
          (if (vl-catch-all-error-p stylWymiaru)
            (progn
              (setq stylWymiaru (vla-Add dimStyles "odchylka"))
              (setq dimStyle (tblobjname "DIMSTYLE" "odchylka"))
              (entmod
                (append
                  (entget dimStyle)
                  (list
                    (cons 2 "odchylka")
                    (cons 179 3)
                    (cons 281 1)
                    (cons 75 1)
                    (cons 76 1)
                    (cons 77 3)
                    (cons 78 1)
                    (cons 43 1.5000)
                    (cons 271 0)
                    (cons 144 1000.0000)
                    (cons 73 0)
                    (cons 74 1)
                    (cons 143 0.0394)
                    (cons 41 0.5500)
                    (cons 289 0)
                    (cons 275 2)
                    (cons 141 3.0000)
                    (cons 176 256)
                    (cons 178 256)
                    (cons 46 1.5000)
                    (cons 173 1)
                    (cons 40 0.5000)
                    (cons 140 0.5000)
                    (cons 172 1)
                    (cons 74 0)
                    (cons 272 0) 
                    (cons 340 (tblobjname "style" styleName))        
                  )
                )
              )
            )
          )
          (princ)
        )
        (defun c:geostation/Form3/GraphicButton1#OnClicked (/);------------ GRAPHICBUTTON WYBIERZ WARSTWE
          (dcl-ComboBox-Clear geostation/Form3/ComboBox2)
          (USTAW_WARSTWE)
          (princ)
        )
        (defun USTAW_WARSTWE ()
            (setq obiekt (car (entsel "\nWybierz element: "))) ; Pobierz wybrany obiekt
          (if obiekt
            (setq warstwa (cdr (assoc 8 (entget obiekt)))) ; Pobierz nazwę warstwy
            (princ "\nNie wybrano żadnego elementu.") ; Jeśli nie wybrano obiektu
          )
          (setq idx (dcl-ComboBox-FindStringExact geostation/Form3/ComboBox2 warstwa))
          (dcl-ComboBox-SetCurSel geostation/Form3/ComboBox2 idx)
          (princ)
        )
        (defun c:geostation/Form11/ListView1#OnDblClicked (Row Column /)
          (vl-load-com)
          (vla-zoomcenter (vlax-get-acad-object) (vlax-3d-point (atoi (caddr (dcl-ListView-GetRowItems geostation/Form11/ListView1 Row))) (atoi (cadr (dcl-ListView-GetRowItems geostation/Form11/ListView1 Row))) 0) (getvar "VIEWSIZE"))
        )


 
    ;                          >>>>>>>>>>>>>>>>>>>>> OBLICZENIA <<<<<<<<<<<<<<<<<<
      ;----------------- SUMOWANIE DLUGOSCI LINII
        (defun c:F1TB10 (/)
          (while
            (setq ent (car (entsel "\nWskaż linię, łuk lub polilinię: ")))
            (if ent
              (progn
                (setq obiekt (vlax-ename->vla-object ent))
                (if (or (= (vla-get-ObjectName obiekt) "AcDbLine")
                        (= (vla-get-ObjectName obiekt) "AcDbPolyline")
                        (= (vla-get-ObjectName obiekt) "AcDbArc"))
                  (progn
                    (if (= (vla-get-ObjectName obiekt) "AcDbArc")
                      (setq dlugosc-linii (vla-get-arclength obiekt))
                      (setq dlugosc-linii (vla-get-Length obiekt))
                    )
                    (setq suma-dlugosci-linii (+ suma-dlugosci-linii (atof (rtos dlugosc-linii 2 4))))
                    (dcl-Control-SetCaption geostation/Form3/Label28 (strcat (rtos suma-dlugosci-linii 2 4) " m"))
                    (if (= (dcl-Control-GetValue geostation/Form3/CheckBox3) 1)
                      (progn
                        (setq kolor (getvar "CECOLOR"))
                        (vla-put-Color obiekt kolor)
                      )            
                    )
                  )
                )
              )
            )
          )
          (princ)
        )
        (defun c:geostation/Form1/TextButton9#OnClicked (/) ;------------- ZERUJ LICZNIK
          (dcl-Control-SetCaption geostation/Form3/Label28 (strcat "0 m"))
          (setq suma-dlugosci-linii 0.0)
          (prompt "\nLicznik wyzerowany")
          (princ)
        )
        (defun c:geostation/Form1/Label28#OnClicked (/)
          (setq TH (dcl-Control-GetText geostation/Form3/TextBox7))
          (setq MPP (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox6))
          (setq punkt (getpoint "\nWskaż punkt: "))
          (setvar "TEXTSIZE" (atof TH))
          (setq suma-dlugosci-label28 (dcl-Control-GetCaption geostation/Form3/Label28))
          (vla-addtext mspace (strcat (rtos (atof suma-dlugosci-label28) 2 MPP) "m") (vlax-3d-point punkt) (atof TH)) 
          (princ)
        )
      ;----------------- SUMOWANIE POWIERZCHNI
        (defun c:F1TB12 (/)
          (while
            (setq ent (car (entsel "\nWskaż obiekt: ")))
            (if (and ent (setq obszar (vlax-curve-getarea (vlax-ename->vla-object ent))))
              (progn
                (setq suma-powierzchni (+ suma-powierzchni obszar))
                (dcl-Control-SetCaption geostation/Form3/Label32 (strcat (rtos suma-powierzchni 2 4) " m²"))
                (if (= (dcl-Control-GetValue geostation/Form3/CheckBox4) 1)
                  (progn
                    (setq obj (vlax-ename->vla-object ent))
                    (setq kolor (getvar "CECOLOR"))
                    (vla-put-Color obj kolor)
                  )
                )
              )
              (princ "Nie udało się obliczyć powierzchni obiektu.\n")
            )
          )
          (princ)
        )
        (defun c:geostation/Form1/TextButton11#OnClicked (/) ;------------- ZERUJ LICZNIK
          (dcl-Control-SetCaption geostation/Form3/Label32 (strcat "0 m²"))
          (setq suma-powierzchni 0.0)
          (prompt "\nLicznik wyzerowany")
          (princ)
        )
        (defun c:geostation/Form1/Label32#OnClicked (/)
          (setq TH (dcl-Control-GetText geostation/Form3/TextBox7))
          (setq MPP (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox6))
          (setq punkt (getpoint "\nWskaż punkt: "))
          (setvar "TEXTSIZE" (atof TH))
          (setq suma-powierzchni-label32 (dcl-Control-GetCaption geostation/Form3/Label32))
          (vla-addtext mspace (strcat (rtos (atof suma-powierzchni-label32) 2 MPP) "m²") (vlax-3d-point punkt) (atof TH))
          (princ)
        )
    ;                          >>>>>>>>>>>>>>>>>>>>> DROGA <<<<<<<<<<<<<<<<<<<<<<<
      ;----------------- WSTAW OPIS WYSOKOŚCI PUNKTÓW
        (defun c:F3TB13 (/) ;------------- WSTAW OPIS WYSOKOŚCI PUNKTÓW
          (if (not (tblsearch "style" "IMPORT"))
            (progn
              (entmakex
                (list
                  '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                  '(100 . "AcDbSymbolTableRecord")
                  '(100 . "AcDbTextStyleTableRecord")
                  (cons 2 "IMPORT")             ; Nazwa stylu
                  (cons 3 "simplex.shx")              ; Nazwa czcionki
                  (cons 40 0)                ; Wysokość tekstu
                  (cons 41 0.62)                   ; Skala szerokości (domyślnie 1.0)
                  (cons 50 0.261799)               ; Kąt pochylenia tekstu
                  (cons 70 0)
                )
              )
            )
            (princ)
          )
          (setq points (ssget ":L" '((0 . "POINT"))))
          (setq txtHeight (dcl-Control-GetText geostation/Form3/TextBox1))
          (setvar "TEXTSTYLE" "IMPORT")
          (setvar "TEXTSIZE" (atof txtHeight))
            (if points
              (progn
                (repeat (setq i (sslength points))
                  (setq ent (vlax-ename->vla-object (ssname points (setq i (1- i)))))
                  (setq pt (vlax-get ent 'Coordinates))
                  (setq wspZ (cadr (cdr pt)))
                  (setq wspZprec 
                    (cond
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 0)
                        (zaokraglaj0 wspZ)
                      )   
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 1)
                        (zaokraglaj1 wspZ)
                      )  
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 2)
                        (zaokraglaj2 wspZ)
                      )  
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 3)
                        (zaokraglaj3 wspZ)
                      )                                    
                    )
                  )
                  (setq textObj (vla-AddMText (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (list (car pt) (cadr pt) 0)) (atof txtHeight) wspZprec))
                )
              )
              (alert "Nie wybrano żadnych punktów.")
            )
        )
      ;----------------- PRZELICZ SPADEK
        (defun c:F3TB15 (/ lines line entData startPoint endPoint count);---------------- PRZELICZ SPADEK
          (if (not (tblsearch "style" "IMPORT"))
            (progn
              (entmakex
                (list
                  '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                  '(100 . "AcDbSymbolTableRecord")
                  '(100 . "AcDbTextStyleTableRecord")
                  (cons 2 "IMPORT")             ; Nazwa stylu
                  (cons 3 "simplex.shx")              ; Nazwa czcionki
                  (cons 40 0)                ; Wysokość tekstu
                  (cons 41 0.62)                   ; Skala szerokości (domyślnie 1.0)
                  (cons 50 0.261799)               ; Kąt pochylenia tekstu
                  (cons 70 0)
                )
              )
            )
            (princ)
          )
          (setq lines (ssget '((0 . "LINE"))))  ; Wybieranie linii
          (setq spadek (atof (dcl-Control-GetText geostation/Form3/TextBox2)))
          (setq offsetZ (atof (dcl-Control-GetText geostation/Form3/TextBox3)))
          (setq txtHeight (dcl-Control-GetText geostation/Form3/TextBox1))
          (setvar "TEXTSTYLE" "IMPORT")
          (setvar "TEXTSIZE" (atof txtHeight))
          (setq startPointZ nil)
          (if (and lines (> (sslength lines) 0))
            (progn
              (setq count 0)
              (repeat (sslength lines)
                (setq line (ssname lines count))  ; Pobranie obiektu linii
                (setq entData (entget line))  ; Pobranie danych obiektu linii
                (cond 
                  ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox4) 0)
                    (progn
                      (setq startPoint (cdr (assoc 10 entData)))  ; Punkt początkowy (x, y, z)
                      (setq endPoint (cdr (assoc 11 entData)))  ; Punkt końcowy (x, y, z)
                      (if (= (last startPoint) 0)
                        (progn                
                          (setq reply-spadek (acet-ui-message "Wysokość dla punktu, z którego będą wykonywane obliczenia wynosi 0.\r\nWybierz Tak, aby kontynuować.\r\nWybierz Nie, aby wprowadzić ręcznie wysokość do wykonywania obliczeń.\r\nWybierz Anuluj, aby przerwać." "A" 67))
                          (cond
                            ((= reply-spadek 6) ; tak - obliczenia z wysokości 0
                              (setq startPointZ (last startPoint))
                            )
                            ((= reply-spadek 7) ;nie - wprowadzanie ręczne
                              (setq startPointZ (getreal "\nWprowadź wysokość ręcznie dla obliczeń:"))
                            )
                            ((= reply-spadek 2) ;anuluj
                              (exit)
                            )
                          )
                        )
                        (setq startPointZ (last startPoint))
                      )
                    )
                  )
                  ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox4) 1)
                    (progn
                      (setq startPoint (cdr (assoc 11 entData)))
                      (setq endPoint (cdr (assoc 10 entData))) 
                      (if (= (last startPoint) 0)
                        (progn                
                          (setq reply-spadek (acet-ui-message "Wysokość dla punktu, z którego będą wykonywane obliczenia wynosi 0.\r\nWybierz Tak, aby kontynuować.\r\nWybierz Nie, aby wprowadzić ręcznie wysokość do wykonywania obliczeń.\r\nWybierz Anuluj, aby przerwać." "A" 67))
                          (cond
                            ((= reply-spadek 6) ; tak - obliczenia z wysokości 0
                              (setq startPointZ (last startPoint))
                            )
                            ((= reply-spadek 7) ;nie - wprowadzanie ręczne
                              (setq startPointZ (getreal "\nWprowadź wysokość ręcznie dla obliczeń:"))
                            )
                            ((= reply-spadek 2) ;anuluj
                              (exit)
                            )
                          )
                        )
                        (setq startPointZ (last startPoint))
                      )
                    )
                  )
                )
                (setq odlegloscLini (sqrt (+ (expt (- (car endPoint) (car startPoint)) 2) (expt (- (cadr endPoint) (cadr startPoint)) 2))))
                (setq deltaZ (* (* odlegloscLini spadek) 0.01))
                (setq newZ (+ (+ startPointZ deltaZ) offsetZ))
                (setq newZprec 
                    (cond
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 0)
                        (zaokraglaj0 newZ)
                      )   
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 1)
                        (zaokraglaj1 newZ)
                      )  
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 2)
                        (zaokraglaj2 newZ)
                      )  
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 3)
                        (zaokraglaj3 newZ)
                      )                                    
                    )
                )
                (setq thepoint (vla-AddPoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (car endPoint) (cadr endPoint) newZ)))
                (if (= (dcl-Control-GetValue geostation/Form3/CheckBox5) 1)
                  (setq textObj (vla-AddMText (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (list (car endPoint) (cadr endPoint) 0)) (atof txtHeight) newZprec))
                  (princ)
                )
                (if (= (dcl-Control-GetValue geostation/Form3/CheckBox6) 1)
                  (progn
                    (setq startPointZzaokr 
                      (cond
                        ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 0)
                          (zaokraglaj0 startPointZ)
                        )   
                        ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 1)
                          (zaokraglaj1 startPointZ)
                        )  
                        ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 2)
                          (zaokraglaj2 startPointZ)
                        )  
                        ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 3)
                          (zaokraglaj3 startPointZ)
                        )                                    
                      )
                    )
                    (setq textObj (vla-AddMText (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (list (car startPoint) (cadr startPoint) 0)) (atof txtHeight) startPointZzaokr))
                  )
                  (princ)
                )
                (setq count (1+ count))  ; Zwiększanie licznika, aby przejść do następnej linii
              )
            )
            (princ "\nNie wybrano żadnych linii.")  ; Komunikat, jeśli nie wybrano żadnych linii
          )
          (princ)  ; Końcowy "princ", aby zakończyć funkcję
        )
        (defun c:F3TB16 (/ lines count line entData startPoint endPoint);------------ BUTTON ZAMIEN WIERZCHOLKI
          (setq lines (ssget '((0 . "LINE"))))  ; Wybieranie linii
          (if (and lines (> (sslength lines) 0))
            (progn
              (setq count 0)
              (repeat (sslength lines)
                (setq line (ssname lines count))  ; Pobranie obiektu linii
                (setq entData (entget line))  ; Pobranie danych obiektu linii
                (setq startPoint (cdr (assoc 10 entData)))  ; Punkt początkowy (x, y, z)
                (setq endPoint (cdr (assoc 11 entData)))  ; Punkt końcowy (x, y, z)
                (setq newLine (vla-addline (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (car endPoint) (cadr endPoint) 0) (vlax-3d-point (car startPoint) (cadr startPoint) 0)))
                (entdel line)
                (princ "Zrobione")
                (setq count (1+ count))
              )
            )
          )
          (princ)
        )
      ;----------------- RZUTOWANIE PROSTOPADLE
        (defun c:F3TB17 (/);-------------------- RZUTOWANIE PROSTOPADLE
          (setq lines '())  ; Lista linii i polilinii z warstwy
          (setq points '()) ; Lista punktów wybranych przez użytkownika
          ;; 1. Pobierz punkty od użytkownika przy użyciu ssget
          (prompt "\nWybierz punkty: ")
          (setq pointSelection (ssget '((0 . "POINT"))))  ; Pobierz punkty
          (if (not pointSelection)
            (progn
              (prompt "\nNie wybrano żadnych punktów.")
              (exit)
            )
          )  
          ;; Zapisz punkty do listy
          (setq i 0)
          (repeat (sslength pointSelection)
            (setq ent (ssname pointSelection i))
            (setq pt (cdr (assoc 10 (entget ent))))
            (setq points (cons pt points))
            (setq i (1+ i))
          )  
          ;; 2. Pobierz wszystkie linie i polilinie z warstwy
          (prompt "\nWybierz linię, polilinię lub łuk:")
          (setq ss (ssget '((0 . "LINE,LWPOLYLINE,ARC,POLYLINE"))))
          ;; Przechodzimy przez wszystkie linie i polilinie i zapisujemy je w liście
          (if ss
            (repeat (setq i (sslength ss))
              (setq ent (ssname ss (setq i (1- i))))
              (setq entData (entget ent))
              (setq lines (cons entData lines))
            )
          )
          ;; 3. Dla każdego punktu oblicz najbliższą linię lub segment polilinii
          (foreach pt points
            (setq minDist nil)
            (setq closestObj nil)
            (setq closestIntersection nil)
            (setq closestLine nil)
            
            (foreach line lines
              (setq objType (cdr (assoc 0 line)))
              (setq obj (vlax-ename->vla-object (cdr (assoc -1 line))))
              (cond
                ((equal objType "ARC")
                  (setq srodek-luku (cdr (assoc 10 line)))
                  (setq promien (cdr (assoc 40 line)))
                  (setq intersection (vlax-curve-getClosestPointTo obj pt))
                  (setq dx (- (car intersection) (car pt)))   ; różnica współrzędnych X
                  (setq dy (- (cadr intersection) (cadr pt))) ; różnica współrzędnych Y
                  (setq dist (sqrt (+ (* dx dx) (* dy dy))))
                  (setq distsl (sqrt (+ (* (- (car srodek-luku) (car pt)) (- (car srodek-luku) (car pt))) (* (- (cadr srodek-luku) (cadr pt)) (- (cadr srodek-luku) (cadr pt))))))
                  (if (<= distsl promien)
                    (progn
                      (setq vector1kat (atan (- (cadr intersection) (cadr pt)) (- (car intersection) (car pt))))
                      (setq vector2kat (atan (- (cadr intersection) (cadr srodek-luku)) (- (car intersection) (car srodek-luku))))      
                      (setq tolerance 0.0001) ; Tolerancja dla iloczynu skalarnego
                      (setq isPerpendicular (<= (abs (- vector1kat vector2kat)) tolerance)) ; Sprawdź, czy iloczyn skalarny jest bliski zeru
                      (if (and isPerpendicular (or (not minDist) (< dist minDist)))
                        (progn
                          (setq minDist dist)
                          (setq closestObj obj)
                          (setq closestIntersection intersection)
                          (setq closestLine line)
                        )
                      )
                    )
                  )
                )
                ((equal objType "LINE")
                  (setq intersection (vlax-curve-getClosestPointTo obj pt))
                  (setq dx (- (car intersection) (car pt)))   ; różnica współrzędnych X
                  (setq dy (- (cadr intersection) (cadr pt))) ; różnica współrzędnych Y
                  (setq dist (sqrt (+ (* dx dx) (* dy dy))))
                  
                  ;; Sprawdź, czy punkt jest prostopadły do linii
                  (setq startPt (vlax-curve-getStartPoint obj))
                  (setq endPt (vlax-curve-getEndPoint obj))
                  (setq lineDir (mapcar '- endPt startPt)) ; Wektor kierunkowy linii
                  (setq ptDir (mapcar '- pt intersection)) ; Wektor od punktu do przecięcia
                  (setq dotProduct (apply '+ (mapcar '* lineDir ptDir))) ; Iloczyn skalarny
                  
                  ;; Tolerancja dla prostopadłości
                  (setq tolerance 0.0001) ; Tolerancja dla iloczynu skalarnego
                  (setq isPerpendicular (<= (abs dotProduct) tolerance)) ; Sprawdź, czy iloczyn skalarny jest bliski zeru
                  (if (and isPerpendicular (or (not minDist) (< dist minDist)))
                    (progn
                      (setq minDist dist)
                      (setq closestObj obj)
                      (setq closestIntersection intersection)
                      (setq closestLine line)
                    )
                  )
                )
                ((equal objType "LWPOLYLINE")
                  (setq numSegments (1+ (fix (vlax-curve-getEndParam obj)))) ; Poprawka w obliczeniu liczby segmentów
                  (setq minDistSegment nil)
                  (setq closestSegmentIntersection nil)          
                  (setq j 0)
                  (repeat numSegments
                    (setq pt1 (vlax-curve-getPointAtParam obj j))
                    (setq pt2 (vlax-curve-getPointAtParam obj (1+ j)))
                    (if (and pt1 pt2)
                      (progn
                        (setq segment (list pt1 pt2))                        
                        ;; Znajdź najbliższy punkt na segmencie
                        (setq intersection (vlax-curve-getClosestPointTo obj pt))
                        (setq dx (- (car intersection) (car pt)))   ; różnica współrzędnych X
                        (setq dy (- (cadr intersection) (cadr pt))) ; różnica współrzędnych Y
                        (setq dist (sqrt (+ (* dx dx) (* dy dy))))
                        ; (setq dist (distance pt intersection))
                        
                        ;; Sprawdź, czy segment jest najbliższy
                        (if (or (not minDistSegment) (< dist minDistSegment))
                          (progn
                            (setq minDistSegment dist)
                            (setq closestSegmentIntersection intersection)
                          )
                        )                        
                        (setq j (1+ j))                      
                      )
                    )                  
                  )
                  ;; Ustaw najlepszego segmentu jako najbliższą polilinię
                  (setq intersection closestSegmentIntersection)
                  (setq dist minDistSegment) ; Ustaw odległość do najbliższego segmentu          
                  ;; Sprawdź, czy punkt jest prostopadły do segmentu
                  (setq isPerpendicular nil)
                  (setq segDir (mapcar '- pt2 pt1)) ; Wektor kierunkowy segmentu
                  (setq ptDir (mapcar '- pt intersection)) ; Wektor od punktu do przecięcia
                  (setq dotProduct (apply '+ (mapcar '* segDir ptDir))) ; Iloczyn skalarny          
                  ;; Dodaj komunikaty diagnostyczne
                  (setq tolerance 0.0001)
                  (if (<= (abs dotProduct) tolerance)
                    (setq isPerpendicular T)
                  )          
                  (if (and isPerpendicular (or (not minDist) (< dist minDist)))
                    (progn
                      (setq minDist dist)
                      (setq closestObj obj)
                      (setq closestIntersection intersection)
                      (setq closestLine line)
                    )
                  )
                )
                ((equal objType "POLYLINE")
                  (setq coords '())
                  (setq coords (vlax-safearray->list (variant-value (vla-get-coordinates (vlax-ename->vla-object ent)))))
                  (setq order '())
                  (repeat (/ (length coords) 3) 
                          (setq order (append order (list (list (car coords) (cadr coords) (caddr coords)))))
                          (setq coords (cdddr coords))
                          (setq order (reverse order))
                          (setq order (reverse order))
                  )                  
                  (setq minDistSegment nil)
                  (setq closestSegmentIntersection nil)          
                  (setq j 0)
                  (repeat (length order)
                    (setq pt1 (nth j order))
                    (setq pt2 (nth (1+ j) order))
                    (if (and pt1 pt2)
                      (progn
                        (setq segment (list pt1 pt2))                        
                        ;; Znajdź najbliższy punkt na segmencie
                        (setq intersection (intersection2D pt1 pt2 pt))
                        
                        (setq vec1 (mapcar '- pt2 pt1))
                        (setq vec2 (mapcar '- intersection pt1))
                        (setq cross (- (* (car vec1) (cadr vec2)) (* (car vec2) (cadr vec1))))
                        (setq len1 (odleglosc2D pt1 pt2))
                        (setq dot (apply '+ (mapcar '* vec1 vec2)))
                        
                        (if (and (equal cross 0.0 1e-8) (<= 0 dot (* len1 len1)))
                          (progn
                            (setq dx (- (car intersection) (car pt)))   ; różnica współrzędnych X
                            (setq dy (- (cadr intersection) (cadr pt))) ; różnica współrzędnych Y
                            (setq dist (sqrt (+ (* dx dx) (* dy dy))))
                            (if (or (not minDistSegment) (< dist minDistSegment))
                              (progn
                                (setq minDistSegment dist)
                                (setq closestSegmentIntersection intersection)
                              )
                            ) 
                          )
                        )                       
                        (setq j (1+ j))                      
                      )
                    )                  
                  )
                  ;; Ustaw najlepszego segmentu jako najbliższą polilinię
                  (setq intersection closestSegmentIntersection)
                  (setq dist minDistSegment) ; Ustaw odległość do najbliższego segmentu          
                  ;; Sprawdź, czy punkt jest prostopadły do segmentu
                  (setq isPerpendicular nil)
                  (setq segDir (mapcar '- pt2 pt1)) ; Wektor kierunkowy segmentu
                  (setq ptDir (mapcar '- pt intersection)) ; Wektor od punktu do przecięcia
                  (setq dotProduct (apply '+ (mapcar '* segDir ptDir))) ; Iloczyn skalarny          
                  ;; Dodaj komunikaty diagnostyczne
                  (setq tolerance 0.0001)
                  (if (<= (abs dotProduct) tolerance)
                    (setq isPerpendicular T)
                  )          
                  (if (and isPerpendicular (or (not minDist) (< dist minDist)))
                    (progn
                      (setq minDist dist)
                      (setq closestObj obj)
                      (setq closestIntersection intersection)
                      (setq closestLine line)
                    )
                  )

                )
              ) 
            )
            ;; 4. Dodaj wymiar prostopadły od punktu do najbliższej linii/polilinii z użyciem ActiveX
            (if (and closestObj closestIntersection)
              (progn
                (if (= (dcl-Control-GetValue geostation/Form3/CheckBox12) 1)
                  (setq addPoint (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (list (car closestIntersection) (cadr closestIntersection) (caddr pt)))))
                  (setq addPoint (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point closestIntersection)))
                )
                (if (= (dcl-Control-GetValue geostation/Form3/CheckBox7) 1)
                  (setq addLine (vla-addline (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point closestIntersection) (vlax-3d-point pt)))
                )
                (princ)
              )
              (princ)
            )
          )
          (princ)
        )
        (defun get_vertices (ename / vertices_list index elevation object)
          (setq index -1
          elevation (cdr (assoc 38 (entget ename)))
          object (vlax-ename->vla-object ename) 
          )
          (repeat (if (minusp (vlax-get object 'closed)) (fix (vlax-curve-getendparam ename)) (1+ (fix (vlax-curve-getendparam ename))))
            (setq vertices_list (append vertices_list (list (vlax-safearray->list (vlax-variant-value (vla-get-coordinate object (setq index (1+ index))))))))
          )
          (if elevation (mapcar '(lambda (vertex) (append vertex (list elevation))) vertices_list) vertices_list)
        )
        (defun point-on-segment-2d22222 (pt v1 v2 tolerance2)
          (setq x1 (car v1) 
                y1 (cadr v1)  ; Współrzędne pierwszego wierzchołka
                x2 (car v2) 
                y2 (cadr v2)   ; Współrzędne drugiego wierzchołka
                px (car pt)
                py (cadr pt)
                cross () 
                dot () 
                len2 ()) ; Współrzędne sprawdzanego punktu
            ; Sprawdź, czy punkt leży na prostej (równanie parametryczne)
            (setq cross (abs (- (* (- py y1) (- x2 x1))
                                (* (- px x1) (- y2 y1))))) ; Iloczyn wektorowy
            (if (> cross tolerance2)
              nil ; Punkt nie leży na prostej
              (progn
                ; Sprawdź, czy punkt leży w granicach odcinka
                (setq dot (+ (* (- px x1) (- x2 x1)) 
                            (* (- py y1) (- y2 y1))))
                (setq len2 (+ (* (- x2 x1) (- x2 x1)) 
                              (* (- y2 y1) (- y2 y1))))
                (and (>= dot 0) (<= dot len2)) ; Punkt mieści się w zakresie odcinka
              )
            )
        )
        (defun point-on-segment-2d (pt v1 v2 tolerance2 / inter)
          (setq x1 (car v1) 
                y1 (cadr v1)  ; Współrzędne pierwszego wierzchołka
                x2 (car v2) 
                y2 (cadr v2)   ; Współrzędne drugiego wierzchołka
                px (car pt)
                py (cadr pt)
                distance2 nil
                dx (- x2 x1)
                dy (- y2 y1)
                len (sqrt (+ (* dx dx) (* dy dy))) ; Długość wektora
                ux (/ dx len) ; Wektor jednostkowy wzdłuż prostej
                uy (/ dy len)
                vx (- px x1)
                vy (- py y1)
                dot (+ (* vx ux) (* vy uy))
                ix (+ x1 (* dot ux))
                iy (+ y1 (* dot uy))
                inter (list ix iy)
                distance2 (odleglosc2D pt inter)
          )

          ; Sprawdź, czy odległość jest mniejsza niż tolerancja
          (if (> distance2 tolerance2)
              nil ; Punkt jest za daleko od prostej
              (progn
                ; Sprawdź, czy punkt leży w granicach odcinka
                (setq dot (+ (* (- px x1) (- x2 x1)) 
                            (* (- py y1) (- y2 y1))))
                (setq len2 (+ (* (- x2 x1) (- x2 x1)) 
                              (* (- y2 y1) (- y2 y1))))
                (and (>= dot 0) (<= dot len2)) ; Punkt mieści się w zakresie odcinka
              )
          )
        )
        (defun intersection2D (v1 v2 pt / inter)
          (setq x1 (car v1) 
                y1 (cadr v1)  ; Współrzędne pierwszego wierzchołka
                x2 (car v2) 
                y2 (cadr v2)   ; Współrzędne drugiego wierzchołka
                px (car pt)
                py (cadr pt)
                dx (- x2 x1)
                dy (- y2 y1)
                len (sqrt (+ (* dx dx) (* dy dy))) ; Długość wektora
                ux (/ dx len) ; Wektor jednostkowy wzdłuż prostej
                uy (/ dy len)
                vx (- px x1)
                vy (- py y1)
                dot (+ (* vx ux) (* vy uy))
                ix (+ x1 (* dot ux))
                iy (+ y1 (* dot uy))
                inter (list ix iy)
          )
          inter
        )
        (defun interpolate-z (pt v1 v2 /)
          (setq z1 (caddr v1))
          (setq z2 (caddr v2))
          ;; Obliczenia 2D (odległości)
          (setq dist12 (sqrt (+ (expt (- (car v2) (car v1)) 2) (expt (- (cadr v2) (cadr v1)) 2)))) ; Długość linii (2D)
          (setq dist1 (sqrt (+ (expt (- (car pt) (car v1)) 2) (expt (- (cadr pt) (cadr v1)) 2)))) ; Odległość punktu pt od v1 (2D)
          ;; Współczynnik t
          (setq t (/ dist1 dist12))
          ;; Interpolacja Z
          (setq pt-z (+ z1 (* t (- z2 z1))))
          ;; Wynik
          pt-z
        )
      ;----------------- OBLICZANIE WYSOKOSCI DLA PUNKTOW Z 3DPOLYLINE
        (defun c:F3TB18 (/);------------- OBLICZANIE WYSOKOSCI DLA PUNKTOW Z 3DPOLYLINE
          (if (not (tblsearch "style" "IMPORT"))
            (progn
              (entmakex
                (list
                  '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                  '(100 . "AcDbSymbolTableRecord")
                  '(100 . "AcDbTextStyleTableRecord")
                  (cons 2 "IMPORT")             ; Nazwa stylu
                  (cons 3 "simplex.shx")        ; Nazwa czcionki
                  (cons 40 0)                   ; Wysokość tekstu
                  (cons 41 0.62)                ; Skala szerokości (domyślnie 1.0)
                  (cons 50 0.261799)            ; Kąt pochylenia tekstu
                  (cons 70 0)
                )
              )
            )
            (princ)
          )
          (setq txtHeight (dcl-Control-GetText geostation/Form3/TextBox1))
          (setvar "TEXTSTYLE" "IMPORT")
          (setvar "TEXTSIZE" (atof txtHeight))
          (setq tolerance2 (atof (dcl-Control-GetText geostation/Form3/TextBox6)))
          (setq ss nil
                ssPoints nil
                ent nil
                obj nil
                pt nil
                index nil
                vertices '())
          (setq countPozaTolerancja 0)
          (prompt "\nWybierz punkty do obliczeń, które znajdują się na 3Dpolyline:")
          (setq ssPoints (ssget '((0 . "POINT")))) ; Wybór wielu punktów
          (if (not ssPoints)
            (progn
              (princ "\nNie wybrano żadnych punktów.")
              (exit)
            )
          )
          (prompt "\nWybierz 3Dpolyline:")
          (setq ss (ssget "_+.:S" '((0 . "POLYLINE")))) ; Wybór 3D Polyline
          (if (not ss)
            (progn
              (princ "\nNie wybrano obiektu 3D Polyline.")
              (exit)
            )
          )
          (setq polylineename (ssname ss 0))
          (setq polyline (vlax-ename->vla-object polylineename)) ; Pobieramy pierwszy wybrany obiekt
          (setq vertices (get_vertices polylineename)) ; Pobieramy współrzędne wierzchołków 3D Polyline
          ; Iteracja przez wszystkie wybrane punkty
          (setq pointsCount (sslength ssPoints))
          (repeat pointsCount
            (setq ent (ssname ssPoints (setq index (if index (1+ index) 0)))) ; Pobranie kolejnego punktu
            (setq obj (vlax-ename->vla-object ent)) ; Zamiana obiektu na VLA obiekt
            (setq pt (vlax-get obj 'Coordinates)) ; Pobranie współrzędnych punktu
            
            (setq found nil) ; Flaga, czy punkt został znaleziony
            (setq height nil) ; Wysokość punktu
            
            ; Iteracja przez segmenty polyline
            (setq i 0)
            (while (and (< i (1- (length vertices))) (not found))
              (setq v1 (nth i vertices))       ; Pierwszy wierzchołek segmentu
              (setq v2 (nth (1+ i) vertices)) ; Drugi wierzchołek segmentu
              
              ; Sprawdź, czy punkt leży na segmencie w przestrzeni 2D
              (if (point-on-segment-2d pt v1 v2 tolerance2)
                (progn
                  (setq found t)                ; Znaleziono punkt
                  (setq height (interpolate-z pt v1 v2))
                  (setq heightPrec 
                    (cond
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 0)
                        (zaokraglaj0 height)
                      )   
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 1)
                        (zaokraglaj1 height)
                      )  
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 2)
                        (zaokraglaj2 height)
                      )  
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 3)
                        (zaokraglaj3 height)
                      )                                  
                    )
                  )
                )        
              )
              (setq i (1+ i)) ; Przejdź do następnego segmentu
            )
            
            ; Wynik dla bieżącego punktu
            (if found
              (progn
                (if (= (dcl-Control-GetValue geostation/Form3/CheckBox8) 1)
                  (vla-AddMText 
                    (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) 
                    (vlax-3d-point (list (car pt) (cadr pt) 0)) 
                    (atof txtHeight) 
                    heightPrec
                  )
                )
                (princ (strcat "\nPunkt " (zaokraglaj3 (car pt)) "," (zaokraglaj3 (cadr pt)) " znajduje się na 3D Polyline. Obliczona wysokość (Z): " heightPrec))
                (if (= (dcl-Control-GetValue geostation/Form3/CheckBox9) 1)
                  (progn
                    (setq newPt (list (car pt) (cadr pt) height))        
                    (vlax-put obj 'Coordinates newPt) 
                    (princ "\nWysokość dla punktu została zmieniona.")
                  ) 
                )
              )
              (progn
                (princ (strcat "\nPunkt " (zaokraglaj3 (car pt)) "," (zaokraglaj3 (cadr pt)) " nie znajduje się na 3D Polyline."))
                (setq countPozaTolerancja (1+ countPozaTolerancja))
              )
            )
          )
          (if (> countPozaTolerancja 0)
            (princ (strcat "\nPunkty poza tolerancją:" (rtos countPozaTolerancja 2 0)))
            (princ)
          )
          (princ) ; Zakończenie
        )
      ;----------------- OBLICZENIA DLA DWOCH TEKSTOW
        (defun c:F3TB19 (/ dzialanie tekst1 tekst2 ss1 ss2 wartosc1 wartosc2 wynik);------------ OBLICZENIA DLA DWOCH TEKSTOW
          ;; Wybierz rodzaj działania na podstawie wybranego przycisku opcji
          (cond
            ((= (dcl-Control-GetValue geostation/Form3/OptionButton1) 1)
            (setq dzialanie '+)) ; Dodawanie
            ((= (dcl-Control-GetValue geostation/Form3/OptionButton2) 1)
            (setq dzialanie '-)) ; Odejmowanie
            ((= (dcl-Control-GetValue geostation/Form3/OptionButton3) 1)
            (setq dzialanie '*)) ; Mnożenie
            ((= (dcl-Control-GetValue geostation/Form3/OptionButton4) 1)
            (setq dzialanie '/)) ; Dzielenie
          )
          (setq tekst1 nil
                tekst2 nil
                wynik nil)
          ;; Wybierz pierwszy tekst
          (prompt "\nWybierz pierwszy tekst (TEXT lub MTEXT): ")
          (setq ss1 (ssget "_+.:S" '((0 . "TEXT,MTEXT")))) ; Wybór obiektu tekstowego lub multitekstu
          (if ss1
            (setq tekst1 (ssname ss1 0)) ; Pobranie pierwszego tekstu
            (prompt "\nBłąd: Nie wybrano pierwszego tekstu.")
          )
          ;; Wybierz drugi tekst
          (prompt "\nWybierz drugi tekst (TEXT lub MTEXT): ")
          (setq ss2 (ssget "_+.:S" '((0 . "TEXT,MTEXT")))) ; Wybór obiektu tekstowego lub multitekstu
          (if ss2
            (setq tekst2 (ssname ss2 0)) ; Pobranie drugiego tekstu
            (prompt "\nBłąd: Nie wybrano drugiego tekstu.")
          )
          
          ;; Pobierz wartości tekstów
          (if (and tekst1 tekst2)
            (progn
              ;; Pobranie wartości z pierwszego tekstu
              (setq wartosc1 (cdr (assoc 1 (entget tekst1))))
              ;; Pobranie wartości z drugiego tekstu
              (setq wartosc2 (cdr (assoc 1 (entget tekst2))))
                    
              ;; Sprawdzenie i konwersja wartości na liczby
              (if (and (numberp (atof wartosc1)) (numberp (atof wartosc2)))
                (progn
                  ;; Konwersja na liczby
                  (setq wartosc1 (atof wartosc1))
                  (setq wartosc2 (atof wartosc2))
                  
                  ;; Wykonanie obliczenia
                  (setq wynik (apply dzialanie (list wartosc1 wartosc2)))
                  (setq wynik
                    (cond
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 0)
                        (zaokraglaj0 wynik)
                      )   
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 1)
                        (zaokraglaj1 wynik)
                      )  
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 2)
                        (zaokraglaj2 wynik)
                      )  
                      ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 3)
                        (zaokraglaj3 wynik)
                      )                                  
                    )
                  )          
                  ;; Zaktualizowanie wartości pierwszego tekstu na wynik
                  (if (= (cdr (assoc 0 (entget tekst1))) "TEXT")
                    (entmod (subst (cons 1 wynik) (assoc 1 (entget tekst1)) (entget tekst1))) ; Obsługuje TEXT
                    (entmod (subst (cons 1 wynik) (assoc 1 (entget tekst1)) (entget tekst1))) ; Obsługuje MTEXT
                  )
                  (princ "\nWartość tekstu została zaktualizowana.")
                )
                ;; Obsługa błędu, gdy wartości nie są liczbami
                (prompt "\nBłąd: Wybrane teksty nie są prawidłowymi liczbami.")
              )
            )
            ;; Obsługa błędu, gdy nie wybrano tekstów
            (prompt "\nBłąd: Nie wybrano poprawnych tekstów.")
          )
          (princ) ; Zakończenie bez zwracania wartości
        )
      ;----------------- OBLICZENIA DLA TEKSTU
        (defun c:F3TB20 (/ ss1 dzialanie tekst1 wartosc1 wartosc2 wynik);-------------- OBLICZENIA DLA TEKSTU
          (cond
            ((= (dcl-Control-GetValue geostation/Form3/OptionButton1) 1)
            (setq dzialanie '+)) ; Dodawanie
            ((= (dcl-Control-GetValue geostation/Form3/OptionButton2) 1)
            (setq dzialanie '-)) ; Odejmowanie
            ((= (dcl-Control-GetValue geostation/Form3/OptionButton3) 1)
            (setq dzialanie '*)) ; Mnożenie
            ((= (dcl-Control-GetValue geostation/Form3/OptionButton4) 1)
            (setq dzialanie '/)) ; Dzielenie
          )
          (prompt "\nWybierz teksty (TEXT lub MTEXT): ")
          (setq ss1 (ssget '((0 . "TEXT,MTEXT")))) ; Wybór obiektów tekstowych lub multitekstu
          (if ss1
            (progn
              (setq wartosc2 (atof (dcl-Control-GetText geostation/Form3/TextBox5))) ; Wartość z formularza
              ;; Iteracja po wszystkich obiektach w zbiorze ss1
              (repeat (setq i (sslength ss1))
                (setq tekst1 (ssname ss1 (setq i (1- i))))
                (setq wartosc1 (cdr (assoc 1 (entget tekst1)))) ; Pobranie wartości z obiektu tekstowego

                (if (and (numberp (atof wartosc1)) (numberp wartosc2)) ; Sprawdzamy, czy wartości są liczbami
                  (progn
                    ;; Konwersja na liczby
                    (setq wartosc1 (atof wartosc1))          
                    ;; Wykonanie obliczenia
                    (setq wynik (apply dzialanie (list wartosc1 wartosc2)))
                    (setq wynik
                      (cond
                        ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 0)
                          (zaokraglaj0 wynik)
                        )   
                        ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 1)
                          (zaokraglaj1 wynik)
                        )  
                        ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 2)
                          (zaokraglaj2 wynik)
                        )  
                        ((= (dcl-ComboBox-GetCurSel geostation/Form3/ComboBox3) 3)
                          (zaokraglaj3 wynik)
                        )                                  
                      )
                    )     
                    ;; Zaktualizowanie wartości obiektu tekstowego na wynik
                    (if (= (dcl-Control-GetValue geostation/Form3/CheckBox10) 1)
                      (if (= (cdr (assoc 0 (entget tekst1))) "TEXT")
                          (entmod (subst (cons 1 (strcat (dcl-Control-GetText geostation/Form3/TextBox4) wynik)) (assoc 1 (entget tekst1)) (entget tekst1))) ; Obsługuje TEXT
                          (entmod (subst (cons 1 (strcat (dcl-Control-GetText geostation/Form3/TextBox4) wynik)) (assoc 1 (entget tekst1)) (entget tekst1))) ; Obsługuje MTEXT
                      )
                      (if (= (cdr (assoc 0 (entget tekst1))) "TEXT")
                          (entmod (subst (cons 1 wynik) (assoc 1 (entget tekst1)) (entget tekst1))) ; Obsługuje TEXT
                          (entmod (subst (cons 1 wynik) (assoc 1 (entget tekst1)) (entget tekst1))) ; Obsługuje MTEXT
                      )
                    )
                    (princ "\nWartość tekstu została zaktualizowana.")
                  )
                  (princ "\nBłąd: Obiekt nie zawiera prawidłowej liczby.")
                )
              )
            )
            (princ "\nBłąd: Nie wybrano tekstu.")
          )
          (princ)
        )
      ;----------------- WSTAW PUNKTY W WIERZCHOŁKI
        (defun c:F3TB24 (/);---------------- WSTAW PUNKTY W WIERZCHOŁKI
          (vl-load-com)  ; Załaduj bibliotekę COM
          ;; Pobieramy zestaw obiektów (linie, polilinie, łuki)
          (setq ss (ssget '((0 . "LINE,*POLYLINE,ARC"))))
          
          ;; Sprawdzamy, czy użytkownik coś zaznaczył
          (if ss
            (progn
              (setq i 0)
              (while (< i (sslength ss))
                (setq ent (ssname ss i))  ; Pobierz obiekt z zaznaczenia
                (setq obj (vlax-ename->vla-object ent))  ; Konwertuj obiekt na obiekt ActiveX
                
                ;; Sprawdzamy typ obiektu
                (cond
                  ((= (vla-get-objectname obj) "AcDbLine")  ; Dla linii
                  (setq startpt (vlax-get obj 'StartPoint))  ; Pobierz punkt początkowy
                  (setq endpt (vlax-get obj 'EndPoint))  ; Pobierz punkt końcowy
                  (if (= (dcl-Control-GetValue geostation/Form3/CheckBox11) 1)
                      (progn  ; Powielaj punkty
                        (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point startpt))  ; Wstaw punkt początkowy
                        (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point endpt))  ; Wstaw punkt końcowy
                      )             
                      (progn
                        (setq ssCheckPointStart nil)
                        (setq ssCheckPointEnd nil)
                        (setq ssCheckPointStart (ssget "X" (list (cons 0 "POINT") (cons 10 startpt))))
                        (setq ssCheckPointEnd (ssget "X" (list (cons 0 "POINT") (cons 10 endpt))))
                        (if ssCheckPointStart
                          (princ)
                          (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point startpt))  ; Wstaw punkt początkowy
                        )
                        (if ssCheckPointEnd
                          (princ)
                          (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point endpt))  ; Wstaw punkt początkowy
                        )
                      )
                  )
                  )

                  ((or (= (vla-get-objectname obj) "AcDbPolyline") 
                      (= (vla-get-objectname obj) "AcDb3dPolyline"))  ; Dla polilinii
                    (setq num-verts (vlax-curve-getendparam obj))  ; Pobierz liczbę wierzchołków
                    (setq param 0)
                    (while (<= param num-verts)
                      (setq ssCheckPoint nil)
                      (setq pt (vlax-curve-getPointAtParam obj param))  ; Pobierz punkt na podstawie parametru
                      (if (= (dcl-Control-GetValue geostation/Form3/CheckBox11) 1)
                        (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point pt))  ; Wstaw punkt            
                        (progn
                          (setq ssCheckPoint (ssget "X" (list (cons 0 "POINT") (cons 10 pt))))
                          (if ssCheckPoint
                            (princ)
                            (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point pt))  ; Wstaw punkt 
                          )
                        )
                      )
                      (setq param (1+ param))  ; Zwiększ parametr
                    )
                  )

                  ((= (vla-get-objectname obj) "AcDbArc")  ; Dla łuku
                  (setq startpt (vlax-get obj 'StartPoint))  ; Pobierz punkt początkowy
                  (setq endpt (vlax-get obj 'EndPoint))  ; Pobierz punkt końcowy
                  (if (= (dcl-Control-GetValue geostation/Form3/CheckBox11) 1)
                      (progn  ; Powielaj punkty
                        (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point startpt))  ; Wstaw punkt początkowy
                        (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point endpt))  ; Wstaw punkt końcowy
                      )             
                      (progn
                        (setq ssCheckPointStart nil)
                        (setq ssCheckPointEnd nil)
                        (setq ssCheckPointStart (ssget "X" (list (cons 0 "POINT") (cons 10 startpt))))
                        (setq ssCheckPointEnd (ssget "X" (list (cons 0 "POINT") (cons 10 endpt))))
                        (if ssCheckPointStart
                          (princ)
                          (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point startpt))  ; Wstaw punkt początkowy
                        )
                        (if ssCheckPointEnd
                          (princ)
                          (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point endpt))  ; Wstaw punkt początkowy
                        )
                      )
                  )
                  )
                )
                (setq i (1+ i))  ; Zwiększ indeks
              )
              (princ "\nPunkty zostały wstawione.")
            )
            (princ "\nNie zaznaczono żadnych obiektów.")
          )
          (princ)
        )
      ;----------------- RYSUJ PROFIL NA PODSTAWIE 3DPOLYLINE
        (defun rysujTabele (insert min-scale max-scale dlugosc /)
          (if (not (tblsearch "style" "IMPORT"))
            (progn
              (entmakex
                (list
                  '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                  '(100 . "AcDbSymbolTableRecord")
                  '(100 . "AcDbTextStyleTableRecord")
                  (cons 2 "IMPORT")             ; Nazwa stylu
                  (cons 3 "simplex.shx")              ; Nazwa czcionki
                  (cons 40 0)                ; Wysokość tekstu
                  (cons 41 0.62)                   ; Skala szerokości (domyślnie 1.0)
                  (cons 50 0.261799)               ; Kąt pochylenia tekstu
                  (cons 70 0)
                )
              )
            )
            (princ)
          )
          (setvar "TEXTSTYLE" "IMPORT")
          (setvar "TEXTSIZE" 0.1)
          (vla-addline (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (list (car insert) (- (cadr insert) 1) 0)) (vlax-3d-point (list (+ (car insert) dlugosc) (- (cadr insert) 1) 0)))
          (vla-addline (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (list (car insert) (- (cadr insert) 1.4) 0)) (vlax-3d-point (list (car insert) (+ (+ (cadr insert) (- max-scale min-scale) 1)) 0)))
          (vla-addline (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (list (- (car insert) 0.05) (cadr insert) 0)) (vlax-3d-point (list (+ (car insert) 0.05) (cadr insert) 0)))
          (vla-addline (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (list (- (car insert) 0.05) (+ (cadr insert) (- max-scale min-scale)) 0)) (vlax-3d-point (list (+ (car insert) 0.05) (+ (cadr insert) (- max-scale min-scale)) 0)))
          (vla-addline (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (list (car insert) (- (cadr insert) 1.4) 0)) (vlax-3d-point (list (+ (car insert) dlugosc) (- (cadr insert) 1.4) 0)))
          (vla-AddMText (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (list (- (car insert) 0.5) (+ (cadr insert) 0.05) 0)) 0.1 (zaokraglaj3 min-scale))
          (vla-AddMText (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (list (- (car insert) 0.5) (+ (+ (cadr insert) 0.05) (- max-scale min-scale)) 0)) 0.1 (zaokraglaj3 max-scale))
          (setq kilometrazTxt (vla-AddText (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) "km 0+000" (vlax-3d-point (list (+ (car insert) (/ dlugosc 2)) (+ (+ (cadr insert) (- max-scale min-scale) 1)) 0)) 0.3))
          (vla-put-alignment kilometrazTxt acAlignmentCenter)
          (vla-put-textalignmentpoint kilometrazTxt (vlax-3d-point (list (+ (car insert) (/ dlugosc 2)) (+ (+ (cadr insert) (- max-scale min-scale) 1)) 0)))
          (setq odlegloscTxt (vla-AddText (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) "odległość" (vlax-3d-point (list (- (car insert) 0.03) (- (cadr insert) 1.2) 0)) 0.08))
          (vla-put-rotation odlegloscTxt (* pi (/ 90 180.0)))
          (vla-put-alignment odlegloscTxt acAlignmentBottomCenter)
          (vla-put-textalignmentpoint odlegloscTxt (vlax-3d-point (list (- (car insert) 0.03) (- (cadr insert) 1.2) 0)))
          (setq rzednaTxt (vla-AddText (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) "rzędna [m]" (vlax-3d-point (list (- (car insert) 0.06) (+ (+ (cadr insert) (- max-scale min-scale) 1)) 0)) 0.09))
          (vla-put-alignment rzednaTxt acAlignmentBottomRight)
          (vla-put-textalignmentpoint rzednaTxt (vlax-3d-point (list (- (car insert) 0.06) (+ (+ (cadr insert) (- max-scale min-scale) 1)) 0)))
          (setq 000Txt (vla-AddText (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) "-0.00-" (vlax-3d-point (list (+ (car insert) 0.03) (- (cadr insert) 1.2) 0)) 0.09))
          (vla-put-rotation 000Txt (* pi (/ 90 180.0)))
          (vla-put-alignment 000Txt acAlignmentTopCenter)
          (vla-put-textalignmentpoint 000Txt (vlax-3d-point (list (+ (car insert) 0.03) (- (cadr insert) 1.2) 0)))
          (vla-put-color 000Txt 1)
        )
        (defun c:F3TB25 (/);------------------------------- RYSUJ PROFIL NA PODSTAWIE 3DPOLYLINE
          (vl-load-com)
          (setq i 0)
          (setq ss nil)
          ;; Prośba o wybór 3D Polyline
          (prompt "\nWybierz 3D Polyline: ")
          (setq ss (ssget "_+.:S" '((0 . "POLYLINE"))))
          (setq ent (ssname ss 0))  ; Pobierz obiekt z zaznaczenia
          (setq obj (vlax-ename->vla-object ent))  ; Konwertuj obiekt na obiekt ActiveX
          (setq dlugosc 0)
          (if (= (vla-get-objectname obj) "AcDb3dPolyline")
            (progn
              (setq insert (getpoint "\nWskaż punkt wstawienia profilu: "))
              (setq num-verts (vlax-curve-getendparam obj))  ; Pobierz liczbę wierzchołków
              (setq scaleCount 0)
              (setq min-scale nil)
              (setq max-scale nil)
              (setq pktNaWykresie insert)
              (setq odlegloscNaWykresie 0)
              (while (<= scaleCount num-verts)
                (setq scalept (vlax-curve-getPointAtParam obj scaleCount))
                (setq min-scale (if (or (null min-scale) (< (caddr scalept) min-scale)) (caddr scalept) min-scale))
                (setq max-scale (if (or (null max-scale) (> (caddr scalept) max-scale)) (caddr scalept) max-scale))
                (setq previousPtDl (vlax-curve-getPointAtParam obj scaleCount))  ; Pobierz punkt na podstawie parametru   
                (setq nextPtDl (vlax-curve-getPointAtParam obj (1+ scaleCount)))  
                (if (or (= previousPtDl nil) (= nextPtDl nil))
                  (princ) 
                  (setq dlugosc (+ dlugosc (odleglosc2D previousPtDl nextPtDl)))       
                )
                (setq scaleCount (1+ scaleCount))
              )
              (rysujTabele insert min-scale max-scale dlugosc)
              (setq param 0)
              (while (<= param num-verts)
                (setq previousPt (vlax-curve-getPointAtParam obj param))  ; Pobierz punkt na podstawie parametru   
                (setq nextPt (vlax-curve-getPointAtParam obj (1+ param)))  
                (if (or (= previousPt nil) (= nextPt nil))
                  (princ)  
                  (progn          
                    (vla-addline (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) 
                                (vlax-3d-point (list (car pktNaWykresie) (+ (- (cadr insert) (abs min-scale)) (caddr previousPt)) 0)) 
                                (vlax-3d-point (setq pktNaWykresie (list (+ (car insert) (setq odlegloscNaWykresie (+ (odleglosc2D previousPt nextpt) odlegloscNaWykresie))) (+ (- (cadr insert) (abs min-scale)) (caddr nextPt)) 0))))  
                    (setq dlugoscTxt (vla-AddText (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (strcat "-" (zaokraglaj2 odlegloscNaWykresie) "-") (vlax-3d-point (list (+ (car insert) odlegloscNaWykresie) (- (cadr insert) 1.2) 0)) 0.09))
                    (vla-put-alignment dlugoscTxt acAlignmentMiddleCenter)
                    (vla-put-rotation dlugoscTxt (* pi (/ 90 180.0)))
                    (vla-put-textalignmentpoint dlugoscTxt (vlax-3d-point (list (+ (car insert) odlegloscNaWykresie) (- (cadr insert) 1.2) 0)))
                    (vla-put-color dlugoscTxt 1)
                  )
                )
                (setq param (1+ param))  ; Zwiększ parametr
              )
            )
            (princ)
          )
          (princ)
        )
      ;----------------- OBLICZ KILOMETRAŻ DLA PUNKTÓW
        (defun c:F3TB26 (/);---------------- OBLICZ KILOMETRAŻ DLA PUNKTÓW
          (vl-load-com)
          (if (not (tblsearch "style" "kilometraz"))
            (progn
              (entmakex
                (list
                  '(0 . "STYLE")                  ; Typ obiektu: Styl tekstu
                  '(100 . "AcDbSymbolTableRecord")
                  '(100 . "AcDbTextStyleTableRecord")
                  (cons 2 "kilometraz")             ; Nazwa stylu
                  (cons 3 "Arial")              ; Nazwa czcionki
                  (cons 40 0)                ; Wysokość tekstu
                  (cons 70 0)
                )
              )
            )
            (princ)
          )
          (setq txtHeight (dcl-Control-GetText geostation/Form3/TextBox1))
          (setvar "TEXTSTYLE" "kilometraz")
          (setvar "TEXTSIZE" (atof txtHeight))
          (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
          (setq ms (vla-get-ModelSpace doc))
          (setq ss (ssget '((0 . "POINT"))))
          (setq sel-pline (car (entsel "\nWybierz polilinię, linię lub łuk: ")))
          (setq obj (vlax-ename->vla-object sel-pline))
          (setq angle1 nil)
          (setq i 0)
          
          (if (and sel-pline)
              (if (or (eq (vla-get-ObjectName obj) "AcDbPolyline")
                      (eq (vla-get-ObjectName obj) "AcDbLine")
                      (eq (vla-get-ObjectName obj) "AcDbArc"))
                (progn
                  (setq pline-data (entget sel-pline))
                  (cond
                    ((= (cdr (assoc 0 pline-data)) "LWPOLYLINE")
                    (setq start-point (vlax-curve-getstartpoint (vlax-ename->vla-object sel-pline))
                          end-point (vlax-curve-getendpoint (vlax-ename->vla-object sel-pline))))
                    
                    
                    ((= (cdr (assoc 0 pline-data)) "LINE")
                    (setq start-point (cdr (assoc 10 pline-data))
                          end-point (cdr (assoc 11 pline-data))))
                    
                    ((= (cdr (assoc 0 pline-data)) "ARC")
                      (setq start-point (polar (cdr (assoc 10 pline-data)) (cdr (assoc 50 pline-data)) (cdr (assoc 40 pline-data))))
                      (setq end-point (polar (cdr (assoc 10 pline-data)) (cdr (assoc 51 pline-data)) (cdr (assoc 40 pline-data))))
                    )
                  )
                  (setq znaczStart (vla-addmtext ms (vlax-3d-point start-point) 50 "START"))
                  (setq znaczKoniec (vla-addmtext ms (vlax-3d-point end-point) 50 "KONIEC"))
                  (initget 1 "tak nie t n TAK NIE T N")
                  (setq reverse-choice (getkword "\nCzy chcesz odwrócić kierunek obiektu? [tak/nie]: "))
                  (cond
                    ((or (equal reverse-choice "TAK") (equal reverse-choice "T") (equal reverse-choice "tak") (equal reverse-choice "t") (equal reverse-choice "y")) (setq reverse-a t))
                    ((or (equal reverse-choice "NIE") (equal reverse-choice "N") (equal reverse-choice "nie") (equal reverse-choice "n")) (setq reverse-a nil))
                    ((not reverse-choice) (princ "\nTURBO1"))
                    (t (princ "\nNieprawidłowa opcja."))
                  )
                  (vla-delete znaczStart)
                  (vla-delete znaczKoniec)
                  ;; Prośba o wskazanie punktu na obiekcie
                  (prompt "\nWskaż punkt na obiekcie, od którego zaczyna się kilometraż: ")
                  (setq base-point (getpoint))
                  (setq nearest-point (vlax-curve-getclosestpointto obj base-point))
                  (setq param (vlax-curve-getparamatpoint obj nearest-point))
                  (setq start-distance (vlax-curve-getdistatparam obj param))
                  ;; Prośba o wprowadzenie kilometrażu początkowego
                  (if reverse-a 
                    (cond 
                      ((or (eq (vla-get-ObjectName obj) "AcDbPolyline") (eq (vla-get-ObjectName obj) "AcDbLine"))
                        (setq user-km (getreal (strcat "\nPodaj kilometraż początkowy (obecny kilometraż: " (rtos (- (vla-get-length obj) start-distance) 2 2) "): ")))
                      )
                      ((eq (vla-get-ObjectName obj) "AcDbArc")
                        (setq user-km (getreal (strcat "\nPodaj kilometraż początkowy (obecny kilometraż: " (rtos (- (vla-get-arclength obj) start-distance) 2 2) "): ")))
                      )                  
                    )
                    (setq user-km (getreal (strcat "\nPodaj kilometraż początkowy (obecny kilometraż: " (rtos start-distance 2 2) "): ")))
                  )
                  (if (not user-km)
                    (setq user-km 0)
                  )
                  ;; Przesunięcie kilometrażu o wprowadzony kilometraż początkowy
                  (if ss
                    (while (< i (sslength ss))
                      (setq kilometraz-text nil)
                      (setq ent (ssname ss i))  ; Pobierz obiekt z zaznaczenia
                      (setq obj-point (vlax-ename->vla-object ent))  ; Konwertuj obiekt na obiekt ActiveX
                      (setq cursor-point (cdr (assoc 10 (entget ent))))
                      (setq nearest-point (vlax-curve-getclosestpointto obj cursor-point))
                      (setq param (vlax-curve-getparamatpoint obj nearest-point))
                      (if reverse-A
                        (progn
                          (cond 
                            ((or (eq (vla-get-ObjectName obj) "AcDbPolyline") (eq (vla-get-ObjectName obj) "AcDbLine"))
                              (setq distance1 (+ (- (vla-get-length obj) (vlax-curve-getdistatparam obj param)) (- user-km (- (vla-get-length obj) start-distance))))
                            )
                            ((eq (vla-get-ObjectName obj) "AcDbArc")
                              (setq distance1 (+ (- (vla-get-arclength obj) (vlax-curve-getdistatparam obj param)) (- user-km (- (vla-get-arclength obj) start-distance))))
                            )
                          
                          )
                        )
                        (setq distance1 (+ (vlax-curve-getdistatparam obj param) (- user-km start-distance)))
                      )
                      ; (setq distance1 (+ (vlax-curve-getdistatparam obj param) (- user-km start-distance)))
                      (setq nearest-point (vlax-3d-point nearest-point)) ; Konwersja do formatu VARIANT
                      
                      ;; Obliczanie wektora tangenta na obiekcie
                      (setq tangent (vlax-curve-getfirstderiv obj param))  ; Wektor styczny

                      ;; Obliczanie wektora prostopadłego
                      (setq perp-vector (list (- (cadr tangent)) (car tangent) 0)) ; Obrócenie wektora o 90°
                      
                      ;; Normalizacja wektora prostopadłego
                      (setq length (sqrt (+ (* (car perp-vector) (car perp-vector))
                                          (* (cadr perp-vector) (cadr perp-vector)))))
                      (setq perp-vector (list (/ (car perp-vector) length)
                                            (/ (cadr perp-vector) length)
                                            0))
                      
                      ;; Obliczenie kąta obrotu tekstu
                      (if reverse-a 
                        (setq angle1 (atan (cadr perp-vector) (car perp-vector)))
                        (setq angle1 (+ (atan (cadr perp-vector) (car perp-vector)) pi))
                      )
                      
                      ;; Dodanie tekstu w miejscu punktu, z obrotem prostopadłym do obiektu
                      (if kilometraz-text
                        (progn
                          (vla-put-textstring kilometraz-text (strcat "km:" (zaokraglaj2 distance1)))
                          (vla-put-Rotation kilometraz-text angle1)
                          (vla-put-InsertionPoint kilometraz-text nearest-point)
                        )
                        (progn
                          (setq kilometraz-text (vla-addText ms (strcat "km:" (zaokraglaj2 distance1)) nearest-point (atof txtHeight)))
                          (vla-put-Rotation kilometraz-text angle1)
                          (vla-put-alignment kilometraz-text acAlignmentMiddleLeft)
                          (vla-put-textalignmentpoint kilometraz-text nearest-point)
                        )
                      )
                      (setq i (1+ i))
                    )
                  )
                )
                (princ "\nWybrany obiekt nie jest ani polilinią, ani linią, ani łukiem. Proszę wybrać odpowiedni obiekt.")
              )
            )
          (princ)
        )
        (defun c:F3TB14 ();----------------- KILOMETRAŻ DYNAMICZNY
          (vl-load-com)
          (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
          (setq ms (vla-get-ModelSpace doc))

          ;; Sprawdzamy, czy zmienna początkowego kilometrażu jest już ustawiona
          (if (not (boundp 'poczatkowy-km))
            (setq poczatkowy-km 0.0)  ;; Jeśli nie, ustawiamy domyślną wartość na 0
          )
          (initget 1 "Ustaw U ustaw u Wybierz W wybierz w")
          ;; Menu wyboru opcji zmiany początkowego kilometrażu
          (setq opcja (getkword (strcat "\nWybierz opcję [Ustaw wartość początkową km/Wybierz polilinię] (wartość początkowa km: " (zaokraglaj2 poczatkowy-km) "): ")))
          
          (cond
            ((or (= opcja "Ustaw") (= opcja "U") (= opcja "ustaw") (= opcja "u"))
            (setq poczatkowy-km (getreal "\nPodaj nową wartość początkowego kilometrażu: "))
            (princ (strcat "\nNowa wartość początkowego kilometrażu to: " (zaokraglaj2 poczatkowy-km)))
            )

            ((or (= opcja "Wybierz") (= opcja "W") (= opcja "wybierz") (= opcja "w"))
            (princ "\nKontynuowanie z istniejącą wartością początkowego kilometrażu.")
            )

            (t (princ "\nNieprawidłowa opcja! Proszę wybrać 'Ustaw' lub 'Kontynuuj'."))
          )

          ;; Wybór polilinii
          (setq sel-pline (car (entsel "\nWybierz polilinię: ")))
          (setq pline-obj (vlax-ename->vla-object sel-pline))

          (setq kilometraz-text nil)

          (if (and sel-pline (eq (vla-get-ObjectName pline-obj) "AcDbPolyline"))
            (progn
              (princ "\nNaciśnij ESC, aby zakończyć. Kliknij, aby zapisać tekst w danym miejscu.")
              (while t
                (setq cursor-pos (grread nil 15 0))
                (if (not cursor-pos) (exit))

                (cond
                  ;; Jeśli kursor się przesunął
                  ((= (car cursor-pos) 5)
                  (setq cursor-point (cadr cursor-pos))
                  (setq nearest-point (vlax-curve-getclosestpointto pline-obj cursor-point))
                  (setq param (vlax-curve-getparamatpoint pline-obj nearest-point))
                  (setq km_distance (+ poczatkowy-km (vlax-curve-getdistatparam pline-obj param)))  ;; Dodajemy początkowy kilometraż
                  (setq tangent (vlax-curve-getfirstderiv pline-obj param))
                  (setq km_angle (- (atan (cadr tangent) (car tangent)) (/ pi 2)))
                  (setq nearest-point (vlax-3d-point nearest-point))
                  
                  (if kilometraz-text             
                    (progn
                      (vla-put-textstring kilometraz-text (strcat "Km: " (zaokraglaj2 km_distance)))
                      (vla-put-InsertionPoint kilometraz-text nearest-point)
                      (vla-put-Rotation kilometraz-text km_angle)
                    )
                    (progn
                      (setq kilometraz-text (vla-addtext ms (strcat "Km: " (zaokraglaj2 km_distance)) nearest-point 0.3))
                      (vla-put-Rotation kilometraz-text km_angle)
                    )
                  )
                  )
                  ;; Jeśli użytkownik kliknie myszką (prawy lub lewy przycisk)
                  ((= (car cursor-pos) 3)
                  (setq click-point (cadr cursor-pos))
                  (setq click-nearest (vlax-curve-getclosestpointto pline-obj click-point))
                  (setq click-param (vlax-curve-getparamatpoint pline-obj click-nearest))
                  (setq click-distance (+ poczatkowy-km (vlax-curve-getdistatparam pline-obj click-param)))  ;; Dodajemy początkowy kilometraż
                  (setq click-tangent (vlax-curve-getfirstderiv pline-obj click-param))
                  (setq click-angle (- (atan (cadr click-tangent) (car click-tangent)) (/ pi 2)))
                  (setq click-nearest (vlax-3d-point click-nearest))
                  ;; Dodanie nowego tekstu w wybranym miejscu z poprawnym obrotem
                  (setq saved-text (vla-addtext ms (strcat "Km: " (zaokraglaj2 click-distance)) click-nearest 0.3))
                  (vla-put-Rotation saved-text click-angle)
                  (princ "\nKilometraż zapisany!")
                  )
                )
              )
            )
            (princ "\nWybrany obiekt nie jest polilinią. Proszę wybrać ponownie.")
          )
          (princ)
        )
    ;                          >>>>>>>>>>>>>>>>>>>>> DEV <<<<<<<<<<<<<<<<<<<<<<<<<
      ;----------------- DXF GROUP BUTTON
        (defun c:geostation/Form3/TextButton21#OnClicked (/);--------------- DXF GROUP BUTTON
          (if (setq ent (ssget "_+.:E:S"))
            (progn
              (princ "\nWybierz obiekt, żeby wyświetlić DXF GROUP LIST:")
              (foreach x (entget (ssname ent 0))
                (print x)
              )
              (textpage)
            )
          )
          (princ)
        )
      ;----------------- DXF GROUP2 BUTTON
        (defun c:geostation/Form3/TextButton22#OnClicked (/);--------------- DXF GROUP2 BUTTON
          (cond	((setq e (car (entsel "\nWybierz obiekt, żeby wyświetlić DXF GROUP LIST: ")))
          (mapcar '(lambda (x) (print (list (car x) (cdr x) (type (cdr x))))) (entget e '("*")))
          (textscr)
          )
          )
          (princ)
        )
      ;----------------- OBJECT INFO BUTTON
        (defun c:geostation/Form3/TextButton23#OnClicked (/);--------------- OBJECT INFO BUTTON
          (while (setq ent (entsel)) 
            (vlax-Dump-Object 
              (vlax-Ename->Vla-Object (car ent)) T
            ) 
          ) 
          (textpage)
          (princ) 
        )
;======================================-------------------------------------------- INNE ---------------------------------------------------------------===================
  ;----------------- WSTAWIANIE CZOLOWEK
    (defun c:WSTAWCZOLOWKI ( / *error* a acdoc b c d dim e fd ht i o p1 p2 p3 pc pm rad sd space ss u opt isLine)
      (vl-load-com)
      (setq acDoc (vla-get-activedocument (vlax-get-acad-object))
            space (vlax-get acDoc (if (= (getvar 'cvport) 1) 'paperspase 'modelspace))
            dim (getvar 'dimstyle)
            ht  (* 1.0 (getvar 'dimtxt) (if (= 0 (getvar 'dimanno)) (getvar 'dimscale) (/ 1.0 (getvar 'cannoscalevalue))))
            )
        (if (not (tblobjname "DIMSTYLE" "czolowki"))
        (progn
          (STYL_CZOLOWKA)
          (vla-put-ActiveDimStyle acDoc (vla-Item (vla-get-DimStyles acDoc) "czolowki"))
        ) 
        (vla-put-ActiveDimStyle acDoc (vla-Item (vla-get-DimStyles acDoc) "czolowki"))
      )
      (vla-startundomark acDoc)
      (defun *error* (msg)
        (and
          msg
          (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*BREAK*"))
          (princ (strcat "\nADError: " msg))
          )
        (vla-endundomark acdoc)
        (princ)
        )
      (setq opt (mapcar
                  '(lambda (a b)
                    (cond
                      ((getdictvar "AD_otions" a))
                      ((setdictvar "AD_otions" a b))
                      )
                    )
                  '("Linear" "Arc")
                  '("b0" "c0")
                  )
            )
      (setq opt (AD_options opt))
      (if
        (setq ss (ssget '((0 . "LWPOLYLINE,LINE,ARC"))))
        (repeat (setq i (sslength ss))
          (setq e (ssname ss (setq i (1- i)))
                o (vlax-ename->vla-object e)
                a (vlax-curve-getstartparam e)
                c (vlax-curve-getendparam   e)
                b nil
                isLine (wcmatch (vla-get-Objectname o) "AcDbLine,AcDbArc")
                )
          (while (<= (setq b (if isLine (if b (1+ b) c) (1+ a))) c)
            (setq p1 (vlax-curve-getpointatparam e a)
                  p2 (vlax-curve-getpointatparam e b)
                  u  (angle p1 p2)
                  pm (vlax-curve-getpointatparam e (/ (+ a b) 2.0))
                  sd (vlax-curve-getsecondderiv  e (/ (+ a b) 2.0))
                  rad (distance '(0 0 0) sd)
                  d  (cond (isLine) ((not (minusp (vla-getbulge o a)))))
                  pc (mapcar (if d '+ '-) pm sd)
                  p3 (if
                      (or (equal rad 0.0 1e-8) (eq (cadr opt) "c2"))
                      (if
                        (eq (car opt) "b0")
                        (polar pm (+ (atan (/ (sin u) (cos u))) (/ pi 2.0)) ht)
                        (polar pm (- (atan (/ (sin u) (cos u))) (/ pi 2.0)) (* 1.75 ht))
                        )
                      (if
                        (eq (cadr opt) "c0")
                        (polar pm (angle pm pc) (if (<= 1e-4 (angle pc pm) pi) (* 1.75 ht) ht))
                        (polar pm (angle pc pm) (if (<= 1e-4 (angle pc pm) pi) ht (* 1.75 ht)))
                      )
                    )
                  )
            (if
              (equal rad 0.0 1e-8)
              (vla-adddimaligned space (vlax-3d-point p1) (vlax-3d-point p2) (vlax-3d-point p3))
              (vla-adddimarc space (vlax-3d-point pc) (vlax-3d-point p1) (vlax-3d-point p2) (vlax-3d-point p3))
              )
            (setq a (1+ a))
            )
          )
        )
      (vla-endundomark acdoc)
      (princ)
    )
    (defun AD_options (old / a1 a2 b1 b2 dcl dcl_id file r)
      (setq
        a1 (car old)
        a2 (cadr old)
        dcl (open (setq file (vl-filename-mktemp "AD" (getvar 'dwgprefix) ".dcl")) "w")
      )
      (write-line 
        "AD: dialog { label = \"Położenie czołówek\" ;
        : text { 
        height = 2;
        width = 4;
        value = \"Funkcja wykorzystuje aktualnie wybrany styl wymiarowania dla wstawiania czołówek.\";}
        : text { 
        is_bold = true;
        width = 38;
        value = \"Proszę o wskazanie położeń dla czołówek:\";}
        : boxed_radio_column { label = \"Położenie czołówek dla polilinii oraz linii\" ; key = \"a1\";
        : radio_button { label = \"nad linią\" ; key = \"b0\";}
        : radio_button { label = \"pod linią\" ; key = \"b1\";}}
        : boxed_radio_column { label = \"Położenie czołówek dla łuków\" ; key = \"a2\";
        : radio_button { label = \"w wewnątrz łuku\" ; key = \"c0\";}
        : radio_button { label = \"na zewnątrz łuku\" ; key = \"c1\";}}
        ok_only ;}"
        dcl)
      (close dcl)
      (if
        (< 0 (setq dcl_id (load_dialog file)))
        (if
          (new_dialog "AD" dcl_id)
          (progn
            (action_tile "a1" "(setq b1 $value)")
            (action_tile "a2" "(setq b2 $value)")
            (set_tile "a1" (setq b1 a1))
            (set_tile "a2" (setq b2 a2))
            (setq r (start_dialog))
            (unload_dialog dcl_id)
            )
          )
        )
      (if (findfile file) (vl-file-delete file))
      (if
        (= r 1)
        (mapcar 'setdictvar 
          '("AD_otions" "AD_otions")
          '("Linear" "Arc")
          (list b1 b2)
        )
        (list a1 a2)
      )
    )        
    (defun getdictvar (dict var / dict_ename)
      (if
        (setq dict_ename (cdr (assoc -1 (dictsearch (namedobjdict) dict))))
        (cdr (assoc 1 (dictsearch dict_ename var)))
      )
    )
    (defun setdictvar (dict var val / dict_name record)
      (or
        (setq dict_ename (cdr (assoc -1 (dictsearch (namedobjdict) dict))))
        (setq dict_ename (dictadd (namedobjdict) dict (entmakex '((0 . "DICTIONARY") (100 . "AcDbDictionary")))))
        )
      (if
        (setq record (dictsearch dict_ename var))
        (entmod (subst (cons 1 val) (assoc 1 record) record))
        (dictadd
          dict_ename
          var
          (entmakex
            (list
              '(0 . "DICTIONARYVAR")
              '(100 . "DictionaryVariables")
              '(280 . 0)
              (cons 1 val)
            )
          )
        )
      )
      val
    )
    (defun STYL_CZOLOWKA ()
      ;; Pobierz dokument i kolekcję stylów wymiarowania
      (setq acadObj (vlax-get-acad-object))
      (setq doc (vla-get-ActiveDocument acadObj))
      (setq dimStyles (vla-get-DimStyles doc))
      (setq styleName "czolowki2")
      (if (tblobjname "STYLE" styleName)
        (princ)
        (progn
          (entmake 
            (list
              (cons 0 "STYLE") 
              (cons 100 "AcDbSymbolTableRecord") 
              (cons 100 "AcDbTextStyleTableRecord") 
              (cons 2 "czolowki2");; Style Name
              (cons 70 0)
              (cons 40 0.18);; Fixed text height
              (cons 41 1.0);; Width Factor
              (cons 50 0.0);; Oblique angle
              (cons 71 0)
              (cons 42 0.18);; Last height used
              (cons 3 "romans.shx");; Primary font name 
              (cons 4 "");;  Big font name
            )
          )
        )
      )
      (setq stylWymiaru (vl-catch-all-apply 'vla-item (list dimStyles "czolowki")))
      (if (vl-catch-all-error-p stylWymiaru)
        (progn
          (setq stylWymiaru (vla-Add dimStyles "czolowki"))
          (setq dimStyle (tblobjname "DIMSTYLE" "czolowki"))
          (entmod
            (append
              (entget dimStyle)
              (list
                (cons 2 "czolowki")
                (cons 178 256)
                (cons 271 2)
                (cons 272 2)
                (cons 3 "-<>-")
                (cons 281 1)
                (cons 282 1)
                (cons 73 0)
                (cons 74 0)
                (cons 75 1)
                (cons 76 1)
                (cons 174 1)
                (cons 340 (tblobjname "style" styleName))        
              )
            )
          )
        )
      )
      (princ)
    )
    (defun c:geostation/Form1/TextButton5#OnClicked (/)
      (setq wybranycolor (getvar "CECOLOR"))
      (setq reply-podklad (acet-ui-message "Czy na pewno chcesz zmienić wszystkie elementy na aktualnie wybrany kolor?" "Message" 52))
        ;Yes = 6, No = 7
        (if (= reply-podklad 6)
          (podklad)
          (princ "Anulowano zmianę koloru\n")
        )
      (princ)
    )
    (defun changeLayerColor (/)
      (vl-load-com)
      (setq newColor (getvar "CECOLOR"))
      (setq acad (vlax-get-acad-object))
      (setq doc (vla-get-activedocument acad))
      (setq mspace (vla-get-modelspace doc))
      (setq layers (vla-get-layers doc))
      (if (not layers)
        (setq layers (vla-add (vla-get-layers doc)))
        (princ)
      )
      (setq layerCount (vla-get-count layers))
      (vlax-for layer layers (vla-put-color layer newColor))
      (princ "Zmieniono kolor wszystkich elementów\n")
      (princ)
    )
  ;----------------- BOUNDARY TRIM

    (defun C:BoundaryTrim ()      
      (command "_OPENDCL")
      (dcl-Project-Load "c:/NXYZ/geostation")
      (vl-load-com)
      (dcl-Form-Show geostation/Form17)       
      (update-ename)    
    )
    (defun c:geostation/Form17/TextButton1#OnClicked (/) ;------------ OK BUTTON
      (if ent 
        (progn
          (granica-obciecia)
          (princ)
        )
        (alert "Wybierz granicę ucięcia!")
      )
    )
    (defun c:geostation/Form17#OnOK (/) ;----------- ENTER
      (if ent 
        (progn
          (granica-obciecia)
          (princ)
        )
        (alert "Wybierz granicę ucięcia!")
      )
    )
    (defun c:geostation/Form17/TextButton2#OnClicked (/) ;------------ anuluj button
      (dcl-Form-close geostation/Form17)
      (princ)
    )
    (defun c:geostation/Form17/TextButton3#OnClicked (/) ;------------ wybierz granice
      (dcl-Form-close geostation/Form17)
      (setq ent nil)  ; inicjalizacja
      (setq done nil)
      (while (not done)
        (setq ent (entsel "\nWybierz obrys przycięcia (polilinia): "))

        (if (null ent)
            (princ "\nNie wybrano obiektu. Spróbuj ponownie.")
            (progn
              (setq obj-type (cdr (assoc 0 (entget (car ent)))))

              (if (member obj-type '("LWPOLYLINE"))
                  (progn
                    (setq ename (car ent)) ; zapisujemy ename
                    (setq done T) ; ustawiamy zmienną, żeby wyjść z pętli
                    (princ)
                  )
                  (princ "\nWybrany obiekt nie jest polilinią. Spróbuj ponownie.")
              )
            )
        )
      )
      (dcl-Form-Show geostation/Form17)
      (update-ename) 
      (princ)
    )
    (defun update-ename ()
      (if ent
        (progn
          (setq enttemp ent)
          (setq ename (car ent))                     ; pobieramy ename
          (setq etype (cdr (assoc 0 (entget ename)))) ; typ obiektu, np. LWPOLYLINE
          (setq eid (vl-princ-to-string ename))      ; konwertujemy ename na tekst
          ;; Tworzymy czytelny string do DCL
          (setq display-text (strcat "Typ: " etype " | ID: " eid))          
          (dcl-Control-SetText geostation/Form17/TextBox1 display-text)
        )
        (dcl-Control-SetText geostation/Form17/TextBox1 " wybierz granicę ucięcia")
      )
    )
    (defun granica-obciecia (/ cmde ent en el ss cbox ssall lst)
      (setq cmde (getvar "CMDECHO"))
      (setvar "CMDECHO" 0)
      (setq mlineCB (dcl-Control-GetValue geostation/Form17/CheckBox1))
      (setq wipeoutCB (dcl-Control-GetValue geostation/Form17/CheckBox2))
      (dcl-Form-close geostation/Form17)
      (StartLoading (strcat "Rozpoczynam pracę...")) 
      (if (= mlineCB 1)
        (progn
          (setq ssmline (ssget "X" '((0 . "MLINE"))))
          (if (not ssmline)
            (princ)
            (progn
              ;; otwórz grupę undo (lepiej móc cofnąć całość jednym UNDO)
              (command "_.UNDO" "_BEGIN")
              (setq n (sslength ssmline)
                    i 0)
              (while (< i n)
                (setq entmline (ssname ssmline i))
                (if (and entmline (entget entmline))
                  ;; wykonaj EXPLODE na danym obiekcie
                  (vl-cmdf "_.EXPLODE" entmline)
                )
                (setq i (1+ i))
                (setq postep (strcat (rtos (* (/ i (float n)) 100) 2 0) "%"))
                (ChangeLoading "Konwertowanie mLine... " postep i n)
              )
              ;; zamknij grupę undo
              (command "_.UNDO" "_END")
              (princ)
            )
          )
        )
        (princ)
      )
      (if (= wipeoutCB 1)
        (progn
          (vla-startundomark
          (cond (*activeDoc*)
          ((setq *activeDoc*
          (vla-get-activedocument (vlax-get-acad-object)))))
          )
          ;; Main code
          (if (and (setq ss (ssget "_x" '((0 . "WIPEOUT"))))
          (setq ss (ssget "_x")))
          ((lambda (i / e v visList wipList mn mx c)
              (while (setq e (ssname ss (setq i (1+ i))))
                (if (/= "WIPEOUT" (strcase (cdr (assoc 0 (entget e)))))
                  (progn
                    (vla-put-visible
                      (setq v (vlax-ename->vla-object e))
                      :vlax-false)
                    (setq visList (cons v visList)))
                  (setq wipList (cons e wipList))))
             (setq r 1)
              (foreach w  wipList
                  (setq n (length wipList))
                  (setq postep (strcat (rtos (* (/ r (float n)) 100) 2 0) "%"))
                  (ChangeLoading "Konwertowanie Wipeout... " postep r n)
                (vla-getboundingbox
                  (setq v (vlax-ename->vla-object w))
                  'mn
                  'mx)
                (setq c
                      (mapcar '*
                              (mapcar '+
                                      (setq mn (vlax-safearray->list mn))
                                      (setq mx (vlax-safearray->list mx)))
                              '(0.5 0.5 0.5)))
                (vl-cmdf "._boundary" c "")
                (vl-cmdf "._matchprop" w (entlast) "")
                (vl-cmdf "._region" "")
                (vla-delete v)
                (setq r (1+ r))
              )
             
              (foreach o  visList
                (vla-put-visible o :vlax-true)))
            -1)
          )      
        )
      )
      (setq ent enttemp)
      (if (not (null ent))
              ; (and ACET-ENT-GEOMEXTENTS ; ET?
              ; (setq ent (entsel "\nWybierz obrys przycięcią (polilinia): "))
              ; (setq en (car ent))
              ; (wcmatch (cdr (assoc 0 (entget en))) "*POLYLINE"))
        (progn        
          (setq en (car ent))          
          (command "_UNDO" "_Group")
          (setq cbox (ACET-ENT-GEOMEXTENTS en))
          (setq cbox (mapcar '(lambda(x)(trans x 0 1)) cbox))
          (setq lst (ACET-GEOM-OBJECT-POINT-LIST en 1e-4))
          (setq lstfull (ACET-GEOM-OBJECT-POINT-LIST en 1e-4))
          (ACET-SS-ZOOM-EXTENTS (ACET-LIST-TO-SS (list en)))
          (command "_.ZOOM" "0.95x")
          (etrim en (polar
                      (car cbox)
                      (angle (car cbox)(cadr cbox))
                      (* (distance (car cbox)(cadr cbox)) 1.1)))          
          ;; 2. Utworzenie ss dla elementów przecinających polygon
          (if (not (null lstfull))
            (progn
              (setq ss (ssget "_CP" lstfull))
              (princ ss)
            )            
          )

          ;; 3. Utworzenie ssall — wszystkie elementy w tej samej przestrzeni modelu
          ;;    Jeśli assoc 410 nie zwraca niczego, pobieramy wszystkie elementy w modelu
          (setq space-filt (assoc 410 (entget en)))
          (if space-filt
              (setq ssall (ssget "_X" (list space-filt)))
              (setq ssall (ssget "_X" '((0 . "*")))) ; fallback — wszystkie elementy
          )
          ;; 4. Usuwanie elementów ss z ssall
          (if (and ss ssall)
            (progn
              (ChangeLoading "Usuwanie elementów..." "" 0 0)
              ;; Pobierz ename elementów do usunięcia
              (setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
              ;; Usuń z ssall
              (foreach e1 lst
                (ssdel e1 ssall)
              )
              ;; Usuń pozostałe elementy w ssall
              (ACET-SS-ENTDEL ssall)
            )
            (princ "\nNie znaleziono elementów do usunięcia lub obiekt wyznaczający granice jest niepoprawny.")
          )          
          (command "_UNDO" "_End")
        (setvar "CMDECHO" cmde)
        )
        (if (not ACET-ENT-GEOMEXTENTS)(princ "\nExpress Tools nie jest zainstalowany!"))
      )
      (CloseLoading)
      (princ)
    )
    (defun etrim ( na a / la b d e1 lst lst2 n j k m ss na2 na3 na4
                          x y z flag flag2 flag3 zlst
                )
      (setq e1 (entget na));setq
      (if (or (setq flag (equal (acet-dxf 0 e1) "POLYLINE"))
              (setq flag (equal (acet-dxf 0 e1) "LWPOLYLINE"))
              (equal (acet-dxf 0 e1) "LINE")
              (equal (acet-dxf 0 e1) "CIRCLE")
              (equal (acet-dxf 0 e1) "ARC")
              (equal (acet-dxf 0 e1) "ELLIPSE")
              (equal (acet-dxf 0 e1) "TEXT")
              (equal (acet-dxf 0 e1) "ATTDEF")
              (equal (acet-dxf 0 e1) "MTEXT")
          );or
          (progn
          (if (and flag
                    (equal 8 (logand 8 (acet-dxf 70 e1)))
              );and
              (setq flag nil)
          );if
          (setq a (trans a 1 0));setq
          (command "_.ucs" "_View")

          (setq lst (acet-geom-object-point-list na nil)  ;;;find extents of selected cutting edge object
                lst (acet-geom-list-extents lst)
                  x (- (car (cadr lst)) (car (car lst)))
                  y (- (cadr (cadr lst)) (cadr (car lst)))
                  x (* 0.075 x)
                  y (* 0.075 y)
                  z (list x y)
                  x (list (+ (car (cadr lst)) (car z))
                          (+ (cadr (cadr lst)) (cadr z))
                    );list
                  y (list (- (car (car lst)) (car z))
                          (- (cadr (car lst)) (cadr z))
                    );list
                zlst (zoom_2_object (list x y))
          );setq
          ;(command "_.zoom" "_w" x y)
          (command "_.zoom" "_w" (car zlst) (cadr zlst))

          (entupd na)                  ;;;update the ent. so it's curves display smoothly

          (setq lst (acet-geom-object-point-list na
                            (/ (acet-geom-pixel-unit) 2.0)
                    )
          );setq
            (ChangeLoading "Przycinanie elementów..." " " 0 0)
          (if (or (not flag)
                  (not (acet-geom-self-intersect lst nil))
              );or
              (progn             ;then the object is valid and not a self intersecting polyline.
                (if (and flag
                        (equal (car lst) (last lst) 0.0001)
                    );and
                    (setq flag3 T);then the polyline could potentialy need a second offset
                );if
                (if (setq la (acet-layer-locked (getvar "clayer")))
                    (command "_.layer" "_unl" (getvar "clayer") "")
                );if

                (command "_.pline")
                (setq b nil)
                (setq n 0);setq
                (repeat (length lst)
                (setq d (nth n lst))
                (if (not (equal d b 0.0001))
                    (progn
                    (command d)
                    (setq lst2 (append lst2 (list d)));setq
                    (setq b d);setq
                    );progn
                );if
                (setq n (+ n 1))
                );repeat
                (command "")
                (setq  na2 (entlast)
                        ss (ssadd)
                        ss (ssadd na2 ss)
                      lst nil
                );setq
                (acet-ss-visible ss 1)
                (setq lst2 (get_fence_points na2 a lst2 flag3 flag));setq

                (if la
                    (command "_.layer" "_lock" (getvar "clayer") "")
                );if
                (command "_.ucs" "_p")
                ;Move the ents to force a display update of the ents to avoid viewres problems.
                (setvar "highlight" 0)
                (if (setq ss (ssget "_f" (last lst2)))
                    (command "_.move" ss "" "0,0,0" "0,0,0")
                );if
                (if flag
                    (progn
                    (if (setq la (acet-layer-locked (acet-dxf 8 e1)))
                        (command "_.layer" "_unl" (acet-dxf 8 e1) "")
                    );if
                    (acet-ucs-set-z (acet-dxf 210 e1))
                    (command "_.copy" na "" "0,0,0" "0,0,0")
                    ;(entdel na)
                    (acet-ss-visible (ssadd na (ssadd)) 1);make it invisible for a while.
                                                          ;rk 12:01 PM 3/10/98
                    (setq na3 na
                            na (entlast)
                    );setq
                    (command "_.pedit" na "_w" "0.0" "_x")
                    (command "_.ucs" "_p")
                    (if la (command "_.layer" "_lock" (acet-dxf 8 e1) ""));if
                    );progn
                );if
                (safe-trim-fallback na)
                (setq m (- (length lst2) 1));setq
                (setq k 0)
                (repeat (length lst2)
                (setq lst (nth k lst2))
                (setq a (trans (car lst) 0 1))
                (setq n 1)
                (repeat (- (length lst) 1) ;repeat each fence list
                  (setq b (trans (nth n lst) 0 1))
                  (if (equal a b 0.0001)
                      (setq flag2 T)
                      (setq flag2 nil)
                  );if
                  (setq na4 nil);setq
                  (setq j 0);setq
                  (while (not flag2)       ;repeat each segment of the fence until no new ents are created.
                  (setq na4 (entlast));setq
                  (command "_F" a b "")
                  (if (and (equal na4 (entlast))
                            (or (not (equal k m))
                                (> j 0)
                            );or
                      );and
                      (setq flag2 T)
                  );if
                  (setq j (+ j 1));setq
                  );while
                  (setq a b);setq
                  (setq n (+ n 1));setq
                );repeat

                (setq k (+ k 1))
                );repeat
                (command "")

                (if flag
                    (progn
                    (if (setq la (acet-layer-locked (acet-dxf 8 e1)))
                        (command "_.layer" "_unl" (acet-dxf 8 e1) "")
                    );if
                    (entdel na) ;get rid of the copy

                    ;(entdel na3);bring back the original
                    (acet-ss-visible (ssadd na3 (ssadd)) 0) ;bring back the original
                                                            ;rk 12:01 PM 3/10/98
                    (if la (command "_.layer" "_lock" (acet-dxf 8 e1) ""));if
                    );progn
                );if
              );progn
              (progn
                (command "_.ucs" "_p")
                (princ "\nNiedopuszczalne są samoprzecinające się krawędzie.")
              );progn else invalid self intersecting polyline
          );if
          (command "_.zoom" "_p")
          );progn then it's a most likely a valid entity.
      );if
    )
    (defun another_offset ( pl1 pl2 a1 a2 b na2 lst2 a lst3 lst4 / na ss lst da1 da2)
      (setq da1 (abs (- a2 a1)));setq
      (setq da2 (- (* b (max pl2 pl1))
                  (/ (* b (abs (- pl2 pl1)))
                      2.0
                  )
                )
      );setq
      (if (> (abs (- da2 da1))
            (* 0.01 (max a1 a2))
          )
          (progn

          (acet-pline-make (list lst2))
          (setq  na (entlast)
                na2 (entlast)
                  ss (ssadd)
                  ss (ssadd na ss)
          );setq
          (acet-ss-visible ss 1)
          (command "_.offset" b na2 a "")
          (if (and (not (equal na (entlast)))
                    (setq lst3 (acet-geom-vertex-list (entlast)))
                    (setq lst3 (intersect_check lst2 lst3 lst4))
              );and
              (progn
                (acet-ss-visible (ssadd (entlast) (ssadd)) 1)
                (command "_.area" "_ob" (entlast))
                (setq pl2 (getvar "perimeter")
                      a2 (getvar "area")
                );setq
                (setq lst (list (acet-geom-vertex-list (list (entlast) 0))));setq
                (entdel (entlast));then offset was a success so delete the ent after getting it's info
              );progn then
              (if (not (equal na (entlast))) (entdel (entlast)));if else
          );if
          (entdel na2)
          );progn then let's do that second offset
      );if

      lst
    )
    (defun get_fence_points ( na2 a lst2 flag plflag / a1 a2 pl1 pl2 b c d n
                                                      lst lst2 lst3 lst4 na
                            )
      (if flag
          (progn
          (setq lst2 (cdr lst2));setq
          (repeat (fix (/ (length lst2) 2))
            (setq lst2 (append (cdr lst2) (list (car lst2)));append
            );setq
          );repeat
          (setq lst2 (append lst2 (list (car lst2))));setq
          (command "_.area" "_ob" na2)
          (setq pl1 (getvar "perimeter")
                  a1 (getvar "area")
          );setq
          );progn
      );if

      (setq    a (trans a 0 1)
              b (* (getvar "viewsize") 0.05);initial offset distance
              n 3.0                         ;number of offsets
              d (/ b (- n 1))               ;delta offset
              c (acet-geom-pixel-unit)
            lst4 (acet-geom-view-points)
      );setq

      (while (> b c)
      (setq na (entlast))
      (command "_.offset" b na2 a "")
      (if (and (not (equal na (entlast)))
              (setq lst3 (acet-geom-vertex-list (entlast)))
              (or (not plflag)
                  (setq lst3 (intersect_check lst2 lst3 lst4))
              );or
          );and
          (progn
          (setq lst3 (acet-geom-m-trans lst3 1 0))
          (acet-ss-visible (ssadd (entlast) (ssadd)) 1)
          (if flag
              (progn
                (command "_.area" "_ob" (entlast))
                (setq pl2 (getvar "perimeter")
                      a2 (getvar "area")
                );setq
              );progn
          );if
          (setq lst (append lst (list lst3)));setq
          (entdel (entlast))  ;delete the ent after getting it's vertex info
          (if flag
              (setq lst (append lst
                                (another_offset pl1 pl2 a1 a2 b na2 lst2 a lst3 lst4)
                        );append
              );setq
          );if
          );progn then offset was a success
          (if (not (equal na (entlast))) (entdel (entlast)));if else
      );if
      (setq b (- b d));setq
      );while
      (setq na (entlast))
      (command "_.offset" c na2 a "")
      (if (and (not (equal na (entlast)))
              (setq lst3 (acet-geom-vertex-list (entlast)))
              (or (not plflag)
                  (setq lst3 (intersect_check lst2 lst3 lst4))
              );or
          );and
          (progn
          (setq lst3 (acet-geom-m-trans lst3 1 0))
          (acet-ss-visible (ssadd (entlast) (ssadd)) 1)
          (if flag
              (progn
                (command "_.area" "_ob" (entlast))
                (setq pl2 (getvar "perimeter")
                      a2 (getvar "area")
                );setq
              );progn
          );if
          (setq lst (append lst (list lst3)));setq
          (entdel (entlast));then offset was a success so delete the ent after getting it's info
          (if flag
              (setq lst (append lst
                                (another_offset pl1 pl2 a1 a2 c na2 lst2 a lst3 lst4)
                        );append
              );setq
          );if
          );progn then
          (if (not (equal na (entlast))) (entdel (entlast)));if else
      );if
      (entdel na2)

      lst
    )
    (defun intersect_check ( lst lst2 lst3 / x x2 y y2 lst4 flag len len2
                                            a aa b bb c d n j)
      (setq  len (length lst)
            len2 (length lst2)
              x (car (car lst3))
              x2 (car (cadr lst3))
              y (cadr (car lst3))
              y2 (cadr (cadr lst3))
      );setq
      (setq n 0);setq
      (while (and (not flag)
                  (< (+ n 1) len2)
            );and
      (setq   aa (nth n lst2)
              bb (nth (+ n 1) lst2)
              a (bns_truncate_2_view aa bb x y x2 y2)
              b (bns_truncate_2_view bb aa x y x2 y2)
            lst4 (append lst4 (list a))
      );setq
      (if (or (not (equal a aa))
              (not (equal b bb))
          );or
          (setq lst4 (append lst4 (list b)))
      );if
      (setq j 0);setq
      (while (and (not flag)
                  (< (+ j 1) len)
              );and
      (setq    c (nth j lst)
                d (nth (+ j 1) lst)
            flag (inters a b c d)
      );setq

      (setq j (+ j 1));setq
      );while

      (setq n (+ n 1));setq
      );while
      (if (not (equal b (last lst4)))
          (setq lst4 (append lst4 (list b)));setq
      );if
      (if (not flag)
          (setq flag lst4)
          (setq flag nil)
      );if
      flag
    )
    (defun zoom_2_object ( lst / p1 p2 p3 p4 p5 p6 mp dx dy dx2 dy2
                                r1 r2 na e1 x w h dv1 dv2 x
                        )
      (setq  lst (acet-geom-m-trans lst 1 2)
              p1 (acet-geom-m-trans (acet-geom-view-points) 1 2)    ;p1 and p2 are the viewpnts
              p2 (cadr p1)
              p1 (car p1)
              p1 (list (car p1) (cadr p1))
              p2 (list (car p2) (cadr p2))
      );setq
      (if lst
          (progn
            (setq   p5 (acet-geom-list-extents lst)              ;p5 and p6 are the geometry points
                    p6 (cadr p5)
                    p5 (car p5)
                    p5 (list (car p5) (cadr p5))
                    p6 (list (car p6) (cadr p6))
                    mp (acet-geom-midpoint p5 p6)           ;prepare to resize the geometry rectang to
                    dx (- (car p2) (car p1))    ;have the same dy/dx ratio as p1 p2.
                    dy (- (cadr p2) (cadr p1))
                  dx2 (- (car p6) (car p5))
                  dy2 (- (cadr p6) (cadr p5))
            );setq
            (if (equal dx 0.0)  (setq dx 0.000001))  ;just in case div by zero
            (if (equal dx2 0.0) (setq dx2 0.000001))
            (setq   r1 (/ dy dx)
                    r2 (/ dy2 dx2)
            );setq
            (if (< r2 r1)
                (setq dy2 (* r1 dx2));then scale dy2 up
                (progn
                (if (equal r1 0.0)  (setq r1 0.000001))  ;just in case div by zero
                (setq dx2 (* dy2 (/ 1.0 r1)));else scale dx2 up
                );progn
            );if
            (setq p5 (list (- (car mp) (/ dx2 1.98))   ;1.98 is used instead of 2.0 to expand
                          (- (cadr mp) (/ dy2 1.98))  ;the rectangle slightly
                    );list
                  p6 (list (+ (car mp) (/ dx2 1.98))
                          (+ (cadr mp) (/ dy2 1.98))
                    );list
            );setq
          );progn then lst
      );if
      (if (and lst
                (equal 0 (getvar "tilemode"))
                (not (equal 1 (getvar "cvport")))
          );and
          (progn
            (setq  na (ssget "_x"
                              (list '(0 . "VIEWPORT") '(67 . 1) (cons 69 (getvar "cvport")))
                      );ssget
                  na (ssname na 0)
                  e1 (entget na)
                    x (cdr (assoc 10 e1))
                    w (cdr (assoc 40 e1))
                    h (cdr (assoc 41 e1))
                  p3 (list (- (car x) (/ w 2.0))
                            (- (cadr x) (/ h 2.0))
                      );list
                  p4 (list (+ (car x) (/ w 2.0))
                            (+ (cadr x) (/ h 2.0))
                      );list
                  p3 (trans p3 3 2)      ;p3 and p4 are the viewport points
                  p4 (trans p4 3 2)
                  dv1 (acet-geom-delta-vector p1 p3)
                  dv2 (acet-geom-delta-vector p2 p4)
                    x (distance p1 p2)
            );setq
            (if (equal 0 x) (setq x 0.000001));just in case
            (setq   x (/ (distance p5 p6)
                        x
                      )
                  dv1 (acet-geom-vector-scale dv1 x)
                  dv2 (acet-geom-vector-scale dv2 x)
                  p5 (acet-geom-vector-add p5 dv1)
                  p6 (acet-geom-vector-add p6 dv2)
            );setq
          );progn then
      );if
      (setq p1 (list (car p1) (cadr p1) 0.0)
            p2 (list (car p2) (cadr p2) 0.0)
            p5 (list (car p5) (cadr p5) 0.0)
            p6 (list (car p6) (cadr p6) 0.0)
      );setq
      (if lst
          (setq lst (list (trans p5 2 1)
                          (trans p6 2 1)
                    );list
          );setq
          (setq lst nil)
      );if

      lst
    )
    (defun safe-trim-fallback (cut-ent / start newent ok)
      ;; cut-ent - encja tnąca (ename)
      ;; start    - encja ostatnia przed kopiowaniem (entlast przed COPY)
      ;; newent   - encja/copy/ostatnia po COPY/EXPLODE
      ;; ok       - flaga sukcesu pierwszego TRIM

      (setq ok T) ;; zakładamy, że pierwszy TRIM zadziała
      ;; spróbuj normalnego TRIM
      (command "_.trim" cut-ent "")
      ;; jeśli polecenie nadal jest aktywne -> przerwij i użyj fallback
      (if (> (getvar "CMDACTIVE") 0)
        (progn
          (setq ok nil)
          (command "") ;; anuluj bieżące polecenie
        )
      )

      (if (not ok)
        (progn
          (princ "\n[safe-trim] TRIM zawiódł — próbuję fallback: copy + explode + retry")
          ;; zapamiętaj obecną ostatnią encję
          (setq start (entlast))
          ;; zrób kopię (bez przesunięcia)
          (command "_.copy" cut-ent "" "0,0,0" "0,0,0")
          (setq newent (entlast))
          ;; sprawdź czy powstała nowa encja
          (if (and newent (not (equal start newent)))
            (progn
              ;; eksploduj kopię (powstaną segmenty)
              (command "_.explode" newent)
              ;; spróbuj jeszcze raz TRIM używając opcji 'Previous' (p)
              (command "_.trim" "_p" "")
            )
            (princ "\n[safe-trim] Nie udało się stworzyć kopii - fallback przerwany.")
          )
        )
      )

      (princ)
    )

  ;----------------- ZMIANA KOLORU ELEMENTÓW
    (defun c:ZMIANAKOLORU_OLD (/ ss e blk doc)
      (setq acad (vlax-get-acad-object))
      (setq doc (vla-get-activedocument acad))
      (setq mspace (vla-get-modelspace doc))
      (setq reply-podklad (acet-ui-message "Funkcja zmienia kolor wszystkich elementów oraz warstw rysunku na aktualnie wybrany kolor.\r\nCzy chcesz kontynuować?" "Message" 52))
      (if (= reply-podklad 6)
        (progn
          (setq ss (ssget "_A" '((0 . "INSERT"))))
          (if ss
            (repeat (setq i (sslength ss))
              (setq e (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
              (setq blk (vla-item (vla-get-blocks doc) (vla-get-Effectivename e)))
              (vlax-for x blk (vla-put-color x 256))
            )
            (princ)
          )
          (vla-regen doc acAllViewports)
            (setq color-red 256)
            (setq ss (ssget "_X"))
            (if (/= ss nil)
              (progn
                (setq len (sslength ss))
                (setq i 0)
                (while (< i len)
                  (setq ent (ssname ss i))
                  (entmod (append (entget ent) (list (cons 62 color-red))))
                  (setq i (1+ i))
                )
              )
              (princ)
            )
          (changeLayerColor)
        )
      )
      (princ)
    )
    (defun c:ZMIANAKOLORU ()
      (command "_OPENDCL")
      (dcl-Project-Load "c:/NXYZ/geostation")
      (vl-load-all "c:/NXYZ/nxyz.lsp")
      (vl-load-com)
      (setq curColor (getvar "CECOLOR"))
      (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "._COLOR ")
      (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "ZMIANAKOL ")
      (princ)
    )
    (defun LM:RGB->True ( r g b )
      (logior (lsh (fix r) 16) (lsh (fix g) 8) (fix b))
    )
    (defun c:ZMIANAKOL (/ ss e blk doc)
      (setq acad (vlax-get-acad-object))
      (setq doc (vla-get-activedocument acad))
      (setq mspace (vla-get-modelspace doc))
      (setq reply-podklad (acet-ui-message "Ta procedura może zająć kilka minut.\r\nCzy chcesz kontynuować?" "Message" 52))
      (if (= reply-podklad 6)
        (progn
          (setq newColor (getvar "CECOLOR"))
          (setq color-split (my-split-string newColor ":"))
          (cond
            ((= newColor '"BYBLOCK")
             (setq newColor 0)
            )
            ((= newColor '"BYLAYER")
             (setq newColor 256)
            )
            (newColor
              t
            )            
          )
          (if (= (car color-split) "RGB")
            (progn                
              (setq red (atoi (car (my-split-string (cadr color-split) ","))))
              (setq green (atoi (cadr (my-split-string (cadr color-split) ","))))
              (setq blue (atoi (caddr (my-split-string (cadr color-split) ","))))
              (setq acColor (vla-getinterfaceobject
                          (vlax-get-acad-object)
                          (strcat "AutoCAD.AcCmColor."
                                  (substr (getvar 'acadver) 1 2)
                          )
                        )
              )
              (vla-setrgb acColor red green blue)  
              (setq truecolor (LM:RGB->True (atoi (car (my-split-string (cadr color-split) ","))) (atoi (cadr (my-split-string (cadr color-split) ","))) (atoi (caddr (my-split-string (cadr color-split) ",")))))
            )
          )
          (ml2pl)          
          (cond 
            ((= (car color-split) "RGB")
              (StartLoading (strcat "Zmieniam kolor obiektów w blokach..."))             
              (setq blk (tblnext "BLOCK" t))  ; Wyszukaj blok po nazwie
              (while blk
                (vlax-for x (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object))) (cdr (assoc 2 blk)))  ; Iterujemy przez wszystkie obiekty w ModelSpace      
                    (vla-put-truecolor x acColor)                            
                )
                (setq blk (tblnext "BLOCK"))                
              )
              (vla-regen doc acAllViewports)
              (setq ss (ssget "_X"))
              (if (/= ss nil)
                (progn
                  (setq len (sslength ss))
                  (setq i 0)
                  (while (< i len)
                    (setq postep (strcat (rtos (* (/ i (float len)) 100) 2 0) "%"))
                    (ChangeLoading "Zmieniam kolor obiektów... " postep i len)
                    (setq ent (ssname ss i))    
                    (entmod (append (entget ent) (list (cons 420 truecolor))))                               
                    (setq i (1+ i))
                  )
                )
                (princ)
              )
            )
            ((/= (car color-split) "RGB")
              (StartLoading (strcat "Zmieniam kolor obiektów w blokach..."))
              (setq blk (tblnext "BLOCK" t))  ; Wyszukaj blok po nazwie
              (while blk
                (vlax-for x (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object))) (cdr (assoc 2 blk)))  ; Iterujemy przez wszystkie obiekty w ModelSpace      
                  (vla-put-color x newColor)                             
                )
                (setq blk (tblnext "BLOCK"))                
              )
              (vla-regen doc acAllViewports)
              (setq ss (ssget "_X"))
              (if (/= ss nil)
                (progn
                  (setq len (sslength ss))
                  (setq i 0)
                  (while (< i len)
                    (setq postep (strcat (rtos (* (/ i (float len)) 100) 2 0) "%"))
                    (ChangeLoading "Zmieniam kolor obiektów... " postep i len)
                    (setq ent (ssname ss i))    
                    (entmod (append (entget ent) (list (cons 62 (if (numberp newColor) newColor (atoi newColor))))))                          
                    (setq i (1+ i))
                  )
                )
                (princ)
              )
            )
          )
        )
      )
      (CloseLoading)
      (if curColor
        (setvar "CECOLOR" curColor)
        (princ)
      )
      (princ)
    )

  ;----------------- WPASOWANIE RYSUNKU
        (defun c:geostation/Form1/TextButton13#OnClicked (/)
          (setq obj1 (car (entsel "\nWybierz obiekt do wpasowania: ")))
          (setq pt3 (getpoint "\nWybierz pierwszy punkt obiektu do wpasowania: "))
          (setq pt4 (getpoint "\nWybierz drugi punkt obiektu do wpasownaia: "))
          (setq pt1 (getpoint "\nWybierz miejsce odpowiednika pierwszego punktu: "))
          (setq pt2 (getpoint "\nWybierz miejsce odpowiednika drugiego punktu: "))
          (setq obiekt (vlax-ename->vla-object obj1))
          (setq angle-radians (angle pt2 pt1))
          (setq angle-degrees (* angle-radians (/ 180.0 pi)))
          (setq angle-radians2 (angle pt4 pt3))
          (setq angle-degrees2 (* angle-radians2 (/ 180.0 pi)))
          (setq angletorotate (- angle-radians angle-radians2))
          (setq scale-factor (/ (distance pt2 pt1) (distance pt4 pt3)))
          (if obiekt
            (progn
              (vla-move obiekt (vlax-3d-point pt3) (vlax-3d-point pt1))
              (vla-rotate obiekt (vlax-3d-point pt1) angletorotate)
              (vla-scaleentity obiekt (vlax-3d-point pt1) scale-factor)
              (princ "\nObiekt został przesunięty, obrócony oraz przeskalowany.\n")
            )
            (princ "\nBłąd: Nie wybrano obiektów.")
          )
          (princ)
        )

;======================================-------------------------------------------- OBSLUGA PRZYCISKÓW -------------------------------------------------===================
  ;                    ---------------------------- FORM4 - IMPORT PUNKTÓW -----------------------------------------------
  ;                    ---------------------------- FORM1 - EXPORT PUNKTÓW -----------------------------------------------
    (defun c:geostation/Form1/TextButton2#OnClicked (/);-------- ZAMKNIJ PLIK
      (zamknijPlik)
    )

  ;                    ---------------------------- FORM3 - NARZĘDZIA ----------------------------------------------------
    ;                                                                         ---=== Rysowanie ===---
      ;                ---------------------------- KARTA STUDNI ---------------------------
        (defun c:geostation/Form8/GraphicButton11#OnClicked (/)
          (dcl-Form-Close geostation/Form8)
          (setq zawartosc (pobierzLiczbe))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox10 zawartosc)
          (setq zawartosc nil)
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton12#OnClicked (/)
          (dcl-Form-Close geostation/Form8)
          (setq zawartosc (pobierzLiczbe))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox11 zawartosc)
          (setq zawartosc nil)
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton13#OnClicked (/)
          (dcl-Form-Close geostation/Form8)
          (setq zawartosc (pobierzTekst))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox12 zawartosc)
          (setq zawartosc nil)
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton14#OnClicked (/)
          (dcl-Form-Close geostation/Form8)
          (setq zawartosc (pobierzTekst))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox13 zawartosc)
          (setq zawartosc nil)
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton15#OnClicked (/)
          (dcl-Form-Close geostation/Form8)
          (setq zawartosc (pobierzTekst))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox14 zawartosc)
          (setq zawartosc nil)
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton16#OnClicked (/)
          (dcl-Form-Close geostation/Form8)
          (setq zawartosc (pobierzTekst))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox15 zawartosc)
          (setq zawartosc nil)
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton17#OnClicked (/)
          (dcl-Form-Close geostation/Form8)
          (setq zawartosc (pobierzTekst))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox16 zawartosc)
          (setq zawartosc nil)
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton18#OnClicked (/)
          (dcl-Form-Close geostation/Form8)
          (setq zawartosc (pobierzTekst))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox17 zawartosc)
          (setq zawartosc nil)
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton19#OnClicked (/)
          (dcl-Form-Close geostation/Form8)
          (setq zawartosc (pobierzLiczbe))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox20 zawartosc)
          (setq zawartosc nil)
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton20#OnClicked (/)
          (dcl-Form-Close geostation/Form8)
          (setq zawartosc (pobierzLiczbe))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox25 zawartosc)
          (setq zawartosc nil)
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton21#OnClicked (/)
          (dcl-Form-Close geostation/Form8)
          (setq zawartosc (pobierzLiczbe))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox30 zawartosc)
          (setq zawartosc nil)
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton22#OnClicked (/)
          (dcl-Form-Close geostation/Form8)
          (setq zawartosc (pobierzLiczbe))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox35 zawartosc)
          (setq zawartosc nil)
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton23#OnClicked (/)
          (dcl-Form-Close geostation/Form8)
          (setq zawartosc (pobierzLiczbe))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox40 zawartosc)
          (setq zawartosc nil)
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton24#OnClicked (/)
          (dcl-Form-Close geostation/Form8)
          (setq zawartosc (pobierzLiczbe))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox45 zawartosc)
          (setq zawartosc nil)
          (princ)
        )
        (defun c:geostation/Form8/GraphicButton25#OnClicked (/)
          (dcl-Form-Close geostation/Form8)
          (setq zawartosc (pobierzTekst))
          (dcl-Form-Show geostation/Form8)
          (dcl-Control-SetText geostation/Form8/TextBox7 zawartosc)
          (setq zawartosc nil)
          (princ)
        )
      ;                ---------------------------- OBLICZ SPADEK -------------------------- 
        (defun c:geostation/Form1/TextButton7#OnClicked (/)
          (vl-load-com)
          (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F1TB7 ")
        )     
        (defun c:geostation/Form3/TextButton27#OnClicked (/)
          (vl-load-com)
          (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F3TB27 ")
        )
      ;                ---------------------------- METODA ORTOGONALNA --------------------------
        (defun c:geostation/Form1/TextButton8#OnClicked (/)
          (vl-load-com)
          (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F1TB8 ")
        )

    
    ;                                                                         ---=== Modyfikacja ===---
      (defun c:geostation/Form3/TextButton1#OnClicked (/);------------ OBRACANIE TEKSTÓW DO LINII
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F3TB1 ")
      )
      (defun c:geostation/Form3/TextButton29#OnClicked (/);----------- ZMIANA GRUBOSCI C-GEO
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F3TB29 ")
      )
      (defun c:geostation/Form3/TextButton6#OnClicked (/);----------- WYMIAROWANIE ODCHYLEK
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F3TB6 ")
      )

    ;                                                                         ---=== Obliczenia ===---
      (defun c:geostation/Form1/TextButton10#OnClicked (/)
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F1TB10 ")
      )
      (defun c:geostation/Form1/TextButton12#OnClicked (/)
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F1TB12 ")  
      )

    ;                                                                         ---=== Droga ===---
      (defun c:geostation/Form3/TextButton13#OnClicked (/) ;------------- WSTAW OPIS WYSOKOŚCI PUNKTÓW
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F3TB13 ") 
      )
      (defun c:geostation/Form3/TextButton14#OnClicked (/);----------- KILOMETRAŻ DYNAMICZNY
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F3TB14 ") 
      )
      (defun c:geostation/Form3/TextButton15#OnClicked (/);------------ PRZELICZ SPADEK
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F3TB15 ")
      )
      (defun c:geostation/Form3/TextButton16#OnClicked (/ lines count line entData startPoint endPoint);------------ BUTTON ZAMIEN WIERZCHOLKI
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F3TB16 ")
      ) 
      (defun c:geostation/Form3/TextButton17#OnClicked (/);------------ PRZELICZ SPADEK
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F3TB17 ")
      )
      (defun c:geostation/Form3/TextButton18#OnClicked (/);------------- OBLICZANIE WYSOKOSCI DLA PUNKTOW Z 3DPOLYLINE
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F3TB18 ")
      )  
      (defun c:geostation/Form3/TextButton19#OnClicked (/);------------ OBLICZENIA DLA DWOCH TEKSTOW
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F3TB19 ")
      )
      (defun c:geostation/Form3/TextButton20#OnClicked (/ ss1 dzialanie tekst1 wartosc1 wartosc2 wynik);-------------- OBLICZENIA DLA TEKSTU
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F3TB20 ")
      )  
      (defun c:geostation/Form3/TextButton24#OnClicked (/);---------------- WSTAW PUNKTY W WIERZCHOŁKI
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F3TB24 ")
      ) 
      (defun c:geostation/Form3/TextButton25#OnClicked (/);------------------------------- RYSUJ PROFIL NA PODSTAWIE 3DPOLYLINE
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F3TB25 ")
      ) 
      (defun c:geostation/Form3/TextButton26#OnClicked (/);---------------- OBLICZ KILOMETRAŻ DLA PUNKTÓW
        (vl-load-com)
        (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "F3TB26 ")
      )   
    ;                                                                         ---=== DEV ===---
      (defun c:geostation/Form3/TextButton28#OnClicked (/)
        (sendlog)
      )
;======================================-------------------------------------------- OBSLUGA POMOCY -----------------------------------------------------===================
  ;                    ---------------------------- FORM4 - IMPORT PUNKTÓW -----------------------------------------------
  ;                    ---------------------------- FORM1 - EXPORT PUNKTÓW -----------------------------------------------
  ;                    ---------------------------- FORM3 - NARZĘDZIA ----------------------------------------------------
    ;                                                                         ---=== Rysowanie ===---
      ; ---=== WSTAW SPADEK ===---
        (defun c:geostation/Form3/GraphicButton2#OnClicked (/)
          (if (dcl-Form-IsActive geostation/PomocWSTAWSPADEK)
            (princ)
            (progn
              (setq screensize (dcl-GetScreenSize))
              (dcl-Form-Show geostation/PomocWSTAWSPADEK)
              (dcl-Control-SetPos geostation/PomocWSTAWSPADEK (- (/ (car screensize) 2) 359) (- (/ (cadr screensize) 2) 430) 718 860)
            )
          )
        )
        (defun c:geostation/PomocWSTAWSPADEK/TextButton1#OnClicked (/)
          (dcl-Form-Close geostation/PomocWSTAWSPADEK)
        )
      ; ---=== METODA ORTOGONALNA ===---
        (defun c:geostation/Form3/GraphicButton3#OnClicked (/)
          (if (dcl-Form-IsActive geostation/PomocMETODAORTO)
            (princ)
            (progn
              (setq screensize (dcl-GetScreenSize))
              (dcl-Form-Show geostation/PomocMETODAORTO)
              (dcl-Control-SetPos geostation/PomocMETODAORTO (- (/ (car screensize) 2) 359) (- (/ (cadr screensize) 2) 430) 718 860)
            )
          )
        )
        (defun c:geostation/PomocMETODAORTO/TextButton1#OnClicked (/)
          (dcl-Form-Close geostation/PomocMETODAORTO)
        )
    ;                                                                         ---=== Modyfikacja ===---
    ;                                                                         ---=== Obliczenia ===---
    ;                                                                         ---=== Droga ===---
    ;                                                                         ---=== DEV ===---


;======================================-------------------------------------------- LOGI ---------------------------------------------------------------===================
  ;                    ---------------------------- INICJACJA PROGRAMU ----------------------------------------------------
    (defun sendlog ( / url logText http)
      (vl-load-com)
      (setq url "http://pawel.rozacki.pl/scripts/log.php") ; Twój skrypt na serwerze
      (setq consoleLogPath (getvar "LOGFILENAME"))
      (setq dwgPath (strcat (getvar "DWGPREFIX") (getvar "DWGNAME")))
      (setq logText (strcat 
                      "Log z AutoCAD - " 
                      (menucmd "M=$(edtime,0, DD-M-YYYY hh:mm:ss)")
                      "\nWersja AutoCad: " (get-version) " (" (getvar "DCTMAIN") ")" " - " (getvar "ACADVER")
                      "\nNXYZ ver.: " (vers)
                      "\nOS: " (getvar "platform")
                      "\nUzytkownik: " (getvar "LOGINNAME")
                      "\nSciezka DWG: " dwgPath                
                      "\nAdres IP(global): " (get-ip-from-php)
                      "\nAdres IP(local@MAC): " (get-ip)
                      "\nLOGFILEMODE: " (rtos (getvar "LOGFILEMODE") 2 0)
                      "\nSciezka import: " (get-import-path)
                      "\nLink do pliku import (" (if (= (get-import-path) "none") 
                                                   "0" 
                                                   (if (findfile (get-import-path)) 
                                                     (rtos (/ (get-file-size (get-import-path)) 1000) 2 0) 
                                                     "0"
                                                   )
                                                 ) "kB): " 
                                                (if (= (get-import-path) "none") 
                                                  "none" 
                                                  (if (findfile (get-import-path)) 
                                                    (strcat "http://pawel.rozacki.pl/api/files/" (vl-filename-base (get-import-path)) ".txt")
                                                    "plik nie istnieje"
                                                  )
                                                )
                      "\nSciezka export: " (get-export-path)
                      "\nLink do pliku export (" (if (= (get-export-path) "none") 
                                                   "0" 
                                                   (if (findfile (get-export-path)) 
                                                     (rtos (/ (get-file-size (get-export-path)) 1000) 2 0) 
                                                     "0"
                                                   )
                                                  ) "kB): " 
                                                  (if (= (get-export-path) "none") 
                                                    "none" 
                                                    (if (findfile (get-export-path)) 
                                                      (strcat "http://pawel.rozacki.pl/api/files/" (vl-filename-base (get-export-path)) ".txt")
                                                      "plik nie istnieje"
                                                    )
                                                  )
                      "\nconsoleLOG (" (rtos (/ (get-file-size consoleLogPath) 1000) 2 0)"kB): " (strcat "http://pawel.rozacki.pl/api/consoleLOGS/" (vl-filename-base consoleLogPath) ".txt")                  
                    ))
      (setq http (vlax-create-object "MSXML2.XMLHTTP.6.0"))
      (vlax-invoke-method http 'open "POST" url :vlax-false)
      (vlax-invoke-method http 'setRequestHeader "Authorization" "Bearer tajny_token")
      (vlax-invoke-method http 'setRequestHeader "Content-Type" "text/plain")
      (vlax-invoke-method http 'send logText)
      (if (findfile consoleLogPath) ;upload log konsoli
        (send-file-upload "http://pawel.rozacki.pl/scripts/upload.php" consoleLogPath)
        (princ)
      )
      (if (findfile (get-import-path))
        (send-file-upload "http://pawel.rozacki.pl/scripts/upload_files.php" (get-import-path))
        (princ)
      )
      (if (findfile (get-export-path))
        (send-file-upload "http://pawel.rozacki.pl/scripts/upload_files.php" (get-export-path))
        (princ)
      )
      (setq res (vlax-get-property http 'responseText))
      (acet-ui-message res "" 64)
      (prompt (strcat "\nSerwer odpowiedział: " (vlax-get-property http 'responseText)))
      (princ)
    )
    (defun response (form vers / url logText http result )
      (vl-load-com)
      (setq url "http://pawel.rozacki.pl/scripts/response.php")
      (setq dwgPath (strcat (getvar "DWGPREFIX") (getvar "DWGNAME")))
      (setq logText (strcat 
                      "Response - " form
                      (menucmd "M=$(edtime,0, DD-M-YYYY hh:mm:ss)")
                      "\nWersja AutoCad: " (get-version) " (" (getvar "DCTMAIN") ")" " - " (getvar "ACADVER")
                      "\nNXYZ ver.: " vers
                      "\nOS: " (getvar "platform")
                      "\nUzytkownik: " (getvar "LOGINNAME")
                      "\nSciezka DWG: " dwgPath                                         
                      "\nAdres IP(global): " (get-ip-from-php)
                      "\nAdres IP(local@MAC): " (get-ip)            
                    ))

      ;; Obsługa błędów przez vl-catch-all-apply
      (setq result
        (vl-catch-all-apply
          (function
            (lambda ()
              (setq http (vlax-create-object "MSXML2.XMLHTTP.6.0"))
              (vlax-invoke-method http 'open "POST" url :vlax-false)
              (vlax-invoke-method http 'setRequestHeader "Authorization" "Bearer tajny_token")
              (vlax-invoke-method http 'setRequestHeader "Content-Type" "text/plain")
              (vlax-invoke-method http 'send logText)
              ;; Opcjonalnie: (prompt (strcat "\nSerwer odpowiedział: " (vlax-get-property http 'responseText)))
            )
          )
        )
      )
      ;; Jeśli był błąd – nie pokazuj nic
      (if (vl-catch-all-error-p result)
        (progn
          ;; Opcjonalnie loguj lokalnie:
          ;; (prompt "\nBłąd połączenia z serwerem.")
        )
      )
      (princ)
    )
  ;                    ---------------------------- DZIAŁANIE PROGRAMU ----------------------------------------------------
    (defun read-file-to-string (filename / file content line)
      (setq content "")
      (if (setq file (open filename "r"))
        (progn
          (while (setq line (read-line file))
            (setq content (strcat content line "\n"))
          )
          (close file)
        )
        (princ)
      )
      content
    )
    (defun build-multipart-data (boundary filename filecontent / crlf body)
      (setq crlf "\r\n")
      (setq body
        (strcat
          "--" boundary crlf
          "Content-Disposition: form-data; name=\"fileupload\"; filename=\"" filename "\"" crlf
          "Content-Type: text/plain" crlf crlf
          filecontent crlf
          "--" boundary "--" crlf
        )
      )
      body
    )
    (defun send-file-upload (url filepath / boundary filename filecontent http data len)
      (setq boundary "----WebKitFormBoundary7MA4YWxkTrZu0gW") ; dowolny unikalny string
      (setq filename (vl-filename-base filepath))
      (setq filecontent (read-file-to-string filepath))

      (if (= filecontent "")
        (princ "\nPlik jest pusty lub nie moze byc odczytany.")
        (progn
          (setq data (build-multipart-data boundary (vl-filename-base filepath) filecontent))
          (setq len (strlen data))

          (setq http (vlax-create-object "WinHttp.WinHttpRequest.5.1"))
          (vlax-invoke-method http 'Open "POST" url :vlax-false)

          (vlax-invoke-method http 'SetRequestHeader "Content-Type" (strcat "multipart/form-data; boundary=" boundary))
          (vlax-invoke-method http 'SetRequestHeader "Content-Length" (itoa len))

          (vlax-invoke-method http 'Send data)

          ; (princ (strcat "\nOdpowiedz serwera: " (vlax-get-property http 'ResponseText)))
        )
      )
      (princ)
    )
    (defun get-file-size (filepath)
      (vl-load-com)
      (if (and filepath (findfile filepath))
        (progn
          (setq fso (vlax-create-object "Scripting.FileSystemObject"))
          (setq file (vlax-invoke-method fso 'GetFile filepath))
          (setq size (vlax-get file 'Size))
          (vlax-release-object file)
          (vlax-release-object fso)
          size
        )
        nil
      )
    )
    (defun get-ip-from-php ()
      (vl-load-com)
      (setq ip nil)
      (setq http (vl-catch-all-apply 'vlax-create-object '("MSXML2.ServerXMLHTTP")))
      (if (not (vl-catch-all-error-p http))
        (progn
          (vl-catch-all-apply
            '(lambda ()
              (vlax-invoke-method http 'open "GET" "http://pawel.rozacki.pl/scripts/IP.php" :vlax-false)
              (vlax-invoke-method http 'send)
              (setq ip (vlax-get-property http 'responseText))
            )
          )
          (vlax-release-object http)
        )
      )
      (if ip
        ip
        "none"
      )
    )
    (defun get-version (/ i r)
      ;; RJP » 2019-06-11
      (setq r (strcat "HKEY_LOCAL_MACHINE\\" (vlax-machine-product-key)))
      (and (setq i (vl-string-search ":" r)) (setq r (substr r 1 i)))
      (car (vl-registry-descendents (setq r (strcat r "\\ProductInfo\\"))))
    )
    (defun get-IP (/ IPaddress Macaddress)
      (vl-load-com)
      (setq ml '()
            WMI (vlax-create-object "WbemScripting.SWbemLocator")
            meth1 (VLAX-INVOKE WMI 'ConnectServer nil nil nil nil nil nil nil nil)
            meth2 (vlax-invoke meth1 'ExecQuery (strcat "Select IPAddress from Win32_NetworkAdapterConfiguration"))
            S (vlax-for item meth2 (setq ml (append (vlax-get item 'IPAddress) ml)))
      )
      (vlax-release-object meth1)
      (vlax-release-object meth2)
      (vlax-release-object wmi)
      (if S
        (progn
          (Setq IPaddress (nth 0 S))
          (IF (= IPaddress NIL) (SETQ IPaddress "Unknown"))
          (Setq Macaddress (nth 1 S))
          (IF (= MACADDRESS NIL) (SETQ MACADDRESS "Unknown")) 
          (princ)  
          (strcat IPAddress "@" Macaddress)
        )
        "none"
      )
    )
    (defun get-export-path (/)
      (if SC
        SC
        "none"
      )
    )
    (defun get-import-path (/)
      (if SCIEZKAIMPORT
        SCIEZKAIMPORT
        "none"
      )
    )

;======================================-------------------------------------------- UPDATE CHECK -------------------------------------------------------===================
  (defun c:NXYZAutoUpdate ()
    (setq pref (getstring "\nCzy chcesz włączyć automatyczne aktualizacje? (Tak/Nie): "))
    (if (or (equal pref "Tak") (equal pref "tak") (equal pref "T") (equal pref "t"))
      (progn
        (setenv "AutoLispAutoUpdate" "1")
        (princ "\nAutomatyczne aktualizacje zostały włączone."))
      (progn
        (setenv "AutoLispAutoUpdate" "0")
        (princ "\nAutomatyczne aktualizacje zostały wyłączone.")))
    (princ)
  )
  (defun vers () ;--------- WERSJA
    "ver.7.4"
  )
  (defun CheckUpdate (a /)
    (setq wersja (vers))
    (cond
      ((not (getenv "UpdateReady"))
      (princ "\nBrak zmiennej UpdateReady")
      )
      ((= (getenv "UpdateReady") "0")
      (LoadVersionInfo a wersja)     
      )
      ((= (getenv "UpdateReady") "1")
      (LoadUpdateInfo a wersja)     
      )
      ((= (getenv "UpdateReady") "-1")
      (LoadNoConnection a wersja)     
      )
    )
    (response a wersja)
    (princ)
  )
  (defun LoadNoConnection (a wersja /)
    (cond
      ((= a "Form1")
        (dcl-Control-SetCaption geostation/Form1/Label15 (strcat wersja " (brak hosta!)"))
        (dcl-Control-SetEnabled geostation/Form1/Label15 NIL)
      )
      ((= a "Form3")
        (dcl-Control-SetCaption geostation/Form3/Label15 (strcat wersja " (brak hosta!)"))
        (dcl-Control-SetEnabled geostation/Form3/Label15 NIL)
      )
      ((= a "Form4")
        (dcl-Control-SetCaption geostation/Form4/Label15 (strcat wersja " (brak hosta!)"))
        (dcl-Control-SetEnabled geostation/Form4/Label15 NIL)
      )
    )
    (princ)
  )
  (defun LoadVersionInfo (a wersja /)
    (cond
      ((= a "Form1")
        (dcl-Control-SetCaption geostation/Form1/Label15 wersja)
        (dcl-Control-SetEnabled geostation/Form1/Label15 NIL)
      )
      ((= a "Form3")
        (dcl-Control-SetCaption geostation/Form3/Label15 wersja)
        (dcl-Control-SetEnabled geostation/Form3/Label15 NIL)
      )
      ((= a "Form4")
        (dcl-Control-SetCaption geostation/Form4/Label15 wersja)
        (dcl-Control-SetEnabled geostation/Form4/Label15 NIL)
      )
    )
    (princ)
  )
  (defun LoadUpdateInfo (a wersja /)
    (cond
      ((= a "Form1")
        (dcl-Control-SetCaption geostation/Form1/Label15 "Dostępna nowa wersja!")
        (dcl-Control-SetEnabled geostation/Form1/Label15 T)
      )
      ((= a "Form3")
        (dcl-Control-SetCaption geostation/Form3/Label15 "Dostępna nowa wersja!")
        (dcl-Control-SetEnabled geostation/Form3/Label15 T)
      )
      ((= a "Form4")
        (dcl-Control-SetCaption geostation/Form4/Label15 "Dostępna nowa wersja!")
        (dcl-Control-SetEnabled geostation/Form4/Label15 T)
      )
    )
    (princ)
  )
  (defun c:geostation/Form1/Label15#OnClicked (/)
    (setq reply-update (acet-ui-message "Dostępna jest nowa wersja narzędzi geodezyjnych.\r\nAby zainstalować aktualizacje wymagane jest zamknięcie programu AutoCad.\r\n\Czy chcesz to zrobić teraz?" "Narzędzia geodezyjne" 68))
    (if (= reply-update 6)
      (startapp  "C:/update.bat")
      (princ)
    )
  )
  (defun c:geostation/Form3/Label15#OnClicked (/)
    (setq reply-update (acet-ui-message "Dostępna jest nowa wersja narzędzi geodezyjnych.\r\nAby zainstalować aktualizacje wymagane jest zamknięcie programu AutoCad.\r\n\Czy chcesz to zrobić teraz?" "Narzędzia geodezyjne" 68))
    (if (= reply-update 6)
      (startapp  "C:/update.bat")
      (princ)
    )
  )
  (defun c:geostation/Form4/Label15#OnClicked (/)
    (setq reply-update (acet-ui-message "Dostępna jest nowa wersja narzędzi geodezyjnych.\r\nAby zainstalować aktualizacje wymagane jest zamknięcie programu AutoCad.\r\n\Czy chcesz to zrobić teraz?" "Narzędzia geodezyjne" 68))
    (if (= reply-update 6)
      (startapp  "C:/update.bat")
      (princ)
    )
  )
  (defun C:update ()
    (setq reply-update (acet-ui-message "Dostępna jest nowa wersja narzędzi geodezyjnych.\r\nAby zainstalować aktualizacje wymagane jest zamknięcie programu AutoCad.\r\n\Czy chcesz to zrobić teraz?" "Narzędzia geodezyjne" 68))
    (if (= reply-update 6)
      (startapp  "C:/update.bat")
      (princ)
    )
  )
  (defun check-version (/ url http status response)
    (vl-load-com)
    (setq url "http://pawel.rozacki.pl/version.php")
    (setq http (vl-catch-all-apply 'vlax-create-object '("WinHttp.WinHttpRequest.5.1")))    
    (if (vl-catch-all-error-p http)
      (progn
        (princ "\nBłąd: Nie udało się utworzyć obiektu WinHttpRequest.")
        nil
      )
      (progn
        ;; Otwarcie połączenia
        (if (vl-catch-all-error-p
              (vl-catch-all-apply 'vlax-invoke-method (list http 'Open "GET" url :vlax-false)))
          (progn
            (princ "\nBłąd: Nie udało się otworzyć połączenia.")
            nil
          )
          ;; Wysłanie żądania
          (if (vl-catch-all-error-p
                (vl-catch-all-apply 'vlax-invoke-method (list http 'Send)))
            (progn
              (princ "\nBłąd: Nie udało się wysłać żądania.")
              nil
            )
            (progn
              ;; Sprawdzenie statusu odpowiedzi
              (setq status (vl-catch-all-apply 'vlax-get-property (list http 'Status)))
              (if (vl-catch-all-error-p status)
                (progn
                  (princ "\nBłąd: Nie udało się odczytać statusu.(" status ")")
                  nil
                )
                (progn
                  (if (= status 200)
                    (setq response (vl-catch-all-apply 'vlax-get-property (list http 'ResponseText)))
                    (progn
                      (princ "\nBłąd: Otrzymano niepoprawny status.(")
                      (princ status)
                      (princ ")")
                      nil
                    )
                  )
                )
              )
            )
          )
        )
      )
    )
  )
  (defun NXYZUpdate (/) ;---------- WERSJA
    (setq autoUpdate (getenv "AutoLispAutoUpdate"))
    (setq versionUpdate nil)
    (if (equal autoUpdate "1")
      (progn
        (setq CurrentVersion "7.4") ; 'STOP lub '1.1
        (vl-load-com)
        (setq versionUpdate (check-version))
        (cond
          ((= versionUpdate "STOP")
            (setenv "UpdateReady" "0")
          )
          ((not versionUpdate)
            (setenv "UpdateReady" "-1")
          )
          ((contains-letters versionUpdate)
            (setenv "UpdateReady" "-1")
          )
          ((= CurrentVersion versionUpdate)
             (setenv "UpdateReady" "0")
          )
          ((/= CurrentVersion versionUpdate)
             (setenv "UpdateReady" "1")
          )
          (t
             (setenv "UpdateReady" "0")
          )
        )
      )
      (princ)
    )  
    (princ)  
  )
  (NXYZUpdate)

;======================================-------------------------------------------- TESTY --------------------------------------------------------------===================