一种二维数字化服装款式图设计系统的制作方法

文档序号:13914414阅读:395来源:国知局

本发明属于数字化服装设计技术领域,具体涉及一种二维数字化服装款式图设计系统。



背景技术:

目前针对服装种类的多样性,有多种数字化服装款式图的设计系统。

如cn1632813公开的基于风格的服装款式数字化方法,其提出基于风格的服装款式设计系统,提取服装轮廓信息和细节信息进行层级标准化划分,将上述服装数据信息保存进数据库。

如cn101482897公开的一种智能裙装款式与纸样设计系统,其数字化款式设计模块是基于裙装数字化绘图模块的基础上,通过推理技术实现裙装款式图的参数化设计,以适合常规的裙装款式。通过实例推理技术,检索实例库得到符合要求的款式图,适合复杂、变化的款式。

又如cn105615091a公开的一种服装款式图的绘制方法,基于款式图与真实服装,以及真实服装与人体之间的关系,用所述人体关键部位尺寸参数化地表示服装款式图的尺寸,完成服装款式图绘制的系统。

但是,上述的数字化的服装款式图设计系统并没有直接涉及设计师的绘制过程,关键在于提取已经完成的款式信息进行数据划分及保存,或者利用机器学习方式对款式图进行参数设计。



技术实现要素:

本发明所要解决的技术问题是针对背景技术的缺陷,在服装款式图设计系统中融入设计师的绘制过程,把服装设计师传统的纸笔绘制的二维服装设计款式图转换成具有坐标信息的二维数字化款式图。

本发明用于解决上述技术问题所采用的技术手段如下:

一种二维数字化服装款式图设计系统,所述系统包括用于绘制服装款式图的计算机,所述计算机被编程以便执行如下步骤:

(1)、用b样条曲线拟合设计师绘制的款式图线条;

(2)、采用交互式的方式对服装款式图进行绘制或修改编辑;

(3)、采用单向链表的数据结构读取、保存款式图的线条。

进一步的,本发明的一种二维数字化服装款式图设计系统,步骤(1)利用b样条曲线拟合设计师手绘线条形成的是连续而光滑的曲线,同时还需要给出切断操作,使拟合的每条二维手绘线条是独立、不连续的、可单独编辑的;当一条手绘线条绘制结束时,同时也要给出结束标记。

进一步的,本发明的一种二维数字化服装款式图设计系统,在绘制款式图时,采用以下两种线条:

(a)线条适用于绘制服装廓形的外轮廓线条;

(b)线条适用于绘制悬垂的下摆以及服装表面的褶皱线条。

进一步的,本发明的一种二维数字化服装款式图设计系统,对服装款式图的编辑操作包括:增加新的控制点、移动控制点、删除控制点、结束一条手绘线的绘制、保存手绘图以及读入保存的手绘图。

进一步的,本发明的一种二维数字化服装款式图设计系统,手绘线的保存是将每一条b样条手绘线的控制点用一个单向链表的数据结构记录下来,在链表的每个元素中,存储着每一条手绘线的控制点。

进一步的,本发明的一种二维数字化服装款式图设计系统,增加新的控制点实现的过程包括:

第一步:将鼠标左键点的坐标转换为窗口坐标;

第二步:调用findmatchingpointindex(point_x,point_y)函数,寻找鼠标左键点的索引值;

第三步:将点的索引值赋值给一个全局变量,用于鼠标移动消息响应函数;

第四步:如果点的索引值小于0,则这个左键点是个新点,表示增加新的控制点绘制b样条,在这里,将新的控制点的坐标分别赋值给链表中的控制点px[]、py[],同时增加控制点的个数;

第五步:如果该鼠标左键点的索引与某一个已经存在的控制点的索引一致,表示用户要移动该点,将左键点的索引赋值给表示移动点的临时变量;

第六步:调用绘制函数renderscene(),重新绘制场景。

