* E Posta Adresiniz:
* Kodu Girin:

İleti Yazar
13.12.2010 00:30
61290    
ProhibiT

[80] Yetkili

Online Durumu

1469 ileti
İnşaat Mühendisi
Ankara

Merhaba arkadaşlar

Daha önce söz vermiş olduğum bir fonksiyonu bitirdim ve sizlerle paylaşıyorum. Fonksiyon benim çok hoşuma gitti açıkçası. Umarım sizin de ilginizi çeker işinize yarar.

Öncelikle, fonksiyonun ne yaptığını anlatan vido görüntüleri paylaşmak istiyorum:
http://img63.imageshack.us/img63/1010/file5669.mp4

Şimdi de, Fonksiyonu paylaşalım: 174410-crop.rar

Fonksiyonun nasıl yükleneceği ve kullanılacağı ile ilgili yeterli bilgiye sahip olmayan arkadaşlar için;
- Verilen linkten cRop.fas dosyasını AutoCAD klasörünüzün altındaki Supoort klasörüne (c:\Program files\Autodesk\AutoCAD 2011\Support gibi) indirin.
- AppLoad fonksiyonunu kullanarak ya da, komut satırından (load "cRop.fas")<┘ girerek fonksiyonu yükleyin.
- Fonksiyon adı (komut adı): cRop

Fonksiyon çalıştırıldığında, önce bir diyalog penceresi açılarak;
- Kısa bir uyarı ve açıklama
- Temizlenecek objelerin Tüm Çizim veya Seçim Seti olarak belirlenmesi
- Bir sürgü aracılığıyla cRop işlemi uygulanırken hassasiyetin belirlenmesi (100 ile 1000 arasında bir değer)
sağlanır
OK tıklayıp diyalog kutusu kapatıldığında;
- Temizlenecek objeler olarak Seçim Seti tercihini kullandınızsa Seçim setini belirledikten sonra... Tüm çizim tercihini kullandınızsa, doğrudan sınır (boundary) objesini seçmeniz istenir.
- Seçilen Sınır objesi, CircLe, SpLine, eLLipse, PolyLine veya LwPolyLine türünde kapalı bir obje olmalıdır. Seçilen obje bu türlerden birinde değilse yeniden seçmeniz istenir. Seçilen obje bu türden ve fakat kapalı değilse, bir uyarı mesajı verilerek fonksiyondan çıkılır.

Hepsi bu kadar...

Olayın algoritmik ve programatik boyutuyla ilgilenen arkadaşlarımız için.
Kod:

(if (> (atof (substr (getvar "acadver") 1 4)) 18.0)
  (progn (setq 3doosm (getvar "3dosmode")) (setvar "3dosmode" 1))
)
(setq oosm (getvar "osmode")) (setvar "osmode" 0)
Eğer AutoCAD versiyonu AutoCAD 2010 veya eski ise yalnızca Object Snap, yeni bir versiyon ise de, hem Object Snap hem de 3D Object Snap değerleri saklanarak Object snap'ler kapatılır.
Hem fonksiyonun normal çıkışında (normal termination)
Kod:

(setvar "osmode" oosm)
(if (> (atof (substr (getvar "acadver") 1 4)) 18.0) (setvar "3dosmode" 3doosm))
ile... Hem de hata durumunda çıkışta, her iki Object snap değeri de eski hallerine getirilirler.
Kod:

(defun *error* (msg)
  (setvar "osmode" oosm)
  (if (> (atof (substr (getvar "acadver") 1 4)) 18.0) (setvar "3dosmode" 3doosm))
  (if TuR
    (if (wcmatch (strcase msg) "*EXIT*") (princ (strcat "\n*** Kapalı bir " TuR " seçilmelidir. *** \n" msg)) (princ msg))
  )
  (command "undo" "e")
  (prin1)
)
şeklinde Object snap değerleri kaybedilmezler. Error trap fonksiyonu aynı zamanda kapalı olmayan obje seçilmesi durumunda, uyarı mesajıyla çıkılmasını sağlar.

