Ortaklarımız: Ant Mekanik , Teknova Shop , Taliasoft

AutoCAD Gunlugu

Üye Girişi

RSS

Autocad Günlüğü RSS besleyicisine üye ol.


Nis 03
Salı
AutoCAD, AutoLISP, Programlama, Visual LISP
Visual 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.

Fig.1   Fig.2
Ş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ş.
 
  Fig.3   Fig.4
Ş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.

Code.1
Kod.1 – Ana (main) Fonksiyon “C:KM_MEASURE
Code.2
Kod.2 – Alt Fonksiyon “Mea-Execute
Code.3
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)

Code.4
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: , ,

İlgili Yazılar: AutoLISP dersi

Read this article in English.

Şimdiye kadar 2,440 kere okunmus. Bu hafta: 30 Bu gun: 6 En son: 4 July 2009, 18:15

1 Yıldız2 Yıldız3 Yıldız4 Yıldız5 Yıldız (Henüz oy verilmemiş)
Loading ... Loading ...
Yazı Etiketleri:

5 Yorum to “ Visual LISP: Yay üzerindeki noktaların kirişe dik izdüşümlerini almak ”
  1. Eline sağlık abi sen bu işi biliyosun

  2. teşekkürler.
    anlatım güzel olmuş.
    merak ettim
    resimleri hangi programla düzenlediniz?

    kodları resim olarak vermişsiniz kopyalamasınlar diye mi? :)

  3. Muharrem Kocyiğit

    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.

  4. Muharrem ağabey ellerine sağlık, çok güzel hazırlamışsın. Ben de şu sıralar AutoLISP e merak saldım :)

  5. serkan kalemcicagatay

    May 12, 2009
    Yanıtla

    Muharrem Bey  benzer konuda bir soru sorabilir miyim?


Yorum bırakın:



All content and source © 2008 Autocad Günlüğü | News Plus wordpress theme brought to you by Zidalgo.