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

Legen Sie einen Standard-String in GetString ein

  • Ersteller Ersteller Betoniera
  • Erstellt am Erstellt am

Betoniera

Guest
Ich will kofutatis, gp und andere lisp Zauberer.
dass unten ein wesentliches Fragment des Codes ist, der wiederholt eine Zeichenfolge der Beschreibung und eine Referenzzeile schreibt.
wird verwendet, um die Eisen der Stahlbetonabschnitte zu beschreiben. srive mit rechter oder linker Ausrichtung je nach Neigung der Referenzzeile.
der Standard-String ist d8/20 Klammern, aber es kann in Anzug geändert werden.
hier ist die Frage: Ist es möglich, den vordefinierten Druck des Strings in der Anforderung des Getstrings zu erhalten, so dass Sie es ändern können, ohne es erneut zu schreiben?
zum Beispiel kann ich die geschriebenen d8/20 Klammern bereits vorbereitet bekommen, so dass, wenn ich Klammern d10/25 cabio nur die letzten Buchstaben einfügen möchte?
Vielen Dank für alle Vorschläge
Hallo, alle.

;description staff.lsp
(wenn der Wert nil (setq descst "staffe%c8/20"))
(Satz a (Strcat "\nimmetti text <" descst "> > )
descst1 (getstring t a) ; der Parameter t dient zum Einfügen von Leerzeichen im Text
)
(falls (/= descst1") (setq descst descst1)
(setq descst2 (strcat " descst ")
)
(while (= 1 1); Zyklus, aus dem es herauskommt
(Befehl "_color" 3)
(setq p1 (getpoint "\nimmetti punto initial")
p2 (getpoint p1 "\nimmetti punto label ")
)
(Befehl "_line" p1 p2 ")
(f) (Auto p2) (Auto p1)
(Befehl "_text" p2 "" 0 descst2); links schreiben
(Befehl "_text" p2 "" 0 descst2); rechts schreiben
)
;
(princ)
 
Diese Variante des Programms bietet Ihnen den zuletzt eingefügten String.
Code:
(defunc c:staffe)
(princ)

(falls)
(setq descst1 %%c8/20)
)

(princ descst)
(setq descst)"); der Parameter t dient zum Einfügen von Leerzeichen im Text

(falls (equal descst)
(setq descst descst)
)

(setq descst1 descst)
descst (strcat " descst ")
)

(while (setq p1 (getpoint "\nimmetti punto initial: ")))
(setq p2 (getpoint p1 "\nimmetti point label: ')
(Befehl "_line" p1 p2 ")
(vla-put-color (vlax-ename->vla-object (entlast) 3)

(f) (Auto p2) (Auto p1)
(Befehl "_text" p2 "" 0 descst)
(Befehl "_text" p2 "" 0 descst) ; rechts schreiben
)

)

(princ)
)
 
Hallo confutatis.
Ich danke Ihnen für die Antwort, aber die Anfrage war anders (Ich wusste, ich konnte nicht gut erklären, jetzt versuche ich es wieder).
Wenn das Programm ausgeführt wird, wird die Eingabe auf diese Weise benötigt:

Text eingeben <staffe %%c8="" 20="">:

In dieser Situation, wenn ich etwas ändern möchte, muss ich die ganze Reihe wieder eingeben.
Stattdessen möchte ich auf diese Weise eine Eingabeanforderung:

Text < > Klammern %%c8/20

Das heißt, ich möchte, dass die Antwort des Nutzers bereits geschrieben wird, damit wir es möglicherweise ändern können, ohne alles neu eingeben zu müssen.
Dies würde mir Vorteile für lange und wiederholte Saiten geben, wo es vielleicht nur den Durchmesser der Nadeln oder den Schritt ändert
hallo und danke für alle antworten</staffe>
 
Mythos fällt! :biggrin::tongue::redface

Du kannst tun, was du backen willst, aber nicht wie er will. einfach anders zu nähern.
die verschiedenen Komponenten des Endstranges müssen in Abgang aufgeteilt werden.

Pos. (oder sogar Klammer), Diam und Pech müssen als einzelne Strings eingegeben werden. nach der Eingabe "strcat" alle in einem einzigartigen String, um die Subschrift des Textes zu übergeben.
Offensichtlich können Sie in der Eingabephase die vorherigen Werte wiedergeben, so dass, wenn das Eisen gleich bleibt, aber nur der Schritt ändert, Sie an die vorherigen Anforderungen senden müssen und Sie nur die des Schrittes beantworten.
Sie können die zuvor gesetzten Werte (z. Durchmesser: < 16 )
Sie können die Füllzeichen zwischen einem Wert und dem anderen abhängig von den zuvor eingegebenen Werten ändern (z. st.ø8/15" in pos.1-1ø12/25).
Sie können viele Dinge mit lisp...:wink:
 
hallo Kristall, gp und confutatis.
Danke für die Antworten.
Ich dachte, du könntest es nicht tun. Andererseits ist es immer möglich, den geschriebenen String nach seinem Eingang zu kompilieren.
oder einen Schaftstring komponieren. Dann können Sie natürlich mit einem Dialogfeld alles tun.
Ich wollte nur die Erfahrungen vergleichen und sehen, ob es einen "kurzen Weg" gab, den ich nicht wusste, eine Antwort auf die Aufforderung vorzubereiten.
Aber es ist kein wesentliches Problem, denn wir kommen auf andere Weise zum Ergebnis.
Hallo alle, nächstes
 
..................................


...du kannst viele Sachen mit Lisp machen...
Ich stimme zu, aber betoniera fragte, ob "Ist es möglich, den vordefinierten String-Druck in der Anforderung von getstring zu erhalten, so dass Sie ihn bearbeiten können, ohne es erneut zu schreiben?"Das kann nicht geschehen.

um zu viele Anfragen an der Aufforderung zu vermeiden, würde ich die Hypothese Dialogfeld nicht priorisieren, versuchen Sie dieses Beispiel:
Code:
(Defun c:pippo)
(oder alt (setq alt "staffe ø 8/20"))
(falls
(und
(setq tmp (vl-filename-mktemp nil nil ".dcl")
(setq des (offen tmp "w")
(Fortsetzung)
„(
"ferri:dialog"
" initial_focus=\"new\";"
"
" : Text {"
"label = \"descrizione:\"
"Ausrichtung = zentriert;"
"
"
" : edit_box {"
"key=\"new\"
" let_accept=true"
" Breite = 40; "
"fix_width = true; "
"
" : Abstandhalter {}"
" : Abstandhalter {}"
"ok_only"
"}"
)
(write-line line des)
)
(nicht (setq des (close des)))
(< 0 (setq dcl (load_dialog tmp)))
(new_dialog "ferri" dcl)
)
(Prog.)
(Setq neu alt)
(set_tile "neu" neu)
(action_tile "new" "(setq old $value)")
(start_dialog)
)
(princ "\nerror Ladedialog.")
)
(falls (< 0 dcl)
(setq dcl (unload_dialog dcl))
)
(falls Datei tmp)
(vl-file-delete tmp)
)
(princ)
)
Verwenden Sie einfach die Variable neue für die Fortsetzung der Lispe.

Ich denke, es ist interessant, nach Ihren Vorlieben auch den Unterschied des Verhaltens bei Anwesenheit oder nicht von " initial_focus=\"new\";":cool:
 
Hi.
Es wäre benssiom.
Ich habe leider eine gute Schnur mit der Lippe, aber nicht mit den Boxen des Dialogs, so kann ich nicht weiter (variable neu?).
Ich frage zu viel, wenn ich das Programm beenden will?
Ich denke, es kann auch für andere Benutzer nützlich sein.
Wenn du es vervollständigen willst und eine nette Dame nicht zum Essen bringen musst, sage ich dir, was das Programm tun soll.
was ich "vollständig" benutze, ist die folgende.
der Unterschied zu dem beispielhaften, das ich zuvor verrückt habe, liegt in der Kontrolle der Höhe des Textes.
Dies ist die vollständige Liste (in der Regel nicht verwenden defun).

;description staff.lsp
;autocad 2013 17-09-2012

(wenn htds nil (setq htds 2))
(wenn der Wert nil (setq descst "staffe%c8/20"))

(setq snp (getvar "snapomode")
ort (getvar "orthomode")
sc (getvar "dimscale")
a (Strcat "\nheight of text in mm <" (rtos htds) ">: "
ht1 (getreal a)
a (strcat "\nimmetti text <" descst "> > )
descst1 (getstring t a) ; der Parameter t dient zum Einfügen von Leerzeichen im Text
)
(falls (/= ht1 nil) (setq htds ht1))
(falls (/= descst1") (setq descst descst1)
(setq descst2 (strcat " descst ")
ht (* htds 0.1 sc)
)
(Befehl "_setvar" "textsize" ht)

(while)
(Befehl "_setvar" "orthomode" 0)
(Befehl "_setvar" "Snapmode" 0)
(Befehl "_color" 3)
(setq p1 (getpoint "\nimmetti punto initial")
p2 (getpoint p1 "\nimmetti punto label ")
)
(Befehl "_line" p1 p2 ")
(f) (Auto p2) (Auto p1)
(Befehl "_text" p2 "" 0 descst2); links schreiben
(Befehl "_text" p2 "" 0 descst2); rechts schreiben
)
(Befehl "_setvar" snp.)
(Befehl "_setvar" ort)
;

(princ)

mit der Version mit dem Dialogfeld, stattdessen können Sie die Eingabe der "htesto" Variable oben, oberhalb des Schreibens hinzufügen, um standardmäßig bei 2 mm platziert werden.
am Ausgang des Dialogfeldes sollten wir die beiden htesto Variablen und Beschreibung haben.
an diesem Punkt beginnt ein unendlicher Zyklus, wo er fragt:
- Nummer 1 der Beschreibung,
- Punkt 2 Standortbeschreibung,
das Programm zieht die Linie und Beschreibung (rechts oder links),
wieder fragt Punkt 1, 2, zieht die Linie und Beschreibung, so weiter bis zum Esc-Druck.

das Programm ist sehr dick verwendet, um die Eisen der Abschnitte in c.a. zu beschreiben, die ziemlich repetitiv und zahlreich sind, so dass eine bestimmte Geschwindigkeit der Ausführung.

Ich danke Ihnen für das, was Sie tun können.
Hallo alle
 
wenn Sie nützlich sein können: Eingabebox variable Eingabeaufforderung
premis txt = "roberto"
(setq txt)

das Dialogfeld wird den roberto Text bereit für die Bearbeitung präsentieren.

oder
(setq txt (listbox "a" "b" "c" "d")))
die Listbox gibt den Wert der Auswahl zurück.

Diese 2 Funktionen können als Eingabeformular von jedem Punkt der Lisp verwendet werden, String-Werte zurück.

Bye
 

Anhänge

Hallo rpor66
Ich versuchte Listbox: es funktioniert super.
Es ist toll, weil ich die Eingabe aus dem Dialogfeld anstelle der Eingabeaufforderung bekomme.
ist generisch, so können Sie es in jedem Dateiprogramm verwenden, ohne das Dialogfeld neu zu programmieren.
nutzlos hinzufügen, dass die Standard-String jetzt zum Vergnügen editierbar ist, ohne erneut eingeben zu müssen.
Ich werde versuchen, das Programm abzuschließen, um die Verbesserungen zu sehen.
Hallo, danke.
 

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