21.04.2012 06:54    

ehya
Bir önceki mesajımda küçük bir hata yapmışım. Lispinin düzeltilmiş halini ekliyorum.

Kod:

(defun c:zzz (/)
     (setq n1 (getpoint "\nBirinci nokta.")
             n2 (getpoint n1 "\nİkinci nokta.")
             di (distance n1 n2)
             os (rtos di 2 0 ))
     (prompt (strcat "\n" os " mm"))
(princ)
  )

21.04.2012 07:40    

ProhibiT
Kod:

(defun c:zzz (/ n1)
  (prompt (strcat "\r" (rtos (distance
          (setq n1 (getpoint "\nBirinci nokta: "))
          (getpoint n1 "\rİkinci nokta: ")) 2 0) " mm")) (prin1)
)
birde böyle deneyin :)

22.04.2012 10:31    

Travaci
Alıntı
Travaci :
Herkeze merabalar, buarada Mehmet Abi herzaman ki desteklerin için teşekkür ederim.
Bugünki sorum şu, yazıdığım lisplerde beş altı tane değer isteyen komutlar var, geçen değerleri hafızada tutması için istediğim kod pek yararlı olmuyor, her nekadar hafızada tutsada beş altı kere space e basmak zorunda kalıyorum. İstediğim şu bu soruları başka bir komuta bağlamak, oda o değerleri sanırım bir text dosyasına yazdırcak, lispte ordan okuyacak yada başka nasıl olursa. Böyle birşey nasıl yapılabilir ? Çokmu detaylı birşey sordum bilmiyorum, hali hazırda bir örnek varmı ? Onunda yardımı dokunabilir.Teşekkürler.



Birde
Kod:

