09.02.2010 10:47    

besalti
s.a.

lisplerle yeni tanıştım. tesadüf oldu.

istediğim lisp;
Ölçülerini klavyenin sağ tarafında bulunan sayı bolmesinden giriyoruz.
Sayı 10 olunca sorun yok ama 10,25 olunca klavyenin solunda bulun harf bölümünden giriyoruz. çünkü sayı bölümünde nokta yok virgül var.

Şimdi ben klavyenin sağ tarafında bulunan virgülü nokta yapmak istiyorum.
yani ben 10,25 yazınca program 10.25 olarak değiştirip işlem yapsın.
mümkünmüdür.

teşekkür ederim..

09.02.2010 11:50    

HIPHOP
zannımca mümkün değildir. çünkü bu direk bilgisayarlardaki ayalarla ilgili. ama gene de bi üstadın konuyu değerlendirmeye almasında fayda var.

09.02.2010 12:59    

ProhibiT
HIPHOP öncelikle iyi dileklerin için teşekkür ederim.
Neden olmasın :) imzamın birinci kısmında zaten bu yazıyor... Eğer istek varsa, mutlaka bir yol vardır. Lisp ile yazmayı seviyorsanız, istiyorsanız, bir de günlük kullanımda ihtiyaç duyuyorsanız... Mutlaka öğrenirsiniz.

besalti arkadaşımızın sorusuna gelince, bahsettiğiniz konu işletim sistemi ile ilgili. AutoCAD ve AutoLisp ile uzak yakın bir ilgisi yok. Çözümü de çok basit aslında; Control Panel i (Denetim Masası) açın, Country and Region (Bölge ve Dil seçenekleri) bölümünde, Clock, Region, Language (saat, bölge, dil) seçin, buradan additional settings (ek ayarlar) seçin ve Decimal seperator (ondalık ayracı) bulun, sizde virgül (,) olması lazım... onun yerine nokta (.) girdiğinizde... artık klavyenizin nümerik kısmındaki ondalık tuşuna bastığınızda nokta çıkacaktır...

Böyle bir değişiklik yaptığınızda, mesela excel dosyalarınızda da ondalık ayracı olarak bu seçiminizin geçerli olacağını unutmayınız. Bir yandan düzeltirken diğer yanını bozmuş olmayalım :)

Kolay gelsin...

ProhibiT (11.03.2010 17:35 GMT)

09.02.2010 13:27    

besalti
yardım için teşekkür ederim.

ama autocad ile çalışırken heran excelden hesap yapıyorum. o zamanda virgül lazım excelde de virgül gecerli.

durum boyle olunca işler değişiyor. coktandır arıyordum. sadece autocad için nokta gecerli olacak bi nokta. gene elde var 8 :) sıfır. tekrar yardımarınız için tşk ederim ALLAH sizden razı olsun..

(denedim ve excel noktayıda kabul etti enteresan neyse çok tşk ederim.) -----<-<;@

09.02.2010 13:47    

HIPHOP
ehya nın vermiş yazmış (düzenlemiş veya yayımlamış) olduğu lisp kitabını biraz inceledim ama birinin bana anlatmadan lisp yazabileceğimi pek sanmıyorum :D ama görürsünüz çözcem bu işi....

10.02.2010 14:57    

melih1234
arkadaşlar bana hızlı silme yapan lisp lazım yardımcı olursanız şimdiden teşekkürler heryerde aradım bulamadım birde burda sorayım

Ben çizimlerimde silmek istediğim objeleri qselect le seçiyorum erase ile siliyorum
Bunu tek çizim de 7-8 kez tekrarlıyorum
Örnek verecek olursam qselectle yeşil renkli line leri seçip siliyorum
Sonra aynı şekilde mavi renkli circle leri siliyorum ama bunlar benim çizimim de yuzlerce oldugu için qselect kullanıyorum
Benim sormak istediğim bunun için tek bir lisp olsa ben bu lispteki komutu yazdıgımda mavi renkli cırcle yeşil renkli line kırmızı renkli diameter aynı anda silinse

Böyle bişey mümkünmüdür siz degerli ustadlara soruyorum. Belki de mümkün değildir ben de bilmiyorum

ehya (10.02.2010 18:53 GMT)

