| Home » Modeling » GMF (Graphical Modeling Framework) » Creating Elliptical Shape
 Goto Forum:|  |  |  |  |  |  |  |  |  |  | 
| Re: Creating Elliptical Shape [message #174272 is a reply to message #174150] | Mon, 25 February 2008 16:37   |  | 
| Eclipse User  |  |  |  |  | Originally posted by: trommas.yahoo.com 
 Toyin Fakorede wrote:
 > Hi Tomas,
 >
 > Many thanks for your help, Tomas. I tried your advice and it worked.
 > Going a step further, what if I want to create an unusual/irregular
 > shape like - a cloud. How do I go about it?
 > I realized that creating other shapes will involve modifying the
 > properties of other shapes e.g rectangle, polygons, ellipse e.t.c But
 > creating a cloud, Im not sure if I can modify other predefined shapes.
 >
 > Please, what do I do?
 
 You have two options:
 1. Create your customshape with template points in the graph, or by code
 like below.
 
 
 In class: xyzEditPart
 public class xyzNodeFigure extends Shape {
 ....
 public xyzNodeFigure() {
 this.setLayoutManager(new StackLayout());					this.addPoint(new
 Point(getMapMode().DPtoLP(50), 				getMapMode().DPtoLP(0)));
 
 this.addPoint(new Point(getMapMode().DPtoLP(100),
 getMapMode().DPtoLP(50)));
 
 this.addPoint(new Point(getMapMode().DPtoLP(50),
 getMapMode().DPtoLP(100)));
 
 this.addPoint(new Point(getMapMode().DPtoLP(0),
 getMapMode().DPtoLP(50)));
 
 this.setForegroundColor(ColorConstants.black);
 this.setBackgroundColor(ColorConstants.green);
 createContents();
 }
 
 2. Since the above 2D method is unsuited to figures like a cloud - you
 could use an svg image. That process is described here:
 
 http://wiki.eclipse.org/GMF_Tutorial_BPMN#Custom_Figures_.28 SVG.29
 
 If you need to create the figure from scratch, Incscape is a great tool.
 
 
 Hope this helps,
 
 Tomas Zijdemans
 |  |  |  |  | 
| Re: Creating Elliptical Shape [message #174989 is a reply to message #174272] | Fri, 29 February 2008 09:43   |  | 
| Eclipse User  |  |  |  |  | Hi Tomas, 
 Thanks for your responses.
 I tried using inkscape and followed the BPMN tutorial. However, I got some
 errors.
 Im posting the java code for you to view, just incase you find any errors:
 The protected IFigure createNodeShape() is the method thats giving errors.
 Please, I need your help. Thanks
 
 package classmodel.diagram.edit.parts;
 
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.PositionConstants;
 import org.eclipse.draw2d.StackLayout;
 import org.eclipse.draw2d.geometry.Dimension;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.EditPolicy;
 import org.eclipse.gef.Request;
 import org.eclipse.gef.commands.Command;
 import org.eclipse.gef.editpolicies.LayoutEditPolicy;
 import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
 import org.eclipse.gef.requests.CreateRequest;
 import
 org.eclipse.gmf.runtime.diagram.ui.editparts.AbstractBordere dShapeEditPart;
 import  org.eclipse.gmf.runtime.diagram.ui.editparts.IBorderItemEdit Part;
 import
 org.eclipse.gmf.runtime.diagram.ui.editpolicies.BorderItemSe lectionEditPolicy;
 import  org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRo les;
 import  org.eclipse.gmf.runtime.diagram.ui.figures.BorderItemLocator ;
 import
 org.eclipse.gmf.runtime.draw2d.ui.render.figures.ScalableIma geFigure;
 import  org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure ;
 import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
 import org.eclipse.gmf.runtime.notation.View;
 
 import  classmodel.diagram.edit.policies.ClassItemSemanticEditPolicy ;
 import classmodel.diagram.part.ClassModelVisualIDRegistry;
 
 /**
 * @generated
 */
 public class ClassEditPart extends AbstractBorderedShapeEditPart {
 
 /**
 * @generated
 */
 public static final int VISUAL_ID = 1001;
 
 /**
 * @generated
 */
 protected IFigure contentPane;
 
 /**
 * @generated
 */
 protected IFigure primaryShape;
 
 /**
 * @generated
 */
 public ClassEditPart(View view) {
 super(view);
 }
 
 /**
 * @generated
 */
 protected void createDefaultEditPolicies() {
 
 super.createDefaultEditPolicies();
 installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,
 new ClassItemSemanticEditPolicy());
 installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy());
 // XXX need an SCR to runtime to have another abstract superclass that
 would let children add reasonable editpolicies
 //
 removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpoli cies.EditPolicyRoles.CONNECTION_HANDLES_ROLE);
 }
 
 /**
 * @generated
 */
 protected LayoutEditPolicy createLayoutEditPolicy() {
 LayoutEditPolicy lep = new LayoutEditPolicy() {
 
 protected EditPolicy createChildEditPolicy(EditPart child) {
 if (child instanceof IBorderItemEditPart) {
 return new BorderItemSelectionEditPolicy();
 }
 EditPolicy result = child
 .getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
 if (result == null) {
 result = new NonResizableEditPolicy();
 }
 return result;
 }
 
 protected Command getMoveChildrenCommand(Request request) {
 return null;
 }
 
 protected Command getCreateCommand(CreateRequest request) {
 return null;
 }
 };
 return lep;
 }
 
 /**
 * @generated NOT
 */
 protected IFigure createNodeShape() {
 URL url =
 FileLocator.find(ClassModelDiagramEditorPlugin.getInstance() .getBundle(),
 new Path("images/Cloud.svg"), null); //$NON-NLS-1$
 return new ScalableImageFigure(RenderedImageFactory.getInstance(url),
 true, true, true);
 }
 
 /**
 * @generated
 */
 public ScalableImageFigure getPrimaryShape() {
 return (ScalableImageFigure) primaryShape;
 }
 
 /**
 * @generated
 */
 protected void addBorderItem(IFigure borderItemContainer,
 IBorderItemEditPart borderItemEditPart) {
 if (borderItemEditPart instanceof ClassNameEditPart) {
 BorderItemLocator locator = new BorderItemLocator(getMainFigure(),
 PositionConstants.SOUTH);
 locator.setBorderItemOffset(new Dimension(-20, -20));
 borderItemContainer.add(borderItemEditPart.getFigure(), locator);
 } else {
 super.addBorderItem(borderItemContainer, borderItemEditPart);
 }
 }
 
 /**
 * @generated
 */
 protected NodeFigure createNodePlate() {
 DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(getMapMode()
 .DPtoLP(40), getMapMode().DPtoLP(40));
 return result;
 }
 
 /**
 * Creates figure for this edit part.
 *
 * Body of this method does not depend on settings in generation model
 * so you may safely remove <i>generated</i> tag and modify it.
 *
 * @generated
 */
 protected NodeFigure createMainFigure() {
 NodeFigure figure = createNodePlate();
 figure.setLayoutManager(new StackLayout());
 IFigure shape = createNodeShape();
 figure.add(shape);
 contentPane = setupContentPane(shape);
 return figure;
 }
 
 /**
 * Default implementation treats passed figure as content pane.
 * Respects layout one may have set for generated figure.
 * @param nodeShape instance of generated figure class
 * @generated
 */
 protected IFigure setupContentPane(IFigure nodeShape) {
 return nodeShape; // use nodeShape itself as contentPane
 }
 
 /**
 * @generated
 */
 public IFigure getContentPane() {
 if (contentPane != null) {
 return contentPane;
 }
 return super.getContentPane();
 }
 
 /**
 * @generated
 */
 public EditPart getPrimaryChildEditPart() {
 return getChildBySemanticHint(ClassModelVisualIDRegistry
 .getType(ClassNameEditPart.VISUAL_ID));
 }
 
 }
 |  |  |  |  |  |  |  |  |  |  | 
