Salı
AutoCAD, AutoLISP, Programlama, Visual LISPVisual LISP: Yay üzerindeki noktaların kirişe dik izdüşümlerini almak
|
Tüm Visual Lisp sürümleri
Merhaba arkadaşlar,
Bugünkü konumuz bir okuyucumuzun (Naim Yılmaz bey) AutoCAD günlüğünden istediği yardımı sizlerle paylaşmak istedik. En azından sizlerinde ilginizi çeker diyoruz, ve konuya başlıyoruz. Dikkat ettiyseniz yazdığım her kod’da fonksiyonların ismini ve kullanıcıyla olan irtibatı, mesajları İngilizce olarak yazmaya özen gösteriyorum. Bu benim ne kadar ‘gâvurlaşdığımın’ göstergesi olarak algılamayın
. Yazdığımız konuların Daily AutoCAD sitesinde ingilizce olarak sunulduğunu sizler de bilmektesiniz. Böylelikle Lisp programları ve burada gösterilen şekiller ek bir iş olmadan uluslararası bir platformda sunulabilir. İngilizceyi bende tam bilmiyorum, aralarında tek tük yanlışlar olabilir.
Arkadaşımızın yazmak istediği program, bir yay (ARC) nesnesini AutoCAD’de bulunuan MEASURE komutuyla eşit aralıklala bölmek (Şekil.1). Gösterilen nesnenin üzerine noktalar (POINT) komut AutoCAD tarafından kendiliğinden dağıtılır. Buraya kadar Naim bey hatasız kendi başına yazabilmiş. Noktaların miktarın nasıl belirlenir ve yaya bağlantılı olan kirişin üzerine dikey çizgiler (90°) nasıl çizilir (Şekil 2.4) sizlere anlatmaya çalışacağım.
Bir Kirişi çizmek için kullanıcıdan başlangıç ve bitiş nokatsı istenilmesie gerek yok. Bunu yayın özelliğinde bulunan vla-get-StartPoint ve vla-get-EndPoint komutuyla öğreniyor ve sp, ep değişkeninde saklıyoruz (Kod.2)
NOT: Sistem değiskeni PDMOE=35 ve PDSIZE=0 (sıfır) ayarını kontrol edin. Noktalar belirgin bir şekilde ekranda gözükmeye bilir.
_MEASURE komutu kullanılmadan önce AutoCAD veritabanına en son aktarılan nesne belirlenilir (utl:entity:get:last) ve o nesneden sonra eklenilen nesneler bir seçim seti olarak (utl:entity:next) fonksiyounda istenilir (Kod.2 mavi oklar).
Kirişin üzerinde kesişen pp noktaları CAL_OrthoProjectPointToLine fonksiyonu sayesinde (Kod.3) öğrenebilirsiniz (Kırmızı, kalın olarak yazılan fonksiyonlar
“KM-Lib.VLX” kütüphanesinde bulunmakta ve matematiksel işlemler bulundurmakta).
Ondan sonrası basit, vla-AddLine komutuyla dikey çizgiler oluşturulur.
![]() |
![]() |
| Şekil 1 – Ekranda herhangi bir yayı gösterin (ARC nesnesi) |
Şekil 2 – _MEASURE komutuyla oluşturulan sabit aralıklı noktalar (POINT) ve yaya baglantılı bir kiriş. |
![]() |
![]() |
| Şekil 3 – Noktanın merkezi px‘den kirişe dikey çizgiler oluşturuyoruz. Kesiş noktası pp‘yi hesaplamak bu işin püf noktası !!! |
Şekil 4 – Program en son buna benzer bir görüntü sunar. İşimize yaramayan POINT nesneleri silinmiş bulunmakta. |
Command: KM_Measure
>> Makro: "KM_Measure" programed by M. Koçyiğit
>> Please select ARC to measure:(Eşit aralıklara bölmek istediğiniz yayı (ARC) seçin)
>> Specify length of segment <5>: 10(hangi büyüklükte bölmek
istediğinizi bir sayı olarak girin )
>> 13 POINTS are exist ....
Ana Fonksiyon C:KM_Measure kullanıcıdan bir yayın (ARC) seçilmesini ister (Kod.1) ve alt fonksiyon olan Mea-Execute‘ye iletir (Kod.2). Her Ana fonksiyonda olduğu gibi burdada bir *Error* fonksiyonunu bulunduğunu AutoCAD’e belirtildi. Olabilecek herhangi bir hatayı Mea-Error alt fonksiyonu bizlere bildirir.
![]() |
Kod.1 – Ana (main) Fonksiyon “C:KM_MEASURE“ |
![]() |
Kod.2 – Alt Fonksiyon “Mea-Execute“ |
![]() |
Kod.3 – Alt Fonksiyon “Mea-Draw-Each-Point“ |
Mea-GetCurrentSpace fonksiyonun görevi Kod.4) kullanıcının bulunduğu çizim alanını belirlemek. Sizlerinde bildiği Model (Modelspace) alanından hariç birde Layout (Paperspace) alanı (Pafta) bulunmakta. AutoCAD’ın birde multi document yani birden çok dosya açma özelliğine sahip olduğunu katarsak bu işlemin ne kadar gerekli olduğunu anlarız. Aksi taktirde VisualLISP istediğiniz nesneyi başka yere çizer. Fonksiyonumuz geri dönüş değeri (return value) VLA-OBJECT olarak verir.
Örnek olarak sunacak olursak:
#<VLA-OBJECT IAcadModelSpace2 0ea1dabc> (Modelspace)
#<VLA-OBJECT IAcadPaperSpace2 0e708e64> (Paperspace)
![]() |
Kod.4 – Alt Fonksiyon “Mea-GetCurrentSpace“ |
Programda kullanılan Visual-Lisp komutları:
vl-load-com
vlax-get-ACAD-Object
vla-get-ActiveDocument
vla-get-ActiveSpace
vla-get-ModelSpace
vla-get-PaperSpace
vlax-ename->vla-object, vlax-vla-object->ename
vla-get-ObjectName
vla-AddLine
vla-get-Coordinates, vlax-3d-point
vla-get-StartPoint, vla-get-EndPoint
vl-CmdF
Kolay gelsin
(Sorularınızı, yorumlarınızı bekliyoruz!)
İlgili Dosyalar: Measure.rar
Technorati Tags: AutoCAD, Visual LISP, measure
İlgili Yazılar: AutoLISP dersi
Şimdiye kadar 2,440 kere okunmus. Bu hafta: 30 Bu gun: 6 En son: 4 July 2009, 18:15Yazı Etiketleri:
İLGİLİ YAZILAR
POPÜLER
- Çizimlerinizde Kullanabileceğiniz 10 Adet Ağaç Bloğu
07/04/2009 09:10 am
1 Comment - Command: _GROUP
07/04/2009 09:01 am
5 Comments - 289 Adet elektrik sembolü Download köşemizde
07/04/2009 08:34 am
6 Comments - Gerçek mimari planlar üzerinde kanal tasarım usülleri…
07/03/2009 09:50 am
5 Comments - Beyin kanaması
07/02/2009 10:48 pm
96 Comments
ÖNERİLENLER
- Mobilya seçerken dikkat edilmesi gereken püf noktaları
- 3DS Max İle Gerçek Görünümlü Bulut Yapımı
- Halılar hakkında küçük ipuçları
- Gardıropları etkili kullanma yöntemi
- 25 Farklı 3D Tasarım Programı
- Antre mobilyası hakkında bilgi
EN SEVİLENLER
- Atatürk’ün Dış Siyaset Üzerine Sözleri




