17.02.2021 13:13    

akcan
AutoCAD'in bazı komutlarında önceki verilen değeri öneri olarak sunuyor.
Enter ile önceki değeri kabul edebiliyoruz.
Örneğin CIRCLE komutu ile 2. bir daire çizeceğimizde önceki yarıçap değerini öneriyor.
AutoLisp'te bu işlem nasıl yapılabilir?

Benim ilk aklıma gelen AutoCAD'in USERxx sistem değişkenini kullanmak geldi ama başka bir yolu var mı?
Çünkü USERxx'i kullanmanın sakıncası olabilir. Kullanıcı ya da başka bir program da aynı sistem değişkenini kullanıp değiştirmiş olabilir.

Benim kullandığım kodlar:
Kod:

(defun c:ALTIGEN()
  (setq usr (getvar "USERR1"))
(setq cap (getreal (strcat "Altıgen çapı :<" (rtos usr) ">")))
(if (= cap nil)
  (setq cap usr)
  (setvar "USERR1" cap)
)
  (command "_.polygon" 6 pause "I" cap)
)

17.02.2021 18:39    

Travaci
Kod:

(defun c:test (/ cap)
  (if (not usr) (setq usr 3))
  (if (not (setq cap (getreal (strcat "\nTest <" (rtos usr 2 0) ">: "))))
    (setq cap usr)
    (setq usr cap)
  )
  (princ (rtos cap 2 0))
  (princ)
)

18.02.2021 07:10    

akcan
teşekkürler @Travaci
basit bir özelliği gözden kaçırıp başka yola sapmışım.

CIRCLE komutuna dikkat ettim de ilk çalıştırılışında öneri sunmuyor.
ben de aynı özellik olsun istedim.
kodları aşağıdaki şekilde güncelledim.
Kod:

(defun c:6GEN(/ cap oneri)
  (if (not oncekiCap) ; komut ilk defa çalıştırılıyorsa
  (setq oneri "") ;öneri yok
  (setq oneri (strcat "<" (rtos oncekiCap) ">")) ;önceki değeri öner
)

    ; Öneri Enter ya da Boşluk tuşu ile geçildiyse öneriyi kabul et
(if (not(setq cap (getreal (strcat "Altıgen çapı :" oneri ))))
(setq cap oncekiCap)
)
  (command "_.polygon" 6 (getpoint) "I" cap)
  (setq oncekiCap cap);kullanılan çap değerini belekte tut
)

18.02.2021 08:24    

ehya
Kodlar havada uçuşuyor. Bende bir tane ekleyeyim :)

Kod:

(defun c:6gen ()
  (if (= cap nil)(setq cap 10))
  (setq cp (getreal (strcat "\nAltıgen Çapı :< " (rtos cap 2 2) " >:")))
  (if (= cp nil)(setq cp cap))
  (setq cap cp)
  (if (setq pt (getpoint "\nYerleşim yeri:"))
    (command-s ".polygon" 6 pt "i" cap))
  (princ))

18.02.2021 13:22    

ProhibiT
Biraz uzun olacak ama, oldu olacak kırıldı nacak... bir kod da ben eklemeden edemedim. :)
Kod:

(defun c:Hexagon (/)
  (command "_.polygon" 6 (getpoint) "i"
           (if (setq cap (getreal (strcat "Altıgen Çapı <"
                 (if ocap (rtos ocap 2 2) "") ">: ")))
             (setq ocap cap) (if ocap  (setq cap ocap)(Exit))))(princ))

ocap yoksa (yani nil ise) çap girişi enter ile geçilirse (yani cap ta nil olursa),
AutoCAD in varsayılan komutuna dönerek ekrandan grafik olarak veya klavyeden sayısal olarak giriş yapılabilir. Bu şekilde dinamik giriş yapılan çap değeri hatırlanmaz.

ProhibiT (18.02.2021 14:17 GMT)

19.02.2021 06:26    

akcan
merkez noktasını tıkladıktan sonra 2. nokta tıklanamıyor
ya ENTER'e basıp eski değeri kabul etmek
ya da ESC ile komuta dönmek
ya da klavyeden değer girmek gerekiyor.

> 1 <
Copyright © 2004-2022 SQL: 1.392 saniye - Sorgu: 59 - Ortalama: 0.02359 saniye