AutoLISP ile Sayfa Düzenleri Yaratma ve Bastırma

AutoCADWS veya daha başka dosya barındırma yolları kullanmıyorsanız, başkalarının tasarımlarınızı görmeleri için, Baskı “Plot” AutoCAD kullanmayanların tasarımınız ile iletişim kurmasında kilit bir adımdır.

Birçok kullanıcı direkt olarak PLOT komutunu kullanmaya giderlerken, sayfa düzenlerini ayarlama zahmetine girmezler. Şayet tasarımlarınızın farklı ebatlarda veya farklı biçimlerde çıktısını alma ihtiyacı duyuyorsanız,  sayfa düzenleri bir çizimi bastırmayı daha ahenkli ve daha kolay hale getirebilirler. Aynı yerleşimi veya tasarımı farklı ebatlarda bastırmanın bir nedeni kontrol baskısı ve diğer bir neden de çizimi birden fazla ölçekte bastırma ihtiyacı olabilmektedir.

Not: Bu makalemde yazdığım kod Mac işletim sistemi ActiveX uygulamasını desteklemediği için Mac işletim sistemi üzerinde kurulu olan AutoCAD programlarında çalışmaz.

Page_Setup-1

Aşağıdaki kod bir PC3 dosyası kullanılarak yerleşimin nasıl bastırılacağını göstermektedir. Kod önce baskı için o anki (aktif) yerleşime bir PC3 dosyası iliştirilip iliştirilmediğini kontrol eder. Şayet iliştirilmemişse, DWF6 ePlot.pc3 dosyasını o anki (aktif) baskı aracı olarak iliştirir. Aynı yaklaşımı kullanarak, aktif (geçerli) baskı yapılandırmasını değiştirmeden PUBLISH komutunun çalışma şekline benzer şekilde bir çizimdeki tüm yerleşimlerin PDF veya DWF dosyaları olarak çıktısını alabilirsiniz.

(vl-load-com)
(defun c:QDWF( / doc)
;; [Oanki (Aktif) çizimi alma]
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))

;; [O anki (Aktif) yerleşimi bastırma]
(vla-PlotToDevice (vla-get-Plot doc) “DWF6 ePlot.pc3”)
(princ)
)

Yukarıdaki vla-PlotToDevice fonksiyonu geçerli bir PC3 dosyası arar. Fakat şayet bu yöntem için için bir PC3 dosyası aramasını istemiyorsanız, kod vla-get-ConfigName fonksiyonu ile ulaşılabilen, yerleşime iliştirilmiş olan baskı aracını kullanacaktır.

Not:  vla-PlotToDevice fonksiyonu BACKGROUNDPLOT sistem değişkeni değerinin o anki (aktif) değerini esas alarak baskıyı arka planda veya aşağı küçülterek başlatacaktır.

Yukarıda tek bir yerleşimin nasıl bastırılacağını gördünüz. birden fazla yerleşimi ise vla-SetLayoutsToPlot fonksiyonunu kullanarak bastırabilirsiniz.

(defun c:PLOTALL( / doc)
;; [O anki (aktif) çizimi alma]
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))

(setq lstLayouts nil
arSize 0)

(vlax-for layout (vla-get-layouts doc)
;; [Yerleşime bir baskı aracı (yazıcı) atanıp atanmadığını kontrol etme, şayet atanmadıysa o yerleşim bastırılmaz]
(if (and
(/= (strcase (vla-get-ConfigName layout)) “NONE”)
(= (vla-get-ModelType layout) :vlax-false)
)
(progn
(if (= lstLayouts nil)
(setq lstLayouts (list (vla-get-Name layout)))
(setq lstLayouts (append lstLayouts (vla-get-Name layout)))
)
)
)
)

;; [Bastırılacak tüm yerleşimler için bir dizi yaratma]
(setq arLayouts (vlax-make-safearray vlax-vbString (cons 0 (1- (length lstLayouts)))))

;; [Yerleşim isimlerini diziye ekleme]
(foreach item lstLayouts
(progn
(vlax-safearray-put-element arLayouts arSize item)
(setq arSize (1+ arSize))
)
)

;; [Yerleşimi baskısını cihaza gönderme]
(vla-SetLayoutsToPlot (vla-get-Plot doc) arLayouts)
(vla-PlotToDevice (vla-get-Plot doc))