10.02.2010 16:00    

ProhibiT
AutoLisp fonksiyon yazmaya gerek yok;

Quick Select Diyalog kutusunun sol alt tarafındaki
- Include new Selection Set (Yeni seçim setinde dahil et)
- Exclude from new selection Set (Yeni seçim setinde hariç tut)
- Append to Current Selection Sets (Mevcut Seçim setine ekle)

seçenekleri uygun düzende kullanarak, seçiminizi tek seferde yapabilirsiniz.

Kolay Gelsin...

11.02.2010 13:02    

melih1234
bu dediğin dogru fakat yeni bir çalışmada ne olacak bunların hepsi yeni baştan yapılmak zorunda bu da yorucu bişey sonuçta.
diyelim 1.dwg benim çalışmam ben bu resimde yeşil line mavi cırcle kırmızı dimension ları siliyorsam 2. dwg de de bunları siliyorum 3. dwg dede bunları siliyorum. yani örnek verecek olursam qselecti kullanmak için lineleri hep yeşil yapıyorum circle leri mavi.
tek bir dwg olursa senin dediğin gibi lispe gerek yok ama ben de 1 den fazla çalışma var .tek tuşla yapılsa ben de bu programı geliştirebilirim belki..

11.02.2010 13:13    

HIPHOP
bu tarz istekler çok oluyor ve gelen cvp ta hep aynı oluyor :D ben şuanda senin bu isteğin için freemust kurdum. sırf freemust ın kısayollarından faydalanabilmek için 2007 kullanıyorum ara sıra. orada hızlı seçim için güzel bir menü var. siteden freemust indirip kurabilirsin.

11.02.2010 14:25    

melih1234
ben free must u kurdum fakat hızlı seçim için bişey göremedim
yinede güzel program ordaki şablonları silip kendi şablonlarımı koydum o kadar
hızlı seçim neresinde anlatabilirmisin rica etsem

11.02.2010 15:54    

ProhibiT
Arkadaşlar, çok sorulan soruya aynı cevap olsun diye yazmadığımdan emin olabilirsiniz.
Bir AutoLisp Fonksiyonu hayal ederken ufkunuzu dar tutuyorsunuz.
Böyle bir seçim seti yapabilmek için o kadar çok parametre var ki;
Örnek verirken yeşil çizgiler, mavi çemberler diye kolayca özetleyiveriyorsunuz.
Yazmaya kalkınca bundan ibaret olmadığını görüyorsunuz.

Sizin düşündüğünüz gibi Object Type olarak bir Line bir de Circle, Object Properties olarak ta bir tek Color ele alınıp, buna göre bir selection set oluşturursanız. Fonksiyon çok sınırlı ve kullanışsız olur.
Böyle bir şeyi yazmak aslında bir kaç satır;
Kod:

(defun c:ssl()
  (setq objtype (getstring "\Silinecek Obje tipini giriniz: "))
  (if (= objtype nil) (setq objtype (cdr (assoc 0 (entget (car (entsel "\Silinecek obje gurubu için örnek obje seçiniz: ")))))))
  (setq objrenk (getint "\Silinecek Objelerin renk numarasını giriniz: "))
  (if (= objrenk nil) (setq objtype (cdr (assoc 62 (entget (car (entsel "\Silinecek obje rengi için örnek obje seçiniz: ")))))) )
  (setq silinecek (ssget "x" (list (cons 0 objtype) (cons 62 objrenk))))
  (command "erase" silinecek "")
)

Ama biliyorum ki istediğiniz bundan ibaret değil.
Ben kodu verdiğimde anında geri dönüşler başlayacak;
Şunu da yapabilir mi? Böyle de seçebilir mi?... gibi.

Bahsettiğiniz fonksiyonu yazan insan geniş ve genel düşünmek zorunda.
Mesela obje tipleri için hiç olmazsa;
3DFace, 3dPolyline, 3DSolid, Arc, AttributeReference, BlockRef, Circle, Dimension, Ellipse, ExtrudedSurface, Hatch, Helix, LightweightPolyline, Line, LoftedSurface, MLeader, MLine, MText, PlaneSurface, Point, PolyfaceMesh, PolygonMesh, Polyline, Ray, Region, RevolvedSurface, Shape, Solid, Spline, Surface, SweptSurface, Text, Trace, Viewport, Wipeout, XLine
obje tiplerini göz önüne almak zorunda.
Ve bu obje tipleriyle birlikte bu objelerin Color, Layer, Linetype, Lineweight, Space... gibi pek çok özelliğini göz önüne almak zorunda.

