我有 2 个问题,也许有人可以告诉我如何做到这一点
我已经从AbstractCustomFeature扩展了新的"testFeature",并且可以在我的Diagram中调用它。如何获取包含图中所有元素的列表?(我想在开始和以后更新它们的名称和颜色(
我的第二个问题是:我正在尝试将一些元素添加到图表中,而无需将它们从调色板拖放。
例如,我在图表中保存了一些元素,我的"模型说我错过了图表中的 3 个元素"。我想编写一个自定义功能,只需单击一下/两次即可在 Graphiti 图中绘制/放置缺失的元素,也许我需要在这一部分使用 Zest?但是一开始我只想放几个元素而不将它们从调色板中删除,我该怎么做?
也许有人可以给我方向?
感谢您的帮助!
如何获取包含图中所有元素的列表?
图表是一个容器形状,你可以调用getChildren()
来检索所有形状
将一些元素添加到图中,而无需将它们从调色板中删除。
对象是否已经在 EMF 模型中创建,并且您只希望它将其图形对应项添加到图中?如果是这样,您需要实例化并执行相应的XXXAddFeature
类。
在其他地方(更有可能的是,如果你想模仿调色板中的一些拖放(,你必须调用正确的XXXCreateFeature
,这将添加("create",用 Graphiti 的说法(元素到模型中(通常,创建体将在最后调用 addGraphicalRepresentation()
它还将通过调用将相应的图形元素添加到图表中, 内部适当的XXXAddFeature
(。
好的!这是我的解决方案:
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);
}
}
}
}
}