Sami_1 Opublikowano Niedziela o 12:34 Zgłoś Opublikowano Niedziela o 12:34 Mam plik z bazą boków elementów. Jest tych bloków bardzo dużo... Moim zadaniem jest naniesienie zmian (jakichś opisów) na elementy (w bloku). Chcę jednak zmienić im nazwy, żeby używane w starszych opracowaniach mogły być równolegle. Chodzi o to, że jak blok nazywa się XYZ to chcę mu zmienić nazwę na _XYZ. Wiem, że można to zrobić "ręcznie" przez rename albo menager bloków. Jest to jednak bardzo dużo klikania a bloków jest setki. Czy znacie jakiś sposób jak szybko zmienić nazwy wszystkich bloków z takim czy innym przedrostkiem?
kojacek Opublikowano Niedziela o 19:05 Zgłoś Opublikowano Niedziela o 19:05 To problem stosunkowo prosty do rozwiązania, (oczywiście) za pomocą LISP-a. Poniżej krótki uproszczony kod programu. Wcześniej trzeba załadować bibliotekę CADPL-Pack-v1.lsp (https://kojacek.wordpress.com/2015/11/04/cadpl-pack/) Potem należy załadować dwie poniższe funkcje: ; -------------------------------------------------------------------- ; ; by kojacek 2025 (https://kojacek.wordpress.com) ; ; -------------------------------------------------------------------- ; (defun C:RENBLO (/ %o %n %l %i) (if (setq %l (cd:SYS_CollList "BLOCK" (+ 1 2 4 8))) (progn (if (and (setq %o (getstring T "\nPodaj początek nazwy bloku zmienianego:")) (setq %n (getstring T "\nPodaj przedrostek nowej nazwy:")) ) (if (snvalid %n 1) (progn (setq %i (strlen %o)) (cd:SYS_UndoBegin) (foreach % %l (if (wcmatch % (strcat %o "*")) (jk:BLK_Rename % (strcat %n (substr % (1+ %i) 300)) ) ) ) (cd:SYS_UndoEnd) ) (princ "\nNieprawidłowy ciąg znaków.") ) ) ) (princ "\nW rysunku nie ma bloków.") ) (princ) ) ; -------------------------------------------------------------------- ; (defun jk:BLK_Rename (OldName NewName / ) (if (and (snvalid NewName 1) (not (tblobjname "BLOCK" NewName)) ) (if (tblobjname "BLOCK" OldName) (vla-put-Name (vla-item (cd:ACX_Blocks) OldName) NewName ) ) ) ) ; -------------------------------------------------------------------- ; Następnie wywołać polecenie RENBLO, podać ciąg znaków początku nazwy bloków do zmiany, a potem ciąg znaków którymi będzie on zamieniony... Przykładowo: "OKNO_podwojne - O3_G_Balkonowe" zamieniasz na "0-OK" co ilustrują poniższe obrazy: Przed: oraz po zmianie przez RENBLO: pawmal 1
Sami_1 Opublikowano Poniedziałek o 12:02 Autor Zgłoś Opublikowano Poniedziałek o 12:02 Pierwszą część połknąłem... co tzn "Potem należy załadować dwie poniższe funkcje:" i jak to zrobić?
pawmal Opublikowano Poniedziałek o 12:11 Zgłoś Opublikowano Poniedziałek o 12:11 Proszę skopiować kod i zapisać w notatniku do txt, następnie zmienić rozszerzenie na lsp. Załadować można przez polecenie AP (WCZYTAJAPL).
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się