13.10.2008 18:46    

Harbi65
Seçtiğimiz bir çizgiyi kesen çizgiler olup olmadığını varsa kesişim noktalarını nasıl tesbit ederiz?

13.10.2008 20:15    

ehya
inters komutunu incele...

13.10.2008 20:19    

Harbi65
bu komut karmaşık geldi... kullanımını biraz anlatabilir misin?

14.10.2008 06:09    

ehya
Karmaşık birşey değil. Sadece incelemiyorsun harbi.
İki çizgi seç. başlangıç ve bitiş noktalarını tespit et.
Ardından kodları aşağıdaki gibi yaz.

(inters 1ciz_bas 1ciz_son 2ciz_bas 2ciz_son)

eğer kesişim var ise, koordinatı verecektir. Kesişim yok ise sonuç nil dir.

17.10.2008 07:39    

fox


Herkese merhabalar yukardaki şekli oluşturmaya çalışıyorum fakat lisp te yeni olduğum için nerde hata yaptığımı bulamadım.yardımlarınızı bekliyorum.

Kod:

(setq oldCmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)

(setq genislik (getreal "\ngenişlik:"))
(setq yukseklik (getreal "\nyükseklik:"))
(setq tirnak (getreal "\ntırnak:"))

(defun c:omega (/p0 p1 p2 p3 p4 p5 p6)
  (setq p0 (getpoint "\nOmeganın oturacağı orta noktayı seçin:"))

  (setq p1 (list (car (p0-((genislik/2)+(tirnak)))) (cadr p0) 0.0))
  (setq p2 (list (car (p0-(genislik/2))) (cadr p0) 0.0))
  (setq p3 (list (car p2) (cadr (p0+yukseklik)) 0.0))
  (setq p4 (list (car (p0+(genislik/2))) (cadr p3) 0.0))
  (setq p5 (list (car p4) (cadr p0)))
  (setq p6 (list (car (p0+((genislik/2)+(tirnak)))) (cadr p0) 0.0))

  (command "._pline" p1 p2 p3 p4 p5 p6 \r))
(setvar "cmdecho" oldCmdecho)
(princ)

17.10.2008 08:13    

ehya
lispi yeniden yazmak isterdim ancak, genel hatalarınız çok. Bunun için size hatalarınızı söyleyeyim. Buna göre tekrar değerlendirin.
komut başlangıcında değerlerin sıfırlanmasını sağlayan parantezin içindeki değerlerde / işaretini değişkenlerden ayırın. Bitişik olmasın.
Lisp yazarken 4 işlem komutlarını klasik metotlarla yazamazsınız. Eğer 2 sayıyı toplayacak iseniz örneğin (+ 2 5) şeklinde yazmalısınız.
iki sayıyı toplarken toplama işlemine tabi tutulacak sayıyı parantez içine alamazsınız. Bu şekilde yaptığınızda o değer ayrı bir işlemmiş gibi görünür.
Değer sorgulama bölümünü lispin ana bölümü içine yerleştirin.
Lisp içinde nesne ekleme varsa (line, circle, text v.s.) bu işlemleri yapmadan önce osnap seçeneklerini kapatıp lisp bitiminde tekrar açın.

Bu yazdıklarıma göre düzenlemenizi yapın. Tekrar kontrol ederiz.

17.10.2008 08:51    

