[英]Problem in displaying nodes through PREFUSE library for Java?
我正在使用PREFUSE库开发数据的图形视图。
我的图中有3种节点:
以下是我的包含图表的.xml文件的摘录
<node id="AP-1">
<data key="name">Application1</data>
<data key="type">APPLICATION</data>
</node>
<node id="DB-1">
<data key="name">Database1</data>
<data key="type">DATABASE</data>
</node>
<node id="IT-1">
<data key="name">Interface1</data>
<data key="type">INTERFACE</data>
</node>
我想显示以上3个差异。 3个差异的各种节点。 各种形状如下:
我首先阅读了
图g
Q1。 现在,我如何区分数据组中的这三种节点。 我认为我应该写谓词。 我已经阅读了完整的谓词和表达式手册,以了解它们的用法,但是无法编写谓词来区分它们。 那么谓词是什么?
Q2。 如何指定我的自定义形状以及如何设置可以渲染我开发的自定义形状的渲染器?
用于为节点分配不同形状的范例是使用DataShapeAction
例如,在“国会”演示中(与表同样适用于节点):
int[] shapes = new int[]
{ Constants.SHAPE_RECTANGLE, Constants.SHAPE_DIAMOND };
DataShapeAction shape = new DataShapeAction(group, "Senate", shapes);
这会根据“参议院”数据字段中的值将不同的形状分配给数据点,即,参议员是一种形状,议员是另一种形状(以某种顺序排列(API中对此有多种控件,请参见Constants.ORDINAL)一个例子)。
因此,换句话说,您可能会使用“类型”数据字段来指示节点属于哪种节点,然后使用DataShapeAction分配不同的形状。
定义新形状当然是可能的,但还需要进行一些修改。 我会尝试给您一个更好的答案,但是我想最直接的方法是编写自己的noderenderer子类,该子类能够绘制所需的形状,然后扩展DataShapeAction来处理一些问题。新数据类型的标志。 希望以后能有更多的信息。
您不需要谓词来分配形状。 实际上,为了绘制自定义形状,您必须将形状绘制渲染器ShapeRenderer
子类ShapeRenderer
。 ShapeRenderer使用ID号( int
)区分形状。 这些int在结构上是所有标准形状的Constants
-如bcr所写,例如Constants.SHAPE_RECTANGLE
。
内部预熔调用ShapeRenderer protected Shape getRawShape(VisualItem item)
函数。 反过来,此函数从ShapeRenderer
调用其他内部ShapeRenderer
以获取要绘制的形状。 例如:
getRawShape
调用int stype = item.getShape()
( 由形状动作DataShapeAction
设置 ) 然后,拥有手头的形状ID,有switch
语句选择要绘制的适当形状
switch ( stype ) { case Constants.SHAPE_NONE: return null; case Constants.SHAPE_RECTANGLE: return rectangle(x, y, width, width); case Constants.SHAPE_ELLIPSE: return ellipse(x, y, width, width); case Constants.SHAPE_TRIANGLE_UP: return triangle_up((float)x, (float)y, (float)width); ...
为了绘制其他形状(自定义形状),可以将ShapeRenderer
子类ShapeRenderer
并提供自己的形状实现以绘制和覆盖getRawShape
。
如果您将形状ID识别为自己的形状ID,则返回形状,否则在getRawShape
的实现中调用super(item)以调用标准形状。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.