Numaralandırma

Tanım

Bu komut ile kullanıcının ardışık numara verme işlerini hızlandırmak amaçlanmıştır. Komut kullanıcıdan numaranın ön tarafına koyulacak ön eki, numaranın kaçtan başlayacağını, numaranın dışına daire mi yoksa çokgen mi çizileceğini, çokgen ise köşe sayısını sorar. Sonrasında numara verilecek noktayı ve numara yazılacak noktayı ister. Nokta girme işlemleri kullanıcı komuttan çıkana dek devam eder.

Program

(defun c:numara ()
  (setq om (getvar "osmode"))
  (setvar "cmdecho" 0)
  (setq T1 "\n yazi yuksekligi <"
        T2 "> ? "
        T3 (getvar "textsize")
  )
  (terpri)
  (setq TH (getreal (strcat T1 (rtos T3 2 2) T2)))
  (if (= TH nil)
    (setq TH t3)
  )
  (setq h1 (getstring "\n açiklama olarak bas ek ? "))
  (setq n (getint "\n etiket numarasi kaçtan baslasin ? ")) ; 1
  (initget 1 "d k") ; 2
  (setq z (getkword "\n daireli mi koseli mi olsun ? ")) ; 3
  (if
    (= z "d")
      (progn
        (while
          (setq p1 (getpoint "\n ilk noktayi giriniz"))
          (setvar "osmode" 0)
          (setq p2 (getpoint p1 "\n ikinci noktayi giriniz"))
          (command "line" p1 p2 "") ; 4
          (command "circle" p1 (* 0.5 th)) ; 5
          (command "circle" p2 (* 1.5 th))
          (command "trim" "l" "" p2 "")
          (setq nn (strcat h1 (itoa n)))
          (command "text" "j" "mc" p2 th "0" nn "")
          (setq n (1+ n)) ; 6
          (setvar "osmode" om)
        )
      )
  )
  (if ; 7
    (= z "k")
      (progn
       (setq ko (getint "\n kac koseli olsun ")) ; 8
        (while ; 9
         (setq p1 (getpoint "\n ilk noktayi giriniz"))
          (setvar "osmode" 0)
          (setq p2 (getpoint p1 "\n ikinci noktayi giriniz"))
          (command "line" p1 p2 "")
          (command "circle" p1 (* 0.5 th))
          (command "polygon" ko p2 "c" (* 1.5 th))
          (command "trim" "l" "" p2 "")
          (setq nn (strcat h1 (itoa n)))
          (command "text" "j" "mc" p2 th "0" nn "")
          (setq n (1+ n))
          (setvar "osmode" om)
        )
      )
  )
)


Açıklamalar

1 Bu satırda numaralandırma işleminin kaçtan başlayacağı sorulmaktadır.
2 initget fonksiyonu kullanıcıya getkword fonksiyonu ile sorulacak seçenekli soruların cevap seçeneklerini belirlemek için kullanılır. Bu satırsa “d” ve “k” harfleri cevap seçeneği olarak belirlenmiştir.
3 Bu satırda initget fonksiyonu ile cevap seçenekleri belirlenen soru getkword fonksiyonu ile sorulmaktadır. Sorulan sorunun cevabı sadece initget ile belirlenen seçeneklerden biri olmalıdır. Kullanıcının verdiği cevap z değişkenine atanmıştır.
4 Bu grupta if fonksiyonu ile z değişkeninin “d” değerine eşitliği sınanmaktadır. Eşitlik doğru ise progn fonksiyonu ile gruplandırılan işlemler yapılacaktır.
5 Bu grupta p1 değişkenine bir değer girildiği sürece while fonksiyonu parantezi içerisinde olan işlemler yapılacaktır.
6 Bu satırda daha önceden kullanıcıya sorulan n değişkenine kendi değerinin bir fazlası atanır.
7 Bu grupta z değişkeninin “k” değerine eşit ise progn fonksiyonu ile gruplandırılan işlemler yapılacaktır.
8 Burada ko değişkenine çizilecek çokgenin köşe sayısı atanmaktadır
9 while fonksiyonu bu gruptaki işlemler p1 değişkeni tanımlı olduğu sürece tekrarlanacaktır.


Örnek Lisp Dosyasını İndirin

010-numara.lsp