进一步的,本发明的一种二维数字化服装款式图设计系统,移动控制点实现的过程包括:

第一步:判断表示移动的临时变量的值,即点的索引值,如果索引值小于0,不执行移动操作,立即返回;

第二步:如果索引值大于0,将鼠标移动点的坐标转换为窗口坐标;

第三步:索引值大于0,而且该点属于当前手绘线的控制点,则将点坐标实时地赋值给临时保存点坐标的数组;

第四步:索引值大于0,且该点属于保存链表中的某条手绘线的控制点,则将鼠标移动点的窗口坐标传递给链表中的该控制点px[]、py[],实现实时地改变移动控制点的坐标;

第五步:调用绘制函数renderscene(),重新绘制场景。

进一步的,本发明的一种二维数字化服装款式图设计系统,删除控制点具体包括以下步骤:

第一步:将鼠标右键点的坐标转换为窗口坐标;

第二步:如果当前手绘线上的控制点个数大于等于0,才可以删除控制点;

第三步:在满足第二步的条件下,对当前手绘线上所有控制点进行循环判断,如果鼠标右键点的坐标与当前手绘线上的某个控制点之间的距离小于给定的阈值,则认为选中了当前某个控制点,进行删除,当前手绘线控制点的个数减一;

第四步:调用绘制函数renderscene(),重新绘制场景。

进一步的,本发明的一种二维数字化服装款式图设计系统,结束一条手绘线的绘制具体为:

第一步、如果鼠标点击的是已经保存的手绘线控制点,进入save_controlpoint链表,把该手绘线上的控制点作为当前控制点,并返回控制点的索引值,0~ni-1,i是0~9的整数;

第二步、如果鼠标点击的不是已经保存的手绘线控制点,分为两种情况:如果鼠标点击的是当前正在绘制的手绘线上的控制点,则经过判断在阈值之内,返回控制点在当前的索引值,如果鼠标点击的点也不属于当前手绘线上的某个控制点,则函数返回-1。

进一步的,本发明的一种二维数字化服装款式图设计系统,保存手绘图时的步骤为:第一步:如果控制点的个数小于4个,不执行任何命令;

第二步:在控制点个数大于4个的情况下,如果不存在已保存的手绘线控制点,当下保存的是第一条手绘线的控制点,为保存控制点save_controlpoint的链表分配内存空间,同时把指针cur_save_controlpoint指向save_controlpoint链表;

第三步:如果已经有了保存的手绘线控制点,即save_controlpoint链表的第一个元素已经有了,需要把接下来的手绘线控制点的数据衔接上去;首先分配新的内存空间,用一个临时的指针temp_save_controlpoint进行分配,然后把save_controlpoint链表的下一个指针(next)指向这个新分配的内存,这样链表save_controlpoint就有了第二个元素,把第二条手绘线的控制点信息存入进第二个元素;同时让指针cur_save_controlpoint也指向由temp_save_controlpoint开辟的内存空间,这样第二个元素空间就成为当前指针cur_save_controlpoint指向的,确保当前指针指向的下一个为null,如此读入多条手绘线条的控制点直至结束。

进一步的,本发明的一种二维数字化服装款式图设计系统,读取手绘图需要把保存文件中的表示手绘线控制点的x、y、z坐标转换成浮点型的数值,同时把手绘线控制点的个数转换成整形数值。

本发明采用以上技术方案具有以下技术效果:

本设计系统是把服装设计师传统的纸笔绘制的二维服装设计款式图转换成具有坐标信息的二维数字化款式图,转换的核心算法是对二维手绘款式图利用b样条曲线进行拟合。

人机交互方式是用户依靠鼠标、键盘和菜单操作对二维手绘图进行编辑的,由于手绘图中每一条手绘线条都是独立的,而每一条手绘线又与其它手绘线条存在逻辑上的前后关系,所以采用单向链表这一数据结构存储二维手绘图中每一条手绘线条,这样既保持了单根手绘线条的独立性,又赋予了整个手绘图的连续性。所以在本系统中交互式的手绘界面上,既可以进行二维服装款式图的自由绘制,又可以保存整个款式图,而保存的方式是将每一条独立手绘线的b样条控制点记录进链表。

