前页 后页

将自定义隔离专区添加到元素

当您以普通的矩形格式在图表上显示元素时,可以使用图表“属性”和元素“隔间可见性”显示该框架内的多个隔离专区,以揭示诸如属性,操作和注释之类的附加特征。对话。如果要显示其他已添加的特征,例如相关元素或端口和零件,则可以使用Shape Script将自定义间隔添加到元素的图表显示中。通常,您可以将此Shape脚本添加到Profile中的Stereotype元素。

创建自定义隔离专区后,您可以向元素添加链接的注释以显示隔离专区的内容,就像对元素的其他功能一样。

访问

在配置文件中定义一个Stereotype元素,并使用特殊属性'_image'指定一个添加自定义分隔的Shape Script。

色带

设计>元素>特征>属性:[创建名为'_image'的属性]>单击“初始值”字段中的Browse.图标

配置>参考数据> UML类型>构造型:(选择或指定构造型):Shape Script>分配

上下文菜单

在图中,右键单击元素|。特色|属性:[创建名为'_image'的属性] |单击“初始值”字段中的Browse.

键盘快捷键

F9:[创建一个名为“ _image”的属性]>单击“初始值”字段中的Browse.图标

向元素添加自定义间隔

下表提供有关创建定义自定义隔离专区的形状脚本的注释,以及各种示例。

处理

描述

也可以看看

开发脚本

对于选定的构造型,打开“形状编辑器”。

在脚本中,将shape main替换为:

  • 形状为ChildElement
  • 形状RelatedElement
如果愿意,可以保持主要形状 ,以调整主要元素的某些属性(例如颜色);但是,主形状需要调用'DrawNativeShape()'才能正常工作。

此时,您可以使用“ HasProperty”查询方法在子元素或相关元素中搜索要在隔离专区中显示的特定属性(例如构造型)。 RelatedElement Shape脚本确定通过连接器链接到当前元素的元素的属性。

形状脚本定义的每个自定义隔间的可见性均使用“隔间可见性”对话框控制。默认情况下,ChildElement隔离专区是可见的,可以使用隔离专区的可见性选项隐藏,而RelatedElement隔离专区则被隐藏 默认情况下,必须使用隔离专区可见性选项明确启用。

还应注意,子元素可以在自定义隔离专区中显示,既可以在子元素与父元素一起显示在图中,也可以不在子图上显示(如示例1、2和3)。如果相关元素不在同一图中,则它们只能在隔离专区中列出(如示例4和5)。

形状编辑器 绘图方法 查询方法 显示元素/连接器属性

附加链接的注释

您可以使用以下两种方法之一来创建链接的Note以显示自定义隔离专区的内容:

  • 方法1(元素当前正在显示自定义隔离专区)-在自定义隔离专区中突出显示相关元素名称或子元素名称,然后右键单击它并选择“创建链接的注释”选项;自定义隔离专区将自动关闭,并将链接的注释添加到该图中,列出该隔离专区中的所有元素名称
  • 方法2(该元素不一定显示自定义隔离专区)-从“图表工具箱”的“公用”页面中拖动一个Note元素,然后使用Notelink连接器将其链接到包含自定义隔离专区的元素
    右键单击连接器,然后选择“将此注释链接到元素特征”选项,以显示“将注释链接到元素特征”对话框;单击“功能类型”字段中的下拉箭头,然后单击自定义隔离专区的名称,例如“属性”,然后单击“确定”按钮
    该隔间的内容显示在“注释”中
在方法2中,如果显示了隔离专区,则该方法将不会隐藏隔离专区。如果隔间已被隐藏,建议您使用此方法。

您对隔离专区中的元素列表或其名称所做的任何更改都会立即反映在“注释”中,以保持显示信息的准确性。

脚本示例1:在不调整父元素的情况下添加隔离专区

//添加子元素的分隔。

形状ChildElement

