Compare commits
33 Commits
9160bc1a70
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6a7120f685 | ||
|
|
e14ed0f9fc | ||
|
|
b7b51cd896 | ||
|
|
b54cc3f623 | ||
|
|
9fcc29782e | ||
|
|
cbd85e3e8a | ||
|
|
462e2b947a | ||
|
|
ed6b252350 | ||
|
|
c642976d0d | ||
|
|
145bb1cc34 | ||
|
|
721da91535 | ||
|
|
d6312fcd16 | ||
|
|
dc45937623 | ||
|
|
98e95b88cf | ||
|
|
f0234d1d8a | ||
|
|
405576c7c3 | ||
|
|
080700f721 | ||
|
|
6c26e15402 | ||
|
|
ba4ddcd9b1 | ||
|
|
b9553805e5 | ||
|
|
c1ec2c926f | ||
|
|
e335bf2f87 | ||
|
|
0b465031d9 | ||
|
|
f2f42f077e | ||
|
|
af1f313be5 | ||
|
|
04d893f8ca | ||
|
|
eedfe94bdb | ||
|
|
1397ec5bf7 | ||
|
|
4b371d3929 | ||
|
|
fbf720c295 | ||
|
|
25eb8c4570 | ||
|
|
0664599937 | ||
|
|
75e43312f1 |
1
.codex/.gitignore
vendored
Normal file
1
.codex/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
tmp/
|
||||
53
AGENTS.md
Normal file
53
AGENTS.md
Normal file
@@ -0,0 +1,53 @@
|
||||
|
||||
以下是适用于所有仓库的通用工作约定,项目级配置可覆盖此文件的条目。
|
||||
1. 中文优先:所有与用户交互必须使用中文回答,包括错误信息、日志及说明。必要时可附带英文术语,但不应影响理解。
|
||||
3. 提交前验证:修改代码后必须运行测试、类型检查和 linter,确保所有检查通过后再提交 。请保持每次提交的改动集中、清晰,并使用描述性提交信息。
|
||||
4. 依赖管理:添加或升级生产依赖前必须征求确认,避免引入重量级库 。优先使用轻量和社区成熟的包,避免重复依赖。
|
||||
5. 小步迭代:避免大规模重构或一次性修改过多文件;优先分解为多个小改动,提交之间保持逻辑一致性。
|
||||
6. 文档同步:公共函数、类和模块应编写文档,并在更新行为时同步更新文档或相关说明。
|
||||
|
||||
沟通与风格
|
||||
1. 证据优先:回答问题时依赖可靠证据和文档;如不确定请使用搜索工具查证后再答复 。
|
||||
2. 礼貌直接:保持礼貌、简洁和直接,不绕弯子;避免无依据的恭维或夸张的语气。
|
||||
3. 提问澄清:当任务不明确或缺少关键信息时,先提出针对性澄清问题,而不是擅自做出假设。
|
||||
4. 避免猜测:不要捏造事实;在信息不足时明确说明并建议进一步查证。
|
||||
|
||||
代理行为
|
||||
1. 迭代执行:遵循“思考→行动→观察”的循环(ReAct 模式),逐步完成任务 。每次只专注于一个明确的子任务,待得到结果后再决定下一步 。
|
||||
2. 工具清晰:使用工具前先定义清晰的名称、参数和用途;在调用时提供必要的参数,并关注输出是否符合预期 。
|
||||
3. 错误与重试:处理异常时应捕获错误、记录日志并适当重试,但必须限制重试次数,避免死循环 。对意外格式的回复使用模式匹配或正则处理 。
|
||||
4. 上下文控制:意识到语言模型有上下文窗口限制,必要时剪裁不相关的历史消息或分段处理 。
|
||||
5. 简化流程:尽量合并相关工具调用,降低 LLM 调用次数;优先使用确定性逻辑(如纯函数)代替代理决策 。
|
||||
|
||||
工程习惯
|
||||
1. 模块化设计:鼓励使用小而明确的函数和模块,避免巨型文件和过度耦合。遵循一致的命名规范和代码风格(如 PEP8、Prettier 等)。
|
||||
2. 统一格式化:在提交前运行格式化工具(如 prettier --write 或 black),确保代码风格一致。可在每个项目的 package.json 或 pyproject.toml 中定义格式化脚本。
|
||||
3. 测试先行:为新增功能或修复缺陷编写或更新单元测试,并确保测试通过 。
|
||||
4. 避免重复:公共逻辑应抽象为库或工具函数,避免在多个文件中复制粘贴代码。
|
||||
|
||||
<!--
|
||||
安全与权限
|
||||
1. 白名单操作:以下操作在无需用户确认的情况下默认允许:读取文件、列出目录、格式化单个文件、运行单元测试、执行单文件类型检查或 lint 。
|
||||
2. 需要确认:以下操作必须事先征求用户明确批准:安装或升级依赖、推送代码到远程仓库、删除或移动文件、运行全面构建或端到端测试 。
|
||||
3. 敏感系统:对接数据库、支付系统或外部 API 时,默认使用只读模式;若需要写入或收费操作,需遵循 Supabase/Stripe 安全规程,提前展示计划和风险并等待确认。
|
||||
4. 密钥与凭据:不得在代码或日志中泄露 API 密钥、数据库连接字符串或其他敏感信息。如需配置环境变量,请在本地 .env 文件中设置,并在文档中说明名称而非值。
|
||||
-->
|
||||
|
||||
流程简化与信息流
|
||||
1. 精简工具调用:将常用的多步操作整合为单个工具或脚本,减少代理和 LLM 的往返次数 。
|
||||
2. 充分记录:在自定义工具中使用日志(例如打印调试信息),记录输入参数、执行步骤和错误信息,以便模型理解并调整后续动作 。
|
||||
3. 明确格式:在工具文档字符串中注明输入参数的格式、单位、时间格式等;输出应该清晰易懂,并在出错时提供帮助性提示 。
|
||||
|
||||
测试与验证
|
||||
1. 必跑测试:在所有仓库中,修改任何代码后必须运行现有测试;无测试的项目应优先创建测试框架,如 pytest、jest、vitest 等,并逐步补齐覆盖率。
|
||||
2. 持续集成:鼓励在项目中配置自动化的测试、构建和静态分析,以便代理能够调用相应命令验证更改。
|
||||
3. 最小化差异:提交的代码差异应局限于所需修改的文件范围;避免无关文件的自动格式化或重写 。
|
||||
|
||||
维护与更新
|
||||
1. 作为单一真相源:将此文件视为个人或团队的 AI 代理工作手册,不应在多处复制粘贴同样的指导信息 。
|
||||
2. 与代码同步:当您的工作流、构建命令或安全策略发生变化时,请同步更新此文件,并在对应的项目级别文件中适当覆盖或补充 。
|
||||
<!--
|
||||
3. 验证加载:如需确认 Codex 是否正确读取了本文件,可运行 codex --ask-for-approval never "Summarize the current instructions.",它将列出正在生效的指导 。
|
||||
4. 临时覆盖:若需暂时覆盖全局规则,可以创建 ~/.codex/AGENTS.override.md 并在完成后删除 。
|
||||
-->
|
||||
|
||||
@@ -272,23 +272,17 @@ const label = '测'.repeat(textLength);
|
||||
|
||||
## 6. 颜色生成策略
|
||||
|
||||
使用 HSL 颜色空间实现层次分明的配色:
|
||||
当前实现以主题色板为核心:`colorRef` 优先解析为主题色名,未命中时退回原值。
|
||||
|
||||
```typescript
|
||||
function generateSectorColor(
|
||||
layerIndex: number,
|
||||
pieIndex: number,
|
||||
totalPies: number = 24
|
||||
): string {
|
||||
const hue = (pieIndex * 360) / totalPies; // 色相均匀分布
|
||||
const light = 78 - layerIndex * 10; // 亮度由内向外递减
|
||||
return `hsl(${hue} 70% ${light}%)`;
|
||||
}
|
||||
```
|
||||
**扇区填色优先级**:
|
||||
1. 扇区级 `colorRef`
|
||||
2. 层级规律填色(`layer.colorRef` + `num/interval/patternOffset`)
|
||||
3. 全局 `background`
|
||||
|
||||
**效果**:
|
||||
- 相邻扇区色相不同,易于区分
|
||||
- 内层较亮,外层较暗,突出层次
|
||||
**刻度环颜色**:
|
||||
- `degreeRing.colorRef` 存在时,渲染环形背景填充(作为刻度环背景)。
|
||||
- `tickColor` / `ringColor` 显式提供则优先使用;未提供时根据背景计算对比色。
|
||||
- `opacity` 同时作用于环形背景和内外圆环描边。
|
||||
|
||||
## 7. 组件架构
|
||||
|
||||
|
||||
339
docs/fenceng.md
Normal file
339
docs/fenceng.md
Normal file
@@ -0,0 +1,339 @@
|
||||
|
||||
# 详细说明
|
||||
|
||||
可以在luopan中呈现的各类指标说明,可以随意组合放在不同的罗盘layer上。
|
||||
|
||||
## 天池,中心指南针
|
||||
|
||||
## 阴阳,阳在南
|
||||
divisions=2
|
||||
阴(-90,黑),阳(白)
|
||||
|
||||
## 方位:
|
||||
divisions=4
|
||||
- 北(-45)、东、南、西
|
||||
|
||||
divisions=8
|
||||
- 北(-22.5)、东北、东、东南、南、西南、西、西北
|
||||
|
||||
## 五行
|
||||
|
||||
## 洛书数
|
||||
divisions=8
|
||||
|
||||
1(-22.5), 8, 3, 4, 9, 2, 7, 6
|
||||
|
||||
比例:[0.5,0.5]
|
||||
坎|1(-22.5), 艮|8, 震|3, 巽|4, 离|9, 坤|2, 兑|7, 乾|6
|
||||
|
||||
## 八卦
|
||||
divisions=8
|
||||
坎(-22.5) → 艮 → 震 → 巽 → 离 → 坤 → 兑 → 乾
|
||||
|
||||
比例:【0.3,0.4,0.3】
|
||||
坎(-22.5)|☵|水 → 艮|☶|山 → 震|☳|雷 → 巽|☴|风 → 离|☲|火 → 坤|☷|地 → 兑|☱|泽 → 乾|☰|天
|
||||
|
||||
## 二十四山
|
||||
divisions=24, num=3,interval=3
|
||||
- 不带五行
|
||||
子(–7.5°),顺时针:子 → 癸 → 丑 → 艮 → 寅 → 甲 → 卯 → 乙 → 辰 → 巽 → 巳 → 丙 → 午 → 丁 → 未 → 坤 → 申 → 庚 → 酉 → 辛 → 戌 → 乾 → 亥 → 壬
|
||||
|
||||
- 带五行
|
||||
比例:[0.7,0.3]
|
||||
子(–7.5°),顺时针: 子|水, 癸|水, 丑|土, 艮|土, 寅|木, 甲|木, 卯|木, 乙|木, 辰|土, 巽|木, 巳|火, 丙|火, 午|火, 丁|火, 未|土, 坤|土, 申|金, 庚|金, 酉|金, 辛|金, 戌|土, 乾|金, 亥|水, 壬|水。
|
||||
|
||||
## 二十四山挨星
|
||||
divisions=24, num=3,interval=3
|
||||
- 依据口诀:甲癸申贪狼;坤壬乙巨门;子卯未禄存;戌乾巳文曲;辰巽亥武曲;艮丙辛破军;寅庚丁左辅;午酉丑右弼。
|
||||
比例:[0.4,0.3,0.3]
|
||||
巨门(-22.5)|壬|2 → 禄存|子|3 → 贪狼|癸|1 → 右弼|丑|9 → 破军|艮|7 → 左辅|寅|8 → 贪狼|甲|1 → 禄存|卯|3 → 巨门|乙|2 → 武曲|辰|6 → 武曲|巽|6 → 文曲|巳|4 → 破军|丙|7 → 右弼|午|9 → 左辅|丁|8 → 禄存|未|3 → 巨门|坤|2 → 贪狼|申|1 → 左辅|庚|8 → 右弼|酉|9 → 破军|辛|7 → 文曲|戌|4 → 文曲|乾|4 → 武曲|亥|6
|
||||
|
||||
比例:[0.4,0.3,0.3]
|
||||
- 依据口诀:甲子申贪狼坎一白;坤壬乙巨门坤二黑;癸卯未禄存震三碧;辰巽亥文曲巽四绿;戌乾巳武曲乾六白;丁酉丑破军兑七赤;艮丙辛左辅艮八白;寅午庚右弼离九紫。
|
||||
巨门(-22.5)|壬|2 → 贪狼|子(–7.5°)|1 → 禄存|癸|3 → 破军|丑|7 → 左辅|艮|8 → 右弼|寅|9 → 贪狼|甲|1 → 禄存|卯|3 → 巨门|乙|2 → 文曲|辰|4 → 文曲|巽|4 → 武曲|巳|6 → 左辅|丙|8 → 右弼|午|9 → 破军|丁|7 → 禄存|未|3 → 巨门|坤|2 → 贪狼|申|1 → 右弼|庚|9 → 破军|酉|7 → 左辅|辛|8 → 武曲|戌|6 → 武曲|乾|6 → 文曲|亥|4
|
||||
|
||||
比例:[0.4,0.3,0.3]
|
||||
- 依据口诀:甲子申贪狼坎一白;坤壬乙巨门坤二黑;癸卯未禄存震三碧;辰巽亥文曲巽四绿;戌乾巳武曲乾六白;丁酉丑破军兑七赤;艮丙辛左辅艮八白;寅午庚右弼离九紫。 
|
||||
巨门(-22.5)|壬|2 → 贪狼|子(–7.5°)|1 → 禄存|癸|3 → 破军|丑|7 → 左辅|艮|8 → 右弼|寅|9 → 贪狼|甲|1 → 禄存|卯|3 → 巨门|乙|2 → 文曲|辰|4 → 文曲|巽|4 → 武曲|巳|6 → 左辅|丙|8 → 右弼|午|9 → 破军|丁|7 → 禄存|未|3 → 巨门|坤|2 → 贪狼|申|1 → 右弼|庚|9 → 破军|酉|7 → 左辅|辛|8 → 武曲|戌|6 → 武曲|乾|6 → 文曲|亥|4
|
||||
|
||||
## 二十四天星
|
||||
- 龙楼玉叶系
|
||||
比例:[0.5,0.5]
|
||||
- 子|帝座(–7.5°) → 癸|鸾驾 → 丑|天吊 → 艮|凤阁 → 寅|金箱 → 甲|鬼劫 → 卯|将军 → 乙|功曹 → 辰|天罡 → 巽|宝殿 → 巳|金枝 → 丙|炎烈 → 午|帝辇 → 丁|龙墀 → 未|天煞 → 坤|宝盖 → 申|玉印 → 庚|劫杀 → 酉|华盖 → 辛|直符 → 戌|地杀 → 乾|龙楼 → 亥|玉叶 → 壬|八武
|
||||
|
||||
- 帝座(–7.5°) → 鸾驾 → 天吊 → 凤阁 → 金箱 → 鬼劫 → 将军 → 功曹 → 天罡 → 宝殿 → 金枝 → 炎烈 → 帝辇 → 龙墀 → 天杀 → 宝盖 → 玉印 → 劫杀 → 华盖 → 直符 → 地杀 → 龙楼 → 玉叶 → 八武
|
||||
|
||||
- 天皇 · 天市 · 紫微系
|
||||
比例:[0.5,0.5]
|
||||
- 子|天皇(–7.5°) → 癸|天辅 → 丑|天英 → 艮|天芮 → 寅|天柱 → 甲|天心 → 卯|天禽 → 乙|天冲 → 辰|天任 → 巽|天蓬 → 巳|太乙 → 丙|少微 → 午|紫微 → 丁|勾陈 → 未|轩辕 → 坤|太微 → 申|天市 → 庚|文昌 → 酉|文曲 → 辛|禄存 → 戌|巨门 → 乾|廉贞 → 亥|武曲 → 壬|破军
|
||||
|
||||
- 天皇(-7.5) → 天辅 → 天英 → 天芮 → 天柱 → 天心 → 天禽 → 天冲 → 天任 → 天蓬 → 太乙 → 少微 → 紫微 → 勾陈 → 轩辕 → 太微 → 天市 → 文昌 → 文曲 → 禄存 → 巨门 → 廉贞 → 武曲 → 破军
|
||||
|
||||
- 太乙九宫扩展系(把九星拆展成二十四位,见于部分三元、太乙盘)
|
||||
比例:[0.5,0.5]
|
||||
- 子|太乙(–7.5°) → 癸|摄提 → 丑|轩辕 → 艮|招摇 → 寅|天符 → 甲|青龙 → 卯|朱雀 → 乙|白虎 → 辰|玄武 → 巽|天乙 → 巳|地乙 → 丙|人乙 → 午|雷公 → 丁|风伯 → 未|雨师 → 坤|电母 → 申|火官 → 庚|水官 → 酉|土府 → 辛|金府 → 戌|木府 → 乾|斗母 → 亥|河图 → 壬|洛书 → 中皇
|
||||
|
||||
- 太乙(-7.5) → 摄提 → 轩辕 → 招摇 → 天符 → 青龙 → 朱雀 → 白虎 → 玄武 → 天乙 → 地乙 → 人乙 → 雷公 → 风伯 → 雨师 → 电母 → 火官 → 水官 → 土府 → 金府 → 木府 → 斗母 → 河图 → 洛书 → 中皇
|
||||
|
||||
- 催官篇 / 杨公系(简化实用盘,很多民间罗盘其实用的是这个“缩水版”)
|
||||
- 子|正曜(–7.5°) → 癸|副曜 → 丑|贵人 → 艮|禄星 → 寅|文星 → 甲|武星 → 卯|奸星 → 乙|耗星 → 辰|病星 → 巽|死星 → 巳|绝星 → 丙|胎星 → 午|养星 → 丁|长生 → 未|沐浴 → 坤|冠带 → 申|临官 → 庚|帝旺 → 酉|衰 → 辛|病 → 戌|死 → 乾|墓 → 亥|绝 → 壬|胎
|
||||
|
||||
- 正曜(-7.5) → 副曜 → 贵人 → 禄星 → 文星 → 武星 → 奸星 → 耗星 → 病星 → 死星 → 绝星 → 胎星 → 养星 → 长生 → 沐浴 → 冠带 → 临官 → 帝旺 → 衰 → 病 → 死 → 墓 → 绝 → 胎
|
||||
|
||||
## 天人地
|
||||
divisions=24,offset=4,num=3,interval=3
|
||||
天(–7.5°) → 人 → 地 → 天 → 人 → 地 → 天 → 人 → 地 → 天 → 人 → 地 → 天 → 人 → 地 → 天 → 人 → 地 → 天 → 人 → 地 → 天 → 人 → 地
|
||||
|
||||
## 24节气:
|
||||
立春(–7.5°) → 雨水 → 惊蛰 → 春分 → 清明 → 谷雨 → 立夏 → 小满 → 芒种 → 夏至 → 小暑 → 大暑 → 立秋 → 处暑 → 白露 → 秋分 → 寒露 → 霜降 → 立冬 → 小雪 → 大雪 → 冬至 → 小寒 → 大寒
|
||||
|
||||
## 开禧二十八宿与地盘
|
||||
divisions = 28
|
||||
- 虚九少日(偏移0°,跨9°) - 女十一土(跨11°) - 牛七金(跨7°) - 斗二十二木(跨22°) - 箕九半水(跨9.5°) - 尾十八火(跨18°) - 心六月(跨6°) - 房五太日(跨5.5°) - 氐十六少土(跨15.5°) - 亢九太金(跨9.5°) - 角十二太木(跨12.5°) - 井三十少木(跨29.5°) - 鬼二关半金(跨2.5°) - 柳十三半土(跨13.5°) - 星六太日(跨6.5°) - 张十八太月(跨18.5°) - 翼二十少火(跨19.5°) - 轸十八太水(跨18.5°) - 奎十八木(跨18°) - 娄十二太金(跨12.5°) - 胃十五少土(跨14.5°) - 昴十一日(跨11°) - 毕十六半月(跨16.5°) - 觜半火(跨0.5°) - 参九半水(跨9.5°) - 壁九太水(跨9.5°) - 室十八火(跨18°) - 危十六月(跨16°)
|
||||
|
||||
- [0.4,0.3,0.3]
|
||||
虚|九少|日(偏移0°,跨9°) - 女|十一|土(跨11°) - 牛|七|金(跨7°) - 斗|二十二|木(跨22°) - 箕|九半|水(跨9.5°) - 尾|十八|火(跨18°) - 心|六|月(跨6°) - 房|五太|日(跨5.5°) - 氐|十六少|土(跨15.5°) - 亢|九太|金(跨9.5°) - 角|十二太|木(跨12.5°) - 井|三十少|木(跨29.5°) - 鬼|二关半|金(跨2.5°) - 柳|十三半|土(跨13.5°) - 星|六太|日(跨6.5°) - 张|十八太|月(跨18.5°) - 翼|二十少|火(跨19.5°) - 轸|十八太|水(跨18.5°) - 奎|十八|木(跨18°) - 娄|十二太|金(跨12.5°) - 胃|十五少|土(跨14.5°) - 昴|十一|日(跨11°) - 毕|十六半|月(跨16.5°) - 觜|半|火(跨0.5°) - 参|九半|水(跨9.5°) - 壁|九太|水(跨9.5°) - 室|十八|火(跨18°) - 危|十六|月(跨16°)
|
||||
|
||||
## 六十四卦
|
||||
divisions=64
|
||||
- 卦符
|
||||
䷁(0) → ䷖ → ䷇ → ䷓ → ䷏ → ䷢ → ䷬ → ䷋ → ䷗ → ䷚ → ䷂ → ䷩ → ䷲ → ䷔ → ䷐ → ䷘ → ䷣ → ䷕ → ䷾ → ䷤ → ䷶ → ䷝ → ䷰ → ䷌ → ䷒ → ䷨ → ䷻ → ䷼ → ䷵ → ䷥ → ䷹ → ䷉ → ䷀ → ䷪ → ䷍ → ䷡ → ䷈ → ䷄ → ䷙ → ䷊ → ䷫ → ䷛ → ䷱ → ䷟ → ䷸ → ䷯ → ䷑ → ䷭ → ䷅ → ䷮ → ䷿ → ䷧ → ䷺ → ䷜ → ䷃ → ䷆ → ䷠ → ䷞ → ䷷ → ䷽ → ䷴ → ䷦ → ䷳ → ䷎
|
||||
|
||||
- 卦名
|
||||
坤(0) → 剥 → 比 → 观 → 否 → 晋 → 萃 → 豫 → 复 → 震 → 屯 → 随 → 无妄 → 明夷 → 临 → 大壮 → 离 → 旅 → 既济 → 丰 → 鼎 → 革 → 未济 → 同人 → 履 → 兑 → 中孚 → 小过 → 归妹 → 睽 → 节 → 小畜 → 乾 → 姤 → 大有 → 夬 → 需 → 蒙 → 颐 → 讼 → 巽 → 蛊 → 涣 → 升 → 井 → 困 → 过 → 渐 → 师 → 艮 → 否极 → 蹇 → 咸 → 损 → 屯 → 比 → 大畜 → 颐 → 艮 → 归妹 → 渐 → 旅 → 小过 → 谦
|
||||
|
||||
- 卦运数
|
||||
比例:[0.6,0.4]
|
||||
坤(0)|一 → 剥|二 → 比|七 → 观|六 → 否|九 → 晋|七 → 萃|四 → 豫|七 → 复|八 → 震|一 → 屯|二 → 随|六 → 无妄|七 → 明夷|三 → 临|四 → 大壮|六 → 离|一 → 旅|六 → 既济|九 → 丰|三 → 鼎|八 → 革|八 → 未济|九 → 同人|六 → 履|三 → 兑|一 → 中孚|三 → 小过|四 → 归妹|四 → 睽|二 → 节|四 → 小畜|二 → 乾|一 → 姤|八 → 大有|八 → 夬|八 → 需|八 → 蒙|二 → 颐|六 → 讼|四 → 巽|一 → 蛊|三 → 涣|四 → 升|二 → 井|六 → 困|二 → 咸|九 → 渐|八 → 师|六 → 艮|一 → 蹇|六 → 谦|八 → 损|九 → 否|九 → 剥|二 → 比|七 → 大畜|七 → 颐|六 → 艮|一 → 归妹|四 → 渐|八 → 旅|六 → 小过|四 → 谦|八
|
||||
|
||||
- 组合
|
||||
比例:[0.5,0.5]
|
||||
䷁ | 坤 → ䷖ | 剥 → ䷇ | 比 → ䷓ | 观 → ䷏ | 否 → ䷢ | 晋 → ䷬ | 萃 → ䷋ | 豫 → ䷗ | 复 → ䷚ | 震 → ䷂ | 屯 → ䷩ | 随 → ䷲ | 无妄 → ䷔ | 明夷 → ䷐ | 临 → ䷘ | 大壮 → ䷣ | 离 → ䷕ | 旅 → ䷾ | 既济 → ䷤ | 丰 → ䷶ | 鼎 → ䷝ | 革 → ䷰ | 未济 → ䷌ | 同人 → ䷒ | 履 → ䷨ | 兑 → ䷻ | 中孚 → ䷼ | 小过 → ䷵ | 归妹 → ䷥ | 睽 → ䷹ | 节 → ䷉ | 小畜 → ䷀ | 乾 → ䷪ | 姤 → ䷍ | 大有 → ䷡ | 夬 → ䷈ | 需 → ䷄ | 蒙 → ䷙ | 颐 → ䷊ | 讼 → ䷫ | 巽 → ䷛ | 蛊 → ䷱ | 涣 → ䷟ | 升 → ䷸ | 井 → ䷯ | 困 → ䷑ | 过 → ䷭ | 渐 → ䷅ | 师 → ䷮ | 艮 → ䷿ | 未济 → ䷧ | 蹇 → ䷺ | 咸 → ䷜ | 损 → ䷃ | 屯 → ䷆ | 比 → ䷠ | 大畜 → ䷞ | 颐 → ䷷ | 艮 → ䷽ | 归妹 → ䷴ | 渐 → ䷦ | 旅 → ䷳ | 小过 → ䷎ | 谦
|
||||
|
||||
比例:[0.3,0.4,0.3]
|
||||
䷁ | 坤|一 → ䷖ | 剥|二 → ䷇ | 比|七 → ䷓ | 观|六 → ䷏ | 否|九 → ䷢ | 晋|七 → ䷬ | 萃|四 → ䷋ | 豫|七 → ䷗ | 复|八 → ䷚ | 震|一 → ䷂ | 屯|二 → ䷩ | 随|六 → ䷲ | 无妄|七 → ䷔ | 明夷|三 → ䷐ | 临|四 → ䷘ | 大壮|六 → ䷣ | 离|一 → ䷕ | 旅|六 → ䷾ | 既济|九 → ䷤ | 丰|三 → ䷶ | 鼎|八 → ䷝ | 革|八 → ䷰ | 未济|九 → ䷌ | 同人|六 → ䷒ | 履|三 → ䷨ | 兑|一 → ䷻ | 中孚|三 → ䷼ | 小过|四 → ䷵ | 归妹|四 → ䷥ | 睽|二 → ䷹ | 节|四 → ䷉ | 小畜|二 → ䷀ | 乾|一 → ䷪ | 姤|八 → ䷍ | 大有|八 → ䷡ | 夬|八 → ䷈ | 需|八 → ䷄ | 蒙|二 → ䷙ | 颐|六 → ䷊ | 讼|四 → ䷫ | 巽|一 → ䷛ | 蛊|三 → ䷱ | 涣|四 → ䷟ | 升|二 → ䷸ | 井|六 → ䷯ | 困|二 → ䷺ | 咸|九 → ䷭ | 渐|八 → ䷅ | 师|六 → ䷮ | 艮|一 → ䷧ | 蹇|六 → ䷎ | 谦|八 → ䷜ | 损|九 → ䷏ | 否|九 → ䷖ | 剥|二 → ䷇ | 比|七 → ䷠ | 大畜|七 → ䷙ | 颐|六 → ䷮ | 艮|一 → ䷵ | 归妹|四 → ䷭ | 渐|八 → ䷕ | 旅|六 → ䷼ | 小过|四 → ䷎ | 谦|八
|
||||
|
||||
## 八宅八星
|
||||
divisions=64
|
||||
- 八宅风水游年位
|
||||
伏位(-22.5) → 五鬼 → 天医 → 生气 → 延年 → 绝命 → 祸害 → 六煞
|
||||
伏位 → 六煞 → 绝命 → 祸害 → 生气 → 延年 → 天医 → 五鬼
|
||||
伏位 → 延年 → 生气 → 祸害 → 绝命 → 五鬼 → 天医 → 六煞
|
||||
伏位 → 天医 → 五鬼 → 六煞 → 祸害 → 生气 → 绝命 → 延年
|
||||
伏位 → 六煞 → 五鬼 → 绝命 → 延年 → 祸害 → 生气 → 天医
|
||||
伏位 → 天医 → 延年 → 绝命 → 生气 → 祸害 → 五鬼 → 六煞
|
||||
伏位 → 生气 → 祸害 → 延年 → 绝命 → 六煞 → 五鬼 → 天医
|
||||
伏位 → 六煞 → 天医 → 五鬼 → 祸害 → 绝命 → 延年 → 生气
|
||||
|
||||
参考
|
||||
```
|
||||
乾卦(西北)
|
||||
伏位 → 六煞 → 天医 → 五鬼 → 祸害 → 绝命 → 延年 → 生气
|
||||
坎卦(正北)
|
||||
伏位 → 五鬼 → 天医 → 生气 → 延年 → 绝命 → 祸害 → 六煞
|
||||
艮卦(东北)
|
||||
伏位 → 六煞 → 绝命 → 祸害 → 生气 → 延年 → 天医 → 五鬼
|
||||
震卦(正东)
|
||||
伏位 → 延年 → 生气 → 祸害 → 绝命 → 五鬼 → 天医 → 六煞
|
||||
巽卦(东南)
|
||||
伏位 → 天医 → 五鬼 → 六煞 → 祸害 → 生气 → 绝命 → 延年
|
||||
离卦(正南)
|
||||
伏位 → 六煞 → 五鬼 → 绝命 → 延年 → 祸害 → 生气 → 天医
|
||||
坤卦(西南)
|
||||
伏位 → 天医 → 延年 → 绝命 → 生气 → 祸害 → 五鬼 → 六煞
|
||||
兑卦(正西)
|
||||
伏位 → 生气 → 祸害 → 延年 → 绝命 → 六煞 → 五鬼 → 天医
|
||||
```
|
||||
|
||||
## 六十甲子配纳音五行
|
||||
divisions=64
|
||||
比例:[0.6,0.4]
|
||||
甲子(0度) | 金 → 丙子 | 水 → 戊子 | 火 → 庚子 | 土 → 壬子 | 木 → 乙丑 | 金 → 丁丑 | 水 → 己丑 | 火 → 辛丑 | 土 → 癸丑 | 木 → 甲寅 | 水 → 丙寅 | 火 → 戊寅 | 土 → 庚寅 | 木 → 庚寅 | 木 → 壬寅 | 金 → 乙卯 | 水 → 丁卯 | 火 → 己卯 | 土 → 辛卯 | 木 → 癸卯 | 金 → 甲辰 | 火 → 丙辰 | 土 → 戊辰 | 木 → 庚辰 | 金 → 壬辰 | 水 → 乙巳 | 火 → 丁巳 | 土 → 己巳 | 木 → 辛巳 | 金 → 癸巳 | 水 → 甲午 | 金 → 甲午 | 金 → 丙午 | 水 → 戊午 | 火 → 庚午 | 土 → 壬午 | 木 → 乙未 | 金 → 丁未 | 水 → 己未 | 火 → 辛未 | 土 → 癸未 | 木 → 甲申 | 水 → 丙申 | 火 → 戊申 | 土 → 庚申 | 木 → 庚申 | 木 → 壬申 | 金 → 乙酉 | 水 → 丁酉 | 火 → 己酉 | 土 → 辛酉 | 木 → 癸酉 | 金 → 甲戌 | 火 → 丙戌 | 土 → 戊戌 | 木 → 庚戌 | 金 → 壬戌 | 水 → 乙亥 | 火 → 丁亥 | 土 → 己亥 | 木 → 辛亥 | 金 → 癸亥 | 水 → 甲子 | 金
|
||||
|
||||
## 六十四卦六十甲子廿四山五行卦运
|
||||
divisions=64
|
||||
|
||||
- 卦名
|
||||
坤为地(0) → 山地剥 → 水地比 → 风地观 → 天地否 → 火地晋 → 泽地萃 → 雷地豫 → 地雷复 → 震为雷 → 水雷屯 → 泽雷随 → 天雷无妄 → 地火明夷 → 地泽临 → 雷天大壮 → 离为火 → 火山旅 → 水火既济 → 雷火丰 → 火风鼎 → 泽火革 → 火水未济 → 天火同人 → 天泽履 → 兑为泽 → 风泽中孚 → 雷山小过 → 雷泽归妹 → 火泽睽 → 水泽节 → 风天小畜 → 乾为天 → 天风姤 → 火天大有 → 泽天夬 → 水天需 → 山水蒙 → 山雷颐 → 天水讼 → 巽为风 → 山风蛊 → 风水涣 → 地风升 → 水风井 → 泽水困 → 泽风大过 → 风山渐 → 地水师 → 艮为山 → 水山蹇 → 泽山咸 → 山泽损 → 水雷屯 → 水地比 → 山天大畜 → 山雷颐 → 艮为山 → 雷泽归妹 → 风山渐 → 火山旅 → 雷山小过 → 地山谦
|
||||
|
||||
- 上卦
|
||||
坤(0) → 艮 → 坎 → 巽 → 乾 → 离 → 兑 → 震 → 坤 → 震 → 坎 → 兑 → 乾 → 坤 → 坤 → 震 → 离 → 离 → 坎 → 震 → 离 → 兑 → 离 → 乾 → 乾 → 兑 → 巽 → 震 → 震 → 离 → 坎 → 巽 → 乾 → 乾 → 离 → 兑 → 坎 → 艮 → 艮 → 乾 → 巽 → 艮 → 巽 → 坤 → 坎 → 兑 → 兑 → 巽 → 坤 → 坎 → 兑 → 艮 → 坎 → 坎 → 艮 → 艮 → 艮 → 震 → 巽 → 离 → 震 → 坤
|
||||
|
||||
- 下卦
|
||||
坤(0) → 坤 → 坤 → 坤 → 坤 → 坤 → 坤 → 坤 → 震 → 震 → 震 → 震 → 震 → 离 → 兑 → 乾 → 离 → 艮 → 离 → 离 → 巽 → 离 → 坎 → 离 → 兑 → 兑 → 兑 → 艮 → 兑 → 兑 → 兑 → 乾 → 乾 → 巽 → 乾 → 乾 → 乾 → 坎 → 震 → 坎 → 巽 → 巽 → 坎 → 巽 → 巽 → 坎 → 巽 → 艮 → 坎 → 艮 → 艮 → 兑 → 震 → 坤 → 乾 → 震 → 艮 → 兑 → 艮 → 艮 → 艮 → 艮 → 艮
|
||||
|
||||
- 卦运挨星
|
||||
一(0) → 二 → 七 → 二 → 九 → 二 → 四 → 八 → 八 → 一 → 二 → 七 → 二 → 三 → 四 → 二 → 一 → 八 → 九 → 六 → 四 → 八 → 九 → 六 → 六 → 一 → 三 → 三 → 七 → 二 → 四 → 八 → 一 → 八 → 七 → 六 → 八 → 二 → 三 → 三 → 一 → 二 → 六 → 二 → 六 → 六 → 六 → 七 → 七 → 八 → 二 → 九 → 九 → 二 → 七 → 七 → 八 → 七 → 三 → 八 → 七 → 八 → 三 → 六
|
||||
|
||||
- 三元
|
||||
x(0) → 人元 → x → 地元 → x → 人元 → x → 人元 → x → x → 地元 → 人元 → x → 地元 → 地元 → 人元 → 人元 → 天元 → 天元 → 地元 → 人元 → 天元 → 人元 → 人元 → x → 地元 → 人元 → 天元 → 人元 → 天元 → 天元 → 地元 → x → 天元 → 天元 → 天元 → 天元 → 地元 → 天元 → 天元 → 地元 → 天元 → 地元 → 天元 → 地元 → 地元 → 地元 → 人元 → 天元 → x → 地元 → x → 天元 → 地元 → x → 天元 → 天元 → x → 人元 → 人元 → 天元 → 天元 → 地元
|
||||
|
||||
- 甲子
|
||||
甲子(0) → 癸亥 → 癸酉 → 己亥 → 戊戌 → 乙亥 → 壬戌 → 丁亥 → 甲子 → 庚子 → 戊子 → 丁丑 → 己丑 → 辛丑 → 乙卯 → 己巳 → 庚寅 → 己酉 → 甲寅 → 戊寅 → 戊午 → 丙戌 → 甲申 → 壬寅 → 戊辰 → 丙辰 → 辛卯 → 辛酉 → 癸卯 → 甲辰 → 己卯 → 丁巳 → 甲午 → 乙未 → 辛巳 → 癸巳 → 乙酉 → 乙卯 → 丙子 → 辛未 → 壬午 → 丁未 → 戊申 → 己未 → 戊申 → 癸未 → 丙午 → 辛亥 → 壬申 → 癸丑 → 甲戌 → 庚戌 → 丁卯 → 戊子 → 癸酉 → 壬辰 → 丙子 → 癸丑 → 癸卯 → 辛亥 → 己酉 → 辛酉 → 戊戌
|
||||
|
||||
- 五行
|
||||
1 | 水(0) → 6 | 水 → 2 | 火 → 2 | 火 → 5 | 土 → 3 | 木 → 4 | 金 → 8 | 木 → 1 | 水 → 8 | 木 → 7 | 火 → 4 | 金 → 9 | 金 → 1 | 水 → 1 | 水 → 8 | 木 → 3 | 木 → 3 | 木 → 7 | 火 → 8 | 木 → 3 | 木 → 6 | 水 → 3 | 木 → 9 | 金 → 9 | 金 → 4 | 金 → 2 | 火 → 8 | 木 → 8 | 木 → 3 | 木 → 7 | 火 → 2 | 火 → 9 | 金 → 7 | 火 → 3 | 木 → 4 | 金 → 9 | 金 → 1 | 水 → 6 | 水 → 6 | 水 → 9 | 金 → 2 | 火 → 1 | 水 → 2 | 火 → 1 | 水 → 2 | 火 → 4 | 金 → 4 | 金 → 7 | 火 → 1 | 水 → 2 | 火 → 2 | 火 → 1 | 水 → 4 | 金 → 6 | 水 → 7 | 火 → 6 | 水 → 6 | 水 → 6 | 水 → 8 | 木 → 7 | 火 → 3 | 木 → 8 | 木 → 1 | 水
|
||||
|
||||
```
|
||||
| 序 | 卦名 | 卦符 | 上卦 | 下卦 | 卦运挨星 | 三元 | 甲子 | 五行 |
|
||||
| --: | ---- | --- | --- | --- | --- | --- | ------- | --- |
|
||||
1 | 坤为地 | ䷁ | 坤 | 坤 | 一 | x | 甲子 | 1水
|
||||
2 | 山地剥 | ䷖ | 艮 | 坤 | 二 | 人元 | 癸亥 | 6水
|
||||
3 | 水地比 | ䷇ | 坎 | 坤 | 七 | x | 癸酉 | 2火
|
||||
4 | 风地观 | ䷓ | 巽 | 坤 | 二 | 地元 | 己亥 | 2火
|
||||
5 | 天地否 | ䷋ | 乾 | 坤 | 九 | x | 否|需复核
|
||||
6 | 火地晋 | ䷢ | 离 | 坤 | 二 | 人元 | 乙亥 | 3木
|
||||
7 | 泽地萃 | ䷬ | 兑 | 坤 | 四 | x | 壬戌 | 4金
|
||||
8 | 雷地豫 | ䷏ | 震 | 坤 | 八 | 人元 | 丁亥 | 8木
|
||||
9 | 地雷复 | ䷗ | 坤 | 震 | 八 | x | 复|需复核
|
||||
10 | 震为雷 | ䷲ | 震 | 震 | 一 | x | 震|需复核
|
||||
11 | 水雷屯 | ䷂ | 坎 | 震 | 二 | 地元 | 戊子 | 7火
|
||||
12 | 泽雷随 | ䷐ | 兑 | 震 | 七 | 人元 | 丁丑 | 4金
|
||||
13 | 天雷无妄| ䷘ | 乾 | 震 | 二 | x | 己丑 | 9金
|
||||
14 | 地火明夷| ䷣ | 坤 | 离 | 三 | 地元 | 辛丑 | 1水
|
||||
15 | 地泽临 | ䷒ | 坤 | 兑 | 四 | 地元 | 乙卯 | 1水
|
||||
16 | 雷天大壮| ䷡ | 震 | 乾 | 二 | 人元 | 己巳 | 8木
|
||||
17 | 离为火 | ䷝ | 离 | 离 | 一 | 人元 | 庚寅 | 3木
|
||||
18 | 火山旅 | ䷷ | 离 | 艮 | 八 | 天元 | 己酉 | 3木
|
||||
19 | 水火既济| ䷾ | 坎 | 离 | 九 | 天元 | 甲寅 | 7火
|
||||
20 | 雷火丰 | ䷶ | 震 | 离 | 六 | 地元 | 戊寅 | 8木
|
||||
21 | 火风鼎 | ䷱ | 离 | 巽 | 四 | 人元 | 戊午 | 3木
|
||||
22 | 泽火革 | ䷰ | 兑 | 离 | 八 | 天元 | 丙戌 | 6水
|
||||
23 | 火水未济| ䷿ | 离 | 坎 | 九 | 人元 | 甲申 | 3木
|
||||
24 | 天火同人| ䷌ | 乾 | 离 | 六 | 人元 | 壬寅 | 9金
|
||||
25 | 天泽履 | ䷉ | 乾 | 兑 | 六 | x | 戊辰 | 9金
|
||||
26 | 兑为泽 | ䷹ | 兑 | 兑 | 一 | 地元 | 丙辰 | 4金
|
||||
27 | 风泽中孚| ䷼ | 巽 | 兑 | 三 | 人元 | 辛卯 | 2火
|
||||
28 | 雷山小过| ䷽ | 震 | 艮 | 三 | 天元 | 辛酉 | 8木
|
||||
29 | 雷泽归妹| ䷵ | 震 | 兑 | 七 | 人元 | 癸卯 | 8木
|
||||
30 | 火泽睽 | ䷥ | 离 | 兑 | 二 | 天元 | 甲辰 | 3木
|
||||
31 | 水泽节 | ䷻ | 坎 | 兑 | 四 | 天元 | 己卯 | 7火
|
||||
32 | 风天小畜| ䷈ | 巽 | 乾 | 八 | 地元 | 丁巳 | 2火
|
||||
33 | 乾为天 | ䷀ | 乾 | 乾 | 一 | x | 甲午 | 9金
|
||||
34 | 天风姤 | ䷫ | 乾 | 巽 | 八 | 天元 | 乙未 | 7火
|
||||
35 | 火天大有| ䷍ | 离 | 乾 | 七 | 天元 | 辛巳 | 3木
|
||||
36 | 泽天夬 | ䷪ | 兑 | 乾 | 六 | 天元 | 癸巳 | 4金
|
||||
37 | 水天需 | ䷄ | 坎 | 乾 | 八 | 天元 | 乙酉 | 9金
|
||||
38 | 山水蒙 | ䷃ | 艮 | 坎 | 二 | 地元 | 乙卯 | 1水
|
||||
39 | 山雷颐 | ䷚ | 艮 | 震 | 三 | 天元 | 丙子 | 6水
|
||||
40 | 天水讼 | ䷅ | 乾 | 坎 | 三 | 天元 | 辛未 | 9金
|
||||
41 | 巽为风 | ䷸ | 巽 | 巽 | 一 | 地元 | 壬午 | 2火
|
||||
42 | 山风蛊 | ䷑ | 艮 | 巽 | 二 | 天元 | 丁未 | 1水
|
||||
43 | 风水涣 | ䷺ | 巽 | 坎 | 六 | 地元 | 戊申 | 2火
|
||||
44 | 地风升 | ䷭ | 坤 | 巽 | 二 | 天元 | 己未 | 1水
|
||||
45 | 水风井 | ䷯ | 坎 | 巽 | 六 | 地元 | 戊申 | 2火
|
||||
46 | 泽水困 | ䷮ | 兑 | 坎 | 六 | 地元 | 癸未 | 4金
|
||||
47 | 泽风大过| ䷛ | 兑 | 巽 | 六 | 地元 | 丙午 | 4金
|
||||
48 | 风山渐 | ䷴ | 巽 | 艮 | 七 | 人元 | 辛亥 | 7火
|
||||
49 | 地水师 | ䷆ | 坤 | 坎 | 七 | 天元 | 壬申 | 1水
|
||||
50 | 艮为山 | ䷳ | 艮 | 艮 | 八 | x | 癸丑 | 6水
|
||||
51 | 水山蹇 | ䷦ | 坎 | 艮 | 二 | 地元 | 甲戌 | 7火
|
||||
52 | 泽山咸 | ䷞ | 兑 | 艮 | 九 | x | 庚戌 | 9金
|
||||
53 | 山泽损 | ䷨ | 艮 | 兑 | 九 | 天元 | 丁卯 | 6水
|
||||
54 | 水雷屯 | ䷂ | 坎 | 震 | 二 | 地元 | 戊子 | 7火
|
||||
55 | 水地比 | ䷇ | 坎 | 坤 | 七 | x | 癸酉 | 2火
|
||||
56 | 山天大畜| ䷙ | 艮 | 乾 | 七 | 天元 | 壬辰 | 6水
|
||||
57 | 山雷颐 | ䷚ | 艮 | 震 | 三 | 天元 | 丙子 | 6水
|
||||
58 | 艮为山 | ䷳ | 艮 | 艮 | 八 | x | 癸丑 | 6水
|
||||
59 | 雷泽归妹| ䷵ | 震 | 兑 | 七 | 人元 | 癸卯 | 8木
|
||||
60 | 风山渐 | ䷴ | 巽 | 艮 | 七 | 人元 | 辛亥 | 7火
|
||||
61 | 火山旅 | ䷷ | 离 | 艮 | 八 | 天元 | 己酉 | 3木
|
||||
62 | 雷山小过| ䷽ | 震 | 艮 | 三 | 天元 | 辛酉 | 8木
|
||||
63 | 地山谦 | ䷎ | 坤 | 艮 | 六 | 地元 | 戊戌 | 1水
|
||||
```
|
||||
|
||||
## 384分金吉度
|
||||
divisions=64
|
||||
- 卦名
|
||||
坤(0) → 剥 → 比 → 观 → 否 → 晋 → 萃 → 豫 → 复 → 震 → 屯 → 随 → 无妄 → 明夷 → 临 → 大壮 → 离 → 旅 → 既济 → 丰 → 鼎 → 革 → 未济 → 同人 → 履 → 兑 → 中孚 → 小过 → 归妹 → 睽 → 节 → 小畜 → 乾 → 姤 → 大有 → 夬 → 需 → 蒙 → 颐 → 讼 → 巽 → 蛊 → 涣 → 升 → 井 → 困 → 过 → 渐 → 师 → 艮 → 否极 → 蹇 → 咸 → 损 → 屯 → 比 → 大畜 → 颐 → 艮 → 归妹 → 渐 → 旅 → 小过 → 谦
|
||||
|
||||
- 星
|
||||
辅弼(0) → 贪狼 → 破军 → 廉贞 → 武曲 → 文曲 → 巨门 → 禄存 → 禄存 → 辅弼 → 巨门 → 破军 → 廉贞 → 文曲 → 巨门 → 廉贞 → 辅弼 → 禄存 → 武曲 → 贪狼 → 巨门 → 廉贞 → 武曲 → 破军 → 贪狼 → 辅弼 → 文曲 → 文曲 → 破军 → 廉贞 → 禄存 → 禄存 → 辅弼 → 禄存 → 破军 → 贪狼 → 文曲 → 破军 → 文曲 → 文曲 → 辅弼 → 廉贞 → 贪狼 → 破军 → 贪狼 → 禄存 → 文曲 → 破军 → 廉贞 → 辅弼 → 武曲 → 廉贞 → 武曲 → 武曲 → 巨门 → 破军 → 巨门 → 文曲 → 辅弼 → 破军 → 破军 → 禄存 → 文曲 → 贪狼
|
||||
|
||||
- 生旺
|
||||
伏(0) → 生 → 绝 → 五 → 延 → 六 → 天 → 祸 → 祸 → 伏 → 天 → 绝 → 五 → 六 → 天 → 五 → 伏 → 祸 → 延 → 生 → 天 → 五 → 延 → 绝 → 生 → 伏 → 六 → 六 → 绝 → 五 → 祸 → 祸 → 伏 → 祸 → 绝 → 生 → 六 → 绝 → 六 → 六 → 伏 → 五 → 生 → 绝 → 生 → 祸 → 六 → 绝 → 五 → 伏 → 延 → 五 → 延 → 延 → 天 → 绝 → 天 → 六 → 伏 → 绝 → 绝 → 祸 → 六 → 生
|
||||
|
||||
- 上卦阴阳
|
||||
坤·阴(0) → 艮·阳 → 坎·阳 → 巽·阴 → 乾·阳 → 离·阴 → 兑·阴 → 震·阳 → 坤·阴 → 震·阳 → 坎·阳 → 兑·阴 → 乾·阳 → 坤·阴 → 坤·阴 → 震·阳 → 离·阴 → 离·阴 → 离·阴 → 震·阳 → 离·阴 → 兑·阴 → 坎·阳 → 乾·阳 → 乾·阳 → 兑·阴 → 巽·阴 → 震·阳 → 震·阳 → 离·阴 → 坎·阳 → 巽·阴 → 乾·阳 → 乾·阳 → 离·阴 → 兑·阴 → 坎·阳 → 艮·阳 → 艮·阳 → 乾·阳 → 巽·阴 → 艮·阳 → 巽·阴 → 坤·阴 → 坎·阳 → 兑·阴 → 震·阳 → 巽·阴 → 坤·阴 → 艮·阳 → 坤·阴 → 坎·阳 → 兑·阴 → 艮·阳 → 坎·阳 → 坎·阳 → 艮·阳 → 艮·阳 → 艮·阳 → 震·阳 → 巽·阴 → 离·阴 → 震·阳 → 坤·阴
|
||||
|
||||
- 下卦阴阳
|
||||
坤·阴(0) → 坤·阴 → 坤·阴 → 坤·阴 → 坤·阴 → 坤·阴 → 坤·阴 → 坤·阴 → 震·阳 → 震·阳 → 震·阳 → 震·阳 → 震·阳 → 离·阴 → 兑·阴 → 乾·阳 → 离·阴 → 艮·阳 → 坎·阳 → 离·阴 → 巽·阴 → 离·阴 → 离·阴 → 离·阴 → 兑·阴 → 兑·阴 → 兑·阴 → 艮·阳 → 兑·阴 → 兑·阴 → 兑·阴 → 乾·阳 → 乾·阳 → 巽·阴 → 乾·阳 → 乾·阳 → 乾·阳 → 坎·阳 → 震·阳 → 坎·阳 → 巽·阴 → 巽·阴 → 坎·阳 → 巽·阴 → 巽·阴 → 坎·阳 → 艮·阳 → 艮·阳 → 坎·阳 → 艮·阳 → 乾·阳 → 艮·阳 → 艮·阳 → 兑·阴 → 震·阳 → 坤·阴 → 乾·阳 → 震·阳 → 艮·阳 → 兑·阴 → 艮·阳 → 艮·阳 → 艮·阳 → 艮·阳 → 艮·阳
|
||||
|
||||
- 顺逆
|
||||
逆(0) → 顺 → 顺 → 逆 → 顺 → 逆 → 逆 → 顺 → 顺 → 逆 → 逆 → 顺 → 逆 → 逆 → 逆 → 逆 → 逆 → 顺 → 顺 → 顺 → 逆 → 逆 → 顺 → 顺 → 顺 → 逆 → 逆 → 逆 → 顺 → 逆 → 顺 → 顺 → 逆 → 顺 → 顺 → 顺 → 逆 → 逆 → 逆 → 逆 → 逆 → 顺 → 顺 → 逆 → 顺 → 顺 → 逆 → 顺 → 顺 → 逆 → 顺 → 逆 → 顺 → 顺 → 逆 → 顺 → 逆 → 逆 → 顺 → 顺 → 顺 → 逆 → 顺
|
||||
|
||||
- 384分金符号
|
||||
- 刀|空|空|空|空|上(0) → 上|空|空|空|空|刀 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 刀|空|空|空|空|上 → 刀|空|空|空|空|上 → 刀|空|空|空|空|上 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀 → 上|空|空|空|空|刀 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀 → 上|空|空|空|空|刀 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 刀|空|空|空|空|上 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀 → 上|空|空|空|空|刀 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 刀|空|空|空|空|上 → 刀|空|空|空|空|上 → 刀|空|空|空|空|上 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 刀|空|空|空|空|上 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀 → 上|空|空|空|空|刀 → 上|空|空|空|空|刀 → 刀|空|空|空|空|上 → 上|空|空|空|空|刀
|
||||
|
||||
divisions=64, offset=2, num=4, interval=2
|
||||
- 刀(0) → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 刀 → 空 → 空 → 空 → 空 → 上 → 刀 → 空 → 空 → 空 → 空 → 上 → 刀 → 空 → 空 → 空 → 空 → 上 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 上 → 空 → 空 → 空 → 空 → 刀 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 上 → 空 → 空 → 空 → 空 → 刀 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 刀 → 空 → 空 → 空 → 空 → 上 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 上 → 空 → 空 → 空 → 空 → 刀 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 刀 → 空 → 空 → 空 → 空 → 上 → 刀 → 空 → 空 → 空 → 空 → 上 → 刀 → 空 → 空 → 空 → 空 → 上 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 刀 → 空 → 空 → 空 → 空 → 上 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀 → 上 → 空 → 空 → 空 → 空 → 刀 → 上 → 空 → 空 → 空 → 空 → 刀 → 刀 → 空 → 空 → 空 → 空 → 上 → 上 → 空 → 空 → 空 → 空 → 刀
|
||||
|
||||
```
|
||||
| 序 | 卦名 | 星 | 生旺 | 上卦 | 上卦阴阳 | 下卦 | 下卦阴阳 | 顺逆 | 符号 |
|
||||
|----|------|----|------|------|----------|------|----------|-------|------|
|
||||
| 1 | 坤 | 辅弼 | 伏 | 坤 | 阴 | 坤 | 阴 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 2 | 剥 | 贪狼 | 生 | 艮 | 阳 | 坤 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 3 | 比 | 破军 | 绝 | 坎 | 阳 | 坤 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 4 | 观 | 廉贞 | 五 | 巽 | 阴 | 坤 | 阴 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 5 | 否 | 武曲 | 延 | 乾 | 阳 | 坤 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 6 | 晋 | 文曲 | 六 | 离 | 阴 | 坤 | 阴 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 7 | 萃 | 巨门 | 天 | 兑 | 阴 | 坤 | 阴 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 8 | 豫 | 禄存 | 祸 | 震 | 阳 | 坤 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 9 | 复 | 禄存 | 祸 | 坤 | 阴 | 震 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 10 | 震 | 辅弼 | 伏 | 震 | 阳 | 震 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 11 | 屯 | 巨门 | 天 | 坎 | 阳 | 震 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 12 | 随 | 破军 | 绝 | 兑 | 阴 | 震 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 13 | 无妄 | 廉贞 | 五 | 乾 | 阳 | 震 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 14 | 明夷 | 文曲 | 六 | 坤 | 阴 | 离 | 阴 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 15 | 临 | 巨门 | 天 | 坤 | 阴 | 兑 | 阴 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 16 | 大壮 | 廉贞 | 五 | 震 | 阳 | 乾 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 17 | 离 | 辅弼 | 伏 | 离 | 阴 | 离 | 阴 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 18 | 旅 | 禄存 | 祸 | 离 | 阴 | 艮 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 19 | 既济 | 武曲 | 延 | 离 | 阴 | 坎 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 20 | 丰 | 贪狼 | 生 | 震 | 阳 | 离 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 21 | 鼎 | 巨门 | 天 | 离 | 阴 | 巽 | 阴 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 22 | 革 | 廉贞 | 五 | 兑 | 阴 | 离 | 阴 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 23 | 未济 | 武曲 | 延 | 坎 | 阳 | 离 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 24 | 同人 | 破军 | 绝 | 乾 | 阳 | 离 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 25 | 履 | 贪狼 | 生 | 乾 | 阳 | 兑 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 26 | 兑 | 辅弼 | 伏 | 兑 | 阴 | 兑 | 阴 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 27 | 中孚 | 文曲 | 六 | 巽 | 阴 | 兑 | 阴 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 28 | 小过 | 文曲 | 六 | 震 | 阳 | 艮 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 29 | 归妹 | 破军 | 绝 | 震 | 阳 | 兑 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 30 | 睽 | 廉贞 | 五 | 离 | 阴 | 兑 | 阴 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 31 | 节 | 禄存 | 祸 | 坎 | 阳 | 兑 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 32 | 小畜 | 禄存 | 祸 | 巽 | 阴 | 乾 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 33 | 乾 | 辅弼 | 伏 | 乾 | 阳 | 乾 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 34 | 姤 | 禄存 | 祸 | 乾 | 阳 | 巽 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 35 | 大有 | 破军 | 绝 | 离 | 阴 | 乾 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 36 | 夬 | 贪狼 | 生 | 兑 | 阴 | 乾 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 37 | 需 | 文曲 | 六 | 坎 | 阳 | 乾 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 38 | 蒙 | 破军 | 绝 | 艮 | 阳 | 坎 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 39 | 颐 | 文曲 | 六 | 艮 | 阳 | 震 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 40 | 讼 | 文曲 | 六 | 乾 | 阳 | 坎 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 41 | 巽 | 辅弼 | 伏 | 巽 | 阴 | 巽 | 阴 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 42 | 蛊 | 廉贞 | 五 | 艮 | 阳 | 巽 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 43 | 涣 | 贪狼 | 生 | 巽 | 阴 | 坎 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 44 | 升 | 破军 | 绝 | 坤 | 阴 | 巽 | 阴 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 45 | 井 | 贪狼 | 生 | 坎 | 阳 | 巽 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 46 | 困 | 禄存 | 祸 | 兑 | 阴 | 坎 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 47 | 过 | 文曲 | 六 | 震 | 阳 | 艮 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 48 | 渐 | 破军 | 绝 | 巽 | 阴 | 艮 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 49 | 师 | 廉贞 | 五 | 坤 | 阴 | 坎 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 50 | 艮 | 辅弼 | 伏 | 艮 | 阳 | 艮 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 51 | 否极 | 武曲 | 延 | 坤 | 阴 | 乾 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 52 | 蹇 | 廉贞 | 五 | 坎 | 阳 | 艮 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 53 | 咸 | 武曲 | 延 | 兑 | 阴 | 艮 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 54 | 损 | 武曲 | 延 | 艮 | 阳 | 兑 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 55 | 屯 | 巨门 | 天 | 坎 | 阳 | 震 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 56 | 比 | 破军 | 绝 | 坎 | 阳 | 坤 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 57 | 大畜 | 巨门 | 天 | 艮 | 阳 | 乾 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 58 | 颐 | 文曲 | 六 | 艮 | 阳 | 震 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 59 | 艮 | 辅弼 | 伏 | 艮 | 阳 | 艮 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 60 | 归妹 | 破军 | 绝 | 震 | 阳 | 兑 | 阴 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 61 | 渐 | 破军 | 绝 | 巽 | 阴 | 艮 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 62 | 旅 | 禄存 | 祸 | 离 | 阴 | 艮 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
| 63 | 小过 | 文曲 | 六 | 震 | 阳 | 艮 | 阳 | 逆 | 刀 空 空 空 空 上 |
|
||||
| 64 | 谦 | 贪狼 | 生 | 坤 | 阴 | 艮 | 阳 | 顺 | 上 空 空 空 空 刀 |
|
||||
```
|
||||
|
||||
BIN
docs/img/六十四卦六十甲子廿四山五行-2.png
Normal file
BIN
docs/img/六十四卦六十甲子廿四山五行-2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 115 KiB |
BIN
docs/img/六十四卦六十甲子廿四山五行-3.png
Normal file
BIN
docs/img/六十四卦六十甲子廿四山五行-3.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 118 KiB |
BIN
docs/img/六十四卦六十甲子廿四山五行-4.png
Normal file
BIN
docs/img/六十四卦六十甲子廿四山五行-4.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 106 KiB |
BIN
docs/img/六十四卦六十甲子廿四山五行-5.png
Normal file
BIN
docs/img/六十四卦六十甲子廿四山五行-5.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 116 KiB |
BIN
docs/img/六十四卦六十甲子廿四山五行-6.png
Normal file
BIN
docs/img/六十四卦六十甲子廿四山五行-6.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 118 KiB |
BIN
docs/img/六十四卦六十甲子廿四山五行-7.png
Normal file
BIN
docs/img/六十四卦六十甲子廿四山五行-7.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 105 KiB |
BIN
docs/中国罗盘详解 (程建军) (Z-Library).epub
Normal file
BIN
docs/中国罗盘详解 (程建军) (Z-Library).epub
Normal file
Binary file not shown.
83
docs/六十四卦六十甲子廿四山五行.md
Normal file
83
docs/六十四卦六十甲子廿四山五行.md
Normal file
@@ -0,0 +1,83 @@
|
||||
|
||||
# 六十四卦六十甲子廿四山五行卦运
|
||||
|
||||
![[六十四卦六十甲子廿四山五行-2.png]]
|
||||
![[六十四卦六十甲子廿四山五行-3.png]]
|
||||
![[六十四卦六十甲子廿四山五行-4.png]]
|
||||
![[六十四卦六十甲子廿四山五行-5.png]]
|
||||
![[六十四卦六十甲子廿四山五行-6.png]]
|
||||
![[六十四卦六十甲子廿四山五行-7.png]]
|
||||
|
||||
退,泄,死,煞,关,旺,生 ,关系?
|
||||
|
||||
## **六十甲子配先天圆圈六十四卦五行**
|
||||
[太玄数与六十甲子纳音五行](https://blog.sina.com.cn/s/blog_c4f113300101knsv.html)
|
||||
[六十甲子配六十四卦](http://www.itmao.com/html/275.html)
|
||||
|
||||
| 序 | 卦名 | 卦符 | 上卦 | 下卦 | 卦运挨星 | 三元 | 甲子 | 五行 |
|
||||
| --: | ---- | --- | --- | --- | --- | --- | ------- | --- |
|
||||
| 1 | 坤为地 | ䷁ | 坤 | 坤 | 一 | — | 甲子 | 1水 |
|
||||
| 2 | 火雷噬嗑 | ䷖ | 艮 | 坤 | 六 | 地元 | 乙丑 | 3木 |
|
||||
| 3 | 风火家人 | ䷇ | 坎 | 坤 | 四 | 人元 | 丙寅 | 2火 |
|
||||
| 4 | 山泽损 | ䷓ | 巽 | 坤 | 九 | 天元 | 丁卯 | 6水 |
|
||||
| 5 | 天泽履 | ䷋ | 乾 | 坤 | 六 | — | 戊辰 | 9金 |
|
||||
| 6 | 雷天大壮 | ䷢ | 离 | 坤 | 二 | 人元 | 己巳 | 8木 |
|
||||
| 7 | 雷风恒 | ䷬ | 兑 | 坤 | 九 | 地元 | 庚午 | 8木 |
|
||||
| 8 | 天水讼 | ䷏ | 震 | 坤 | 三 | 天元 | 辛未 | 9金 |
|
||||
| 9 | 地水师 | ䷗ | 坤 | 震 | 七 | 天元 | 壬申 | 1水 |
|
||||
| 10 | 风山渐 | ䷲ | 震 | 震 | 七 | — | 癸酉 | 2火 |
|
||||
| 11 | 水山蹇 | ䷂ | 坎 | 震 | 二 | 地元 | 甲戌 | 7火 |
|
||||
| 12 | 火地晋 | ䷐ | 兑 | 震 | 三 | 人元 | 乙亥 | 3木 |
|
||||
| 13 | 山雷颐 | ䷘ | 乾 | 震 | 三 | 天元 | 丙子 | 6水 |
|
||||
| 14 | 泽雷随 | ䷣ | 坤 | 离 | 七 | 人元 | 丁丑 | 4金 |
|
||||
| 15 | 雷火丰 | ䷒ | 坤 | 兑 | 六 | 地元 | 戊寅 | 8木 |
|
||||
| 16 | 水泽节 | ䷡ | 震 | 乾 | 八 | 天元 | 己卯 | 7火 |
|
||||
| 17 | 地天泰 | ䷝ | 离 | 离 | 九 | 天元 | 庚辰 | 1水 |
|
||||
| 18 | 火天大有 | ䷷ | 离 | 艮 | 七 | 天元 | 辛巳 | 3木 |
|
||||
| 19 | 巽为风 | ䷾ | 坎 | 离 | 九 | — | 壬午 | 2火 |
|
||||
| 20 | 泽水困 | ䷶ | 震 | 离 | 六 | 地元 | 癸未 | 4金 |
|
||||
| 21 | 火水未济 | ䷍ | 离 | 乾 | 九 | 人元 | 甲申 | 3木 |
|
||||
| 22 | 天山遁 | ䷰ | 兑 | 离 | 四 | 天元 | 乙酉 | 9金 |
|
||||
| 23 | 艮为山 | ䷿ | 离 | 坎 | 一 | — | 丙戌 | 6水 |
|
||||
| 24 | 雷地豫 | ䷌ | 乾 | 离 | 八 | 人元 | 丁亥 | 8木 |
|
||||
| 25 | 水雷屯 | ䷉ | 乾 | 兑 | 四 | 地元 | 戊子 | 7火 |
|
||||
| 26 | 天雷无妄 | ䷹ | 兑 | 兑 | 二 | — | 己丑 | 9金 |
|
||||
| 27 | 离为火 | ䷼ | 巽 | 兑 | 一 | 人元 | 庚寅 | 3木 |
|
||||
| 28 | 风泽中孚 | ䷵ | 震 | 兑 | 三 | 人元 | 辛卯 | 2火 |
|
||||
| 29 | 山天大畜 | ䷻ | 坎 | 兑 | 四 | 天元 | 壬辰 | 6水 |
|
||||
| 30 | 泽天夬 | ䷥ | 离 | 兑 | 六 | 天元 | 癸巳 | 4金 |
|
||||
| 31 | 乾为天 | ䷨ | 艮 | 兑 | 一 | — | 甲午 | 9金 |
|
||||
| 32 | 水风井 | ䷈ | 巽 | 乾 | 六 | 天元 | 乙未 | 7火 |
|
||||
| 33 | 雷水解 | ䷀ | 乾 | 乾 | 四 | — | 丙申 | 8木 |
|
||||
| 34 | 泽山咸 | ䷫ | 乾 | 巽 | 九 | 天元 | 丁酉 | 4金 |
|
||||
| 35 | 地山谦 | ䷛ | 兑 | 巽 | 三 | 人元 | 戊戌 | 1水 |
|
||||
| 36 | 风地观 | ䷱ | 离 | 巽 | 二 | 地元 | 己亥 | 2火 |
|
||||
| 37 | 风雷益 | ䷄ | 坎 | 乾 | 一 | 人元 | 庚子 | 8木 |
|
||||
| 38 | 地火明夷 | ䷯ | 坎 | 巽 | 三 | 地元 | 辛丑 | 1水 |
|
||||
| 39 | 天火同人 | ䷚ | 艮 | 震 | 七 | 人元 | 壬寅 | 9金 |
|
||||
| 40 | 雷泽归妹 | ䷅ | 乾 | 坎 | 七 | 人元 | 癸卯 | 8木 |
|
||||
| 41 | 火泽睽 | ䷸ | 巽 | 巽 | 二 | 天元 | 甲辰 | 3木 |
|
||||
| 42 | 水天需 | ䷑ | 艮 | 巽 | 三 | 人元 | 乙巳 | 7火 |
|
||||
| 43 | 泽风大过 | ䷺ | 巽 | 坎 | 六 | 地元 | 丙午 | 4金 |
|
||||
| 44 | 山风蛊 | ䷭ | 坤 | 巽 | 二 | 天元 | 丁未 | 1水 |
|
||||
| 45 | 风水涣 | ䷯ | 坎 | 巽 | 六 | 地元 | 戊申 | 2火 |
|
||||
| 46 | 火山旅 | ䷮ | 兑 | 坎 | 八 | 天元 | 己酉 | 3木 |
|
||||
| 47 | 泽山咸 | ䷞ | 兑 | 艮 | 九 | — | 庚戌 | 9金 |
|
||||
| 48 | 风山渐 | ䷴ | 巽 | 艮 | 七 | 人元 | 辛亥 | 7火 |
|
||||
| 49 | 地水师 | ䷆ | 坤 | 坎 | 一 | 人元 | 壬子 | 8木 |
|
||||
| 50 | 艮为山 | ䷳ | 艮 | 艮 | 八 | — | 癸丑 | 6水 |
|
||||
| 51 | 水火既济 | ䷦ | 坎 | 艮 | 九 | 天元 | 甲寅 | 7火 |
|
||||
| 52 | 地泽临 | ䷎ | 坤 | 艮 | 四 | 地元 | 乙卯 | 1水 |
|
||||
| 53 | 兑为泽 | ䷧ | 震 | 坎 | 一 | 地元 | 丙辰 | 4金 |
|
||||
| 54 | 风天小畜 | ䷠ | 乾 | 艮 | 八 | 地元 | 丁巳 | 2火 |
|
||||
| 55 | 火风鼎 | ䷚ | 艮 | 震 | 四 | 人元 | 戊午 | 3木 |
|
||||
| 56 | 地风升 | ䷷ | 离 | 艮 | 二 | 天元 | 己未 | 1水 |
|
||||
| 57 | 坎为水 | ䷙ | 艮 | 乾 | 一 | 地元 | 庚申 | 7火 |
|
||||
| 58 | 雷山小过 | ䷦ | 坎 | 艮 | 三 | 天元 | 辛酉 | 8木 |
|
||||
| 59 | 泽地萃 | ䷳ | 艮 | 艮 | 四 | — | 壬戌 | 4金 |
|
||||
| 60 | 山地剥 | ䷵ | 震 | 兑 | 六 | 人元 | 癸亥 | 6水 |
|
||||
| 61 | 风山渐 | ䷴ | 巽 | 艮 | 七 | 人元 | 辛亥 | 7火 |
|
||||
| 62 | 火山旅 | ䷮ | 兑 | 坎 | 八 | 天元 | 己酉 | 3木 |
|
||||
| 63 | 雷山小过 | ䷦ | 坎 | 艮 | 三 | 天元 | 辛酉 | 8木 |
|
||||
| 64 | 地山谦 | ䷎ | 坤 | 艮 | 六 | 地元 | 戊戌 | 1水 |
|
||||
|
||||
641
docs/周天度.md
Normal file
641
docs/周天度.md
Normal file
@@ -0,0 +1,641 @@
|
||||
周天度+-0.5二十四山二十八宿六十四卦分金卦爻线吉凶
|
||||
注意:本文没考虑地形变化。
|
||||
|
||||
子山午向 357.5 - 2.5 正中 0 向180左90右270 (357.5 - 0 - 2.5)
|
||||
周天357度 女宿八度:三爻、先后天相建、子孙荣华、上吉。
|
||||
周天358度 女宿七度:四爻、五十年人畜大退、七十年男女短寿。
|
||||
周天359度 女宿六度:五爻、度吉爻不吉、败被谋杀。
|
||||
周天360度 女宿五度:六爻、先吉后凶、先有功名、后狂亡。
|
||||
子山、癸山、复卦、地雷复、八数、坤宫第二卦、属土逆爻
|
||||
周天1度 女宿四度:六爻、二十年以上丁财平,三十年有功名,七十年大败。
|
||||
周天2度 女宿三度:五爻、三房有财丁,别房不利,六十年丁财凶。
|
||||
|
||||
子午兼癸丁 2.5 - 7.5 正中 5 向185左95右275 ( 2.5 - 5 - 7.5 )
|
||||
周天2度 女宿三度:五爻、三房有财丁,别房不利,六十年丁财凶。
|
||||
周天3度 女宿二度:四爻、阴阳和合、丁财两旺、富贵永久之爻。
|
||||
周天4度 女宿一度:三爻、二十年发福,三十年齐发,出贵此官员之爻。
|
||||
周天4度 女宿一度:二爻、帝位坐降爻,添官益财,廿年得贵子,发达。
|
||||
周天5度 牛宿八度:一爻、犯小两仪,三十年被谋杀,长子生三子不回乡。
|
||||
癸山、子山、颐卦、山雷颐、三数、巽宫第七卦、属木顺爻
|
||||
周天6度 牛宿七度:一爻、先吉后凶、丁财不发、三房绝、一百年财尽。
|
||||
周天7度 牛宿六度:二爻、出估狂暴好色、不行正道,七十年月日大败。
|
||||
|
||||
癸丁兼子午 7.5 - 12.5 正中10向190左100右280 ( 7.5 - 10 - 12.5)
|
||||
周天7度 牛宿六度:二爻、出狂暴好色、不行正道,七十年月日大败。
|
||||
周天8度 牛宿五度:三爻、先贫后富、五十年添贵发财,六十年大旺。
|
||||
周天9度 牛宿四度:四爻、三五年丁财齐发,四十年富贵。
|
||||
周天10度 牛宿三度:五爻、二房四代功名,七十年败。
|
||||
周天11度 牛宿二度:六爻、金神未动,先吉后凶、百年绝。
|
||||
周天12度 牛宿一度:六爻、先吉后凶,代代单传、有被虎咬蛇伤之人,三十年凶。
|
||||
|
||||
癸山、屯卦、水雷屯、四数、坎宫、属水逆爻
|
||||
癸山丁向 12.5 - 17.5 正中 15向195左105右285 (12.5 - 15 - 17.5)
|
||||
周天12度 牛宿一度:六爻、先吉后凶,代代单传、有被虎咬蛇伤之人,三十年凶。
|
||||
周天13度 斗宿廿四:五爻、此爻出尼姑、女估吃药死,出小偷和不正之人。
|
||||
周天14度 斗宿廿三:四爻、和合爻,夫妇和丁财旺,四十年招财富贵,巳午年大兴家业。
|
||||
周天15度 斗宿廿二:三爻、出估伶俐、官贵之爻、各界有人,中房中吉。
|
||||
周天16度 斗宿廿一:二爻、先吉后凶,七十年败产业,八十年孤儿奸盗。
|
||||
周天17度 斗宿二十:一爻、益屯之界,三十年财旺,七十年见血灾、犯六甲亡。
|
||||
|
||||
癸山、丑山、益卦、风雷益、九数、巽宫第四卦、属木顺爻
|
||||
癸丁兼丑未 17.5 - 22.5 正中 20向200左110右290 (17.5 - 20 - 22.5)
|
||||
周天17度 斗宿二十:一爻、益屯之界,三十年财旺,七十年见血灾、犯六甲亡。
|
||||
周天18度 斗宿十九:一爻、度有人字,丁财不旺,二十五年有横祸入门、少女招非。
|
||||
周天19度 斗宿十八:二爻、犯小儿杀、阴阳不合,妻嫌夫不吉。
|
||||
周天20度 斗宿十七:三爻、阴阳配合、夫妻和顺,三房单传,别房吉。
|
||||
周天21度 斗宿十六:四爻、阴阳交合,亥卯未年出人功名显达,富贵重重之爻。
|
||||
周天22度 斗宿十五:五爻、有阴无阳,出人忤、二十五年败尽田业,又出寡。
|
||||
|
||||
丑未兼癸丁 22.5 - 27.5 正中 25向205左115右295 (22.5 - 25 - 27.5)
|
||||
周天22度 斗宿十五:五爻、有阴无阳,出人忤、二十五年败尽田业,又出寡。
|
||||
周天23度 斗宿十四:六爻、三十年好,五十年病、一百二十五年丁财败尽。
|
||||
丑山、癸山、震卦、震为雷、一数、震宫第一卦、属木顺爻
|
||||
周天24度 斗宿十三:一爻、官鬼动、女多男少、四十年招赘单丁。
|
||||
周天25度 斗宿十二:二爻、先吉后凶、代代单传、此乃寡爻。
|
||||
周天26度 斗宿十一:三爻、巳酉丑年四五房功名发达、文武双全、家财兴旺、六房不利。
|
||||
周天27度 斗宿十度:四爻、阴阳交合,寅午戌年生贵子、辰酉年应公卿、出任为官。
|
||||
|
||||
丑山未向 27.5 - 32.5 正中 30向210左120右300 (27.5 - 30 - 32.5)
|
||||
周天27度 斗宿十度:四爻、阴阳交合,寅午戌年生贵子、辰酉年应公卿、出任为官。
|
||||
周天28度 斗宿九度:五爻、阴阳不交、二十年有克夫克子、六十年扫尽。
|
||||
周天29度 斗宿八度:六爻、坐下两仪、三十四年有刑伤、犯六甲,一百廿五年大凶。
|
||||
丑山、嗑卦、火雷噬嗑、六数、巽宫第六卦、属木逆爻
|
||||
周天 度 斗宿线度:六爻、二十年吉、四十年出乱、一百年败尽。
|
||||
周天30度 斗宿七度:五爻、此爻 有下水良死之爻、六十年败。
|
||||
周天31度 斗宿六度:四爻、先发丁财,申子辰年应阴多阳少,七星自反,八十年败尽。
|
||||
周天32度 斗宿五度:三爻、北极星照、出文武官员、未戌年应、三元不败。
|
||||
|
||||
丑未兼艮坤 32.5 - 37.5 正中 35向215左125右305 (32.5 - 35 - 37.5)
|
||||
周天32度 斗宿五度:三爻、北极星照、出文武官员、未戌年应、三元不败。
|
||||
周天33度 斗宿四度:二爻、阴阳交后、兄弟有功、二十年进丁财、四十年出官五代同堂。
|
||||
周天34度 斗宿三度:一爻、有财无丁、申子辰年孤寡、甲年克子、犯小儿杀。
|
||||
丑山、艮山、随卦、泽雷随、七数、震宫第一卦、属木顺爻
|
||||
周天35度 斗宿二度:一爻、丁财少、先伤中男,后伤父母,二十年败尽。
|
||||
周天36度 斗宿一度:二爻、有阴无阳,一个月内伤丁、克父母。
|
||||
周天 度 线宿线度:三爻、自守不吉之爻、不宜立向。
|
||||
周天37度 箕宿九度:四爻、四十年出人伶俐,六十年败尽。
|
||||
|
||||
艮坤兼丑未 37.5 - 42.5 正中 40向220左130右310 (37.5 - 40 - 42.5)
|
||||
周天 度 线宿线度:三爻、自守不吉之爻、不宜立向。
|
||||
周天37度 箕宿九度:四爻、四十年出人伶俐,六十年败尽。
|
||||
周天38度 箕宿八度:五爻、阴阳升太、夫妇和,子孙成群,富贵出公卿,三元不败。
|
||||
周天39度 箕宿七度:六爻、金神坐位出乱、四十年财丁败尽。
|
||||
艮山、丑山、妄卦、天雷无妄、二数、巽宫第五卦、属木逆爻
|
||||
周天40度 箕宿六度:六爻、二十年伤丁,四十年丁财败尽。
|
||||
周天41度 箕宿五度:五爻、爻落空亡病,三六九年有下水死亡、又犯杀人案二件。
|
||||
周天42度 箕宿四度:四爻、旺丁不旺财、出人好荡、又偷家中之物。
|
||||
|
||||
艮山坤向 42.5 - 47.5 正中 45向225左135右315 (42.5 - 45 - 47.5)
|
||||
周天42度 箕宿四度:四爻、旺丁不旺财、出人好荡、又偷家中之物。
|
||||
周天43度 箕宿三度:三爻、发富贵有功名、得妻财,四子忠厚,发长久。
|
||||
周天44度 箕宿二度:二爻、阴阳比和,安居落业,六十日进财,兄弟同科,三元不败。
|
||||
周天45度 箕宿一度:一爻、二十年有丁财,四十年败,子招非克父母死,八十年败尽。
|
||||
艮山、寅山、夷卦、地火明夷、三数、坎宫属水顺爻
|
||||
周天46度 尾宿十五:一爻、飞星九耀,先吉后凶,六十年伤成财之子,一百年败绝。
|
||||
周天47度 尾宿十四:二爻、寅午戍年丧丁财,人丁不安,出老鳏寡、午年生人应。
|
||||
|
||||
艮坤兼寅申 47.5 - 52.5 正中 50向230左140右320 (47.5 - 50 - 52.5)
|
||||
周天47度 尾宿十四:二爻、寅午戍年丧丁财,人丁不安,出老鳏寡、午年生人应。
|
||||
周天48度 尾宿十三:三爻、官鬼临爻、先吉后凶,酉年三六子夭亡,兼入者出寡。
|
||||
周天49度 尾宿十二:四爻、兄弟相爱,夫妻和顺,三十年出贵,三房先发,益外甥三代。
|
||||
周天50度 尾宿十一:五爻、阴阳交后、六十年见横财、而且富贵,忠贤出贵,之爻。
|
||||
周天 度 尾宿线度:六爻、明山暗入、丧成才之子,后出孤。
|
||||
寅山、艮山、喷卦、山火喷、八数、艮宫第二卦、属土逆爻
|
||||
周天51度 尾宿十度:六爻、居线丁财不旺、六十年略有、后败绝。
|
||||
周天52度 尾宿九度:五爻、官鬼爻,丁不旺、六十年败绝。
|
||||
|
||||
寅申兼艮坤 52.5 - 57.5 正中 55向235左145右325 (52.5 - 55 - 57.5)
|
||||
周天52度 尾宿九度:五爻、官鬼爻,丁不旺、六十年败绝。
|
||||
周天53度 尾宿八度:四爻、犯中两仪,三十年旺丁,有功名、五十年败尽。
|
||||
周天54度 尾宿七度:三爻、三子孝顺、子孙发、妇强男弱。
|
||||
周天55度 尾宿六度:二爻、夫妇和顺、富贵功名、福禄寿,三元不败。
|
||||
周天56度 尾宿五度:一爻、飞星九耀、阴阳差错,不立向。
|
||||
周天57度 尾宿四度:一爻、度爻不吉,有下水伤亡之人,七十年败绝。
|
||||
寅山、既卦,水火既济、九数、坎宫第四卦、属水顺爻
|
||||
|
||||
寅山申向 57.5 - 62.5 正中 60向240左150右330 (57.5 - 60 - 62.5)
|
||||
周天57度 尾宿四度:一爻、度爻不吉,有下水伤亡之人,七十年败绝。
|
||||
周天58度 尾宿三度:二爻、先丁无财,但子难养,要过房赘、六十年败尽。
|
||||
周天59度 尾宿二度:三爻、男女有寿,二十年估丁大旺,三房先发,三十年后衰,长房单传。
|
||||
周天60度 尾宿一度:四爻、阳喜阴柔,中房代代有三丁,三房单传,中平之爻。
|
||||
周天61度 心宿八度:五爻、阴阳交后、富贵双全、二十年出官、才丁大旺、永入吉利。
|
||||
周天62度 心宿七度:六爻、三房出忤逆、四十年招官非,一百年后败尽。
|
||||
寅山、甲山、家人卦、风火家人、四数、巽宫第三卦、属水逆爻
|
||||
|
||||
寅申兼甲庚 62.5 - 67.5 正中 65向245左155右335 (62.5 - 65 - 67.5)
|
||||
周天62度 心宿七度:六爻、三房出忤逆、四十年招官非,一百年后败尽。
|
||||
周天63度 心宿六度:六爻、犯差错、二十年丁财败、四十年出孤儿、还有脚跛瞎眼。
|
||||
周天64度 心宿五度:五爻、三十发,五十年后败、七十年伤成才之子,一百年败绝。
|
||||
周天65度 心宿四度:四爻、阴阳交后,大振家声,必得妻财,四十年富贵。
|
||||
周天66度 心宿三度:三爻、夫妻和顺,田园广进,兄弟和,代代兴旺、三十年应。
|
||||
周天67度 心宿二度:二爻、阴阳得位,人丁添进,三四十年出公卿、女招贵夫,富贵之爻。
|
||||
|
||||
甲庚兼寅申 67.5 - 72.5 正中 70向250左160右340 (67.5 - 70 - 72.5)
|
||||
周天67度 心宿二度:二爻、阴阳得位,人丁添进,三四十年出公卿、女招贵夫,富贵之爻。
|
||||
周天68度 心宿一度:一爻、先富后贫,四十出夭亡、一百廿五年绝,孤寡之爻。
|
||||
甲山、寅山、丰卦、雷火丰、六数、坎宫第六卦、属水逆爻
|
||||
周天 度 房宿线度:六爻、有人下水死,上山被杀,人丁不旺,凶爻。
|
||||
周天69度 房宿五度:五爻、有阴无阳,出人寡居,代代单传。
|
||||
周天70度 房宿四度:四爻、人丁大旺,声名远振,富贵高强,三六子得外家财永吉。
|
||||
周天71度 房宿三度:三爻、出人富贵,公平富高,远方为官,富贵长久。
|
||||
周天72度 房宿二度:二爻、阴阳交后,出人聪明,亥卯未年有功名。
|
||||
|
||||
甲山庚向 72.5 - 77.5 正中 75向255左165右345 (72.5 - 75 - 77.5)
|
||||
周天73度 房宿一度:一爻、金神不得力,不为丁财,丑未年出孤儿寡妇。
|
||||
甲山、离卦、离为火、一数、离宫第一卦、属火顺爻
|
||||
周天74度 氏宿十八:一爻、出人淫乱,必行凶被杀、七十年后是非后尽。
|
||||
周天75度 氏宿十七:二爻、出人为僧,兼入者一二人吃青、富之爻。
|
||||
周天76度 氏宿十六:三爻、男女聪明,功名显达,三元不败。
|
||||
周天77度 氏宿十五:四爻、犯九耀、三媳必犯六甲、三房不利,寅午戍年败。
|
||||
|
||||
甲庚兼卯酉 77.5 - 82.5 正中 80向260左170右350 (77.5 - 80 - 82.5)
|
||||
周天77度 氏宿十五:四爻、犯九耀、三媳必犯六甲、三房不利,寅午戍年败。
|
||||
周天78度 氏宿十四:五爻、阴阳合、生子成群,先发财后发丁、三四房更佳,永远富贵。
|
||||
周天79度 氏宿十三:六爻、先后天失位,富贵不久,定有过房入赘之人。三十年败爻。
|
||||
甲山、卯山、革卦、泽火革、二数、坎宫第五卦、属水逆爻
|
||||
周天80度 氏宿十二:六爻、先吉后凶、二十年丁财平、四十年不上败,七十年更凶。
|
||||
周天81度 氏宿十一:五爻、丁字入爻,必有一丁贫困,分房不均、半吉。
|
||||
周天82度 氏宿十度:四爻、夫妇不和,家中常吵,半吉半凶之爻。
|
||||
|
||||
卯酉兼甲庚 82.5 - 87.5 正中 85向265左175右355 (82.5 - 85 - 87.5)
|
||||
周天82度 氏宿十度:四爻、夫妇不和,家中常吵,半吉半凶之爻。
|
||||
周天83度 氏宿九度:三爻、将军发爻、福禄皆全、三元不败、但出人半愚。
|
||||
周天84度 氏宿八度:二爻、阴阳得位、人丁大旺、出官贵上吉、但有脚跛破相人。
|
||||
周天85度 氏宿七度:一爻、出赌博,长子忤逆、杀人行凶,不吉之爻。
|
||||
卯山、甲山、同人卦、天火同人、七数、离宫第八卦、性火顺爻
|
||||
周天 度 氏宿线度:一爻、六十年不生养、上山下水,八十年败尽。
|
||||
周天86度 氏宿六度:二爻、先发财后发丁,长四房多病,六十年四房更凶。
|
||||
周天87度 氏宿五度:三爻、先有三丁,后单丁,财亦少,六十年要养子承宗。
|
||||
|
||||
卯山酉向 87.5 - 92.5 正中 90向270左180右0 (87.5 - 90 - 92.5)
|
||||
周天87度 氏宿五度:三爻、先有三丁,后单丁,财亦少,六十年要养子承宗。
|
||||
周天88度 氏宿四度:四爻、出入超群,二十年不上必衣锦还乡,声名远振。
|
||||
周天89度 氏宿三度:五爻、爻吉,三五年富贵添丁,二十年名成利就,吉爻。
|
||||
周天90度 氏宿二度:六爻、犯小儿杀,有雷打疾病,丁财不吉。
|
||||
卯山、乙山、临卦、地泽临、四数、坤宫第三卦、属土逆爻
|
||||
周天91度 氏宿一度:六爻、二十年平隐,四十年开始败、七十年败得更凶。
|
||||
周天92度 亢宿十一:五爻、犯丁入爻,子孙贫困,不吉之爻。
|
||||
卯酉兼乙辛 92.5 - 97.5 正中 95向275左185右5 (92.5 - 95 - 97.5)
|
||||
???
|
||||
周天92度 亢宿十一:五爻、犯丁入爻,子孙贫困,不吉之爻。
|
||||
周天93度 亢宿十度:四爻、家中不宁、经常兄弟反目,半吉之爻。
|
||||
周天94度 亢宿九度:三爻、上和下睦、福寿高增,三元不败之爻。
|
||||
周天95度 亢宿八度:二爻、阴阳行位、丁财大旺,加官进禄,吉利之爻。
|
||||
周天96度 亢宿七度:一爻、此爻犯金神七杀、不宜立向。
|
||||
周天97度 亢宿六并:一爻、神逆天冲、先吉后凶不生养之爻。
|
||||
乙山、卯山、损卦、山泽损、九数、艮宫第四卦、属土顺爻
|
||||
乙辛兼卯酉 97.5 - 102.5 正中 100向280左190右10 (97.5 -100 -102.5)
|
||||
周天97度 亢宿六并:一爻、神逆天冲、先吉后凶不生养之爻。
|
||||
周天98度 亢宿五度:二爻、先发财后发丁、四十年有冲犯、四房多病、六十年大吉。
|
||||
周天99度 亢宿四度:三爻、近小两仪、先吉后凶、先有三丁,后单传,财亦小。
|
||||
周天100度 亢宿三度:四爻、阴阳比和、丁财两旺、富贵双全、出公卿,六十年不上永吉。
|
||||
周天101度 亢宿二度:五爻、犯神杀、有一子长病,估丁不旺,破家业之兆。
|
||||
周天102度 亢宿一度:六爻、坐小两议,十十年旺,四十年败,七十年家散人亡。
|
||||
乙山、节卦、水泽节、八数、坎宫第八卦、属水逆爻
|
||||
乙山辛向 102.5 - 107.5 正中 105向285左195右15 (102.5 -105-107.5)
|
||||
周天102度 亢宿一度:六爻、坐小两议,十十年旺,四十年败,七十年家散人亡。
|
||||
周天 度 角宿线度:六爻、犯正杀不立向。
|
||||
周天103度 角宿十一:五爻、先富后贫、出懒惰、双出妄、有女不念亲。
|
||||
周天104度 角宿十度:四爻、出人无良心、有丁无财之爻。
|
||||
周天105度 角宿九度:三爻、富贵双全,秋季生人吉,亥卯宋年手人不吉,
|
||||
周天106度 角宿八度:二爻、九全十美,有一人盲目、均为上吉之爻。
|
||||
周天107度 角宿七度:一爻、犯七杀,五十年招官非,在牢死、八十年绝。
|
||||
乙山、辰山、中浮卦、风泽中浮、三数、艮宫第七卦、属土顺爻
|
||||
乙辛兼辰戌 107.5 - 112.5 正中 110向290左200右20 (107.5 -110 -112.5)
|
||||
周天107度 角宿七度:一爻、犯七杀,五十年招官非,在牢死、八十年绝。
|
||||
周天108度 角宿六度:一爻、近小两仪,不旺丁财、十五内有女无男,五十年败。
|
||||
周天109度 角宿五度:二爻、阴差阳错,十八年出孤,四十年败、有火烧屋。
|
||||
周天110度 角宿四度:三爻、阴多功少,先吉后凶,五十年长四房必伤成才之子。
|
||||
周天111度 角宿三度:四爻、阴阳和合,三房先发,四十年后房房发,一百二五年催官到爻。
|
||||
周天112度 角宿二度:五爻、出人扬甸四海、三十五年大富贵,四十五年出贵之爻。
|
||||
辰戌兼乙辛 112.5 - 117.5 正中 115向295左205右25 (112.5 -115 -117.5)
|
||||
周天112度 角宿二度:五爻、出人扬甸四海、三十五年大富贵,四十五年出贵之爻。
|
||||
周天113度 角宿一度:六爻、会爻生风,先吉后凶,田业外人来管,五十年败。
|
||||
辰山、乙山、归妹卦、雷泽归妹、七数、兑宫第八卦、属金顺爻
|
||||
周天114度 轸宿十三:一爻、先吉后凶,三十年吉、四十年败、一百二十五年绝。
|
||||
周天115度 轸宿十二:二爻、三房小吉,四房妻见生子,廿十五年后,长子狂暴出乱。
|
||||
周天116度 轸宿十一:三爻、四五房丁财旺,生贵子、女秀之爻。
|
||||
周天117度 轸宿十度:四爻、有正丁字,三房单丁、别房旺、春秋生贵子、三元不败。
|
||||
辰山戌向 117.5 - 122.5 正中 120向300左210右30 (117.5 -120 -122.5)
|
||||
周天117度 轸宿十度:四爻、有正丁字,三房单丁、别房旺、春秋生贵子、三元不败。
|
||||
周天118度 轸宿九度:五爻、阴阳和合,二十五年出富,有官财长久。
|
||||
周天119度 轸宿八度:六爻、十五年出横行争讼、八十年出翁媳同床、后绝。
|
||||
辰山、睽卦、火泽睽、二数、艮宫第五卦、属土逆爻
|
||||
周天 度 轸宿线度:六爻、三十年发小财,四十年退田业,六十年死少年,一百二十五年败尽。
|
||||
周天120度 轸宿七度:五爻、出狂暴兄弟父子常斗打、生三子亦不成家、别去他方。
|
||||
周天121度 轸宿六度:四爻、小吉代代单丁、子孙愚颜、出乞丐、和做奴之人。
|
||||
周天122度 轸宿五度:三爻、犯朱雀能化杀为权、先发二三房、后出成财之子。
|
||||
辰戌兼巽乾 122.5 - 127.5 正中 125向305左215右35 (122.5 -125 -127.5)
|
||||
周天122度 轸宿五度:三爻、犯朱雀能化杀为权、先发二三房、后出成财之子。
|
||||
周天123度 轸宿四度:二爻、度爻、吉、出官贵、三元不败。
|
||||
周天124度 轸宿三度:一爻、度吉爻凶、宅坟均可兼,先吉后凶,三十年应。
|
||||
辰山、巽山、兑卦、兑为泽、一数、兑宫第一卦、属金顺爻
|
||||
周天125度 轸宿二度:一爻、寡爻,四房先败、四十年凶、五十年被杀,七十年绝。
|
||||
周天126度 轸宿一度:二爻、一二房败丁,四七房败财,又有估出外乞吃饿死。
|
||||
周天127度 翌宿十七:三爻、四六房单传,出好色之人,三十年大败。
|
||||
巽乾兼辰戌 127.5 - 132.5 正中 130向310左220右40 (127.5 -130 -132.5)
|
||||
周天127度 翌宿十七:三爻、四六房单传,出好色之人,三十年大败。
|
||||
周天128度 翌宿十六:四爻、丁财大 ,富贵双全,一百日进横财永久。
|
||||
周天129度 翌宿十五:五爻、飞星九耀、逢凶化吉三十年凶,四十年后大发。
|
||||
周天130度 翌宿十四:六爻、度吉爻不吉,三十年有丁财,四十年大败。
|
||||
巽山、辰山、履卦、天泽履、六数、艮宫第六卦、属土逆爻
|
||||
周天131度 翌宿十三:六爻、犯退神,前十年生三子,三十五年败,亥卯未年出黄肿淫乱。
|
||||
周天132度 翌宿十二:五爻、度爻不合,六房十二年必有丁,寅午戌年出顽夫。
|
||||
巽山乾向 132.5 - 137.5 正中 135向315左225右45 (132.5 -135 -137.5)
|
||||
周天132度 翌宿十二:五爻、度爻不合,六房十二年必有丁,寅午戌年出顽夫。
|
||||
周天133度 翌宿十一:四爻、此爻不宜立向。
|
||||
周天134度 翌宿十度:三爻、生人超群,衔发三房,别房亦吉,五代同堂。
|
||||
周天135度 翌宿九度:二爻、三星守度、三年必添丁,十二年媳妇自然来,六畜大旺。
|
||||
周天 度 翌宿线度:一爻、旺财不旺丁,长五房必出嫖赌、五十年败。
|
||||
巽山、巳山、泰卦、地天泰、九数、坤宫第四卦、属土顺爻
|
||||
周天136度 翌宿八度:一爻、爻坐退神,三六房兄弟不和,常斗打后出孤。
|
||||
周天137度 翌宿七度:二爻、亥卯未年生子忤逆,二十年出贼,四十年败尽产业。
|
||||
巽乾兼巳亥 137.5 - 142.5 正中 140向320左230右50 (137.5 -140 -142.5)
|
||||
周天137度 翌宿七度:二爻、亥卯未年生子忤逆,二十年出贼,四十年败尽产业。
|
||||
周天138度 翌宿六度:三爻、度爻皆吉,富贵双全,后来上大吉。
|
||||
周天139度 翌宿五度:四爻、阴阳配合,二十年后出贵,三元不败。
|
||||
周天140度 翌宿四度:五爻、夫妇和合,人丁大旺、二十年进横财,女嫁高门。
|
||||
周天141度 翌宿三度:六爻、三六九年必丧成才之子,四十年丁财六畜凶。
|
||||
周天142度 翌宿二度:六爻、寡妇守居之爻,不宜立向。
|
||||
巳山、巽山、大畜卦、山天大畜、四数、艮宫第三卦、属土逆爻
|
||||
巳亥兼巽乾 142.5 - 147.5 正中 145向325左235右55 (142.5 -145 -147.5)
|
||||
周天142度 翌宿二度:六爻、寡妇守居之爻,不宜立向。
|
||||
周天143度 翌宿一度:五爻、丁财不旺,三七年退财,寅午戍年大退。
|
||||
周天144度 张宿十八:四爻、杀爻克星,二十年大凶,二五年大钉子,二五八十一年有克丁财凶。
|
||||
周天145度 张宿十七:三爻、初年小儿难养、三十年后大发,永吉。
|
||||
周天146度 张宿十六:一爻、犯九耀,一代有破相,久败绝。
|
||||
周天 度 张宿线度:二爻、爻居线上、十五年富贵,三十年添丁贵寿。
|
||||
周天147度 张宿十五:一爻、犯飞星出淫乱作贼、如不被杀定有损伤。????
|
||||
巳山、需卦、水天需、三数、坤宫第七卦、属土顺爻
|
||||
巳山亥向 147.5 - 152.5 正中 150向330左240右60 (147.5 -150 -152.5)
|
||||
周天147度 张宿十五:一爻、犯飞星出淫乱作贼、如不被杀定有损伤。
|
||||
周天148度 张宿十四:二爻、爻凶度吉,有阴无阳,不旺丁,先吉后凶。
|
||||
周天149度 张宿十三:三爻、先兴后败,二十五年败田业,三子不端,长旺,二平。
|
||||
周天150度 张宿十二:四爻、阴阳交后,人贤良、富贵长久、上吉爻。
|
||||
周天151度 张宿十一:五爻、有一子读书伶俐,别子富贵,三元不败。
|
||||
周天152度 张宿十度:六爻、度吉爻不吉,人丁少,六十年绝。
|
||||
巳山、丙山、小畜卦、风天小畜、八数、巽宫第二卦、属木顺爻
|
||||
?
|
||||
?
|
||||
巳亥兼丙壬 152.5 - 157.5 正中 155向335左245右65 (152.5 -155 -157.5)
|
||||
周天152度 张宿十度:六爻、度吉爻不吉,人丁少,六十年绝。
|
||||
周天153度 张宿九度:六爻、犯差错,十年后见吉,三十年见凶六十年败。
|
||||
周天154度 张宿八度:五爻、代代单传,又出破相,别去他乡做妇,三十年应。
|
||||
周天155度 张宿七度:四爻、爻吉度不吉、阴多阳少,女多不发人丁。
|
||||
周天156度 张宿六度:三爻、六子吉利、三房人多吉、大富大贵之爻。
|
||||
周天157度 张宿五度:二爻、犯关杀,出黄肿,又出淫乱、在外死之人。
|
||||
丙壬兼巳亥 157.5 - 162.5 正中 160向340左250右70 (157.5 -160 -162.5)
|
||||
周天157度 张宿五度:二爻、犯关杀,出黄肿,又出淫乱、在外死之人。
|
||||
周天158度 张宿四度:一爻、阴阳不和、出好吃懒做之人、夫妻反目。
|
||||
丙山、巳山、壮卦、雷天大壮、二数、坤宫第五卦、属土逆爻
|
||||
周天159度 张宿三度:六爻、初生丁财、二十年败、别去他乡、五十年见死亡凶。
|
||||
周天160度 张宿二度:五爻、度吉爻凶、有顽之丈夫,不吉。
|
||||
周天161度 张宿一度:四爻、有卜字头、代代有一破相单传。
|
||||
周天162度 星宿八度:三爻、度灵财胜、丁财同进、功名显达、子孙荣华、三元不败。
|
||||
丙山壬向 162.5 - 167.5 正中 165向345左255右75 (162.5 -165 -167.5)
|
||||
周天162度 星宿八度:三爻、度灵财胜、丁财同进、功名显达、子孙荣华、三元不败。
|
||||
周天163度 星宿七度:二爻、富贵双全、财丁大旺、四五子了出官、别子财丁大旺之爻。
|
||||
周天164度 星宿六度:一爻、有下两仪、二三十年发丁财、四五十年见败、一百二十年尽。
|
||||
丙山、有卦、火天大有、七数、乾宫八卦、属金顺爻
|
||||
周天165度 星宿五度:二爻、有财无丁、有丁无财、二五房不利、有溺水之人、四十年应。
|
||||
周天 度 星宿线度:一爻、居线上出孤儿、四十年有丁财、七十年有伤亡、一百年绝。
|
||||
周天166度 星宿四度:三爻、阴阳定位、四七年添丁、五子聪明、旺财禄上吉。
|
||||
周天167度 星宿三度:四爻、得三字、三五房先发、三年生贵、三元不败。
|
||||
丙壬兼午子 167.5 - 172.5 正中 170向350左260右80 (167.5 -170 -172.5)
|
||||
周天167度 星宿三度:四爻、得三字、三五房先发、三年生贵、三元不败。
|
||||
周天168度 星宿二度:五爻、财丁两旺、有功名显达、长房先发、二五房出聪明、三十年出官。
|
||||
周天169度 星宿一度:六爻、有卦字头、三六房有一个赌钱、因克金神、代代单传。
|
||||
丙山、午山、夬卦、泽天夬、六数、坤宫第八卦、属土逆爻
|
||||
周天170度 柳宿十七:六爻、犯退爻、六七房年年见好、五十年见败,一百二十五年败绝。
|
||||
周天171度 柳宿十六:五爻、度吉爻凶、头房出孤,二十年应,代代单传。
|
||||
周天172度 柳宿十五:四爻、阴差阳错、有妻嫌夫、不利财丁,后出寡。
|
||||
午子兼丙壬 172.5 - 177.5 正中 175向355左265右85 (172.5 -175 -177.5)
|
||||
周天172度 柳宿十五:四爻、阴差阳错、有妻嫌夫、不利财丁,后出寡。
|
||||
周天173度 柳宿十四:三爻、飞星九耀,化凶不吉,大旺丁财,十五年见发。
|
||||
周天174度 柳宿十三:二爻、阴阳有准,先凶后吉,廿十五年人财大旺,三十年大发。
|
||||
周天175度 柳宿十二:一爻、度吉爻凶、三六房犯六甲,媳妇别夫自尽后败绝。
|
||||
午山、丙山、乾卦、乾为天、一数、乾宫第一卦、属金顺爻
|
||||
午山子向 177.5 - 182.5 正中 180向0左270右90(177.5 -180 -182.5)
|
||||
周天175度 柳宿十二:一爻、度吉爻凶、三六房犯六甲,媳妇别夫自尽后败绝。
|
||||
周天176度 柳宿十一:二爻、度吉爻凶、分金线上不吉,有别去他乡之人。
|
||||
周天177度 柳宿十度:三爻、阴多阳少、四十年伤正房,四六年出关寡、必伤成才之子。
|
||||
周天178度 柳宿九度:四爻、三房出狂暴,四五房出孝顺,二房好色,女招贵夫。
|
||||
周天189度 柳宿八度:五爻、玄关交合,三四房有横财,先发三房后发别房,功名显达。
|
||||
周天180度 柳宿七度:六爻、金神大冲、又犯横夭朱雀,被虎咬蛇伤死。
|
||||
周天 度 柳宿线度:一爻、出赌头好色之人,三六房不思家,廿四年出散蛮人。
|
||||
午山、丁山、后卦、天风后、八数、乾宫第二卦、属金逆爻
|
||||
周天181度 柳宿六度:六爻、阴阳交后、二十年稍好、四十年后常病、七十年后败绝。
|
||||
周天182度 柳宿五度:五爻、阴阳交会、进神富贵双全、二房稍好、其他亦吉。
|
||||
午子兼丁癸 182.5 - 187.5 正中 185向5左275右95 (182.5 -185 -187.5)
|
||||
周天182度 柳宿五度:五爻、阴阳交会、进神富贵双全、二房稍好、其他亦吉。
|
||||
周天183度 柳宿四度:四爻、犯横天朱雀、逢凶化吉、有功名可望、丁财并进。
|
||||
周天184度 柳宿三度:三爻、犯劫杀、先吉后凶、三子丁财少、五六房先败、六十年后养子承宗。
|
||||
周天185度 柳宿二度:二爻、损三房、中房吉、四六房凶、六十年后绝。
|
||||
周天186度 柳宿一度:一爻、度爻不吉、代代丁财不利、二十年后孤、六十年后凶一百廿五年绝。
|
||||
周天187度 鬼宿五度:一爻、六个月有人死出现、犯六甲亡、七十年后绝。
|
||||
丁山、午山、大过卦、泽风大过、三数、震宫第七卦、属木顺爻
|
||||
?
|
||||
丁癸兼午子 187.5 - 192.5 正中 190向10左280右100 (187.5 -190 -192.5)
|
||||
周天187度 鬼宿五度:一爻、六个月有人死出现、犯六甲亡、七十年后绝。
|
||||
周天188度 鬼宿四度:二爻、泽人雷风相落、阴阳交后丁财并进、二十年出宫、六房先发。
|
||||
周天189度 鬼宿三度:三爻、半吉半凶、阴多阳少、丁财不旺。
|
||||
周天190度 鬼宿二度:四爻、并生小两仪、先吉后凶、三十年吉,六十年凶、百廿五年更凶。
|
||||
周天191度 鬼宿一度:五爻、三十年吉,五十年出乱,被贼劫伤死之,应先吉后凶。
|
||||
周天192度 井宿三十一度:六爻四十年内有丁财、六十年内淫乱,一百二十五年败尽。
|
||||
丁山、鼎卦、火风鼎、四数离宫、属火逆爻
|
||||
?
|
||||
丁山癸向 192.5 - 197.5 正中 195向15左285右105 (192.5 -195 -197.5)
|
||||
周天192度 井宿三十一度:六爻四十年内有丁财、六十年内淫乱,一百二十五年败尽。
|
||||
周天193度 井宿三十:六爻、先吉后凶,三十年渐好转、富贵荣华三元不败之地。
|
||||
周天194度 井宿廿九:五爻度爻皆吉、阴阳杨合,丁财两但旺、三四房有破相、余房平。
|
||||
周天195度 井宿廿八:四爻、度吉爻不吉、官完临爻,四五房不利, 长三房利、三十年败。
|
||||
周天196度 井宿廿七:三爻、四五房损丁,别房代代有丁、六十年丁财损失、有在外死人。
|
||||
周天197度 井宿廿六:二爻、有阴无阳,火星临爻,代代有火攻伤,并出孤儿寡妇。
|
||||
丁癸兼未丑 197.5 - 202.5 正中 200向20左290右110 (197.5 -200 -202.5)
|
||||
周天197度 井宿廿六:二爻、有阴无阳,火星临爻,代代有火攻伤,并出孤儿寡妇。
|
||||
周天198度 井宿廿五:一爻、有阳无阴,冲破、火星、见火灾、犯关系,四五十年见凶七十年败。
|
||||
丁山、恒卦、雷风恒、九数震宫、属木顺爻
|
||||
周天199度 井宿廿四:一爻、先凶后吉,阴阳配合,富贵双全、丁财两旺,生生不息之爻。
|
||||
周天200度 井宿廿三:二爻、日月转运、三子先西后财,廿年出官贵,三元不败之爻。
|
||||
周天201度 井宿廿二:三爻、度爻不吉,四十年抱养他人子,五十年后大败。
|
||||
周天202度 井宿廿一:四爻、阴阳失位、长五房无丁,克妻刑子、三房绝。
|
||||
未丑兼丁癸 202.5 - 207.5 正中 205向25左295右115 (202.5 -205 -207.5)
|
||||
周天202度 井宿廿一:四爻、阴阳失位、长五房无丁,克妻刑子、三房绝。
|
||||
周天203度 井宿二十:五爻、犯线上, 二十年月上山下水死、四房抱人子养。
|
||||
周天204度 井宿十九:六爻、富贵阳市不久,四十年出孤寡,七十年后败尽。
|
||||
未山、丁山、巽卦、巽为风、一数、巽宫第一卦、属木顺爻
|
||||
周天205度 井宿十八:一爻、人丁大旺、三十年大富贵,妻贤子孝,山合吉爻。
|
||||
周天206度 井宿十七:二爻、阴阳配合、长房出贵,房房均发,益外甥、三房出愚。
|
||||
周天207度 井宿十六:三爻、度爻皆吉、阴阳合、丁财俱发、出忠厚之人。
|
||||
未山丑向 207.5 - 212.5 正中 210向30左300右120 (207.5 -210 -212.5)
|
||||
周天207度 井宿十六:三爻、度爻皆吉、阴阳合、丁财俱发、出忠厚之人。
|
||||
周天208度 井宿十五:四爻、度爻不吉、代代单传、五六房出瞎眼、脚跛、四十年宫非临。
|
||||
周天 度 井宿线度:五爻、三四年后克财丁、巳酉丑年犯人命,酉年女淫、丑年打雷。
|
||||
周天209度 井宿十四:六爻、正未字小两仪、六十年伤丁、并官非、七十年败尽。
|
||||
未山、井卦、水风井、六数、震宫第六卦、属木逆爻
|
||||
周天210度 井宿十三:六爻、不有交后,阴静无边,代代单传。
|
||||
周天 度 井宿线度:五爻、太阳临爻冲动日月,出人淫乱、翁媳同床,代代都有一人。
|
||||
周天211度 井宿十二:四爻、阴阳配合、先凶后吉,五十年富贵出众卿、官为清正。
|
||||
周天212度 井宿十一:三爻、阴多阳少、人丁不旺,先富后贫,四十年出贼。
|
||||
未丑兼坤艮 212.5 - 217.5 正中 215向35左305右125 (212.5 -215 -217.5)
|
||||
|
||||
周天212度 井宿十一:三爻、阴多阳少、人丁不旺,先富后贫,四十年出贼。
|
||||
周天213度 井宿十度:二爻、子孙不旺、三十年出别乡死亡,四十年出乱。
|
||||
周天214度 井宿九度:一爻、爻度不吉,阴盛阳衰、四十年出孤寡、不取之爻。
|
||||
未山、坤山、盅卦、山风盅、七数、巽宫第八卦、属木顺爻
|
||||
周天215度 井宿八度:一爻、阴阳被劫,二十年出孤寡,一百廿五年子孙大败。
|
||||
周天216度 井宿七度:二爻、阴阳杂乱,金神未壮,先天不配后天,三十年凶、四十年出孤。
|
||||
周天217度 井宿六度:三爻、有丁字先凶后吉,二十年进财功名,巳酉丑出人好风流。
|
||||
坤艮兼未丑 217.5 - 222.5 正中 220向40左310右130 (217.5 -220 -222.5)
|
||||
周天217度 井宿六度:三爻、有丁字先凶后吉,二十年进财功名,巳酉丑出人好风流。
|
||||
周天218度 井宿五度:四爻、阴阳配合, 丁财旺功名之贵,亥卯未年出人好风流。
|
||||
周天219度 井宿四度:五爻、丁财少,二三十年刑妻克子,四十年丁风雨同舟败尽。
|
||||
坤山、未山、升卦、地风升、二数、震宫第五卦、属木逆爻
|
||||
周天220度 井宿三度:六爻、近小两仪四五十年好、出入伶俐,七十年后败。
|
||||
周天221度 井宿二度:五爻、三十年丁财旺,长二房代代单传,半吉之爻。
|
||||
周天222度 井宿一度:四爻、五三四房大败亡丁,别房富贵,益外甥。
|
||||
坤山艮向 222.5 - 227.5 正中 225向45左315右135 (222.5 -225 -227.5)
|
||||
周天222度 井宿一度:四爻、五三四房大败亡丁,别房富贵,益外甥。
|
||||
周天223度 参宿十一:三爻、水火相射,积少成多, 先吉后凶, 四十年有财, 七十年三四房凶。
|
||||
周天224度 参宿十度:二爻、坐爻冲后日伤丁,廿五年冲长房, 五房穷、四十年克子破财。
|
||||
周天225度 参宿九度:一爻、犯退神、三十年出孤寡,一百二十五年败绝。
|
||||
坤山、申山、讼卦、天水讼、三数、离宫第七卦、属火顺爻
|
||||
周天226度 参宿八度:一爻、度爻不吉、不宜立向凶。
|
||||
周天227度 参宿七度:二爻、二子狂暴、别子聪明先天配后天、代代富贵、永久之爻。
|
||||
坤艮兼申寅 227.5 - 232.5 正中 230向50左320右140 (227.5 -230 -232.5)
|
||||
周天227度 参宿七度:二爻、二子狂暴、别子聪明先天配后天、代代富贵、永久之爻。
|
||||
周天228度 参宿六度:三爻、静度上吉大利公卿、三十年出官员,富贵长久。
|
||||
周天229度 参宿五度:四爻、度爻不吉、犯飞星九耀、女多男少、代代单丁、七十年败。
|
||||
周天230度 参宿四度:五爻、静度交冷、出家之人,二十年先发,四十年出黄肿亡、七十年大败。
|
||||
周天 度 参宿线度:六爻、近小两仪、先贫后败、四十年后养子承宗。
|
||||
申山、坤山、困卦、泽水困、八数、兑宫、属金逆爻
|
||||
周天231度 参宿三度:六爻、度吉爻凶、三十年吉、五十年伤丁、母淫人七十年败尽。
|
||||
周天232度 参宿二度:五爻、生三子出众超群、入必富贵、五代同堂为官。
|
||||
申寅兼坤艮 232.5 - 237.5 正中 235向55左325右145 (232.5 -235 -237.5)
|
||||
周天232度 参宿二度:五爻、生三子出众超群、入必富贵、五代同堂为官。
|
||||
周天233度 参宿一度:四爻、女多子少,四十年出游荡,五十年后败。
|
||||
周天234度 咀宿一度:三爻、犯飞星九耀杀、三十年败财,四十年败尽丁财。
|
||||
周天235度 毕宿十五:二爻、出人好风流赌博、三十年出寡、有三人吹烟败家。
|
||||
周天236度 毕宿十四:一爻、度爻不吉、先天破后天、有下水死后乱伦。
|
||||
周天237度 毕宿十三:一爻、先二十年富贵旺丁财、四十年见凶、一百廿五年死人败尽。
|
||||
申山、未卦、水火未济、九数、离宫第四卦、属火顺爻
|
||||
申山寅向 237.5 - 242.5 正中 240向60左330右150 (237.5 -240 -242.5)
|
||||
周天237度 毕宿十三:一爻、先二十年富贵旺丁财、四十年见凶、一百廿五年死人败尽。
|
||||
周天238度 毕宿十二:二爻、阴阳配合、出人美、丁财两旺、有官贵、永久吉利。
|
||||
周天239度 毕宿十一:三爻、出人伶利,富贵双全、三十六年有丁财功名。
|
||||
周天240度 毕宿十度:四爻、阴阳和合、四五房出官员、发贵、先长二子。
|
||||
周天241度 毕宿九度:五爻、出人狂好打人、财不旺、亥卯未年被人害死。
|
||||
周天242度 毕宿八度:六爻、先发丁财后败、四十年见、七十年伤财死。一百廿五年败尽。
|
||||
?
|
||||
申寅兼庚甲 242.5 - 247.5 正中 245向65左335右155 (242.5 -245 -247.5)
|
||||
?
|
||||
申山、庚山、解卦、雷水解、四数、震宫第三卦、属水逆爻
|
||||
周天242度 毕宿八度:六爻、先发丁财后败、四十年见、七十年伤财死。一百廿五年败尽。
|
||||
周天243度 毕宿七度:六爻、金神坐险、代代有一丁不发、五十年冲死人。
|
||||
周天244度 毕宿六度:五爻、阴阳比和、富贵双全、三十六年有丁财功名。
|
||||
周天245度 毕宿五度:四爻、三房有财丁、别人丁亦旺、六十年出聪明人,各项有人。
|
||||
周天246度 毕宿四度:三爻、先发丁后发财、三十年富贵,中田庄之爻。
|
||||
周天247度 毕宿三度:二爻、阴多阳少、四十年后代代单丁,三五房不利。
|
||||
庚甲兼申寅 247.5 - 252.5 正中 250向70左340右160 (247.5 -250 -252.5)
|
||||
周天247度 毕宿三度:二爻、阴多阳少、四十年后代代单丁,三五房不利。
|
||||
周天248度 毕宿二度:一爻、先发丁财,四十年见凶、六十年出雷打,一百廿五年败尽。
|
||||
庚山、申山、涣卦、风水涣、六数、离宫第六卦、属火逆爻
|
||||
周天249度 毕宿一度:六爻、阴多阳少,多女少男代代单传四十年二五房败。
|
||||
周天250度 昂宿九度:五爻、阴阳交后,金神得位出人英雄,富贵功名显达。
|
||||
周天251度 昂宿八度:四爻、先丁财,四十年见败,久则出人瞎眼。
|
||||
周天252度 昂宿七度:三爻、爻度皆吉, 丁财并旺,寅午戌年必出聪明之子。
|
||||
庚山甲向 252.5 - 257.5 正中 255向75左345右165 (252.5 -255 -257.5)
|
||||
周天252度 昂宿七度:三爻、爻度皆吉, 丁财并旺,寅午戌年必出聪明之子。
|
||||
周天253度 昂宿六度:二爻、五十年有下水死、三十六房出人夭,六十年火灾劫害人命。
|
||||
周 度 昂宿线度:一爻、不吉之爻、不宜立向。
|
||||
庚山、坎卦、坎为水、一数、坎宫第一卦、属水顺爻
|
||||
周天254度 昂宿五度:一爻、有飞星九耀先吉后凶,三十年见败。七十年败尽。
|
||||
周天255度 昂宿四度:二爻、七星生光彩,男女和睦,丁财俱有,三元不败之爻。
|
||||
周天256度 昂宿三度:三爻、二十五年出聪明人,丁财两旺,三子伶俐,别子孝顺,永吉。
|
||||
周天257度 昂宿二度:四爻、爻度不吉、有夫无妇,代代单传,富不久,半吉之爻。
|
||||
庚甲兼酉卯 257.5 - 262.5 正中 260向80左350右170 (257.5 -260 -262.5)
|
||||
周天257度 昂宿二度:四爻、爻度不吉、有夫无妇,代代单传,富不久,半吉之爻。
|
||||
周天258度 昂宿一度:五爻、阴多阳少,代代只有一子承宗,出狂暴之人。
|
||||
周天259度 胃宿十二:六爻、先发后败,廿五年好、三十年出孤寡、招官非不吉之爻。
|
||||
庚山、酉山、蒙卦、山水蒙、二数、离宫第五卦、属火逆爻
|
||||
周天260度 胃宿十一:六爻、阴多阳少,先吉后凶,四十年损丁财,家散人亡。
|
||||
周天261度 胃宿十度:五爻、富贵双全,丁财大旺,三四房大发别房小发、三元不败之爻。
|
||||
周天262度 胃宿九度:四爻、金神之壮气,五六房见凶、其余吉、有丁财、三房富贵为官。
|
||||
酉卯兼庚甲 262.5 - 267.5 正中 265向85左355右175 (262.5 -265 -267.5)
|
||||
周天262度 胃宿九度:四爻、金神之壮气,五六房见凶、其余吉、有丁财、三房富贵为官。
|
||||
周天263度 胃宿八度:三爻、先天与后天反背、出人性暴、发丁先、五十年富贵驰名。
|
||||
周天264度 胃宿七度:二爻、阴阳不合、有丁无财、代代单传,一男一女疯脚软凶。
|
||||
周天265度 胃宿六度:一爻、有丁字不吉、二代不旺、三四代俱散、先旺丁后败尽。
|
||||
酉山、庚山、师卦、地水师、七数、坎宫第八卦、属水顺爻
|
||||
周天 度 胃线上度:一爻、先吉后凶、三十年发丁财、六十年败、八十年出寡下水伤死。
|
||||
周天266度 胃宿五度:二爻、独行超群、富贵双全、富贵双全、亥卯未年出贵、永久之爻。
|
||||
周天267度 胃宿四度:三爻、灵神得位,富而且贵、财旺生官、出公卿、益外甥三代。
|
||||
酉山卯向 267.5 - 272.5 正中 270向90左0右180 (267.5 -270 -272.5)
|
||||
周天267度 胃宿四度:三爻、灵神得位,富而且贵、财旺生官、出公卿、益外甥三代。
|
||||
周天268度 胃宿三度:四爻、君子有道之贵、六十年进横财、加三字三房败丁、先吉后凶。
|
||||
周天269度 胃宿二度:五爻、阴阳不和、出人忤逆四十年损成才之子、后出寡。
|
||||
周天270度 胃宿一度:六爻、得下字先有丁财。逢甲戌年则大败、乃爻相克之故。
|
||||
酉山、辛山、遁卦、天山遁、四数、乾宫第三卦、属金逆爻
|
||||
周天271度 娄宿十三:六爻、阴阳俱静、二至三年旺、二十年平、四十年败、七十年绝。
|
||||
周天272度 娄宿十二:五爻、度皆吉、三十五年出贵,代代发永久。
|
||||
酉卯兼辛乙 272.5 - 277.5 正中 275向95左5右185 (272.5- 275 -277.5)
|
||||
周天272度 娄宿十二:五爻、度皆吉、三十五年出贵,代代发永久。
|
||||
周天273度 娄宿十一:四爻、旺神坐度、丁财两旺、富贵双全、上吉。
|
||||
周天274度 娄宿十度:三爻、阴阳不和,二十年出孤、三房发、四房绝、长房三分利少。
|
||||
周天275度 娄宿九度:二爻、度爻不右、出淫乱赌博、先吉后凶、五六十年丁财败。
|
||||
周天276度 娄宿八度:一爻、度吉爻顺、先三十年有人丁、六十年大败、女人好淫、男人好色。
|
||||
周天277度 娄宿七度:一爻、阴阳不交、富贵不久、人丁不旺、六十年大败、七十年出乱。
|
||||
辛山、酉山、咸卦、泽山咸、九数、兑宫第四卦、属金顺爻
|
||||
辛乙兼酉卯 277.5 - 282.5 正中 280向100左10右190 (277.5 -280 -282.5)
|
||||
周天277度 娄宿七度:一爻、阴阳不交、富贵不久、人丁不旺、六十年大败、七十年出乱。
|
||||
周天278度 娄宿六度:二爻、阴阳和合、二三房旺。
|
||||
周天 度 娄宿上度:三爻、此爻不取、明断学者慎之、二十六房有忤逆、功名显达样样好。
|
||||
周天279度 娄宿五度:四爻、先吉后凶、丁财少、三十年好、六十年大败。
|
||||
周天280度 娄宿四度:五爻、二十五年内出人俊秀四十年渐败、六十年败绝。
|
||||
周天281度 娄宿三度:六爻、先吉后凶、三十年内丁财旺、四十年败、一百二五年绝。
|
||||
周天282度 娄宿二度:六爻、有阴无阳、丁财不发、代代有一子承宗,六十年下水死,犯六甲。
|
||||
辛山、旅卦、火山旅、八数、离宫第二卦、属火逆爻
|
||||
辛山乙向 282.5 - 287.5 正中 285向105左15右195 (282.5 -285 -287.5)
|
||||
周天282度 娄宿二度:六爻、有阴无阳、丁财不发、代代有一子承宗,六十年下水死,犯六甲。
|
||||
周天283度 娄宿一度:五爻、富贵阳市永久人俊秀,得五星交后,长二房有官职。
|
||||
周天284度 奎宿十一:四爻、阴阳相济、万物生,富贵双全,永吉之爻。
|
||||
周天285度 奎宿十度:三爻、有阴无阳、有财无丁、四十年退田业, 代代单传。
|
||||
周天286度 奎宿九度:二爻、爻犯横天朱雀,先吉后凶,五十年发,七十年败。
|
||||
周天 度 奎宿线上:一爻、度吉爻不吉、三十年有丁财、五十年田业败、一百廿五年尽。
|
||||
周天287度 奎宿八度:一爻、阴多阳少、先发丁后发财、五十年败一百二十五年绝。
|
||||
辛山、戍山、小过卦、雷山小过、三数、兑宫、第七卦、属金顺爻
|
||||
辛乙兼戌辰 287.5 - 292.5 正中 290向110左20右200 (287.5 -290 -292.5)
|
||||
周天287度 奎宿八度:一爻、阴多阳少、先发丁后发财、五十年败一百二十五年绝。
|
||||
周天288度 奎宿七度:二爻、爻居线上、文武双全、雷火神位,出人为官,此神仙传上吉。
|
||||
周天289度 奎宿六度:三爻、阴阳比和、爻度同吉、丁财两旺,得六六七度之分金旺财。
|
||||
周天290度 奎宿五度:四爻、官儿临爻、五十年退尽,爻九耀反。
|
||||
周天291度 奎宿四度:五爻、有阴无阳、疾病连缠、四十年多财,六七十年出人懒、不成人。
|
||||
周天292度 奎宿三度:六爻、出虎伤蛇咬,脚软之人、中女犯六十年应,七十年败。
|
||||
戌山、辛山、渐卦、风山渐、七数、艮宫第八卦、属土顺爻
|
||||
戌辰兼辛乙 292.5 - 297.5 正中 295向115左25右205 (292.5 -295 -297.5)
|
||||
周天292度 奎宿三度:六爻、出虎伤蛇咬,脚软之人、中女犯六十年应,七十年败。
|
||||
周天293度 奎宿二度:一爻、阴阳初交、五十年丁财旺、七十年后长发,八十年招非凶。
|
||||
周天294度 奎宿一度:二爻、卜字爻夫妇和合,富贵长久、三房好淫、刑夫之爻。
|
||||
周天295度 壁宿十三:三爻、五神福之爻、丁财大旺二四房伤丁、别房大发长久。
|
||||
周天296度 壁宿十二:四爻、人财不旺、丑年需富贵、但不长久、四十年败。
|
||||
周天297度 壁宿十一:五爻、爻度不吉、有阴无阳、有丁无财、七十年退败、出孤寡凶。
|
||||
戌山辰向 297.5 - 302.5 正中 300向120左30右210 (297.5 -300 -302.5)
|
||||
周天297度 壁宿十一:五爻、爻度不吉、有阴无阳、有丁无财、七十年退败、出孤寡凶。
|
||||
周天298度 壁宿十度:六爻、先吉后凶、二十五年好、五十年败、一百二十五年绝。
|
||||
戌山、蹇卦、水山蹇、二数、兑宫、第五卦、属金逆爻
|
||||
周天299度 壁宿九度:六爻、动静交际、三十年以上丁财不发、四十年见永伤人,官非出。
|
||||
周天300度 壁宿八度:五爻、先天应爻、富贵兴隆、一年以上发丁财、永久不败。
|
||||
周天301度 壁宿七度:四爻、阴阳不交、代代孤子、二四房利别房凶、七十年出破相。
|
||||
周天302度 壁宿六度:三爻、阴阳定位,富贵双全、长二房出贵、永久之爻。
|
||||
戌辰兼乾巽 302.5 - 307.5 正中 305向125左35右215 (302.5 -305 -307.5)
|
||||
周天302度 壁宿六度:三爻、阴阳定位,富贵双全、长二房出贵、永久之爻。
|
||||
周天303度 壁宿五度:二爻、孤阴不长、女夺男权、二房出寡、丁几少、六十年败。
|
||||
周天304度 壁宿四度:一爻、度吉爻凶、中年死妻,二房有妻无子,五十年出天亡。
|
||||
戌山、乾山、艮卦、艮为山、一数、属土顺爻
|
||||
周天305度 壁宿三度:一爻、金神未安之爻、十年内丁财大旺,三十年出淫七十年败尽。
|
||||
周天306度 壁宿二度:二爻、积少成多、阴阳升殿、夫妇和合男女秀丽、六十日进财。
|
||||
周天307度 壁宿一度:三爻、阴多阳少、富不久、长二子养子承宗,四六房出乱。
|
||||
乾巽兼戌辰 307.5 - 312.5 正中 310向130左40右220 (307.5 -310 -312.5)
|
||||
周天307度 壁宿一度:三爻、阴多阳少、富不久、长二子养子承宗,四六房出乱。
|
||||
周天 度 线 上 度:四爻、先吉后凶、初年旺、入则败尽、至绝。
|
||||
周天308度 室宿十六:五爻、三十年内吉利、四十年二六房不吉、七十年败绝。
|
||||
周天309度 室宿十五:六爻、飞星九耀、三十年稍好、有财有贵、四十年败,二三房凶。
|
||||
乾山、戌山、谦卦、地山谦、六数、兑宫第六卦、属金逆爻
|
||||
周天310度 室宿十四:六爻、四十年内吉、四房先吉、四十年后败、一百二十五年败尽。
|
||||
周天311度 室宿十三:五爻、阴阳配合、富贵双全、五房大富大贵。
|
||||
周天312度 室宿十二:四爻、出人伶俐、二三十年出官、男女俊秀、益发外甥。
|
||||
乾山巽向 312.5 - 317.5 正中 315向135左45右225 (312.5 -315 -317.5)
|
||||
周天312度 室宿十二:四爻、出人伶俐、二三十年出官、男女俊秀、益发外甥。
|
||||
周天313度 室宿十一:三爻、有一子发科甲、一四七房出官、先凶后吉、长旺不败之爻。
|
||||
周天314度 室宿十度:二爻、不动不静、凶多吉少、代代单传、不发之爻。
|
||||
周天315度 室宿九度:一爻、犯横天朱雀、凶多吉少、出吊颈之人、四十年败尽。
|
||||
乾山、亥山、否卦、天地否、九数、乾宫第四卦、属金顺爻
|
||||
周天316度 室宿八度:一爻、天地不变,太阴阳坐位、三十年有丁财、四十年败八十年败尽。
|
||||
周天317度 室宿七度:二爻、初代为官不长、二代富贵双全、丁财两旺、三元不败。
|
||||
乾巽兼亥巳 317.5 - 322.5 正中 320向140左50右230 (317.5 -320 -322.5)
|
||||
周天317度 室宿七度:二爻、初代为官不长、二代富贵双全、丁财两旺、三元不败。
|
||||
周天318度 室宿六度:三爻、为君子之道、长子富贵、八十日有横财,有功名上吉。
|
||||
周天319度 室宿五度:四爻、别离四房不利,先吉后凶,四五十年败丁财,出狂暴非官。
|
||||
周天320度 室宿四度:五爻、先吉后凶、三十年内平、六十年后伤亡、一进廿五年败尽。
|
||||
周天321度 室宿三度:六爻、绝线不立向。
|
||||
周天322度 室宿二度:六爻、七杀三十年先吉、六十年吊颈、又有溺水死出寡。
|
||||
亥山、乾山、萃卦、泽地萃、四数、兑官第三卦、属金逆爻
|
||||
亥巳兼乾巽 322.5 - 327.5 正中 325向145左55右235 (322.5 -325 -327.5)
|
||||
周天322度 室宿二度:六爻、七杀三十年先吉、六十年吊颈、又有溺水死出寡。
|
||||
周天323度 室宿一度:五爻、富贵双全、功名显达,六十日有横财、人大旺、三元不败。
|
||||
周天 度 室宿线度:四爻、三星拱照、富贵功名、人财大旺、发福之爻。
|
||||
周天324度 危宿二十度:三爻、三十年得富贵、名声不扬,常有口舌是非、七十年败尽。
|
||||
周天325度 危宿十九度:二爻、半吉出人好洒色,性刚无柔,代代独子送终。
|
||||
周天326度 危宿十八度:一爻、退神爻、先吉后凶、三十年吉、六十年败、九十手工艺上出孤。
|
||||
周天327度 危宿十七:一爻、先吉后凶、三十年吉,五十年凶、败家出孤。
|
||||
亥山、晋卦、火地晋、三数、乾宫第七卦、属金顺爻
|
||||
?
|
||||
亥山巳向 327.5 - 332.5 正中 330向150左60右240 (327.5- 330 -332.5)
|
||||
周天327度 危宿十七:一爻、先吉后凶、三十年吉,五十年凶、败家出孤。
|
||||
周天328度 危宿十六:二爻、富贵长久,三十年出贵、生子伶俐、男女高寿之爻。
|
||||
周天329度 危宿十五:三爻、人丁大旺、二十年出伶俐之人、得外家财助、三元不败。
|
||||
周天330度 危宿十四:四爻、三十年吉、五十年二房败、长房吉、三子送终。
|
||||
周天331度 危宿十三:五爻、先夭破后天、夫妇不和,二十年后女人嫌夫、招非狂暴估见。
|
||||
周天332度 危宿十二:六爻、先吉后凶、三十年丁财平,七十年招官非,大祸命案。
|
||||
亥山、壬山、豫卦、雷地豫、八数、震宫第二卦、属木逆爻
|
||||
亥巳兼壬丙 332.5 - 337.5 正中 335向155左65右245 (332.5- 335 -337.5)
|
||||
周天332度 危宿十二:六爻、先吉后凶、三十年丁财平,七十年招官非,大祸命案。
|
||||
周天 度 危宿线度:六爻、阴阳不生、先吉后凶、三十年好、四十年出孤、一百廿五年尽败。
|
||||
周天333度 危宿十一:五爻、动静交加、福禄由此而得、富又贵、定出济世英雄。
|
||||
周天334度 危宿十度:四爻、七星生辉、富贵双全、三房不败。
|
||||
周天335度 危宿九度:三爻、七星去打劫、先吉后凶、代代单传、出狂暴。
|
||||
周天336度 危宿八度:二爻、常病不死、廿年有二子忤逆、反扫宾之象、四十年丁财不吉。
|
||||
周天337度 危宿七度:一爻、先吉后凶、二十年好、四十年富、七十年人财两败、一百年绝。
|
||||
壬山、亥山、观卦、风地观、二数、乾宫第二卦、属金逆爻
|
||||
壬丙兼亥巳 337.5 - 342.5 正中 340向160左70右250 (337.5 -340 -342.5)
|
||||
周天337度 危宿七度:一爻、先吉后凶、二十年好、四十年富、七十年人财两败、一百年绝。
|
||||
周天338度 危宿六度:六爻、飞星九耀、先右后凶、女多男少,人财不旺。
|
||||
周天339度 危宿五度:五爻、富贵双全、后出贵、吉爻。
|
||||
周天340度 危宿四度:四爻、先吉后凶、三十年败、四十年大祸,巳酉丑年损丁。
|
||||
周天341度 危宿三度:三爻、六房单传、别房有丁无财、七十年大败。
|
||||
周天342度 危宿二度:二爻、六畜败,七十年老少多灾难、后败尽。
|
||||
壬山丙向 342.5 - 347.5 正中 345向165左75右255 (342.5 -345 -347.5)
|
||||
周天342度 危宿二度:二爻、六畜败,七十年老少多灾难、后败尽。
|
||||
周天343度 危宿一度:一爻、先夭失位,坐神退位不吉。
|
||||
壬山、比卦、水地比、七数、坤宫第八卦、属土顺爻
|
||||
周天344度 虚宿十度:一爻、先吉后凶、五十年出孤、不宜立向。
|
||||
周天345度 虚宿九度:二爻、和平之柔、富又贵、丁财大旺、正三元不败。
|
||||
周天346度 虚宿八度:三爻、富贵双全、五十年出官贵、永远不败。
|
||||
壬丙兼子午 347.5 - 352.5 正中 350向170左80右260 (347.5 -350 -352.5)
|
||||
周天347度 虚宿七度:四爻、半吉半凶、四十年不吉、五十年败尽。
|
||||
周天348度 虚宿六度:五爻、先天不应、后天不动、不宜立向。
|
||||
周天349度 虚宿五度:六爻、先吉后凶、出孤儿寡妇、人丁绝、五十年见。
|
||||
壬山、子山、剥卦、山地剥、六数、乾宫第六卦、属金逆爻
|
||||
周天350度 虚宿四度:六爻、天不开之度、三十年吉、六十年凶、出孤寡。
|
||||
周天351度 虚宿三度:五爻、三字吉爻、二十年大发、六十年出官贵上吉。
|
||||
周天352度 虚宿二度:四爻、灵神之爻、富贵平安、三元不败。
|
||||
子午兼壬丙 352.5 - 357.5 正中 355向175左85右265 (352.5 -355 -357.5)
|
||||
周天352度 虚宿二度:四爻、灵神之爻、富贵平安、三元不败。
|
||||
周天353度 虚宿一度:三爻、三十年吉、六十年中平、七十年败、官非上门。
|
||||
周天 度 虚宿线度:二爻、金黄色神居界不吉、六十年夭亡。
|
||||
周天354度 女宿十一:一爻、退神坐位、有大祸要小心。
|
||||
子山、壬山、坤卦、坤为地、一数、坤宫第一卦、属土顺爻。
|
||||
周天355度 女宿十度:一爻、常见是非口舌、六十年出孤、六畜大伤。
|
||||
周天356度 女宿九度:二爻、丁财大旺、寅午戌年出聪明、八十年后出大富。
|
||||
周天357度 女宿八度:三爻、先后天相见、子孙荣华、二十年进官、四十年进财、上吉。
|
||||
|
||||
附注:廿四山先天六十四卦爻摘定
|
||||
1、 壬山:观卦在一运卦气死绝,剥卦在二运卦气死绝,不可择用。
|
||||
2、 子山:剥卦在二运卦气死绝,不用。坤、复两卦交界处为两仪交界处,一般人家的坟、宅不宜用。
|
||||
3、 丑山:随卦在下元八运卦气死绝,要向首有水才可使用。
|
||||
4、 艮山:无妄卦在下元八运卦气死绝,又犯反伏吟,大凶勿用。
|
||||
5、 寅山:家人卦在五运后十年及六运卦气死绝,不用。
|
||||
6、 甲山:雷卦在一运卦气死绝,不用。
|
||||
7、 乙山:节卦在上元三运卦气死绝,要向首有水,才可使用。中孚卦在中元六运卦气死绝,不用。
|
||||
8、 巽山:履卦在上元二运卦气死绝,要向首有水才可使用。大畜卦在下元七运卦气死绝,要在运尾、向首有水时才可使用。
|
||||
9、 巳山:大畜卦在下元七运卦气死绝,勿用。需卦在五运后十年及六运卦气死绝,五运不用,六运向首有水可用。小畜卦在上元三运卦气绝,不用。
|
||||
10、丙山:大壮卦在四运及五运前十年卦气死绝,不用。大有卦在下远九运卦气死绝,要向首有水才可使用。
|
||||
11、午山:泽卦在上元二运卦气死绝,不用。乾卦在上元三运卦气死绝,要向首有水才可使用。
|
||||
12、坤山:困卦在上元三运卦气死绝,不用。
|
||||
13、申山:解卦在中元五运后十年及六运卦气死绝,不用。困卦在上元三运卦气死绝,不用。
|
||||
14、酉山:遁卦在七运、八运为卦气死绝,不用。七运向首有水可用,八运即使向首有水不可用。
|
||||
15、辛山:旅卦在九运为卦气死绝,不用。小过卦在四运及五运前十年为卦气死绝,不用。
|
||||
16、戌山:蹇卦在一运为卦气死绝,不用。
|
||||
17、乾山:谦卦在二运为卦气死绝,不用。因下卦在二运是旺山旺向,向首有水,煞气较轻。替卦则丁星入囚,有财无丁。
|
||||
18、亥山:萃卦在七运为卦气死绝,不用。晋卦在九运为卦气死绝,不用。豫卦在四运为卦气死绝,不用。
|
||||
|
||||
344
public/demo.json
344
public/demo.json
@@ -1,51 +1,34 @@
|
||||
{
|
||||
"name": "demo",
|
||||
"description": "luopan demo config with named color palettes",
|
||||
"background": "金",
|
||||
"strokeWidth": 0.5,
|
||||
"strokeColor": "冷",
|
||||
"strokeOpacity": 0.5,
|
||||
"theme": {
|
||||
"name": "五行配色主题",
|
||||
"colorPalettes": {
|
||||
"黑": "#000000",
|
||||
"灰": "#757575",
|
||||
"白": "#ffffff",
|
||||
"木": "#43A047",
|
||||
"火": "#E53935",
|
||||
"土": "#8D6E63",
|
||||
"金": "#D4AF37",
|
||||
"水": "#0288D1",
|
||||
"热": "#FF8F00",
|
||||
"冷": "#1976D2",
|
||||
"强": "#D32F2F",
|
||||
"软": "#FFE0B2"
|
||||
}
|
||||
},
|
||||
"background": "白",
|
||||
"strokeWidth": 1,
|
||||
"strokeOpacity": 1,
|
||||
"strokeColor": "黑",
|
||||
"insetDistance": 1,
|
||||
"themeRef": "五行强",
|
||||
"layers": [
|
||||
{
|
||||
"type": "centerIcon",
|
||||
"centerIcon": {
|
||||
"rIcon": 50,
|
||||
"opacity": 0.5,
|
||||
"opacity": 0.8,
|
||||
"name": "centericon.svg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"divisions": 2,
|
||||
"rInner": 90,
|
||||
"rOuter": 120,
|
||||
"rInner": 60,
|
||||
"rOuter": 100,
|
||||
"startAngle": 0,
|
||||
|
||||
"sectors": [
|
||||
{
|
||||
"content": "阴",
|
||||
"innerFill": 1
|
||||
"colorRef": "黑"
|
||||
},
|
||||
{
|
||||
"content": "阳",
|
||||
"colorRef": "White",
|
||||
"innerFill": 0
|
||||
"colorRef": "白"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -54,15 +37,40 @@
|
||||
"rInner": 120,
|
||||
"rOuter": 160,
|
||||
"startAngle": 0,
|
||||
"colorRef": "水",
|
||||
"sectors": [
|
||||
{ "content": "乾", "innerFill": 1 },
|
||||
{ "content": "兑", "innerFill": 0 },
|
||||
{ "content": "离", "innerFill": 1 },
|
||||
{ "content": "震", "innerFill": 0 },
|
||||
{ "content": "巽", "innerFill": 1 },
|
||||
{ "content": "坎", "innerFill": 0 },
|
||||
{ "content": "艮", "innerFill": 1 },
|
||||
{ "content": "坤", "innerFill": 0 }
|
||||
{
|
||||
"content": "乾",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "兑",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "离",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "震",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "巽",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "坎",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "艮",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "坤",
|
||||
"innerFill": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -71,22 +79,61 @@
|
||||
"rOuter": 200,
|
||||
"startAngle": 0,
|
||||
"colorRef": "土",
|
||||
"innerFill": 1,
|
||||
"num": 3,
|
||||
"interval": 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 }
|
||||
{
|
||||
"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
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -95,30 +142,88 @@
|
||||
"rOuter": 240,
|
||||
"startAngle": 0,
|
||||
"sectors": [
|
||||
{ "content": "甲乙|子|丙丁", "colorRef": "木", "innerFill": 1 },
|
||||
{ "content": "丑" },
|
||||
{ "content": "戊己|寅|庚辛", "colorRef": "土", "innerFill": 0 },
|
||||
{ "content": "卯" },
|
||||
{ "content": "壬癸|辰|甲乙", "innerFill": 1 },
|
||||
{ "content": "巳" },
|
||||
{ "content": "丙丁|午|戊己", "colorRef": "火", "innerFill": 0 },
|
||||
{ "content": "未" },
|
||||
{ "content": "庚辛|申|壬癸", "colorRef": "金", "innerFill": 1 },
|
||||
{ "content": "酉" },
|
||||
{ "content": "甲乙|戌|丙丁", "innerFill": 0 },
|
||||
{ "content": "亥" },
|
||||
{ "content": "戊己|子|庚辛" },
|
||||
{ "content": "丑" },
|
||||
{ "content": "壬癸|寅|甲乙" },
|
||||
{ "content": "卯" },
|
||||
{ "content": "丙丁|辰|戊己" },
|
||||
{ "content": "巳" },
|
||||
{ "content": "庚辛|午|壬癸" },
|
||||
{ "content": "未" },
|
||||
{ "content": "甲乙|申|丙丁" },
|
||||
{ "content": "酉" },
|
||||
{ "content": "戊己|戌|庚辛" },
|
||||
{ "content": "亥" }
|
||||
{
|
||||
"content": "甲乙|子|丙丁",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "丑"
|
||||
},
|
||||
{
|
||||
"content": "戊己|寅|庚辛",
|
||||
"colorRef": "土",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "卯"
|
||||
},
|
||||
{
|
||||
"content": "壬癸|辰|甲乙",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "巳"
|
||||
},
|
||||
{
|
||||
"content": "丙丁|午|戊己",
|
||||
"colorRef": "火",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "未"
|
||||
},
|
||||
{
|
||||
"content": "庚辛|申|壬癸",
|
||||
"colorRef": "金",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "酉"
|
||||
},
|
||||
{
|
||||
"content": "甲乙|戌|丙丁",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "亥"
|
||||
},
|
||||
{
|
||||
"content": "戊己|子|庚辛"
|
||||
},
|
||||
{
|
||||
"content": "丑"
|
||||
},
|
||||
{
|
||||
"content": "壬癸|寅|甲乙"
|
||||
},
|
||||
{
|
||||
"content": "卯"
|
||||
},
|
||||
{
|
||||
"content": "丙丁|辰|戊己"
|
||||
},
|
||||
{
|
||||
"content": "巳"
|
||||
},
|
||||
{
|
||||
"content": "庚辛|午|壬癸"
|
||||
},
|
||||
{
|
||||
"content": "未"
|
||||
},
|
||||
{
|
||||
"content": "甲乙|申|丙丁"
|
||||
},
|
||||
{
|
||||
"content": "酉"
|
||||
},
|
||||
{
|
||||
"content": "戊己|戌|庚辛"
|
||||
},
|
||||
{
|
||||
"content": "亥"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -127,22 +232,81 @@
|
||||
"rOuter": 270,
|
||||
"startAngle": 0,
|
||||
"sectors": [
|
||||
{ "content": "甲乙|丙丁|戊己|庚辛", "colorRef": "木", "innerFill": 1 },
|
||||
{ "content": "壬癸|甲乙|丙丁|戊己", "colorRef": "土", "innerFill": 0 },
|
||||
{ "content": "庚辛|壬癸|甲乙|丙丁", "innerFill": 1 },
|
||||
{ "content": "戊己|庚辛|壬癸|甲乙", "colorRef": "火", "innerFill": 0 },
|
||||
{ "content": "丙丁|戊己|庚辛|壬癸", "colorRef": "金", "innerFill": 1 },
|
||||
{ "content": "子丑|寅卯|辰巳|午未", "innerFill": 0 },
|
||||
{ "content": "申酉|戌亥|子丑|寅卯", "colorRef": "木", "innerFill": 1 },
|
||||
{ "content": "辰巳|午未|申酉|戌亥", "colorRef": "水", "innerFill": 0 },
|
||||
{ "content": "甲乙|丙丁|戊己|庚辛", "innerFill": 1 },
|
||||
{ "content": "壬癸|甲乙|丙丁|戊己", "colorRef": "土", "innerFill": 0 },
|
||||
{ "content": "庚辛|壬癸|甲乙|丙丁", "colorRef": "木", "innerFill": 1 },
|
||||
{ "content": "戊己|庚辛|壬癸|甲乙", "innerFill": 0 },
|
||||
{ "content": "丙丁|戊己|庚辛|壬癸", "colorRef": "火", "innerFill": 1 },
|
||||
{ "content": "子丑|寅卯|辰巳|午未", "colorRef": "金", "innerFill": 0 },
|
||||
{ "content": "申酉|戌亥|子丑|寅卯", "innerFill": 1 },
|
||||
{ "content": "辰巳|午未|申酉|戌亥", "colorRef": "水", "innerFill": 0 }
|
||||
{
|
||||
"content": "甲乙|丙丁|戊己|庚辛",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "壬癸|甲乙|丙丁|戊己",
|
||||
"colorRef": "土",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "庚辛|壬癸|甲乙|丙丁",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "戊己|庚辛|壬癸|甲乙",
|
||||
"colorRef": "火",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "丙丁|戊己|庚辛|壬癸",
|
||||
"colorRef": "金",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "子丑|寅卯|辰巳|午未",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "申酉|戌亥|子丑|寅卯",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "辰巳|午未|申酉|戌亥",
|
||||
"colorRef": "水",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "甲乙|丙丁|戊己|庚辛",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "壬癸|甲乙|丙丁|戊己",
|
||||
"colorRef": "土",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "庚辛|壬癸|甲乙|丙丁",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "戊己|庚辛|壬癸|甲乙",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "丙丁|戊己|庚辛|壬癸",
|
||||
"colorRef": "火",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "子丑|寅卯|辰巳|午未",
|
||||
"colorRef": "金",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "申酉|戌亥|子丑|寅卯",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "辰巳|午未|申酉|戌亥",
|
||||
"colorRef": "水",
|
||||
"innerFill": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -158,7 +322,6 @@
|
||||
},
|
||||
{
|
||||
"type": "degreeRing",
|
||||
"degreeRing": {
|
||||
"rInner": 350,
|
||||
"rOuter": 380,
|
||||
"showDegree": 1,
|
||||
@@ -172,6 +335,5 @@
|
||||
"tickColor": "#000000",
|
||||
"ringColor": "#000000"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -21,38 +21,14 @@
|
||||
"strokeWidth": 0.3, -- 扇区边界线宽度(像素)
|
||||
"strokeColor": "灰", -- 扇区边界线颜色(支持 colorPalettes)
|
||||
"strokeOpacity": 0.15, -- 扇区边界线透明度
|
||||
"outerRadius": 500, -- 罗盘外半径,单位:像素
|
||||
-- outerRadius 可选,仅在没有任何 layer 时作为兜底外半径使用
|
||||
|
||||
-- ========================================
|
||||
-- 主题配置
|
||||
-- ========================================
|
||||
"theme": {
|
||||
"name": "五行配色主题",
|
||||
|
||||
-- 文字颜色自动计算:根据背景色明暗度自动选择黑/白文字,确保高对比度
|
||||
-- "textOnLight": "#1a1a1a", 已删除,由系统自动计算
|
||||
-- "textOnDark": "#ffffff", 已删除,由系统自动计算
|
||||
|
||||
-- ========================================
|
||||
-- 命名配色方案 (Named Color Palettes)
|
||||
-- ========================================
|
||||
-- 定义可复用的命名颜色,在 layers 中通过名称引用
|
||||
-- 包含10种配色:黑、灰、白、五行(木火土金水)、热、冷、强、软
|
||||
"colorPalettes": {
|
||||
"黑": "#000000", -- 纯黑
|
||||
"灰": "#757575", -- 中灰
|
||||
"白": "#ffffff", -- 纯白
|
||||
"木": "#43A047", -- 生机绿(五行:木)
|
||||
"火": "#E53935", -- 烈焰红(五行:火)
|
||||
"土": "#8D6E63", -- 大地棕(五行:土)
|
||||
"金": "#78909C", -- 金属灰(五行:金)
|
||||
"水": "#0288D1", -- 水蓝(五行:水)
|
||||
"热": "#FF8F00", -- 暖橙(暖色调)
|
||||
"冷": "#1976D2", -- 冷蓝(冷色调)
|
||||
"强": "#D32F2F", -- 强烈红(高饱和度)
|
||||
"\u8f6f": "#FFE0B2" -- 柔和杏(低饱和度)
|
||||
},
|
||||
},
|
||||
-- 主题统一放在 public/themes.json 中管理
|
||||
-- 通过 themeRef 引用主题名称;不填则使用 themes.json.default
|
||||
"themeRef": "五行弱",
|
||||
|
||||
-- ========================================
|
||||
-- 层配置 (Layers Configuration)
|
||||
@@ -129,7 +105,7 @@
|
||||
"startAngle": 0, -- 第一个扇区的起始角度(度,0度为正北方向,顺时针)
|
||||
"colorRef": "土", -- 着色使用的颜色引用
|
||||
"innerFill": 1, -- 着色区域的内缩设置
|
||||
-- "start": 1, -- 从第1个扇区开始着色(已废弃,统一从第1个扇区开始)
|
||||
-- "patternOffset": 2, -- 第一个着色单元偏移1个扇区(可选)
|
||||
"num": 3, -- 连续着色3个扇区
|
||||
"interval": 1, -- 着色后间隔1个扇区
|
||||
"sectors": [
|
||||
@@ -241,19 +217,18 @@
|
||||
-- ========================================
|
||||
{
|
||||
"type": "degreeRing",
|
||||
"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可以只显示刻度而不显示圆圈)
|
||||
"opacity": 0.3, -- 圆环透明度(0.0-1.0),同时作用于背景填充与外/内圈
|
||||
"tickLength": 6, -- 刻度线长度,单位:像素, minorTick比majorTick短1px, microTick比minorTick短1px
|
||||
"majorTick": 10, -- 主刻度间隔(度),如 10 表示每 10° 一个主刻度
|
||||
"minorTick": 5, -- 次刻度间隔(度),如 2 表示每 2° 一个次刻度
|
||||
"microTick": 1, -- 微刻度间隔(度),如 1 表示每 1° 一个微刻度
|
||||
"tickColor": "#ffffff",-- 刻度线颜色
|
||||
"ringColor": "#ffffff" -- 圆环颜色
|
||||
}
|
||||
"colorRef": "白", -- 刻度环背景色(画一圈环形填充)
|
||||
"tickColor": "#ffffff",-- 刻度线颜色(可省略,省略时根据背景自动取对比色)
|
||||
"ringColor": "#ffffff" -- 内外圆环颜色(可省略,省略时根据背景自动取对比色)
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -265,17 +240,18 @@
|
||||
-- 示例:{ "content": "木", "colorRef": "木" }
|
||||
--
|
||||
-- 优先级2:层级规律填色配置
|
||||
-- 通过 colorRef + start + num + interval 实现规律着色
|
||||
-- 通过 colorRef + patternOffset + num + interval 实现规律着色
|
||||
-- 未着色的扇区使用全局 background 颜色
|
||||
--
|
||||
-- ========================================
|
||||
-- 规律填色算法说明
|
||||
-- ========================================
|
||||
-- startAngle: 第一个扇区的起始角度(度,0度为正北方向,顺时针增加)
|
||||
-- patternOffset: 规律填色起始偏移(扇区序号,从1开始,默认1,未指定时与startAngle对齐)
|
||||
-- num: 连续着色扇区数量
|
||||
-- interval: 着色后间隔的扇区数量
|
||||
--
|
||||
-- 算法:从第1个扇区开始,循环执行 "着色num个" → "跳过interval个"
|
||||
-- 算法:从第 patternOffset 个扇区开始,循环执行 "着色num个" → "跳过interval个"
|
||||
-- 特殊情况:interval=0 表示无间隔,全部着色
|
||||
--
|
||||
-- 示例:divisions=12, startAngle=0, num=3, interval=1
|
||||
|
||||
@@ -1,25 +1,13 @@
|
||||
{
|
||||
"name": "demo2",
|
||||
"description": "luopan demo config with named color palettes",
|
||||
"description": "luopan demo2 config with named color palettes",
|
||||
"background": "#000000",
|
||||
"strokeWidth": 1,
|
||||
"strokeOpacity": 1,
|
||||
"strokeColor": "白",
|
||||
"insetDistance": 1,
|
||||
"outerRadius": 500,
|
||||
"theme": {
|
||||
"name": "五行配色主题",
|
||||
"colorPalettes": {
|
||||
"黑": "#000000",
|
||||
"灰": "#757575",
|
||||
"白": "#ffffff",
|
||||
"木": "#43A047",
|
||||
"火": "#E53935",
|
||||
"土": "#8D6E63",
|
||||
"金": "#78909C",
|
||||
"水": "#0288D1",
|
||||
"热": "#FF8F00",
|
||||
"冷": "#1976D2",
|
||||
"强": "#D32F2F",
|
||||
"\u8f6f": "#FFE0B2"
|
||||
}
|
||||
},
|
||||
"themeRef": "五行弱",
|
||||
"layers": [
|
||||
{
|
||||
"type": "centerIcon",
|
||||
@@ -34,15 +22,15 @@
|
||||
"rInner": 60,
|
||||
"rOuter": 90,
|
||||
"startAngle": 0,
|
||||
|
||||
"sectors": [
|
||||
{
|
||||
"content": "阴",
|
||||
"colorRef": "黑",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "阳",
|
||||
"colorRef": "White",
|
||||
"colorRef": "白",
|
||||
"innerFill": 0
|
||||
}
|
||||
]
|
||||
@@ -53,14 +41,38 @@
|
||||
"rOuter": 160,
|
||||
"startAngle": 0,
|
||||
"sectors": [
|
||||
{ "content": "乾", "innerFill": 1 },
|
||||
{ "content": "兑", "innerFill": 0 },
|
||||
{ "content": "离", "innerFill": 1 },
|
||||
{ "content": "震", "innerFill": 0 },
|
||||
{ "content": "巽", "innerFill": 1 },
|
||||
{ "content": "坎", "innerFill": 0 },
|
||||
{ "content": "艮", "innerFill": 1 },
|
||||
{ "content": "坤", "innerFill": 0 }
|
||||
{
|
||||
"content": "乾",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "兑",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "离",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "震",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "巽",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "坎",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "艮",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "坤",
|
||||
"innerFill": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -73,18 +85,58 @@
|
||||
"num": 3,
|
||||
"interval": 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 }
|
||||
{
|
||||
"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
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -93,30 +145,88 @@
|
||||
"rOuter": 240,
|
||||
"startAngle": 0,
|
||||
"sectors": [
|
||||
{ "content": "甲乙|子|丙丁", "colorRef": "木", "innerFill": 1 },
|
||||
{ "content": "丑" },
|
||||
{ "content": "戊己|寅|庚辛", "colorRef": "土", "innerFill": 0 },
|
||||
{ "content": "卯" },
|
||||
{ "content": "壬癸|辰|甲乙", "innerFill": 1 },
|
||||
{ "content": "巳" },
|
||||
{ "content": "丙丁|午|戊己", "colorRef": "火", "innerFill": 0 },
|
||||
{ "content": "未" },
|
||||
{ "content": "庚辛|申|壬癸", "colorRef": "金", "innerFill": 1 },
|
||||
{ "content": "酉" },
|
||||
{ "content": "甲乙|戌|丙丁", "innerFill": 0 },
|
||||
{ "content": "亥" },
|
||||
{ "content": "戊己|子|庚辛" },
|
||||
{ "content": "丑" },
|
||||
{ "content": "壬癸|寅|甲乙" },
|
||||
{ "content": "卯" },
|
||||
{ "content": "丙丁|辰|戊己" },
|
||||
{ "content": "巳" },
|
||||
{ "content": "庚辛|午|壬癸" },
|
||||
{ "content": "未" },
|
||||
{ "content": "甲乙|申|丙丁" },
|
||||
{ "content": "酉" },
|
||||
{ "content": "戊己|戌|庚辛" },
|
||||
{ "content": "亥" }
|
||||
{
|
||||
"content": "甲乙|子|丙丁",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "丑"
|
||||
},
|
||||
{
|
||||
"content": "戊己|寅|庚辛",
|
||||
"colorRef": "土",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "卯"
|
||||
},
|
||||
{
|
||||
"content": "壬癸|辰|甲乙",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "巳"
|
||||
},
|
||||
{
|
||||
"content": "丙丁|午|戊己",
|
||||
"colorRef": "火",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "未"
|
||||
},
|
||||
{
|
||||
"content": "庚辛|申|壬癸",
|
||||
"colorRef": "金",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "酉"
|
||||
},
|
||||
{
|
||||
"content": "甲乙|戌|丙丁",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "亥"
|
||||
},
|
||||
{
|
||||
"content": "戊己|子|庚辛"
|
||||
},
|
||||
{
|
||||
"content": "丑"
|
||||
},
|
||||
{
|
||||
"content": "壬癸|寅|甲乙"
|
||||
},
|
||||
{
|
||||
"content": "卯"
|
||||
},
|
||||
{
|
||||
"content": "丙丁|辰|戊己"
|
||||
},
|
||||
{
|
||||
"content": "巳"
|
||||
},
|
||||
{
|
||||
"content": "庚辛|午|壬癸"
|
||||
},
|
||||
{
|
||||
"content": "未"
|
||||
},
|
||||
{
|
||||
"content": "甲乙|申|丙丁"
|
||||
},
|
||||
{
|
||||
"content": "酉"
|
||||
},
|
||||
{
|
||||
"content": "戊己|戌|庚辛"
|
||||
},
|
||||
{
|
||||
"content": "亥"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -125,22 +235,81 @@
|
||||
"rOuter": 270,
|
||||
"startAngle": 0,
|
||||
"sectors": [
|
||||
{ "content": "甲乙|丙丁|戊己|庚辛", "colorRef": "木", "innerFill": 1 },
|
||||
{ "content": "壬癸|甲乙|丙丁|戊己", "colorRef": "土", "innerFill": 0 },
|
||||
{ "content": "庚辛|壬癸|甲乙|丙丁", "innerFill": 1 },
|
||||
{ "content": "戊己|庚辛|壬癸|甲乙", "colorRef": "火", "innerFill": 0 },
|
||||
{ "content": "丙丁|戊己|庚辛|壬癸", "colorRef": "金", "innerFill": 1 },
|
||||
{ "content": "子丑|寅卯|辰巳|午未", "innerFill": 0 },
|
||||
{ "content": "申酉|戌亥|子丑|寅卯", "colorRef": "木", "innerFill": 1 },
|
||||
{ "content": "辰巳|午未|申酉|戌亥", "colorRef": "水", "innerFill": 0 },
|
||||
{ "content": "甲乙|丙丁|戊己|庚辛", "innerFill": 1 },
|
||||
{ "content": "壬癸|甲乙|丙丁|戊己", "colorRef": "土", "innerFill": 0 },
|
||||
{ "content": "庚辛|壬癸|甲乙|丙丁", "colorRef": "木", "innerFill": 1 },
|
||||
{ "content": "戊己|庚辛|壬癸|甲乙", "innerFill": 0 },
|
||||
{ "content": "丙丁|戊己|庚辛|壬癸", "colorRef": "火", "innerFill": 1 },
|
||||
{ "content": "子丑|寅卯|辰巳|午未", "colorRef": "金", "innerFill": 0 },
|
||||
{ "content": "申酉|戌亥|子丑|寅卯", "innerFill": 1 },
|
||||
{ "content": "辰巳|午未|申酉|戌亥", "colorRef": "水", "innerFill": 0 }
|
||||
{
|
||||
"content": "甲乙|丙丁|戊己|庚辛",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "壬癸|甲乙|丙丁|戊己",
|
||||
"colorRef": "土",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "庚辛|壬癸|甲乙|丙丁",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "戊己|庚辛|壬癸|甲乙",
|
||||
"colorRef": "火",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "丙丁|戊己|庚辛|壬癸",
|
||||
"colorRef": "金",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "子丑|寅卯|辰巳|午未",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "申酉|戌亥|子丑|寅卯",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "辰巳|午未|申酉|戌亥",
|
||||
"colorRef": "水",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "甲乙|丙丁|戊己|庚辛",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "壬癸|甲乙|丙丁|戊己",
|
||||
"colorRef": "土",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "庚辛|壬癸|甲乙|丙丁",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "戊己|庚辛|壬癸|甲乙",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "丙丁|戊己|庚辛|壬癸",
|
||||
"colorRef": "火",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "子丑|寅卯|辰巳|午未",
|
||||
"colorRef": "金",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "申酉|戌亥|子丑|寅卯",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "辰巳|午未|申酉|戌亥",
|
||||
"colorRef": "水",
|
||||
"innerFill": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -150,13 +319,12 @@
|
||||
"startAngle": -4.5,
|
||||
"innerFill": 0,
|
||||
"colorRef": "火",
|
||||
"num": 3,
|
||||
"interval": 2,
|
||||
"num": 4,
|
||||
"interval": 1,
|
||||
"groupSplit": false
|
||||
},
|
||||
{
|
||||
"type": "degreeRing",
|
||||
"degreeRing": {
|
||||
"rInner": 450,
|
||||
"rOuter": 500,
|
||||
"showDegree": 1,
|
||||
@@ -169,6 +337,5 @@
|
||||
"tickColor": "#ffffff",
|
||||
"ringColor": "#ffffff"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
339
public/demo3.json
Normal file
339
public/demo3.json
Normal file
@@ -0,0 +1,339 @@
|
||||
{
|
||||
"name": "demo",
|
||||
"description": "luopan demo config with named color palettes",
|
||||
"background": "白",
|
||||
"strokeWidth": 1,
|
||||
"strokeOpacity": 1,
|
||||
"strokeColor": "黑",
|
||||
"insetDistance": 1,
|
||||
"themeRef": "五行弱",
|
||||
"layers": [
|
||||
{
|
||||
"type": "centerIcon",
|
||||
"centerIcon": {
|
||||
"rIcon": 50,
|
||||
"opacity": 0.8,
|
||||
"name": "centericon.svg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"divisions": 2,
|
||||
"rInner": 60,
|
||||
"rOuter": 100,
|
||||
"startAngle": 0,
|
||||
"sectors": [
|
||||
{
|
||||
"content": "阴",
|
||||
"colorRef": "黑"
|
||||
},
|
||||
{
|
||||
"content": "阳",
|
||||
"colorRef": "白"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"divisions": 8,
|
||||
"rInner": 120,
|
||||
"rOuter": 160,
|
||||
"startAngle": 0,
|
||||
"colorRef": "水",
|
||||
"sectors": [
|
||||
{
|
||||
"content": "乾",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "兑",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "离",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "震",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "巽",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "坎",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "艮",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "坤",
|
||||
"innerFill": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"divisions": 12,
|
||||
"rInner": 160,
|
||||
"rOuter": 200,
|
||||
"startAngle": 0,
|
||||
"colorRef": "土",
|
||||
"num": 3,
|
||||
"interval": 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
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"divisions": 24,
|
||||
"rInner": 200,
|
||||
"rOuter": 240,
|
||||
"startAngle": 0,
|
||||
"sectors": [
|
||||
{
|
||||
"content": "甲乙|子|丙丁",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "丑"
|
||||
},
|
||||
{
|
||||
"content": "戊己|寅|庚辛",
|
||||
"colorRef": "土",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "卯"
|
||||
},
|
||||
{
|
||||
"content": "壬癸|辰|甲乙",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "巳"
|
||||
},
|
||||
{
|
||||
"content": "丙丁|午|戊己",
|
||||
"colorRef": "火",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "未"
|
||||
},
|
||||
{
|
||||
"content": "庚辛|申|壬癸",
|
||||
"colorRef": "金",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "酉"
|
||||
},
|
||||
{
|
||||
"content": "甲乙|戌|丙丁",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "亥"
|
||||
},
|
||||
{
|
||||
"content": "戊己|子|庚辛"
|
||||
},
|
||||
{
|
||||
"content": "丑"
|
||||
},
|
||||
{
|
||||
"content": "壬癸|寅|甲乙"
|
||||
},
|
||||
{
|
||||
"content": "卯"
|
||||
},
|
||||
{
|
||||
"content": "丙丁|辰|戊己"
|
||||
},
|
||||
{
|
||||
"content": "巳"
|
||||
},
|
||||
{
|
||||
"content": "庚辛|午|壬癸"
|
||||
},
|
||||
{
|
||||
"content": "未"
|
||||
},
|
||||
{
|
||||
"content": "甲乙|申|丙丁"
|
||||
},
|
||||
{
|
||||
"content": "酉"
|
||||
},
|
||||
{
|
||||
"content": "戊己|戌|庚辛"
|
||||
},
|
||||
{
|
||||
"content": "亥"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"divisions": 16,
|
||||
"rInner": 250,
|
||||
"rOuter": 270,
|
||||
"startAngle": 0,
|
||||
"sectors": [
|
||||
{
|
||||
"content": "甲乙|丙丁|戊己|庚辛",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "壬癸|甲乙|丙丁|戊己",
|
||||
"colorRef": "土",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "庚辛|壬癸|甲乙|丙丁",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "戊己|庚辛|壬癸|甲乙",
|
||||
"colorRef": "火",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "丙丁|戊己|庚辛|壬癸",
|
||||
"colorRef": "金",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "子丑|寅卯|辰巳|午未",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "申酉|戌亥|子丑|寅卯",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "辰巳|午未|申酉|戌亥",
|
||||
"colorRef": "水",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "甲乙|丙丁|戊己|庚辛",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "壬癸|甲乙|丙丁|戊己",
|
||||
"colorRef": "土",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "庚辛|壬癸|甲乙|丙丁",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "戊己|庚辛|壬癸|甲乙",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "丙丁|戊己|庚辛|壬癸",
|
||||
"colorRef": "火",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "子丑|寅卯|辰巳|午未",
|
||||
"colorRef": "金",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "申酉|戌亥|子丑|寅卯",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "辰巳|午未|申酉|戌亥",
|
||||
"colorRef": "水",
|
||||
"innerFill": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"divisions": 120,
|
||||
"rInner": 300,
|
||||
"rOuter": 310,
|
||||
"startAngle": -4.5,
|
||||
"innerFill": 0,
|
||||
"colorRef": "火",
|
||||
"num": 3,
|
||||
"interval": 2,
|
||||
"groupSplit": false
|
||||
},
|
||||
{
|
||||
"type": "degreeRing",
|
||||
"rInner": 350,
|
||||
"rOuter": 380,
|
||||
"showDegree": 1,
|
||||
"mode": "both",
|
||||
"opacity": 1,
|
||||
"tickLength": 6,
|
||||
"tickLengthStep": 2,
|
||||
"majorTick": 10,
|
||||
"minorTick": 5,
|
||||
"microTick": 1,
|
||||
"tickColor": "#000000",
|
||||
"ringColor": "#000000"
|
||||
}
|
||||
]
|
||||
}
|
||||
3767
public/fengshui.json
Normal file
3767
public/fengshui.json
Normal file
File diff suppressed because it is too large
Load Diff
2600
public/fengshui.json.conf
Normal file
2600
public/fengshui.json.conf
Normal file
File diff suppressed because one or more lines are too long
3766
public/fengshui10.json
Normal file
3766
public/fengshui10.json
Normal file
File diff suppressed because it is too large
Load Diff
3768
public/fengshui2.json
Normal file
3768
public/fengshui2.json
Normal file
File diff suppressed because it is too large
Load Diff
3768
public/fengshui3.json
Normal file
3768
public/fengshui3.json
Normal file
File diff suppressed because it is too large
Load Diff
3768
public/fengshui4.json
Normal file
3768
public/fengshui4.json
Normal file
File diff suppressed because it is too large
Load Diff
3768
public/fengshui5.json
Normal file
3768
public/fengshui5.json
Normal file
File diff suppressed because it is too large
Load Diff
3768
public/fengshui6.json
Normal file
3768
public/fengshui6.json
Normal file
File diff suppressed because it is too large
Load Diff
3768
public/fengshui7.json
Normal file
3768
public/fengshui7.json
Normal file
File diff suppressed because it is too large
Load Diff
3768
public/fengshui8.json
Normal file
3768
public/fengshui8.json
Normal file
File diff suppressed because it is too large
Load Diff
3768
public/fengshui9.json
Normal file
3768
public/fengshui9.json
Normal file
File diff suppressed because it is too large
Load Diff
62
public/luopan-configs.json
Normal file
62
public/luopan-configs.json
Normal file
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"default": "demo.json",
|
||||
"items": [
|
||||
{
|
||||
"name": "样式测试1",
|
||||
"path": "/demo.json"
|
||||
},
|
||||
{
|
||||
"name": "样式测试2",
|
||||
"path": "/demo2.json"
|
||||
},
|
||||
{
|
||||
"name": "样式测试3",
|
||||
"path": "/demo3.json"
|
||||
},
|
||||
{
|
||||
"name": "入门罗盘",
|
||||
"path": "/rumen.json"
|
||||
},
|
||||
{
|
||||
"name": "fengshui",
|
||||
"path": "/fengshui.json"
|
||||
},
|
||||
{
|
||||
"name": "fengshui2",
|
||||
"path": "/fengshui2.json"
|
||||
},
|
||||
{
|
||||
"name": "fengshui3",
|
||||
"path": "/fengshui3.json"
|
||||
},
|
||||
{
|
||||
"name": "fengshui4",
|
||||
"path": "/fengshui4.json"
|
||||
},
|
||||
{
|
||||
"name": "fengshui5",
|
||||
"path": "/fengshui5.json"
|
||||
},
|
||||
{
|
||||
"name": "fengshui6",
|
||||
"path": "/fengshui6.json"
|
||||
},
|
||||
{
|
||||
"name": "fengshui7",
|
||||
"path": "/fengshui7.json"
|
||||
},
|
||||
{
|
||||
"name": "fengshui8",
|
||||
"path": "/fengshui8.json"
|
||||
},
|
||||
{
|
||||
"name": "fengshui9",
|
||||
"path": "/fengshui9.json"
|
||||
},
|
||||
{
|
||||
"name": "fengshui10",
|
||||
"path": "/fengshui10.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
1555
public/luopanxiangjie.json.conf
Normal file
1555
public/luopanxiangjie.json.conf
Normal file
File diff suppressed because it is too large
Load Diff
349
public/rumen.json
Normal file
349
public/rumen.json
Normal file
@@ -0,0 +1,349 @@
|
||||
{
|
||||
"name": "rumen",
|
||||
"description": "luopan rumen config",
|
||||
"background": "金",
|
||||
"strokeWidth": 1,
|
||||
"strokeOpacity": 1,
|
||||
"strokeColor": "黑",
|
||||
"insetDistance": 1,
|
||||
"themeRef": "五行弱",
|
||||
"layers": [
|
||||
{
|
||||
"type": "centerIcon",
|
||||
"centerIcon": {
|
||||
"rIcon": 50,
|
||||
"opacity": 0.8,
|
||||
"name": "centericon.svg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"divisions": 2,
|
||||
"rInner": 60,
|
||||
"rOuter": 100,
|
||||
"startAngle": 0,
|
||||
"sectors": [
|
||||
{
|
||||
"content": "阴",
|
||||
"colorRef": "黑"
|
||||
},
|
||||
{
|
||||
"content": "阳",
|
||||
"colorRef": "白"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"divisions": 8,
|
||||
"rInner": 120,
|
||||
"rOuter": 160,
|
||||
"startAngle": 0,
|
||||
"sectors": [
|
||||
{
|
||||
"content": "乾",
|
||||
"colorRef": "火",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "兑",
|
||||
"colorRef": "冷",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "离",
|
||||
"colorRef": "火",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "震",
|
||||
"colorRef": "木",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "巽",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "坎",
|
||||
"colorRef": "冷",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "艮",
|
||||
"colorRef": "强",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "坤",
|
||||
"colorRef": "土",
|
||||
"innerFill": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"divisions": 12,
|
||||
"rInner": 160,
|
||||
"rOuter": 200,
|
||||
"startAngle": 0,
|
||||
"colorRef": "金",
|
||||
"num": 3,
|
||||
"interval": 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
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"divisions": 24,
|
||||
"rInner": 200,
|
||||
"rOuter": 240,
|
||||
"startAngle": 0,
|
||||
"colorRef": "金",
|
||||
"num": 2,
|
||||
"interval": 1,
|
||||
"sectors": [
|
||||
{
|
||||
"content": "甲乙|子|丙丁",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "丑"
|
||||
},
|
||||
{
|
||||
"content": "戊己|寅|庚辛",
|
||||
"colorRef": "土",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "卯"
|
||||
},
|
||||
{
|
||||
"content": "壬癸|辰|甲乙",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "巳"
|
||||
},
|
||||
{
|
||||
"content": "丙丁|午|戊己",
|
||||
"colorRef": "火",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "未"
|
||||
},
|
||||
{
|
||||
"content": "庚辛|申|壬癸",
|
||||
"colorRef": "金",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "酉"
|
||||
},
|
||||
{
|
||||
"content": "甲乙|戌|丙丁",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "亥"
|
||||
},
|
||||
{
|
||||
"content": "戊己|子|庚辛"
|
||||
},
|
||||
{
|
||||
"content": "丑"
|
||||
},
|
||||
{
|
||||
"content": "壬癸|寅|甲乙"
|
||||
},
|
||||
{
|
||||
"content": "卯"
|
||||
},
|
||||
{
|
||||
"content": "丙丁|辰|戊己"
|
||||
},
|
||||
{
|
||||
"content": "巳"
|
||||
},
|
||||
{
|
||||
"content": "庚辛|午|壬癸"
|
||||
},
|
||||
{
|
||||
"content": "未"
|
||||
},
|
||||
{
|
||||
"content": "甲乙|申|丙丁"
|
||||
},
|
||||
{
|
||||
"content": "酉"
|
||||
},
|
||||
{
|
||||
"content": "戊己|戌|庚辛"
|
||||
},
|
||||
{
|
||||
"content": "亥"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"divisions": 16,
|
||||
"rInner": 250,
|
||||
"rOuter": 270,
|
||||
"startAngle": 0,
|
||||
"sectors": [
|
||||
{
|
||||
"content": "甲乙|丙丁|戊己|庚辛",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "壬癸|甲乙|丙丁|戊己",
|
||||
"colorRef": "土",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "庚辛|壬癸|甲乙|丙丁",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "戊己|庚辛|壬癸|甲乙",
|
||||
"colorRef": "火",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "丙丁|戊己|庚辛|壬癸",
|
||||
"colorRef": "金",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "子丑|寅卯|辰巳|午未",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "申酉|戌亥|子丑|寅卯",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "辰巳|午未|申酉|戌亥",
|
||||
"colorRef": "水",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "甲乙|丙丁|戊己|庚辛",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "壬癸|甲乙|丙丁|戊己",
|
||||
"colorRef": "土",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "庚辛|壬癸|甲乙|丙丁",
|
||||
"colorRef": "木",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "戊己|庚辛|壬癸|甲乙",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "丙丁|戊己|庚辛|壬癸",
|
||||
"colorRef": "火",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "子丑|寅卯|辰巳|午未",
|
||||
"colorRef": "金",
|
||||
"innerFill": 0
|
||||
},
|
||||
{
|
||||
"content": "申酉|戌亥|子丑|寅卯",
|
||||
"innerFill": 1
|
||||
},
|
||||
{
|
||||
"content": "辰巳|午未|申酉|戌亥",
|
||||
"colorRef": "水",
|
||||
"innerFill": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"divisions": 120,
|
||||
"rInner": 300,
|
||||
"rOuter": 310,
|
||||
"startAngle": -4.5,
|
||||
"innerFill": 0,
|
||||
"colorRef": "火",
|
||||
"num": 3,
|
||||
"interval": 2,
|
||||
"groupSplit": false
|
||||
},
|
||||
{
|
||||
"type": "degreeRing",
|
||||
"rInner": 350,
|
||||
"rOuter": 380,
|
||||
"showDegree": 1,
|
||||
"mode": "both",
|
||||
"opacity": 1,
|
||||
"tickLength": 6,
|
||||
"tickLengthStep": 2,
|
||||
"majorTick": 10,
|
||||
"minorTick": 5,
|
||||
"microTick": 1,
|
||||
"tickColor": "#000000",
|
||||
"ringColor": "#000000"
|
||||
}
|
||||
]
|
||||
}
|
||||
174
public/themes.json
Normal file
174
public/themes.json
Normal file
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"default": "五行强",
|
||||
"items": [
|
||||
{
|
||||
"name": "五行强",
|
||||
"colorPalettes": {
|
||||
"黑": "#000000",
|
||||
"灰": "#757575",
|
||||
"白": "#ffffff",
|
||||
"木": "#43A047",
|
||||
"火": "#E53935",
|
||||
"土": "#8D6E63",
|
||||
"金": "#D4AF37",
|
||||
"水": "#0288D1",
|
||||
"热": "#FF8F00",
|
||||
"冷": "#1976D2",
|
||||
"强": "#D32F2F",
|
||||
"软": "#FFE0B2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "五行弱",
|
||||
"colorPalettes": {
|
||||
"黑": "#000000",
|
||||
"灰": "#DADADA",
|
||||
"白": "#ffffff",
|
||||
"木": "#2A6B2D",
|
||||
"火": "#C44846",
|
||||
"土": "#A57563",
|
||||
"金": "#E7D238",
|
||||
"水": "#1E7BAC",
|
||||
"热": "#FF8F00",
|
||||
"冷": "#1976D2",
|
||||
"强": "#FF0000",
|
||||
"弱": "#EFD272"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "晨曦",
|
||||
"colorPalettes": {
|
||||
"霞光": "#FFB997",
|
||||
"暖金": "#FFC857",
|
||||
"薄雾": "#E6EFF6",
|
||||
"嫩绿": "#A8E6CE",
|
||||
"朝蓝": "#7AC7E3",
|
||||
"珊红": "#FF6B6B",
|
||||
"砂色": "#D9B99B",
|
||||
"云白": "#FFFFFF",
|
||||
"影灰": "#7D7F87",
|
||||
"墨蓝": "#2A3D66"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "暮色",
|
||||
"colorPalettes": {
|
||||
"暮紫": "#6C5B7B",
|
||||
"深蓝": "#283149",
|
||||
"暮橙": "#FF914D",
|
||||
"黯灰": "#5D5D66",
|
||||
"暗玉": "#2E8B7C",
|
||||
"烟蓝": "#4B6F86",
|
||||
"月白": "#F2F6F8",
|
||||
"铜黄": "#C08F35",
|
||||
"绛红": "#A23E48",
|
||||
"夜黑": "#0B0F1A"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "海风",
|
||||
"colorPalettes": {
|
||||
"海蓝": "#0077B6",
|
||||
"浅滩": "#EAF6F6",
|
||||
"浪白": "#F7FCFF",
|
||||
"蔚蓝": "#00B4D8",
|
||||
"青绿": "#2EC4B6",
|
||||
"碧玉": "#118AB2",
|
||||
"珊粉": "#FF7A7A",
|
||||
"深海": "#023E8A",
|
||||
"泡沫": "#CFF7F3",
|
||||
"夕珊": "#FFB4A2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "砂岩",
|
||||
"colorPalettes": {
|
||||
"砂黄": "#DDB892",
|
||||
"土褐": "#A67C52",
|
||||
"岩灰": "#8A8776",
|
||||
"日黄": "#FFDA77",
|
||||
"褐红": "#A65E3B",
|
||||
"朽木": "#C7B299",
|
||||
"石白": "#F5F3EE",
|
||||
"暮砂": "#BFAE9D",
|
||||
"土灰": "#9E8F80",
|
||||
"暗褐": "#5C3A21"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "森林",
|
||||
"colorPalettes": {
|
||||
"树绿": "#2F7A1F",
|
||||
"苔绿": "#69995B",
|
||||
"深绿": "#1B4636",
|
||||
"叶黄": "#C8D44B",
|
||||
"泥褐": "#7C5A3A",
|
||||
"树皮": "#6A4C3B",
|
||||
"莹绿": "#9FD89B",
|
||||
"林影": "#254117",
|
||||
"嫩叶": "#B7E4A6",
|
||||
"藤蔓": "#3B6B35"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "霓虹",
|
||||
"colorPalettes": {
|
||||
"电青": "#00F5D4",
|
||||
"霓粉": "#FF6AC1",
|
||||
"紫光": "#9D4EDD",
|
||||
"亮黄": "#FFD60A",
|
||||
"霓橙": "#FF7A00",
|
||||
"洋红": "#FF007F",
|
||||
"亮蓝": "#00A3FF",
|
||||
"霓绿": "#41F582",
|
||||
"黑底": "#0A0A0A",
|
||||
"白晕": "#F8F8FF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "芙蓉",
|
||||
"colorPalettes": {
|
||||
"芙粉": "#FADCD9",
|
||||
"荷绿": "#9BD7C6",
|
||||
"莲白": "#FFF7F3",
|
||||
"柔紫": "#E9D6FF",
|
||||
"粉橙": "#FFD1BA",
|
||||
"浅灰": "#E6E6E6",
|
||||
"香黄": "#FFE9A8",
|
||||
"薄荷": "#BCEBCB",
|
||||
"桃红": "#FF94A6",
|
||||
"雾蓝": "#DDECF7"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "墨韵",
|
||||
"colorPalettes": {
|
||||
"墨黑": "#0B0B0B",
|
||||
"浓灰": "#4A4A4A",
|
||||
"烟白": "#F5F5F5",
|
||||
"石墨": "#2E2E2E",
|
||||
"青黛": "#1F6F8B",
|
||||
"皓白": "#FFFFFF",
|
||||
"墨蓝": "#14213D",
|
||||
"暗灰": "#6B6B6B",
|
||||
"笔褐": "#5B4B3A",
|
||||
"玄青": "#0F4C5C"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "灰阶",
|
||||
"colorPalettes": {
|
||||
"墨灰": "#0B0B0B",
|
||||
"深灰": "#2F2F2F",
|
||||
"石灰": "#595959",
|
||||
"烟灰": "#808080",
|
||||
"中灰": "#A0A0A0",
|
||||
"银灰": "#C0C0C0",
|
||||
"雾灰": "#D9D9D9",
|
||||
"亮灰": "#EAEAEA",
|
||||
"浅灰": "#F5F5F5",
|
||||
"乳白": "#FFFFFF"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
159
refactor-plan.md
159
refactor-plan.md
@@ -1,5 +1,20 @@
|
||||
# 罗盘项目重构方案
|
||||
|
||||
## 0. 重构方案提要(先看这一段)
|
||||
|
||||
**目标:** 从“硬编码示例”升级到“配置驱动”的罗盘渲染系统,并为大罗盘性能优化留出清晰路径。
|
||||
**策略:** 先重构数据解析与渲染结构,再完善主题/多文本/刻度/中心图标,最后补齐测试与性能。
|
||||
**落地路径:**
|
||||
1) 解析层与类型统一(配置校验、主题、层级半径推导)。
|
||||
2) 扇区构建器与颜色引擎(含规律填色、groupSplit)。
|
||||
3) UI 适配(Luopan.vue、useLuopan 重构)。
|
||||
4) 测试与性能优化(含大罗盘拖拽优化计划 10.4)。
|
||||
|
||||
**预期产出:**
|
||||
- 新增/替换若干模块(configParser / colorResolver / sectorBuilder / degreeRing / centerIcon)。
|
||||
- `public/*.json` 配置即可新增罗盘,无需改代码。
|
||||
- 统一主题与颜色规则,支持复杂布局与 SVG 图标。
|
||||
|
||||
---
|
||||
|
||||
## 一、项目现状分析
|
||||
@@ -17,14 +32,107 @@
|
||||
**核心变化:**
|
||||
1. **配置驱动**:从 JSON 配置文件完全定义罗盘结构
|
||||
2. **新增罗盘零改码**:新增罗盘只需在 `public/` 下增加 JSON 配置文件,无需修改代码
|
||||
3. **复杂着色规则**:支持三级着色优先级(全局 → 层级规律填色 → 扇区独立)
|
||||
4. **多文本单元**:扇区内容支持 `|` 分隔的多个文本单元,角度智能分配
|
||||
5. **SVG 图标支持**:扇区内容可以是 SVG 文件
|
||||
6. **中心图标**:作为 layer 类型,支持可旋转的中心 SVG 图标
|
||||
7. **360度刻度环**:作为 layer 类型,支持多种刻度模式的度数环
|
||||
8. **命名配色方案**:通过 theme.colorPalettes 定义可复用颜色
|
||||
9. **规律填色机制**:通过 num + interval 实现周期性着色
|
||||
10. **同组分割线控制**:groupSplit 参数控制组内分割线显示
|
||||
3. **配置下拉切换**:下拉菜单可选择 `public/` 下的配置(如 `demo.json`、`demo2.json`)切换罗盘
|
||||
4. **复杂着色规则**:支持三级着色优先级(全局 → 层级规律填色 → 扇区独立)
|
||||
5. **多文本单元**:扇区内容支持 `|` 分隔的多个文本单元,角度智能分配
|
||||
6. **多文本比例可配**:在每个 layer 中可配置多文本比例(用于 `|` 分隔内容的角度分配)
|
||||
7. **SVG 图标支持**:扇区内容可以是 SVG 文件
|
||||
8. **中心图标**:作为 layer 类型,支持可旋转的中心 SVG 图标
|
||||
9. **360度刻度环**:作为 layer 类型,支持多种刻度模式的度数环
|
||||
10. **命名配色方案**:通过 theme.colorPalettes 定义可复用颜色
|
||||
11. **规律填色机制**:通过 num + interval 实现周期性着色
|
||||
12. **同组分割线控制**:groupSplit 参数控制组内分割线显示
|
||||
13. **外半径兜底**:默认使用 layers 最大 rOuter,outerRadius 仅作为无层配置时的兜底
|
||||
|
||||
### 1.3 配置清单与切换机制(新增)
|
||||
|
||||
**问题:** 运行时无法直接读取 `public/` 目录文件列表,因此下拉菜单需要“配置清单”或“构建期生成清单”。
|
||||
|
||||
**推荐方案(满足“新增罗盘只需增加 JSON 文件”):**
|
||||
1. **清单文件:** 构建期生成 `public/luopan-configs.json`,包含可选配置列表与默认项。
|
||||
2. **生成逻辑:** 扫描 `public/` 下的 `*.json`,排除 `*.json.conf` 和 `luopan-configs.json` 本身。
|
||||
3. **示例格式:**
|
||||
```json
|
||||
{
|
||||
"default": "demo.json",
|
||||
"items": [
|
||||
{ "name": "示例罗盘一", "path": "/demo.json" },
|
||||
{ "name": "示例罗盘二", "path": "/demo2.json" }
|
||||
]
|
||||
}
|
||||
```
|
||||
4. **前端加载:** `Luopan.vue` 启动时拉取该清单,渲染下拉选项。
|
||||
5. **切换逻辑:** 选择项变化时更新 `configPath` 并触发重新加载;同步更新 URL `?config=xxx.json` 便于分享。
|
||||
6. **新增配置:** 仅需在 `public/` 放入新的 `*.json`,清单会在构建/开发启动时自动更新。
|
||||
|
||||
**备用方案(不启用生成脚本):** 手动维护 `public/luopan-configs.json`,仍然无需改代码,但需追加清单条目。
|
||||
|
||||
### 1.4 主题抽离与引用(新增)
|
||||
|
||||
**目标:** 罗盘配置通过 `themeRef` 引用统一的 `themes.json`,不再内嵌 theme。
|
||||
|
||||
**主题文件结构(public/themes.json):**
|
||||
```json
|
||||
{
|
||||
"default": "五行",
|
||||
"items": [
|
||||
{
|
||||
"name": "五行",
|
||||
"colorPalettes": {
|
||||
"黑": "#000000",
|
||||
"灰": "#757575"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**罗盘 JSON 使用方式:**
|
||||
```json
|
||||
{
|
||||
"name": "demo",
|
||||
"background": "白",
|
||||
"themeRef": "五行",
|
||||
"layers": []
|
||||
}
|
||||
```
|
||||
|
||||
**解析规则:**
|
||||
1. 如果配置包含 `themeRef`,优先使用对应主题。
|
||||
2. 若未指定 `themeRef`,使用 `themes.json.default`。
|
||||
3. 若 `themeRef` 或 `default` 不存在:抛出配置错误(或回退到空主题,需在实现中约定)。
|
||||
|
||||
**实现改动点:**
|
||||
1. `types.ts`:
|
||||
- `LuopanConfig.theme` 变为可选
|
||||
- 新增 `themeRef?: string`
|
||||
2. `configParser.ts`:
|
||||
- 支持解析 `themeRef`
|
||||
- 当 `theme` 缺失时暂不报错,由上层注入主题
|
||||
3. `useLuopan.ts`:
|
||||
- 读取 `public/themes.json`
|
||||
- 根据 `themeRef/default` 注入主题到配置
|
||||
- 处理错误与回退
|
||||
4. 示例与文档:
|
||||
- `public/demo*.json` 替换为 `themeRef`
|
||||
- 新增 `public/themes.json`
|
||||
- 更新 `demo.json.conf` 说明
|
||||
|
||||
### 1.5 layerHeight 参数规则(新增)
|
||||
|
||||
**目标:** 支持在 layer 中以 `layerHeight` 定义厚度,并可自动推导 `rInner` / `rOuter`。
|
||||
|
||||
**规则:**
|
||||
1. 若 layer 同时指定 `rInner` 和 `rOuter`,则忽略 `layerHeight`。
|
||||
2. 若 layer 仅指定 `layerHeight`,且没有 `rInner` / `rOuter`:
|
||||
- 使用上一层的 `rOuter` 作为当前 `rInner`
|
||||
- 当前 `rOuter = 上一层 rOuter + layerHeight`
|
||||
3. 若 layer 未提供任何半径信息(`rInner` / `rOuter` / `layerHeight`),则视为配置错误(或按实现约定抛错/警告)。
|
||||
|
||||
**实现改动点:**
|
||||
1. `types.ts`:为 sector layer 增加可选字段 `layerHeight?: number`
|
||||
2. `configParser.ts`:新增“层半径归一化”步骤,按层顺序推导半径
|
||||
3. 文档/示例:补充 `layerHeight` 的说明与示例用法
|
||||
|
||||
---
|
||||
|
||||
@@ -147,15 +255,17 @@ function applyPatternColoring(
|
||||
}
|
||||
```
|
||||
|
||||
**多文本单元角度分配:**
|
||||
**多文本单元角度分配(支持 unitRatios):**
|
||||
```typescript
|
||||
function splitMultiTextUnits(
|
||||
content: string,
|
||||
aStart: number,
|
||||
aEnd: number
|
||||
aEnd: number,
|
||||
unitRatios?: number[]
|
||||
): TextUnit[] {
|
||||
const units = content.split('|');
|
||||
const ratios = getLayoutRatio(units.length); // 从 constants.ts
|
||||
const ratios = normalizeRatios(unitRatios, units.length)
|
||||
?? getLayoutRatio(units.length); // 从 constants.ts
|
||||
|
||||
const totalAngle = aEnd - aStart;
|
||||
const textUnits: TextUnit[] = [];
|
||||
@@ -173,6 +283,27 @@ function splitMultiTextUnits(
|
||||
|
||||
return textUnits;
|
||||
}
|
||||
|
||||
function normalizeRatios(
|
||||
ratios: number[] | undefined,
|
||||
count: number
|
||||
): number[] | null {
|
||||
if (!ratios || ratios.length !== count) return null;
|
||||
if (ratios.some((value) => typeof value !== 'number' || value <= 0)) return null;
|
||||
const sum = ratios.reduce((acc, value) => acc + value, 0);
|
||||
if (sum <= 0) return null;
|
||||
return ratios.map((value) => value / sum);
|
||||
}
|
||||
```
|
||||
|
||||
**示例(layer 级别配置比例):**
|
||||
```json
|
||||
{
|
||||
"divisions": 24,
|
||||
"rInner": 200,
|
||||
"rOuter": 240,
|
||||
"unitRatios": [0.25, 0.5, 0.25]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
@@ -192,6 +323,7 @@ export interface LuopanConfig {
|
||||
strokeWidth?: number; // 扇区边界线宽度
|
||||
strokeColor?: string; // 扇区边界线颜色(支持主题色)
|
||||
strokeOpacity?: number; // 扇区边界线透明度
|
||||
outerRadius?: number; // 可选兜底外半径,默认使用 layers 最大 rOuter
|
||||
theme: ThemeConfig;
|
||||
layers: LayerConfig[]; // 扇区层 + 中心图标层 + 刻度环层
|
||||
}
|
||||
@@ -241,6 +373,7 @@ export interface SectorLayerConfig {
|
||||
startAngle?: number;
|
||||
colorRef?: string;
|
||||
innerFill?: 0 | 1;
|
||||
unitRatios?: number[]; // 多文本单元比例(对应 content 用 "|" 分隔)
|
||||
num?: number;
|
||||
interval?: number;
|
||||
groupSplit?: boolean;
|
||||
@@ -427,6 +560,7 @@ export class ColorResolver {
|
||||
- splitMultiTextUnits() 函数
|
||||
- 角度分配逻辑
|
||||
- SVG 文件检测
|
||||
- 支持 layer.unitRatios 覆盖默认比例
|
||||
2. ✅ 更新 `utils.ts`:
|
||||
- 适配多文本单元的路径生成
|
||||
- 字体大小计算调整
|
||||
@@ -672,7 +806,7 @@ export function buildDegreeRing(config: DegreeRingConfig): {
|
||||
- 调用各个解析器和构建器
|
||||
- 返回完整渲染数据
|
||||
2. ✅ 更新 `Luopan.vue`:
|
||||
- 移除示例选择器
|
||||
- 使用配置下拉替换示例选择器(可切换 `public/*.json`)
|
||||
- 添加配置加载界面
|
||||
- 渲染多文本单元
|
||||
- 渲染刻度环
|
||||
@@ -1160,6 +1294,7 @@ describe('完整渲染流程', () => {
|
||||
1. **性能优化**:
|
||||
- 虚拟滚动(大量扇区)
|
||||
- Web Worker 解析配置
|
||||
- 配置加载缓存(页面刷新复用 JSON 与渲染结果,低优先级,可选)
|
||||
- Canvas 渲染模式(可选)
|
||||
|
||||
2. **功能扩展**:
|
||||
|
||||
149
src/Luopan.vue
149
src/Luopan.vue
@@ -2,6 +2,19 @@
|
||||
<div class="luopan-wrap">
|
||||
<!-- 工具栏 -->
|
||||
<div class="toolbar">
|
||||
<label class="toggle" v-if="configOptions.length">
|
||||
<span>罗盘配置</span>
|
||||
<select v-model="selectedConfigPath" :disabled="Boolean(props.config)">
|
||||
<option
|
||||
v-for="item in configOptions"
|
||||
:key="item.path"
|
||||
:value="item.path"
|
||||
>
|
||||
{{ item.name }}
|
||||
</option>
|
||||
</select>
|
||||
</label>
|
||||
|
||||
<label class="toggle">
|
||||
<input type="checkbox" v-model="showGuides" />
|
||||
显示辅助线
|
||||
@@ -29,6 +42,7 @@
|
||||
<div
|
||||
v-else
|
||||
class="svg-container"
|
||||
:class="{ 'is-dragging': isDragging }"
|
||||
@wheel.prevent="handleWheel"
|
||||
@mousedown="handleMouseDown"
|
||||
@mousemove="handleMouseMove"
|
||||
@@ -40,11 +54,8 @@
|
||||
:height="size"
|
||||
:viewBox="`${viewBoxMin} ${viewBoxMin} ${viewBoxSize} ${viewBoxSize}`"
|
||||
class="svg"
|
||||
:style="{
|
||||
transform: `scale(${scale}) translate(${panX}px, ${panY}px)`,
|
||||
cursor: isDragging ? 'grabbing' : 'grab'
|
||||
}"
|
||||
>
|
||||
<g ref="viewport" class="viewport">
|
||||
<!-- 背景 -->
|
||||
<circle
|
||||
:r="outerMost || viewBoxSize / 2"
|
||||
@@ -69,7 +80,7 @@
|
||||
v-if="s.innerFillPath"
|
||||
:d="s.innerFillPath"
|
||||
:fill="s.innerFillColor"
|
||||
fill-opacity="0.6"
|
||||
fill-opacity="1"
|
||||
stroke="none"
|
||||
/>
|
||||
</template>
|
||||
@@ -232,6 +243,14 @@
|
||||
fill="none"
|
||||
/>
|
||||
</defs>
|
||||
<circle
|
||||
v-if="degreeRing.background"
|
||||
:r="(degreeRing.ring.rInner + degreeRing.ring.rOuter) / 2"
|
||||
fill="none"
|
||||
:stroke="degreeRing.background.color"
|
||||
:stroke-opacity="degreeRing.background.opacity"
|
||||
:stroke-width="degreeRing.ring.rOuter - degreeRing.ring.rInner"
|
||||
/>
|
||||
<circle
|
||||
:r="degreeRing.ring.rOuter"
|
||||
fill="none"
|
||||
@@ -286,6 +305,7 @@
|
||||
:transform="`rotate(${centerIcon.rotation})`"
|
||||
/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
@@ -298,10 +318,10 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, ref } from 'vue';
|
||||
import { computed, onMounted, ref, watch } from 'vue';
|
||||
import { useLuopan } from './composables/useLuopan';
|
||||
import { DEFAULT_SIZE, DEFAULT_TEXT_RADIAL_POSITION, SECTOR_STROKE_WIDTH } from './constants';
|
||||
import type { LuopanConfig, Sector, TextRadialPosition, TextUnit } from './types';
|
||||
import type { LuopanConfigInput, Sector, TextRadialPosition, TextUnit } from './types';
|
||||
import { annularSectorCentroid } from './utils';
|
||||
|
||||
/**
|
||||
@@ -310,7 +330,7 @@ import { annularSectorCentroid } from './utils';
|
||||
interface Props {
|
||||
size?: number;
|
||||
configPath?: string;
|
||||
config?: LuopanConfig;
|
||||
config?: LuopanConfigInput;
|
||||
}
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
@@ -321,13 +341,14 @@ const props = withDefaults(defineProps<Props>(), {
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
const showGuides = ref(true);
|
||||
const showGuides = ref(false);
|
||||
const textRadialPosition = ref<TextRadialPosition>(DEFAULT_TEXT_RADIAL_POSITION);
|
||||
|
||||
// 缩放和平移状态
|
||||
const scale = ref(1);
|
||||
const panX = ref(0);
|
||||
const panY = ref(0);
|
||||
const viewport = ref<SVGGElement | null>(null);
|
||||
let nextScale = scale.value;
|
||||
let nextPanX = panX.value;
|
||||
let nextPanY = panY.value;
|
||||
@@ -338,13 +359,84 @@ const dragStartY = ref(0);
|
||||
const dragStartPanX = ref(0);
|
||||
const dragStartPanY = ref(0);
|
||||
|
||||
const resolveConfigPath = () => {
|
||||
if (typeof window === 'undefined') return props.configPath;
|
||||
interface ConfigListItem {
|
||||
name: string;
|
||||
path: string;
|
||||
}
|
||||
|
||||
interface ConfigList {
|
||||
default?: string;
|
||||
items?: ConfigListItem[];
|
||||
}
|
||||
|
||||
const normalizeConfigPath = (value: string) =>
|
||||
value.startsWith('/') ? value : `/${value}`;
|
||||
|
||||
const resolveQueryConfig = () => {
|
||||
if (typeof window === 'undefined') return undefined;
|
||||
const param = new URLSearchParams(window.location.search).get('config');
|
||||
return param ? `/${param}` : props.configPath;
|
||||
return param ? normalizeConfigPath(param) : undefined;
|
||||
};
|
||||
|
||||
const configInput = props.config ?? resolveConfigPath();
|
||||
const resolveConfigPath = () => resolveQueryConfig() ?? props.configPath;
|
||||
|
||||
const configOptions = ref<ConfigListItem[]>([]);
|
||||
const selectedConfigPath = ref(resolveConfigPath());
|
||||
|
||||
const updateUrlConfigParam = (path: string) => {
|
||||
if (props.config) return;
|
||||
if (typeof window === 'undefined') return;
|
||||
const url = new URL(window.location.href);
|
||||
url.searchParams.set('config', path.replace(/^\//, ''));
|
||||
window.history.replaceState({}, '', url.toString());
|
||||
};
|
||||
|
||||
const applySelectedConfig = (path: string) => {
|
||||
const normalized = normalizeConfigPath(path);
|
||||
selectedConfigPath.value = normalized;
|
||||
};
|
||||
|
||||
const loadConfigList = async () => {
|
||||
if (props.config) return;
|
||||
try {
|
||||
const response = await fetch('/luopan-configs.json', { cache: 'no-store' });
|
||||
if (!response.ok) return;
|
||||
const configList = (await response.json()) as ConfigList;
|
||||
const items = Array.isArray(configList.items) ? configList.items : [];
|
||||
const normalizedItems = items
|
||||
.filter((item) => item && typeof item.path === 'string')
|
||||
.map((item) => ({
|
||||
name: item.name ?? item.path.replace(/^\//, ''),
|
||||
path: normalizeConfigPath(item.path),
|
||||
}));
|
||||
|
||||
configOptions.value = normalizedItems;
|
||||
|
||||
const queryPath = resolveQueryConfig();
|
||||
const availablePaths = new Set(normalizedItems.map((item) => item.path));
|
||||
if (queryPath && availablePaths.has(queryPath)) {
|
||||
applySelectedConfig(queryPath);
|
||||
return;
|
||||
}
|
||||
|
||||
const defaultPath = configList.default
|
||||
? normalizeConfigPath(configList.default)
|
||||
: normalizedItems[0]?.path;
|
||||
if (defaultPath) applySelectedConfig(defaultPath);
|
||||
} catch (err) {
|
||||
console.error('加载配置清单失败', err);
|
||||
}
|
||||
};
|
||||
|
||||
onMounted(loadConfigList);
|
||||
onMounted(() => {
|
||||
applyViewportTransform(scale.value, panX.value, panY.value);
|
||||
});
|
||||
|
||||
watch(selectedConfigPath, (value, previous) => {
|
||||
if (value === previous) return;
|
||||
updateUrlConfigParam(value);
|
||||
});
|
||||
|
||||
/**
|
||||
* 使用罗盘逻辑
|
||||
@@ -360,9 +452,12 @@ const {
|
||||
toXY,
|
||||
loading,
|
||||
error,
|
||||
} = useLuopan(configInput, textRadialPosition);
|
||||
} = useLuopan(
|
||||
computed(() => props.config ?? selectedConfigPath.value),
|
||||
textRadialPosition
|
||||
);
|
||||
|
||||
// viewBox 以实际外半径为准,确保完整显示配置中的大半径罗盘
|
||||
// 以实际外半径作为 `viewBox`,确保完整显示配置中的大半径罗盘
|
||||
const viewBoxSize = computed(() => {
|
||||
const radius = outerMost.value > 0 ? outerMost.value : props.size / 2;
|
||||
return radius * 2;
|
||||
@@ -388,7 +483,15 @@ const boundaryRings = computed(() => {
|
||||
return Array.from(set);
|
||||
});
|
||||
|
||||
// 使用 rAF 合并缩放/拖拽更新,减少渲染频率
|
||||
const applyViewportTransform = (scaleValue: number, panXValue: number, panYValue: number) => {
|
||||
if (!viewport.value) return;
|
||||
viewport.value.setAttribute(
|
||||
'transform',
|
||||
`scale(${scaleValue}) translate(${panXValue}, ${panYValue})`
|
||||
);
|
||||
};
|
||||
|
||||
// 使用 `rAF` 合并缩放/拖拽更新,减少渲染频率
|
||||
const scheduleTransform = () => {
|
||||
if (rafId !== null) return;
|
||||
const requestFrame =
|
||||
@@ -400,6 +503,7 @@ const scheduleTransform = () => {
|
||||
scale.value = nextScale;
|
||||
panX.value = nextPanX;
|
||||
panY.value = nextPanY;
|
||||
applyViewportTransform(nextScale, nextPanX, nextPanY);
|
||||
rafId = null;
|
||||
});
|
||||
};
|
||||
@@ -416,7 +520,7 @@ const setPan = (x: number, y: number) => {
|
||||
};
|
||||
|
||||
const getUnitSvgBox = (sector: Sector, unit: TextUnit) => {
|
||||
// SVG 图标与文字共享布局规则,使用单元角度范围计算形心位置
|
||||
// `SVG` 图标与文字共享布局规则,使用单元角度范围计算形心位置
|
||||
const centroid = annularSectorCentroid({
|
||||
rInner: sector.rInner,
|
||||
rOuter: sector.rOuter,
|
||||
@@ -554,6 +658,12 @@ button.active {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
contain: paint;
|
||||
cursor: grab;
|
||||
}
|
||||
|
||||
.svg-container.is-dragging {
|
||||
cursor: grabbing;
|
||||
}
|
||||
|
||||
.status {
|
||||
@@ -566,10 +676,13 @@ button.active {
|
||||
|
||||
.svg {
|
||||
background: transparent;
|
||||
transition: transform 0.1s ease-out;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.viewport {
|
||||
will-change: transform;
|
||||
}
|
||||
|
||||
.note {
|
||||
color: #6b7280;
|
||||
font-size: 13px;
|
||||
|
||||
@@ -6,7 +6,8 @@ export const applyPatternColoring = (
|
||||
divisions: number,
|
||||
color: string,
|
||||
num: number,
|
||||
interval: number
|
||||
interval: number,
|
||||
patternOffset: number = 1
|
||||
): Map<number, string> => {
|
||||
const colorMap = new Map<number, string>();
|
||||
|
||||
@@ -19,13 +20,18 @@ export const applyPatternColoring = (
|
||||
return colorMap;
|
||||
}
|
||||
|
||||
let currentIndex = 0;
|
||||
while (currentIndex < divisions) {
|
||||
for (let i = 0; i < num && currentIndex < divisions; i++) {
|
||||
colorMap.set(currentIndex, color);
|
||||
currentIndex++;
|
||||
const cycleLength = num + interval;
|
||||
if (cycleLength <= 0) return colorMap;
|
||||
const offsetBase = Number.isFinite(patternOffset) ? Math.trunc(patternOffset) - 1 : 0;
|
||||
const normalizedOffset = ((offsetBase % divisions) + divisions) % divisions;
|
||||
|
||||
// 规律填色:连续着色 `num` 个扇区,然后跳过 `interval` 个扇区。
|
||||
for (let i = 0; i < divisions; i++) {
|
||||
const relativeIndex = i - normalizedOffset;
|
||||
const posInCycle = ((relativeIndex % cycleLength) + cycleLength) % cycleLength;
|
||||
if (posInCycle < num) {
|
||||
colorMap.set(i, color);
|
||||
}
|
||||
currentIndex += interval;
|
||||
}
|
||||
|
||||
return colorMap;
|
||||
@@ -49,13 +55,21 @@ export class ColorResolver {
|
||||
resolveLayerColors(layer: SectorLayerConfig): Map<number, string> {
|
||||
const colorMap = new Map<number, string>();
|
||||
|
||||
if (!layer.colorRef || !layer.num) {
|
||||
if (!layer.colorRef || layer.divisions <= 0) {
|
||||
return colorMap;
|
||||
}
|
||||
|
||||
const interval = layer.interval ?? 0;
|
||||
const color = this.resolveColor(layer.colorRef);
|
||||
return applyPatternColoring(layer.divisions, color, layer.num, interval);
|
||||
if (typeof layer.num === 'number' && layer.num > 0) {
|
||||
const interval = layer.interval ?? 0;
|
||||
const patternOffset = layer.patternOffset ?? 1;
|
||||
return applyPatternColoring(layer.divisions, color, layer.num, interval, patternOffset);
|
||||
}
|
||||
|
||||
for (let i = 0; i < layer.divisions; i++) {
|
||||
colorMap.set(i, color);
|
||||
}
|
||||
return colorMap;
|
||||
}
|
||||
|
||||
resolveSectorColor(
|
||||
@@ -63,6 +77,7 @@ export class ColorResolver {
|
||||
sector: SectorConfig | undefined,
|
||||
sectorIndex: number
|
||||
): string {
|
||||
// 优先级:扇区 `colorRef` > 层级规律色 > 背景。
|
||||
if (sector?.colorRef) {
|
||||
return this.resolveColor(sector.colorRef);
|
||||
}
|
||||
|
||||
@@ -2,30 +2,35 @@
|
||||
* 罗盘业务逻辑组合函数
|
||||
*/
|
||||
|
||||
import { computed, ref, readonly, watch, type Ref } from 'vue';
|
||||
import { computed, ref, readonly, watch, type Ref, isRef } from 'vue';
|
||||
import type {
|
||||
CenterIconData,
|
||||
DegreeRingData,
|
||||
LayerConfig,
|
||||
LuopanConfig,
|
||||
LuopanConfigInput,
|
||||
Sector,
|
||||
SectorLayerConfig,
|
||||
ThemeConfig,
|
||||
ThemeItem,
|
||||
ThemesConfig,
|
||||
TextRadialPosition,
|
||||
} from '../types';
|
||||
import { polarToXY } from '../utils';
|
||||
import { parseConfig } from '../configParser';
|
||||
import { getTextColorForBackground, polarToXY } from '../utils';
|
||||
import { normalizeLayerRadii, parseConfig } from '../configParser';
|
||||
import { ColorResolver } from '../colorResolver';
|
||||
import { SectorBuilder } from '../sectorBuilder';
|
||||
import { buildDegreeRing } from '../degreeRing';
|
||||
import { loadCenterIcon } from '../centerIcon';
|
||||
|
||||
// 只有扇区层会生成扇区几何,其它层仍参与层级顺序。
|
||||
const isSectorLayer = (layer: LayerConfig): layer is SectorLayerConfig =>
|
||||
layer.type !== 'centerIcon' && layer.type !== 'degreeRing';
|
||||
|
||||
const HEX_COLOR_RE = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
|
||||
|
||||
const resolveThemeColor = (
|
||||
theme: LuopanConfig['theme'],
|
||||
theme: ThemeConfig,
|
||||
value: string | undefined,
|
||||
fallback: string
|
||||
) => {
|
||||
@@ -34,20 +39,113 @@ const resolveThemeColor = (
|
||||
return theme.colorPalettes[value] ?? fallback;
|
||||
};
|
||||
|
||||
const resolveDegreeRingColor = (
|
||||
value: string | undefined,
|
||||
theme: ThemeConfig,
|
||||
background: string
|
||||
) => {
|
||||
if (typeof value === 'string' && value.trim().length > 0) {
|
||||
return resolveThemeColor(theme, value, value);
|
||||
}
|
||||
const contrast = getTextColorForBackground(background);
|
||||
return contrast === '#ffffff' ? '#ffffff' : '#000000';
|
||||
};
|
||||
|
||||
const resolveDegreeRingBackground = (
|
||||
value: string | undefined,
|
||||
theme: ThemeConfig,
|
||||
fallback: string
|
||||
) => {
|
||||
if (typeof value === 'string' && value.trim().length > 0) {
|
||||
return resolveThemeColor(theme, value, fallback);
|
||||
}
|
||||
return fallback;
|
||||
};
|
||||
|
||||
const findDegreeRingLayer = (layers: LayerConfig[]) =>
|
||||
layers.find((layer) => layer.type === 'degreeRing');
|
||||
|
||||
const findCenterIconLayer = (layers: LayerConfig[]) =>
|
||||
layers.find((layer) => layer.type === 'centerIcon');
|
||||
|
||||
const THEMES_PATH = '/themes.json';
|
||||
|
||||
let cachedThemes: ThemesConfig | null = null;
|
||||
|
||||
const isObject = (value: unknown): value is Record<string, unknown> =>
|
||||
typeof value === 'object' && value !== null && !Array.isArray(value);
|
||||
|
||||
const normalizeThemeItem = (item: Record<string, unknown>): ThemeItem | null => {
|
||||
const name = item.name;
|
||||
const palettes = item.colorPalettes;
|
||||
if (typeof name !== 'string' || !isObject(palettes)) return null;
|
||||
|
||||
const colorPalettes: Record<string, string> = {};
|
||||
Object.entries(palettes).forEach(([key, value]) => {
|
||||
if (typeof value === 'string') {
|
||||
colorPalettes[key] = value;
|
||||
}
|
||||
});
|
||||
|
||||
if (Object.keys(colorPalettes).length === 0) return null;
|
||||
return { name, colorPalettes };
|
||||
};
|
||||
|
||||
const normalizeThemesConfig = (input: unknown): ThemesConfig => {
|
||||
if (!isObject(input)) {
|
||||
throw new Error('themes.json 必须为对象');
|
||||
}
|
||||
const rawItems = Array.isArray(input.items) ? input.items : [];
|
||||
const items = rawItems
|
||||
.filter((item): item is Record<string, unknown> => isObject(item))
|
||||
.map((item) => normalizeThemeItem(item))
|
||||
.filter((item): item is ThemeItem => Boolean(item));
|
||||
if (items.length === 0) {
|
||||
throw new Error('themes.json.items 不能为空');
|
||||
}
|
||||
return {
|
||||
default: typeof input.default === 'string' ? input.default : undefined,
|
||||
items,
|
||||
};
|
||||
};
|
||||
|
||||
const loadThemes = async (): Promise<ThemesConfig> => {
|
||||
if (cachedThemes) return cachedThemes;
|
||||
const response = await fetch(THEMES_PATH, { cache: 'no-store' });
|
||||
if (!response.ok) {
|
||||
throw new Error(`主题配置加载失败: ${response.status}`);
|
||||
}
|
||||
const raw = await response.json();
|
||||
cachedThemes = normalizeThemesConfig(raw);
|
||||
return cachedThemes;
|
||||
};
|
||||
|
||||
const resolveTheme = async (configObj: LuopanConfigInput): Promise<ThemeConfig> => {
|
||||
if (configObj.theme && !configObj.themeRef) {
|
||||
return configObj.theme;
|
||||
}
|
||||
const themes = await loadThemes();
|
||||
const themeName = configObj.themeRef ?? themes.default ?? themes.items[0].name;
|
||||
const matched = themes.items.find((item) => item.name === themeName);
|
||||
if (matched) {
|
||||
return { name: matched.name, colorPalettes: matched.colorPalettes };
|
||||
}
|
||||
if (configObj.theme) {
|
||||
return configObj.theme;
|
||||
}
|
||||
throw new Error(`未找到主题: ${themeName}`);
|
||||
};
|
||||
|
||||
/**
|
||||
* 罗盘逻辑 Hook
|
||||
* @param configPathOrObject 配置文件路径或配置对象
|
||||
* @param textRadialPositionRef 文字径向位置的响应式引用(可选)
|
||||
* @returns 罗盘相关的计算属性和方法
|
||||
*/
|
||||
type LuopanConfigSource = string | LuopanConfigInput;
|
||||
|
||||
export function useLuopan(
|
||||
configPathOrObject: string | LuopanConfig,
|
||||
configPathOrObject: LuopanConfigSource | Ref<LuopanConfigSource>,
|
||||
textRadialPositionRef?: Ref<TextRadialPosition>
|
||||
) {
|
||||
const config = ref<LuopanConfig | null>(null);
|
||||
@@ -61,14 +159,20 @@ export function useLuopan(
|
||||
() => textRadialPositionRef?.value ?? 'middle'
|
||||
);
|
||||
|
||||
const configSource = isRef(configPathOrObject)
|
||||
? configPathOrObject
|
||||
: ref(configPathOrObject);
|
||||
|
||||
const buildSectors = (configObj: LuopanConfig) => {
|
||||
const resolver = new ColorResolver(configObj.theme, configObj.background);
|
||||
const builder = new SectorBuilder(resolver, {
|
||||
textRadialPosition: textRadialPosition.value,
|
||||
insetDistance: configObj.insetDistance,
|
||||
});
|
||||
const sectorLayers = configObj.layers.filter(isSectorLayer);
|
||||
return sectorLayers.flatMap((layer, index) => builder.buildLayer(layer, index));
|
||||
// 层索引与配置顺序一致(`centerIcon`/`degreeRing` 仍占位)。
|
||||
return configObj.layers.flatMap((layer, index) =>
|
||||
isSectorLayer(layer) ? builder.buildLayer(layer, index) : []
|
||||
);
|
||||
};
|
||||
|
||||
const loadConfig = async () => {
|
||||
@@ -76,37 +180,46 @@ export function useLuopan(
|
||||
loading.value = true;
|
||||
error.value = null;
|
||||
|
||||
let configObj: LuopanConfig;
|
||||
if (typeof configPathOrObject === 'string') {
|
||||
const jsonText = await fetch(configPathOrObject).then((res) => res.text());
|
||||
let configObj: LuopanConfigInput;
|
||||
let normalizedLayers: LuopanConfig['layers'];
|
||||
const configInput = configSource.value;
|
||||
if (typeof configInput === 'string') {
|
||||
const jsonText = await fetch(configInput).then((res) => res.text());
|
||||
configObj = parseConfig(jsonText);
|
||||
// parseConfig 已完成层归一化,避免重复处理
|
||||
normalizedLayers = configObj.layers;
|
||||
} else {
|
||||
configObj = configPathOrObject;
|
||||
configObj = configInput;
|
||||
normalizedLayers = normalizeLayerRadii(configObj.layers);
|
||||
}
|
||||
|
||||
const normalizedConfig = { ...configObj, layers: normalizedLayers };
|
||||
|
||||
const resolvedTheme = await resolveTheme(normalizedConfig);
|
||||
const resolvedBackground = resolveThemeColor(
|
||||
configObj.theme,
|
||||
configObj.background,
|
||||
resolvedTheme,
|
||||
normalizedConfig.background,
|
||||
'#000000'
|
||||
);
|
||||
const resolvedStrokeColor = resolveThemeColor(
|
||||
configObj.theme,
|
||||
configObj.strokeColor,
|
||||
resolvedTheme,
|
||||
normalizedConfig.strokeColor,
|
||||
'#1f2937'
|
||||
);
|
||||
|
||||
const resolvedConfig: LuopanConfig = {
|
||||
...configObj,
|
||||
...normalizedConfig,
|
||||
theme: resolvedTheme,
|
||||
background: resolvedBackground,
|
||||
strokeColor: resolvedStrokeColor,
|
||||
strokeWidth: typeof configObj.strokeWidth === 'number'
|
||||
? configObj.strokeWidth
|
||||
strokeWidth: typeof normalizedConfig.strokeWidth === 'number'
|
||||
? normalizedConfig.strokeWidth
|
||||
: undefined,
|
||||
strokeOpacity: typeof configObj.strokeOpacity === 'number'
|
||||
? configObj.strokeOpacity
|
||||
strokeOpacity: typeof normalizedConfig.strokeOpacity === 'number'
|
||||
? normalizedConfig.strokeOpacity
|
||||
: undefined,
|
||||
insetDistance: typeof configObj.insetDistance === 'number'
|
||||
? configObj.insetDistance
|
||||
insetDistance: typeof normalizedConfig.insetDistance === 'number'
|
||||
? normalizedConfig.insetDistance
|
||||
: undefined,
|
||||
};
|
||||
|
||||
@@ -114,15 +227,52 @@ export function useLuopan(
|
||||
sectors.value = buildSectors(resolvedConfig);
|
||||
|
||||
const degreeRingLayer = findDegreeRingLayer(resolvedConfig.layers);
|
||||
degreeRing.value = degreeRingLayer
|
||||
? buildDegreeRing(degreeRingLayer.degreeRing)
|
||||
: null;
|
||||
if (degreeRingLayer) {
|
||||
const ringBackground = resolveDegreeRingBackground(
|
||||
degreeRingLayer.degreeRing.colorRef,
|
||||
resolvedConfig.theme,
|
||||
resolvedConfig.background
|
||||
);
|
||||
const hasBackgroundRef =
|
||||
typeof degreeRingLayer.degreeRing.colorRef === 'string' &&
|
||||
degreeRingLayer.degreeRing.colorRef.trim().length > 0;
|
||||
const tickColor = resolveDegreeRingColor(
|
||||
degreeRingLayer.degreeRing.tickColor,
|
||||
resolvedConfig.theme,
|
||||
ringBackground
|
||||
);
|
||||
const ringColor = resolveDegreeRingColor(
|
||||
degreeRingLayer.degreeRing.ringColor,
|
||||
resolvedConfig.theme,
|
||||
ringBackground
|
||||
);
|
||||
const ringData = buildDegreeRing({
|
||||
...degreeRingLayer.degreeRing,
|
||||
tickColor,
|
||||
ringColor,
|
||||
});
|
||||
degreeRing.value = {
|
||||
...ringData,
|
||||
background: hasBackgroundRef
|
||||
? {
|
||||
color: ringBackground,
|
||||
opacity: degreeRingLayer.degreeRing.opacity,
|
||||
}
|
||||
: undefined,
|
||||
};
|
||||
} else {
|
||||
degreeRing.value = null;
|
||||
}
|
||||
|
||||
const centerIconLayer = findCenterIconLayer(resolvedConfig.layers);
|
||||
centerIcon.value = centerIconLayer
|
||||
? await loadCenterIcon(centerIconLayer.centerIcon)
|
||||
: null;
|
||||
} catch (err) {
|
||||
console.error('加载罗盘配置失败', {
|
||||
source: typeof configSource.value === 'string' ? configSource.value : 'inline config',
|
||||
error: err,
|
||||
});
|
||||
error.value = err as Error;
|
||||
} finally {
|
||||
loading.value = false;
|
||||
@@ -136,6 +286,10 @@ export function useLuopan(
|
||||
}
|
||||
});
|
||||
|
||||
watch(configSource, () => {
|
||||
loadConfig();
|
||||
});
|
||||
|
||||
loadConfig();
|
||||
|
||||
const sectorLayers = computed(() =>
|
||||
@@ -156,6 +310,7 @@ export function useLuopan(
|
||||
const outerMost = computed(() => {
|
||||
if (!config.value) return 0;
|
||||
|
||||
// 取扇区层与刻度环中的最大半径。
|
||||
const radii = sectorLayers.value.map((layer) => layer.rOuter);
|
||||
const degreeRingLayer = findDegreeRingLayer(config.value.layers);
|
||||
if (degreeRingLayer) {
|
||||
|
||||
@@ -1,4 +1,13 @@
|
||||
import type { LuopanConfig, ThemeConfig } from './types';
|
||||
import type {
|
||||
DegreeRingLayerConfig,
|
||||
DegreeRingLayerConfigInput,
|
||||
LayerConfig,
|
||||
LayerConfigInput,
|
||||
LuopanConfigInput,
|
||||
SectorLayerConfig,
|
||||
SectorLayerConfigInput,
|
||||
ThemeConfig,
|
||||
} from './types';
|
||||
|
||||
const isObject = (value: unknown): value is Record<string, unknown> =>
|
||||
typeof value === 'object' && value !== null && !Array.isArray(value);
|
||||
@@ -9,6 +18,9 @@ const assertCondition = (condition: boolean, message: string): void => {
|
||||
}
|
||||
};
|
||||
|
||||
const isFiniteNumber = (value: unknown): value is number =>
|
||||
typeof value === 'number' && Number.isFinite(value);
|
||||
|
||||
export const stripJsonComments = (input: string): string => {
|
||||
let output = '';
|
||||
let inString = false;
|
||||
@@ -53,7 +65,176 @@ const normalizeTheme = (theme: Record<string, unknown>): ThemeConfig => {
|
||||
};
|
||||
};
|
||||
|
||||
export const parseConfig = (jsonText: string): LuopanConfig => {
|
||||
const normalizeSectorLayer = (
|
||||
layer: SectorLayerConfigInput,
|
||||
index: number,
|
||||
lastOuter: number | null
|
||||
): { layer: SectorLayerConfig; nextOuter: number } => {
|
||||
const rInnerRaw = layer.rInner;
|
||||
const rOuterRaw = layer.rOuter;
|
||||
const layerHeightRaw = layer.layerHeight;
|
||||
|
||||
const hasRInner = rInnerRaw !== undefined;
|
||||
const hasROuter = rOuterRaw !== undefined;
|
||||
|
||||
if (hasRInner && !isFiniteNumber(rInnerRaw)) {
|
||||
throw new Error(`layers[${index}].rInner 必须为数字`);
|
||||
}
|
||||
if (hasROuter && !isFiniteNumber(rOuterRaw)) {
|
||||
throw new Error(`layers[${index}].rOuter 必须为数字`);
|
||||
}
|
||||
|
||||
if (hasRInner || hasROuter) {
|
||||
assertCondition(
|
||||
hasRInner && hasROuter,
|
||||
`layers[${index}] 必须同时提供 rInner 与 rOuter`
|
||||
);
|
||||
const rInner = rInnerRaw as number;
|
||||
const rOuter = rOuterRaw as number;
|
||||
assertCondition(rOuter > rInner, `layers[${index}] rOuter 必须大于 rInner`);
|
||||
return {
|
||||
layer: { ...layer, rInner, rOuter },
|
||||
nextOuter: rOuter,
|
||||
};
|
||||
}
|
||||
|
||||
if (layerHeightRaw === undefined) {
|
||||
throw new Error(`layers[${index}] 缺少 rInner/rOuter 或 layerHeight`);
|
||||
}
|
||||
if (!isFiniteNumber(layerHeightRaw)) {
|
||||
throw new Error(`layers[${index}].layerHeight 必须为数字`);
|
||||
}
|
||||
assertCondition(
|
||||
layerHeightRaw > 0,
|
||||
`layers[${index}].layerHeight 必须大于 0`
|
||||
);
|
||||
assertCondition(
|
||||
lastOuter !== null,
|
||||
`layers[${index}] 使用 layerHeight 时必须有上一层 rOuter`
|
||||
);
|
||||
|
||||
const rInner = lastOuter as number;
|
||||
const rOuter = rInner + layerHeightRaw;
|
||||
return {
|
||||
layer: { ...layer, rInner, rOuter },
|
||||
nextOuter: rOuter,
|
||||
};
|
||||
};
|
||||
|
||||
const normalizeDegreeRingLayer = (
|
||||
layer: DegreeRingLayerConfigInput,
|
||||
index: number,
|
||||
lastOuter: number | null
|
||||
): { layer: DegreeRingLayerConfig; nextOuter: number } => {
|
||||
if (Object.prototype.hasOwnProperty.call(layer, 'degreeRing')) {
|
||||
const keys = Object.keys(layer).join(', ');
|
||||
console.error('检测到废弃的 degreeRing 嵌套配置', {
|
||||
index,
|
||||
keys,
|
||||
layer,
|
||||
});
|
||||
throw new Error(
|
||||
`layers[${index}].degreeRing 已废弃,请改为扁平写法(keys: ${keys})`
|
||||
);
|
||||
}
|
||||
const { type: _type, layerHeight: layerHeightRaw, ...degreeRing } = layer;
|
||||
|
||||
const rInnerRaw = degreeRing.rInner;
|
||||
const rOuterRaw = degreeRing.rOuter;
|
||||
|
||||
const hasRInner = rInnerRaw !== undefined;
|
||||
const hasROuter = rOuterRaw !== undefined;
|
||||
|
||||
if (hasRInner && !isFiniteNumber(rInnerRaw)) {
|
||||
throw new Error(`layers[${index}].rInner 必须为数字`);
|
||||
}
|
||||
if (hasROuter && !isFiniteNumber(rOuterRaw)) {
|
||||
throw new Error(`layers[${index}].rOuter 必须为数字`);
|
||||
}
|
||||
|
||||
if (hasRInner || hasROuter) {
|
||||
assertCondition(
|
||||
hasRInner && hasROuter,
|
||||
`layers[${index}] 必须同时提供 rInner 与 rOuter`
|
||||
);
|
||||
const rInner = rInnerRaw as number;
|
||||
const rOuter = rOuterRaw as number;
|
||||
assertCondition(
|
||||
rOuter > rInner,
|
||||
`layers[${index}].rOuter 必须大于 rInner`
|
||||
);
|
||||
return {
|
||||
layer: {
|
||||
type: 'degreeRing',
|
||||
layerHeight: layerHeightRaw,
|
||||
degreeRing: { ...degreeRing, rInner, rOuter },
|
||||
},
|
||||
nextOuter: rOuter,
|
||||
};
|
||||
}
|
||||
|
||||
if (layerHeightRaw === undefined) {
|
||||
throw new Error(`layers[${index}] 缺少 rInner/rOuter 或 layerHeight`);
|
||||
}
|
||||
if (!isFiniteNumber(layerHeightRaw)) {
|
||||
throw new Error(`layers[${index}].layerHeight 必须为数字`);
|
||||
}
|
||||
assertCondition(
|
||||
layerHeightRaw > 0,
|
||||
`layers[${index}].layerHeight 必须大于 0`
|
||||
);
|
||||
assertCondition(
|
||||
lastOuter !== null,
|
||||
`layers[${index}] 使用 layerHeight 时必须有上一层 rOuter`
|
||||
);
|
||||
|
||||
const rInner = lastOuter as number;
|
||||
const rOuter = rInner + layerHeightRaw;
|
||||
return {
|
||||
layer: {
|
||||
type: 'degreeRing',
|
||||
layerHeight: layerHeightRaw,
|
||||
degreeRing: { ...degreeRing, rInner, rOuter },
|
||||
},
|
||||
nextOuter: rOuter,
|
||||
};
|
||||
};
|
||||
|
||||
export const normalizeLayerRadii = (layers: LayerConfigInput[]): LayerConfig[] => {
|
||||
const normalized: LayerConfig[] = [];
|
||||
let lastOuter: number | null = null;
|
||||
|
||||
layers.forEach((layer, index) => {
|
||||
assertCondition(isObject(layer), `layers[${index}] 必须为对象`);
|
||||
const type = (layer as Record<string, unknown>).type;
|
||||
if (type === 'centerIcon') {
|
||||
normalized.push(layer as LayerConfig);
|
||||
return;
|
||||
}
|
||||
if (type === 'degreeRing') {
|
||||
const { layer: degreeRingLayer, nextOuter } = normalizeDegreeRingLayer(
|
||||
layer as DegreeRingLayerConfigInput,
|
||||
index,
|
||||
lastOuter
|
||||
);
|
||||
normalized.push(degreeRingLayer);
|
||||
lastOuter = nextOuter;
|
||||
return;
|
||||
}
|
||||
|
||||
const { layer: sectorLayer, nextOuter } = normalizeSectorLayer(
|
||||
layer as SectorLayerConfigInput,
|
||||
index,
|
||||
lastOuter
|
||||
);
|
||||
normalized.push(sectorLayer);
|
||||
lastOuter = nextOuter;
|
||||
});
|
||||
|
||||
return normalized;
|
||||
};
|
||||
|
||||
export const parseConfig = (jsonText: string): LuopanConfigInput => {
|
||||
const cleanText = stripJsonComments(jsonText);
|
||||
let parsed: unknown;
|
||||
|
||||
@@ -69,8 +250,11 @@ export const parseConfig = (jsonText: string): LuopanConfig => {
|
||||
const config = parsed as Record<string, unknown>;
|
||||
assertCondition(typeof config.name === 'string', 'name 为必填字符串');
|
||||
assertCondition(typeof config.background === 'string', 'background 为必填字符串');
|
||||
assertCondition(isObject(config.theme), 'theme 为必填对象');
|
||||
if (config.theme !== undefined) {
|
||||
assertCondition(isObject(config.theme), 'theme 必须为对象');
|
||||
}
|
||||
assertCondition(Array.isArray(config.layers), 'layers 为必填数组');
|
||||
const normalizedLayers = normalizeLayerRadii(config.layers as LayerConfigInput[]);
|
||||
|
||||
return {
|
||||
name: config.name,
|
||||
@@ -81,7 +265,8 @@ export const parseConfig = (jsonText: string): LuopanConfig => {
|
||||
strokeOpacity: typeof config.strokeOpacity === 'number' ? config.strokeOpacity : undefined,
|
||||
insetDistance: typeof config.insetDistance === 'number' ? config.insetDistance : undefined,
|
||||
outerRadius: typeof config.outerRadius === 'number' ? config.outerRadius : undefined,
|
||||
theme: normalizeTheme(config.theme),
|
||||
layers: config.layers as LuopanConfig['layers'],
|
||||
themeRef: typeof config.themeRef === 'string' ? config.themeRef : undefined,
|
||||
theme: isObject(config.theme) ? normalizeTheme(config.theme) : undefined,
|
||||
layers: normalizedLayers,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { DegreeRingConfig, TickMark, DegreeLabel, DegreeRingData } from './types';
|
||||
import { generateTextPath, polarToXY } from './utils';
|
||||
|
||||
// 根据刻度级别计算长度,后续由 clamp 处理最小值
|
||||
// 根据刻度级别计算长度,最小值由 `clampTickLength` 兜底
|
||||
const resolveTickLength = (config: DegreeRingConfig, type: TickMark['type']): number => {
|
||||
const step = config.tickLengthStep ?? 0;
|
||||
if (type === 'major') return config.tickLength;
|
||||
@@ -15,6 +15,8 @@ export function buildDegreeRing(config: DegreeRingConfig): DegreeRingData {
|
||||
const ticks: TickMark[] = [];
|
||||
const { rInner, rOuter, mode } = config;
|
||||
const labelFontSize = 8;
|
||||
const tickColor = config.tickColor ?? '#000000';
|
||||
const ringColor = config.ringColor ?? tickColor;
|
||||
|
||||
const majorTick = Math.max(1, config.majorTick);
|
||||
const minorTick = Math.max(1, config.minorTick);
|
||||
@@ -70,7 +72,7 @@ export function buildDegreeRing(config: DegreeRingConfig): DegreeRingData {
|
||||
continue;
|
||||
}
|
||||
|
||||
// both: 同角度生成内外两条刻度线
|
||||
// 模式为 `both` 时,同角度生成内外两条刻度线
|
||||
const innerStart = polarToXY(angle, rInner);
|
||||
const innerEnd = polarToXY(angle, rInner + length);
|
||||
ticks.push({
|
||||
@@ -111,7 +113,7 @@ export function buildDegreeRing(config: DegreeRingConfig): DegreeRingData {
|
||||
const aStart = angle - span / 2;
|
||||
const aEnd = angle + span / 2;
|
||||
|
||||
// 使用 textPath 保持度数方向与扇区文字一致
|
||||
// 使用 `textPath` 保持度数方向与扇区文字一致
|
||||
labels.push({
|
||||
angle,
|
||||
text,
|
||||
@@ -125,11 +127,11 @@ export function buildDegreeRing(config: DegreeRingConfig): DegreeRingData {
|
||||
|
||||
return {
|
||||
ticks,
|
||||
tickColor: config.tickColor,
|
||||
tickColor,
|
||||
ring: {
|
||||
rInner,
|
||||
rOuter,
|
||||
color: config.ringColor,
|
||||
color: ringColor,
|
||||
opacity: config.opacity,
|
||||
},
|
||||
labels: labels.length > 0 ? labels : undefined,
|
||||
|
||||
@@ -6,7 +6,10 @@
|
||||
export type {
|
||||
Example,
|
||||
LuopanConfig,
|
||||
LuopanConfigInput,
|
||||
ThemeConfig,
|
||||
ThemeItem,
|
||||
ThemesConfig,
|
||||
CenterIconConfig,
|
||||
DegreeRingConfig,
|
||||
DegreeRingData,
|
||||
@@ -37,7 +40,7 @@ export {
|
||||
getTextColorForBackground,
|
||||
} from './utils';
|
||||
|
||||
// Composables 导出
|
||||
// 组合式函数导出
|
||||
export { useLuopan } from './composables/useLuopan';
|
||||
export type { UseLuopanReturn } from './composables/useLuopan';
|
||||
|
||||
|
||||
@@ -8,14 +8,15 @@ export function splitMultiTextUnits(
|
||||
content: string,
|
||||
aStart: number,
|
||||
aEnd: number,
|
||||
svgIconPath: string = 'src/assets/icons/'
|
||||
svgIconPath: string = 'src/assets/icons/',
|
||||
unitRatios?: number[]
|
||||
): TextUnit[] {
|
||||
const parts = content.split('|').map((part) => part.trim());
|
||||
if (parts.length === 0 || (parts.length === 1 && parts[0] === '')) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const ratios = getLayoutRatio(parts.length);
|
||||
const ratios = normalizeRatios(unitRatios, parts.length) ?? getLayoutRatio(parts.length);
|
||||
const totalAngle = aEnd - aStart;
|
||||
const units: TextUnit[] = [];
|
||||
const basePath = ensureTrailingSlash(svgIconPath);
|
||||
@@ -39,3 +40,14 @@ export function splitMultiTextUnits(
|
||||
|
||||
return units;
|
||||
}
|
||||
|
||||
const normalizeRatios = (
|
||||
ratios: number[] | undefined,
|
||||
count: number
|
||||
): number[] | null => {
|
||||
if (!ratios || ratios.length !== count) return null;
|
||||
if (ratios.some((value) => typeof value !== 'number' || value <= 0)) return null;
|
||||
const sum = ratios.reduce((acc, value) => acc + value, 0);
|
||||
if (sum <= 0) return null;
|
||||
return ratios.map((value) => value / sum);
|
||||
};
|
||||
|
||||
@@ -49,26 +49,42 @@ export class SectorBuilder {
|
||||
for (let i = 0; i < layer.divisions; i++) {
|
||||
const aStart = startAngle + i * angleStep;
|
||||
const aEnd = aStart + angleStep;
|
||||
// groupSplit=false 且扇区足够细时,对填充路径做轻微重叠,避免抗锯齿露底
|
||||
const angleOverlapDeg =
|
||||
layer.groupSplit === false && angleStep > 0 && angleStep <= 10
|
||||
? Math.min(0.2, angleStep * 0.02)
|
||||
: 0;
|
||||
const fillAStart = aStart - angleOverlapDeg;
|
||||
const fillAEnd = aEnd + angleOverlapDeg;
|
||||
const sectorConfig = layer.sectors?.[i];
|
||||
const rawContent = typeof sectorConfig?.content === 'string' ? sectorConfig.content.trim() : '';
|
||||
const isMultiText = rawContent.includes('|');
|
||||
|
||||
// 颜色优先级:sector > layer pattern > background
|
||||
// 颜色优先级:扇区 > 规律填色 > 背景
|
||||
const fillColor = this.colorResolver.resolveSectorColor(layerColorMap, sectorConfig, i);
|
||||
const textColor = getTextColorForBackground(fillColor);
|
||||
// 扇区的 `innerFill` 优先级高于层级的 `innerFill`。
|
||||
const innerFill = (sectorConfig?.innerFill ?? layer.innerFill ?? 0) === 1;
|
||||
const innerFillPath = innerFill
|
||||
? annularSectorInsetPath(
|
||||
layer.rInner,
|
||||
layer.rOuter,
|
||||
aStart,
|
||||
aEnd,
|
||||
fillAStart,
|
||||
fillAEnd,
|
||||
this.insetDistance
|
||||
)
|
||||
: undefined;
|
||||
const normalizedInnerFillPath =
|
||||
innerFillPath && innerFillPath.length > 0 ? innerFillPath : undefined;
|
||||
const hasInnerFillPath = Boolean(normalizedInnerFillPath);
|
||||
// `innerFill` 开启时:外圈保持白色,内缩块仍按规律填色。
|
||||
const baseFillColor = hasInnerFillPath ? '#ffffff' : fillColor;
|
||||
const innerFillColor = hasInnerFillPath ? fillColor : undefined;
|
||||
const textBaseColor = fillColor;
|
||||
const textColor = getTextColorForBackground(textBaseColor);
|
||||
|
||||
const sectorKey = `L${layerIndex}-P${i}`;
|
||||
const textPathId = `text-path-${sectorKey}`;
|
||||
// 最内层使用形心位置,保证文字可读性。
|
||||
const effectiveTextRadialPosition =
|
||||
layerIndex === 0 ? 'centroid' : this.textRadialPosition;
|
||||
|
||||
@@ -89,7 +105,8 @@ export class SectorBuilder {
|
||||
layer.rInner,
|
||||
layer.rOuter,
|
||||
effectiveTextRadialPosition,
|
||||
sectorKey
|
||||
sectorKey,
|
||||
layer.unitRatios
|
||||
)
|
||||
: undefined;
|
||||
|
||||
@@ -114,12 +131,12 @@ export class SectorBuilder {
|
||||
aMidRad: centroid.aMidRad,
|
||||
cx: centroid.cx,
|
||||
cy: centroid.cy,
|
||||
fill: fillColor,
|
||||
fill: baseFillColor,
|
||||
textColor,
|
||||
label: isMultiText ? '' : rawContent,
|
||||
path: annularSectorPath(layer.rInner, layer.rOuter, aStart, aEnd),
|
||||
innerFillPath,
|
||||
innerFillColor: innerFill ? fillColor : undefined,
|
||||
path: annularSectorPath(layer.rInner, layer.rOuter, fillAStart, fillAEnd),
|
||||
innerFillPath: normalizedInnerFillPath,
|
||||
innerFillColor,
|
||||
textPath,
|
||||
textPathId,
|
||||
isVertical,
|
||||
@@ -141,9 +158,10 @@ export class SectorBuilder {
|
||||
rInner: number,
|
||||
rOuter: number,
|
||||
textRadialPosition: TextRadialPosition,
|
||||
sectorKey: string
|
||||
sectorKey: string,
|
||||
unitRatios?: number[]
|
||||
): TextUnit[] {
|
||||
const units = splitMultiTextUnits(content, aStart, aEnd, this.svgIconPath);
|
||||
const units = splitMultiTextUnits(content, aStart, aEnd, this.svgIconPath, unitRatios);
|
||||
|
||||
return units.map((unit, index) => {
|
||||
const layout = this.computeTextLayout(
|
||||
@@ -212,13 +230,21 @@ export class SectorBuilder {
|
||||
}
|
||||
|
||||
private shouldShowGroupSplit(layer: SectorLayerConfig, sectorIndex: number): boolean {
|
||||
// groupSplit 关闭时,仅保留分组边界线
|
||||
// `groupSplit` 关闭时,仅保留分组边界线
|
||||
if (layer.groupSplit !== false) return true;
|
||||
if (!layer.num) return true;
|
||||
|
||||
const cycleLength = layer.num + (layer.interval ?? 0);
|
||||
const posInCycle = sectorIndex % cycleLength;
|
||||
if (cycleLength <= 0) return true;
|
||||
const patternOffset = layer.patternOffset ?? 1;
|
||||
const offsetBase = Number.isFinite(patternOffset) ? Math.trunc(patternOffset) - 1 : 0;
|
||||
const normalizedOffset =
|
||||
layer.divisions > 0 ? ((offsetBase % layer.divisions) + layer.divisions) % layer.divisions : 0;
|
||||
const posInCycle =
|
||||
((sectorIndex - normalizedOffset) % cycleLength + cycleLength) % cycleLength;
|
||||
|
||||
return posInCycle >= layer.num - 1;
|
||||
// 仅保留分组边界:着色组起点 + 间隔组起点(若存在间隔)。
|
||||
if ((layer.interval ?? 0) === 0) return posInCycle === 0;
|
||||
return posInCycle === 0 || posInCycle === layer.num;
|
||||
}
|
||||
}
|
||||
|
||||
63
src/types.ts
63
src/types.ts
@@ -22,7 +22,7 @@ export interface Example {
|
||||
/**
|
||||
* JSON 配置根对象
|
||||
*/
|
||||
export interface LuopanConfig {
|
||||
export interface LuopanConfigBase<TLayer = LayerConfig> {
|
||||
name: string;
|
||||
description?: string;
|
||||
background: string;
|
||||
@@ -31,8 +31,13 @@ export interface LuopanConfig {
|
||||
strokeOpacity?: number;
|
||||
insetDistance?: number;
|
||||
outerRadius?: number;
|
||||
themeRef?: string;
|
||||
theme?: ThemeConfig;
|
||||
layers: TLayer[];
|
||||
}
|
||||
|
||||
export interface LuopanConfig extends LuopanConfigBase<LayerConfig> {
|
||||
theme: ThemeConfig;
|
||||
layers: LayerConfig[];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -43,6 +48,16 @@ export interface ThemeConfig {
|
||||
colorPalettes: Record<string, string>;
|
||||
}
|
||||
|
||||
export interface ThemeItem {
|
||||
name: string;
|
||||
colorPalettes: Record<string, string>;
|
||||
}
|
||||
|
||||
export interface ThemesConfig {
|
||||
default?: string;
|
||||
items: ThemeItem[];
|
||||
}
|
||||
|
||||
/**
|
||||
* 中心图标配置
|
||||
*/
|
||||
@@ -67,8 +82,15 @@ export interface DegreeRingConfig {
|
||||
majorTick: number;
|
||||
minorTick: number;
|
||||
microTick: number;
|
||||
tickColor: string;
|
||||
ringColor: string;
|
||||
tickColor?: string;
|
||||
ringColor?: string;
|
||||
colorRef?: string;
|
||||
}
|
||||
|
||||
export interface DegreeRingConfigInput
|
||||
extends Omit<DegreeRingConfig, 'rInner' | 'rOuter'> {
|
||||
rInner?: number;
|
||||
rOuter?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -82,20 +104,39 @@ export type LayerConfig =
|
||||
/**
|
||||
* 普通扇区层配置
|
||||
*/
|
||||
export interface SectorLayerConfig {
|
||||
interface SectorLayerBase {
|
||||
type?: 'sectors';
|
||||
divisions: number;
|
||||
rInner: number;
|
||||
rOuter: number;
|
||||
startAngle?: number;
|
||||
colorRef?: string;
|
||||
innerFill?: 0 | 1;
|
||||
unitRatios?: number[];
|
||||
num?: number;
|
||||
interval?: number;
|
||||
patternOffset?: number;
|
||||
groupSplit?: boolean;
|
||||
sectors?: SectorConfig[];
|
||||
}
|
||||
|
||||
export interface SectorLayerConfig extends SectorLayerBase {
|
||||
rInner: number;
|
||||
rOuter: number;
|
||||
layerHeight?: number;
|
||||
}
|
||||
|
||||
export interface SectorLayerConfigInput extends SectorLayerBase {
|
||||
rInner?: number;
|
||||
rOuter?: number;
|
||||
layerHeight?: number;
|
||||
}
|
||||
|
||||
export type LayerConfigInput =
|
||||
| SectorLayerConfigInput
|
||||
| CenterIconLayerConfig
|
||||
| DegreeRingLayerConfigInput;
|
||||
|
||||
export type LuopanConfigInput = LuopanConfigBase<LayerConfigInput>;
|
||||
|
||||
/**
|
||||
* 中心图标层配置
|
||||
*/
|
||||
@@ -110,6 +151,13 @@ export interface CenterIconLayerConfig {
|
||||
export interface DegreeRingLayerConfig {
|
||||
type: 'degreeRing';
|
||||
degreeRing: DegreeRingConfig;
|
||||
layerHeight?: number;
|
||||
}
|
||||
|
||||
// 扁平化输入:刻度环字段直接挂在层上。
|
||||
export interface DegreeRingLayerConfigInput extends DegreeRingConfigInput {
|
||||
type: 'degreeRing';
|
||||
layerHeight?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -171,6 +219,7 @@ export interface DegreeRingData {
|
||||
ticks: TickMark[];
|
||||
tickColor: string;
|
||||
ring: { rInner: number; rOuter: number; color: string; opacity: number };
|
||||
background?: { color: string; opacity: number };
|
||||
labels?: DegreeLabel[];
|
||||
}
|
||||
|
||||
|
||||
32
src/utils.ts
32
src/utils.ts
@@ -92,7 +92,7 @@ export function annularSectorCentroid(params: AnnularSectorParams): CentroidResu
|
||||
return { cx: 0, cy: 0, rho: 0, aMidDeg, aMidRad, deltaDeg };
|
||||
}
|
||||
|
||||
// rho = (2/3) * (r2^3 - r1^3)/(r2^2 - r1^2) * sinc(delta/2)
|
||||
// 形心径向距离公式:`rho = (2/3) * (r2^3 - r1^3)/(r2^2 - r1^2) * sinc(delta/2)`
|
||||
const delta = (deltaDeg * Math.PI) / 180;
|
||||
const radialFactor =
|
||||
(2 / 3) * ((rOuter ** 3 - rInner ** 3) / (rOuter ** 2 - rInner ** 2));
|
||||
@@ -124,7 +124,7 @@ export function annularSectorPath(
|
||||
let delta = a2 - a1;
|
||||
if (delta < 0) delta += 360;
|
||||
|
||||
// SVG arc flags
|
||||
// `SVG` 圆弧标记位
|
||||
const largeArc = delta > 180 ? 1 : 0;
|
||||
const sweepOuter = 1;
|
||||
const sweepInner = 0;
|
||||
@@ -134,7 +134,7 @@ export function annularSectorPath(
|
||||
const p3 = polarToXY(a2, rInner);
|
||||
const p4 = polarToXY(a1, rInner);
|
||||
|
||||
// 如果 rInner=0,内弧退化为点
|
||||
// 如果 `rInner`=0,内弧退化为点
|
||||
if (rInner <= 0.000001) {
|
||||
return [
|
||||
`M ${p1.x} ${p1.y}`,
|
||||
@@ -260,7 +260,7 @@ export function generateTextPath(
|
||||
}
|
||||
|
||||
// 不调整半径,保持在中线位置
|
||||
// 使用 dominant-baseline 属性来控制文字的垂直对齐
|
||||
// 使用 `dominant-baseline` 属性控制文字垂直对齐
|
||||
const adjustedRMid = rMid;
|
||||
|
||||
const a1 = normalizeDeg(aStartDeg);
|
||||
@@ -275,8 +275,8 @@ export function generateTextPath(
|
||||
|
||||
const largeArc = delta > 180 ? 1 : 0;
|
||||
|
||||
// 保持路径完整,不在这里应用 padding
|
||||
// padding 通过字体大小计算和 textPath 的 startOffset/text-anchor 来实现
|
||||
// 保持路径完整,不在这里应用内边距(`padding`)
|
||||
// 内边距(`padding`)通过字体大小计算以及 `textPath` 的 `startOffset`/`text-anchor` 实现
|
||||
|
||||
if (needReverse) {
|
||||
// 反向路径(从结束点到起始点),保持文字头朝外
|
||||
@@ -384,14 +384,14 @@ export function generateVerticalTextPath(
|
||||
const requiredPathLength =
|
||||
effectiveTextLength * TEXT_LAYOUT_CONFIG.CHAR_SPACING_RATIO * effectiveFontSize;
|
||||
|
||||
// 确保路径不超出扇区边界(考虑径向 padding)
|
||||
// 确保路径不超出扇区边界(考虑径向内边距 `padding`)
|
||||
const maxPathLength = radialHeight * TEXT_LAYOUT_CONFIG.RADIAL_PADDING_RATIO;
|
||||
const actualPathLength = Math.min(requiredPathLength, maxPathLength);
|
||||
|
||||
let finalStartR: number;
|
||||
let finalEndR: number;
|
||||
|
||||
// 对于从圆心开始的扇区(rInner=0),形心会偏向外侧
|
||||
// 对于从圆心开始的扇区(`rInner`=0),形心会偏向外侧
|
||||
// 需要特殊处理以防止溢出
|
||||
if (rInner === 0) {
|
||||
// 计算路径应该在哪里结束(从外圆向内)
|
||||
@@ -409,7 +409,7 @@ export function generateVerticalTextPath(
|
||||
finalEndR = rMid - halfPath;
|
||||
}
|
||||
} else {
|
||||
// 普通扇区:以 rMid 为中心
|
||||
// 普通扇区:以 `rMid` 为中心
|
||||
const halfPathLength = actualPathLength / 2;
|
||||
|
||||
// 确保不超出边界
|
||||
@@ -492,13 +492,13 @@ export function calculateSectorFontSize(
|
||||
const maxByHeight = availableHeight / (textLength * TEXT_LAYOUT_CONFIG.CHAR_SPACING_RATIO);
|
||||
|
||||
// 约束2:最内侧字符的弧长宽度(这是最严格的宽度限制)
|
||||
// 最内侧字符的中心位置大约在 rInner + fontSize/2 处
|
||||
// 最内侧字符的中心位置大约在 `rInner` + `fontSize`/2 处
|
||||
// 保守估计:假设字体大小约为径向宽度的一半
|
||||
const estimatedFontSize = radialWidth * 0.5;
|
||||
const innerMostRadius = rInner + estimatedFontSize / 2;
|
||||
const innerArcLength = (innerMostRadius * deltaDeg * Math.PI) / 180;
|
||||
|
||||
// 字符宽度约为 fontSize × 1.0(方块字)
|
||||
// 字符宽度约为 `fontSize` × 1.0(方块字)
|
||||
const availableArcLength = innerArcLength * TEXT_LAYOUT_CONFIG.TANGENT_PADDING_RATIO;
|
||||
const maxByWidth = availableArcLength / 1.0; // 单个字符宽度
|
||||
|
||||
@@ -515,11 +515,11 @@ export function calculateSectorFontSize(
|
||||
const maxByHeight = radialWidth * TEXT_LAYOUT_CONFIG.RADIAL_PADDING_RATIO;
|
||||
|
||||
// 2. 宽度约束:根据文字总宽度计算
|
||||
// 中文字符宽度 = fontSize(方块字)
|
||||
// 字符间距:约 0.1 * fontSize,总占用约 1.1 * fontSize
|
||||
// 中文字符宽度 = `fontSize`(方块字)
|
||||
// 字符间距:约 0.1 * `fontSize`,总占用约 1.1 * `fontSize`
|
||||
const availableArcLength = arcLength * TEXT_LAYOUT_CONFIG.TANGENT_PADDING_RATIO;
|
||||
|
||||
// 反推字体大小:fontSize = 可用弧长 / (字符数 × 1.1)
|
||||
// 反推字体大小:`fontSize` = 可用弧长 / (字符数 × 1.1)
|
||||
const maxByWidth = availableArcLength / (textLength * 1.1);
|
||||
|
||||
// 3. 取宽度和高度约束中较小的那个(更严格的限制)
|
||||
@@ -561,13 +561,13 @@ function calculateVerticalTextLength(
|
||||
// 计算径向可用高度
|
||||
const radialHeight = rOuter - rInner;
|
||||
|
||||
// 考虑上下padding,可用高度约为总高度的配置比例
|
||||
// 考虑上下内边距(`padding`),可用高度约为总高度的配置比例
|
||||
const availableHeight = radialHeight * TEXT_LAYOUT_CONFIG.RADIAL_PADDING_RATIO;
|
||||
|
||||
// 计算可以容纳的字符数
|
||||
const maxFittableChars = Math.floor(availableHeight / (fontSize * TEXT_LAYOUT_CONFIG.CHAR_SPACING_RATIO));
|
||||
|
||||
// 限制在 [MIN_CHARS, MAX_CHARS] 范围内
|
||||
// 限制在 [`MIN_CHARS`, `MAX_CHARS`] 范围内
|
||||
const charCount = Math.max(MIN_CHARS, Math.min(MAX_CHARS, maxFittableChars));
|
||||
|
||||
return charCount;
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { mount } from '@vue/test-utils';
|
||||
import Luopan from '../src/Luopan.vue';
|
||||
import type { LuopanConfig } from '../src/types';
|
||||
import type { LuopanConfigInput } from '../src/types';
|
||||
|
||||
const flushPromises = () => new Promise((resolve) => setTimeout(resolve, 0));
|
||||
|
||||
const baseConfig: LuopanConfig = {
|
||||
const baseConfig: LuopanConfigInput = {
|
||||
name: '测试配置',
|
||||
background: '#000000',
|
||||
theme: {
|
||||
@@ -26,7 +26,6 @@ const baseConfig: LuopanConfig = {
|
||||
},
|
||||
{
|
||||
type: 'degreeRing',
|
||||
degreeRing: {
|
||||
rInner: 90,
|
||||
rOuter: 100,
|
||||
showDegree: 1,
|
||||
@@ -40,7 +39,6 @@ const baseConfig: LuopanConfig = {
|
||||
tickColor: '#ffffff',
|
||||
ringColor: '#ffffff',
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 'centerIcon',
|
||||
centerIcon: {
|
||||
|
||||
@@ -27,18 +27,47 @@ describe('colorResolver', () => {
|
||||
expect(map.has(5)).toBe(false);
|
||||
});
|
||||
|
||||
it('resolveLayerColors 仅在提供 colorRef 与 num 时生效', () => {
|
||||
it('applyPatternColoring 应支持规律填色偏移', () => {
|
||||
const map = applyPatternColoring(6, '#111111', 2, 1, 2);
|
||||
expect(map.has(0)).toBe(false);
|
||||
expect(map.has(1)).toBe(true);
|
||||
expect(map.has(2)).toBe(true);
|
||||
expect(map.has(3)).toBe(false);
|
||||
expect(map.has(4)).toBe(true);
|
||||
expect(map.has(5)).toBe(true);
|
||||
});
|
||||
|
||||
it('resolveLayerColors 在提供 colorRef 且无 num 时覆盖全部扇区', () => {
|
||||
const resolver = new ColorResolver(theme, '#000000');
|
||||
const layer: SectorLayerConfig = {
|
||||
divisions: 4,
|
||||
rInner: 0,
|
||||
rOuter: 10,
|
||||
colorRef: '火',
|
||||
};
|
||||
const map = resolver.resolveLayerColors(layer);
|
||||
expect(map.size).toBe(4);
|
||||
expect(map.get(0)).toBe('#E53935');
|
||||
expect(map.get(3)).toBe('#E53935');
|
||||
});
|
||||
|
||||
it('resolveLayerColors 在提供 num 时使用规律填色', () => {
|
||||
const resolver = new ColorResolver(theme, '#000000');
|
||||
const layer: SectorLayerConfig = {
|
||||
divisions: 6,
|
||||
rInner: 0,
|
||||
rOuter: 10,
|
||||
colorRef: '火',
|
||||
num: 2,
|
||||
interval: 1,
|
||||
};
|
||||
const map = resolver.resolveLayerColors(layer);
|
||||
expect(map.size).toBe(3);
|
||||
expect(map.has(0)).toBe(true);
|
||||
expect(map.has(1)).toBe(true);
|
||||
expect(map.has(2)).toBe(false);
|
||||
expect(map.has(3)).toBe(true);
|
||||
expect(map.has(4)).toBe(true);
|
||||
expect(map.has(5)).toBe(false);
|
||||
});
|
||||
|
||||
it('resolveSectorColor 应遵循 sector > layer > background 优先级', () => {
|
||||
|
||||
@@ -22,13 +22,14 @@ describe('configParser', () => {
|
||||
|
||||
expect(config.name).toBe('demo');
|
||||
expect(config.layers.length).toBeGreaterThan(0);
|
||||
expect(config.theme.colorPalettes['木']).toBe('#43A047');
|
||||
expect(config.themeRef).toBe('五行配色主题');
|
||||
expect(config.theme).toBeUndefined();
|
||||
expect(config.layers.some((layer) => layer.type === 'centerIcon')).toBe(true);
|
||||
expect(config.layers.some((layer) => layer.type === 'degreeRing')).toBe(true);
|
||||
});
|
||||
|
||||
it('缺少必填字段时应抛错', () => {
|
||||
const raw = '{ "background": "#000", "theme": { "colorPalettes": {} }, "layers": [] }';
|
||||
const raw = '{ "background": "#000", "layers": [] }';
|
||||
expect(() => parseConfig(raw)).toThrow('name 为必填字符串');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -20,6 +20,16 @@ describe('multiTextParser', () => {
|
||||
expect(units[1].isSvg).toBe(false);
|
||||
});
|
||||
|
||||
it('应支持自定义 unitRatios', () => {
|
||||
const units = splitMultiTextUnits('甲|乙|丙', 0, 100, 'src/assets/icons', [0.2, 0.3, 0.5]);
|
||||
expect(units[0].aStart).toBe(0);
|
||||
expect(units[0].aEnd).toBe(20);
|
||||
expect(units[1].aStart).toBe(20);
|
||||
expect(units[1].aEnd).toBe(50);
|
||||
expect(units[2].aStart).toBe(50);
|
||||
expect(units[2].aEnd).toBe(100);
|
||||
});
|
||||
|
||||
it('空内容应返回空数组', () => {
|
||||
expect(splitMultiTextUnits('', 0, 60)).toEqual([]);
|
||||
});
|
||||
|
||||
@@ -61,6 +61,25 @@ describe('sectorBuilder', () => {
|
||||
expect(sectors[2].groupSplitVisible).toBe(true);
|
||||
});
|
||||
|
||||
it('groupSplit=false 时应受 patternOffset 影响', () => {
|
||||
const resolver = new ColorResolver(theme, '#000000');
|
||||
const builder = new SectorBuilder(resolver);
|
||||
const baseLayer: SectorLayerConfig = {
|
||||
divisions: 4,
|
||||
rInner: 0,
|
||||
rOuter: 10,
|
||||
num: 2,
|
||||
interval: 1,
|
||||
groupSplit: false,
|
||||
};
|
||||
|
||||
const baseSectors = builder.buildLayer(baseLayer, 0);
|
||||
const offsetSectors = builder.buildLayer({ ...baseLayer, patternOffset: 2 }, 0);
|
||||
|
||||
expect(baseSectors[1].groupSplitVisible).toBe(false);
|
||||
expect(offsetSectors[2].groupSplitVisible).toBe(false);
|
||||
});
|
||||
|
||||
it('应生成多文本单元并按角度分配', () => {
|
||||
const resolver = new ColorResolver(theme, '#000000');
|
||||
const builder = new SectorBuilder(resolver);
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { ref } from 'vue';
|
||||
import { useLuopan } from '../src/composables/useLuopan';
|
||||
import type { LuopanConfig, TextRadialPosition } from '../src/types';
|
||||
import type { LuopanConfigInput, TextRadialPosition } from '../src/types';
|
||||
|
||||
const createMockConfig = (): LuopanConfig => ({
|
||||
const createMockConfig = (): LuopanConfigInput => ({
|
||||
name: '测试配置',
|
||||
background: '#000000',
|
||||
theme: {
|
||||
|
||||
@@ -135,7 +135,7 @@ describe('annularSectorPath', () => {
|
||||
|
||||
it('应该在大角度时设置 large-arc-flag', () => {
|
||||
const path = annularSectorPath(50, 100, 0, 270);
|
||||
// 大角度应包含 large-arc-flag = 1
|
||||
// 大角度应包含 `large-arc-flag` = 1
|
||||
expect(path).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
||||
42
todolist.md
42
todolist.md
@@ -14,6 +14,8 @@
|
||||
5. Json中不用关注是第几层,按配置的rinner,router等参数绘制即可。
|
||||
6. 在json中增加全局中定义strokeWidth,strokeColor,strokeOpacity, 如在json中定义,覆盖constants中SECTOR_STROKE_WIDTH,和stroke,如json每定义,使用代码中默认。颜色可以使用colorPalettes中定义的颜色,background也可以使用colorPalettes定义的颜色。
|
||||
7. 需求:json中配置的背景色,只对罗盘区域着色
|
||||
8. 收集五行、生肖,八卦、64卦、星座、洛书等svg到icon下的指定文件夹。可以从iconfront下找。
|
||||
|
||||
## Json文件配置
|
||||
### json字段配置说明
|
||||
|
||||
@@ -26,12 +28,12 @@
|
||||
| strokeWidth | number | 否 | 扇区边界线宽度(像素),覆盖默认值 | 0.3 |
|
||||
| strokeColor | string | 否 | 扇区边界线颜色(支持十六进制或 colorPalettes 名称) | "#1f2937" |
|
||||
| strokeOpacity | number | 否 | 扇区边界线透明度(0.0-1.0) | 0.15 |
|
||||
| outerRadius | number | 是 | 罗盘外半径,单位:像素(去掉该参数,自动计算最大半径) | 500 |
|
||||
| outerRadius | number | 否 | 可选兜底外半径,未提供时使用 layers 中最大 rOuter(含 degreeRing) | 500 |
|
||||
| theme | object | 是 | 主题配置对象,包含colorPalettes命名配色方案 | 见下方theme说明 |
|
||||
| centerIcon | object | 否 | 中心图标配置 | 见下方centerIcon说明 |
|
||||
| degreeRing | object | 否 | 360度刻度环配置 | 见下方degreeRing说明 |
|
||||
| layers | array | 是 | 层配置数组,从内向外定义每一层 | 见下方layers说明 |
|
||||
|
||||
说明:centerIcon 与 degreeRing 通过 layers 中的 type=centerIcon / degreeRing 配置。
|
||||
|
||||
**theme对象参数:**
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|
||||
|--------|------|------|------|------|
|
||||
@@ -69,9 +71,10 @@
|
||||
| rOuter | number | 是 | 层外半径,单位:像素 | 200 |
|
||||
| startAngle | number | 否 | 第一个扇区的起始角度(度,0度为正北,顺时针),默认0 | 0 |
|
||||
| colorRef | string | 否 | 层级颜色引用,引用theme.colorPalettes中的颜色名 | "土" |
|
||||
| innerFill | number | 否 | 内缩设置:0=不内缩,1=内缩1像素,用于规律填色的扇区 | 1 |
|
||||
| innerFill | number | 否 | 内缩设置:0=不内缩,1=内缩1像素 | 1 |
|
||||
| num | number | 否 | 规律填色:连续着色的扇区数量,与interval配合使用 | 3 |
|
||||
| interval | number | 否 | 规律填色:着色后间隔的扇区数量,0表示无间隔 | 1 |
|
||||
| patternOffset | number | 否 | 规律填色起始偏移(扇区序号,从1开始),默认1 | 2 |
|
||||
| groupSplit | boolean | 否 | 是否显示同组扇区间分割线,false隐藏,默认true | false |
|
||||
| sectors | array | 否 | 扇区配置数组,可省略表示该层只有填色无内容 | 见下方sectors说明 |
|
||||
|
||||
@@ -87,18 +90,27 @@
|
||||
- 1个单元:100%;2个:[0.5, 0.5];3个:[0.25, 0.5, 0.25];4个:[0.2, 0.3, 0.3, 0.2];5个以上:平均
|
||||
- 单元内自动计算字体大小,单元间无分割线
|
||||
|
||||
### 扇区内缩规则
|
||||
innerFill表示扇区内缩,可能在layer或者sector。layer中配置作用于整个层,sector配置作用于单个扇区。当innerfill=1,内缩1px。
|
||||
内缩块的填色规则与不内缩相同,内缩块边界和扇区边界之间的区域填白色。
|
||||
如果同某个layer指定了inner Fill,该layer下的某sector中也指定了innerFill,且两者不同,以sector innerFill为准。也就是说sector配置可以对layer配置做修正。
|
||||
sector innerFill > layer innerFill
|
||||
|
||||
### 扇区背景色着色原则:
|
||||
最高优先级,在layer中指定colorRef
|
||||
第二优先级:colorRef规律填色,也就是说,如果同一个sector中指定了colorRef,该sector也指定了layer级别的colorRef,以前者为准,innerFill使用相同规则。
|
||||
colorRef可能在layer或者sector。
|
||||
如果同一个sector中指定了colorRef,该sector也指定了layer级别的colorRef,以sector的colorRef为准。
|
||||
sector colorRef > layer colorRef > 全局background颜色
|
||||
参数:
|
||||
startAngle表示第一个扇区的起始角度(以度为单位,0度为正北方向,顺时针增加)
|
||||
innerfill对num、interval定义的着色扇区生效
|
||||
-- start表示着色起始扇区(已废弃,统一从第1个扇区开始)
|
||||
innerfill仅对num/interval定义的着色扇区生效(目前layer中的innerFill对所有sector生效,暂保持这个逻辑)
|
||||
patternOffset表示规律填色起始偏移(扇区序号,从1开始,默认1),未指定时与startAngle对齐,即从第一个扇区开始着色
|
||||
num表示连接几个单元着色
|
||||
interval表示中间间隔几个单元
|
||||
比如num=3,interval=1,意思是从第1个扇区开始着色,对1、2、3扇区着色colorref,4扇区全局背景,5、6、7着色colorref……
|
||||
groupSplit: 隐藏同组扇区之间的分割线, false表示不显示group中间分割线。如该参数不设置,取默认值true,显示。
|
||||
|
||||
规律填色有个特殊情况,divisions mod (num+interval) 不等于 0,比如divisions=16,num=2,interval=1,16mod3=1,多出来的1个应该使用num同样的colorRef和innerFill设定。
|
||||
|
||||
”layers“:
|
||||
{
|
||||
-- ========================================
|
||||
@@ -114,7 +126,7 @@
|
||||
"startAngle": 0, -- 第一个扇区的起始角度(度,0度为正北方向,顺时针)
|
||||
"innerFill": 1, -- 着色区域的内缩设置
|
||||
"colorRef": "土", -- 着色使用的颜色引用
|
||||
-- "start": 1, -- 从第1个扇区开始着色(已废弃,统一从第1个扇区开始)
|
||||
-- "patternOffset": 2, -- 第一个着色单元偏移1个扇区(可选)
|
||||
"num": 3, -- 连续着色3个扇区
|
||||
"interval": 1, -- 着色后间隔1个扇区
|
||||
"sectors": [
|
||||
@@ -125,11 +137,11 @@
|
||||
{ "content": "辰" },
|
||||
{ "content": "巳", "colorRef": "火", "innerFill": 1 }, -- 高优先级着色:火
|
||||
{ "content": "午", "colorRef": "火", "innerFill": 0 }, -- 高优先级着色:火
|
||||
{ "content": "未", "innerFill": 1 },
|
||||
{ "content": "未", "innerFill": 1 }, -- 只要 layer 配了 colorRef,所有未指定 sector.colorRef 的扇区都用 layer 颜色
|
||||
{ "content": "申", "colorRef": "金", "innerFill": 0 }, -- 高优先级着色:金
|
||||
{ "content": "酉", "colorRef": "金", "innerFill": 1 }, -- 高优先级着色:金
|
||||
{ "content": "戌" },
|
||||
{ "content": "亥", "innerFill": 0 }
|
||||
{ "content": "亥", "innerFill": 0 } -- 只要 layer 配了 colorRef,所有未指定 sector.colorRef 的扇区都用 layer 颜色
|
||||
]
|
||||
},
|
||||
-- ========================================
|
||||
@@ -183,11 +195,16 @@
|
||||
-- ========================================
|
||||
-- 中心图标配置 (Center Icon Configuration)
|
||||
-- ========================================
|
||||
{
|
||||
"type": "centerIcon",
|
||||
"centerIcon": {
|
||||
"rIcon": 50, -- 图标半径,单位:像素
|
||||
"opacity": 0.8, -- 图标透明度(0.0-1.0,0为完全透明,1为完全不透明)
|
||||
"name": "centericon.svg" -- SVG图标文件名,路径固定为 src/assets/icons/ 目录
|
||||
}
|
||||
}
|
||||
|
||||
注意:json中如配置了centerIcon,作为第一层。
|
||||
|
||||
### 360度刻度环配置参数:
|
||||
rinner
|
||||
@@ -199,6 +216,8 @@
|
||||
-- ========================================
|
||||
-- 360度刻度环配置 (360 Degree Scale Ring)
|
||||
-- ========================================
|
||||
{
|
||||
"type": "degreeRing",
|
||||
"degreeRing": {
|
||||
"rInner": 350, -- 刻度环内半径
|
||||
"rOuter": 380, -- 刻度环外半径
|
||||
@@ -213,3 +232,4 @@
|
||||
"tickColor": "#000000",-- 刻度线颜色
|
||||
"ringColor": "#000000" -- 圆环颜色
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,4 +3,7 @@ import vue from '@vitejs/plugin-vue';
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [vue()],
|
||||
server: {
|
||||
allowedHosts: ['mac.biboer.cn'],
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user