Meerdere teksten tegelijkertijd aanpassen met 1 klik

Gestart door Arjen, vr 03 02 2017, 12:12:51

Vorige topic - Volgende topic

Arjen

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

gery

AutoCAD 2020 - Windows 10

EddyBeerke

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.
Civil3d 2022, Blender 3.4 gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

Arjen

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.

EddyBeerke

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)
)
Civil3d 2022, Blender 3.4 gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

Arjen

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

EddyBeerke

Civil3d 2022, Blender 3.4 gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

Arjen

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.


jimpie


Arjen

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 )

roy_043

@Arjen:
De code in jouw eerste post vervangt nochtans niet een substring. Heb je deze code ooit getest?

Arjen

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.

roy_043

#12
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.

gery

#13
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.
AutoCAD 2020 - Windows 10

Arjen

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