Zapis rysunku na wiele plików DXF.

Otrzymaliśmy zapytanie od klienta o możliwość wykonania skryptu, który rozbije projekt na wiele plików DXF, gdzie w każdym z nich będzie tylko jeden element z pliku źródłowego. Skrypt taki może być użyty np do generowania ścieżek dla maszyn numerycznych. Skrypt może być interesującym przykładem wykorzystania funkcji WBlock

(vl-load-com)
 
(setq *ZWCAD* (vlax-get-acad-object))
(setq *docs* (vla-get-documents *ZWCAD*))
 
(defun sel2list (selset / Wynik ileelementow i)
;----------------------------------------------------------
; funkcja zamienia zbiór wskazań na listę obiektów
; Argumenty: zbiór wskazań (selectionset)
; Wynik: lista
;----------------------------------------------------------
 
 (setq ileelementow(sslength selset) )
 (setq i 0 )
 (repeat ileelementow
(setq Wynik (append Wynik (list (vlax-ename->vla-object(ssname selset i) ) )))
(setq i (1+ i ))
 )
 Wynik
)
 
 
(defun XSSGet (tresc / selElems elementy )
  (setq selElems(ssgetfirst ))
  (if (car selElems)
(setq elementy (sel2list (car selElems)))
(progn
  ;(princ tresc )
  (setq elementy(vl-catch-all-apply 'ssget (list )))
  (if (not(vl-catch-all-error-p elementy))
 (progn
   (setq elementy (sel2list elementy ))
 )
)
)  
  )
  elementy
)
 
 
(defun C:ExZapis ( / )
; zapisz
 
(setq  Elementy (XSSGet "Wskaż elementy do zapisu"))
(if Elementy (progn
  (setq katalogZapisu (getfiled "Wskaż katalog gdzie zapisać pliki" "Wskaż katalog" "" 32) ) ; funkcja prosi Użytkownika o wskazanie katalogu, w którym zapisywane będą docelowe pliki
  (if katalogZapisu (progn ; obsługa sytuacji gdy Użytkownik nie wskaże żadnego katalogu i kliknie "Anuluj" albo "x"
(setq katalogZapisu(vl-filename-directory katalogZapisu)) ; wydzielenie ścieżki katalogu ze wskazanego elementu
(setq NazwaPliku 1 ) ;
(setq lastcmdecho (getvar "cmdecho")) ; zapis starej zmiennej dla potrzeb późniejszego przywrócenia
(setvar "cmdecho" 0) ; blokujemy wyświetlanie historii poleceń w  pasku ZWCADa
(foreach % Elementy ; dla każdego zaznaczonego elementu
 (setq SciezkaPliku (strcat katalogZapisu "\\" (itoa NazwaPliku ) ".dxf" )); wygenerowanie pełnej ścieżki dostępu do pliku  
(while (findfile SciezkaPliku) ; weryfikajca czy taki plik już istnieje (generowanie unikatowej nazwy)
(setq NazwaPliku (1+ NazwaPliku ) )
(setq SciezkaPliku (strcat katalogZapisu "\\" (itoa NazwaPliku ) ".dxf" ))
)
 (zapiszElement % SciezkaPliku)
 (setq NazwaPliku (1+ NazwaPliku ) )
)
(setvar "cmdecho" lastcmdecho) ; przywrócenie poprzedniej wartości zmiennej, by nic nie zmieniać w środowisku Klienta
  ))
))
(princ)
)
 
(defun zapiszElement (% SciezkaPliku / )
(print SciezkaPliku) ; wyświetlamy nazwę tworzonego pliku
(command "_-WBLOCK" SciezkaPliku "" "0,0,0" (vlax-vla-object->ename %) "" ) ; zapis do zewnętrznego pliku usuwa element z modelu co nie jest pożądane
(command "_oops" ) ; przywrócenie elementów usuniętych w poprzedniej funkcji, by nie zmieniać rysunku źródłowego
)

Wykonanie w ZWCAD 2015+LISP ExZapis 2015

* Lisp nie jest kompatybilny z ZWCAD Classic