Algoritmayı oluştururken karşılaştığım problemler ve çözüm yolları ile ilgili bazı ipuçları paylaşmak istiyorum.

- Bir objeyi break ettiğimizde (bir noktadan ikiye böldüğümüzde) start point tarafında kalan kısmı fonksiyona giren entity name olarak kalıyor. Break Point'ten objenin End Point tarafına doğru olanı Last entity (entlast) oluyor.
Kod:

(setq PnTs (vlax-safearray->list (vlax-variant-value (vla-intersectwith (vlax-ename->vla-object (cdr (assoc -1 bnDRy))) (vlax-ename->vla-object (entlast)) 0))))
şeklinde (vla-intersectwith... fonksiyonunu kullandığımızda, ele alınan 2 objenin bütün intersection noktaları PnTs değişken isimli listeye alınıyor. Bu intersection noktaları, öncelikle x koordinatlarına, x'leri eşitse y koordinatlarına, y'leri de eşitse z koordinatlarına göre, küçükten büyüğe doğru sıralanıyorlar. z koordinatları da eşitse zaten tek bir intersection point var demektir.

- Seçilen boundary objesinin kapalı olup olmadığını kontrol etmek için;
-- Obje adı Circle ise zaten kapalı demektir, break ya da trim edilmiş circle objelerinin adı Arc oluyor.
Kod:

(setq KpL (+ (cdr (assoc 41 bndry)) (cdr (assoc 42 bndry))))
(while (> KpL pi) (setq KpL (- KpL pi)))
(if (/= KpL pi) (exit))
-- ELLipse objesinin başlangıç ve bitiş açıları arasındaki fark pi sayısının katlarından farklı ise eLLipse açıktır, aksi durumda kapalıdır.
Kod:

(if (< (- (length bnDRy) (length (vl-remove (assoc 10 bndry) bndry))) 2) (exit))
-- SpLine objesinin başlangıçtaki (assoc 10... değeri 2 den az tekrarlanıyorsa (başlangıç ve bitiş noktaları aynı değilse) SpLine objesi kapalı değildir.
Kod:

(setq KpL (cdr (assoc 70 bnDRy))) (while (> KpL 2) (setq KpL (- KpL 2))) (if (= KpL 0) (exit))
-- PoLyLine (2D old type PoLyLine) objesinin (assoc 70...'in sayısal değeri tek ise obje kapalıdır, çift ise açıktır (0 da çift bir sayıdır)
Kod:

(if (= (cdr (assoc 70 bnDRy)) 0) (exit))
-- LwPoLyLine objesinin (assoc 70... değeri 0 ise açık, 1 ise kapalıdır.

Yazar arkadaşlarımızın ilgisini çekebileceği düşüncesiyle paylaşmak istedim...

Eğri hassasiyeti başlangıçta 100 olarak belirlenmiştir, sürgüyü kullanarak bu değeri 1000'e kadar artırabilirsiniz. Hassasiyet değeri olarak genelde 100 yeterlidir. Eğer Boundary olarak seçtiğiniz objede küçük çaplı yaylar (Arc) ya da Spline, poLyLine ve LwPoLyLine türü objelerde dar içbükey bölgeler varsa, hassasiyet değerini artırmak gerekebilir. Söz konusu değeri 1000 olarak belirlediğinizde, sizteminizin gücü ve performansına göre AutoCAD programınız geçici olarak cevapsız duruma düşebilir. Ama çakılmaz Fonksiyon çalışırken, "cannot trim this object" mesajı verebilir telaş etmeyiniz. Text veya bLock türü bir obje trim edilmeye çalışılmıştır, problem çıkmaz...

Herkese Kolay gelsin.


ProhibiT (05.01.2011 22:06 GMT)

Where there is a will, there is a way... Beğenmek için anlamak lazım...

13.12.2010 00:51
61293    
Harbi65

[10] Üstad

Online Durumu

414 ileti
İnş.Tekn. Teknik Ressam
KASTAMONU

Hocam eline sağlık güzel olmuş..
Ciddi bi şekilde kafa yorduğunuzu düşünüyorum... Ayrıntılar içinde ayrıca teşekkürler.

13.12.2010 09:01
61296    
emasi

[5] Uzman

Online Durumu

78 ileti
injiner
Baki

Ellerinize saglik.
Tebrikler

«ŜŦǾק-ҒǏŔỄ»

BİR DƏFƏ YÜKSƏLƏN BAYRAQ, BİR DAHA ENMƏZ

13.12.2010 09:49
61298    
bud_0782

[10] Üstad

Online Durumu

321 ileti
Yapı Öğr.+Teknik Res.
Antalya

hocam tek kelimeleyle mükemmel olmuş.önceki lisp ihtiyacımıza yeterince cevap veremiyordu.ama yazmış olduğunuz bu lisp şahane ve autocadi kilitlemeden, tek yükseklik eğrisi atlamadan mükemmel şekilde kırpma yapıyor.ilginize ve ayırdığınız zamana sonsuz teşekkürler...

~~~~~~~~~~~~~~~~~~~~~~~~
Düşün , hisset, uygula… İşte hepsi bu…
~~~~~~~~~~~~~~~~~~~~~~~~

13.12.2010 10:20
61299    
halilozcakir

[10] Üstad

Online Durumu

545 ileti
Mekanik Teknik Ressam /Teniker
İstanbul

ellerinize sağlık hocam sıhhattli bol bereketli günler ...
sizin yazılarınızı bir yerde toplayıp arşiv yapmayı düşünüyorum...

13.12.2010 11:01
61300    
aslanv

[5] Uzman

Online Durumu

86 ileti
Rest. Y. Mimar
İstanbul

prohibit hocam ellerinize sağlık. Çok teşeşkür ederiz burada ciddi bir emek var. Tanıdığım çoğu kişinin bana sorduğu bir soruydu bu. Yapmanın yolu yok mu diyordu. ben de uzun yoldan extrim falan başlıyordum anlatmaya. Yalnız benim bir gözlemim oldu size aktarayım belki çaresi vardır. Bütün çizim içerisinde diyelim ki circle çizdik ve o alanın içininin kalmasını istiyoruz. Sizin lisp bunu başarıyor ancak eğer blok kesişimi var ise "yani blok circle dışına da taşıyor ise" trimledikten sonraki silme işinde tüm blok siliniyor. Arada bir işlem olarak explode yapıp silse problem olmayacak gibi geliyor. Umarım anlatabilmişimdir.

13.12.2010 20:43
61325    
sahin460

[8] Kıdemli Uzman

Online Durumu

125 ileti
elektrik tekniker
kayseri

çok teşekkür ederim. harika bi çalışma. Fonksiyon şöyle geliştirilebilir mi? Seçilen pline alan içinde kalan textler haricindeki yerler silinebilir mi?


sahin460 (13.12.2010 20:52 GMT)

13.12.2010 21:06
61327    
ProhibiT

[80] Yetkili

Online Durumu

1469 ileti
İnşaat Mühendisi
Ankara

Harbi65 hocam teşekkür ederim, beğenmenize sevindim. Evet ciddi kafa yordum, tek satır yazmadan bir haftayı aşkın bir süre kafamda kurdum... Hafta sonu (ilham geldi demek lazım) Pazar günü oturdum yazdım. Yazması düşünmesi kadar uzun sürmedi açıkçası. Diğer kenar süsü detaylar zaten hazırda vardı, çemeceden çıkarıp çaktım

Teşekkür ederim emasi kardeşim...

bud_0782 teşekkür ederim, işinize yaramasına gerçekten sevindim.

halilozcakir güzel sözlerin için teşekkür ederim. Bahsettiğin gibi bir arşiv yaparsan en çok benim işime yarar herhalde. Şaka bir yana, pek hoş değil ama, burada paylaştığım fonksiyonların pek çoğunu bilgisayarımda saklamıyorum.

aslanv kardeşim teşekkür ediyorum... Gözleminiz doğru. Açıkçası bunu bilinçli olarak yapmıştım. Mesajınızı okuyunca tekrar düşündüm... Bir tek bLock'larda değil boundary üzerine denk gelen Text objeleri gibi trim ya da break edilemeyen objelerde de aynı şey oluyordu. Böyle genel kullanım fonksiyonlarını yazarken, kullancının düzenine hep saygılı olmaya ve o düzene müdahale etmemeye özen gösteriyorum. Kullanıcının bLock'unu explode etmek bu fonksiyonun haddi değil diye düşünüyorum hala. Bunun için bLock veya Text gibi objeleri olduğu gibi bırakacak (trim etmeyecek ama silmeyecek) şekilde değiştirdim ve tekrar yükledim fonksiyonu. Bu hali daha güzel oldu

Herkese Kolay gelsin.

Düzenleme: sahin460 aynı anda yazmışız herhalde, benim mesajım bir kaç saniye ile alta düştü fonksiyonun son hali bahsettiğiniz işlemi yapar sanıyorum.


ProhibiT (13.12.2010 21:13 GMT)

Where there is a will, there is a way... Beğenmek için anlamak lazım...

14.12.2010 03:19
61336    
öğrenci66

[5] Uzman

Online Durumu

65 ileti
teknik ressam
adana

çok teşekkürler , emeklerinize sağlık...

14.12.2010 21:01
61358    
sahin460

[8] Kıdemli Uzman

Online Durumu

125 ileti
elektrik tekniker
kayseri

yazmayayım dedim ya yine rahatsız edeyim sizi prohibit hocam. Ben yine bu lisp ile sorunumu gideremedim.
single line text ile oluşturulmuş yazı dizisi içinden seçtiğim bölümü kesip alan ve diğer kısımları acımasızca silen bir düzenleme yapılabilirmi? İyi çalışmalar

15.12.2010 05:55
61360    
ProhibiT

[80] Yetkili

Online Durumu

1469 ileti
İnşaat Mühendisi
Ankara

Anladığım kadar, bir text gurubunu gazete küpürü keser gibi kesip çıkarmak istiyorsunuz. Görünüşte crop işlemine andırmakla birlikte, Text objeleri break ya da trim edilemediklerinden tamamen farklı bir konu.

Wipeout kullanarak hedeflenen alan dışında kalan kısımları görünmez hale getirebilirsiniz...

Kolay gelsin.

Where there is a will, there is a way... Beğenmek için anlamak lazım...

15.12.2010 09:52
61363    
bud_0782

[10] Üstad

Online Durumu

321 ileti
Yapı Öğr.+Teknik Res.
Antalya

Alıntı
sahin460 :
yazmayayım dedim ya yine rahatsız edeyim sizi prohibit hocam. Ben yine bu lisp ile sorunumu gideremedim.
single line text ile oluşturulmuş yazı dizisi içinden seçtiğim bölümü kesip alan ve diğer kısımları acımasızca silen bir düzenleme yapılabilirmi? İyi çalışmalar



yazıları patlatıp sonra bu lispi kullanabilirsiniz...

~~~~~~~~~~~~~~~~~~~~~~~~
Düşün , hisset, uygula… İşte hepsi bu…
~~~~~~~~~~~~~~~~~~~~~~~~

15.12.2010 10:06
61364    
SENDUR

[10] Üstad

Online Durumu

364 ileti
Mak. Res. Konst. Öğrt. & Makina Müh.
Ankara

Prohibit hocam
eline sağlık çok güzel bir lisp olmuş benimde çok işime yarayacak. çok hızlı bir şekilde inceledim ve bir harita resmi üzrinde denedim ( genelde trim yaparken bile kapanıyorlar bazen ) ama senin yazdığın lisp o koca harita isteğim yeri çıkarıp alıyor ( 3-5 dk içinde ). süper vallahi ellerinden öperim.


SENDUR (15.12.2010 11:35 GMT)

15.12.2010 12:41
61365    
ProhibiT

[80] Yetkili

Online Durumu

1469 ileti
İnşaat Mühendisi
Ankara

Teşekkür ederim SENDUR profilimde yaşımı görünür yapmayayım bari )

Kullanan arkadaşlarımızdan gelen geri bildirimlerde bahsedilmemekle birlikte farkettiğim bir hatayı düzeltip fonksiyonunu yeniden yükledim.

Fonksiyon çalıştırılırken, boundary olarak seçilen objenin tamamı ekranda görünmediği durumlarda hataya sebep oluyordu. Son yapılan düzeltme ile, ister tüm çizim, ister seçim seti tercih edilsin, boundary objesinin seçilebilecek kadar bir kısmı ekranda olması yeterli. Fonksyion önce seçim setine göre zoom alıyor, crop işlemi bittikten sonra da boundary olarak seçilen objeye göre zoom alıp işlem tamamlanıyor.

Kolay gelsin...

Where there is a will, there is a way... Beğenmek için anlamak lazım...

15.12.2010 13:36
61375    
sahin460

[8] Kıdemli Uzman

Online Durumu

125 ileti
elektrik tekniker
kayseri

wipeout komutu ile seçtiğim bölümler görünmez oluyor fakat single line text yazısı içinde bu defa lisp uygulayamıyorum. Asıl sorunum lisp uygulayamamak. Oyüzden break v.b. gibi yazı dizisi içini seçip diğer tarafları acımasızca kesmesini istiyorum. İyi çalışmalar...

15.12.2010 15:39
61383    
ProhibiT

[80] Yetkili

Online Durumu

1469 ileti
İnşaat Mühendisi
Ankara

İnat ve sabırla söylemek zorundayım ki; bu konuyla bir ilgisi yok
Bambaşka bir kavramdan bahsediyoruz... Anlatabileceklerim, anlamak istediklerinizle sınırlı kalıyor. Hoş anlattıklarınızın sınırı da ayrı konu. Muhatabınız fehmedip, kastınızı çözmüşse, keramet sualde değil cevapta diye düşünmek,itibar etmek gerektir.
Alıntı
ProhibiT :
.......
Wipeout kullanarak hedeflenen alan dışında kalan kısımları görünmez hale getirebilirsiniz...
........


... derken, çok net ifade ettiğimi düşünüyorum.
http://img716.imageshack.us/img716/6126/file13964.mp4
Herhangi bir yazar vatandaşın da, bir tek kişinin belki de bir tek kere kullanacağı bir işlem için fonksiyon yazmasını beklemek ne kadar adil olur ki?...

Kolay gelsin...


ProhibiT (17.01.2012 12:59 GMT)

Where there is a will, there is a way... Beğenmek için anlamak lazım...

15.12.2010 17:09
61389    
sahin460

[8] Kıdemli Uzman

Online Durumu

125 ileti
elektrik tekniker
kayseri

Emeğinize sağlık. Zamanınızı ayırıp cevap yazdığınız için tekrar tekrar teşekkür ederim.

16.12.2010 15:30
61399    
kurtsalih

[2] Girişimci

Online Durumu

24 ileti
harita teknikeri
istanbul

Hocam, eline koluna emeğine yüreğine sağlık. Program, ayrıntılar, anlatım herşey muhteşem olmuş.
çok sağol hocam çok...

Et tırnaktan ayrılmaz dediler; söktüler tırnağı yerinden..
Et acı çekti, tırnak hissetmedi...

16.12.2010 15:48
61400    
odrcmn

[3] Kıdemli Girişimci

Online Durumu

27 ileti
topoğraf
bursa

Hocam zekanıza saglık cok güzel ...

Başarılar

16.12.2010 16:00
61402    
ProhibiT

[80] Yetkili

Online Durumu

1469 ileti
İnşaat Mühendisi
Ankara

Teşekkür ederim arkadaşlar...


ProhibiT (17.12.2010 16:15 GMT)

Where there is a will, there is a way... Beğenmek için anlamak lazım...

Copyright © 2004-2018 | Tüm Hakları Saklıdır | 1248 | Site haritası | İstatistikler | Hakkımızda | Kadromuz | Gizlilik | Reklam