Eclipse Graphiti, Как создать "CustomFeature для создания и получения всех элементов"?
У меня есть 2 вопроса, может быть, кто-нибудь может дать мне представление, как я могу это сделать
Я создал новый "testFeature", расширенный от AbstractCustomFeature, и могу вызвать его на моей диаграмме. Как я могу получить список, который содержит все элементы из диаграммы?(Я хочу обновить их имена и цвета в начале и позже)
Мой второй вопрос: я пытаюсь добавить некоторые элементы в диаграмму без перетаскивания их из палитры.
Например, у меня есть некоторые элементы, сохраненные на диаграмме, и моя "модель говорит, что я скучаю по 3 элементам на диаграмме". Я хочу написать пользовательскую функцию, которая рисует / помещает недостающие элементы в диаграмму Graphiti всего одним / двумя щелчками мыши, может быть, мне нужно использовать Zest в этой части? но в начале я просто хочу поместить несколько элементов, не удаляя их из палитры, как я могу это сделать?
Может быть, кто-нибудь может дать мне направление?
Спасибо за вашу помощь!
2 ответа
Хорошо! вот мое решение:
class testFeature extends AbstractCustomFeature {
//...
public void execute(ICustomContext context) {
Diagram diagram = getDiagram(); //get Diagram
EList<Shape> diagramChildren= diagram.getChildren();//get List with all Children's
Iterator<Shape> it = diagramChildren.iterator(); //Build iterator for this List
//go through all objects which are in the Diagram
while (it.hasNext()) {
Shape testObjekt = it.next();
PictogramElement pe = testObjekt.getGraphicsAlgorithm().getPictogramElement();
Object bo = getBusinessObjectForPictogramElement(pe);
//BUILD YOUR EMF & GRAPHITI projects together!!!!
//otherwise you get always false after editor restart
if (bo instanceof graphicElement) {
graphicElement sElement = (graphicElement)bo;
if(pe instanceof ContainerShape){
RoundedRectangle testR= (RoundedRectangle) pe.getGraphicsAlgorithm();
//testR is my RoundedRectangle like in help tutorial
//changes are possible here:
//...
ContainerShape cs = (ContainerShape) pe;
for (Shape shape : cs.getChildren()) {
//set Name
if (shape.getGraphicsAlgorithm() instanceof Text) {
Text text = (Text) shape.getGraphicsAlgorithm();
text.setValue("new name!");
}
//set Line color
if (shape.getGraphicsAlgorithm() instanceof Polyline) {
Polyline polyline = (Polyline)shape.getGraphicsAlgorithm();
polyline.setForeground(manageColor(myColorGreen));
polyline.setLineWidth(3);
}
}
}
}
}
Как я могу получить список, который содержит все элементы из диаграммы?
Diagram является ContainerShape, вы можете позвонить getChildren()
чтобы восстановить все формы
добавить некоторые элементы на диаграмму без перетаскивания их из палитры.
Объект уже создан внутри модели EMF, и вы хотите, чтобы он только добавил свой графический аналог на диаграмму? Если это так, вам нужно создать и выполнить свою соответствующую XXXAddFeature
учебный класс.
В другом месте (более вероятно, если вы хотите подражать некоторому перетаскиванию из палитры), вы должны вызвать соответствующий XXXCreateFeature
, который добавит ("создать", на языке Graphiti) элемент к модели (как правило, тело создания будет в конце вызывать addGraphicalRepresentation()
который также добавит соответствующий графический элемент к диаграмме, вызвав, внутренне соответствующий XXXAddFeature
).