CADsite forum

AutoCAD => Autolisp => Topic gestart door: Arjen op vr 03 02 2017, 12:12:51

Titel: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: Arjen op vr 03 02 2017, 12:12:51
Goedemiddag,

Ik ben op internet een lisp tegengekomen met een find en replace functie.

Citeer(defun c:TRC ; = Text Replace for Complete text/mtext strings, pre-defined content
  (/ tss)(vl-load-com)
  (if (setq tss (ssget "X" (list (cons 1 "aanbrengen"))))
      (mapcar   '(lambda (j)
                     (vla-put-textstring (vlax-ename->vla-object j) "aangebracht"))
                     (mapcar 'cadr (ssnamex tss)))

)
   (princ)
  )   

Nou wil dit lispje aanpassen dat ik meerdere teksten tegelijkertijd kan aanpassen, ipv één zoals nu.

Is dit mogelijk?

groet
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: gery op vr 03 02 2017, 12:20:49
Waarom niet gewoon commando "find" gebruiken?
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: EddyBeerke op vr 03 02 2017, 12:50:50
Citaat van: gery op vr 03 02 2017, 12:20:49
Waarom niet gewoon commando "find" gebruiken?
Waarschijnlijk omdat je dan een exacte string moet opgeven.

@Arjen,
Ja dat kan, maar vereist wel programmeerwerk.
In deze lisp geef je wel een exacte string op en werkt dat hetzelfde als "FIND"
Ik voel aan dat je dát nu net niet wil.
Wat ook kan is de teksten (dus niet MText) selecteren die je wil aanpassen en dan in de propperties venster de "Contents" aanpassen...
Geen lisp voor nodig.
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: Arjen op vr 03 02 2017, 13:07:56
Citaat van: EddyBeerke op vr 03 02 2017, 12:50:50
Waarschijnlijk omdat je dan een exacte string moet opgeven.

@Arjen,
Ja dat kan, maar vereist wel programmeerwerk.
In deze lisp geef je wel een exacte string op en werkt dat hetzelfde als "FIND"
Ik voel aan dat je dát nu net niet wil.
Wat ook kan is de teksten (dus niet MText) selecteren die je wil aanpassen en dan in de propperties venster de "Contents" aanpassen...
Geen lisp voor nodig.

Nou het is gewoon pure luiheid. Eigenlijk wil ik gewoon met één commando al mijn teksten van bijvoorbeeld een legenda en aanpijlingen gewijzigd hebben, zonder alles selecteren en de kans hebben eentje over het hoofd te zien...

Kan ik niet mijn code als het ware kopieren en de waarde vervangen? Want het gaat waarschijnlijk om twee handen vol woorden.
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: EddyBeerke op vr 03 02 2017, 15:32:46
Heb je hier iets aan?
(defun c:TRC_selectie ; = Text Replace for selected items text/mtext strings, pre-defined content
  (/ tss)(vl-load-com)
  (if (setq tss (ssget))
      (mapcar   '(lambda (j)
                     (vla-put-textstring (vlax-ename->vla-object j) "aangebracht"))
                     (mapcar 'cadr (ssnamex tss)))

)
   (princ)
)
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: Arjen op vr 03 02 2017, 15:38:06
Citaat van: EddyBeerke op vr 03 02 2017, 15:32:46
Heb je hier iets aan?
(defun c:TRC_selectie ; = Text Replace for selected items text/mtext strings, pre-defined content
  (/ tss)(vl-load-com)
  (if (setq tss (ssget))
      (mapcar   '(lambda (j)
                     (vla-put-textstring (vlax-ename->vla-object j) "aangebracht"))
                     (mapcar 'cadr (ssnamex tss)))

)
   (princ)
)


Bedankt voor je moeite, maar nee dit zoek ik ook niet.

Als ik niet duidelijk was:

Met één klik:
woord a => woord b
woord c => woord d
woord e => woord f
woord f => woord g
woord h => woord i

snap je het?

groet
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: EddyBeerke op ma 06 02 2017, 08:33:23
Citaat van: Arjen op vr 03 02 2017, 15:38:06snap je het?
Nee.
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: Arjen op ma 06 02 2017, 11:32:31
Citaat van: EddyBeerke op ma 06 02 2017, 08:33:23
Nee.

hahaha oeps!

Nou, ik zou het nog een keer proberen:

Als ik een as-built tekening moet maken, heb ik overal door de ontwerp tekening leaders staan met teksten als 'aanbrengen betonverharding, asfaltverharding, klinkers' etc. Maar voor mijn as-built tekening wil ik hier hebben staan 'aangebracht' ipv 'aanbrengen' en 'herplaatst' ipv 'herplaatsen'.

En omdat dit altijd dezelfde teksten zijn die worden gewijzigd (aanbrengen, herplaatsen, nieuwe, plaatsen etc.), wil ik dit graag met 1 klik doen. Met het huidige script kan ik één woord veranderen. Dus ik wil graag dat mijn script de tekening doorzoekt, en overal waar 'aanbrengen' staat, veranderd in 'aangebracht'. 'herplaatsen' in 'herplaatst' etc.

Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: jimpie op ma 06 02 2017, 12:48:04
Dit kan je toch perfect doen met FIND command
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: Arjen op ma 06 02 2017, 13:27:32
Citaat van: jimpie op ma 06 02 2017, 12:48:04
Dit kan je toch perfect doen met FIND command

klopt! Maar dan kost het me 5 minuten. Ik wil het met één klik. (ik zei al eerder, this puur uit luiheidsredenen :p )
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: roy_043 op ma 06 02 2017, 13:48:07
@Arjen:
De code in jouw eerste post vervangt nochtans niet een substring. Heb je deze code ooit getest?
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: Arjen op ma 06 02 2017, 13:49:18
Citaat van: roy_043 op ma 06 02 2017, 13:48:07
@Arjen:
De code in jouw eerste post vervangt nochtans niet een substring. Heb je deze code ooit getest?

Ja! De lisp werkt perfect.
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: roy_043 op ma 06 02 2017, 13:54:45
Citaat van: Arjen op ma 06 02 2017, 13:49:18
De lisp werkt perfect.
Dat lijkt mij onmogelijk. De Lisp is i.i.g. niet in staat om de tekst "aanbrengen betonverharding" te vervangen door "aangebracht betonverharding". Er is iets bijzonders aan de hand dat je nog niet hebt vermeld. Ik adviseer je om een voorbeeld dwg te posten.
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: gery op ma 06 02 2017, 21:11:17
ff voortgebreid op de aangeleverde code:

(vl-load-com)

(defun TRC ( %from %to / #tss )
  (if (setq #tss (ssget "X" (list (cons 1 %from))))
    (mapcar '(lambda (j)
       (vla-put-textstring (vlax-ename->vla-object j) %to))
       (mapcar 'cadr (ssnamex #tss)))
  )
  (princ)
)

(TRC "aanbrengen" "aangebracht")
(TRC "herplaatsen" "herplaatst")


Werkt enkel voor volledige strings.
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: Arjen op di 07 02 2017, 10:40:26
Citaat van: gery op ma 06 02 2017, 21:11:17
ff voortgebreid op de aangeleverde code:

(vl-load-com)

(defun TRC ( %from %to / #tss )
  (if (setq #tss (ssget "X" (list (cons 1 %from))))
    (mapcar '(lambda (j)
       (vla-put-textstring (vlax-ename->vla-object j) %to))
       (mapcar 'cadr (ssnamex #tss)))
  )
  (princ)
)

(TRC "aanbrengen" "aangebracht")
(TRC "herplaatsen" "herplaatst")


Werkt enkel voor volledige strings.

Na 'defun' heb ik nog C: gezet, krijg de volgende melding:

; error: too few arguments
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: gery op di 07 02 2017, 10:53:55
Citaat van: Arjen op di 07 02 2017, 10:40:26
Na 'defun' heb ik nog C: gezet, krijg de volgende melding:

; error: too few arguments
Dan moet je de laatste 2 regels ook aanpassen naar
(command "TRC" "..." "...")
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: roy_043 op di 07 02 2017, 11:29:30
Citaat van: gery op di 07 02 2017, 10:53:55
Dan moet je de laatste 2 regels ook aanpassen naar
(command "TRC" "..." "...")
:shock:
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: EddyBeerke op di 07 02 2017, 11:43:00
zonder de "C:" na defun is het een functie die je aanroept met:
(TRC "aanbrengen" "aangebracht")

Je kunt dan dit in een knop zetten.
Als je er wel c:trc van maakt kan dat ook maar is minder handig, je roep tenslotte een functie aan geen commando!

Het zou dan ook dit moeten worden:
(C:TRC "YYY" "XXX")
i.p.v.
Citaat van: roy_043 op di 07 02 2017, 11:29:30
(command "TRC" "..." "...")
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: gery op di 07 02 2017, 12:16:05
Citaat van: roy_043 op di 07 02 2017, 11:29:30
:shock:
(vl-load-com)

(defun c:TRC ( %from %to / #tss )
  (if (setq #tss (ssget "X" (list (cons 1 %from))))
    (mapcar '(lambda (j)
       (vla-put-textstring (vlax-ename->vla-object j) %to))
       (mapcar 'cadr (ssnamex #tss)))
  )
  (princ)
)

(c:TRC "aanbrengen" "aangebracht")
(c:TRC "herplaatsen" "herplaatst")
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: gery op di 07 02 2017, 12:22:16
Citaat van: EddyBeerke op di 07 02 2017, 11:43:00
Het zou dan ook dit moeten worden:
(C:TRC "YYY" "XXX")
Klopt, ik werk normaal op een nog iets andere manier, vandaar mijn vergissing.
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: Arjen op do 09 02 2017, 07:27:04
Citaat van: gery op di 07 02 2017, 12:16:05
Citaat van: roy_043 op di 07 02 2017, 11:29:30
:shock:
(vl-load-com)

(defun c:TRC ( %from %to / #tss )
  (if (setq #tss (ssget "X" (list (cons 1 %from))))
    (mapcar '(lambda (j)
       (vla-put-textstring (vlax-ename->vla-object j) %to))
       (mapcar 'cadr (ssnamex #tss)))
  )
  (princ)
)

(c:TRC "aanbrengen" "aangebracht")
(c:TRC "herplaatsen" "herplaatst")


hmm, heb blijkbaar nog veel te leren ;)

Hij geeft alleen nog steeds dezelfde error...
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: roy_043 op do 09 02 2017, 09:36:27
Ik denk dat je zoiets zoekt:
(vl-load-com)

(defun TRC ( %from %to / #tss )
  (if (setq #tss (ssget "X" (list (cons 1 %from))))
    (mapcar '(lambda (j)
       (vla-put-textstring (vlax-ename->vla-object j) %to))
       (mapcar 'cadr (ssnamex #tss)))
  )
  (princ)
)

(defun c:Test ()
  (TRC "aanbrengen" "aangebracht")
  (TRC "herplaatsen" "herplaatst")
  (TRC "abc" "def")
  ; ... etc.
  (princ)
)
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: EddyBeerke op do 09 02 2017, 09:59:59
Citaat van: Arjen op do 09 02 2017, 07:27:04
...
Hij geeft alleen nog steeds dezelfde error...

Ik weet niet wat voor error lisp geeft maar bij mij werkt het goed.
Misschien zijn het de hoofdletters in de teksten?
Je moet echt een exacte waarde opgeven.
Dus:
(c:TRC "Aanbrengen" "Aangebracht")
Is echt iets anders dan:
(c:TRC "aanbrengen" "aangebracht")
Porbeer de "oude" CHT eens... komt nog van AutoCAD R14...:
Zie bijlage "CHTEXT.LSP"

Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: Arjen op do 09 02 2017, 10:05:57
Citaat van: roy_043 op do 09 02 2017, 09:36:27
Ik denk dat je zoiets zoekt:
(vl-load-com)

(defun TRC ( %from %to / #tss )
  (if (setq #tss (ssget "X" (list (cons 1 %from))))
    (mapcar '(lambda (j)
       (vla-put-textstring (vlax-ename->vla-object j) %to))
       (mapcar 'cadr (ssnamex #tss)))
  )
  (princ)
)

(defun c:Test ()
  (TRC "aanbrengen" "aangebracht")
  (TRC "herplaatsen" "herplaatst")
  (TRC "abc" "def")
  ; ... etc.
  (princ)
)


BRUUT! Superbedankt!

Zou het ook kunnen als er meerdere woorden in één tekst staan?
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: EddyBeerke op do 09 02 2017, 10:22:28
Wat dacht je van dit:
(vl-load-com)

(defun TRC ( %from %to / #tss )
  (if (setq #tss (ssget "X" (list (cons 1 %from))))
    (mapcar '(lambda (j)
       (vla-put-textstring (vlax-ename->vla-object j) %to))
       (mapcar 'cadr (ssnamex #tss)))
  )
  (princ)
)

(defun c:Test ()
  (TRC "dit is een tekstregel" "dit zijn meerdere woorden")
  ; ... etc.
  (princ)
)


Nogmaals... de string moet exact overeen komen om gevonden te worden... type-fouten zijn niet toegestaan
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: gery op do 09 02 2017, 10:52:48
Citaat van: EddyBeerke op do 09 02 2017, 09:59:59
Citaat van: Arjen op do 09 02 2017, 07:27:04
...
Hij geeft alleen nog steeds dezelfde error...

Ik weet niet wat voor error lisp geeft maar bij mij werkt het goed.
Hier idem.
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: gery op do 09 02 2017, 10:57:06
Citaat van: Arjen op do 09 02 2017, 10:05:57
Zou het ook kunnen als er meerdere woorden in één tekst staan?
Zoals reeds eerder gezegd: "Werkt enkel voor volledige strings."
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: Arjen op do 09 02 2017, 12:41:15
Citaat van: gery op do 09 02 2017, 10:57:06
Citaat van: Arjen op do 09 02 2017, 10:05:57
Zou het ook kunnen als er meerdere woorden in één tekst staan?
Zoals reeds eerder gezegd: "Werkt enkel voor volledige strings."

daarom vraag ik het ook  :wink:
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: gery op do 09 02 2017, 14:24:55
Daarom herhaal ik het nogmaals  :lol:
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: Arjen op do 09 02 2017, 14:46:32
Citaat van: EddyBeerke op do 09 02 2017, 10:22:28
Wat dacht je van dit:
(vl-load-com)

(defun TRC ( %from %to / #tss )
  (if (setq #tss (ssget "X" (list (cons 1 %from))))
    (mapcar '(lambda (j)
       (vla-put-textstring (vlax-ename->vla-object j) %to))
       (mapcar 'cadr (ssnamex #tss)))
  )
  (princ)
)

(defun c:Test ()
  (TRC "dit is een tekstregel" "dit zijn meerdere woorden")
  ; ... etc.
  (princ)
)


Nogmaals... de string moet exact overeen komen om gevonden te worden... type-fouten zijn niet toegestaan

hahaha ja dat snap ik haha

Ik bedoel:

Als ik een tekening heb met 'aanbrengen betonverharding' en 'aanbrengen trottoirtegels' en 'aanbrengen trottoirband' en 'aanbrengen asfaltverharding' etc. Is het dan mogelijk in de lisp alleen het woord 'aanbrengen' te vervangen. Want als ik dus één van de bovenstaande voorbeelden heb, vervangt deze het woord niet, dan doet de lisp het niet.
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: EddyBeerke op do 09 02 2017, 16:45:24
Citaat van: Arjen op do 09 02 2017, 14:46:32
...
Als ik een tekening heb met 'aanbrengen betonverharding' en 'aanbrengen trottoirtegels' en 'aanbrengen trottoirband' en 'aanbrengen asfaltverharding' etc. Is het dan mogelijk in de lisp alleen het woord 'aanbrengen' te vervangen. Want als ik dus één van de bovenstaande voorbeelden heb, vervangt deze het woord niet, dan doet de lisp het niet.
Het kan wel maar dan moet je dus gaan programmeren.
Sneller om het commando "FIND" te gebruiken.
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: roy_043 op do 09 02 2017, 17:19:29
(vl-load-com)

; (String_Subst "aabbaacc" "aa" "xx") => "xxbbxxcc"
(defun String_Subst (str old new)
  (while (vl-string-search old str)
    (setq str (vl-string-subst new old str))
  )
  str
)

(defun TxtSelSubst (old new / ss)
  (if
    (setq ss
      (ssget
        "_X"
        (list
          '(-4 . "<OR")
            '(-4 . "<AND") '(0 . "MTEXT,TEXT") (cons 1 (strcat "*" old "*")) '(-4 . "AND>")
            '(-4 . "<AND") '(0 . "INSERT") '(66 . 1) '(-4 . "AND>")
          '(-4 . "OR>")
        )
      )
    )
    (mapcar
      '(lambda (enm / obj)
        (setq obj (vlax-ename->vla-object enm))
        (if (= "AcDbBlockReference" (vla-get-objectname obj))
          (foreach att (vlax-invoke obj 'getattributes)
            (vla-put-textstring att (String_Subst (vla-get-textstring att) old new))
          )
          (vla-put-textstring obj (String_Subst (vla-get-textstring obj) old new))
        )
      )
      (mapcar 'cadr (ssnamex ss))
    )
  )
)

(defun c:Test ( / doc)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-endundomark doc)
  (vla-startundomark doc)
  (TxtSelSubst "aanbrengen" "aangebracht")
  (TxtSelSubst "Aanbrengen" "Aangebracht")
  (TxtSelSubst "AANBRENGEN" "AANGEBRACHT")
  (TxtSelSubst "herplaatsen" "herplaatst")
  (TxtSelSubst "Herplaatsen" "Herplaatst")
  (TxtSelSubst "HERPLAATSEN" "HERPLAATST")
  (TxtSelSubst "abc" "def")
  (TxtSelSubst "Abc" "Def")
  (TxtSelSubst "ABC" "DEF")
  ; ... etc.
  (vla-endundomark doc)
  (princ)
)
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: gery op do 09 02 2017, 20:10:55
http://www.cadstudio.cz/en/apps/srxtext/ (http://www.cadstudio.cz/en/apps/srxtext/)
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: EddyBeerke op vr 10 02 2017, 08:51:45
 Goed bezig roy_043.  :vreegoe:
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: roy_043 op vr 10 02 2017, 14:55:12
Verbeterde versie...
De functie String_Subst kwam in een oneindige lus terecht als de nieuwe tekst de oude tekst bevatte.
(vl-load-com)

; (String_Subst "aabbaacc" "aa" "xx")   => "xxbbxxcc"
; (String_Subst "aabbaacc" "aa" "xxaa") => "xxaabbxxaacc"
(defun String_Subst (str old new / idx)
  (setq idx 0)
  (while (setq idx (vl-string-search old str idx))
    (setq str (vl-string-subst new old str idx))
    (setq idx (+ idx (strlen new)))
  )
  str
)

(defun TxtSelSubst (old new / ss)
  (if
    (setq ss
      (ssget
        "_X"
        (list
          '(-4 . "<OR")
            '(-4 . "<AND") '(0 . "MTEXT,TEXT") (cons 1 (strcat "*" old "*")) '(-4 . "AND>")
            '(-4 . "<AND") '(0 . "INSERT") '(66 . 1) '(-4 . "AND>")
          '(-4 . "OR>")
        )
      )
    )
    (mapcar
      '(lambda (enm / obj)
        (setq obj (vlax-ename->vla-object enm))
        (if (= "AcDbBlockReference" (vla-get-objectname obj))
          (foreach att (vlax-invoke obj 'getattributes)
            (vla-put-textstring att (String_Subst (vla-get-textstring att) old new))
          )
          (vla-put-textstring obj (String_Subst (vla-get-textstring obj) old new))
        )
      )
      (mapcar 'cadr (ssnamex ss))
    )
  )
)

(defun c:Test ( / doc)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-endundomark doc)
  (vla-startundomark doc)
  (TxtSelSubst "aanbrengen" "aangebracht")
  (TxtSelSubst "Aanbrengen" "Aangebracht")
  (TxtSelSubst "AANBRENGEN" "AANGEBRACHT")
  (TxtSelSubst "herplaatsen" "herplaatst")
  (TxtSelSubst "Herplaatsen" "Herplaatst")
  (TxtSelSubst "HERPLAATSEN" "HERPLAATST")
  (TxtSelSubst "abc" "def")
  (TxtSelSubst "Abc" "Def")
  (TxtSelSubst "ABC" "DEF")
  ; ... etc.
  (vla-endundomark doc)
  (princ)
)
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: Arjen op ma 20 02 2017, 11:00:43
Citaat van: roy_043 op vr 10 02 2017, 14:55:12
Verbeterde versie...
De functie String_Subst kwam in een oneindige lus terecht als de nieuwe tekst de oude tekst bevatte.
(vl-load-com)

; (String_Subst "aabbaacc" "aa" "xx")   => "xxbbxxcc"
; (String_Subst "aabbaacc" "aa" "xxaa") => "xxaabbxxaacc"
(defun String_Subst (str old new / idx)
  (setq idx 0)
  (while (setq idx (vl-string-search old str idx))
    (setq str (vl-string-subst new old str idx))
    (setq idx (+ idx (strlen new)))
  )
  str
)

(defun TxtSelSubst (old new / ss)
  (if
    (setq ss
      (ssget
        "_X"
        (list
          '(-4 . "<OR")
            '(-4 . "<AND") '(0 . "MTEXT,TEXT") (cons 1 (strcat "*" old "*")) '(-4 . "AND>")
            '(-4 . "<AND") '(0 . "INSERT") '(66 . 1) '(-4 . "AND>")
          '(-4 . "OR>")
        )
      )
    )
    (mapcar
      '(lambda (enm / obj)
        (setq obj (vlax-ename->vla-object enm))
        (if (= "AcDbBlockReference" (vla-get-objectname obj))
          (foreach att (vlax-invoke obj 'getattributes)
            (vla-put-textstring att (String_Subst (vla-get-textstring att) old new))
          )
          (vla-put-textstring obj (String_Subst (vla-get-textstring obj) old new))
        )
      )
      (mapcar 'cadr (ssnamex ss))
    )
  )
)

(defun c:Test ( / doc)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-endundomark doc)
  (vla-startundomark doc)
  (TxtSelSubst "aanbrengen" "aangebracht")
  (TxtSelSubst "Aanbrengen" "Aangebracht")
  (TxtSelSubst "AANBRENGEN" "AANGEBRACHT")
  (TxtSelSubst "herplaatsen" "herplaatst")
  (TxtSelSubst "Herplaatsen" "Herplaatst")
  (TxtSelSubst "HERPLAATSEN" "HERPLAATST")
  (TxtSelSubst "abc" "def")
  (TxtSelSubst "Abc" "Def")
  (TxtSelSubst "ABC" "DEF")
  ; ... etc.
  (vla-endundomark doc)
  (princ)
)


Geil! Tnx guys!
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: derockere op wo 30 08 2017, 09:26:48
Ik heb jullie discussie gevolgd en heb gezien dat alles opgelost is.
Nu zit ik wel met een probleempje. Zelf teken ik af en toe in Autocad en ken het bestaan van Lisp-routines.
Nu is mijn vraag hoe moet ik deze Lisp activeren in Autocad?
Die (vl-load-com), is dit een aanroep functie? En wat betekent (defun TxtSelSubst (old new / ss)?
Sorry op dit gebied ben ik nog maar een amateur hoor.
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: EddyBeerke op wo 30 08 2017, 09:43:07
Citaat van: derockere op wo 30 08 2017, 09:26:48
Die (vl-load-com), is dit een aanroep functie?
Ja dit is een functie die de Visual Lisp activeert, zodat je o.a. de functie "vl-string-search" kunt gebruiken.
Citaat van: derockere op wo 30 08 2017, 09:26:48En wat betekent (defun TxtSelSubst (old new / ss)?
defun TxtSelSubst = De functie die in (voor) dit programma gemaakt is.
old new= variabelen die door gegeven moeten worden aan deze functie
/ ss = variabelen die locaal, dus in deze functie gebruikt worden en na gebruik van de functie ophouden te bestaan
==-- EDIT --==
(defun c:Test : Hierin geeft de "c:Test" aan dat het om de functie "Test" gaat en die kan van de commandoregel als commando "Test" aangeroepen kan worden. Hiermee is dus een extra commando gemaakt.
==-- EINDE EDIT --==
Dit alles is misschien lastig te begrijpen als je niet een beetje in het programmeren zit.
Misschien zijn de LISP lessen van Joop wel iets voor je om meer begrip te krijgen wat het inhoud:
https://cadsite.be/lisp/lisp.php
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: gery op wo 30 08 2017, 11:34:20
Citaat van: derockere op wo 30 08 2017, 09:26:48
Ik heb jullie discussie gevolgd en heb gezien dat alles opgelost is.
Nu zit ik wel met een probleempje. Zelf teken ik af en toe in Autocad en ken het bestaan van Lisp-routines.
Nu is mijn vraag hoe moet ik deze Lisp activeren in Autocad?
Die (vl-load-com), is dit een aanroep functie? En wat betekent (defun TxtSelSubst (old new / ss)?
Sorry op dit gebied ben ik nog maar een amateur hoor.
Ik denk dat u best eerst ergens een cursus LISP gaat volgen.
Hoe is het trouwens gesteld met uw kennis van AutoCAD? Want "zelf teken ik af en toe in AutoCAD" doet vermoeden dat ook die kennis niet groot is. En om met LISP te beginnen moet u toch een zekere kennis van AutoCAD zelf hebben.
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: derockere op wo 30 08 2017, 18:34:51
Ik ben begonnen met Autocad in 1988, dit was met Autocad 10, toen nog onder DOS.
Toen heb ik me nog een coprosseccor moeten aanschaffen.
Daarna ben ik voort gegaan met de R14, deze was al héél wat soepeler. Toen heb ik mijn eerste ervaringen opgedaan met Autolisp. Ik heb toen zelf enkele routines gemaakt samen met enkele Scriptfiles.
Nu ben ik op pensioen en heb de beschikking over Autocad 2015.
Hiermee maak ik soms al eens voor mezelf en voor anderen constructie tekeningen, of elektrische schema's.
Het is dus wel een héle tijd geleden dat ik nog eens een Lisproutine heb gebruikt.
Ziezo!
Titel: Re: Meerdere teksten tegelijkertijd aanpassen met 1 klik
Bericht door: derockere op wo 30 08 2017, 18:37:20
Citaat van: EddyBeerke op wo 30 08 2017, 09:43:07
Citaat van: derockere op wo 30 08 2017, 09:26:48
Die (vl-load-com), is dit een aanroep functie?
Ja dit is een functie die de Visual Lisp activeert, zodat je o.a. de functie "vl-string-search" kunt gebruiken.
Citaat van: derockere op wo 30 08 2017, 09:26:48En wat betekent (defun TxtSelSubst (old new / ss)?
defun TxtSelSubst = De functie die in (voor) dit programma gemaakt is.
old new= variabelen die door gegeven moeten worden aan deze functie
/ ss = variabelen die locaal, dus in deze functie gebruikt worden en na gebruik van de functie ophouden te bestaan
==-- EDIT --==
(defun c:Test : Hierin geeft de "c:Test" aan dat het om de functie "Test" gaat en die kan van de commandoregel als commando "Test" aangeroepen kan worden. Hiermee is dus een extra commando gemaakt.
==-- EINDE EDIT --==
Dit alles is misschien lastig te begrijpen als je niet een beetje in het programmeren zit.
Misschien zijn de LISP lessen van Joop wel iets voor je om meer begrip te krijgen wat het inhoud:
https://cadsite.be/lisp/lisp.php


Bedankt voor deze tip! Hier kan ik wel mee voort hoor, dit word een lekkere opfrissing.