使用NetronGraphLib类库开发Qfd质量屋编制工具
前言
可执行文件下载 QfdHouse-exe.zip
因项目需要做了一个质量功能配置(Quality Function Deployment 简称Qfd)的质量屋编制工具软件,本软件是在发布一个免费开源软件-- PAD流程图绘制软件PADFlowChart基础之上做的,效果如下:
支持新建、保存、导出图片,自定义用户需求和技术特性,单元格点击切换关联矩阵程度和自关联矩阵的相关性。
开发中解决的问题
相信来这的人对Qfd是不感兴趣的,下面就把遇到的问题说一下。
如何设置图形的初始大小
1.在Shape类增加默认高度和宽度的属性
/// <summary>
/// 默认宽度
/// </summary>
private float mDefaultWidth = 0f; /// <summary>
/// 默认高度
/// </summary>
private float mDefaultHeigh = 0f;
/// <summary>
/// 默认宽度
/// </summary>
[GraphMLData]public float DefaultWidth
{
get { return mDefaultWidth; }
set { mDefaultWidth = value; }
}
/// <summary>
/// 默认高度
/// </summary>
[GraphMLData]
public float DefaultHeigh
{
get { return mDefaultHeigh; }
set { mDefaultHeigh = value; }
}
2.在TableShape类中初始化
public TableShape() : base()
{
this.Init();
this.InitTestData3();
BindingEventHandler();
base.DefaultWidth = ;
base.DefaultHeigh = ;
}
3.修改GraphControl的DrawShapeMouseUp(PointF p)函数
private void DrawShapeMouseUp(PointF p)
{
Cursor = System.Windows.Forms.Cursors.Default; float t_left = (mMouseDownPoint.X < p.X ? mMouseDownPoint.X : p.X);
float t_right = (mMouseDownPoint.X >= p.X ? mMouseDownPoint.X : p.X);
float t_top = (mMouseDownPoint.Y < p.Y ? mMouseDownPoint.Y : p.Y);
float t_bottom = (mMouseDownPoint.Y >= p.Y ? mMouseDownPoint.Y : p.Y); if (t_right - t_left < )
{
// t_right = t_left + mDefaultShapeWidth;
t_right = t_left + Math.Max(mDefaultShapeWidth, mshapeObject.DefaultWidth);
} if (t_bottom - t_top < )
{
//t_bottom = t_top + mDefaultShapeHeight;
t_bottom = t_top + Math.Max(mDefaultShapeHeight, mshapeObject.DefaultHeigh);
}
mshapeObject.Rectangle = RectangleF.FromLTRB(t_left, t_top, t_right, t_bottom); Invalidate(); EndDrawShapeWithMouse();
}
注释掉的是原来的代码
如何导出图形到图片格式
1. 在FlowChartForm.cs中增加保存图形图片的方法
public bool SaveShapeImage()
{
if (graphControl.SelectedShapes.Count != )
{
MessageBox.Show("请选中一个图形");
return false;
} var fileName = string.Empty;
using (SaveFileDialog sfd = new SaveFileDialog())
{
sfd.DefaultExt = ".jpg";
sfd.Filter = "jpg file(*.jpg)|*.jpg"; if (sfd.ShowDialog() == DialogResult.OK)
{
fileName = sfd.FileName;
}
else
{
return false;
}
}
var shape = graphControl.SelectedShapes[];
graphControl.SaveShapeImage(fileName, shape);
return true;
}
2.在GraphControl.cs中增加SaveShapeImage方法
public void SaveShapeImage(string path,Shape shape)
{
Image bmp = GetShapeImage(shape);
bmp.Save(path);
} public Image GetShapeImage(Shape shape)
{
var oldRectangle = shape.Rectangle;
var newRectangle = new RectangleF(, , oldRectangle.Width, oldRectangle.Height);
shape.Rectangle = newRectangle;
Bitmap bmp = new Bitmap((int)shape.Rectangle.Width, (int)shape.Rectangle.Height, this.CreateGraphics()); using (Graphics g = Graphics.FromImage(bmp))
{
g.SmoothingMode = SmoothingMode.AntiAlias;
shape.Paint(g);
}
shape.Rectangle = oldRectangle;
Image.GetThumbnailImageAbort tCallback = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
return bmp.GetThumbnailImage((int)shape.Rectangle.Width,(int)shape.Rectangle.Height, tCallback, IntPtr.Zero);
}
使用NetronGraphLib类库开发Qfd质量屋编制工具的更多相关文章
- 高阶篇:4.1)QFD质量功能展开-总章
本章目的:了解QFD概念和作用,为FMEA打下基础. 1.QFD定义 质量功能展开QFD(Quality Function Deployment),是把顾客或市场的要求转化为设计要求.零部件特性.工艺 ...
- 来了解质量管理工具——质量屋(HOQ)
质量屋(The House Of Quality),又名HOQ,它是质量功能配置(QFD)的核心.一般QFD的学习会涉及到.同时HOQ也是项目管理十大知识领域领域中质量管理工具中的一种,今天我们就来了 ...
- 使用 WordPress 插件模板开发高质量插件
WordPress 插件样板是标准化的,有组织的,面向对象的基础,用于构建高品质的 WordPress 插件.样板遵循编码标准和文件标准,所以你不必自己学习这些,根据注释编写代码即可. 官方网站 ...
- Python 使用python-kafka类库开发kafka生产者&消费者&客户端
使用python-kafka类库开发kafka生产者&消费者&客户端 By: 授客 QQ:1033553122 1.测试环境 python 3.4 zookeeper- ...
- 基于Struts2+Hibernate的朋友圈留言网站开发的质量属性
在课堂上我们了解了质量高于功能,质量属性是指影响质量的相关因素,是对质量的描述.现在我们对基于SSH的交友网站开发的质量属性可以从以下几个方向进行分析: (1)可用性: 当错误发生时,使用可用性战术进 ...
- 基于SSH框架的网上书店系统开发的质量属性
基于SSH框架的网上书店系统开发的质量属性 对于我的基于SSH框架的网上书店系统的开发要实现的质量属性有可用性.可修改性.性能.安全性.易用性和可测试性. 1.对于可用性方面的战术: 可用性(Avai ...
- Google的跨平台开发高质量原生 UI 的移动 SDK---Flutter免费且开源
Flutter开发 https://www.cnblogs.com/zengfp/p/9927860.html Flutter 是 Google 用以帮助开发者在 iOS 和 Android 两个平台 ...
- (转)C++类库开发之导出类设计原则
上一篇博客详细陈述了类库开发的各个知识点(http://blog.csdn.net/z702143700/article/details/45989993),本文将进一步陈述,对于类库开发过程中导出类 ...
- 极大提高Web开发效率的8个工具和建议(含教程)
面对复杂的 Web 应用的开发,良好的流程和工具支持是必不可少的,它们可以让日常的开发工作更加顺畅.更加高效.本文介绍了6个Web开发利器以及相关的教程,帮助你在开发.调试.集成和发布过程极大地提高效 ...
随机推荐
- 【转】HTML5 API --- 页面可见性改变(visibilitychange)事件
[摘要:[本文属本创,若有转载,请说明出处http://blog.csdn.net/yl02520/article/] visibilitychange事情是扫瞄器新增加的一个事情,当扫瞄器的某个标签 ...
- 老李分享:接电话扩展之uiautomator 1
老李分享:接电话扩展之uiautomator poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq ...
- 关于html5调用手机相机(原创)
很久没写随笔了 从ios6开始,webview支持html <input type="file">标签,用来调取手机的相册和相机,但是没有权限提示,不知道是不是我写的有 ...
- Struts2基础学习(七)—值栈和OGNL
目录: 一.值栈 二.OGNL表达式 一.值栈(ValueStack) 1.定义 ValueStack贯穿整个Acton的生命周期,每个Action类的对象实例都拥有一个ValueStack ...
- JVM年轻代、年老代、永久代
年轻代: HotSpot JVM把年轻代分为了三部分:1个Eden区和2个Survivor区(分别叫From和To),每次新创建对象时,都会分配到Eden区,当Eden区没有足够的空间进行分配时,虚拟 ...
- Vuex随笔
最近在项目中使用到了vuex,但是在配合vue使用时,也还是遇到了不少的问题,最终还是解决了问题,因此写一篇随笔来记录期间遇到的问题吧 项目概要: Vuex中所储存的的状态如下: Vue中:有一个ta ...
- sql解析xml
我们有时候需要在sql中解析xml,xml解析sql实例如下: DECLARE @params xml DECLARE @customparams xml = null -- 0.解析输入参数 ...
- [原创] JavaScript实现简单的颜色类标签云
效果预览: 源码分享: <!DOCTYPE html><html><head lang="en"> <meta charset=" ...
- 短路运算|字符串操作函数|内存mem操作函数
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- 在jquery中each循环中,要用return false代替break,return true代替continue。
在jquery中each循环中,要用return false代替break,return true代替continue. $.each(data, function (n, value) { if(v ...