(5 oy 5.00) - AutoCAD’de Ölçek Kavramı ve Birimleri Anlamak




(4 oy 5.00) - Farenizin Sağ Tuşunu Daha Etkili Kullanın!




(4 oy 5.00) - “Generic Host Process for Win32 Service” Hatası!




(2 oy 5.00) - Autocad 2007′ye ilk Türkçe kitap Gökalp Baykal’dan




(2 oy 5.00)










Nis 3, 2007
Yanıtla
Eline sağlık abi sen bu işi biliyosun
Nis 3, 2007
Yanıtla
teşekkürler.
anlatım güzel olmuş.
merak ettim
resimleri hangi programla düzenlediniz?
kodları resim olarak vermişsiniz kopyalamasınlar diye mi?
Nis 3, 2007
Yanıtla
Begendiğinize sevindim, yorumlarınız için ikinizede teşekkür ederim.
Snagit programıyla güzel calışmalar elde etmek mümkün (http://www.techsmith.com/download/trials.asp)
Lisp kodunu görmek için linke tıklamanız yeterli –>
(İlgili Dosyalar: Measure.rar)
Not: Genelde gizli tutmak istediğim islemleri (alt fonksiyonları) .VLX ekinde bulunan Kütüphanelerde bulunduruyorum.
Eyl 22, 2007
Yanıtla
Muharrem ağabey ellerine sağlık, çok güzel hazırlamışsın. Ben de şu sıralar AutoLISP e merak saldım
May 12, 2009
Yanıtla
Muharrem Bey benzer konuda bir soru sorabilir miyim?