Copyright © 2004-2022 SQL: 1.497 saniye - Sorgu: 99 - Ortalama: 0.01512 saniye
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) birde böyle deneyin :)
(prompt (strcat "\r" (rtos (distance (setq n1 (getpoint "\nBirinci nokta: ")) (getpoint n1 "\rİkinci nokta: ")) 2 0) " mm")) (prin1) )
|
22.04.2012 10:31
Travaci |
Alıntı 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ı 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) şeklinde daha kısa ve sade şekilde yapılabilir.(while (not (setq pp (getreal "\nPaspayını giriniz: "))) (alert "\nDeğer giriniz: ")) ...... ...... 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ı 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) 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.
(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) )
|
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.
|
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) |