Files
lupin-demo/todolist.md
2026-01-21 17:58:55 +08:00

144 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 优化
## 当前实现优化点
1. 目前绘制罗盘代码的demo仅仅是为了测试工具类是否正确。优化为统一使用json配置来实现罗盘绘制。
2. 扇区的内容可以是是文字或者SVG图标如为SVGsectors的content中指定svg文件名SVG布局规则同文字。
3. 扇区内容支持多文本单元:使用"|"分隔多个文本(如"甲乙|子|丙丁"),角度分配采用智能策略:
- 1个单元100%
- 2个单元平均 [0.5, 0.5]
- 3个单元中间大 [0.25, 0.5, 0.25]
- 4个单元中间两个大 [0.2, 0.3, 0.3, 0.2]
- 5个及以上平均分配
字体大小和位置通过工具函数自动计算。单个扇区内的多文本单元之间无分割线。
4. 废弃目前颜色生成规则。使用在Json中严格配置。详见《Json文件配置》。总体规则是优先级低到高分别是全局背景色 - layer着色 - sectors着色。
5. Json中不用关注是第几层按配置的rinnerrouter等参数绘制即可。
## Json文件配置
1. 扇区背景色着色原则:
最高优先级在layer中指定colorRef
第二优先级colorRef规律填色也就是说如果同一个sector中指定了colorRef该sector也指定了layer级别的colorRef以前者为准innerFill使用相同规则。
参数:
startAngle表示第一个扇区的起始角度以度为单位0度为正北方向顺时针增加
innerfill对num、interval定义的着色扇区生效
-- start表示着色起始扇区已废弃统一从第1个扇区开始
num表示连接几个单元着色
interval表示中间间隔几个单元
比如num=3,interval=1,意思是从第1个扇区开始着色对1、2、3扇区着色colorref4扇区全局背景5、6、7着色colorref……
groupSplit: 隐藏同组扇区之间的分割线, false表示不显示group中间分割线。如该参数不设置取默认值true显示。
”layers“:
{
-- ========================================
-- 12等分
-- ========================================
-- 演示:规律填色 - 3个着色1个间隔
-- 着色规律num=3, interval=1
-- 效果扇区1-3着色4背景色5-7着色8背景色9-11着色12背景色
{
"divisions": 12,
"rInner": 160,
"rOuter": 200,
"startAngle": 0, -- 第一个扇区的起始角度0度为正北方向顺时针
"innerFill": 1, -- 着色区域的内缩设置
"colorRef": "土", -- 着色使用的颜色引用
-- "start": 1, -- 从第1个扇区开始着色已废弃统一从第1个扇区开始
"num": 3, -- 连续着色3个扇区
"interval": 1, -- 着色后间隔1个扇区
"sectors": [
{ "content": "子", "colorRef": "水", "innerFill": 1 }, -- 高优先级着色:水
{ "content": "丑" },
{ "content": "寅", "colorRef": "木", "innerFill": 0 }, -- 高优先级着色:木
{ "content": "卯", "colorRef": "木", "innerFill": 1 }, -- 高优先级着色:木
{ "content": "辰" },
{ "content": "巳", "colorRef": "火", "innerFill": 1 }, -- 高优先级着色:火
{ "content": "午", "colorRef": "火", "innerFill": 0 }, -- 高优先级着色:火
{ "content": "未", "innerFill": 1 },
{ "content": "申", "colorRef": "金", "innerFill": 0 }, -- 高优先级着色:金
{ "content": "酉", "colorRef": "金", "innerFill": 1 }, -- 高优先级着色:金
{ "content": "戌" },
{ "content": "亥", "innerFill": 0 }
]
},
-- ========================================
-- 120等分没有sectors表示扇区没有内容只有填色
-- ========================================
-- 演示:规律填色
-- 着色规律num=3, interval=2
-- 效果扇区1-3着色4、5背景色……
{
"divisions": 120,
"rInner": 300,
"rOuter": 310,
"startAngle": -4.5, -- 第一个扇区的起始角度0度为正北方向顺时针
"innerFill": 0, -- 着色区域的内缩设置
"colorRef": "火", -- 着色使用的颜色引用
"num": 3, -- 连续着色3个扇区每个区域跨3度
"interval": 2, -- 着色后间隔1个扇区
"groupSplit": false -- 隐藏同组扇区之间的分割线, false表示不显示group中间分割线该参数不设置默认显示。
},
-- ========================================
-- 12等分隐藏group分割线
-- ========================================
-- 演示所有填色为colorRef不显示group分隔线
-- 着色规律num=3, interval=0
-- 效果扇区1-34-67-910-12四组只显示组间分割线组内分割线不显示。
{
"divisions": 12,
"rInner": 160,
"rOuter": 200,
"startAngle": 30, -- 第一个扇区的起始角度0度为正北方向顺时针
"innerFill": 1, -- 着色区域的内缩设置
"colorRef": "土", -- 着色使用的颜色引用
"num": 3, -- 连续着色3个扇区
"interval": 0, -- 着色后间隔1个扇区
"groupSplit": false -- 隐藏同组扇区之间的分割线, false表示不显示group中间分割线该参数不设置默认显示。
"sectors": [
{ "content": "子" }, { "content": "丑" }, { "content": "寅" },
{ "content": "卯" }, { "content": "辰" }, { "content": "巳" },
{ "content": "午" }, { "content": "未" }, { "content": "申" },
{ "content": "酉" }, { "content": "戌" }, { "content": "亥" }
]
},
}
2. 中心icon配置参数该icon正向指北可旋转
rIcon -- 半径
opacity -- 圆的透明度
name -- icon文件名svg路径固定
-- ========================================
-- 中心图标配置 (Center Icon Configuration)
-- ========================================
"centerIcon": {
"rIcon": 50, -- 图标半径,单位:像素
"opacity": 0.8, -- 图标透明度0.0-1.00为完全透明1为完全不透明
"name": "centericon.svg" -- SVG图标文件名路径固定为 src/assets/icons/ 目录
}
3. 360度刻度环配置参数
rinner
router
showDegree -- 是否显示度数0不限时1显示如显示按10度间隔显示
mode -- inner表示刻度线在rinner的外部outter表示刻度线在routter的内部both两边都标注度数如有居于中间
opacity -- 圆的透明度,目的是有时候只需要显示刻度,而不用显示圆圈
-- ========================================
-- 360度刻度环配置 (360 Degree Scale Ring)
-- ========================================
"degreeRing": {
"rInner": 450, -- 刻度环内半径
"rOuter": 500, -- 刻度环外半径
"showDegree": 1, -- 是否显示度数0=不显示1=显示(按 10° 间隔)
"mode": "both", -- 刻度线模式:"inner"在rInner外侧、"outer"在rOuter内侧、"both"(两侧都有,度数居中)
"opacity": 0.3, -- 圆环透明度0.0-1.0设置为0可以只显示刻度而不显示圆圈
"tickLength": 6, -- 刻度线长度,单位:像素。
"tickLengthStep“: 1, -- 刻度线长度差1表示minorTick比majorTick短1px microTick比minorTick短1px。0表示majorTick,minorTick,minorTick长度相同。
"majorTick": 10, -- 主刻度间隔(度),如 10 表示每 10° 一个主刻度
"minorTick": 5, -- 次刻度间隔(度),如 2 表示每 2° 一个次刻度
"microTick": 1, -- 微刻度间隔(度),如 1 表示每 1° 一个微刻度
"tickColor": "#ffffff",-- 刻度线颜色
"ringColor": "#ffffff" -- 圆环颜色
}