使用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 = 300;
            base.DefaultHeigh = 100;
        }

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 < 10)
            {
               // t_right = t_left + mDefaultShapeWidth;
                t_right = t_left + Math.Max(mDefaultShapeWidth, mshapeObject.DefaultWidth);
            }

            if (t_bottom - t_top < 10)
            {
                //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 != 1)
            {
                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[0];
            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(0, 0, 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);
        }
时间: 2024-10-03 14:45:24

使用NetronGraphLib类库开发Qfd质量屋编制工具的相关文章

来了解质量管理工具——质量屋(HOQ)

质量屋(The House Of Quality),又名HOQ,它是质量功能配置(QFD)的核心.一般QFD的学习会涉及到.同时HOQ也是项目管理十大知识领域领域中质量管理工具中的一种,今天我们就来了解一下. 质量屋概念 质量屋是一种确定顾客需求和相应产品或服务性能之间联系的图示方法.它把很多矩阵和图表组合成一张大的图,像房屋一样.如下图: 质量屋的构造始于分析顾客需求,写在矩阵的行里.矩阵列中是产品或服务的重量特性.矩阵中心和边缘是这组信息的关系,指导新设计的决定. 作为结果,顾客需求被转化为

C++类库开发之导出类设计原则

导出类设计 上一篇博客详细陈述了类库开发的各个知识点(http://blog.csdn.net/z702143700/article/details/45989993),本文将进一步陈述,对于类库开发过程中导出类的开发规范问题. C/C++开发的DLL当初是作为函数级共享库设计的,并不能真正提供一个类所必需的信息.类层上的程序复用只有Java和C#生成的类文件才能做到.所以,当我们在用C++开发类库时经常会遇到类的设计问题,设计不好,就会出现DLL地狱. DLL地狱 导出类的DLL在维护和修改时

如何开发高质量的软件 - 通过测试集中型的软件开发方法来提高软件质量

“构建技术系统所要做的工作是非常繁重的,同时还需要专业知识:语言和协议,编码与调试,测试与重构.”——James Garrett 概述 每年各个企业都在努力实现企业的主要目标.通常,这都是通过实现基于度量指标的性能目标(可能包括质量目标)以及利用最佳惯例规范商业流程来实现的.最 后,要通过一些测试和报告形式来评估这些目标对企业的影响.在接受评估之前,机智的员工都会要一个评估单——但是在开发新的软件产品,确定测试目标时,他 们常常会忽略这一点. 企业在设计实体产品时,会花很多时间设计产品的生成流程

软件构造 第一章第二节 软件开发的质量属性

?软件构造 第一章第二节 软件开发的质量属性 1.软件系统质量指标 External quality factors affect users 外部质量因素影响用户 Internal quality factors affect the software itself and its developers 内部质量因素影响软件本身和它的开发者 External quality results from internal quality 外部质量取决于内部质量 外部属性: 正确性:按照预先定义的"

C#调用OpenCV开发简易版美图工具

前言 在C#调用OpenCV其实非常简单,因为C#中有很多OPenCV的开源类库. 本文主要介绍在WPF项目中使用OpenCVSharp3-AnyCPU开源类库处理图片,下面我们先来做开发前的准备工作. 准备工作 首先,我们先创建一个WPF项目. 然后,在Nuget上搜索OpenCVSharp,如下图: 接着,我们选择OpenCVSharp3-AnyCPU选项进行安装 . 安装了OpenCVSharp3-AnyCPU后,我们的项目会自动引入4个类库,如下图: 到这里,我们的准备工作就完成了,非常

【Windows10&nbsp;IoT开发系列】API&nbsp;移植工具

原文:[Windows10 IoT开发系列]API 移植工具 Windows 10 IoT Core 中是否提供你的当前 Win32 应用程序或库所依赖的 API? 如果不提供,是否存在可使用的等效 API? 此工具可以为你回答这些问题,并协助你将你的当前 Win32 应用程序和库迁移到 Windows IoT Core. Windows 10 IoT 核心版 API 移植工具可在 ms-iot/iot-utilities github 存储库中找到.下载存储库 zip 并将 IoTAPIPor

Linux C++/C开发所必需的一系列工具

系统平台下的开发工具.开发环境各有不同.Linux C++/C开发所必需的一系列工具: 1. vi(vim)文本编辑器一个UNIX世界标准的文本编辑器,简约而强大,不论作为开发人员还是系统管理员,熟练使用vi是一项基本的.且不可或缺的技能. 2. gcc/g++ C/C++编译器通过具体的示例讲解使用gcc/g++编译单个.多个文件.共享库.静态库等. 3. gdb 调试器通过具体的示例来熟悉通过gdb来调试C/C++应用程序.修正应用程序运行期的错误. 4. make和makefile学习编写

Android开发实践:Android交叉编译工具链的使用

前面2篇文章分别介绍了Android NDK编译的命令行参数,以及如何在任意目录使用Android.mk来编译本地c/c++代码,Andriod.mk和ndk-build只不过是Android官方提供了一套封装过的Android交叉编译环境而已,其实,你可以不用它,而直接通过传统的Makefile文件来编译你的c/c++代码的,本文即介绍如何直接通过传统的Makefile文件来编译可用于Android平台的库文件. 经常搞嵌入式开发的朋友对于交叉编译环境应该并不陌生,说白了,就是一组运行在x86

17个提升iOS开发效率的必用工具

时间就是金钱.编码效率的提升意味着更多的收入.可是当我们的开发技巧已经到达一定高度时,如何让开发效率更上一层楼呢?答案就是使用开发工具!在这篇文章中,我会向你介绍一些帮助我们提升编码速度和工作效率的工具. Xcode插件 几乎所有开发者都知道Alcatraz是一个开源的包管理工具,可以让我们更轻松地管理各种插件.接下来就介绍下我的最推荐的10个插件: 10.HOStringSense 在编辑字符串的时候,它会在代码上方生成一个字数统计的提示框.当你需要编辑多行文本时,可以在弹出的文本框中编辑字符