CN109711018A - 一种二维到三维的户型设计方法 - Google Patents

一种二维到三维的户型设计方法 Download PDF

Info

Publication number
CN109711018A
CN109711018A CN201811536601.9A CN201811536601A CN109711018A CN 109711018 A CN109711018 A CN 109711018A CN 201811536601 A CN201811536601 A CN 201811536601A CN 109711018 A CN109711018 A CN 109711018A
Authority
CN
China
Prior art keywords
wall
line
data
point
window
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201811536601.9A
Other languages
English (en)
Other versions
CN109711018B (zh
Inventor
刘亮
向思行
刘秉东
熊鑫
陈维健
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Xinglian Yuncube Technology Co Ltd
Original Assignee
Wuhan Xinglian Yuncube Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Xinglian Yuncube Technology Co Ltd filed Critical Wuhan Xinglian Yuncube Technology Co Ltd
Priority to CN201811536601.9A priority Critical patent/CN109711018B/zh
Publication of CN109711018A publication Critical patent/CN109711018A/zh
Application granted granted Critical
Publication of CN109711018B publication Critical patent/CN109711018B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明提出了一种二维到三维的户型设计方法,通过左右平移墙线得到墙的边缘线,通过墙线数据起点、终点位置、墙左宽和墙右宽,运用向量计算方法,求出与其他相交面的交点,计算出6条边缘线;通过使用全部墙体的左右2条边缘线,寻找出全部的封闭曲线,得到一个房间内部的空间的全部边缘线,并使用填充算法对地面和天花板进行填充,绘制出地板和天花板面的图形;通过使用窗户的起点、终点和宽度计算出需要绘制墙洞的区域,没有墙洞的区域直接根据地面高度和顶面高度绘制全高的墙体,有洞的部分计算出窗户下部分墙面和上部分墙面进行计算,最终绘制出带有墙洞和门洞的墙体。通过上述方法可以快速绘制墙体、地板、天花板和门窗洞,减少绘制时间。

Description

一种二维到三维的户型设计方法
技术领域
本发明涉及三维制图领域,尤其涉及一种二维到三维的户型设计方法。
背景技术
现在很多室内装修设计一般都是用3DMAX和AutoCAD软件把模型场景建好并输出一些静态的效果图,再根据效果图去组织施工,静态的效果图不方便修改,也不能按不同的角度仔细观察场景,而且学习那些软件的门槛过高,对于很多富有有创意但没有技术的普通设计者而言不能表达出他们的想法。同时,通过CAD户型图利用3D MAX或MAYA等建模软件生成三维模型的过程繁琐复杂,由二维生成三维图的时间一般在一周以内,客户等待时间较长。因此现需一种可以快速制图的三维户型设计方法。
发明内容
有鉴于此,本发明提出了一种可以快速制图的三维户型设计方法。
本发明的技术方案是这样实现的:本发明提供了一种二维到三维的户型设计方法,其包括以下步骤:
S101、从数据库中读取当前操作的项目信息,读取当前方案上次操作保存的二维平面绘制信息,初始化户型图点数据、线数据、门窗洞数据信息的数据合集,获取保存的点线数据合集,遍历所有的点线数据,初始化并调用ActionController生成点实例和线实例,遍历门窗洞数据生成门窗洞实例;
S102、初始化ID生成器,为每个点、线和门窗洞实例生成不重复的ID;
S103、初始化绘制功能状态机、主编辑状态、画墙线状态、集合绘制状态、编辑墙线状态、绘制门窗洞状态和编辑门窗洞状态;
S104、初始化相机控制器,相机使用正交视角,根据点线位置求二维坐标下的最大最小值,得到相机范围,调整相机位置,生成绘制所需的距离提示器和位置提示器;
S105、利用墙体轮廓线计算方法获得墙体轮廓线,利用简易边缘线生成方法计算生成网格,计算出墙体网格顶点数据,网络生成后由ID生成器遍历所有的线实例,为线实例上MeshFilter组件添加网格;
S106、导入户型图,使用WWW将图片加载成Texture2D文件,遍历Texture2D像素,使用灰度算法赋值颜色,进入比例尺绘制,选择已知实际长度的一段线段进入比例尺临摹场景,得到实际长度与世界空间长度后移动相机到对应位置,用户在该线段上临摹出1:1大小的户型;
S107、户型生成后,所有的点实例、线实例及门窗洞实例收集所有构建户型所需的数据写入项目中的二维平面绘制信息合集内;
S108、通过墙线数据起点、终点、墙左宽和墙右宽,运用向量计算方法,求出该墙线与其他相交面的交点,计算出6条边缘线,作为墙体、地板、天花板绘制的基础数据;
S109、通过所有墙体的左右2条边缘线,寻找出所有的封闭曲线,得出房间内部空间的所有边缘线,使用简易边缘数据生成网格填充算法对地面和天花板进行填充,绘制出地板和天花板面的图形;
S110、通过窗户的起点、终点、宽度、高度和离地高度计算出需要绘制墙洞的区域和大小,绘制出带有墙洞和门洞的墙体,没有墙洞的区域根据地板到天花板的距离绘制全高的墙体;
S111、若窗厚度等于墙厚度为窗洞,根据窗户起点、终点、宽度、高度和离地高度计算出窗洞4个侧面的顶点,计算侧面的三角形数据和UV数据;
若窗户厚度小于墙厚的为塌陷,根据窗户起点、终点、宽度、高度和离地高度计算出窗洞4个侧面的顶点后,再计算墙体塌陷的内侧面,最终转换为顶点、三角形、UV数据;
若窗户厚度大于墙厚的为飘窗,飘窗的上下两个面使用窗户厚度进行计算,得出上下面延伸到墙体的外侧,再根据延伸的点位置,以及延伸点到墙体的距离,对上下面进行加壳网格的计算,飘窗的上面的顶点向上偏移预设厚度,飘窗的下面点向下延伸预设厚度,得出飘窗上下壳体的网格点位置。
在以上技术方案的基础上,优选的,S101中点数据包括:点的ID和二维坐标;
线数据包括:线的ID、起点ID、终点ID、墙左宽leftWidth、墙右宽rightWidth和墙高度WallHeight;
门窗洞数据包括门窗洞ID、起点坐标startPos、终点坐标endPos、高度height、离地高度groundheight、宽度、延伸宽度、朝向和旋转。
进一步优选的,S101中每个项目信息均有唯一的一份Profile数据,其中包括了四段JSON数据,分别为PI、PPM、SGM、OSM;
PI为ProjectInfo,即项目信息,保存项目的项目名和创建时间;
PPM为PlanePaintMap,即平面绘制图,保存项目的二维平面绘制数据;
SGM为StereoGenerationMap,即几何生成图,保存二维平面绘制数据之外的三维数据信息;
OSM为ObjectSerializationMap,即对象序列化图,主要保存场景布置的数据。
在以上技术方案的基础上,优选的,S105和S108中墙体轮廓线计算方法包括以下步骤:
S201、找到与墙体的墙线共端点的所有墙线,从共端点的所有墙线中找出顺时针夹角最小的一条相邻墙线,把墙线和相邻墙线按照墙体的厚度向左和向右平移,每条墙线得到两条边缘线,根据直线相交算法求出四条边缘线的交点;
S202、若此墙线没有其他交线,则使用端点直接左右平移厚度,得出端点位置;
S203、利用同样的方法计算出此墙线的另一个共端点相交的另外3个端点,一共6个端点,构成墙体的轮廓线,墙线的左侧端点构成左边缘线,右侧端点相连得到右边缘线。
进一步优选的,S201中找到与墙体的墙线共端点的墙线的方法包括以下步骤:
S601、获取墙线左右端点的坐标,记为Point1和Point2,相减并归一化得出与墙线方向垂直线的方向向量lineDir;
S602、定义一个旋转向量,得出旋转向量相对于x正半轴的夹角angle,再加上旋转的角度,得到旋转向量旋转后的角度;
S603、平移后的左边缘线的左端点为该墙线的左端点与左墙面直线到该墙线的距离之和,左墙面直线的右端点为该墙线的右端点与左墙面直线到该墙线的距离之和,平移后的右墙面直线的左端点为该墙线的左端点与右墙面直线到该墙线的距离之和,右墙面直线的右端点为该墙线的右端点与右墙面直线到该墙线的距离之和,使用平移后的墙线进行直线交点计算,得出墙线的相交点。
更进一步优选的,S109中简易边缘数据生成网格填充算法包括以下步骤:
S301、计算出墙线的共端点旋转一周后所有数据点的平均值,得出中心点,然后按照数据点的顺序进行夹角求解,并将结果相加,若角度和大于0则为顺时针,小于0则为逆时针,从而得出数据的顺逆时针顺序,最后进行顺序的归一化;
S302、按照给定的方向遍历数据,按照数据中首个点,以及每两点相邻点组成一个三角形;
S303、判断相邻2点的连线是否与轮廓线有交点,若没有交点,作为能构建三角形的第一步判断;
S304、判断此三角形是否为区域内部的三角形,判断方法为在三角形内取多个点,从某点发出多条直线,并与封闭区域轮廓线段进行交叉的计算,根据交点个数确定此点是否在区域内部,利用这种方法判断这些点是否全在图形区域的内部,若是,则作为能构建三角形的第二步判断;
S305、若经过以上判断都可以构建三角形,则构建一个三角形,并剔除当前的轮廓点;
S306、若不能构建三角形,则判断下一个轮廓点,重复以上步骤最终完成全部区域内部的三角形计算;
S307、三角形数据转化为网格数据,用于网格的显示和储存。
更进一步优选的,S109中绘制地板和天花板的方法包括以下步骤:
S401、将所有的墙体边缘线储存于链表中,把第一个边缘线作为起始边缘线;
S402、从起始边缘线的一个端点开始寻找与其相交的边缘线,找到边缘线之后使用边缘线的另一端再次寻找与其相连的边缘线;
S403、若一条边缘线找不到与其相交的边缘线,说明此边缘线的终点的墙体端点没有与其他墙相交,下一个边缘线为墙体的另一侧边缘线;
S404、若找到下一个边缘线即为起始边缘线,则确认找到一个封闭区域,把封闭区域包含的边缘线从全部边缘线链表中移除;
S405、重复S401~S404过程直到边缘线链表中数量为0,则找到所有的房间区域边缘论轮廓线。
更进一步优选的,S110中墙洞的绘制方法包括以下步骤:
S501、获取全部窗洞门洞列表,找到每一个墙体上所有开洞的点;
S502、将门窗洞数据中的起点再次定义为左开洞点windowLeftPoint,将门窗洞数据中的终点向对侧墙体边缘线投影,投影位置为墙面上窗户的右开洞点windowRightPoint,此两点竖直高度都为0;
S503、在地板到天花板之间的墙面上沿竖直方向截出与窗洞门洞同宽的区域,窗户将该区域划分为上部分、窗洞和下部分,定义一个方向为竖直向上的方向向量Vector3.up,窗洞沿竖直方向的4个数据点分别表示为windowLeftPoint+groundheight*Vector3.up、windowRightPoint+groundheight*Vector3.up、windowLeftPoint+Vector3.up*(groundheight+height)、windowRightPoint+Vector3.up*(groundheight+height);
上部分沿竖直方向的4个点分别表示为:windowLeftPoint+Vector3.up*(groundheight+height)、windowRightPoint+Vector3.up*(groundheight+height)、windowLeftPoint+Vector3.up*WallHeight、windowRightPoint+Vector3.up*WallHeight;
下部分沿墙面的4个点分别表示为:windowLeftPoint、windowLeftPoint+groundheight*Vector3.up、windowRightPoint、windowRightPoint+groundheight*Vector3.up。
本发明的一种二维到三维的户型设计方法相对于现有技术具有以下有益效果:
(1)通过左右平移墙线得到墙的边缘线、墙左宽和墙右宽,通过墙线数据第一个点、第二个点位置、墙壁左宽和墙右宽,运用向量计算方法,求出与其他相交面的交点,计算出6条边缘线;
(2)通过使用全部墙体的左右2条边缘线,寻找出全部的封闭曲线,得到一个房间内部的空间的全部边缘线,并使用填充算法对地面和天花板进行填充,绘制出最终的地板和天花板的面的图形;
(3)通过使用窗户的起点、终点和宽度计算出需要绘制墙洞的区域,没有墙洞的区域直接根据地面高度和顶面高度绘制全高的墙体。有洞的部分计算出窗户下部分墙面和上部分墙面进行计算,最终绘制出带有墙洞和门洞的墙体;
(4)通过对墙体的算法、地板和天花板的算法、门窗洞的算法,可以快速地将二维平面图转换成三维立体图。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的一种二维到三维的户型设计方法的流程图;
图2为本发明的一种二维到三维的户型设计方法中墙体轮廓线计算方法的流程图;
图3为本发明的一种二维到三维的户型设计方法中找到与墙体的墙线共端点的墙线的方法的流程图;
图4为本发明的一种二维到三维的户型设计方法中简易边缘数据生成网格填充算法的流程图;
图5为本发明的一种二维到三维的户型设计方法中绘制地板和天花板的方法的流程图;
图6为本发明的一种二维到三维的户型设计方法中墙洞的绘制方法的流程图;
图7为本发明的一种二维到三维的户型设计方法中墙体的结构图;
图8为本发明的一种二维到三维的户型设计方法中窗户与墙体的结构。
具体实施方式
下面将结合本发明实施方式,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式仅仅是本发明一部分实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。
如图1所示,本发明的一种二维到三维的户型设计方法,其包括以下步骤:
S101、从数据库中读取当前操作的项目信息,读取当前方案上次操作保存的二维平面绘制信息,初始化户型图点数据、线数据、门窗洞数据信息的数据合集,获取保存的点线数据合集,遍历所有的点线数据,初始化并调用ActionController生成点实例和线实例,遍历门窗洞数据生成门窗洞实例;
S102、初始化ID生成器,为每个点、线和门窗洞实例生成不重复的ID;
S103、初始化绘制功能状态机、主编辑状态、画墙线状态、集合绘制状态、编辑墙线状态、绘制门窗洞状态和编辑门窗洞状态;
S104、初始化相机控制器,相机使用正交视角,根据点线位置求二维坐标下的最大最小值,得到相机范围,调整相机位置,生成绘制所需的距离提示器和位置提示器;
S105、利用墙体轮廓线计算方法获得墙体轮廓线,利用简易边缘线生成方法计算生成网格,计算出墙体网格顶点数据,网格生成后由ID生成器遍历所有的线实例,为线实例上MeshFilter组件添加网格;
S106、导入户型图,使用WWW将图片加载成Texture2D文件,遍历Texture2D像素,使用灰度算法赋值颜色,进入比例尺绘制,选择已知实际长度的一段线段进入比例尺临摹场景,得到实际长度与世界空间长度后移动相机到对应位置,用户在该线段上临摹出1:1大小的户型;
S107、户型生成后,所有的点实例、线实例及门窗洞实例收集所有构建户型所需的数据写入项目中的二维平面绘制信息合集内;
S108、通过墙线数据起点、终点、墙左宽和墙右宽,运用向量计算方法,求出该墙线与其他相交面的交点,计算出6条边缘线,作为墙体、地板、天花板绘制的基础数据;
S109、通过所有墙体的左右2条边缘线,寻找出所有的封闭曲线,得出房间内部空间的所有边缘线,使用简易边缘数据生成网格填充算法对地面和天花板进行填充,绘制出地板和天花板面的图形;
S110、通过窗户的起点、终点、宽度、高度和离地高度计算出需要绘制墙洞的区域和大小,绘制出带有墙洞和门洞的墙体,没有墙洞的区域根据地板到天花板的距离绘制全高的墙体;
S111、若窗厚度等于墙厚度为窗洞,根据窗户起点、终点、宽度、高度和离地高度计算出窗洞4个侧面的顶点,利用简易边缘线进行网格填充的方法计算三角形数据、UV数据;
若窗户厚度小于墙厚的为塌陷,根据窗户起点、终点、宽度、高度和离地高度计算出窗洞4个侧面的顶点后,再计算墙体塌陷的内侧面,最终转换为顶点、三角形、UV数据;
若窗户厚度大于墙厚的为飘窗,飘窗的上下两个面使用窗户厚度进行计算,得出上下面延伸到墙体的外侧,再根据延伸的点位置,以及延伸点到墙体的距离,对上下面进行加壳网格的计算,飘窗的上面的顶点向上偏移预设厚度,飘窗的下面点向下延伸预设厚度,得出飘窗上下壳体的网格点位置。
其中,S101中点数据包括:点的ID和二维坐标,线数据包括:线的ID、起点ID、终点ID、墙左宽leftWidth、墙右宽rightWidth和墙高度WallHeight,门窗洞数据包括门窗洞ID、起点坐标startPos、终点坐标endPos、高度height、离地高度groundheight、宽度、延伸宽度、朝向和旋转。
S101中每个项目信息均有唯一的一份Profile数据,其中包括了四段JSON数据,分别为PI、PPM、SGM、OSM;
PI为ProjectInfo,即项目信息,保存项目的项目名和创建时间;
PPM为PlanePaintMap,即平面绘制图,保存项目的二维平面绘制数据;
SGM为StereoGenerationMap,即几何生成图,保存二维平面绘制数据之外的三维数据信息;
OSM为ObjectSerializationMap,即对象序列化图,主要保存场景布置的数据。
其中,在用户开始生成户型时,会进入DataSerializable,即数据序列化,遍历所有的点实例、线实例及门窗洞实例,收集所有构建户型所需的数据写入ProjectInfo.PPM。数据为JSON格式,数据格式包含“IDIndex”,储存IDCreator的最大ID;“WallHeight”当前墙高;“Point”所有点信息,“Point”内包含“ID”、“X”x轴坐标、“Y”y轴坐标;“_Line”所有线信息,“_Line”内包含线的“ID”,“P1”第一个点ID,“P2”第二个点ID,“leftWidth”墙左宽,“rightWidth”墙右宽;“_DAWs”包含所有门窗洞信息,包含门窗洞的“ID”,“height”高度,“groundheight”离地高度,“rightOrLeft”左右朝向,“startPos”起点坐标,“endPos”终点坐标,“rotation”旋转,“lineID”所在线的ID。
步骤S101~S105的主要目的是先读取项目信息中Profile.PPM二维户型图信息,若Profile.PPM二维户型图信息中有二维户型图的数据则先将Profile.PPM二维户型图信息生成点线实例,并初始化绘制工具以及生成网格,网格生成后在绘制过程中一直存在,通过网格获取墙体顶点数据。若开始时,Profile.PPM内没有二维户型图信息,则执行S106,即导入一张jpg或png格式的图片,开始步骤S106~S110。
S106中,灰度算法为Gray=R*0.299+G*0.587+B*0.114。S106中在临摹jpg或png格式的户型图,绘制墙线时,通过鼠标两次点击的位置得到数据化的两个点,调用ActionController生成,生成时会计算是否与其他点重合,重合即覆盖,还会计算线于线是否产生相交,若相交则计算相交切割,生成相邻的多条线段;绘制门窗洞时,鼠标会吸附墙的左边缘线或右边缘线,以此边为起点按住拖拽鼠标往反方向延伸,到达要求大小后释放鼠标即可绘制出门窗洞,门窗洞储存有高、宽、延伸宽度、离地高度等构建数据,经用户在编辑模式调整后即可绘制出一个精准的门窗洞。鼠标的吸附功能是由吸附池完成的,用户在移动鼠标时,会将鼠标世界空间位置与所有的点线数据进行比较,求出在吸附阀值范围内距离最近的一个实例,使鼠标靠位。
通过墙线数据起点、终点、墙左宽和墙右宽,运用向量计算方法,求出与其他相交面的交点,计算出6条边缘线,作为墙体、地板、天花板绘制的基础数据,最后算法得出结果为:墙体6个端点构成的轮廓线位置数据、墙体左右边缘线。如图2和图7所示,S108中墙体轮廓线计算方法包括以下步骤:
S201、找到与墙体的墙线共端点的所有墙线,从共端点的所有墙线中找出顺时针夹角最小的一条相邻墙线,把墙线和相邻墙线按照墙体的厚度向左和向右平移,每条墙线得到两条边缘线,根据直线相交算法求出四条边缘线的交点;
S202、若此墙线没有其他交线,则使用端点直接左右平移厚度,得出端点位置;
S203、利用同样的方法计算出此墙线的另一个共端点相交的另外3个端点,一共6个端点,构成墙体的轮廓线,墙线的左侧端点构成左边缘线,右侧端点相连得到右边缘线。
其中,如图3所示,201中找到与墙体的墙线共端点的墙线的方法包括以下步骤:
S601、获取墙线左右端点的坐标,记为Point1和Point2,相减并归一化得出与墙线方向垂直线的方向向量lineDir;
S602、定义一个旋转向量,使用Unity3d的APIGetRotateAngle得出旋转向量相对于x正半轴的夹角angle,再加上旋转的角度,得到旋转向量旋转后的角度;
S603、平移后的左边缘线的左端点为该墙线的左端点与左墙面直线到该墙线的距离之和,左墙面直线的右端点为该墙线的右端点与左墙面直线到该墙线的距离之和,平移后的右墙面直线的左端点为该墙线的左端点与右墙面直线到该墙线的距离之和,右墙面直线的右端点为该墙线的右端点与右墙面直线到该墙线的距离之和,使用平移后的墙线进行直线交点计算,得出墙线的相交点。
需要注意的是,S601中,方向向量的定义方法为:lineDir=(Point2-Point1).normalized;
S602中,逆时针即addAngle为90°得到leftDir,顺时针addAngle为-90°得出rightDir,RotateAngle的计算方法是,旋转向量origin相对于x正半轴的夹角angle定义为angle=GetRotateAngle(Vector2.right,origin);加上旋转的角度得到旋转后的角度:angle=angle+addAngle%360f;
addAngle使用的是360度制,计算时转换为弧度制:floatrAngle=Mathf.PI*angle/180,然后用三角函数求出新的旋转向量,得出最终结果:Vector2(Mathf.Cos(rAngle),Mathf.Sin(rAngle));
S603中,平移后的左墙线的端点为Point2+leftDi*leftWidth、Point1+leftDir*rightWidth,右墙线的端点为Point2+rightDir、Point1+rightDir,使用平移后的墙线进行直线交点计算,得出墙线的相交点。
本发明的主要工作流程中,如图4所示,S109中简易边缘数据生成网格填充算法包括以下步骤:
S301、计算出墙线的共端点旋转一周后所有数据点的平均值,得出中心点,然后按照数据点的顺序进行夹角求解,并将结果相加,若角度和大于0则为顺时针,小于0则为逆时针,从而得出数据的顺逆时针顺序,最后进行顺序的归一化;
S302、按照给定的方向遍历数据,按照数据中首个点,以及每两点相邻点组成一个三角形;
S303、判断相邻2点的连线是否与轮廓线有交点,若没有交点,作为能构建三角形的第一步判断;
S304、判断此三角形是否为区域内部的三角形,判断方法为在三角形内取多个点,从某点发出多条直线,并与封闭区域轮廓线段进行交叉的计算,根据交点个数确定此点是否在区域内部,利用这种方法判断这些点是否全在图形区域的内部,若是,则作为能构建三角形的第二步判断;
S305、若经过以上判断都可以构建三角形,则构建一个三角形,并剔除当前的轮廓点;
S306、若不能构建三角形,则判断下一个轮廓点,重复以上步骤最终完成全部区域内部的三角形计算;
S307、三角形数据转化为网格数据,用于网格的显示和储存。
其中,使用全部墙体的左右2条边缘线,寻找出全部的封闭曲线,得到一个房间内部的空间的全部边缘线,并使用简易边缘数据生成网格数据填充算法对地面和天花板进行填充,绘制出最终的地板和天花板的面的图形。如图5所示,S109中绘制地板和天花板的方法包括以下步骤:
S401、将所有的墙体边缘线储存于链表中,把第一个边缘线作为起始边缘线;
S402、从起始边缘线的一个端点开始寻找与其相交的边缘线,找到边缘线之后使用边缘线的另一端再次寻找与其相连的边缘线;
S403、若一条边缘线找不到与其相交的边缘线,说明此边缘线的终点的墙体端点没有与其他墙相交,下一个边缘线为墙体的另一侧边缘线;
S404、若找到下一个边缘线即为起始边缘线,则确认找到一个封闭区域,把封闭区域包含的边缘线从全部边缘线链表中移除;
S405、重复S401~S404过程直到边缘线链表中数量为0,则找到所有的房间区域边缘论轮廓线。
其中,使用窗户的起点、终点和宽度计算出需要绘制墙洞的区域,没有墙洞的区域直接根据地面高度和顶面高度绘制全高的墙体,有洞的部分计算出窗户下部分墙面和上部分墙面进行计算,最终绘制出带有墙洞和门洞的墙体。如图6和图8所示,S110中墙洞的绘制方法包括以下步骤:
S501、获取全部窗洞门洞列表,找到每一个墙体上所有开洞的点;
S502、将门窗洞数据中的起点再次定义为左开洞点windowLeftPoint,将门窗洞数据中的终点向对侧墙体边缘线投影,投影位置为墙面上窗户的右开洞点windowRightPoint,此两点竖直高度都为0;
S503、在地板到天花板之间的墙面上沿竖直方向截出与门窗洞同宽的区域,窗户将该区域划分为上部分、窗洞和下部分,定义一个方向为竖直向上的方向向量Vector3.up,窗洞沿竖直方向的4个数据点分别表示为windowLeftPoint+groundheight*Vector3.up、windowRightPoint+groundheight*Vector3.up、windowLeftPoint+Vector3.up*(groundheight+height)、windowRightPoint+Vector3.up*(groundheight+height);
上部分沿竖直方向的4个点分别表示为:windowLeftPoint+Vector3.up*(groundheight+height)、windowRightPoint+Vector3.up*(groundheight+height)、windowLeftPoint+Vector3.up*WallHeight、windowRightPoint+Vector3.up*WallHeight;
下部分沿墙面的4个点分别表示为:windowLeftPoint、windowLeftPoint+groundheight*Vector3.up、windowRightPoint、windowRightPoint+groundheight*Vector3.up。
其中,Vector3是unity中定义的一个含有x,y,z三个字段的类,可以表示位置点,也可以表示一个向量。Vector3.up在本发明中是一个方向向上的方向向量,Vector3.up乘以数值表示对向量的三个值乘以相应的值,windowLeftPoint+groundheight*Vector3.up表示左开洞点的坐标沿竖直方向加上窗户的离地高度之后的坐标,同理可得门窗洞的顶点坐标,根据门窗洞的顶点坐标,利用简易边缘数据生成网格填充算法画出门窗洞。
以上所述仅为本发明的较佳实施方式而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种二维到三维的户型设计方法,其包括以下步骤:
S101、从数据库中读取当前操作的项目信息,读取当前方案上次操作保存的二维平面绘制信息,初始化户型图点数据、线数据、门窗洞数据信息的数据合集,获取保存的点线数据合集,遍历所有的点线数据,初始化并调用ActionController生成点实例和线实例,遍历门窗洞数据生成门窗洞实例;
S102、初始化ID生成器,为每个点、线和门窗洞实例生成不重复的ID;
S103、初始化绘制功能状态机、主编辑状态、画墙线状态、集合绘制状态、编辑墙线状态、绘制门窗洞状态和编辑门窗洞状态;
S104、初始化相机控制器,相机使用正交视角,根据点线位置求二维坐标下的最大最小值,得到相机范围,调整相机位置,生成绘制所需的距离提示器和位置提示器;
S105、利用墙体轮廓线计算方法获得墙体轮廓线,利用简易边缘线生成方法计算生成网格,计算出墙体网格顶点数据,网络生成后由ID生成器遍历所有的线实例,为线实例上MeshFilter组件添加网格;
S106、导入户型图,使用WWW将图片加载成Texture2D文件,遍历Texture2D像素,使用灰度算法赋值颜色,进入比例尺绘制,选择已知实际长度的一段线段进入比例尺临摹场景,得到实际长度与世界空间长度后移动相机到对应位置,用户在该线段上临摹出1:1大小的户型;
S107、户型生成后,所有的点实例、线实例及门窗洞实例收集所有构建户型所需的数据写入项目中的二维平面绘制信息合集内;
S108、通过墙线数据起点、终点、墙左宽和墙右宽,运用向量计算方法,求出该墙线与其他相交面的交点,计算出6条边缘线,作为墙体、地板、天花板绘制的基础数据;
S109、通过所有墙体的左右2条边缘线,寻找出所有的封闭曲线,得出房间内部空间的所有边缘线,使用简易边缘数据生成网格填充算法对地面和天花板进行填充,绘制出地板和天花板面的图形;
S110、通过窗户的起点、终点、宽度、高度和离地高度计算出需要绘制墙洞的区域和大小,绘制出带有墙洞和门洞的墙体,没有墙洞的区域根据地板到天花板的距离绘制全高的墙体;
S111、若窗厚度等于墙厚度为窗洞,根据窗户起点、终点、宽度、高度和离地高度计算出窗洞4个侧面的顶点,计算侧面的三角形数据和UV数据;
若窗户厚度小于墙厚的为塌陷,根据窗户起点、终点、宽度、高度和离地高度计算出窗洞4个侧面的顶点后,再计算墙体塌陷的内侧面,最终转换为顶点、三角形、UV数据;
若窗户厚度大于墙厚的为飘窗,飘窗的上下两个面使用窗户厚度进行计算,得出上下面延伸到墙体的外侧,再根据延伸的点位置,以及延伸点到墙体的距离,对上下面进行加壳网格的计算,飘窗的上面的顶点向上偏移预设厚度,飘窗的下面点向下延伸预设厚度,得出飘窗上下壳体的网格点位置。
2.如权利要求1所述的一种二维到三维的户型设计方法,其特征在于:所述S101中点数据包括:点的ID和二维坐标;
所述线数据包括:线的ID、起点ID、终点ID、墙左宽leftWidth、墙右宽rightWidth和墙高度WallHeight;
所述门窗洞数据包括门窗洞ID、起点坐标startPos、终点坐标endPos、高度height、离地高度groundheight、宽度、延伸宽度、朝向和旋转。
3.如权利要求2所述的一种二维到三维的户型设计方法,其特征在于:所述S101中每个项目信息均有唯一的一份Profile数据,其中包括了四段JSON数据,分别为PI、PPM、SGM、OSM;
所述PI为ProjectInfo,即项目信息,保存项目的项目名和创建时间;
所述PPM为PlanePaintMap,即平面绘制图,保存项目的二维平面绘制数据;
所述SGM为StereoGenerationMap,即几何生成图,保存二维平面绘制数据之外的三维数据信息;
所述OSM为ObjectSerializationMap,即对象序列化图,主要保存场景布置的数据。
4.如权利要求1所述的一种二维到三维的户型设计方法,其特征在于:所述,S105和S108中墙体轮廓线计算方法包括以下步骤:
S201、找到与墙体的墙线共端点的所有墙线,从共端点的所有墙线中找出顺时针夹角最小的一条相邻墙线,把墙线和相邻墙线按照墙体的厚度向左和向右平移,每条墙线得到两条边缘线,根据直线相交算法求出四条边缘线的交点;
S202、若此墙线没有其他交线,则使用端点直接左右平移厚度,得出端点位置;
S203、利用同样的方法计算出此墙线的另一个共端点相交的另外3个端点,一共6个端点,构成墙体的轮廓线,墙线的左侧端点构成左边缘线,右侧端点相连得到右边缘线。
5.如权利要求4所述的一种二维到三维的户型设计方法,其特征在于:所述201中找到与墙体的墙线共端点的墙线的方法包括以下步骤:
S601、获取墙线左右端点的坐标,记为Point1和Point2,相减并归一化得出与墙线方向垂直线的方向向量lineDir;
S602、定义一个旋转向量,得出旋转向量相对于x正半轴的夹角angle,再加上旋转的角度,得到旋转向量旋转后的角度;
S603、平移后的左边缘线的左端点为该墙线的左端点与左墙面直线到该墙线的距离之和,左墙面直线的右端点为该墙线的右端点与左墙面直线到该墙线的距离之和,平移后的右墙面直线的左端点为该墙线的左端点与右墙面直线到该墙线的距离之和,右墙面直线的右端点为该墙线的右端点与右墙面直线到该墙线的距离之和,使用平移后的墙线进行直线交点计算,得出墙线的相交点。
6.如权利要求4所述的一种二维到三维的户型设计方法,其特征在于:所述S109中简易边缘数据生成网格填充算法包括以下步骤:
S301、计算出墙线的共端点旋转一周后所有数据点的平均值,得出中心点,然后按照数据点的顺序进行夹角求解,并将结果相加,若角度和大于0则为顺时针,小于0则为逆时针,从而得出数据的顺逆时针顺序,最后进行顺序的归一化;
S302、按照给定的方向遍历数据,按照数据中首个点,以及每两点相邻点组成一个三角形;
S303、判断相邻2点的连线是否与轮廓线有交点,若没有交点,作为能构建三角形的第一步判断;
S304、判断此三角形是否为区域内部的三角形,判断方法为在三角形内取多个点,从某点发出多条直线,并与封闭区域轮廓线段进行交叉的计算,根据交点个数确定此点是否在区域内部,利用这种方法判断这些点是否全在图形区域的内部,若是,则作为能构建三角形的第二步判断;
S305、若经过以上判断都可以构建三角形,则构建一个三角形,并剔除当前的轮廓点;
S306、若不能构建三角形,则判断下一个轮廓点,重复以上步骤最终完成全部区域内部的三角形计算;
S307、三角形数据转化为网格数据,用于网格的显示和储存。
7.如权利要求5所述的一种二维到三维的户型设计方法,其特征在于:所述S109中绘制地板和天花板的方法包括以下步骤:
S401、将所有的墙体边缘线储存于链表中,把第一个边缘线作为起始边缘线;
S402、从起始边缘线的一个端点开始寻找与其相交的边缘线,找到边缘线之后使用边缘线的另一端再次寻找与其相连的边缘线;
S403、若一条边缘线找不到与其相交的边缘线,说明此边缘线的终点的墙体端点没有与其他墙相交,下一个边缘线为墙体的另一侧边缘线;
S404、若找到下一个边缘线即为起始边缘线,则确认找到一个封闭区域,把封闭区域包含的边缘线从全部边缘线链表中移除;
S405、重复S401~S404过程直到边缘线链表中数量为0,则找到所有的房间区域边缘论轮廓线。
8.如权利要求1至7中任一项所述的一种二维到三维的户型设计方法,其特征在于:所述S110中墙洞的绘制方法包括以下步骤:
S501、获取全部窗洞门洞列表,找到每一个墙体上所有开洞的点;
S502、将门窗洞数据中的起点再次定义为左开洞点windowLeftPoint,将门窗洞数据中的终点向对侧墙体边缘线投影,投影位置为墙面上窗户的右开洞点windowRightPoint,此两点竖直高度都为0;
S503、在地板到天花板之间的墙面上沿竖直方向截出与窗洞门洞同宽的区域,窗户将该区域划分为上部分、窗洞和下部分,定义一个方向为竖直向上的方向向量Vector3.up,窗洞沿竖直方向的4个数据点分别表示为windowLeftPoint+groundheight*Vector3.up、windowRightPoint+groundheight*Vector3.up、windowLeftPoint+Vector3.up*(groundheight+height)、windowRightPoint+Vector3.up*(groundheight+height);
上部分沿竖直方向的4个点分别表示为:windowLeftPoint+Vector3.up*(groundheight+height)、windowRightPoint+Vector3.up*(groundheight+height)、windowLeftPoint+Vector3.up*WallHeight、windowRightPoint+Vector3.up*WallHeight;
下部分沿墙面的4个点分别表示为:windowLeftPoint、windowLeftPoint+groundheight*Vector3.up、windowRightPoint和windowRightPoint+groundheight*Vector3.up。
CN201811536601.9A 2018-12-15 2018-12-15 一种二维到三维的户型设计方法 Active CN109711018B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811536601.9A CN109711018B (zh) 2018-12-15 2018-12-15 一种二维到三维的户型设计方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811536601.9A CN109711018B (zh) 2018-12-15 2018-12-15 一种二维到三维的户型设计方法

Publications (2)

Publication Number Publication Date
CN109711018A true CN109711018A (zh) 2019-05-03
CN109711018B CN109711018B (zh) 2022-11-22

Family

ID=66256568

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811536601.9A Active CN109711018B (zh) 2018-12-15 2018-12-15 一种二维到三维的户型设计方法

Country Status (1)

Country Link
CN (1) CN109711018B (zh)

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110210377A (zh) * 2019-05-30 2019-09-06 南京维狸家智能科技有限公司 一种用于三维户型重建的墙体及门窗信息获取方法
CN110322552A (zh) * 2019-07-09 2019-10-11 广州市云家居云科技有限公司 一种基于激光测距的即时生成三维房型的软件系统
CN111008484A (zh) * 2019-12-24 2020-04-14 深圳市蓝图速配科技有限公司 一种二维户型图转三维场景图的处理方法
CN111079263A (zh) * 2019-11-22 2020-04-28 久瓴(上海)智能科技有限公司 建筑主体结构生成方法、装置、计算机设备和存储介质
CN111127357A (zh) * 2019-12-18 2020-05-08 北京城市网邻信息技术有限公司 户型图处理方法、系统、装置和计算机可读存储介质
CN111159795A (zh) * 2019-11-22 2020-05-15 久瓴(上海)智能科技有限公司 玻璃幕墙生成方法、装置、计算机设备和存储介质
CN111275820A (zh) * 2020-01-15 2020-06-12 深圳市华橙数字科技有限公司 基于二维平面绘制三维墙体方法、装置、终端和存储介质
CN111310261A (zh) * 2020-01-23 2020-06-19 久瓴(上海)智能科技有限公司 内墙饰面砖模型生成方法、装置、计算机设备和存储介质
CN111383355A (zh) * 2020-04-03 2020-07-07 贝壳技术有限公司 三维点云补全方法、装置和计算机可读存储介质
CN111539064A (zh) * 2020-03-30 2020-08-14 中车青岛四方机车车辆股份有限公司 一种中线及厚度提取方法及有限元网格自动生成方法
CN111859506A (zh) * 2020-07-17 2020-10-30 无锡窗造软件有限公司 一种基于双向链表算法的门窗设计系统
CN111859510A (zh) * 2020-07-28 2020-10-30 苏州金螳螂三维软件有限公司 房间快速换装方法、智能终端
CN112150492A (zh) * 2019-06-26 2020-12-29 司空定制家居科技有限公司 户型图的读取方法、装置以及存储介质
CN112231787A (zh) * 2020-10-16 2021-01-15 苏州织巢信息科技有限公司 一种应用于家装系统中墙体辅助绘制方法、装置
CN112270739A (zh) * 2020-07-15 2021-01-26 深圳市华橙数字科技有限公司 基于二维的室内区域确认方法、装置、终端及存储介质
CN112347539A (zh) * 2020-11-06 2021-02-09 久瓴(江苏)数字智能科技有限公司 墙线是否相交的确定方法、确定装置和处理器
CN112802151A (zh) * 2020-12-25 2021-05-14 佛山欧神诺云商科技有限公司 一种墙线绘制方法、电子设备、存储介质
CN113297662A (zh) * 2021-06-10 2021-08-24 第三维度(河南)软件科技有限公司 一种基于扫描线的户型归属自动识别方法
CN113536408A (zh) * 2021-07-01 2021-10-22 华蓝设计(集团)有限公司 基于cad外部参照协同模式的住宅核心筒面积计算方法
CN114092642A (zh) * 2021-11-18 2022-02-25 北京字节跳动网络技术有限公司 一种三维户型模型生成方法、装置及设备
CN112270739B (zh) * 2020-07-15 2024-05-14 深圳市华橙数字科技有限公司 基于二维的室内区域确认方法、装置、终端及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107274486A (zh) * 2017-06-26 2017-10-20 广州天翌云信息科技有限公司 一种模型3d效果图的生成方法
CN107515986A (zh) * 2017-08-25 2017-12-26 当家移动绿色互联网技术集团有限公司 编辑2d户型图生成3d户型场景的方法
CN108268862A (zh) * 2018-02-09 2018-07-10 广州大学 基于建筑图纸的门和窗自动识别方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107274486A (zh) * 2017-06-26 2017-10-20 广州天翌云信息科技有限公司 一种模型3d效果图的生成方法
CN107515986A (zh) * 2017-08-25 2017-12-26 当家移动绿色互联网技术集团有限公司 编辑2d户型图生成3d户型场景的方法
CN108268862A (zh) * 2018-02-09 2018-07-10 广州大学 基于建筑图纸的门和窗自动识别方法

Cited By (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110210377B (zh) * 2019-05-30 2023-07-28 南京维狸家智能科技有限公司 一种用于三维户型重建的墙体及门窗信息获取方法
CN110210377A (zh) * 2019-05-30 2019-09-06 南京维狸家智能科技有限公司 一种用于三维户型重建的墙体及门窗信息获取方法
CN112150492A (zh) * 2019-06-26 2020-12-29 司空定制家居科技有限公司 户型图的读取方法、装置以及存储介质
CN110322552A (zh) * 2019-07-09 2019-10-11 广州市云家居云科技有限公司 一种基于激光测距的即时生成三维房型的软件系统
CN111079263A (zh) * 2019-11-22 2020-04-28 久瓴(上海)智能科技有限公司 建筑主体结构生成方法、装置、计算机设备和存储介质
CN111159795A (zh) * 2019-11-22 2020-05-15 久瓴(上海)智能科技有限公司 玻璃幕墙生成方法、装置、计算机设备和存储介质
CN111079263B (zh) * 2019-11-22 2023-06-16 久瓴(江苏)数字智能科技有限公司 建筑主体结构生成方法、装置、计算机设备和存储介质
CN111127357A (zh) * 2019-12-18 2020-05-08 北京城市网邻信息技术有限公司 户型图处理方法、系统、装置和计算机可读存储介质
CN111127357B (zh) * 2019-12-18 2021-05-04 北京城市网邻信息技术有限公司 户型图处理方法、系统、装置和计算机可读存储介质
CN111008484A (zh) * 2019-12-24 2020-04-14 深圳市蓝图速配科技有限公司 一种二维户型图转三维场景图的处理方法
CN111275820A (zh) * 2020-01-15 2020-06-12 深圳市华橙数字科技有限公司 基于二维平面绘制三维墙体方法、装置、终端和存储介质
CN111275820B (zh) * 2020-01-15 2023-09-19 深圳市华橙数字科技有限公司 基于二维平面绘制三维墙体方法、装置、终端和存储介质
CN111310261A (zh) * 2020-01-23 2020-06-19 久瓴(上海)智能科技有限公司 内墙饰面砖模型生成方法、装置、计算机设备和存储介质
CN111539064A (zh) * 2020-03-30 2020-08-14 中车青岛四方机车车辆股份有限公司 一种中线及厚度提取方法及有限元网格自动生成方法
CN111383355A (zh) * 2020-04-03 2020-07-07 贝壳技术有限公司 三维点云补全方法、装置和计算机可读存储介质
CN112270739A (zh) * 2020-07-15 2021-01-26 深圳市华橙数字科技有限公司 基于二维的室内区域确认方法、装置、终端及存储介质
CN112270739B (zh) * 2020-07-15 2024-05-14 深圳市华橙数字科技有限公司 基于二维的室内区域确认方法、装置、终端及存储介质
CN111859506A (zh) * 2020-07-17 2020-10-30 无锡窗造软件有限公司 一种基于双向链表算法的门窗设计系统
CN111859510A (zh) * 2020-07-28 2020-10-30 苏州金螳螂三维软件有限公司 房间快速换装方法、智能终端
CN112231787A (zh) * 2020-10-16 2021-01-15 苏州织巢信息科技有限公司 一种应用于家装系统中墙体辅助绘制方法、装置
CN112231787B (zh) * 2020-10-16 2024-04-19 深圳金装科技装饰工程有限公司 一种应用于家装系统中墙体辅助绘制方法、装置
CN112347539A (zh) * 2020-11-06 2021-02-09 久瓴(江苏)数字智能科技有限公司 墙线是否相交的确定方法、确定装置和处理器
CN112802151A (zh) * 2020-12-25 2021-05-14 佛山欧神诺云商科技有限公司 一种墙线绘制方法、电子设备、存储介质
CN112802151B (zh) * 2020-12-25 2023-02-17 佛山欧神诺云商科技有限公司 一种墙线绘制方法、电子设备、存储介质
CN113297662A (zh) * 2021-06-10 2021-08-24 第三维度(河南)软件科技有限公司 一种基于扫描线的户型归属自动识别方法
CN113536408A (zh) * 2021-07-01 2021-10-22 华蓝设计(集团)有限公司 基于cad外部参照协同模式的住宅核心筒面积计算方法
CN114092642A (zh) * 2021-11-18 2022-02-25 北京字节跳动网络技术有限公司 一种三维户型模型生成方法、装置及设备
CN114092642B (zh) * 2021-11-18 2024-01-26 抖音视界有限公司 一种三维户型模型生成方法、装置及设备

Also Published As

Publication number Publication date
CN109711018B (zh) 2022-11-22

Similar Documents

Publication Publication Date Title
CN109711018A (zh) 一种二维到三维的户型设计方法
CN105825550B (zh) 顾及一致性的复杂三维建筑物模型剖切建模方法
Vanegas et al. Procedural generation of parcels in urban modeling
CN103761397B (zh) 用于面曝光增材成型的3d模型切片及投影面生成方法
CN106600679A (zh) 一种三维模型数据简化的方法
CN104680573A (zh) 一种基于三角网格简化的纹理映射方法
CN104183016A (zh) 一种快速的2.5维建筑物模型的构建方法
CN103366402B (zh) 三维虚拟服饰的快速姿态同步方法
CN113706713A (zh) 一种实景三维模型裁剪方法、装置及计算机设备
Laycock et al. Automatically generating large urban environments based on the footprint data of buildings
CN111612911A (zh) 基于Dynamo的点云BIM自动化建模方法
CN111008416A (zh) 一种户型场景光照效果生成方法及系统
US20030117398A1 (en) Systems and methods for rendering frames of complex virtual environments
WO2017046875A1 (ja) 空間情報生成装置、空間情報生成方法、プログラム
US7116341B2 (en) Information presentation apparatus and method in three-dimensional virtual space and computer program therefor
Zhang et al. A geometry and texture coupled flexible generalization of urban building models
CN113051654B (zh) 基于二维gis数据的室内楼梯三维地理实体模型构建方法
CN112687007B (zh) 一种基于lod技术的立体网格图生成方法
CN109064546A (zh) 一种地形影像数据快速调度方法及其系统
Freiknecht et al. Procedural generation of multistory buildings with interior
JP2000340476A (ja) 形状シミュレーション方法、装置および記録媒体
CN112052489B (zh) 一种户型图生成方法及系统
Glander et al. Concepts for automatic generalization of virtual 3D landscape models
CN106033479B (zh) 一种屏风扩展式设计方法以及屏风制造方法
CN113486416A (zh) 一种3d建筑楼层分层的实现方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant