| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Variabler Loop für Punktauswahl beim Bildzuschnitt (677 / mal gelesen)
|
Archäologie Bubi Mitglied Archäologische Funddokumentation
Beiträge: 64 Registriert: 09.03.2021 AutoCAD Map 3D 2013 AutoCAD Map 3D 2023 AutoCAD Map 3D 2024 Faro AS-Built / TachyCAD BricsCAD V18 Elcovision ElTheo Agisoft Photoscan Agisoft Metashape Professional 1.7 Agisoft Metashape Professional 2.0
|
erstellt am: 19. Aug. 2021 17:02 <-- editieren / zitieren --> Unities abgeben:
Hallo LISP Gemeinde Ich arbeite an einem Bildmanager, der auf unsere Bedürfnisse zugeschnitten ist. Eine der Funktionen ist der Bild zuschnitt. An sich hatte ich damit keine Probleme. Da die Funktion aber im restlichen Code eingebaut ist (wird über einen Button in DCL gestartet), will das Programm weiter bevor ich alle Punkte wählen konnte (ist gerade natürlich auch nur eine Pause festgelegt). Die Anzahl der Punkte ist aber für jedes Bild anders und ich würde auch gerne die [Close] und [Undo] Funktionen von "Imageclip" verwenden können. Wie könnte eine While Schlaufe aussehen (wenn die das in diesem Umfang überhaupt kann?), damit der User so viele Punkte auswählen kann wie er will und die Schlaufe beendet wird sobald er Schliessen (S) eingibt (oder Zurück für Undo und dann weiter)? Vielen Dank für Tipps die mich der Lösung näherbringen! Der Code-Schnipsel den ich grad habe:
Code: (defun c:J-ImageCut ( / Ent ss ) (setq Ent (entget (car (entsel))) ss (ssadd) ss (ssadd (cdar Ent) ss) );end setq (command "_IMAGECLIP" ss "_NEW" );end command (if (equal 1 (cdr (assoc 280 Ent))) (command "_Yes") );end if (command "_POLYGONAL" pause) ;;Bis hierhin läuft alles gut, solange ich keinen weiteren Code anfüge;;; (while ;;Das war ein versuch der nicht wirklich geklappt hat, aber vielleicht schon näher dran? ;;; (setq Point (getpoint)) ;;; (command Point) ;;; );end while ;;; (command "_Close") );end defun
------------------ ___________________________________________ Bubi spiele, Bubi glücklich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 19. Aug. 2021 17:18 <-- editieren / zitieren --> Unities abgeben: Nur für Archäologie Bubi
Entferne einfach wieder deine 5 ";;;" lade die Funktion neu teste die Funktion. Hilfestellung da die Kleinigkeiten, das Aufhübschen noch nicht implementiert ist:
Auch wenn du das im Schlaf kannst (im Gegensatz zu mir der nie mit Bildern arbeitet), hier und jetzt schläfst du ja nicht, daher: Wenn du das Bild gewählt hast benötigt der Befehl Punkte welche ein geschlossenen Polygon aus geraden Liniensegmenten darstellt. Zum test wähle also einfach mal 4x den Mittelpunkt der Seiten eines Bildes... danach drückst du [ENTER] auf deiner Tastatur. Schreibe uns wie "der Test" verlaufen ist und dann unterhalten wir uns weiter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Archäologie Bubi Mitglied Archäologische Funddokumentation
Beiträge: 64 Registriert: 09.03.2021 AutoCAD Map 3D 2013 AutoCAD Map 3D 2023 AutoCAD Map 3D 2024 Faro AS-Built / TachyCAD BricsCAD V18 Elcovision ElTheo Agisoft Photoscan Agisoft Metashape Professional 1.7 Agisoft Metashape Professional 2.0
|
erstellt am: 20. Aug. 2021 17:23 <-- editieren / zitieren --> Unities abgeben:
Hallo Cadffm Ich habe den Code mit der Auskommentierten While-Schlaufe zuerst natürlich schon probiert (und jetzt nochmals) und ja, Technisch klappt das schon so, aber mit dieser Schlaufe beschränke ich auch die Fähigkeiten von _Imageclip. Ich brauche nicht nur die Punkte, sondern muss auch die gesamte Linie die ich bereits gezogen habe sehen. Ausserdem habe ich so auch nicht die Möglichkeit einen Punkt zurückzusetzen. Ich formuliere die Frage vielleicht mal etwas anders: Kann ich einen Command als Schleife nehmen? Also könnte man festlegen, dass solange der Befehl mit all seinen Funktionen aktiv ist das Makro pausiert bis der Command beendet wird und es erst dann weiter läuft? Oder: Kann man eine Schleife so aufbauen, dass sie mehrere Funktionen hat. Also weiter bei Getpoint (dann brächte ich aber immer noch die Linie), Undo bei "Z" und beenden bei "S"? Ohne diese Funktionen ist die Bearbeitung später leider zu umständlich. Besten Dank und schönes Wochenende ------------------ ___________________________________________ Bubi spiele, Bubi glücklich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 20. Aug. 2021 20:27 <-- editieren / zitieren --> Unities abgeben: Nur für Archäologie Bubi
Hi, das (es läuft) ist ja super! Eigentlich. Ich habe jetzt leider nur Zeit den ersten Teil zu kommentieren, vielleicht hilft ja noch wer anders beim Rest. >>"aber mit dieser Schlaufe beschränke ich auch die Fähigkeiten von _Imageclip." Das stimmt, aber es ist ein guter Schritt gewesen und eine andere Anforderung gab es ja auch nicht. Bis eben. >>"Ich brauche nicht nur die Punkte, sondern muss auch die gesamte Linie die ich bereits gezogen habe sehen." Wenn es nur das wäre, dann wäre das jetzt der Punkt an dem man arbeiten könnte. Da es aber um noch mehr geht muß es wohl ganz anders angegangen werden.
>>"Ich formuliere die Frage vielleicht mal etwas anders: Kann ich einen Command als Schleife nehmen?" Keine Ahnung was "als Schleife" bedeutet, aber in einer Schleife hast du es ja bereits. Wenn du jetzt erst alle Eingaben abfängst, auswertest und je nach Situation weitergibst.. nicht um es kurz zu erklären. GRREAD wäre da ein Schlagwort.
Ein möglicherweise viel einfacherer Weg: CMDACTIVE Eine Schleife hast du ja schon, schau dir mal die die Systemvariable CMDACTIVE an, auch als Suchbegriff zusammen mit while und Command könnte dir eine schnelle Lösung ermöglichen. Hau rein
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Archäologie Bubi Mitglied Archäologische Funddokumentation
Beiträge: 64 Registriert: 09.03.2021 AutoCAD Map 3D 2013 AutoCAD Map 3D 2023 AutoCAD Map 3D 2024 Faro AS-Built / TachyCAD BricsCAD V18 Elcovision ElTheo Agisoft Photoscan Agisoft Metashape Professional 1.7 Agisoft Metashape Professional 2.0
|
erstellt am: 23. Aug. 2021 10:45 <-- editieren / zitieren --> Unities abgeben:
Und Zack, schon haben wir die Lösung! CMDACTIV löst das Problem: Code:
(defun c:J-ImageCut ( / Ent ss ) (setq Ent (entget (car (entsel))) ss (ssadd) ss (ssadd (cdar Ent) ss) );end setq (command "_IMAGECLIP" ss "_NEW" );end command (if (equal 1 (cdr (assoc 280 Ent))) (command "_Yes") );end if (command "_POLYGONAL") (while (> (getvar 'CMDACTIVE) 0) (command pause) );end while );end defun
Dadurch habe ich noch immer freien Zugriff auf die Befehlsfunktionen und kann den Befehl solange ausführen wie ich es gerade brauche. Das mit grread habe ich mir auch kurz angeschaut, habe mich aber nicht weiter in die Argumente eingelesen. Vielleicht hätte es dort also auch noch eine Möglichkeit gehabt, aber passt ja so. Wieder einmal vielen Dank für die hilfreichen Tipps! [Edit] Ich konnte den letzten Beitrag von Cadffm nicht als Lösung markieren, darum markiere ich mal diesen, die Units sollten aber überwiesen sein. ------------------ ___________________________________________ Bubi spiele, Bubi glücklich! [Diese Nachricht wurde von Archäologie Bubi am 23. Aug. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |