用图元的镜像、旋转参数来描述图元坐标变换矩阵的方法与流程

文档序号:12273127阅读:798来源:国知局
用图元的镜像、旋转参数来描述图元坐标变换矩阵的方法与流程

本发明涉及绘图软件领域,尤其涉及一种用图元的镜像参数、旋转参数来描述图元坐标变换矩阵的方法。



背景技术:

在绘图软件中,会对图元进行镜像操作、旋转操作。一般的绘图软件会用图元的坐标变换矩阵来对此进行描述,因为坐标变换矩阵非常方便,能够处理各种缩放、镜像、旋转、平移、倾斜等情况而且也支持叠加操作。一般的绘图软件中不会用到倾斜。平移操作可以用图元的坐标来记录,缩放可以直接用缩放系数进行记录。当图元的旋转是直角旋转(即90°,180°,270°,360°)时;唯一需要关注的就是镜像、旋转这两个参数的顺序问题。在实际绘图时,绘图人员永远是在屏幕的正前方观看图形,这时对图元进行操作:先镜像后旋转还是先旋转后镜像,这两种操作顺序得到的显示效果是不一样的。而图元的坐标变换矩阵记录的是一个断面,无法体现镜像操作与旋转操作的先后顺序。如果我们无法确定这个顺序,那么我们得到的镜像参数、旋转参数可能是错误的。因此,我们需要一种方法,既可以记录图元的镜像参数、旋转参数,又能够正确还原镜像、旋转后的图元显示状态。



技术实现要素:

针对上述问题,本发明提供一种既可以记录图元的镜像参数、旋转参数,又能够正确还原镜像、旋转的操作顺序的用图元的镜像、旋转参数来描述图元坐标变换矩阵的方法。

为解决上述问题,本发明提供的技术方案为:用图元的镜像、旋转参数来描述图元坐标变换矩阵的方法,包括如下步骤:用图元的镜像、旋转参数来描述图元坐标变换矩阵的方法,包括如下步骤:

步骤一、在图元内部增设用来记录图元在x方向镜像标志的变量m_bMirrorX、用来记录图元在y方向镜像标志的变量m_bMirrorY、用来记录图元旋转方向的变量m_direction以及用来记录图元是否处于克隆状态的变量m_bClone并进行图元初始化;

设置并将m_bMirrorX设置为false;设置并将m_bMirrorY设置为false,设置并将m_direction设置为0,m_direction取值为为0、1、2、3分别代表原始位置、顺时针旋转90°、顺时针旋转180°、顺时针旋转270°;设置m_bClone并将其初始化为false;

步骤二、对图元进行镜像操作,具体可分为如下步骤:

a、接口调用者传入两个bool型数值:x方向镜像标志bMx;y方向镜像标志bMy;这两个数值分别表示是否要对指定图元进行x方向镜像操作或y方向镜像操作;定义用来记录x、y方向的缩放系数的两个变量sx=1,sy=1;定义存放坐标变换矩阵的临时变量:matrix;

b、判断图元是否处于克隆状态,是则执行c,否则执行d;

c、将bMx、bMy保存到图元的变量中,并根据bMx、bMy的值修改x、y方向的缩放系数sx、sy;用新得到的坐标变换矩阵覆盖原有的图元坐标变换矩阵,镜像操作结束;

d、首先根据图元旋转方向是否为顺时针90°或顺时针270°判断是否需要交换bMx、bMy的值;再根据新的bMx、bMy的值修改m_bMirrorX、m_bMirrorY的值并重新计算图元旋转方向m_direction;然后根据接口调用者传入的数值bMx、bMy,修改x、y方向的缩放系数sx、sy;用新得到的坐标变换矩阵覆盖原有的图元坐标变换矩阵,镜像操作结束;

步骤三、对图元进行旋转操作,具体可分为如下步骤:

a、接口传入参数:将要对图元进行旋转操作的方向direction;定义用来记录x、y方向的缩放系数的两个临时变量sx=1,sy=1;定义存放坐标变换矩阵的临时变量matrix;

b、根据旋转操作的类型,叠加到m_direction上,得到新的旋转方向值;判断图元是否处于克隆状态,是则执行c,否则执行d;

c、将direction转换为旋转角度并用新得到的坐标变换矩阵覆盖原有的图元坐标变换矩阵,旋转操作结束;

d、根据bMx、bMy的值修改x、y方向的缩放系数sx、sy;并重新计算图元旋转方向,用新得到的坐标变换矩阵覆盖原有的图元坐标变换矩阵,旋转操作结束。

将图元的坐标变换矩阵导出为图元的镜像标志、旋转角度时,导出的参数含义是图元要先镜像,后旋转;图元的镜像标志可以不用处理直接导出,图元的旋转角度=m_direction*90。

从图形文件中加载图元时,从图形文件中按顺序依次读取:m_bMirrorX、m_bMirrorY、m_direction。

保存图元时,将m_bMirrorX、m_bMirrorY、m_direction依次保存到图形文件中。

