28.10.2008 16:56
fatih107
|
Merhaba arkadaşlar birşey sormuştum ama sanırım öteki arkadaşların soruları arasında kaynadı galiba,tekrar sorayım dedim. Acaba lisp de otomatik değişken üretebilirmiyiz. Şöyle açıklayayım mesela;
(setq x (getreal "/n Kaçıncı su hattı?") burdan x atayacağımız değere göre
shx (entsel "/n Suhattını seç")) Burda sh1 sh2 sh3 gibi değişken yapılabilirmi?
veya belli bir döngüye göre sh1 sh2 sh3 gibi değişkenleri otomatik üretebilirmiyiz?Şimdiden çok teşekkürler
|
28.10.2008 22:21
ehya
|
değişken adını bu şekilde elde edemessin. Daha doğrusu değişken adlarını sıralı bir şekilde birleştirme yapamassın.
Ne yapmak istediğini söylesen, daha çok yardımcı oluruz.
|
05.11.2008 13:39
fox
|
arkadaşlar nerde hata yapıyorum ne yapmam gerekiyor?
yerinizde ben olsam, bu soruya cevaben ne yapmaya çalışıyorsun diye sorardım:)
köşelere fillet uygulamaya çalışıyorum kodda sadece tek köşeyi verdim birini halletsem diğer köşelerde hallolacak inşallah.
Kod:
(defun c:omega ()
(setq oldCmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq osn (getvar "osmode"))
(setq pt0 (getpoint "\nOmeganın taban orta noktasını seçin:"))
(initget 7)
(setq genislik (getreal "\nGenişlik:"))
(initget 7)
(setq yukseklik (getreal "\nYükseklik:"))
(initget 7)
(setq tirnak (getreal "\nTırnak:"))
(initget 7)
(setq kalinlik (getreal "\nSac Kalınlığı:"))
(setq g/2 (/ genislik 2))
(setq tg (- (+ genislik (* tirnak 2)) (* kalinlik 2)))
(setq tg/2 (/ tg 2))
(setq disr (* kalinlik 2))
(setq p0 (list (car pt0) (cadr pt0)))
(setq p1 (list (- (car p0) tg/2) (cadr p0)))
(setq p2 (list (+ (car p1) tirnak) (cadr p0)))
(setq p3 (list (car p2) (+ (cadr p0) (- yukseklik kalinlik))))
(setq p4 (list (+ (car p0) (- g/2 kalinlik)) (cadr p3)))
(setq p5 (list (car p4) (cadr p0)))
(setq p6 (list (+ (car p0) tg/2) (cadr p0)))
(setq p7 (list (car p6) (+ (cadr p0) kalinlik)))
(setq p8 (list (- (car p7) (- tirnak kalinlik)) (cadr p7)))
(setq p9 (list (car p8) (+ (cadr p0) yukseklik)))
(setq p10 (list (- (car p0) g/2) (cadr p9)))
(setq p11 (list (- (car p2) kalinlik) (cadr p8)))
(setq p12 (list (car p1) (cadr p11)))
(setq ik1 (list (- (car p11) 3) (cadr p11)))
(setq ik2 (list (car p11) (+ (cadr p11) 3)))
(setvar "osmode" 0)
(command "._pline" p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 "_c")
(command "._fillet" "r" kalinlik "fillet" (entsel (ik1) (ik2)))
(setvar "osmode" osn)
(setvar "cmdecho" oldCmdecho)
(princ))
|
14.11.2008 08:43
ehya
|
Bu lisp olmaz... Yolun başındasın.
yeniden yazmalısın? :)
|
14.11.2008 08:49
fox
|
artık yolun sonu göründü:)
tabi aşağıdaki sorunuda halledersek.
Kod:
(initget 7)
(setq kalinlik (getreal "\nSac Kalınlığı:"))
(initget 7)
(setq genislik (getreal "\nGenişlik:"))
(if (> genislik (* kalinlik 4))
kodu şöyle anlatayım genişlik sac kalınlığının 4 katından küçük olamaz.eğer küçükse genişliği tekrar sorsun değilse devam etsin.
|
14.11.2008 09:08
ehya
|
Kod:
(setq n nil)
(setq kalinlik (getreal "\nSac Kalınlığı:"))
(while (= n nil)
(setq genislik (getreal "\nGenişlik:"))
(if (> (* kalinlik 4.0) genislik)
(progn
(setq n nil)
(alert "\nGenislik kalınlıktan en az 4 kat büyük olmalı...")
)
(progn
(setq n t)
....
....
|
14.11.2008 09:13
fox
|
initget fonksiyonunu yine kullanıyoruz dimi.
|
14.11.2008 09:19
ehya
|
kullan tabi.
|
14.11.2008 09:49
fox
|
ahanda işin sonunda şiştik.
bunu yüksekliğide uygulamaya çalışıyorum kodlar karmakarışık bir hal aldı.
ikinci sefer (setq n nil) dediğimizde meydana gelen nedir?çorba oldum iyice.
yüksekliğede uyguladım, hata verdiğinde yüksekliğe değilde genişliğe dönüyor tekrar.
tamam gerek kalmadı çözdüm....
böylelikle lispim tamamlandı yardım eden herkese teşekkürler.
fox (14.11.2008 10:19 GMT)
|
14.11.2008 11:21
ehya
|
yüzmeyi yeni öğreniyorsun. ama denemeyi okyanusta yapıyorsun. Bu kadar karmaşık ve kapsamlı kod yazmak için deneyimin olması lazım. Zaman içinde geliştirirsin kendini.Öncelikle kodların anlamlarını çöz, daha sonra zamanla yapacakların gelişir.
Benden bir tavsiyedir bu...
|
17.11.2008 07:48
fox
|
eyvallah ehya tavsiyelerin için sağol. ne demiş atalarımız boğulacaksan büyük denizde boğulacaksın:)
şimdi ise şöyle bir sorum olacak.
if içersinde if fonksiyonu kullanabilirmiyiz ve bunun bir sınırı var mı? tek seferde şu kadar if kullanabilirsiniz diye.excelde 6 dan fazla kullanılmadığını duymuştum lisptede varmı böyle bişey.
|
17.11.2008 08:11
ehya
|
bildiğim öyle bi sınır yok.
|
17.11.2008 08:24
fox
|
iç içe if kullanılabiliyorsa yapılamayacak şey yoktur.
|
17.11.2008 08:41
ehya
|
:) diyosun...
autolisp gelişmiş bir dil değildir. Hevesin kırılabilir..
|
17.11.2008 08:55
fox
|
yapma yav
ahanda kırıldı bile:)
oysaki ne hayallerim vardı.
|
17.11.2008 09:44
miyatu
|
emin degilim ama ic ice if kullanmada bir sinir oldugu hakkinda bir yazi okudum galibayanlis hatirlamiyorsam 7 adet kullanilabiliyordu...
|
17.11.2008 10:01
fox
|
bunada şükür tek olsa napacaktık.
|
17.11.2008 15:30
Snopy
|
miyatu excelde 7 if kullanılabilir 8 incisini başka bir hücreye yönlendirerek kandırabilrisin sistemi ama bunada gerek yok diğer fonksiyonlarla bunu yapmana gerek kalmadan çözüm üretebiliyorsun autolispte ise zaten buna hiç gerek yok cond'un varlığı bunun içindir.
|
18.11.2008 09:34
miyatu
|
Alıntı Snopy :
miyatu excelde 7 if kullanılabilir 8 incisini başka bir hücreye yönlendirerek kandırabilrisin sistemi ama bunada gerek yok diğer fonksiyonlarla bunu yapmana gerek kalmadan çözüm üretebiliyorsun autolispte ise zaten buna hiç gerek yok cond'un varlığı bunun içindir.
ben excelden bahsetmiyordum lispten bahsediyordum... lispte ben genelde if yerine cond fonksiyonunu kullanmaya calisiyorum :)
|
fox
|
arkadaşlar kavga etmeyin excel örneğini ben verdim:)
benim başka bir sorum var şimdi.
lispte grip noktalarını yakalayıp osnap noktalarına çekebilirmiyiz?
|