Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Variabler Loop für Punktauswahl beim Bildzuschnitt

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Variabler Loop für Punktauswahl beim Bildzuschnitt (612 mal gelesen)
Archäologie Bubi
Mitglied
Archäologische Funddokumentation


Sehen Sie sich das Profil von Archäologie Bubi an!   Senden Sie eine Private Message an Archäologie Bubi  Schreiben Sie einen Gästebucheintrag für Archäologie Bubi

Beiträge: 38
Registriert: 09.03.2021

erstellt am: 19. Aug. 2021 17:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 19. Aug. 2021 17:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Archäologie Bubi 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Archäologie Bubi an!   Senden Sie eine Private Message an Archäologie Bubi  Schreiben Sie einen Gästebucheintrag für Archäologie Bubi

Beiträge: 38
Registriert: 09.03.2021

erstellt am: 20. Aug. 2021 17:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 20. Aug. 2021 20:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Archäologie Bubi 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Archäologie Bubi an!   Senden Sie eine Private Message an Archäologie Bubi  Schreiben Sie einen Gästebucheintrag für Archäologie Bubi

Beiträge: 38
Registriert: 09.03.2021

erstellt am: 23. Aug. 2021 10:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz