Visual Lisp Fonksiyonu Nasıl Çağrılır
Tamam, ihtiyacınız olan Visual Lisp özelliğini veya yöntemini (metodunu) tanımladınız; ancak yine de fonksiyonu nasıl çağıracağınızı belirlemelisiniz. Belirtilecek argümanları ve bu argümanların veri tipini bilmeniz gerekir. Önce özelliklere bakalım.
Özellikler
VBA’da tabaka “layer” özelliğinin söz dizimi aşağıdaki şekildedir:
object.Layer veya object.property
object : Tüm çizim nesneleri, öznitelik “attribute” referansları, gruplar. Bu özelliğin uygulanacağı nesne veya nesneler.
Layer : Dizge; okuma-yazma (Grup nesneleri için salt yazılır). Tabakanın “Layer” ismi.
Uyarılar
Bütün varlıkların ilişkili bir tabakası “layer” vardır. Belgede her zaman en az bir tabaka “layer” (tabaka 0) bulunur. Çizgi tiplerinde olduğu gibi, bir varlık için bir “layer” belirleyebilirsiniz. Şayet bir tabaka “layer” belirlemezseniz, geçerli etkin tabaka “current layer” yeni varlık için kullanılır. Şayet varlık için bir tabaka “layer” belirlenirrse, geçerli etkin tabaka “current layer” dikkate alınmaz. Geçerli etkin tabakayı “current layer” ayarlamak veya sorgulamak için ActiveLayer özelliğini kullanın. Her tabakanın “layer”, tabaka “layer” nesnesi aracılığıyla ayarlanıp sorgulanabilen ilişkili özellikleri vardır.
VBA’da aşağıdaki kodu kullanabilirsiniz:
Oldlayer = object.Layer —> tabaka “layer” ismini elde etmek için.
object.Layer = “2” —> tabaka “layer” ismini değiştirmek için.
Visual Lisp, nesne özelliklerini okumak ve güncellemek için fonksiyonlar sunar. Nesne özelliklerini okuyan işlevler vla-get önekiyle adlandırılır ve aşağıdaki söz dizimini gerektirir:
(vla-get-property object)
Örneğin, vla-get-layer object nesnenin üzerinde olduğu tabakayı “layer” geri döndürür.
Visual Lisp Konsoluna “Console” aşağıdakileri girin :
_$ (vl-load-com)_$ (setq acadDocument (vla-get-activedocument (vlax-get-acad-object)))
#<VLA-OBJECT IAcadDocument 00b94e14>
_$ (setq mspace (vla-get-modelspace acadDocument))
#<VLA-OBJECT IAcadModelSpace 01e42444>
_$ (setq apt (getpoint “Specify First Point: “))
(307.86 539.809 0.0)
_$ (setq pt (getpoint “Specify next point: ” apt))
(738.188 479.426 0.0)
_$ (setq myline (vla-addline mspace (vlax-3d-point apt) (vlax-3d-point pt)))
#<VLA-OBJECT IAcadLine 01e81de4>
_$ (setq oldlayer (vla-get-layer myline))
“7”
oldLayer isimli değişken şimdi çizgi nesnenizin tabaka “layer” ismini içermektedir.
Özellikleri güncelleştiren fonksiyonların önüne vla-put koyun ve aşağıdaki sözdizimini kullanın:
(vla-put-property object yeni-değer)
Örneğin, vla-put-layer object yeni- nesnenin tabakasını “layer” değiştirir.
Konsol “Console” veri istemine aşağıdakiler girin:
_$ (vla-put-layer myline “4”)
nil
Çizginizin tabakası “layer” artık tabaka “layer” “4” olarak değişti.
Metotlar
Şimdi de yöntemleri (metotları) inceleyelim. VBA’daki Ofset yönteminin (metodunun) sözdizimi aşağıdaki gibidir:
RetVal = object.Offset(Distance) veya Return Value = object.Method (arguments)
Object : Yay “Arc”, Çember “Circle”, Elips “Ellipse”, Çizgi “Line”, Çizgi kalınlığı “Line weight” Sürekli çizgi “Polyline”, Çubuk “Spline” gibi AutoCAD nesneleridir. Bu yöntemin uygulandığı nesne veya nesneler için sadece Mesafe – Mesafe çift girişini okunur. Burada mesafe nesneyi ofset etmek için gerekli olan mesafedir. Ofset, pozitif veya negatif bir sayı olabilir; ancak sıfıra eşit olamaz. Şayet Ofset mesafesi negatifse, bu daha küçük bir eğri olarak yorumlanır. Daha küçük anlamı yoksa, nesne Dünya Koordinat Sistemi (DKS) “(WCS)” koordinatlarından daha küçük olan X, Y veya Z yönünde kaydırılır.
RetVal : Variant (nesneler dizisi). Offset yöntemi (metodu) sonucu olarak yeni yaratılan nesnelerin dizisi.
VBA’da aşağıdaki şekilde kullanabilirsiniz
offsetObj = object.offset(15.5) bir nesneyi offsetlemek için.
Söz Dizimi Tanımları
“ActiveX and VBA Reference” da kullanılan sözdizimi tanımları Visual Basic kullanıcıları için tasarlanmıştır. VBA Ofset Yöntemini düşünün:
returnvalue = object.Method (arguments)
returnvalue = object.Offset(Distance)
veya bizim örneğimizdeki isimleri (myline) kullanın:
offLine = myline.Offset(15.5)
Visual Lisp’de aynı işlemin sözdizimi şöyledir:
(setq returnvalue (vla-method object argument))
veya kendi isimlerimizi kullanarak:
setq offLine (vla-offset myline 15.5))
Farklı nesnelerin farklı yöntemleri (metotları) vardır ancak aynı ilkeler uygulanır.
Aşağıdaki kodu Konsol “Console” istemine yazın:
_$ (setq offLine (vla-offset myline 15.5))
#<variant 8201 …>
OffLine değişkeni, artık, yeni oluşturulan çizginizin varyant dizisi biçimindeki verilerini içerir.
Özet
Yani özetlerse,
- vla-get- fonksiyonları, özellik değerini almanıza olanak tanıyan her ActiveX Özelliğine karşılık gelir (örneğin, vla-get-Color, bir nesnenin Renk özelliğini alır).
- vla-put– fonksiyonları, özellik değerini güncellemenizi sağlayan her özelliğe karşılık gelir (örneğin, vla-put-Color, bir Nesnelerin renk özelliğini günceller).
- vla- fonksiyonları tüm ActiveX yöntemlerine (metotlarına) karşılık gelir. Yöntemi (Metodu) çağırmak için, bu fonksiyonları kullanın (örneğin, vla-addCircle fonksiyonu addCircle yöntemini (metodunu) çağırır.
Visual Lisp ayrıca, isimleri vlax– ile öneki olan bir dizi ActiveX ile ilgili fonksiyonlar ekler. Bunlar daha genel ActiveX fonksiyonları olup; bunların her biri çok sayıda yöntem (metod), özellik veya nesneye uygulanabilir. Örneğin, vlax-get-property fonksiyonu ile herhangi bir ActiveX nesnesinin herhangi bir özelliğini elde edebilirsiniz.
Bir sonraki derste, bir nesnenin güncellenme için kullanılabilir olup olmadığını ve bir yöntemin (metodun) veya bir özelliğin bir nesne için geçerli olup olmadığını nasıl belirleyeceğimizi inceleyeceğiz.