Anylogic:向矩形墙添加文本标签
Anylogic: Adding text label to Rectangular Wall
是否可以在 Anylogic 中在矩形墙的顶部添加文本标签?我正在尝试使用代码动态创建矩形墙,然后添加标签。到目前为止,我能够创建墙,但文本标签没有按照我的意愿出现在墙的顶部。
如果它应该水平显示在墙的顶部,只需确保它与墙的中心具有相同的 x,y 坐标,然后将 z-coordinate 设置为高于墙的高度。
如果要垂直显示(如挂在墙上的时钟),需要仔细设置xY坐标,使其不显示在墙内。 Z 坐标为墙高的一半。然后你需要做一个技巧来转动文本:将它放入一个组并旋转组。示例模型“机场航站楼”就是这样做的,请查看
如果您要动态创建墙,我假设您也想动态创建文本。
AnyLogic 中有一个小技巧,您可以在其中查看 this 博客 post
中讨论的 AnyLogic 为您创建的代码
您可以使用下面的代码片段来绘制一个 Text 对象并将其添加到演示文稿集合(显示它所必需的)
Font _text_Font = new Font("SansSerif", 0, 10 ); // Only needed if you don't have any text in your agent else _text_Font gets created for you.
ShapeText myProgramticallyCreatedText = new ShapeText(
SHAPE_DRAW_2D, true,170.0, 90.0, 0.0, 0.0,
black,"Programatically Created text",
_text_Font, ALIGNMENT_LEFT );
presentation.add(myProgramticallyCreatedText);
这是创建您的
的语法
ShapeText(boolean ispublic, double x, double y, double rotation, java.awt.Color color, java.lang.String text, java.awt.Font font, TextAlignment alignment)
构造具有特定属性的纯二维文本形状。
ShapeText(ShapeDrawMode drawMode, boolean ispublic, double x, double y, double z, double rotation, java.awt.Color color, java.lang.String text, java.awt.Font font, TextAlignment alignment)
构造具有特定属性的文本形状。
根据您是否有 3D,您可以通过更改正确的参数来旋转文本
如果你想让它在 3d 中可见并正确旋转它,你需要创建一个组,将文本添加到该组,然后创建一个新组,然后对这个新组进行分组,然后旋转第一个团体。喜欢下面
Font _text_Font = new Font("SansSerif", 0, 10 );
ShapeText myProgramticallyCreatedText = new ShapeText(
SHAPE_DRAW_2D3D, true,170.0, 90.0, 0.0, 0.0,
black,"Programatically Created text",
_text_Font, ALIGNMENT_LEFT );
ShapeGroup innerGroup = new ShapeGroup(this, SHAPE_DRAW_2D3D, true, 170.0, 20.0, 0.0, 0.0 , myProgramticallyCreatedText );
ShapeGroup outerGroup = new ShapeGroup(this, SHAPE_DRAW_2D3D, true, 170.0, 20.0, 0.0, 0.0 , innerGroup );
innerGroup.setRotationX(-PI/2 );
presentation.add(outerGroup);
(P.S。我使用上面引用的博客 post 中的技巧解决了所有这些问题;-))
是否可以在 Anylogic 中在矩形墙的顶部添加文本标签?我正在尝试使用代码动态创建矩形墙,然后添加标签。到目前为止,我能够创建墙,但文本标签没有按照我的意愿出现在墙的顶部。
如果它应该水平显示在墙的顶部,只需确保它与墙的中心具有相同的 x,y 坐标,然后将 z-coordinate 设置为高于墙的高度。
如果要垂直显示(如挂在墙上的时钟),需要仔细设置xY坐标,使其不显示在墙内。 Z 坐标为墙高的一半。然后你需要做一个技巧来转动文本:将它放入一个组并旋转组。示例模型“机场航站楼”就是这样做的,请查看
如果您要动态创建墙,我假设您也想动态创建文本。
AnyLogic 中有一个小技巧,您可以在其中查看 this 博客 post
中讨论的 AnyLogic 为您创建的代码您可以使用下面的代码片段来绘制一个 Text 对象并将其添加到演示文稿集合(显示它所必需的)
Font _text_Font = new Font("SansSerif", 0, 10 ); // Only needed if you don't have any text in your agent else _text_Font gets created for you.
ShapeText myProgramticallyCreatedText = new ShapeText(
SHAPE_DRAW_2D, true,170.0, 90.0, 0.0, 0.0,
black,"Programatically Created text",
_text_Font, ALIGNMENT_LEFT );
presentation.add(myProgramticallyCreatedText);
这是创建您的
的语法ShapeText(boolean ispublic, double x, double y, double rotation, java.awt.Color color, java.lang.String text, java.awt.Font font, TextAlignment alignment)
构造具有特定属性的纯二维文本形状。
ShapeText(ShapeDrawMode drawMode, boolean ispublic, double x, double y, double z, double rotation, java.awt.Color color, java.lang.String text, java.awt.Font font, TextAlignment alignment)
构造具有特定属性的文本形状。
根据您是否有 3D,您可以通过更改正确的参数来旋转文本
如果你想让它在 3d 中可见并正确旋转它,你需要创建一个组,将文本添加到该组,然后创建一个新组,然后对这个新组进行分组,然后旋转第一个团体。喜欢下面
Font _text_Font = new Font("SansSerif", 0, 10 );
ShapeText myProgramticallyCreatedText = new ShapeText(
SHAPE_DRAW_2D3D, true,170.0, 90.0, 0.0, 0.0,
black,"Programatically Created text",
_text_Font, ALIGNMENT_LEFT );
ShapeGroup innerGroup = new ShapeGroup(this, SHAPE_DRAW_2D3D, true, 170.0, 20.0, 0.0, 0.0 , myProgramticallyCreatedText );
ShapeGroup outerGroup = new ShapeGroup(this, SHAPE_DRAW_2D3D, true, 170.0, 20.0, 0.0, 0.0 , innerGroup );
innerGroup.setRotationX(-PI/2 );
presentation.add(outerGroup);
(P.S。我使用上面引用的博客 post 中的技巧解决了所有这些问题;-))