| Re: Creating Elliptical Shape [message #175462 is a reply to message #175385] | Tue, 04 March 2008 06:52   |  | 
| Eclipse User  |  |  |  |  | Which version of GMF are you using, and what URL class is imported? (you'll need java.net.URL)
 
 This code works fine with the latest GMF:
 
 URL url = FileLocator.find(Activator.getDefault().getBundle(), new
 Path("images" + IPath.SEPARATOR + "ievent.svg"), null);
 return new
 ScalableImageFigure(RenderedImageFactory.getInstance(url), true, true,
 true);
 
 
 On 3/4/08 4:51 AM, in article
 62ec7bec8c81efd3fc5c6af716d8d6b8$1@www.eclipse.org, "Toyin Fakorede"
 <fakoredejohnson5@yahoo.com> wrote:
 
 > Hi QiuluYUAN,
 > I'm having problems with this line of code:
 > return new ScalableImageFigure(RenderedImageFactory.getInstance(url),
 > true, true, true);
 >
 > The error message being displayed is - The method getInstance(URL) is
 > undefined for the type RenderedImageFactory.
 >
 > Please, help.
 >
 > Or could u mail me your source code for the xxxEditPart.java file.
 >
 > Thanks.
 >
 > Toyin
 >
 >
 |  |  |  |  | 
| Re: Creating Elliptical Shape [message #175501 is a reply to message #175385] | Tue, 04 March 2008 08:25   |  | 
| Eclipse User  |  |  |  |  | Originally posted by: yuanqiulu.163.com 
 The problem I mentioned above has been solved this afternoon.
 The following are my codes(EmptyEditPart.java):
 package webapplication.diagram.edit.parts;
 
 import java.net.URL;
 
 import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.StackLayout;
 
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.EditPolicy;
 import org.eclipse.gef.Request;
 
 import org.eclipse.gef.commands.Command;
 
 import org.eclipse.gef.editpolicies.LayoutEditPolicy;
 import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
 
 import org.eclipse.gef.requests.CreateRequest;
 
 import  org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPa rt;
 
 import  org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRo les;
 
 import  org.eclipse.gmf.runtime.draw2d.ui.figures.ConstrainedToolbar Layout;
 import org.eclipse.gmf.runtime.draw2d.ui.figures.WrapLabel;
 import
 org.eclipse.gmf.runtime.draw2d.ui.render.factory.RenderedIma geFactory;
 import
 org.eclipse.gmf.runtime.draw2d.ui.render.figures.ScalableIma geFigure;
 
 import  org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure ;
 import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
 
 import org.eclipse.gmf.runtime.notation.View;
 
 import
 webapplication.diagram.edit.policies.ClientBrowserItemSemant icEditPolicy;
 
 import  webapplication.diagram.part.WebApplicationDiagramEditorPlugi n;
 import webapplication.diagram.part.WebApplicationVisualIDRegistry;
 
 /**
 * @generated
 */
 public class ClientBrowserEditPart extends ShapeNodeEditPart {
 
 /**
 * @generated
 */
 public static final int VISUAL_ID = 2001;
 
 /**
 * @generated
 */
 protected IFigure contentPane;
 
 /**
 * @generated
 */
 protected IFigure primaryShape;
 
 /**
 * @generated
 */
 public ClientBrowserEditPart(View view) {
 super(view);
 }
 
 /**
 * @generated
 */
 protected void createDefaultEditPolicies() {
 super.createDefaultEditPolicies();
 installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,
 new ClientBrowserItemSemanticEditPolicy());
 installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy());
 
 }
 
 /**
 * @generated
 */
 protected LayoutEditPolicy createLayoutEditPolicy() {
 LayoutEditPolicy lep = new LayoutEditPolicy() {
 
 protected EditPolicy createChildEditPolicy(EditPart child) {
 EditPolicy result = child
 .getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
 if (result == null) {
 result = new NonResizableEditPolicy();
 }
 return result;
 }
 
 protected Command getMoveChildrenCommand(Request request) {
 return null;
 }
 
 protected Command getCreateCommand(CreateRequest request) {
 return null;
 }
 };
 return lep;
 }
 
 /**
 * @generated
 */
 protected IFigure createNodeShape() {
 URL url = FileLocator.find(WebApplicationDiagramEditorPlugin
 .getInstance().getBundle(), new Path("icons/invoke.svg"), null);
 return new ScalableImageFigure(RenderedImageFactory.getInstance(url),
 true, true, true);
 }
 
 /**
 * @generated
 */
 public ScalableImageFigure getPrimaryShape() {
 return (ScalableImageFigure) primaryShape;
 }
 /**
 * @generated
 */
 private org.eclipse.gmf.runtime.draw2d.ui.figures.WrapLabel
 fClientBrowserNameFigure;
 /**
 * @generated
 */
 protected boolean addFixedChild(EditPart childEditPart) {
 fClientBrowserNameFigure = new WrapLabel();
 if (childEditPart instanceof ClientBrowserNameEditPart) {
 ((ClientBrowserNameEditPart) childEditPart)
 .setLabel(fClientBrowserNameFigure);
 return true;
 }
 return false;
 }
 
 /**
 * @generated
 */
 protected boolean removeFixedChild(EditPart childEditPart) {
 return false;
 }
 
 /**
 * @generated
 */
 protected NodeFigure createNodePlate() {
 DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(getMapMode()
 .DPtoLP(40), getMapMode().DPtoLP(40));
 return result;
 }
 
 /**
 * Creates figure for this edit part.
 *
 * Body of this method does not depend on settings in generation model
 * so you may safely remove <i>generated</i> tag and modify it.
 *
 * @generated
 */
 protected NodeFigure createNodeFigure() {
 NodeFigure figure = createNodePlate();
 figure.setLayoutManager(new StackLayout());
 IFigure shape = createNodeShape();
 figure.add(shape);
 contentPane = setupContentPane(shape);
 return figure;
 }
 
 /**
 * Default implementation treats passed figure as content pane.
 * Respects layout one may have set for generated figure.
 * @param nodeShape instance of generated figure class
 * @generated
 */
 protected IFigure setupContentPane(IFigure nodeShape) {
 if (nodeShape.getLayoutManager() == null) {
 ConstrainedToolbarLayout layout = new ConstrainedToolbarLayout();
 layout.setSpacing(getMapMode().DPtoLP(5));
 nodeShape.setLayoutManager(layout);
 }
 return nodeShape; // use nodeShape itself as contentPane
 }
 
 /**
 * @generated
 */
 public IFigure getContentPane() {
 if (contentPane != null) {
 return contentPane;
 }
 return super.getContentPane();
 }
 
 /**
 * @generated
 */
 public EditPart getPrimaryChildEditPart() {
 return getChildBySemanticHint(WebApplicationVisualIDRegistry
 .getType(ClientBrowserNameEditPart.VISUAL_ID));
 }
 
 /**
 * @generated
 */
 protected void addChildVisual(EditPart childEditPart, int index) {
 if (addFixedChild(childEditPart)) {
 return;
 }
 super.addChildVisual(childEditPart, -1);
 }
 
 /**
 * @generated
 */
 protected void removeChildVisual(EditPart childEditPart) {
 if (removeFixedChild(childEditPart)) {
 return;
 }
 super.removeChildVisual(childEditPart);
 }
 
 /**
 * @generated
 */
 public class ClientBrowserFigure extends
 org.eclipse.draw2d.RectangleFigure {
 /**
 * @generated
 */
 public ClientBrowserFigure() {
 this.setFill(true);
 this.setFillXOR(false);
 this.setOutline(true);
 this.setOutlineXOR(false);
 this.setLineWidth(1);
 this.setLineStyle(org.eclipse.draw2d.Graphics.LINE_SOLID);
 createContents();
 }
 
 /**
 * @generated
 */
 private void createContents() {
 
 org.eclipse.gmf.runtime.draw2d.ui.figures.WrapLabel
 clientBrowserNameFigure0 = new
 org.eclipse.gmf.runtime.draw2d.ui.figures.WrapLabel();
 clientBrowserNameFigure0.setText("<...>");
 
 this.add(clientBrowserNameFigure0);
 setFigureClientBrowserNameFigure(clientBrowserNameFigure0);
 
 }
 
 /**
 * @generated
 */
 private void setFigureClientBrowserNameFigure(
 org.eclipse.gmf.runtime.draw2d.ui.figures.WrapLabel fig) {
 fClientBrowserNameFigure = fig;
 }
 
 /**
 * @generated
 */
 private boolean myUseLocalCoordinates = false;
 
 /**
 * @generated
 */
 protected boolean useLocalCoordinates() {
 return myUseLocalCoordinates;
 }
 
 /**
 * @generated
 */
 protected void setUseLocalCoordinates(boolean useLocalCoordinates) {
 myUseLocalCoordinates = useLocalCoordinates;
 }
 
 }
 
 }
 |  |  |  |  | 
| Re: Creating Elliptical Shape [message #175951 is a reply to message #175501] | Thu, 06 March 2008 05:30   |  | 
| Eclipse User  |  |  |  |  | Hi, Many thanks for your code and help so far.
 
 I tried the codes, I cant just place the problem. When I used this code:
 
 protected IFigure createNodeShape() {
 URL url = FileLocator.find(ShapeDiagramEditorPlugin
 getInstance().getBundle(), new Path("images/cloud.svg"), null);
 return new ScalableImageFigure(RenderedImageFactory.getInstance(url),
 true, true, true);
 }
 
 It kept underlining the getInstance(url) saying that it's undefined for
 the type RenderedImageFactory.
 
 When I used an alternative code:
 
 protected IFigure createNodeShape() {URL url =
 FileLocator.find(Activator.getDefault().getBundle(), new Path("images" +
 IPath.SEPARATOR + "cloud.svg"), null);
 return new
 ScalableImageFigure(RenderedImageFactory.getInstance(url), true, true,
 true);
 
 I got 2 errors: 1. The method getDefault() is undefined for the type
 Activator.
 2. getInstance(url) is undefined for the type RenderedImageFactory.
 
 
 Please, what further advise can you give.
 
 Im using GMF version 2.0.1.v20071003 - 0000 Build id: 2.1M2
 
 Thank you.
 |  |  |  |  |  | 
 
 
 Current Time: Fri Oct 31 15:42:50 EDT 2025 
 Powered by FUDForum . Page generated in 0.07987 seconds |