实验结果表明利用b样条曲线可以满足线条的绘制要求,交互式的鼠标和键盘操作可以对手绘线条进行添加、移除和修改的编辑操作,利用单向链表数据结构存储手绘线控制点数据,不仅提高了手绘的编辑效率而且可以存储款式图。

附图说明

图1是一条含4个控制点的b样条曲线。

图2是多个控制点的b样条模拟二维服装款式图的下摆曲线。

图3整个服装款式设计流程图。

图4是设计师绘制裙装款式图时的绘制流程,序号表示绘制顺序。(a)表示设计绘制的裙装款式图,(b)表示该裙装款式图共包含10条独立的b样条,每一条即为设计师绘制的手绘线条,从0-9序号也就表明了设计师的绘制顺序或者称之为绘制流程。

图5是将每一条b样条手绘线的控制点用一个单向链表的数据结构记录示意图。

图6是本发明的软件执行流程图。

图7是设计师利用本系统绘制的服装款式图,分别为背心、裙和裤子,以及服装款式图的保存形式(部分手绘线控制点:含有每条手绘线的控制点的个数和坐标信息)。

具体实施方式

以下,基于附图针对本发明的技术方案进一步进行详细地说明。

1、服装款式图的识别:

(1)利用b样条曲线拟合二维手绘线条

本发明采用有理二次b样条曲线来拟合二维手绘线条,因为二次b样条曲线是连续的,二次b样条上的每一个控制点受到最靠近的三个控制点的影响,也就是说,每一个控制点影响着相邻的三条曲线段,当移动控制点的位置时,这个特征确保了样条的光滑度和局部性,整个手绘线条的形状通过改变控制点的位置进行调整。

款式图线条的绘制关键在于样条控制点,在本发明中采用鼠标在绘制界面点击就能得到,最基本的b样条是含有4个控制点(p0,p1,p2,p3)的3阶b样条曲线,其表达如公式(1)所示。

b样条曲线的每一个控制点都与基函数bi,3(u)相关,p(u)即为绘制的b样条曲线。在我们的程序中选择参数u∈[2,4]的区间,同时满足u+=0.01以保证绘制出的曲线是光滑连续的,公式(2)是具有递归性的基函数表达式:

在本系统中,有理二次b样条的基函数bi,3(u)分别为:

2、服装款式图的编辑

服装款式图的编辑包括手绘线条的增加、删除以及修改等编辑操作。因为一幅完整的款式图是由许多单独的手绘线条构成的,而利用b样条拟合手绘线条形成的是连续而光滑的曲线;同时还需要给出切断操作,使拟合的每条二维手绘线条是独立、不连续的、可以单独编辑的;当一条手绘线条绘制结束时,同时也要给出结束标记。

(1)款式图软件编辑的操作说明

图1、图2给出了二维手绘线b样条控制点的移动示意图。图1是一条含4个控制点的b样条曲线,移动其中一个控制点,曲线改变形状。图2是多个控制点的b样条模拟二维服装款式图的下摆曲线,也可以进行相应的移动以改变线条的形状。

服装设计师在绘制款式图时,一般会采用这样的两种线条:

(a)线条适用于绘制服装廓形的外轮廓线条;

(b)线条适用于绘制悬垂较好的下摆以及服装表面的褶皱线条。

设计师只需了解这一简单的基本规律,结合软件操作说明,就可以按照自己的绘制方式设计服装款式。

整个服装款式图设计系统包括读取文件、编辑手绘图和输出手绘图。流程如图3所示,在本系统中,所有的b样条控制点数据都是以单向链表形式存储的。对手绘图的编辑操作包括:增加新的控制点、移动控制点、删除控制点、结束一条手绘线的绘制、保存手绘图以及读入保存的手绘图。

在款式图读取和编辑的时候,本发明采用的是单条手绘线作为结构单元的。为了描述简单起见,本发明把半身裙二维前片手绘图的每条手绘线用数字标记起来,如图4所示。手绘线的保存是将每一条b样条手绘线的控制点用一个单向链表的数据结构记录下来,如图5所示,在链表的每个元素中,存储着每一条手绘线的控制点,由于这条裙子共有10条手绘线构成,所以手绘线上的控制点个数分别为n0,…,n9。这些控制点以一维数组类型分别保存控制点的x、y、z坐标,记录为px[]、py[]、pz[],考虑到实际绘制的要求,本发明为每一条手绘线分配100个控制点的内存空间。

四个控制点是得到b样条曲线的最小值,一般在实际的绘制过程中如果线条比较复杂,那么四个控制点肯定不能得到设计师所需要的线条,所以n必须大于等于4,在本系统中考虑到实际绘制,给予100个控制点的内存空间。

这样的内存分配完全满足目前的绘制需求。这里数组pz[]的默认值为浮点类型的0,因为在二维手绘线上的数据点是不需要坐标信息的,而给它们分配内存赋给0值,是为了在二维手绘线的数据点和三维模板顶点之间的匹配时,每个数据点都能以三维坐标的形式对应,然后直接进行运算。

照图5的数据结构,本发明将手绘线的控制点保存为链表形式,命名为save_controlpoint,类型名为savepoint,其结构是如表1所示的单链表结构。所有对手绘线的编辑操作实际就是对这个链表及其里面的数据进行各种编辑,本发明在寻找手绘线控制点的索引findmatchingpointindex(floatpoint_x,floatpoint_y)、存储手绘线控制点savep(intpnumber,point*p)和读取手绘线控制点readsketch(file*f)的时候都利用了单向链表结构对数据进行处理。

表1该单向链表类型结构的c语言表示

单击鼠标左键消息响应函数onlbuttondown(uintnflags,cpointpoint)的实现的行为包括两部分:

一是增加新的控制点;二是为修改控制点的位置移动鼠标作准备。将实现的过程概括成以下几步:

第一步:将鼠标左键点的坐标转换为窗口坐标。

第二步:调用findmatchingpointindex(point_x,point_y)函数,寻找鼠标左键点的索引值。

第三步:将点的索引值赋值给一个全局变量,用于鼠标移动消息响应函数。

第四步:如果点的索引值小于0,则这个左键点是个新点,表示增加新的控制点绘制b样条,在这里,将新的控制点的坐标分别赋值给链表中的控制点px[]、py[],同时增加控制点的个数。

第五步:如果该鼠标左键点的索引与某一个已经存在的控制点的索引一致,表示用户要移动该点,将左键点的索引赋值给表示移动点的临时变量。

第六步:调用绘制函数renderscene(),重新绘制场景。

移动鼠标的消息响应函数onmousemove(uintnflags,cpointpoint),实现移动鼠标以改变某个控制点的位置,调整样条曲线。

第一步:判断表示移动的临时变量的值,即点的索引值,如果索引值小于0,不执行移动操作,立即返回。

第二步:如果索引值大于0,将鼠标移动点的坐标转换为窗口坐标。

第三步:索引值大于0,而且该点属于当前手绘线的控制点,则将点坐标实时地赋值给临时保存点坐标的数组(按下键盘“a”后,才会保存进save_controlpoint链表)。

第四步:索引值大于0,该点属于保存链表中的某条手绘线的控制点,则将

鼠标移动点的窗口坐标传递给链表中的该控制点px[]、py[],实现实时地改变移动控制点的坐标。

第五步:调用绘制函数renderscene(),重新绘制场景。

按下鼠标右键的消息响应函数onrbuttondown(uintnflags,cpointpoint),删除当前手绘线上的最后一个点。

第一步:将鼠标右键点的坐标转换为窗口坐标。

第二步:如果当前手绘线上的控制点个数大于等于0,才可以删除控制点。

第三步:在满足第二步的条件下,对当前手绘线上所有控制点进行循环判断。如果鼠标右键点的坐标与当前手绘线上的某个控制点之间的距离小于给定的阈值,就可以认为选中了当前某个控制点,进行删除,当前手绘线控制点的个数减一。

第四步:调用绘制函数renderscene(),重新绘制场景。

找鼠标点击的控制点的索引的函数findmatchingpointindex(floatpoint_x,floatpoint_y),函数的参数为鼠标点的窗口坐标,返回索引值或-1。如果返回-1,表示鼠标点击的点不是某个控制点。每条手绘线上的控制点索引都是从0开始的,分为已经保存的手绘线控制点和当前的手绘线控点。已保存的手绘线控制点存储在save_controlpoint链表中,当前的手绘线控制点当按下键盘“a”后,保存进链表。

第一步:如果鼠标点击的是已经保存的手绘线控制点,进入save_controlpoint链表,把该手绘线上的控制点作为当前控制点,并返回控制点的索引值(0~ni-1(i是0~9的整数))。

第二步:如果鼠标点击的不是已经保存的手绘线控制点,又可以分为两种情况,如果鼠标点击的是当前正在绘制的手绘线上的控制点,则经过判断在阈值之内,返回控制点在当前的索引值。如果鼠标点击的点也不属于当前手绘线上的某个控制点,则函数返回-1。

表2:定义两个指针分别为savepoin类型

将手绘线控制点保存的函数savep(intpnumber,point*p),函数的参数是当前手绘线的控制点的总个数,以及指向控制点的指针。在这里我们需要用到表2定义的两个指针。

第一步:如果控制点的个数小于4个,不执行任何命令。

第二步:在控制点个数大于4个的情况下,如果不存在已保存的手绘线控制点,当下保存的是第一条手绘线的控制点。为保存控制点save_controlpoint的链表分配内存空间,同时把指针cur_save_controlpoint指向save_controlpoint链表。

第三步:如果已经有了保存的手绘线控制点,即save_controlpoint链表的第一个元素(即表头)已经有了,需要把接下来的手绘线控制点的数据衔接上去。首先分配新的内存空间,用一个临时的指针temp_save_controlpoint进行分配,然后把save_controlpoint链表的下一个指针(next)指向这个新分配的内存,这样链表save_controlpoint就有了第二个元素,可以把第二条手绘线的控制点信息存入进第二个元素。同时让指针cur_save_controlpoint也指向由temp_save_controlpoint开辟的内存空间,这样第二个元素空间就成为当前指针cur_save_controlpoint指向的,当然还要确保当前指针指向的下一个为null。如此读入多条手绘线条的控制点直至结束。

读取手绘图readsketch(file*f)的操作与保存手绘图的操作类似,是为手绘线的控制点序列分配存储空间,并以单向链表的结构存储。不同的是读取手绘图是对字符串操作,所以需要把保存文件中的表示手绘线控制点的x、y、z坐标转换成浮点型的数值,同时把手绘线控制点的个数转换成整形数值。

整个交互式的服装款式图设计系统是在vc++mfc与opengl图形接口相结合的系统框架下完成的。在系统交互式的应用过程中用到了基于视图类的mfc默认的消息响应函数,该工程命名为2dsketch,相应的视图类即为c2dsketchview,这些消息响应函数归纳在表3中。软件执行流程中的起始和结束分别对应的是工程创建时生成的构造函数和析构函数,及其他自定义的调用函数都归纳在表4中。

表3:基于视图类的mfc默认的消息响应函数

表4:构造函数、析构函数及自定义的调用函数

需要说明的是,以上说明仅是本发明的优选实施方式,应当理解,对于本领域技术人员来说,在不脱离本发明技术构思的前提下还可以做出若干改变和改进,这些都包括在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1