fox
peki şöyle bişey sorayım değişkenlerin isimlerinde /*- + gibi karakterler kullanabiliyormuyuz.mesela
(setq f/2 şeklinde isim verebilirimiyiz.

17.10.2008 08:54    

ehya
verebilirsin. örnek olarak verdiğin f/2 nin kodlarda bir anlamı yok. benzer şekilde değişken ismi verebilirsin.
Lisp yazımında autocad'in içinde bulunan Visuallisp editor programını kullanın. Yazarken kendi kodlamalarını farklı renkte yapar. Buna göre hata yapma olasılığınız daha azdır. Komut ismi VLIDE

17.10.2008 09:36    

fatih107
Merhaba arkadaşlar küçük birşey soracaktım. 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

17.10.2008 09:42    

fox
Alıntı
fox :


Herkese merhabalar yukardaki şekli oluşturmaya çalışıyorum fakat lisp te yeni olduğum için nerde hata yaptığımı bulamadım.yardımlarınızı bekliyorum.

Kod:

(setq oldCmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)

(setq genislik (getreal "\ngenişlik:"))
(setq yukseklik (getreal "\nyükseklik:"))
(setq tirnak (getreal "\ntırnak:"))

(defun c:omega (/p0 p1 p2 p3 p4 p5 p6)
  (setq p0 (getpoint "\nOmeganın oturacağı orta noktayı seçin:"))

  (setq p1 (list (car (p0-((genislik/2)+(tirnak)))) (cadr p0) 0.0))
  (setq p2 (list (car (p0-(genislik/2))) (cadr p0) 0.0))
  (setq p3 (list (car p2) (cadr (p0+yukseklik)) 0.0))
  (setq p4 (list (car (p0+(genislik/2))) (cadr p3) 0.0))
  (setq p5 (list (car p4) (cadr p0)))
  (setq p6 (list (car (p0+((genislik/2)+(tirnak)))) (cadr p0) 0.0))

  (command "._pline" p1 p2 p3 p4 p5 p6 \r))
(setvar "cmdecho" oldCmdecho)
(princ)





kodu tekrar düzenledim fakat yine olmadı
Kod:

(setq oldCmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)

(defun c:omeg (/ p0 p1 p2 p3 p4 p5 p6)

  (setq p0 (getpoint "\nOmeganın oturacağı orta noktayı seçin:"))

(setq genislik (getreal "\ngenişlik:"))
(setq yukseklik (getreal "\nyükseklik:"))
(setq tirnak (getreal "\ntırnak:"))
(setq g/2 (getreal (/ genislik 2)))
(setq tg (getreal (+ tirnak tirnak genislik)))
(setq tg/2 (getreal (/ tg 2)))

  (setq p1 (list (car (- p0 tg/2)) (cadr p0) 0.0))
  (setq p2 (list (car (- p0 g/2)) (cadr p0) 0.0))
  (setq p3 (list (car p2) (cadr (+ p0 yukseklik)) 0.0))
  (setq p4 (list (car (+ p0 g/2)) (cadr p3) 0.0))
  (setq p5 (list (car p4) (cadr p0) 0.0))
  (setq p6 (list (car (+ p0 tg/2)) (cadr p0) 0.0))

  (command "._pline" p1 p2 p3 p4 p5 p6 \r))
(setvar "cmdecho" oldCmdecho)
(princ)

17.10.2008 09:51    

fatih107
Fox arkadaşım bende başlarda aynı hatayı yapıyordum, bir şey çizdireceksen başta mutlaka osmodu kapat.

Kod:

(defun c:gvt3 ()
  (setq osx (getvar "osmode"))
  (setvar "osmode" 0)


gibi. En sonunada
Kod:

(setvar "osmode" osx)


ekleyerek osmodu tekarar acabilirsin.

17.10.2008 10:24    

fox
sağol fatih arkadaşım bişey daha öğrenmiş olduk sayende ama benim lisp yine çalışmadı:)

17.10.2008 10:37    

fatih107
fox arkadaşım ayrıca

(setq tg/2 (getreal (/ tg 2)))

getreal sadece kullanıcıdan sayı isterken kullanılır. sen işlem yaptırıyorsan kullanılmaz.

(setq tg/2 (/ tg 2))

olması gerekir.

Bide list en sonuna 0.0 a da gerek yok

18.10.2008 11:35    

fox
listin sonundaki 0.0 değeri z eksenidir dimi.birde bu değerin girilmesinde bir problem çıkarmı.
anlatılanlara göre düzenlemiş olduğum lispin son hali aşağıdadır fakat yine çalışmıyor.

Kod:

(setq oldCmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq osn (getvar "osmode"))
(setvar "osmode" 0)

(defun c:ome (/ p1 p2 p3 p4 p5 p6)

  (setq pt0 (getpoint "\nOmeganın oturacağı orta noktayı seçin:"))

(setq genislik (getreal "\ngenişlik:"))
(setq yukseklik (getreal "\nyükseklik:"))
(setq tirnak (getreal "\ntırnak:"))
(setq g/2 (/ genislik 2))
(setq tg (+ tirnak tirnak genislik))
(setq tg/2 (/ tg 2))

  (setq p0 (list (car pt0) (cadr pt0)))
  (setq p1 (list (car (- p0 tg/2)) (cadr p0)))
  (setq p2 (list (car (- p0 g/2)) (cadr p0)))
  (setq p3 (list (car p2) (cadr (+ p0 yukseklik))))
  (setq p4 (list (car (+ p0 g/2)) (cadr p3)))
  (setq p5 (list (car p4) (cadr p0)))
  (setq p6 (list (car (+ p0 tg/2)) (cadr p0)))

  (command "._pline" p1 p2 p3 p4 p5 p6 \r))
(setvar "osmode" osn)
(setvar "cmdecho" oldCmdecho)
(princ)

18.10.2008 11:44    

ehya
z koordinatında hepsine sıfır vermenin bir sıkıntısı olmaz. Ancak pline'nın tüm z koordinatları aynı olmalı. pline'ın her düğüm noktasına farklı z koordinatı veremezsin.
Hatana gelince p1 noktasında yazmış olduğun kod'da (setq p1 (list (car (- p0 tg/2)) (cadr p0))) p0 değerini yani yerleşim koordinatını herhangi bir sayıdan çıkartamazsın. Burada kullanacağın x değeri ise (- (car p0) tg/2) y değeri ise (- (cadr p0) tg/2) şeklinde olmalıdır.
Diğer noktalarında da benzer hatalar var ise bunları düzenlemelisin.

18.10.2008 12:17    

fox
ehya ve fatih107 çok sağolun arkadaşlar yardımlarınız sayesinde hallettim sonunda.çalışan kodu veriyorum.

Kod:

(setq oldCmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq osn (getvar "osmode"))
(setvar "osmode" 0)

(defun c:omega (/ p1 p2 p3 p4 p5 p6)

  (setq pt0 (getpoint "\nOmeganın oturacağı orta noktayı seçin:"))

(setq genislik (getreal "\ngenişlik:"))
(setq yukseklik (getreal "\nyükseklik:"))
(setq tirnak (getreal "\ntırnak:"))
(setq g/2 (/ genislik 2))
(setq tg (+ tirnak tirnak genislik))
(setq tg/2 (/ tg 2))

  (setq p0 (list (car pt0) (cadr pt0)))
  (setq p1 (list (- (car p0) tg/2) (cadr p0)))
  (setq p2 (list (- (car p0) g/2) (cadr p0)))
  (setq p3 (list (car p2) (+ (cadr p0) yukseklik)))
  (setq p4 (list (+ (car p0) g/2) (cadr p3)))
  (setq p5 (list (car p4) (cadr p0)))
  (setq p6 (list (+ (car p0) tg/2) (cadr p0)))

  (command "._pline" p1 p2 p3 p4 p5 p6 \r))
(setvar "osmode" osn)
(setvar "cmdecho" oldCmdecho)
(princ)

18.10.2008 12:40    

ehya
Lispinde birkaç düzenleme yaptım. Son hali olarak bunu kullanabilirsin. Geçen sefer söylediğim düzenlemeleri yapmamışsın. sistem değişkeni öğrenme ve bunları koruma bölümlerini ana bölüme yaz demiştim.
Ayrıca getreal ile değer istenildiğinde enter yapılarak geçilebiliyor. Bu şekilde olduğunda lispin hata verir. Bunun için initget fonksiyonunu yazdım.
(Inıtget 7) fonksiyonundaki 7 sayısının anlamı
1 = Enter ile geçilemez
2 = değer olarak sıfır verilemez
4 = negatif sayı verilemez.
bu değerlerin toplamı 7 dir. bu şekilde yapılabilir.

Lispinin son hali aşağıdadır.

Kod:

(defun c:omega (/ p1 p2 p3 p4 p5 p6)
(setq oldCmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq osn (getvar "osmode"))
(setq pt0 (getpoint "\nOmeganın oturacağı orta noktayı seçin:"))
(initget 7)
(setq genislik (getreal "\ngenişlik:"))
(initget 7)
(setq yukseklik (getreal "\nyükseklik:"))
(initget 7)
(setq tirnak (getreal "\ntırnak:"))
(setq g/2 (/ genislik 2))
(setq tg (+ tirnak tirnak genislik))
(setq tg/2 (/ tg 2))
  (setq p0 (list (car pt0) (cadr pt0)))
  (setq p1 (list (- (car p0) tg/2) (cadr p0)))
  (setq p2 (list (- (car p0) g/2) (cadr p0)))
  (setq p3 (list (car p2) (+ (cadr p0) yukseklik)))
  (setq p4 (list (+ (car p0) g/2) (cadr p3)))
  (setq p5 (list (car p4) (cadr p0)))
  (setq p6 (list (+ (car p0) tg/2) (cadr p0)))
(setvar "osmode" 0)
  (command "._pline" p1 p2 p3 p4 p5 p6 \r)
(setvar "osmode" osn)
(setvar "cmdecho" oldCmdecho)
(princ))

18.10.2008 16:23    

fox
eyvallah dostum. bu initget harika oldu, okurken üçü atlamışsın diyecektim:)) ama işlevi ve mantığı muhteşem.

fox (19.10.2008 21:44 GMT)

20.10.2008 10:06    

mzfr60
Degerli arkadaslar Enhanced Atrtribute ile hazirlanmis projeler var ben bunlari Netcad a atmak icin patlatmam (Explode) yapmam gerekiyor yapinca buralardaki aks ve kot lar haliyle name(adlar) geliyor. Bunu gorundugu degerlerine cevirmede yardimci olurmusunuz. yoksa tek tek yanina yazip digerini siliyoruz buda hata yapmamizi artiriyor. tesekkur ederim..

26.10.2008 09:50    

miyatu
bu islemi expres tools araciligi ile yapabilirsin

expres tools \ block \ explode attribute to text seceneginden patlatmak istediginiz attributeleri secin ve gerisini ona birakin...

kolay gelsin...

Önceki Sayfa [1] [2] [3] > 4 < [5] [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] [43] Sonraki Sayfa
Copyright © 2004-2022 SQL: 1.438 saniye - Sorgu: 101 - Ortalama: 0.01423 saniye