96SEO 2026-02-19 22:49 7
通过制作简易的该曲线图形编辑器Demo实现类似于Maya软件中的动画曲线编辑的功能。

在指定的时间轴上插入关键帧设置拖动该关键点来编辑曲线数据。
编辑好的数据导出保存在TXT文本中同时曲线编辑器也可以读取之前导出的TXT文本数据再继续进行编辑。
5任意位置添加关键帧、对关键帧数据插值得到曲线、曲线数据导出和导入
https://download.csdn.net/download/panjinliang066333/88112693
https://download.csdn.net/download/panjinliang066333/88103699
①添加pictureBox1图形控件作为曲线图形显示面板添加hHScrollBarX、VScrollBarY控件作为显示面板水平方向、竖直方向移动。
②添加3个Button按钮用作图形面板放大、缩小、和恢复正常。
④添加Label控件用于显示当前鼠标所在曲线图形面板中的坐标位置。
dataF.Length){hScrollBarX.Maximum
(int)xLineDatas.Max();}else{hScrollBarX.Maximum
!checkSpline1Show.Checked;timer1.Start();cureDraw
pictureBox1.Width);DrawCure();}
pictureBox1.Height;cureDraw.Width
pictureBox1.Width;}pictureBox1.Image
cureDraw为自定义封装的类SplineEdit实例对象。
(即在objBitmap对象中画图)//根据给定颜色(LightGray)填充图像的矩形区域
//画边框graphics.FillRectangle(new
//填充边框//画X轴,注意图像的原始X轴和Y轴计算是以左上角为原点向右和向下计算的xAxisPoint1.X
xAxisPoint1.Y;graphics.DrawLine(new
xAxisPoint2);//画Y轴yAxisPoint1.X
yAxisPoint2);//2、面板标题//graphics.DrawString(曲线编辑器,
SolidBrush(Color.Black));penDashed.DashStyle
i){//X轴刻度虚线graphics.DrawLine(penDashed,
xStr.Length;graphics.DrawString(xStr,
ySliceBegin));}//Y轴虚线、刻度文字-正半轴for
i){graphics.DrawLine(penDashed,
ySliceBegin));//Y轴刻度值标识文字string
ySliceBegin));}//Y轴虚线、刻度文字-负半轴for
i){graphics.DrawLine(penDashed,
ySliceBegin));//Y轴刻度值标识文字string
yStr.Length;graphics.DrawString(yStr,
ySliceBegin));}//4、原点刻度说明graphics.DrawString(0,
分别添加hScrollBarX_ValueChanged、vScrollBarY_ValueChanged控件事件函数
hScrollBarX_ValueChanged(object
cureDraw.XSliceValue;Invalidate();
vScrollBarY_ValueChanged(object
cureDraw.YSliceValue;Invalidate();
cureDraw.XSliceBeginX轴数值0点在屏幕起始像素位置
cureDraw.YSliceBeginY轴数值0点在屏幕起始像素位置
分别添加按钮事件函数btnScaleBigger_Click、btnScaleSmaller_Click、btnReset_Click
①控件pictureBox1上添加pictureBox1_MouseMove事件函数
//鼠标在pictureBox1中Y轴坐标值fMouseToValueX
cureDraw.MousePosToValue_X(ex);mouseToValueX
(int)Math.Round(cureDraw.MousePosToValue_X(ex));mouseToValueY
cureDraw.MousePosToValue_Y(ey);if
mouseToValueY.ToString();labMousePos.Location
mouseToValueY.ToString();labMousePos.Location
②cureDraw.MousePosToValue_X鼠标在pictureBox1面板上X轴的像素值转换为坐标系X轴的值
③cureDraw.MousePosToValue_Y鼠标在pictureBox1面板上Y轴的像素值转换为坐标系Y轴的值
曲线1显示函数需要分别提供X轴、Y轴的坐标位置数组且两个数组长度必须相等
曲线2显示函数只需要曲线Y轴上位置数组。
(数据的长度即为X轴数据)
分别添加曲线1按钮、曲线2按钮事件函数btnDrawSpline1_Click、btnDrawSpline2_Click
checkSpline1Show.Checked;//1、生成sin曲线保存x、y坐标位置for
分别添加曲线1、曲线2显示复选框事件函数heckSpline1Show_CheckedChanged、checkSpline2Show_CheckedChanged
checkSpline1Show_CheckedChanged(object
checkSpline2Show_CheckedChanged
checkSpline2Show_CheckedChanged(object
//若窗口最小化时候则Height、Width都为0。
DrawImage()创建图像会出错{cureDraw.Height
pictureBox1.Height;cureDraw.Width
pictureBox1.Width;}pictureBox1.Image
true){cureDraw.DrawXY(xLineDatas,
true){cureDraw.DrawSpline(dataF,
链接https://pan.baidu.com/s/1K6HFh56YfvwvoAH5nrdJmg
读取TXT文本文件中的两列数据将两列数据以曲线显示出来当鼠标移动经过曲线时显示当前坐标的Label控件字体颜色变成当前识别的曲线颜色。
如效果图所示添加按钮控件导入读取文本数据。
添加btnImportTxtDatas_Click事件函数
files(*.*)|*.*|文本文件(*.csv)|*.csv|文本文件(*.txt)|*.txt;if
File.ReadAllLines(ofd.FileName,
Encoding.Default).ToArray();dataColumNums
Convert.ToDouble(seg[j]);}}//axis1Data
i0;idataLineNums;i){axis1Data[i]
//若窗口最小化时候则Height、Width都为0。
DrawImage()创建图像会出错{cureDraw.Height
pictureBox1.Height;cureDraw.Width
true){cureDraw.DrawXY(xLineDatas,
}//读取的文本文件两列数据显示if(isSplineAxis){if
(checkAxis1.Checked){cureDraw.DrawSpline(axis1Data,
(checkAxis2.Checked){cureDraw.DrawSpline(axis2Data,
e){DrawCure();//检测鼠标是否在曲线上if(isSplineAxis){int
cureDraw.YSliceValue/8){isMouseOnAxis1
Axis1Color;}else{isMouseOnAxis1
Axis2Color;}else{isMouseOnAxis2
Color.Black;}}if(isMouseOnAxis1false
isMouseOnAxis2false){labMousePos.ForeColor
链接https://pan.baidu.com/s/1FQNVWU-PLIgaS3KmQz_BGw
创建一条竖直方向的线用来指示当前鼠标点击所在的X轴位置。
该线的作用是在编辑数据和运行数据的时候可以很方便的看出当前所运行到的时间点。
控件pictureBox1添加pictureBox1_MouseDown、pictureBox1_MouseUp事件函数用来检测鼠标按键按下和抬起。
MouseButtons.Left){isLeftButtonDowm
MouseButtons.Middle){isMiddleButtonDown
MouseButtons.Right){isRightButtonDown
MouseButtons.Left){isLeftButtonDowm
MouseButtons.Middle){isMiddleButtonDown
MouseButtons.Right){isRightButtonDown
//时间轴位置指示线cureDraw.DrawCurrentLine(last_CurrentValueX);if
(isLeftButtonDowm){last_CurrentValueX
ValueToMousePoint_ex(CurrentValue_X);graphics.DrawLine(new
链接https://pan.baidu.com/s/13c0C1dTqTgW-5G3uYWekOA
需要拖拽的点叫关键帧点每个关键帧点包括两个数据X轴中位置、Y轴中位置。
创建字典集合keyListDatas
int.Parse(txtDataLength.Text);myEditDatas
float[dataLength];//字典集合中添加4个随机数据keyListDatas.Add(100
0.0f);keyListDatas.Add(dataLength
10.0f);keyListDatas.Add(dataLength
item.Value;fListTemp_X.Add(key);fListTemp_Y.Add(fValue);}keyEditDatas_X
fListTemp_X.ToArray();keyEditDatas_Y
(keyEditDatas_Y.Length0){cureDraw.DrawPoint(keyEditDatas_X,
0){cureDraw.DrawSpline(myEditDatas,
KeyPointEdit(){//KeyDataTrans();//PointF[]
PointF[keyEditDatas_X.Length];for(int
i0;ikeyEditDatas_X.Length;i){pf[i].X
cureDraw.ValueToMousePoint_ex((int)keyEditDatas_X[i]);pf[i].Y
cureDraw.ValueToMousePoint_ey(keyEditDatas_Y[i]);}//label7.BackColor
GraphicsPath();vGraphicsPath.AddEllipse(pp.X
Region(vGraphicsPath);isMouseOnKeyPoint
(isMouseOnKeyPoint){Cursor.Current
Color.Lime;if(isLeftButtonDowm){//isKeyEditDataMoveCan
false;}//if(isDataEdit){keyListDatas[keyEditFrame]
链接https://pan.baidu.com/s/1HVAWpqR-68OY98KmgUlJbw
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback