Benutzerabfrage Punkt

In diesem Forum Fragen und Diskussionen in Deutsch
Forum rules
Foren-Regeln und hilfreiche Informationen

WICHTIG: Bitte zuerst lesen, bevor Sie posten
Chri1
Posts: 54
Joined: Wed Oct 17, 2018 9:00 am

Benutzerabfrage Punkt

Postby Chri1 » Wed Apr 03, 2019 12:40 pm

Hi
Habe mich einige Zeit nicht mit FreeCad beschäftigt - vielleicht steh ich auf der Leitung:
Mit

Code: Select all

Part.makeLine((0,0,0),(500,500,500))
erzeuge ich eine Linie.

Möchte aber vorher die beiden Punkte vom Benutzer anfragen: Was ich suche heißt bei ACAD-Lisp getpoint,
QtGui.QinputDialog.getPoint(... gibt es ja nicht.

Also:

Code: Select all

a = ...("Anfangspunkt eingeben oder Zeigen") ????
e = ...("Endpunkt eingeben oder Zeigen") ????
Part.makeLine(a,e)
LG
Chri1
chrisb
Posts: 19003
Joined: Tue Mar 17, 2015 9:14 am

Re: Benutzerabfrage Punkt

Postby chrisb » Wed Apr 03, 2019 1:33 pm

Ich kann Dir bei Deinem Python-Problem nicht helfen, aber vielleicht erzählst Du etwas mehr. Du willst ja wahrscheinlich bei der Linie nicht aufhören, das kannst Du einfacher haben. UNd manchmal geht die Hilfe schneller in die richtige Richtung, wenn man das Ziel kennt.
reox
Posts: 664
Joined: Sat Aug 13, 2016 10:06 am
Contact:

Re: Benutzerabfrage Punkt

Postby reox » Wed Apr 03, 2019 6:19 pm

Ich glaube einen fix fertigen Qt Dialog für Zahlentupel gibt es nicht, aber du könntest zB ein Textfeld abfragen und den Wert selber splitten oder einen Dialog bauen und drei Textfelder haben.
Chri1
Posts: 54
Joined: Wed Oct 17, 2018 9:00 am

Re: Benutzerabfrage Punkt

Postby Chri1 » Thu Apr 04, 2019 10:25 am

Danke für eure Rückmeldungen.
Habe schon recht viel hier geschrieben gehabt, dann lange telefoniert etc. und dann war ich ausgelogt und Alles weg...
Deswegen schreib ich hier nur mal das Resümee, später poste ich, wozu ich das Ganze brauche.

Wie rufe ich einem Makro einen Menübefehl auf:
z.B. innerhalb des Makros soll Draft-Punkt aufgerufen werden (sodass der Benutzer nicht auf die Punkt-Schaltfläche klicken muss), dann soll das Makro warten, bis der Benutzer den Punkt erledigt hat und dann soll das Makro weiter machen.
Oder ähnlich: Makro soll den Befehl Verschieben starten und gleich den Starpunkt (das Placement des Objektes) eingeben und dann warten, bis der Benutzer den Endpunkt eingegeben hat.

LG
Chri1
Chri1
Posts: 54
Joined: Wed Oct 17, 2018 9:00 am

Re: Benutzerabfrage Punkt

Postby Chri1 » Thu Apr 04, 2019 1:24 pm

Worum es geht:

Ich programmiere ein Energieausweisberechnungsprogramm (C++ und QT), ein Teil davon ist ein CAD zum Modellieren von Gebäuden, das aber nicht wie ein CAD ausschauen soll. (Damit Nicht-CADler nicht abgeschreckt werden).
Derzeit erstelle ich in der FreeCad-Umgebung einen Arbeitsbereich mit den benötigten Schaltflächen (es sollen möglichst wenig sein). Später werde ich dann das Ganze ins Energieausweisprogramm embenden.

Woran ich derzeit gerade knabbere:
Habe eine Schaltfläche „Baukörper“ (Erzeugt ein Prisma). Wenn die gerückt wird
  • Anwender wird nach Länge, Breite, Höhe gefragt und wenn er OK gibt, erscheint das Prisma.
    Das funktioniert an sich, aber
    Das Prisma soll nicht in (0,0) erscheinen, sondern dort wo der Anwender hinklickt und solange mit der Maus (Wie beim Verschieben) mitfahren. – Das funktioniert nicht.
    Er soll nicht auf den Befehl zum Verschieben klicken müssen, nicht das Placement für den Starpunkt anklicken müssen, der Verschiebungsvektor von (0,0) aus soll nicht sichtbar sein sondern nach Klick auf "Baukörper": l, b, h, OK und (Prisma am Mauszeiger hängend) wohin-klick
Dann kommt das Andocken an die bestehende Geometrie:
  • Der Benutzer wird nach einem Starpunkt und einem Endpunkt für die Verschiebung gefragt, klickt entsprechend und eine (rote) Linie wird gezeichnet.
  • Dann wird er nach Start/Endpunkt einer zweiten (grünen) Linie gefragt – Dadurch wird die Drehung festgelegt.
    Wenn er dann das OK gibt, wird es ausgeführt.
(Habe eine Zeit lang arme Nicht-Techniker gequält um heraus zu finden, wie das Handling sein muss, damit sie ohne irgendwelche Vorkenntnisse, ohne Manual sofort wissen, was zu tun ist)

Deswegen meine Frage im vorherigen Beitrag, wie man einen Menübefehl startet, vielleicht wäre das eine Lösung. Oder es gibt bessere Lösungen…

LG
Chri1
reox
Posts: 664
Joined: Sat Aug 13, 2016 10:06 am
Contact:

Re: Benutzerabfrage Punkt

Postby reox » Fri Apr 05, 2019 5:58 pm

Das klingt alles danach als ob du dir einfach einen eigenen QDialog bastelst der einen Punkt abfragt.
Chri1
Posts: 54
Joined: Wed Oct 17, 2018 9:00 am

Re: Benutzerabfrage Punkt

Postby Chri1 » Thu Apr 11, 2019 3:06 pm

QDialoge, wo man z.B. eine Länge etc. eingibt, schaff ich.

Aber bei der Punkteingabe komm ich nicht weiter:
Wie wird das Makro angehalten, dass der Benutzer irgendwohin klicken kann und der Punkt dann für die weitere Bearbeitung zur Verfügung steht?
Also:
Das Makro wird gestartet (z.B mit Schaltfläche)
Es erscheint eine Meldung (mit der Option Abbruch) , dass er irgendwohin klicken soll.
Wenn er geklickt hat (oder Abgebrochen) läuft das Makro weiter


LG
Chi1
User avatar
microelly2
Posts: 4412
Joined: Tue Nov 12, 2013 4:06 pm
Contact:

Re: Benutzerabfrage Punkt

Postby microelly2 » Thu Apr 11, 2019 4:21 pm

Du kannst einen Observer verwenden, das ist ein Skript, der beobachtet, was die Maus grad macht, bei einem bestimmten Ereignis sendet dieser Observer dann die Daten an deinen Dialog
Der Observe muss dazu deinen Dialog kennen.
Der Ablauf im Makro wäre
Dialog erzeugen
Observer mit Lunk auf Dialog starten
Dialog anzeigen
Mausaktion
Im Dialog was anklicken
Dialog schließen und Berechnungen vornehmen


schau mal hier :
https://www.freecadweb.org/wiki/Code_snippets
unter
Observing mouse events in the 3D viewer via Python
Chri1
Posts: 54
Joined: Wed Oct 17, 2018 9:00 am

Re: Benutzerabfrage Punkt

Postby Chri1 » Fri Apr 12, 2019 1:04 pm

Ok, das mit dem Observer funktioniert, liefert aber nicht die Koordinaten im Raum sondern die 2D-Bildschirmkoordinaten.
Nun brauche ich aber die Weltkoordinaten -> Habe das Ganze noch ergänzt mit

Code: Select all

posw = self.view.getPoint(pos)
Wenn es eine Draufsicht ist, stimmen wenigstens die x und y Koordinaten und z = 0
Aber bei einer anderen Ansicht ---?? Da variiert z und x,y dürfte eine Projektion auf die x-y-Ebene sein.

Und wie fange ich den z.B. den Endpunkt einer Linie?
Weil wenn ich den Observer laufen habe, und den FreeCad-Linienbefehl anklicke, wird die neue Linie zwar z.B. beginnend mit dem Endpunkt einer anderen Linie gezeichnet, der Observer liefert aber den Pickpunkt.

Ist zwar alles recht interessant, komme aber nicht so richtig weiter.
Was ich mir wünsche ist die Funktionalität vom Autolisp-Befehl getpoint ...


LG
Chri1
Chri1
Posts: 54
Joined: Wed Oct 17, 2018 9:00 am

Re: Benutzerabfrage Punkt

Postby Chri1 » Mon May 13, 2019 3:27 pm

Hi

Im "Python scripting and macros" bin ich der Sache auf die Spur gekommen:

Code: Select all

https://forum.freecadweb.org/viewtopic.php?f=22&t=36270&p=307863#p307863
LG
Chri1