Skip to content

Commit

Permalink
Working Geometry Editor
Browse files Browse the repository at this point in the history
The Geometry Editor is now working. Fixed various bugs relating to color
display and to shapes staying in the scene/tree view after being
deleted.

Signed-off-by: Robert Smith <SmithRW@ornl.gov>
  • Loading branch information
SmithRWORNL committed Jul 5, 2016
1 parent ac7ddfc commit 8c60bc1
Show file tree
Hide file tree
Showing 12 changed files with 692 additions and 411 deletions.
Expand Up @@ -142,6 +142,9 @@ protected void handleUpdate(Notification notification) {
@Override
public void handleChildren(EList<IRenderElement<Group>> children) {

// Save the list of children
this.children = children;

// If there are no children, there is nothing to do
if (children != null) {

Expand Down
Expand Up @@ -25,7 +25,8 @@
* The following features are implemented:
* </p>
* <ul>
* <li>{@link model.impl.RenderObjectDecoratorImpl#getSource <em>Source</em>}</li>
* <li>{@link model.impl.RenderObjectDecoratorImpl#getSource <em>Source</em>}
* </li>
* </ul>
*
* @generated
Expand All @@ -35,6 +36,7 @@ public class RenderObjectDecoratorImpl<T> extends MinimalEObjectImpl.Container
/**
* The cached value of the '{@link #getSource() <em>Source</em>}' reference.
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getSource()
* @generated
* @ordered
Expand All @@ -43,6 +45,7 @@ public class RenderObjectDecoratorImpl<T> extends MinimalEObjectImpl.Container

/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
protected RenderObjectDecoratorImpl() {
Expand All @@ -67,6 +70,7 @@ protected void handleUpdate(Notification notification) {

/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
Expand All @@ -76,24 +80,28 @@ protected EClass eStaticClass() {

/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
@SuppressWarnings("unchecked")
public IRenderElement<T> getSource() {
if (source != null && source.eIsProxy()) {
InternalEObject oldSource = (InternalEObject)source;
source = (IRenderElement<T>)eResolveProxy(oldSource);
InternalEObject oldSource = (InternalEObject) source;
source = (IRenderElement<T>) eResolveProxy(oldSource);
if (source != oldSource) {
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.RESOLVE, ModelPackage.RENDER_OBJECT_DECORATOR__SOURCE, oldSource, source));
eNotify(new ENotificationImpl(this, Notification.RESOLVE,
ModelPackage.RENDER_OBJECT_DECORATOR__SOURCE,
oldSource, source));
}
}
return source;
}

/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public IRenderElement<T> basicGetSource() {
Expand Down Expand Up @@ -218,86 +226,92 @@ public Object clone() {

/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case ModelPackage.RENDER_OBJECT_DECORATOR__SOURCE:
if (resolve) return getSource();
return basicGetSource();
case ModelPackage.RENDER_OBJECT_DECORATOR__SOURCE:
if (resolve)
return getSource();
return basicGetSource();
}
return super.eGet(featureID, resolve, coreType);
}

/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@SuppressWarnings("unchecked")
@Override
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case ModelPackage.RENDER_OBJECT_DECORATOR__SOURCE:
setSource((IRenderElement<T>)newValue);
return;
case ModelPackage.RENDER_OBJECT_DECORATOR__SOURCE:
setSource((IRenderElement<T>) newValue);
return;
}
super.eSet(featureID, newValue);
}

/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case ModelPackage.RENDER_OBJECT_DECORATOR__SOURCE:
setSource((IRenderElement<T>)null);
return;
case ModelPackage.RENDER_OBJECT_DECORATOR__SOURCE:
setSource((IRenderElement<T>) null);
return;
}
super.eUnset(featureID);
}

/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case ModelPackage.RENDER_OBJECT_DECORATOR__SOURCE:
return source != null;
case ModelPackage.RENDER_OBJECT_DECORATOR__SOURCE:
return source != null;
}
return super.eIsSet(featureID);
}

/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
@SuppressWarnings("unchecked")
public Object eInvoke(int operationID, EList<?> arguments)
throws InvocationTargetException {
switch (operationID) {
case ModelPackage.RENDER_OBJECT_DECORATOR___GET_MESH:
return getMesh();
case ModelPackage.RENDER_OBJECT_DECORATOR___GET_BASE:
return getBase();
case ModelPackage.RENDER_OBJECT_DECORATOR___HANDLE_CHILDREN__ELIST:
handleChildren((EList<IRenderElement<T>>)arguments.get(0));
return null;
case ModelPackage.RENDER_OBJECT_DECORATOR___GET_PROPERTY__STRING:
return getProperty((String)arguments.get(0));
case ModelPackage.RENDER_OBJECT_DECORATOR___SET_PROPERTY__STRING_OBJECT:
setProperty((String)arguments.get(0), arguments.get(1));
return null;
case ModelPackage.RENDER_OBJECT_DECORATOR___COPY__OBJECT:
copy(arguments.get(0));
return null;
case ModelPackage.RENDER_OBJECT_DECORATOR___CLONE:
return clone();
case ModelPackage.RENDER_OBJECT_DECORATOR___GET_MESH:
return getMesh();
case ModelPackage.RENDER_OBJECT_DECORATOR___GET_BASE:
return getBase();
case ModelPackage.RENDER_OBJECT_DECORATOR___HANDLE_CHILDREN__ELIST:
handleChildren((EList<IRenderElement<T>>) arguments.get(0));
return null;
case ModelPackage.RENDER_OBJECT_DECORATOR___GET_PROPERTY__STRING:
return getProperty((String) arguments.get(0));
case ModelPackage.RENDER_OBJECT_DECORATOR___SET_PROPERTY__STRING_OBJECT:
setProperty((String) arguments.get(0), arguments.get(1));
return null;
case ModelPackage.RENDER_OBJECT_DECORATOR___COPY__OBJECT:
copy(arguments.get(0));
return null;
case ModelPackage.RENDER_OBJECT_DECORATOR___CLONE:
return clone();
}
return super.eInvoke(operationID, arguments);
}
Expand Down
Expand Up @@ -268,6 +268,7 @@ public void run() {
render.setProperty("defaultBlue", -1);
}

// Initialize the color to the default
render.setProperty("red", render.getProperty("defaultRed"));
render.setProperty("green", render.getProperty("defaultGreen"));
render.setProperty("blue", render.getProperty("defaultBlue"));
Expand Down
Expand Up @@ -117,26 +117,27 @@ public void run() {
IRenderElement selectedShape = (IRenderElement) selectedObject;
INode parentShape = selectedShape.getBase().getParent();

if (parentShape instanceof INode) {
if (parentShape instanceof Geometry) {

// Remove the selected shape from the parent
// The parent shape is the root GeometryComponent,
// so try removing it from there.

synchronized (geometry) {
parentShape.removeNode(selectedShape.getBase());
geometry.removeNode(selectedShape.getBase());
}
view.treeViewer.refresh();

view.treeViewer.refresh(parentShape);
}

else if (parentShape == null) {

// The parent shape may be the root GeometryComponent,
// so try removing it from there.
else {
// Remove the selected shape from the parent

synchronized (geometry) {
geometry.removeNode(selectedShape.getBase());
parentShape.removeNode(selectedShape.getBase());
}

view.treeViewer.refresh();

}
}
}
Expand Down
Expand Up @@ -13,7 +13,9 @@
package org.eclipse.eavp.viz.service.geometry.widgets;

import java.net.URL;
import java.util.ArrayList;

import org.eclipse.eavp.viz.service.IRenderElementHolder;
import org.eclipse.january.geometry.Geometry;
import org.eclipse.january.geometry.GeometryFactory;
import org.eclipse.january.geometry.INode;
Expand Down Expand Up @@ -144,16 +146,6 @@ public void run() {

INode parentShape = selectedShape.getBase().getParent();

// Remove the selected shape from its original parent

synchronized (geometry) {
if (parentShape != null) {
parentShape.removeNode(selectedShape.getBase());
} else {
geometry.removeNode(selectedShape.getBase());
}
}

// Create a new parent union shape

Union replicateUnion = GeometryFactory.eINSTANCE.createUnion();
Expand All @@ -163,31 +155,11 @@ public void run() {

for (int i = 1; i <= quantity; i++) {

// Clone the selected shape and remove its "selected" property
// Clone the selected shape

IRenderElement clonedShape = (IRenderElement) selectedShape.clone();
clonedShape.getBase().setId(i);

// Remove the selection indicating color from the cloned shape
if (clonedShape.getProperty("defaultRed") != null) {

// If there was a default color, restore it to the active
// color
clonedShape.setProperty("red",
clonedShape.getProperty("defaultRed"));
clonedShape.setProperty("green",
clonedShape.getProperty("defaultGreen"));
clonedShape.setProperty("blue",
clonedShape.getProperty("defaultBlue"));
}

// If there was no default, set the shape to grey
else {
clonedShape.setProperty("red", 127d);
clonedShape.setProperty("green", 127d);
clonedShape.setProperty("blue", 127d);
}

// Add the translation
Vertex clonedCenter = clonedShape.getBase().getCenter();
clonedCenter.setX(accumulatedX);
Expand Down Expand Up @@ -227,7 +199,78 @@ public void run() {
view.treeViewer.refresh();
}

// Get the render elements
IRenderElementHolder holder = view.getHolder();

IRenderElement unionRender = holder.getRender(replicateUnion);
unionRender.setProperty("red", -1);
unionRender.setProperty("green", -1);
unionRender.setProperty("blue", -1);
unionRender.setProperty("defaultRed", -1);
unionRender.setProperty("defaultGreen", -1);
unionRender.setProperty("defaultBlue", -1);

for (int i = 0; i < quantity; i++) {

// A list of all new shapes added by the clone operation
ArrayList<INode> newShapes = new ArrayList<INode>();

// Add the clone and all of its children
newShapes.add(replicateUnion.getNodes().get(i));
for (int j = 0; j < newShapes.size(); j++) {
newShapes.addAll(newShapes.get(j).getNodes());
}

// Get the original set of renders, in the same order as the
// clones are in their own list
ArrayList<IRenderElement> originalRenders = new ArrayList<IRenderElement>();
originalRenders.add(selectedShape);
for (int j = 0; j < originalRenders.size(); j++) {
for (INode node : originalRenders.get(j).getBase().getNodes()) {
originalRenders.add(holder.getRender(node));
}
}

// Copy the color information from the original renders
for (int j = 0; j < newShapes.size(); j++) {

// Get the new and original shapes
INode node = newShapes.get(j);
IRenderElement originalElement = originalRenders.get(j);

// Get the cloned node's render
IRenderElement element = holder.getRender(node);

// Get the default values for the colors from the original
// shape
int red = (int) originalElement.getProperty("defaultRed");
int green = (int) originalElement.getProperty("defaultGreen");
int blue = (int) originalElement.getProperty("defaultBlue");

// Set the clone's default and current colors
element.setProperty("red", red);
element.setProperty("green", green);
element.setProperty("blue", blue);
element.setProperty("defaultRed", red);
element.setProperty("defaultGreen", green);
element.setProperty("defaultBlue", blue);
}

}

// Remove the selected shape from its original parent

synchronized (geometry) {
if (parentShape != null) {
parentShape.removeNode(selectedShape.getBase());
} else {
geometry.removeNode(selectedShape.getBase());
}
}

view.treeViewer.expandToLevel(parentShape, 1);

view.treeViewer.refresh();

}
}

0 comments on commit 8c60bc1

Please sign in to comment.