Home » Modeling » GMF (Graphical Modeling Framework) » Creating Elliptical Shape
|
Re: Creating Elliptical Shape [message #173072 is a reply to message #173064] |
Wed, 20 February 2008 10:10 |
Eclipse User |
|
|
|
Originally posted by: trommas.yahoo.com
Toyin Fakorede wrote:
is there any other way to create other shapes
Yep :)
If your want to create a shape of your own, you can use an image - or
create it easily in the graph.
Just switch the rectangle figure with a scalable polygon and fill in
points (+ colors, layout and label).
For an elliptical shape, there is already a predefined shape.
Tomas
|
|
| |
Re: Creating Elliptical Shape [message #173542 is a reply to message #173472] |
Fri, 22 February 2008 09:04 |
Eclipse User |
|
|
|
Originally posted by: trommas.yahoo.com
Toyin Fakorede wrote:
>
>
> Please where and how do I create my own shape.
You can either define it graphically in .graph by switching out your
rectangle in Figure Gallery -> Figure Descriptor, or you can do it with
code in your xyzEditPart, like this:
public class PropertyNodeFigure extends Ellipse {
private WrapLabel fFigurePropertyNodeNameFigure;
public PropertyNodeFigure() {
this.setLayoutManager(new StackLayout());
this.setForegroundColor(ColorConstants.black);
this.setBackgroundColor(ColorConstants.green);
this.setMinimumSize(new Dimension(getMapMode().DPtoLP(100),
getMapMode().DPtoLP(40)));
createContents();
}
....
> Sorry, Im still a novies.
We all are :)
>
> Thanks
>
>
> Toyin Fakorede wrote:
> is there any other way to create other shapes
>
> Yep :)
>
> If your want to create a shape of your own, you can use an image - or
> create it easily in the graph.
>
> Just switch the rectangle figure with a scalable polygon and fill in
> points (+ colors, layout and label).
>
> For an elliptical shape, there is already a predefined shape.
>
>
> Tomas
>
|
|
| |
Re: Creating Elliptical Shape [message #174272 is a reply to message #174150] |
Mon, 25 February 2008 21: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 14:43 |
Toyin Messages: 35 Registered: July 2009 |
Member |
|
|
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 #175005 is a reply to message #174989] |
Fri, 29 February 2008 17:23 |
Eclipse User |
|
|
|
Originally posted by: trommas.yahoo.com
Toyin Fakorede wrote:
> 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
As I mentioned earlier, I've never tried this (but many here have!).
The only tip I can give is to search this newsgroup, and check out the
taipan example (you can see how it's done there)
Cheers,
Tomas Zijdemans
|
|
| | |
Re: Creating Elliptical Shape [message #175462 is a reply to message #175385] |
Tue, 04 March 2008 11:52 |
Richard Gronback Messages: 605 Registered: July 2009 |
Senior Member |
|
|
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 13: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 10:30 |
Toyin Messages: 35 Registered: July 2009 |
Member |
|
|
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.
|
|
| |
Goto Forum:
Current Time: Fri Dec 27 13:56:45 GMT 2024
Powered by FUDForum. Page generated in 0.04521 seconds
|