9 Ağustos 2024 Cuma

AutoLisp ile çizimdeki blokları blok adlarıyla DXF dosyaya kaydet

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