Aşağıdaki AutoLisp dosya çizimdeki tüm bloklar blok adlarıyla DXF uzantılı olarak ayrı ayrı kaydeder.
Kaydedilecek klasör C:\BLOKLAR olarak belirtilmiştir. Klasör yolunu değiştirebilirsiniz.
Kayıt türü DXF olarak belirtilmiştir. Kodlarda uzantıyı DWG olarak değiştirebilirsiniz.
İlgili sayfalar:
; Çizim dosyasındaki bloklari blok adlarıyla ayrı dosyalara kaydeder
; Mesut Akcan
; 09/08/2024
; makcan@gmail.com
; https://mesutakcan.blogspot.com
(vl-load-com)
(defun c:BLOKKAYDET (/ blokadi bloksayisi dosyaadi kbs klasor uzanti)
(setvar 'cmdecho 0)
(setq
klasor "C:\\BLOKLAR" ; Blokların kaydedileceği klasör
;Dosya uzantısı
uzanti ".dxf" ; DWG uzantılı kayıt için alttaki satırı kullanın
;uzanti ".dwg"
blokSayisi 0 ; Blok sayısı
kbs 0 ; Kaydedilen blok sayısı
)
; Klasörün mevcut olup olmadığını kontrol et
(if (not (vl-file-directory-p klasor))
; Klasör yoksa çık
(progn (alert (strcat klasor " klasörü bulunamadı!"))(exit))
)
; Model alanındaki her varlık için döngü
(vlax-for ent (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
; Eğer varlık bir blok referansı ise,
(if (eq (strcase (vla-get-ObjectName ent)) "ACDBBLOCKREFERENCE")
(progn
; Blok sayısını bir artır
(setq blokSayisi (1+ blokSayisi))
; Blok adını al ve blokAdi değişkenine ata
(setq blokAdi (vla-get-EffectiveName ent))
; Blok dosya yolunu ve adını oluştur ve dosyaAdi değişkenine ata
(setq dosyaAdi (strcat klasor "\\" blokAdi uzanti))
; Eğer dosya mevcut değilse,
(if (not (findfile dosyaAdi))
(progn
; Bloğu belirlenen dosya adı ile kaydet
(if (= uzanti ".dxf")
(command "_.WBLOCK" dosyaAdi "" blokAdi)
(command "_.WBLOCK" dosyaAdi blokAdi)
)
(setq kbs (1+ kbs)) ; Kaydedilen blok sayısını bir artır
)
)
)
)
)
; Sonuç mesajını yazdır
(alert
(strcat "Çizimdeki " (itoa blokSayisi) " adet bloktan "
(itoa kbs) " adedi " klasor
" klasörüne ayrı dosyalar halinde kaydedildi."
)
)
(setvar 'cmdecho 1)
(princ)
)
Hiç yorum yok:
Yorum Gönder