我想在活动图中添加一个图例,该图例将由java和ea-api以编程方式生成。我已经知道如何创建图例元素并将其显示在图中(类型:“文本”和子类型:76):
Element legend = elements.AddNew("Color Legend", "Text");
elements.Refresh();
legend.SetSubtype(76);
legend.Update();
//Show in diagram
DiagramObject diagramObject = diagramObjects.AddNew("l=0; r=100; t=0; b=-100;", "");
diagramObjects.Refresh();
// reference the DiagramObject to the before created element
diagramObject.SetElementID(legend.GetElementID());
但这只是一个空洞的传说。所以我的问题是,如何向CustomProperties中添加一个CustomProperty。我的第一种方法是以下代码:
Collection<CustomProperty> customProperties = legend.GetCustomProperties();
CustomProperty cp = customProperties.AddNew("LegendEntryTest", "Back_Ground_Color=2124031;");
customProperties.Refresh();
legend.Update();
但这不起作用,图例仍然是空的:(
这是一个示例示例:
问候,菲尔
编辑在吉尔特·贝莱肯斯的帮助下,我解决了我的问题。现在,我使用repository.Execute(String sqlStmt)方法将自定义属性插入t_xref
。以下代码是一个如何工作的小示例:
//get elementGUID of legend
String legendGUID = legend.GetElementGUID();
//create the description value for one custom_property
String name="TestColor1";
String color="3381504";
int customPropertyIndex = 0;
String description = "@PROP=@NAME="+name+"@ENDNAME;@TYPE=LEGEND_OBJECTSTYLE@ENDTYPE;@VALU=#Back_Ground_Color#="+color+";#Pen_Color#=16777215;#Pen_Size#=1;#Legend_Type#=LEGEND_OBJECTSTYLE;@ENDVALU;@PRMT="+customPropertyIndex +"@ENDPRMT;@ENDPROP;"
//add description part for the legend
description += "@PROP=@NAME=Legend@ENDNAME;@TYPE=LEGEND_STYLE_SETTINGS@ENDTYPE;@VALU=@ENDVALU;@PRMT=@ENDPRMT;@ENDPROP;"
String sqlInsertStmt="INSERT INTO t_xref "
+ "("
+ "Client,"
+ "XrefID,"
+ "Type,"
+ "Name,"
+ "Visibility,"
+ "Partition,"
+ "Supplier,"
+ "Description"
+ ") "
+ " VALUES ("
+"'"+legendGUID+ "',"
+ "'{"+UUID.randomUUID().toString()+"}',"
+ "'element property',"
+ "'CustomProperties',"
+ "'Public',"
+ "'0',"
+ "'<none>',"
+ "'"+description+"'"
+ ");"
;
repository.Execute(sqlInsertStmt);
随着java.util.UUID
我生成该领域的新GUID XrefID
。
顺便说一句:要将RGB颜色转换为Enterprise Architect可以接受的颜色,可以使用以下公式:
int colorValue = color.getRed() + (color.getGreen() * 256)
+ (color.getBlue() * 256 * 256);
(RGB色彩模型)
您可以尝试使用代码添加自定义属性,但我敢肯定,您必须借助SQL hack才能填写所有必需的详细信息。如果检查数据库,则会发现图例的所有自定义属性都存储在表t_xref的一行中。“客户”列包含t_object.ea_guid,“描述”列包含自定义属性的所有详细信息。我做了一个小测试,这就是描述中存储的内容(为便于阅读,我添加了换行符)
@PROP=@NAME=Wit@ENDNAME;@TYPE=LEGEND_OBJECTSTYLE@ENDTYPE;@VALU=#Back_Ground_Color#=16777215;#Pen_Color#=16777215;#Pen_Size#=1;#Legend_Type#=LEGEND_OBJECTSTYLE;@ENDVALU;@PRMT=0@ENDPRMT;@ENDPROP;
@PROP=@NAME=rood@ENDNAME;@TYPE=LEGEND_OBJECTSTYLE@ENDTYPE;@VALU=#Back_Ground_Color#=255;#Pen_Color#=255;#Pen_Size#=1;#Legend_Type#=LEGEND_OBJECTSTYLE;@ENDVALU;@PRMT=1@ENDPRMT;@ENDPROP;
@PROP=@NAME=blauw@ENDNAME;@TYPE=LEGEND_OBJECTSTYLE@ENDTYPE;@VALU=#Back_Ground_Color#=16711680;#Pen_Color#=16711680;#Pen_Size#=1;#Legend_Type#=LEGEND_OBJECTSTYLE;@ENDVALU;@PRMT=2@ENDPRMT;@ENDPROP;
@PROP=@NAME=Legend@ENDNAME;@TYPE=LEGEND_STYLE_SETTINGS@ENDTYPE;@VALU=@ENDVALU;@PRMT=@ENDPRMT;@ENDPROP;
如果我在哪里,我将结合使用Repository.Execute()和肮脏的SQL插入语句来完成工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句