通过本发明所描述的方式,用图元在x方向镜像标志、图元在y方向镜像标志、图元旋转方向这三个参数描述图元的转置矩阵时,按照固定的先镜像后旋转的方式进行描述,并且每次镜像或旋转之后都重新计算这三个参数,这样就只需要三个参数就可以准确还原图元的真实状态,同其他厂家的图形方便的进行互操作。

附图说明

图1是本发明实施方式中图元初始化的流程图。

图2是本发明实施方式中从图形文件中加载单个图元的流程图。

图3是本发明实施方式中保存单个图元到文件的流程图。

图4是本发明实施方式中图元镜像操作功能接口的流程图。

图5是本发明实施方式中图元旋转操作功能接口的流程图。

具体实施方式

用图元的镜像、旋转参数来描述图元坐标变换矩阵的方法,包括如下步骤:步骤一、在图元中增设变量并进行图元初始化,如图1所示;

设置用来记录图元在x方向镜像标志的bool型变量m_mirrorX并将其设置为false;设置用来记录图元在y方向镜像标志的bool型变量m_mirrorY并将其设置为false,设置用来记录图元旋转方向的整数型变量m_direction并将其设置为0,图元旋转方向取值为为0、1、2、3分别代表原始位置、顺时针旋转90°、顺时针旋转180°、顺时针旋转270°;设置用来记录图元是否处于克隆状态的变量m_bClone并将其初始化为false;

步骤二、将对图元在x方向镜像操作标志bMx、图元在y方向镜像操作标志bMy作为参数调用图元的镜像操作接口;将图元旋转方向direction作为参数调用图元的旋转操作接口;

步骤三、对图元进行镜像操作,具体可分为如下步骤,如图4所示:

S1、图元镜像操作功能接口开始;

S2、接口调用者传入两个数值:x方向镜像标志:bMx;y方向镜像标志:bMy;用来表明镜像操作的类型是x方向镜像还是y方向镜像;

S3、定义用来记录x、y方向的缩放系数的两个临时浮点数变量sx=1,sy=1;定义存放坐标变换矩阵的临时变量:matrix;

S4、判断图元是否处于克隆状态,是则执行S5,否则执行S12;

S5、将接口调用者传入的数值保存到图元的变量中:

m_mirrorX=bMx,

m_mirrorY=bMy;

S6、判断bMx是否为true,是则执行S7,否则执行S8;

S7、设置sx=-1;

S8、判断bMy是否为true,是则执行S9,否则执行S10;

S9、设置sy=-1;

S10、matrix.scale(sx,sy),用matrix覆盖图元的坐标变换矩阵;

转S25;

S12、如果m_direction为1或3时,交换bMx、bMy的值;否则不需要交换;

S13、判断bMx是否为true,是则执行S13,否则执行S14;

S14、m_mirrorX取反;

S15、如果m_direction为1或3则执行S16,否则执行S17;

S16、m_direction=(m_direction+2)%4;

S17、判断bMy为true,是则执行S18,否则执行S19;

S18、m_mirrorY取反;

S19、如果m_direction为1或3则执行S20,否则执行S21;

S20、m_direction=(m_direction+2)%4;

S21、判断bMx是否为true,是则执行S23,否则执行S24;

S22、设置sx=-1;

S23、判断bMy是否为true,是则执行S25,否则执行S26;

S24、设置sy=-1;

S25、matrix.scale(sx,sy);

angle=(m_direction*90)%360;

matrix.rotate(angle)

用新得到的坐标变换矩阵覆盖原有的图元的坐标变换矩阵;

S26、图元镜像操作功能接口结束;

步骤四、对图元进行旋转操作,具体可分为如下步骤,如图5所示:

S1、图元旋转操作功能接口开始;

S2、接口传入参数:将要对图元进行旋转操作的方向direction;

S3、定义用来记录x、y方向的缩放系数的两个临时变量sx=1,sy=1;定义存放坐标变换矩阵的临时变量:matrix;

S4、将传入参数对4取模,direction=direction%4;

S5、m_direction=(m_direction+direction)%4;根据旋转操作的类型,叠加到图元当前的m_direction上,得到新的m_direction值。

S6、判断图元是否处于克隆状态,是则执行S7,否则执行S10;

S7、设置坐标变换矩阵matrix的旋转的角度:matrix.rotate(图元旋转方向*90);

S8、用matrix叠加到图元的坐标变换矩阵上,转S17;

S10、判断m_mirrorX是否为true,是则执行S11,否则执行S13;

S11、设置sx=-1;

S12、m_direction=(m_direction+2)%4;

S13、判断m_mirrorY是否为true,是则执行S14,否则执行S16;

S14、设置sy=-1;

S15、m_direction=(m_direction+2)%4;根据旋转操作的类型,叠加到图元当前的m_direction上,得到新的m_direction值。

S16、matrix.scale(sx,sy);

angle=(m_direction*90)%360;

matrix.rotate(angle)

用新得到的坐标变换矩阵覆盖原有的图元的坐标变换矩阵;

S17、图元旋转操作功能接口结束。

从图形文件中加载图元时,从图形文件中按顺序依次读取:m_bMirrorX、m_bMirrorY、m_direction。

保存图元时,将m_bMirrorX、m_bMirrorY、m_direction依次保存到图形文件中。

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