Zobrazit plnou verzi příspěvku: Výměna stylu písma

j.ku
18.06.2008, 16:07
Existuje nějaký inteligentní způsob, jak je možné pomocí příkazu, nebo lispovského prográmku změnit styl písma v daném souboru?
 
Hladiny lze převést pomocí příkazu "_laytrans"
 
Označený kótovací styl "k1_10" lze převést na požadovaný styl  "ČEZ-EDU T 2.5-10" s využitím lispu  např.: 
 
(progn     (prompt "Existuje kótovací styl (k1_10). " )     (setq vkost (ssget "X" '((3 . "k1_10"))))     (command "-dimstyle" "Obnov" "ČEZ-EDU T 2.5-10" "")     (command "-dimstyle" "Použij" "Předchozí" "")     )
 
Styl písma naposledy  vybrané entity lze změnit např. pomocí:
 
(defun C:Moss ( )
  (setq ed (entget (entlast)))                           ;  (1 . "123") (7 . "ISOCP-BPVL") (210 0.0 0.0 1.0)
  (setq oldtext (assoc 7 ed))                                          ;  (1 . "123")
  (setq newtext (cons 7 "ISOCP-BPVL"))       ;  (1 . "Nový text")
  (setq ed (subst newtext oldtext ed))              ; (Náhrada atomů)
  (entmod ed)                                             ; (Výměna stylů )
  )
 
Hromadná výměna stylů písma ovšem nefunguje.
(defun C:NP-S1 ( )
;  Výměna kótovacích stylů
  (progn    
  (setq vss (ssget "X" '((7 . "STANDARD"))))                 ;  Vybrány entity se stylem písma "STANDARD"
  (prompt "Existuje kótovací styl (STANDARD). " )      
  (setq oldtext (cons 7 "STANDARD"))                         ;  (7 . "STANDARD")
  (setq newtext (cons 7 "ISOCP-BPVL"))                       ;  (7 . "ISOCP-BPVL")
  (setq vss (subst newtext oldtext vss))                           ; (Náhrada atomů)
  (entmod vss)
     )
  )
 
Máte prosím někdo nějaký nápad? Díky.
 

chlebovsky
19.06.2008, 08:22
Ale jo, funguje taky, jen je třeba tu změnu hodit do cyklu.
(setq vss (ssget "X" '((7 . "STANDARD")))) 
tímto vytvoříte pouze seznam entit. z toho pak musíte brát položku po položce a měnit.
 
Mělo by to vypadat nějak takto :
(defun C:NP-S1 (/)  ;  Hromadná výměna textových stylů  ;  Nefunguje např. na texty vnořené v blokách
  (setq vss (ssget "X" '((7 . "STANDARD"))))                 ;  Vybrány entity se stylem písma "STANDARD"  (setq vsl (sslength vss))                                  ;  Zjistí počet entit ve výběrové množině  (setq i 0)                                                 ;  Počítadlo  (repeat vsl                                                ;  Začátek cyklu    (setq ent (entget (ssname vss i)))                         ; Zjistí informace o i-té entitě    (setq oldtext (assoc 7 ent))                               ;  (7 . "STANDARD")    (setq newtext (cons 7 "ISOCP-BPVL"))                       ;  (7 . "ISOCP-BPVL")    (setq ent (subst newtext oldtext ent))                     ;  Náhrada atomů    (entmod ent)                                               ;  Oorava entity    (setq i (1+ i))                                            ;  Navýšení počítadla  )                                                          ;  Konec cyklu)
 
při náčítání toho oldtext je lepší to přímo vytáhnout z ent než natvrdo přiřadit, je tady menší ryziko selhání velkých a malých písmen protože ten ssget nebere ohled na malá a velká písmena, furt je to jeden  zázev.
A pak v tom (cons 7 "STANDARD") je problém protože toto už zohledňuje velká a malá, proto je lepší to přímo tahat z toho seznamu pomoci (assoc 7 ent)

j.ku
19.06.2008, 11:30
  Díky za doplnění cyklu.
  Tušil jsem, že tam asi bude chyba.
  I na fóru se mluvilo o tom, že jediná česky psaná učebnice je z minulého století. Vzhledem ke skutečnosti, že je zde jako autor uveden pan Jiří Hlavenka , který prodáním nakladatelství "Computer press" (podle zdrojů z  internetu) bude asi za vodou.
  .... asi ho už nebude trápit problematika Autolispu .... a případné zdroje informací a tipy bude potřebné hledat někde jinde ....