{

//检查子元素是否具有构造型属性(如果已设置)

//将隔离专区名称更改为“属性”。

if(HasProperty(“ stereotype”,“ property”))

{

SetCompartmentName(“ Properties”);

}

//检查子元素是否具有公共范围,如果有,则添加+

//标记为子隔间。

if(HasProperty(“ scope”,“ public”))

{

AppendCompartmentText(“ +”);

}

//将子元素名称添加到子隔离专区。

AppendCompartmentText(“#NAME#”);

}

Shape脚本检查所有子元素,以查看它们是否具有<< property >>原型。如果找到此构造型,则“ SetCompartmentName”函数将设置一个称为“ Properties”的隔离专区。

然后,脚本检查子元素是否具有“公共”作用域,如果存在,则附加“ +”符号。

最后,“ AppendCompartmentText”函数将子元素的名称添加到隔离专区。

如果已经通过'SetCompartmentName'声明了隔离专区,则属于同一隔离专区的所有其他子元素都将自动添加到该隔离专区中,而无需声明新的隔离专区名称(即,所有构造型为<< property >>的子元素最后进入“属性”部分)。

脚本示例2:调整父元素的颜色并添加子隔间

//形状主要影响父对象

形状主体

{

//将父元素的颜色设置为红色

setfillcolor(255,0,0);

//绘制父母的本机形状

drawingativeshape();

}

// Shape ChildElement将子格添加到父级。

形状ChildElement

{

if(HasProperty(“ stereotype”,“ part”))

{

SetCompartmentName(“ Parts”);

}

否则if(HasProperty(“ stereotype”,“ mystereotype”))

{

SetCompartmentName(“ My Stereotype”);

}

AppendCompartmentText(“#NAME#”);

}

“形状主体”部分将主体元素的颜色设置为红色,并基于定型子元素添加子隔间。

该脚本检查子元素是否已应用构造型值“ part”或“ mystereotype”。如果存在多个子元素,并且具有“ part”和“ mystereotype”定型的组合,则会创建两个名为“ Parts”和“ My Stereotype”的区室。

为了显示隔离专区,必须调用“ AppendCompartmentText”以将内容插入隔离专区。

传递给“ SetCompartmentName”和“ AppendCompartmentText”的值不能包含换行符。

脚本示例3:仅列出隔离专区中的子元素(如果在图表上尚不可见)

形状ChildElement

{

//检查子元素是否在图表上。

if(hasproperty(“ IsVisible”,“ False”))

{

//为零件创建一个隔室。

if(拥有((type),“ part”))

{

SetCompartmentName(“ Parts”);

}

//为端口创建一个隔离专区。

否则if(hasproperty(“ type”,“ port”))

{

SetCompartmentName(“ Ports”);

}

//将子元素名称添加到隔离专区。

AppendCompartmentText(“#NAME#”);

}

}

该脚本为属于当前元素但在当前图表上不可见的“端口”和“零件”元素添加自定义分隔。

如果子元素在图表上已经可见,则“ IsVisible”属性返回True;如果子元素不可见,则返回False。

如果子元素在图表上已经可见,则可以使用它来防止子元素在自定义隔离专区中列出,从而避免显示冗余信息。

脚本示例4:从拥有Shape脚本的元素中显示作为依赖关系连接器目标的元素

形状RelatedElement

{

//检查我们正在处理的当前连接器是否具有

//依赖类型。

if(HasProperty(“ Connector.Type”,“ Dependency”))

{

//检查我们当前正在检查的元素是否为

//当前连接器的目标。

if(HasProperty(“ Element.IsTarget”))

{

//设置隔离专区名称

SetCompartmentName(“ dependsOn”);

if(HasProperty(“ Element.Stereotype”,“”))

{

}

其他

{

AppendCompartmentText(“«#Element.Stereotype#»”);

}

AppendCompartmentText(“#Element.Name#”);

}

}

}

使用此脚本,如果Class1具有带有“ RelatedElement”形状脚本的构造型,并且Class1是目标Class2的依赖关系连接器的源,则名称Class2将显示在Class 1的隔离专区中,称为“ dependsOn”。

脚本示例5:在元素上的隔离专区中显示已实现接口的列表

形状RelatedElement

{

//检查当前正在处理的连接器是否为Realization

if(HasProperty(“ Connector.Type”,“实现”))

{

//如果相关元素

//正在检查是具有此连接器的目标

// Shape Script元素作为源

if(HasProperty(“ Element.IsTarget”))

{

//如果元素是接口,则在

//'realizedInterfaces'隔离专区

if(HasProperty(“ Element.Type”,“ Interface”))

{

SetCompartmentName(“ realizedInterfaces”);

AppendCompartmentText(“#Element.Name#”);

}

}

}

}

如果元素类1具有此Shape Script,并且是元素接口1的实现连接器的源,则名称“接口1”将显示在类1的“ realizedInterfaces”部分中。

笔记

  • 如果在隔离专区名称中使用标点符号,则在保存脚本时会删除标点符号。例如:“端口,零件和属性”变为“端口零件和属性”
  • “ RelatedElement”形状脚本具有扩展功能,可以同时检查连接器和连接器另一端的元素。它们仅应用于元素,并且仅用于检索要在该元素的隔离专区中显示的信息。

学到更多