Hal böyle oluncada, yazılacak fonksiyon qselect komutundan daha fazla bir şey yapmayacak, Amerika'yı yeniden keşfetmek niye?

Size bir tavsiyem var;
Kod:

(defun c:ssl()
  (setq obj (entget (car (entsel "\Silinecek obje gurubu için örnek obje seçiniz: ")))
           silinecek (ssget "x" (list (cons 0 (cdr (assoc 0 obj))) (cons 62 (cdr (assoc 62 obj))))))
  (command "erase" silinecek "")
)

Şeklinde bir fonksiyonu silinecek her gurup için bir kere tekrarlayarak kullanın...
Object Type ve Color özelliği seçilen örnek obje ile çakışan bütün objeleri seçip silecektir.
Hadi hatırınız için buna bir de sürekli seçim katalım :)
Kod:

(defun c:ssl()
  (while (setq obj (entget (car (entsel "\Silinecek obje gurubu için örnek obje seçiniz: "))))
    (setq silinecek (ssget "x" (list (cons 0 (cdr (assoc 0 obj))) (cons 62 (cdr (assoc 62 obj))))))
    (command "erase" silinecek "")
  )
)

Şekline gelir...
Siz obje seçmeye devam ettiğiniz sürece seçilen obje örnek alınarak silme işlemine devam edilir.
Ne kadar işe yarar tartışılır!

Not: yazdıklarımı test etmedim, doğrudan doğruya buraya yazdım.

Kolay Gelsin.

ProhibiT (11.02.2010 20:17 GMT)

12.02.2010 07:15    

melih1234
hocam sen süpersin ya bu lisp benim beklediğimin de ötesinde.bir objeyi seciyorum benzer olanların hepsi siliniyor. çok teşekkür ederim bu lisp çok işime yaradı.

(defun c:ssl()
(while (setq obj (entget (car (entsel "\Silinecek obje gurubu için örnek obje seçiniz: "))))
(setq silinecek (ssget "x" (list (cons 0 (cdr (assoc 0 obj))) (cons 62 (cdr (assoc 62 obj))))))
(command "erase" silinecek "")
)
)

12.02.2010 08:48    

ProhibiT
İşinize yaramasına sevindim.
Ama, bence Object Type ve Color yeterli ve kullanışlı parametreler değil.
örnek; seçtiğiniz Obje TEXT, rengi de ByLayer... bu durumda bulunduğu Layer'ın rengine sahip (biribirinden farklı renklerdeki) Text objelerini aynı renkte (ByLayer) göreceğinden silcektir.
Bu noktada, yeni eklemeler yapmaya gerek var. Haydi bakalım, Layer'ları da aynı olan objeleri silsin... Bununla da bitmez, LineType'ları aynı objeleri de silsin... Bu Liste uzar gider...
Kolay gelsin.

ProhibiT (12.02.2010 10:59 GMT)

02.03.2010 09:40    

sebnemaskun
Merhaba;

Ben yeni bir üyeyim ve gördüğüm kadarıyla forumda konu edilmemiş bir yardım ricam olacak. Benim yapmak istediğim, bir mahal no, mekan adı, metrekaresi baslıklarını içeren attribute'a otomatik olarak mekan metrekaresini yazdırmak. Bunun gördüğüm bir örneği, oda için çizdiğimiz polyline alanını bu attribute içine yazmak şeklinde çalışıyordu. Bunun gibi bir örneği nasıl oluşturabilirim? Elimde bu örnek var ama kendime göre düzenleyebilmeyi umuyorum, çünkü bu örnek milimetre üstünden hazırlanmış, halbuki ben çoğunlukla santimetre ile çalışıyorum, ve de kendi layerlarımla bir attribute kullanmak istiyorum. Yardımcı olabilir misiniz?

02.03.2010 11:08    

ehya
sebnemaskun

