RCP GEF Figure erstellen?

lam_tr

Top Contributor
Hallo zusammen,

wieso muss ich eine Figure immer einen Rectangle übergeben. Wenn ich eine Shape male, dann will ich auch nur die Shape darstellen bzw. beim Selektieren nur die Shape markieren, jedoch wird der Rectangle markiert. Kann man es irgendwie umgehen?

Gruss lam
 

Sonecc

Gesperrter Benutzer
Ich verstehe deine Frage glaube ich nicht so ganz. Was willst du umgehen?
Dass ein Shape eine größe braucht?
 

lam_tr

Top Contributor
Hi Sonecc,

wenn ich bei dem Shape den backgroundColor setze, dann macht der Beispielsweise an dem Figure komplette Anpassung der Hintergundfarbe an dem Rectangle und nicht nur an der Shape mit dem gezeichneten Polgons. Oder anders gesagt, wenn ich die Shape selektiere, will ich nicht die Rectangle die um dieses Shape ist selektieren, sondern nur das Polgon oder Polyline selektieren. Und mit dem Selektieren meine ich die Umrandung des Rectangle zum Skallieren oder verschieben.

Gruss lam
 

Sonecc

Gesperrter Benutzer
Figures sind immer viereckig.
Die Form die in ihnen gezeichnet sind, ist ihnen egal. Das gilt auch für das Shape. Das kann ja schließlich nicht wissen, was du da rein zeichnest.

Deswegen werden die SelectionHandles standardmäßig auch immer an den 4 Ecken des Figures platziert.
Willst du andere Positionen für deine SelectionHandles, musst du sie selbst erzeugen.

Dafür muss das Parent Edit Part eine LayoutEditPolicy erhalten, welche die SelectionHandles entsprechend erzeugt.
Ob und wie diese positioniert werden können musst du dann untersuchen. Ich habe bisher nur die SelectionHandles versteckt, aber nicht an bestimmte Positionen gesetzt.
 

lam_tr

Top Contributor
und wie kann man das Selectionhandles verstecken? Grundsätzlich bräuchte ich es auch nicht. Und der Hintergrund eines Shapes, kann es auch transparent gemacht werden (vielleicht mit figure#setOpaque(false)), weil wenn ich zwei Polgyons habe, und die sind von Rectangle überlappend und ich will das untere selektieren, ist es recht schwer es zu erwischen.

Gruss lam
 

Sonecc

Gesperrter Benutzer
Für das verstecken der Handles:

Folgende Struktur vorrausgesetzt:

Code:
ParentEditPart 
    -> Parent of ShapeEditPart

Du musst dann im ParentEditPart folgendes machen:

Java:
	@Override
	protected void createEditPolicies() {
		installEditPolicy(EditPolicy.LAYOUT_ROLE, new XYLayoutEditPolicy() {
			
			@Override
			protected Command getCreateCommand(CreateRequest request) {
				return null;
			}

			@Override
			protected EditPolicy createChildEditPolicy(EditPart child) {
				return new NonResizableEditPolicy() {

					@Override
					protected List<?> createSelectionHandles() {
						if (getHost() instanceof ShapeEditPart) {
							return Collections.EMPTY_LIST;
						}
						return super.createSelectionHandles();
					}
					
				};
			}
			
		});
	}


Zum zweiten:

Und der Hintergrund eines Shapes, kann es auch transparent gemacht werden (vielleicht mit figure#setOpaque(false)), weil wenn ich zwei Polgyons habe, und die sind von Rectangle überlappend und ich will das untere selektieren, ist es recht schwer es zu erwischen.

Schon wieder sehr schwer nachzuvollziehen was du hier möchtest. Ich versuche mich einfach mal.

Du hast 2 Shapes übereinander liegen. Nun willst du ein Shape auswählen (vornehmlich anhand der gezeichneten Fläche). GEF wählt die Shapes aber anhand der Bounds aus (das ist das, was du als Rectangle bezeichnest). Was das mit dem Hintergrund zu tun hat, weiß ich nun nicht, daher bin ich jetzt verwirrt und nicht sicher ob ich dich auch richtig verstanden habe...

Sollte ich aber mit meiner Interpretation richtig liegen und du möchtest, dass nur dann das Figure ausgewählt wird, wenn die gezeichnete Fläche angeklickt wird, dann musst du die Methode Figure#findDescendantAtExcluding(int, int, TreeSearch) überschreiben und entsprechend anpassen.
 
Zuletzt bearbeitet:

lam_tr

Top Contributor
Hi Sonecc, genau das meine ich. Aber wie soll ich die Methode so überschreiben dass sobald das was gezeichnet ist in der Figure auch selektiert wird mit Figure#findDescendantAtExcluding(int, int, TreeSearch), soll ich das mithilfe der Koordinatenposition dann rausfinden?

Gruss lam
 

Sonecc

Gesperrter Benutzer
Ja.
Die Implementierung der Methode kannst du dir ja im Source code anschauen.
Es wird dort überprüft ob der angegebene Punkt innerhalb der ClientArea des Figures liegt.
Statt dieser Prüfung musst du dann prüfen ob der angegebene Punkt innerhalb deines gezeichneten Shapes liegt.

Beispiel für ein Dreieck: (Genutzt wird java.awt.Polygon)

Java:
    Polygon p = new Polygon();

    p.addPoint( 2, 6 );
    p.addPoint( 5, 2 );
    p.addPoint( 8, 6 );

    p.contains(5,2);
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T GMF add anchor Figure Plattformprogrammierung 2
L0MiN Wie kann ich ein Klassendiagramm aus Eclipse heraus erstellen? Plattformprogrammierung 5
B Neuen Server erstellen Plattformprogrammierung 6
Androbin [jMonkeyEngine] Einfaches Modell erstellen Plattformprogrammierung 2
S Wie lauffähige .jar-Datei mit Netbeans für Java3D Anwendung erstellen? Plattformprogrammierung 8
maestr0 WorkingSets programmatisch erstellen Plattformprogrammierung 5
L RCP GEF Animation erstellen? Plattformprogrammierung 6
M RCP Export Feature / JARs signieren / JNLP erstellen mit Buckminster?! Plattformprogrammierung 5
F Verzeichnis mit Xpand erstellen Plattformprogrammierung 2
S RCP Daten aus einem File auslesen, und daraus ein neues Objekt erstellen! Plattformprogrammierung 4
Geeeee (Semi-)Automatisch Target Platform erstellen Plattformprogrammierung 16
S Aus vorhandenem Quellcode das Project erstellen Plattformprogrammierung 2
H Eclipse-Plugin erstellen Plattformprogrammierung 22
B mit eclipse eine PDF erstellen Plattformprogrammierung 1
L PopUpMenu über Extension Points erstellen. Plattformprogrammierung 2
S Versionsprobleme beim Erstellen eines Plugins Plattformprogrammierung 6
T Erstellen eines "Ersetzten Plugin" aus GEF Plattformprogrammierung 2
Spot84 ecore konforme xml datei erstellen Plattformprogrammierung 7
R Eclipse RCP - Plugin erstellen Plattformprogrammierung 2
S GMF erstellen Plattformprogrammierung 19
S GEF in Eclipse Ganymede erstellen Plattformprogrammierung 5
G Jar Datei in Eclipse erstellen mit Ressourcen Ordner Plattformprogrammierung 9

Ähnliche Java Themen


Oben