Zobrazit plnou verzi příspěvku: příkaz do AutoLISPu

pavel.w
27.08.2009, 22:53
Dobrý den, s AutoLISPem začínám a potřeboval bych poradit s jednou situací. Mám selection set, ve kterém je několik textových entit, ke kterým potřebuji připojit textovou předponu a příponu.

Martin Bielina
28.08.2009, 16:08
Pokud Vám bude tahle moje rychlovka stačit, tak ať Vám slouží

Přidal jsem tam i dost komentářů, aby to byl opravdu studijní materiál. A taky je ten kód dost ukecaný (tím mám na mysli výpisy na příkazový řádek), aby jste co nejlépe pochopil kdy, jak a co dělá. S laděním jsem se ale moc nezdržoval, takže je to na Vaše riziko.



;doplnění pevně dané předpony a koncovky textovým řetězcům
;funguje na TEXT a MTEXT
;
;

(PRINT "Spouští se příkazem: DOPLN")
(DEFUN c:DOPLN (/ i sel_length ent_sel TextString Predpona Koncovka)

;výběr entit k záměně
(PRINC
    "\nVyber Texty, MTexty k doplnění předpony/koncovky :"
)
(SETQ ent_sel (SSGET '((0 . "TEXT,MTEXT"))));výběr množiny k provedení požadované operace
(SETQ i 0)
(IF (= ent_sel nil);určí počet prvků ve výběru => použít pro operaci cyklu
    (SETQ sel_length 0)
    (SETQ sel_length (SSLENGTH ent_sel))
) ;if
(PRINT (STRCAT (RTOS sel_length 2 0) " TEXTů a MTEXTů"))
(PRINT) ;kontrolní oznámení kolik textů je ve výběru
(SETQ Predpona (GETSTRING "Zadejte předponu <> : "))
(SETQ Koncovka (GETSTRING "Zadejte koncovku <> : "))
(PRINT)
(WHILE (/= i sel_length) ;cyklus na procházení výběru
    (SETQ entlist (ENTGET (SSNAME ent_sel i)))
    (SETQ TextString (CDR (ASSOC 1 entlist)))
; kontrolní tisk - při optimalizaci lze zakomentovat
    (PRINC TextString)
    (PRINC " ==> ")
; slučování původního řetězce a nových požadavků na obsah
    (SETQ TextString (STRCAT Predpona TextString Koncovka))     
    (PRINC TextString)
    (PRINT) ; kontrolní tisk - při optimalizaci lze zakomentovat
;zapsání textu do entity
    (SETQ EntList (SUBST (CONS 1 TextString) (ASSOC 1 entlist) entlist))
    (ENTMOD (SUBST EntList EntList EntList))
    (SETQ i (+ i 1))
) ;while
(PRINT)
) ;konec hlavní funkce
(PRINT)