(defun c:xx (/)
(initget 1 "pp")
(setq  pp (getreal "\Değer giriniz: ")
)

initget değerı 1 oldugu halde bos gırmeye calısınca ayrıyetten bı mesaj yadar alert vermek ıstıyorum.

23.04.2012 22:13    

Travaci
Kod:

(defun rpt (/)
     (setq pp(getreal "\nPaspayını giriniz: "))
     (if (null pp) (Progn (alert "\nLütfen bir değer giriniz. ")(rpt)))
)
(defun c:Dnt (/)
     (setq  pp (getreal "\nPaspayını giriniz: "))
     (if (null pp) (Progn (alert "\nLütfen bir değer giriniz. ")(rpt)))
     (setq      n1 (getpoint "\nBirinci nokta.")
     n2 (getpoint n1 "\nİkinci nokta.")
     ac (angle n1 n2)
     n3 (polar n1 ac pp)
     n4 (polar n2 ac (- 0 pp))
     di (distance n1 n2)
     os (rtos di 2 0 )
     )
     (entmake (list (cons 0 "Line") (cons 100 "AcDbLine")
       (cons 100 "AcDbEntity") (cons 10 n3) (cons 11 n4))
             )
     (prompt (strcat "\n" os  " mm"))
     (princ)
)

Bir değer girilmediğinde komutu tekrarlamayı farklı bir yolla yapabilirmiyim ?
Birde girilen değerler rakam olmadığında ayrı bir mesaj vermek istiyorum yapılabilirmi ?

Travaci (23.04.2012 22:29 GMT)

23.04.2012 23:31    

Harbi65
Alıntı
Travaci :
Bir değer girilmediğinde komutu tekrarlamayı farklı bir yolla yapabilirmiyim ?
Birde girilen değerler rakam olmadığında ayrı bir mesaj vermek istiyorum yapılabilirmi ?



Kod:

(defun c:Dnt (/ pp)
  (while (= pp nil)   
    (if (null (setq  pp (getreal "\nPaspayını giriniz: ")))
      (alert "Değer girin...!")
      )
    )
.....
......
......


Sanırım bu şekilde istiyorsun...

24.04.2012 06:46    

Travaci
Aynen bu şekil teşekkür ederim,anladığım kadarıyla while ile pp nil olana kadar tekrarla dedin deilmi ? Son birşey daha "(/pp)" burda pp yi girmeyince neden uyarı vermiyor?

24.04.2012 08:57    

ProhibiT
pp değişkenini Local Variable List'te tanımlamazsanız döngü öncesinde değerini nil yapmak zorunda kalırsınız. Harbi65 hocamın yazdığı şekilde kullanınca Local Variable olduğundan fonksiyon başlayınca zaten nil gelir.

Söz konusu işlem,
Kod:

(defun c:Dnt (/ pp)
  (while (not (setq  pp (getreal "\nPaspayını giriniz: ")))
    (alert "\nDeğer giriniz: "))
......
......
şeklinde daha kısa ve sade şekilde yapılabilir.
Burada girilen değer sayısal değilse, zaten "Requires numeric value." şeklinde uyarı mesajı verilir.

24.04.2012 09:17    

Travaci
Teşekkürler hocam, yanlız böyle olunca son değeri hafızada tutması için verdiğiniz kodu kullanamadım.

24.04.2012 09:37    

Harbi65
Alıntı
Travaci :
Teşekkürler hocam, yanlız böyle olunca son değeri hafızada tutması için verdiğiniz kodu kullanamadım.



Yukarıda girilen pas payı değerini hafızada tutmaktan bahsediyorsan burada bi tezat var. Hem değeri hafızada tutacaksın hem de değer girmek için döngü kurup kullanıcıyı zorlıyacaksın bir de uyarı mesajı verecek... mantıksız, gereksiz işlemler yaptırdığın düşüncesindeyim...
Hafızada değeri tutabilirsin ya da son girilen değeri biyere yazdırıp ordan sonraki kullanımda okutabilirsin... Bunlar alternatifler tabi... Ama hafızada değer olunca değer girmek için zorlamak gereksiz... Ama değeri kontrol ettirip buna göre tekrar girmesini istemek gibi döngü kurulabilir... örneğin pas payı şu değer büyük girilmişse tekrar sor gibi bir döngü olabilir...

24.04.2012 11:02    

ProhibiT
Pek çok örnek paylaşıldı bu konuda... Fonksiyonun aklında tuttuğu bir paspayı var ise, bu değer varsayılan (default) olarak getirilir, kullanıcı değiştirecekse yeni değer girer, eski değeri kabul ediyorsa enter ile geçer.
Kod:

(defun c:DnT (/ pp n1 n2 di ac)
  (if (not ePp) (setq ePp 25))
  (if (setq pp (getreal (strcat "\nPaspayını giriniz: <" (rtos ePp) ">")))
    (setq ePp pp) (setq pp ePp))
  (setq n2 (getpoint (setq n1 (getpoint "\rBirinci nokta:")) "\rİkinci nokta:")
          di (distance n1 n2) ac (angle n1 n2)
          n1 (polar n1 ac pp) n2 (polar n2 ac (- 0 pp)))
  (entmake (list (cons 0 "Line") (cons 10 n1) (cons 11 n2)))
  (princ (strcat "\r" (rtos di 2 0)  " mm")) (princ)
)
AutoLisp kodları yazılırken, gereği olmayan hiç bir değişken yazılmaz, gereksiz hiç bir işlem yapılmaz. n3 ve n4 değişkenlerine ihtiyaç yok. os diye bir değişkene gerek yok. entmake fonksiyonunda arada başka değer olmadığına göre, AcdDbLine ve AcDbEntity direktiflerine hiç ihtiyacımız yok.

25.04.2012 14:25    

Travaci
harbi65in veya prohobitin yaptığı şekilde, bos gecıldıgı zaman komutu tekrarlatmayı n1 ve n2 noktası ıcın yaptıgım zaman olmuyor sebebi nedır ?

25.04.2012 14:44    

ProhibiT
God knows :dontgetit

26.04.2012 07:56    

gkaptan
selamlar,

bir attribute bloğun dxf kodlarına nasıl ulaşabilirim?

26.04.2012 08:18    

Travaci
Kod:

(defun c:info ()
     (setvar "cmdecho" 0)
     (prompt "\nDxf kodları çıkarılacak nesneyi seçiniz:")
     (setq en (entsel))
     (setq in (entget (car en)))
     (textpage)
     (terpri)
     (princ "\n*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*")
      (princ "\n")
     (foreach ep in (print ep))
     (princ "\n")
     (princ "\n*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*")
      (princ "\n")
     (tepri)
)

26.04.2012 09:53    

ProhibiT
Attribute Sub Object'tir Association List'ine öyle ulaşılmaz.

Attribute Definition, Block Tanımı altında sub object tir.
Attribute ise Insert objesi altında bir sub object tir.

Soruda "bir attirubte bloğun dxf kodları" tanımsız ve anlamsız. Sorularınızı ve cevaplarını daha özenli ve düzgün ifadelerle yazarsanız doğru cevabı alma şansınız artar.

27.04.2012 06:40    

Travaci
Bir lispi farklı iki komutla çalıştırabilirmiyiz ?

27.04.2012 07:42    

mttlp
arkadaşlar kolay gelsin sizden birşey isyetecem
metraj cıkartıyorum autocad deki poz numarasını, çapı ve uzunlugunu ben seçerek excele aktaracak bir lisp istiyorum

21/2"
---------------------------------
(5m)

poz no boru çapı boru uzunluğu (m)
1 21/2" 5
2

ve böle devam etmesini istoyurum
böle bir lisp istiyorum.

14.05.2012 11:35    

rayden81
Merhaba arkadaşlar sitenin yenisiyim autolispte basit bir kod yazdım. amacı bir çok nesne seçtikten sonra seçim seti içinden rastgele bir seçim yapacağım. seçtiğim nesnenin renk kodu ile aynı renk kodu olan bütün nesneleri kendisi seçip yeni açacağım bir layer a bylayer renk kodunda toplayacağım. yaptım çalışıyor ama renk kodunu bylayer a çekemiyorum renk değiştirme kodunu tek başına başka bir lispde çalıştırınca sorun çıkarmıyor yardım etme imkanınız olursa çok sevinirim.

Kod:

(DEFUN C:12()

(PRINC "\nNESNELERİ SEÇİNİZ:" )

(SETQ SECIMLER(SSGET))

(SETQ SAYIM(SSLENGTH SECIMLER))

(SETQ TEKSECIM(ENTSEL"\nTEK NESNE SEÇİNİZ:"))

(SETQ YENILAYER(GETSTRING"\nYENİ LAYER İSMİNİ GİRİNİZ:"))

(SETQ YENILAYER_RENK(GETINT"\nRENK NUMARASINI GİRİNİZ:"))
(COMMAND "-LAYER" "M" YENILAYER "C" YENILAYER_RENK "" "")

(SETQ TEKSECIMDXF(ENTGET(CAR TEKSECIM)))

(SETQ RENKKODU(CDR(ASSOC 62 TEKSECIMDXF)))

(SETQ DONGU 0)

(WHILE (< DONGU SAYIM)

(SETQ SIRASECIM(SSNAME SECIMLER DONGU))

(SETQ SIRASECIMDXF(ENTGET SIRASECIM))

(SETQ SIRASECIMRENKKODU(CDR (ASSOC 62 SIRASECIMDXF)))

(IF (= RENKKODU SIRASECIMRENKKODU)

(PROGN

(SETQ SIRASECIMDXF(SUBST (CONS 8 YENILAYER) (ASSOC 8 SIRASECIMDXF) SIRASECIMDXF))
(COMMAND "CHANGE" SIRASECIM "" "P" "C" "BYLAYER" "")

)

)

(ENTMOD SIRASECIMDXF)
(ENTUPD SIRASECIM)
(SETQ DONGU(+ DONGU 1))
)
)

ProhibiT (14.05.2012 14:05 GMT)

14.05.2012 14:23    

ProhibiT
Fonksiyonun genel kurgusu tam doğru olmasa da, yalnızca sorduğunuz soruya cevap vermek gerekirse;
(COMMAND "CHANGE" SIRASECIM "" "P" "C" "BYLAYER" "") yerine
(command "_.Change" sirasecim" "" "p" "c" 255 "") yazarsanız problem yaşamazsınız.

14.05.2012 14:50    

rayden81
Öncelikle yardımlarınızdan dolayı teşekkür ederim. Affınıza sığınarak bir iki şey soracağım. 255 renk kodunu girdiğimde nesneler 255 rengine geliyor atadığım layerın bylayer renginde olmuyor.

Diğeri ise genel kurguyu tam doğru bulmadım demişsiniz acaba zamanınız var ise sorunları söyleme imkanınız olurmu. Birde bu bylayer değişimini dxf kodundan düzeltmek isterim rengi bylayer olan nesnelerde 62 renk kodu görünmüyor bu kodu dxf kodundan çıkarmak istedim ama nasıl bir komut ile dxf kodundan 62 kodunu çıkarabilirim yada başka yöntemi varmıdır.
İmkanınız olurda yazabilirseniz çok sevinirim. Şimdiden teşekkür ederim.

ehya (15.05.2012 06:09 GMT)

Önceki Sayfa [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] > 21 < [25] [30] [35] [40] [42] Sonraki Sayfa
Copyright © 2004-2022 SQL: 1.497 saniye - Sorgu: 99 - Ortalama: 0.01512 saniye