• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Skript zur internen Textänderung

  • Ersteller Ersteller Giovanni Scandella
  • Erstellt am Erstellt am

Giovanni Scandella

Guest
Guten Morgen.
Ich hoffe, ich bin nicht bereit, eine Diskussion zu eröffnen, die bereits gelöst ist, aber ich suche nach nicht gefunden...

Ich muss ein Skript erstellen, um verschiedene Texte auf verschiedenen Dateien automatisch zu bearbeiten.
Ich kann Skripte erstellen, um einfache Texte oder Blockattribute zu bearbeiten, aber das Problem ist, dass ich auch "einfache" Texte bearbeiten muss, aber sie sind innerhalb von Blöcken, ohne den Block selbst zu explodieren.

Im Grunde sollte ich die Arbeit "finden und ersetzen" (die auch die Texte in den Blöcken zu finden geht). aber der Fund funktioniert nur mit dem interaktiven Fenster (zumindest scheint es ...) und so kann ich es nicht in die Skripte setzen.

Gibt es einen Befehl, in einem Skript zu verwenden, das mir passt?

Ich hoffe, ich war klar.
autocad 2016 verwenden.

Vielen Dank für diejenigen, die mir einige Tipps geben können.
Tschüss.
 
Code:
(defun chgtextinblock (nomeblocco newtxt oldtxt / acdoc ss und sn x name bd ltxt p)

;(msgbox)

(oder acdoc (setq acdoc (vla-get-activedocument)))

(falls (setq ss (ssget "x" (list (cons 0 "insert"))))
(Länge ss)
(setq sn (sssname ss (setq i (1-i)))))
(wenn nicht (erinnern Sie sich (Setq-Name)))
(Progn)
(Setq l (cons name l))
(vlax-für x)
(setq bd (vla-get-blocks acdoc)))
(wenn (eq (vla-get-objectname x) "acdbtext")
(Progn)
(setq txt (vla-get-textstring x))
(setq p (vl-string-search oldtxt))
(falls (/= p nil)
(vla-put-textstring x newtxt)
)
)
)
)
)
)
)
(princ)
)
(falls ss (vla-regen acdoc acallviewports))
(princ)
)
(chgtextinblock "*" "neuer Text" "abc")
wo "*" der Name des Blocks ist, in diesem Fall alle Blöcke
wenn Sie "mybloc*" suchen alle Blöcke beginnend mit mybloc

wenn im Block ein Text wie "abc text zu ersetzen", der Befehl verwandelt es in "new text"
 
Danke. Rpor66 !!
Aber ich kann es nicht schaffen... Ich bin wahrscheinlich der Tarello!

für meine Bequemlichkeit habe ich Ihre Quelle in den Acad eingefügt. lsp-Datei zusammen mit den anderen Codes und ich habe es leicht geändert, indem interaktiv die drei anfänglichen Variablen eingefügt.
wie es zeigt:

; chgtextinblock 2020_ix_09
; durch rpor66 cad3d.it
; Funktion, Texte innerhalb eines Blocks zu ändern, ohne den Block selbst auszuweiten

(defun chgtextinblock (/ nomeblocco oldtxt newtxt acdoc ss i sn x name bd l txt p)


(Prompt "\name block ? "
(setq nameblock (getstring))


(Prompt "\old text ? "
(setq oldtxt (getstring)

(Prompt "\nuovo testo ? "
(setq newtxt (getstring)



(Druck nomeblocco)
(print oldtxt)
(print newtxt)




(oder acdoc (setq acdoc (vla-get-activedocument))))

(wenn (setq ss (ssget "x" (cons 0 "insert") (cons 2 block name)))
(Repeat (setq i (sslength ss))
(setq sn (ssname ss (setq i (1- i)))))
(falls (nicht (erinnern (Setq-Name) (cdr (assoc 2 (entget sn))))))
(Progn)
(Setq l (cons name l)
(vlax-for x)
(setq bd (vla-item (vla-get-blocks acdoc)))
(wenn (eq (vla-get-objectname x) "acdbtext")
(Progn)
(setq txt (vla-get-textstring x))
(setq p (vl-string-search oldtxt txt))
(falls (/= p nil)
(vla-put-textstring x newtxt)
)
)
)
)
)
)
)
(princ)
)
(vla-regen acdoc acallviewports)
(princ)
)
;; c: Funktionsdefinition.
;
(defun c:chgtextinblock () (chgtextinblock)
(princ " c:chgtextinblock geladen. chgtextinblock.")
(princ)


aus der Starttextleiste die Funktion, ich füge die drei Variablen ein (die richtig zugewiesen sind, sehe ich sie mit dem Druck ...), aber ich bekomme keine Änderung der Texte. nicht einmal jede Fehlermeldung.

Sie haben eine Idee / Vorschlag. Wo bin ich falsch?

Danke noch mal.
 
Es ist immer ich.
Ich berichtige mich: Ich erkannte, dass die Lisp funktioniert für Text, aber es funktioniert nicht für Multiline mtext.
Ist es möglich, den Deckel zu überprüfen, um diese auch zu ändern? (in meinem Dwg sind fast alle mtext...).

Danke für die Verfügbarkeit.
Tschüss.
 
Tut mir leid, aber ich habe eine Störung bemerkt, zumindest scheint es mir so.
falls der zu ersetzende String den gesamten Text nicht bildet, erfolgt der Austausch durch Änderung des gesamten Textes mit dem neuen String.
Ich mache ein Beispiel:
Ich ersetze den Pippo-Text in Pluto.
im dwg habe ich einen Text (innerhalb eines Blocks) mit dem Pip- und Mausinhalt.
das Ergebnis des Austauschs ist pluto statt pluto und Maus

Würden Sie nicht bitte den Deckel begleichen?
Natürlich, wenn du kannst, hast du mir schon einen tollen Job gemacht!
Danke noch mal.
 

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben