【PlantUML】-类图-布局,如何改变元素位置

写在前面

  PlantUML属于自动布局。掌握好,是一件利器,掌握不好,就会不知其所以然。尤其在布局方面,因为它的布局可能会和你想的不太一样。本篇文章以例子为基础,简单地说几个在实际应用过程中摸索出来的原则。相信看完这篇文章(有示例),你就可以轻松驾驭PlantUML的布局,自由调动元素了。


目录

  • 写在前面
  • 一、基本概念
  • 二、具体步骤
    • 1.环境说明
    • 2.自动布局
      • 1 X 1 最多容纳1个元素
      • 2 X 2 最多容纳4个元素
      • 3 X 3 最多容纳9个元素
      • 4 X 4 最多容纳16个元素
      • 5 X 5 最多容纳25个元素
    • 3.改变布局
      • 3.1 水平结构
        • 3.1.1 操作符 .
        • 3.1.2 操作符 . 隐藏线条
        • 3.1.3 操作符 -
        • 3.1.4 添加注释 left或者right
      • 3.2 垂直结构
        • 3.2.1 操作符 - -
        • 3.2.2 操作符 . .
        • 3.2.3 添加注释top或者bottom
  • 写在后面
  • 系列文章


一、基本概念

布局,就是说当你添加元素后,这些元素是如何排列的如何才能控制这些元素的位置达到自己想要的结果


二、具体步骤

1.环境说明

名称说明
WindowsWindows10
Intellij IDEA版本Intellij IDEA 2019.2.3(Ultimate Edition)
PlantUML IntegrationIDEA插件 2.23.0

2.自动布局

PlantUML既然是自动布局的,那其中的元素是基于什么原则什么时候换行的?
其实,观察了一下,我称它为正方形布局。

下面先看例子和效果,

1 X 1 最多容纳1个元素

示例1:1个元素

@startuml
class 1{}
@enduml

其效果:占了1行
在这里插入图片描述

2 X 2 最多容纳4个元素

示例2:2个元素

@startuml
class 1{}
class 2{}
@enduml

其效果:占了1行
在这里插入图片描述

示例3:3个元素

@startuml
class 1{}
class 2{}
class 3{}
@enduml

其效果:1和2占了第1行,第3个元素占了第2行
在这里插入图片描述
示例4:4个元素

@startuml
class 1{}
class 2{}
class 3{}
class 4{}
@enduml

其效果:1和2是第1行,3和4是第2行
在这里插入图片描述

3 X 3 最多容纳9个元素

示例5:5个元素

@startuml
class 1{}
class 2{}
class 3{}
class 4{}
class 5{}
@enduml

其效果:5个元素的时候,1和2和3占据了第1行,4和5在第2行
在这里插入图片描述

示例6:9个元素

@startuml
class 1{}
class 2{}
class 3{}
class 4{}
class 5{}
class 6{}
class 7{}
class 8{}
class 9{}
@enduml

其效果:平均每行3个
在这里插入图片描述

4 X 4 最多容纳16个元素

示例7:10个元素

@startuml
class 1{}
class 2{}
class 3{}
class 4{}
class 5{}
class 6{}
class 7{}
class 8{}
class 9{}
class 10{}
@enduml

其效果:第1行由1,2,3变成了1,2,3,4
在这里插入图片描述

有没有发现什么规律?貌似在按照正方形来提前规划出位置,然后依次往里面填充元素
什么意思呢?解释一下,什么叫正方形布局。

1x1:最多容纳1个元素,即1个元素占1行
2x2:最多容纳4个元素,即超过5个,布局就要变成 3X3,第1行就变成了3个元素
3x3:最多容纳9个元素,即超过9个,布局就要变成 4X4,第1行就变成了4个元素
...

验证一下猜想,超过16个元素会怎么样?

5 X 5 最多容纳25个元素

示例8:17个元素

@startuml
class 1{}
class 2{}
class 3{}
class 4{}
class 5{}
class 6{}
class 7{}
class 8{}
class 9{}
class 10{}
class 11{}
class 12{}
class 13{}
class 14{}
class 15{}
class 16{}
class 17{}
@enduml

其效果:布局变成了 5X5。
当超过25个元素时,会变成6X6布局,第1行也就会变成6个元素。
在这里插入图片描述

以上就是自动布局的原则,那有没有办法改变原有的布局方式呢?
当然有,接着往下看。

3.改变布局

改变布局就是改变元素的相对位置,给2个元素添加操作符。

先说结论,2个元素之间操作符如下,
以下是改变水平结构,

(1)- 或者 .
当前元素会向最左移动,占据纵向位置
其他元素仍按照原有的方式进行布局(2)注释,note left或者right
当前元素会向最左移动,占据纵向位置,优先级高于(1)
同等注释,按元素先后位置排序

以下是改变垂直结构,

(1)-- 或者 ..
当前位置会向最右移动,占据纵向位置
其他元素仍按照原有的方式进行布局(2)注释,note top或者bottom
当前元素会向最右移动,占据纵向位置,优先级低于(1)
同等注释,按元素先后位置排序

通用原则,

.和-的只是线条的表示区别,.个是虚线,-个是实线。
[hidden] 用于隐藏线条

以 3X3布局,9个元素为例,解释一下结论,

@startuml
class 1{}
class 2{}
class 3{}
class 4{}
class 5{}
class 6{}
class 7{}
class 8{}
class 9{}
@enduml

其效果:
在这里插入图片描述

3.1 水平结构

3.1.1 操作符 .

示例:把class 4 放在class 3的后边,位于同一行

@startuml
class 1{}
class 2{}
class 3{}
class 4{}
class 5{}
class 6{}
class 7{}
class 8{}
class 9{}class 10{}
class 11{}3 . 4@enduml

效果,
在这里插入图片描述

3.1.2 操作符 . 隐藏线条

示例:把class 4 放在class 3的后边,位于同一行,但是隐藏线条。

@startuml
class 1{}
class 2{}
class 3{}
class 4{}
class 5{}
class 6{}
class 7{}
class 8{}
class 9{}class 10{}
class 11{}3 .[hidden] 4@enduml

效果,
在这里插入图片描述

3.1.3 操作符 -

示例:把class 3 放在class 4的后边,位于同一行

@startuml
class 1{}
class 2{}
class 3{}
class 4{}
class 5{}
class 6{}
class 7{}
class 8{}
class 9{}class 10{}
class 11{}4 - 3@enduml

效果,
在这里插入图片描述

3.1.4 添加注释 left或者right
@startuml
class 1{}class 5{
}
note left of 5注释
end noteclass 2{
}
note left of 2注释
end noteclass 3{}
class 4{}class 6{}
class 7{}
class 8{}
class 9{}class 10{}
class 11{}4 - 3@enduml

效果,
在这里插入图片描述

3.2 垂直结构

3.2.1 操作符 - -

示例:把class 4 放在class 3的下边

@startuml
class 1{}
class 2{}
class 3{}
class 4{}
class 5{}
class 6{}
class 7{}
class 8{}
class 9{}class 10{}
class 11{}
class 11{}3 -- 4@enduml

效果,
在这里插入图片描述

3.2.2 操作符 . .

示例:把class 3 放在class 43的下边

@startuml
class 1{}
class 2{}
class 3{}
class 4{}
class 5{}
class 6{}
class 7{}
class 8{}
class 9{}class 10{}
class 11{}
class 11{}4 .. 3@enduml

效果,
在这里插入图片描述

3.2.3 添加注释top或者bottom
@startuml
class 1{}class 5{
}
note bottom of 5注释
end noteclass 2{
}
note top of 2注释
end noteclass 3{}
class 4{}class 6{}
class 7{}
class 8{}
class 9{}class 10{}
class 11{}4 -- 3@enduml

在这里插入图片描述

至此,可以开启的你的UML大法了~


写在后面

  如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。


系列文章

【PlantUML】-类图
【PlantUML】-时序图
【IDEA插件】- PlantUML integration-Can‘t find Graphviz

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/619903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【猫头虎分享】全面揭秘鸿蒙4.0:华为的技术革新与市场影响

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》…

逆变器3前级推免(高频变压器)

一节电池标压是在2.8V—4.2V之间,所以24V电压需要大概七节电池串联。七节电池电压大概在19.6V—29.4V之间。 从24V的电池逆变到到220V需要升压的过程。那么我们具体需要升压到多少? 市电AC220V是有效值电压,峰值电压是220V*1.414311V 如果…

ssm基于Javaweb的物流信息管理系统的设计与实现论文

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统物流信息管理难度大,容错率低,管理…

Unity的Camera类——视觉掌控与深度解析(下)

前言 欢迎阅读本篇博客,这章我们将深入探讨 Unity 游戏引擎中 Camera 类的委托和枚举。摄像机在游戏开发中扮演着关键角色,它不仅定义了玩家视角的窗口,还影响着游戏的视觉表达和整体体验。理解和正确使用 Camera 类的枚举和委托&#xff0c…

【mmseg】‘SegDataPreProcessor is not in the model registry问题解决

问题描述: 在使用mmseg的模型进行推理导出为torchscript时出错: KeyError: "class EncoderDecoder in mmseg/models/segmentors/encoder_decoder.py: SegDataPreProcessor is not in the model registry. Please check whether the value of SegDat…

数据结构——排序算法之快速排序

个人主页:日刷百题 系列专栏:〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 🌎欢迎各位→点赞👍收藏⭐️留言📝 ​ ​ 前言: 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法。 基本思想&…

设计模式-工厂方法模式

一 设计模式-工厂方法模式 工厂方法模式(Factory Method Pattern)是一种常用的类创建型设计模式,它属于对象的创建型模式,主要用来封装对象的创建过程。在该模式中,一个抽象工厂定义了一个接口用于创建产品对象&#x…

C++ 具名要求-全库范围的概念 - (Swappable) - (ValueSwappable)

此页面中列出的具名要求,是 C 标准的规范性文本中使用的具名要求,用于定义标准库的期待。 某些具名要求在 C20 中正在以概念语言特性进行形式化。在那之前,确保以满足这些要求的模板实参实例化标准库模板是程序员的重担。若不这么做&#xf…

opencv-4.8.0编译及使用

1 编译 opencv的编译总体来说比较简单,但必须记住一点:opencv的版本必须和opencv_contrib的版本保持一致。例如opencv使用4.8.0,opencv_contrib也必须使用4.8.0。 进入opencv和opencv_contrib的github页面后,默认看到的是git分支&…

NAS搭建NextCloud集成OnlyOffice

1、安装NextCloud(如果总是中断就换个镜像源) 2、创建容器 如果需要穿透选HOST 端口必须80 读写必须开 3、启动容器并配置,看图。 启动看日志,等启动完成再访问。首次启动大约5-10分钟左右。 成功后,我们正常进行安装…

学习selenium+python使用 XPath 表达式来实现找到目标元素时智能封装等待,执行测试代码启动Chrome浏览器后,地址栏只显示data;

背景 学习使用 XPath 表达式来实现找到目标元素时智能封装等待执行测试代码启动Chrome浏览器后,地址栏只显示data; 代码如下 import unittest from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from …

6.2 声音编辑工具GoldWave5简介(5)

6.2.4录制声音 利用Windows自带的“录音机”录制声音时,只能录制最大时长为1分钟的声音,而利用GoldWave5,可以录制时长长达277小时以上的声音,而且,录制完成后,还可以很方便地对声音进行处理、转换等操作。…

由jar包冲突导致的logback日志不输出

最近接手一个厂商移交的项目,发现后管子系统不打印日志。 项目使用的logback 本地断点调试发现logback-classic jar冲突导致 打出的war中没有 相关的jar 解决方法: 去除pom 文件中多余的 logback-classic 应用,只保留最新版本的。 重新打…

记录用python封装的第一个小程序

前言 我要封装的是前段时间复现的一个视频融合拼接的程序,现在我打算将他封装成exe程序,我在这里只记录一下我封装的过程,使用的是pyinstaller,具体的封装知识我就不多说了,可以参考我另一篇博客:将Python…

NLP技术在搜索推荐场景中的应用

NLP技术在搜索推荐中的应用非常广泛,例如在搜索广告的CTR预估模型中,NLP技术可以从语义角度提取一些对CTR预测有效的信息;在搜索场景中,也经常需要使用NLP技术确定展现的物料与搜索query的相关性,过滤掉相关性较差的物…

HashMap 为什么线程不安全?

如果你现在需要准备面试,可以关注我的公众号:”Tom聊架构“,回复暗号:”578“,领取一份我整理的50W字面试宝典,可以帮助你提高80%的面试通过率,价值很高!! JDK1.7 及之前…

函数指针和回调函数 以及指针函数

函数指针(Function Pointer): 定义: 函数指针是指向函数的指针,它存储了函数的地址。函数的二制制代码存放在内存四区中的代码段,函数的地址它在内存中的开始地址。如果把函数的地址作为参数,就…

力扣2182.构造限制重复的字符串

思路:先记录每个字符的出现次数,构建一个新字符串,从尾取字符,每取一个该字符个数-1,若该字符已经取到有repeatLimit个,则递归取次大的字符,并对应字符个数-1,若没有次大字符了&…

Elasticsearch基础篇(七):分片大小修改和路由分配规则

Elasticsearch基础篇(七):分片大小修改和路由分配规则1. 分片1.1 主分片(Primary Shard)1.2 副本分片(Replica Shard)1.3 分片路由(Routing Shard) 2. 分片分配的基本策略3. 分片写入验证3.1 数…

2024年前端最新面试题-vue3(持续更新中)

文章目录 前言正文什么是 MVVC什么是 MVVM什么是 SPA什么是SFC为什么 data 选项是一个函数Vue 组件通讯(传值)有哪些方式Vue 的生命周期方法有哪些如何理解 Vue 的单项数据流如何理解 Vue 的双向数据绑定Vue3的响应式原理是什么介绍一下 Vue 的虚拟 DOM介…