bu değişikliği yapabilmek için sizin attribute nesnesini göndermeniz gerekir. Çünkü seçilen pline'nın alanını attibute içindeki value değerine göre değitirilmesi gerekir.

07.03.2010 17:45    

nv_umut
Arkadaşlar seçtiğim region ları (patlatmadan) polyline yapacak bir lisp e ihtiyacım var..Yardımcı olursanız çok sevinirim.

09.03.2010 07:34    

ProhibiT
Obje tipleri biribirinden o kadar faklı ki; böyle bir Lisp yazmak için epeyce uğraşmak gerek... Gerçekten buna ihtiyaç var mı? Bunun yerine "BPoLy" komutunu girip Region'ın içinde bir nokta seçerek yeni PloyLine yapmak daha pratik...
Kolay Gelsin.

18.03.2010 09:57    

HIPHOP
ben grobeton çizebilecek bir lisp istiyorum. yani demek istediğim şu, gösterdiğim çizginin 10cm paraleline bir çizgi ofsetleyip. yeni oluşturduğu çizgiyi sağdan soldan 10cm uzatıp ilk çizgiye birleştirmesi gerekiyor. bunu daha iyi açıklayabilmek için bir de resim ekledim... sarı çizgi söz ettiğim şeydir.


18.03.2010 21:16    

ProhibiT
Merhaba HIPHOP :)
AutoLisp öğrenmeyi çok istediğini biliyorum. Onun için aşağıda kodunu verdiğim fonksiyonun adım, adım açıklamalarını da verdim. Öncelikle fonksiyonu yükleyip, farklı konum ve durumlar için denemeni tavsiye ederim. Sonra açıklamalara bir göz atmalısın.
Kod:

