Sami_1 Opublikowano 21 Grudnia 2025 Zgłoś Opublikowano 21 Grudnia 2025 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? Cytuj
kojacek Opublikowano 21 Grudnia 2025 Zgłoś Opublikowano 21 Grudnia 2025 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 Cytuj
Sami_1 Opublikowano 22 Grudnia 2025 Autor Zgłoś Opublikowano 22 Grudnia 2025 Pierwszą część połknąłem... co tzn "Potem należy załadować dwie poniższe funkcje:" i jak to zrobić? Cytuj
pawmal Opublikowano 22 Grudnia 2025 Zgłoś Opublikowano 22 Grudnia 2025 Proszę skopiować kod i zapisać w notatniku do txt, następnie zmienić rozszerzenie na lsp. Załadować można przez polecenie AP (WCZYTAJAPL). Cytuj
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.