(princ)
)

Aşağıdaki kod ise, bir isimlendirilmiş sayfa düzeninin nasıl yaratılacağını ve sonrasında bu sayfa düzeninin o anki (aktif) yerleşime nasıl atanacağını göstermektedir.

(defun c:CustomPageSetup()
;; [O anki (aktif) çizimi alma]
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))

;; [Baskı yapılandırmaları kütüphanesini alma]
(setq plotCfgs (vla-get-PlotConfigurations doc))

;; [Sayfa düzeninin hali hazırda mevcut olup olmadığını kontrol etme]
(setq plotCfg (vl-catch-all-apply ‘vla-Item (list plotCfgs “MYPAGESETUP”)))

;; [Şayet sayfa düzeni hali hazırda mevcut ise, değişken VLA-NESNESİ “VLA-OBJECT” tipinde olacaktır]
(if (/= (type plotCfg) ‘VLA-OBJECT)
;; [Sırasıyla model ve kağıt alanı için sayfa düzeni yaratma]
(if (= (getvar “TILEMODE”) 0)
(setq plotCfg (vla-Add plotCfgs “MYPAGESETUP” :vlax-false))
(setq plotCfg (vla-Add plotCfgs “MYPAGESETUP” :vlax-true))
)
)

;;(vla-put-Name plotCfg “BENIM SAYFADÜZENIM”)
(vla-RefreshPlotDeviceInfo plotCfg)

;; [Baskı cihazını ayarlama]
(vla-put-ConfigName plotCfg “DWF6 ePlot.pc3”)

;; [Kağıt ebatını ayarlama]
(vla-put-CanonicalMediaName plotCfg “A1_(841_x_594_milimetre)”)

;; [Baskı birimlerini ayarlama (inç, milimetre piksel)
(vla-put-PaperUnits plotCfg acMilimeters)

;; [Ne bastırılacağını ayarlama
;; – If using acView, set the ViewToPlot property
;; – If using acWindow, call GetWindowToPlot
(if (= (getvar “TILEMODE”) 0)
(progn
(vla-put-PlotType plotCfg acLayout)

;; [Ölçeği ayarlama]
(vla-put-UseStandardScale plotCfg :vlax-true)
(vla-put-StandardScale plotCfg ac1_1)
)
(progn
(vla-put-PlotType plotCfg acExtents)

;; [Ölçeği ayarlama]
(vla-put-UseStandardScale plotCfg :vlax-true)
(vla-put-StandardScale plotCfg acScaleToFit)

;; [Baskıyı kağıt üzerinde merkezleme]
(vla-put-CenterPlot plotCfg :vlax-true)
)
)

;; [Kağıt alanı nesnelerini gizleme]
(vla-put-PlotHidden plotCfg :vlax-false)

;; [Baskı merkezini ayarlama]
(setq origin (vlax-make-safearray vlax-vbDouble ‘(0 . 1)))
(vlax-safearray-fill origin (list 0.5 0.5))
(vla-put-PlotOrigin plotCfg origin)

;; [Baskı yönünü ayarlama]
(vla-put-PlotRotation plotCfg ac0degrees)

;; [Görüntü Bakışı “Viewport” baskı davranışını ayarlama]
(vla-put-PlotViewportBorders plotCfg :vlax-false)
(vla-put-PlotViewportsFirst plotCfg :vlax-true)

;; [Çizgi kalınlığı davranışını ayarlama]
(vla-put-PlotWithLineweights plotCfg :vlax-true)
(vla-put-ScaleLineweights plotCfg :vlax-true)

;; [Baskı stilleri davranışını ayarlama]
(vla-put-PlotWithPlotStyles plotCfg :vlax-true)
(vla-put-ShowPlotStyles plotCfg :vlax-true)

(if (= (getvar “PSTYLEMODE”) 0)
(vla-put-StyleSheet plotCfg “acad.stb”)
(vla-put-StyleSheet plotCfg “acad.ctb”)
)

;; [Sayfa düzenini o anki (aktif) yerleşime atama]
(vla-CopyFrom (vla-get-ActiveLayout doc) plotCfg)
)

Bu örnek kodun sizi mutlu ettiğini ve işlerinizi kolaylaştıracağını umuyorum.