(defun c:grbtn ()
  (setq ttc (car (entsel "\nTemel Taban Çizgisiniz Seçiniz..."))
        thc (getreal "\nGrobeton Kalınlığını Giriniz: ")
        czg (entget ttc)
        bnok (cdr (assoc 10 czg))
        snok (cdr (assoc 11 czg))
        leng (distance bnok snok)
        aci (angle bnok snok)
  )
  (if (>= aci pi) (setq aci (- aci pi) kkl bnok bnok snok snok kkl))
  (setq p1 (polar bnok (+ aci pi) thc)
        p2 (polar p1 (+ aci (* pi 1.5)) thc)
        p3 (polar p2 aci (+ leng thc thc))
        p4 (polar p3 (+ aci (* 0.5 pi)) thc)
  )
  (entmake (list (cons 0 "LINE") (cons 10 bnok) (cons 11 p1)))
  (entmake (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2)))
  (entmake (list (cons 0 "LINE") (cons 10 p2) (cons 11 p3)))
  (entmake (list (cons 0 "LINE") (cons 10 p3) (cons 11 p4)))
  (entmake (list (cons 0 "LINE") (cons 10 p4) (cons 11 snok)))
  (prin1)
)
Yazdığımız her fonksiyonun mümkün olduğunca genel amaçlı olmasına, uygulamada karşılaşılabilecek farklı durumlara uygun olmasına dikkat etmemiz gerekiyor.
Altına Grobeton işleyeceğimiz temel tabanı her zaman yatayda çizilmiş olmayabilir.
Temel kalıp Planında Kesitlerden biri Y eksenine paralel çizilmiş olabilir.
Ya da temel tabanı yataydır da, sağdan sola doğru... Düşeydir de yukarıdan aşağı çizilmiştir.
Temel tabanına konacak Grobeton kalınlığı her zaman 10 cm. olmayabilir. Ya da cm. birimi değil de mesela mm. birimi kullanılmıştır.
Fonksiyonumuzu yazarken bütün bunları göz önüne almak zorundayız...
[IMG]http://img339.imageshack.us/img339/5778/grbtn.png[/IMG]
(defun c:grbtn ()
;;;Fonksiyonumuzu çalıştırırken komutumuz grbtn olsun.
  (setq ttc (car (entsel "\nTemel Taban Çizgisiniz Seçiniz..."))
;;;Seçtiğimiz Temel Taban Çizgisi Objesinin "Entity Name" ini ttc değişkenine atadık
        thc (getreal "\nGrobeton Kalınlığını Giriniz: ")
;;;Grobeton kalınlığı değerini thc değişkenine atadık.
        czg (entget ttc)
;;;ttc objesinin (Temel Taban Çizgisi) database bilgilerini (Association List) czg
;;;değişkenine atadık.
        bnok (cdr (assoc 10 czg))
;;;czg içinden assoc 10 ile çizginin başlangıç noktası koordinatlarını alıp bnok
;;;değişkenine atadık.
        snok (cdr (assoc 11 czg))
;;;aynı şekilde assoc 11 ile çizginin bitiş noktası koordinatlarını snok değişkenine atadık
        leng (distance bnok snok)
;;;Çizginin uzunluğunu leng değişkenine atadık.
        aci (angle bnok snok)
;;;Çizginin açısını aci değişkenine atadık.
  )
;;aci değerinin pi'ye eşit ya da büyük olması durumunu kontrol ediyoruz.
;;aci değeri pi'ye eşit ya da büyükse, çizgimiz ya sağdan sola, ya da yukarıdan aşağıya çizilmiştir.
;;Bunu düzeltmek için, aci değerinden pi'yi çıkarıyoruz ve bnok ve snok
;;;noktalarının koordinatlarını karşılıklı yer değiştiriyoruz.
  (if (>= aci pi)
    (setq aci (- aci pi)
          kkl bnok
;;;bnok'un değerlerini kaybetmemek için kukla bir değişken olan kkl'de tutuyoruz.
          bnok snok
          snok kkl
    )
  )
  (setq p1 (polar bnok (+ aci pi) thc)
;;;bnok yani başlangıç noktamızdan başlayarak aci+pi yönünde thc
;;;(grobeton kalınlığı) kadar ilerleyip p1 noktasını buluyoruz.
        p2 (polar p1 (+ aci (* pi 1.5)) thc)
;;;p1 noktasından aci+1.5*pi yönünde gene thc kadar gidip p2
;;;noktasını buluyoruz.
        p3 (polar p2 aci (+ leng thc thc))
;;;p2 noktasından aci yönünde leng (çizgi uzunluğu) + 2*thc
;;;kadar ilerleyip p3 noktasını buluyoruz.
        p4 (polar p3 (+ aci (* 0.5 pi)) thc)
;;;p3 noktasından aci+0.5*pi yönünde thc kadar gidip p4
;;;noktamızı buluyoruz.
  )
  (entmake (list (cons 0 "LINE") (cons 10 bnok) (cons 11 p1)))
;;;bnok'tan başlayıp p1'de biten çizgiyi çizdik.
  (entmake (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2)))
;;;p1'den p2'ye çizgi çizdik.
  (entmake (list (cons 0 "LINE") (cons 10 p2) (cons 11 p3)))
;;;p2'den p3'e çizgi çizdik.
  (entmake (list (cons 0 "LINE") (cons 10 p3) (cons 11 p4)))
;;;p3'ten p4'e çizgi çizdik.
  (entmake (list (cons 0 "LINE") (cons 10 p4) (cons 11 snok)))
;;p4'ten başlayıp snok'ta biten çizgiyi çizip işimizi tamamladık.
  (prin1)
)
Görüldüğü gibi, bir fonksiyonu yazarken her durumu göz önüne almaya çalışıyoruz.
Bu fonksiyon, temel taban çizgisi hangi açıda olursa olsun, altına verdiğimiz kalınlıkta grobeton çizecektir. Temelin asla kafa aşağı durmadığını kabul ediyoruz elbette :)

Kolay gelsin...

ProhibiT (19.03.2010 16:21 GMT)

23.03.2010 07:20    

oğlak
kapı ve pencere çizen lispler sitede var
pencere için


Linkleri görebilmek için ÜYE olmalısınız.


kapı için


Linkleri görebilmek için ÜYE olmalısınız.


kolay gelsin.

Önceki Sayfa [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] > 12 < [15] [20] [25] [30] [35] [40] [45] [50] [55] [60] [65] [70] [75] [80] [85] [90] [95] [100] Sonraki Sayfa
Copyright © 2004-2022 SQL: 1.473 saniye - Sorgu: 99 - Ortalama: 0.01488 saniye