31.10.2018 14:22
mesuttasar
|
Arkadaşlar merhaba, aşağıdaki kodlarla iki doğru eğer kesişiyorsa, kesişim noktasına çember çizdirme ile ilgili kodları yazdım. Inspect le devam ettiğimde oluyor ama lispi çalıştırdığımda hata veriyor. Sebebini bulamadım. Bakabilirseniz memnun olurum. Şimdiden teşekkürler.
Kod:
(defun c:deneme()
(SETQ P1 (ENTSEL "\n1. Doğruyu Seçiniz.."))
(SETQ P2 (ENTSEL "\n2. Doğruyu Seçiniz.."))
(SETQ L1S (CDR (ASSOC 10 (ENTGET (CAR (ENTSEL p1))))))
(SETQ L1E (CDR (ASSOC 11 (ENTGET (CAR (ENTSEL p1))))))
(SETQ L2S (CDR (ASSOC 10 (ENTGET (CAR (ENTSEL p2))))))
(SETQ L2E (CDR (ASSOC 11 (ENTGET (CAR (ENTSEL p2))))))
(setq kes (inters l1s l1e l2s l2e ))
(if
(or (= l1s kes) (= l1e kes) (= l2s kes) (= l2e kes) )
() ; eşitlik varsa bişey yapma
(command "_.circle" kes 0.4) ; eşitlik yoksa çemberi çiz
)
)
|
31.10.2018 14:33
alumina
|
Alıntı mesuttasar :
Dogrulari entsel le sectikten sonra car icinde bir daha entsel dersen cizmez tabiki. Hemen kaldiriyoruz onlari :)
|
31.10.2018 14:41
mesuttasar
|
Alıntı alumina :
Alıntı mesuttasar :
Dogrulari entsel le sectikten sonra car icinde bir daha entsel dersen cizmez tabiki. Hemen kaldiriyoruz onlari :)
Hocam dediğiniz gibi yapınca işlem yaptı ama OR koşuluna göre işlem yapmadı, her türlü çemberi çiziyor şimdide :wink
Kod:
(defun c:deneme(/ p1 p2 l1s l1e l2s l2e kes)
(SETQ P1 (ENTSEL "\n1. Doğruyu Seçiniz.."))
(SETQ P2 (ENTSEL "\n2. Doğruyu Seçiniz.."))
(SETQ L1S (CDR (ASSOC 10 (ENTGET (CAR p1)))))
(SETQ L1E (CDR (ASSOC 11 (ENTGET (CAR p1)))))
(SETQ L2S (CDR (ASSOC 10 (ENTGET (CAR p2)))))
(SETQ L2E (CDR (ASSOC 11 (ENTGET (CAR p2)))))
(setq kes (inters l1s l1e l2s l2e ))
(if
(or (= l1s kes) (= l1e kes) (= l2s kes) (= l2e kes))
() ; eşitlik varsa bişey yapma
(command "_.circle" kes 0.4) ; eşitlik yoksa çemberi çiz
)
)
|
31.10.2018 14:45
alumina
|
Alıntı mesuttasar :
= yerine equal yaz, cizmez.
|
31.10.2018 14:48
mesuttasar
|
Alıntı alumina :
Alıntı mesuttasar :
= yerine equal yaz, cizmez.
Hocam, şimdi siz olmasanız sittin sene = yerine equal yazmak aklımıza gelmezdi. BU tip bilgiler kitaplarda yer almıyor büyük ihtimalle. Teşekkür ederim. Sağolun.
Kodun son ve çalışan hali;
Kod:
(defun c:deneme(/ p1 p2 l1s l1e l2s l2e kes)
(SETQ P1 (ENTSEL "\n1. Doğruyu Seçiniz.."))
(SETQ P2 (ENTSEL "\n2. Doğruyu Seçiniz.."))
(SETQ L1S (CDR (ASSOC 10 (ENTGET (CAR p1)))))
(SETQ L1E (CDR (ASSOC 11 (ENTGET (CAR p1)))))
(SETQ L2S (CDR (ASSOC 10 (ENTGET (CAR p2)))))
(SETQ L2E (CDR (ASSOC 11 (ENTGET (CAR p2)))))
(setq kes (inters l1s l1e l2s l2e ))
(if
(or (equal l1s kes) (equal l1e kes) (equal l2s kes) (equal l2e kes))
() ; eşitlik varsa bişey yapma
(command "_.circle" kes 0.4) ; eşitlik yoksa çemberi çiz
)
)
|
31.10.2018 15:32
alumina
|
Alıntı mesuttasar :
Mehmet Sahin GUVERCIN hocamizin AUTOLISP VISUAL LISP kitabi sayfa 97-98-99-100 ve 101 de anlatilmis. Bu bilgiler isiginda "Koordinatlar, gercek sayilardan olusan listelerdir ve esitlik denetimleri equal ifadesiyle yapilir" cumlesi turetilebilir sanki.
|
31.10.2018 16:32
mesuttasar
|
Alıntı alumina :
Alıntı mesuttasar :
Mehmet Sahin GUVERCIN hocamizin AUTOLISP VISUAL LISP kitabi sayfa 97-98-99-100 ve 101 de anlatilmis. Bu bilgiler isiginda "Koordinatlar, gercek sayilardan olusan listelerdir ve esitlik denetimleri equal ifadesiyle yapilir" cumlesi turetilebilir sanki.
Hocam, seçmiş olduğumuz iki line nesnesinin varsa kesişimine çember çizdirdik, kesişimin olması halinde, şimdide bu iki line nesnesinden uzun olanı silmek için nasıl bir kod yazmamız gerekir? Şu kod çok anlamsız gibi durdu çünkü. :dozingoff
Kod:
(command "_.erase" p2 "")
|
31.10.2018 17:08
alumina
|
Alıntı mesuttasar :
Kod:
(command "_.circle" kes 0.4
"._erase" (if (> (distance l2s l2e)
(distance l1s l1e)) p2 p1) "")
|
mesuttasar
|
Alıntı alumina :
Alıntı mesuttasar :
Kod:
(command "_.circle" kes 0.4
"._erase" (if (> (distance l2s l2e)
(distance l1s l1e)) p2 p1) "")
Teşekkür ederim, sağolun hocam.
|