前端使用 Konva 实现可视化设计器(23)- 绘制曲线、属性面板

本章分享一下如何使用 Konva 绘制基础图形:曲线,以及属性面板的基本实现思路,希望大家继续关注和支持哈(多求 5 个 Stars 谢谢)!

请大家动动小手,给我一个免费的 Star 吧~

大家如果发现了 Bug,欢迎来提 Issue 哟~

github源码

gitee源码

示例地址

绘制曲线

先上效果!

在这里插入图片描述

这里其实取巧了哈,基本就是在绘制折线的基础上,给 Konva.Line 添加一个关键的属性 tension 即可,参照官方示例

在这里插入图片描述

未来,在属性面板中,可以调节 tension 的值,基本可以实现绘制一些简单的曲线。

属性面板

早些时候,已经有小伙伴问,外部如何动态调整 Konva 内部各对象的一些特性,这里以页面的背景色、全局线条和填充颜色,及其素材各自的线条和填充颜色为例,分享一个基本可行实现思路是如何的。

这里以 svg 素材为例,可以调整 svg 素材的线条、填充颜色。

基本交互

在这里插入图片描述

UI

这里简单粗暴一些,使用 naive-ui 的组件组装一下就可以了:

<!-- src/App.vue -->

      <n-tabs type="line" size="small" animated v-model:value="tabCurrent">
        <n-tab-pane name="page" tab="页面">
          <n-form ref="formRef" :model="pageSettingsModel" :rules="{}" label-placement="top" size="small"
            v-if="pageSettingsModel">
            <n-form-item label="背景色" path="background">
              <n-color-picker v-model:value="pageSettingsModelBackground" @update:show="(v: boolean) => {
                pageSettingsModel && !v && (pageSettingsModelBackground = pageSettingsModel.background)
              }" :actions="['clear', 'confirm']" show-preview
                @confirm="(v: string) => { pageSettingsModel && (pageSettingsModel.background = v) }"
                @clear="pageSettingsModel && (pageSettingsModel.background = Render.PageSettingsDefault.background)"></n-color-picker>
            </n-form-item>
            <n-form-item label="线条颜色" path="stroke">
              <n-color-picker v-model:value="pageSettingsModelStroke" @update:show="(v: boolean) => {
                pageSettingsModel && !v && (pageSettingsModelStroke = pageSettingsModel.stroke)
              }" :actions="['clear', 'confirm']" show-preview
                @confirm="(v: string) => { pageSettingsModel && (pageSettingsModel.stroke = v) }"
                @clear="pageSettingsModel && (pageSettingsModel.stroke = Render.AssetSettingsDefault.stroke)"></n-color-picker>
            </n-form-item>
            <n-form-item label="填充颜色" path="fill">
              <n-color-picker v-model:value="pageSettingsModelFill" @update:show="(v: boolean) => {
                pageSettingsModel && !v && (pageSettingsModelFill = pageSettingsModel.fill)
              }" :actions="['clear', 'confirm']" show-preview
                @confirm="(v: string) => { pageSettingsModel && (pageSettingsModel.fill = v) }"
                @clear="pageSettingsModel && (pageSettingsModel.fill = Render.AssetSettingsDefault.fill)"></n-color-picker>
            </n-form-item>
          </n-form>
        </n-tab-pane>
        <n-tab-pane name="asset" tab="素材" :disabled="assetCurrent === void 0">
          <n-form ref="formRef" :model="assetSettingsModel" :rules="{}" label-placement="top" size="small"
            v-if="assetSettingsModel">
            <n-form-item label="线条颜色" path="stroke" v-if="assetCurrent?.attrs.imageType === Types.ImageType.svg">
              <n-color-picker v-model:value="assetSettingsModelStorke" @update:show="(v: boolean) => {
                assetSettingsModel && !v && (assetSettingsModelStorke = assetSettingsModel.stroke)
              }" :actions="['clear', 'confirm']" show-preview
                @confirm="(v: string) => { assetSettingsModel && (assetSettingsModel.stroke = v) }"
                @clear=
### 空间填充曲线概述 空间填充曲线是一种能够遍历多维空间内所有点的一维连续映射。这类曲线广泛应用于计算机图形学、数据索引等领域,因其能有效地减少维度带来的复杂度并保持局部性特征。 #### 定义与特性 最著名的空间填充曲线包括希尔伯特曲线和皮亚诺曲线。这些曲线的特点是在不交叉的情况下尽可能紧密地覆盖整个平面或更高维度的空间[^1]。具体来说: - **连贯性和局部性**:相邻的点在曲线上也倾向于彼此靠近; - **递归性质**:可以通过迭代细分来构造更复杂的路径; #### 实现方式 以希尔伯特曲线为例,其生成过程可以描述如下: ```cpp // C++代码片段用于生成二维Hilbert Curve坐标序列 #include <iostream> using namespace std; void hilbert(int x, int y, int lg, int n, char a, char b) { if (lg == 0) return; hilbert(x, y, lg - 1, n, b, a); cout << "(" << ((x += n >> lg) & -(n >> lg)) << ", " << ((y += n >> lg) & -(n >> lg)) << ")" << endl; hilbert(x, y, lg - 1, n, a, b); } int main(){ const int N = 8; // 假定网格大小为N*N hilbert(0, 0, 3, N, 'A', 'B'); } ``` 此程序展示了如何通过递归来创建一个简单的希尔伯特曲线实例,并打印出相应的坐标点。 #### 应用场景 - **图像处理**:可用于纹理合成、压缩编码等方面; - **数据库管理**:作为高效访问高维数据的方法之一,在地理信息系统(GIS)中有重要用途; - **网络布局优化**:帮助设计紧凑型电路板布线方案等工程问题解决策略[^2]; #### 数据结构支持 为了更好地表示和操作空间填充曲线,通常会采用树状或其他层次化的数据结构来进行管理和查询加速。例如四叉树(Quadtree),它非常适合于存储二维平面上的对象集合以及执行快速范围查找操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值