Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Diagram Developer Documentation

Revision as of 10:05, 24 May 2016 by Vincent.lorenzo.cea.fr (Talk | contribs) (Implementation)

Snap To Grid Enhancement

By Default Snap To Grid allows to snap on the grid using the top left corner of the figure (in case of Rctangle).

To improve this behavior, you should subclass the GMF Class org.eclipse.gmf.runtime.diagram.ui.tools.DragEditPartsTrackerEx or one of its superclass. Then you must ovveride the method org.eclipse.gef.EditPart.getDragTracker(Request) in the edit part concerned by your specific SnapToGrid.

In Papyrus we change this class to be able to snap on the 4 corners, the four middle and the center of a rectangle. Have a look to these classes to get examples.

  • org.eclipse.papyrus.infra.gmfdiag.common.editpart.NodeEditPart.java
  • org.eclipse.papyrus.infra.gmfdiag.common.snap.PapyrusDragBorderNodeEditPartTrackerEx.java
  • org.eclipse.papyrus.infra.gmfdiag.common.snap.PapyrusDragEditPartsTrackerEx.java
  • org.eclipse.papyrus.uml.diagram.common.editparts.BorderNodeEditPart.java

To improve the connection of the endPoint of the link, Papyrus provides its own EditPolicy (in ConnectionEditPart) : org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.PapyrusConnectionEndEditPolicy.PapyrusConnectionEndEditPolicy, with the role EditPolicy.CONNECTION_ENDPOINTS_ROLE (see this class for details)

Link(s)LF integration

The LinkLF feature (sometimes written LinksLF) has been implemented in GMF Runtime project for Papyrus. LinksLF means Links Look And Feel. This feature concerns several points:

  • snap to grid
  • routers (more particularly Rectilinear Router)
  • managment of floating label
  • bendpoints behavior (and their serialization)
  • management of anchors

Goals

  • Moving the source anchor of a link must not move the target anchor
  • Moving the source anchor of a link must not move the target label
  • Snap to grid must be respected for anchors and bendpoints (more prioritary than the serialized values)
  • Increasing the size of a node, must not move the anchors of the links.
  • Snap to grid must be used when the user drop a link for the anchors and the bendpoints

Causes of the problems

  • source and target anchor reference the location where the user clicks to create the link, and not the start and the end of the link shown to the user. (anchor are serialized in percentage of the size of the parent figure)
  • the bendpoints are serialized as a distance in x/y from the source AND from the target
  • moving the source anchor, the target anchor, the source object, the target object and the bendpoints don't update the others values.

Implementation

This feature is implementing in GMF, with an integration in Papyrus.

  • LinkLFDiagramRootEditPart, provides a specific router
  • SlidableSnapToGridAnchor, a specific anchor, allowing to snap to grid, used by the custom routers., so the figures must support it.
  • LinkLFShapeNodeAnchorDelegate, must be used in EditPart for the method getSourceConnectionAnchor and getTargetConnectionAnchor
  • LinkLFLabelEditPart, for the management of the label for the links
  • LinksLFGraphicalNodeEditPolicy
  • LinkLFNodeFigure
  • some edit policy, others probably exists:
    • AdjustSyntheticBendpointsEditPolicy
    • LinksLFGraphicalNodeEditPolicy
    • AdjustImplicitlyMovedLinksEditPolicy
    • AdjustBorderItemAnchorsEditPolicy

Activation

LinkLF is enabled by the plugin org.eclipse.papyrus.uml.diagram.linklf. This plugin provides specific editpolicies for Diagram (UML and SysML) and manage the anchor delegation.

User tricks

ALT allows to ignore Snap To Grid when your are moving an element


Delete Behaviors (added the 19th of May 2016)

  • Define Behavior for DEL and Shift DEL
Delete From Model (DEL) Delete From Diagram (SHIFT+DEL) Example Delete From Model Action (DEL)
View with semantic Delete Hide Class
View with no semantic, but representing a feature Delete: remove the reference from the feature Hide Comment Link, Constraint Links (context and contrainedElement), DurationObservation and TimeObservation Link remove the link and remove the reference from the feature
View with no semantic Hide Hide  ? remove the link
View with semantic Read Only Forbidden Hide PimitivesTypes::Integer
Metaclass All Diagram (Read-Only) Hide Hide Import Metaclass (Profile Diagram) keep the element imported, destroy the view o the metaclass

Back to the top