# curve **Repository Path**: thewon/curve ## Basic Information - **Project Name**: curve - **Description**: 曲线编辑器 - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-01 - **Last Updated**: 2024-04-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # curve #### 介绍 曲线编辑器。 #### 功能列表 1. 新建,打开,关闭,保存,历史打开记录。 2. 复制,粘贴,剪切,删除,增加曲线。 3. 撤消、重做操作。 4. 选中某段曲线,修改编辑某段曲线参数。 5. 缩放:以鼠标光标位置为中心,滚动鼠标滚轮进行缩放,或者以坐标系中心点为中心,“Ctrl++”“Ctrl+-”进行缩放。选择坐标轴,进行纵向(或横向)单向缩放。 6. 移动:鼠标拖动坐标轴移动曲线,或者使用快捷键“Ctrl+Left”“Ctrl+Right”“Ctrl+Up”“Ctrl+Down”移动视窗。鼠标拖动曲线编辑区移动曲线视窗。 7. 修改采样率,添加 note 信息。 8. 显示某段曲线的点数、起止点坐标等。 9. 显示总点数以及总周期。 10. 打开、关闭网格显示。 11. 打开、关闭 Markup 显示,添加 Markup,清理所有 Markup。 12. 手绘任意曲线,任意编辑任一段曲线或某一点值。 13. 曲线变型,将任一段非 Random 曲线变型为 Random 曲线(Random 曲线不支持二次转换)。 14. 分割曲线,支持将任意曲线进行分割,目前分割后两段曲线都会变成 Random 类型,暂时不支持分割成原曲线类型。 15. Home 页面显示 Recent Files 列表,快捷打开 16. 特征点编辑,除了 “Formula” 曲线之外,其它曲线均已经实现特征点编辑。 17. 打印。打印到单页,打印到多页,选择打印页范围。 18. 打印页预览。 19. 导出到 pdf 文件(直接导出,不需要借助打印机驱动)。 #### 使用说明 ##### 编辑数学公式 添加 Formula 曲线,鼠标左键选中新加的曲线,然后在属性编辑浮动窗口内,找到 formula 文本输入框,输入一个有效的数学公式(避免公式计算中出现极大值或者极小值等非法数值),按回车生效。 ##### 修改采样率 在项目属性浮动窗口内,找到采样率,编辑采样率的文本,按回车生效。 ##### 添加项目备注信息 在项目属性浮动窗口内,在 Note 文本输入框内,输入项目的一些介绍或者说明。 ##### 点编辑 鼠标左键选中编辑目标曲线,按下 Shift 键,鼠标光标变成十字线后移动鼠标到目标位置,按下鼠标左键并移动鼠标,十字线经过的地方的值将被修改。释放 Shift 键或者释放鼠标左键,结束编辑。 ##### 转换成 Random 曲线 首先,选中某段曲线,按下鼠标右键,弹出右键菜单,单击 “ToRandom” 菜单项;或者,点击菜单栏 “Curves” “ToRandom” 菜单项。或者在 “Object Inspector” 浮动窗口按下鼠标右键,弹出右键菜单,单击 “ToRandom” 菜单项。 ##### 分割曲线 首先,选中某段曲线,按下鼠标右键,弹出右键菜单,单击 “Split” 菜单项。弹出分割位置输入对话框,输入分割位置值,然后点确认。 ##### 添加 Markup 首先,使用快捷键 “Ctrl+M” 或者点击菜单 “View” 菜单项 “Markup” 启用标记功能,移动鼠标到目标位置,按下快捷键 “Ctrl+L” 或者按下 “Ctrl” 键的同时点击鼠标左键,将在鼠标所在位置添加一个 Markup 。 #### 支持的曲线类型 | 线型 | 名称 | 说明 | | :------: | :--------: | :----------------------------------------------------------- | | 随机点 | Random | 指定N个点组成的点序列,任意点的值不超过一个幅度值。 | | 点 | Point | 只有一个点,且这个点只有一个参数——值,值可正可负。 | | 直线 | Line | 一断直线段,由斜率、时长、偏移三个值确定线段。 | | 正弦 | Sine | 正弦曲线,包含幅度、频率、起始相位、终止相位、偏移等参数。 | | PWM方波 | Square | -100% -- 100% 可调制波型,幅度可正可负。 | | 脉冲 | Pulse | 可调宽度的脉冲,脉冲固定出现在曲线的中间位置,幅度可正可负。 | | 三角 | Triangular | 上升沿时间可调,幅度可正可负。 | | 贝塞尔 | Bezier | 由起止两个点以及一个控制点决定的一段曲线。 | | 数学公式 | Formula | 数学表达式生成的曲线。 | #### 数学公式内置变量 | 名称 | 值 | | :----: | :--------------------: | | e | 2.7182818284590452354 | | Log2e | 1.4426950408889634074 | | Log10e | 0.43429448190325182765 | | Ln2 | 0.69314718055994530942 | | Ln10 | 2.30258509299404568402 | | Pi | 3.14159265358979323846 | | Sqrt2 | 1.41421356237309504880 | #### 数学公式支持运算符(函数) | 运算符(函数) | 说明 | | :------------: | ------------------------------------- | | +,-,*,/,% | 加、减、乘、除、取模 | | ^ | 求幂(pow 函数) | | | | | sin() | 正弦函数 | | cos() | 余弦函数 | | tan() | 正切函数 | | asin() | 反正弦函数 | | acos() | 反余弦函数 | | atan() | 反正切函数 | | sqrt() | 开方函数 | | exp() | 求指数函数 | | abs() | 取绝对值 | | ceil() | 向上取整函数 | | floor() | 向下取整函数 | | log() | 求对数函数 | | pow() | 求幂 | | rand() | rand(x) 求一个 [-x, x] 区间内的随机数 | #### 几种曲线叠加方式 - 直线、正弦、方波、脉冲、三角、贝塞尔曲线,支持在原曲线上叠加一个随机的任意噪声。 - 数学公式可以使用 rand() 函数叠加一个随机的噪声曲线。 #### 快捷键汇总 | 组合键 | 功能描述 | | :----------------: | :------------------------: | | Ctrl+N | 新建空白工程 | | Ctrl+O | 打开已有工程文件 | | Ctrl+S | 保存当前工程文件修改 | | Ctrl+Shift+S | 保存所有工程文件修改 | | Ctrl+F4 | 关闭当前工程 | | Ctrl+W | 关闭当前工程 | | Ctrl+Shift+W | 关闭所有工程 | | Alt+F4 | 退出软件 | | Ctrl+Z | 撤消 | | Ctrl+Y | 重做 | | Ctrl+Shift+Z | 重做 | | Ctrl+X | 剪切 | | Ctrl+C | 复制 | | Ctrl+V | 粘贴(在当前选中之后插入) | | Ctrl+Shift+V | 粘贴(在当前选中之前插入) | | Del | 删除 | | Ctrl+G | 显示网格 | | Ctrl+M | 显示 Markup | | Ctrl+L | 添加 Markup | | Ctrl+Shift+L | 清除所有 Markup | | Ctrl++ | 放大显示 | | Ctrl+- | 缩小显示 | | Ctrl+Left键 | 向左移动视窗 | | Ctrl+Right键 | 向右移动视窗 | | Ctrl+Up箭 | 向上移动视窗 | | Ctrl+Down箭 | 向下移动视窗 | | Ctrl+Tab | 切换到下一个项目文件 | | Ctrl+Shift+BackTab | 切换到上一个项目文件 | | Shift+鼠标左键 | 编辑当前曲线段(点编辑) | #### 部分演示动图 1. 打开,新建 ![record1](./features/record-1.gif) 2. 修改曲线段属性 ![record2](./features/record-2.gif) 3. 编辑任意数学公式 ![record3](./features/record-3.gif) 4. 缩放 ![record4](./features/record-4.gif) 5. 缩放和移动 ![record5](./features/record-5.gif) 6. 点编辑 ![record6](./features/record-6.gif) 7. 特征点编辑 ![record7](./features/record-7.gif) 8. 特征点编辑 ![record8](./features/record-8.gif) #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### Todo List - [x] 点编辑,修改某些点的值(目前,为了控制编辑范围,仅限于修改当前选中的某段,未选中段不担心被手抖意外修改); - [x] 添加贝塞尔曲线; - [x] 添加数学公式,生成曲线; - [x] 实现缩放和xy平移;横向(或纵向)独立缩放; - [x] 添加 Markup 标记; - [x] 任一个非 Random 曲线转换成 Random 曲线; - [x] Home 页添加历史文件记录链接 - [x] File 菜单的最近打开记录添加清理菜单。 - [x] 鼠标左键拖动曲线编辑区,移动视窗。 - [x] 特征点编辑,通过鼠标拖动特征点来改变曲线参数(例如正弦曲线的幅度、周期,贝塞尔曲线的控制点); - [x] 添加打印功能,打印页预览; - [x] 导出到 pdf 文档; - [ ] 插入点的选择(插入之前或插入之后)(**放弃**); - [ ] 拷贝某一段的值,插入一段值(**放弃**)。