CN114693869B - 一种基于半边半面数据结构的3d打印实体模型生成方法 - Google Patents
一种基于半边半面数据结构的3d打印实体模型生成方法 Download PDFInfo
- Publication number
- CN114693869B CN114693869B CN202210227595.9A CN202210227595A CN114693869B CN 114693869 B CN114693869 B CN 114693869B CN 202210227595 A CN202210227595 A CN 202210227595A CN 114693869 B CN114693869 B CN 114693869B
- Authority
- CN
- China
- Prior art keywords
- face
- objects
- halfface
- list
- edge
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 54
- 238000010146 3D printing Methods 0.000 title claims abstract description 30
- 238000010276 construction Methods 0.000 claims abstract description 13
- 238000007689 inspection Methods 0.000 claims abstract description 4
- 239000000463 material Substances 0.000 claims description 17
- 238000007639 printing Methods 0.000 claims description 5
- 230000000295 complement effect Effects 0.000 claims description 3
- 230000003247 decreasing effect Effects 0.000 claims description 3
- 239000007787 solid Substances 0.000 abstract description 22
- 230000008569 process Effects 0.000 abstract description 6
- 238000003860 storage Methods 0.000 description 7
- 238000004458 analytical method Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 238000011960 computer-aided design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013499 data model Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012467 final product Substances 0.000 description 1
- 238000007429 general method Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 238000010845 search algorithm Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/10—Geometric CAD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2113/00—Details relating to the application field
- G06F2113/10—Additive manufacturing, e.g. 3D printing
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Geometry (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Graphics (AREA)
- Software Systems (AREA)
- Processing Or Creating Images (AREA)
- Image Generation (AREA)
Abstract
本发明提出一种基于半边半面数据结构的3D打印实体模型生成方法,步骤如下:步骤一、构建基础网格数据;步骤二、构建半面链接元素;步骤三、构建半边链接元素并构建半边环;步骤四、由已完成的内容补全所有已有对象中缺失的成员属性;步骤五、对上述构建完成的实体网格按照构建规则进行拓扑结构检查,确保包含的拓扑信息与链接元素之间的对应关系正确、完整,若没有问题则完成实体网格的构建。通过以上步骤,可以完成一个基于半边半面数据结构的样条实体模型构建过程,构建完成的样条实体模型不仅可以完整表达实体模型的几何拓扑结构,同时具有可以局部细分的优良特性,可以广泛应用于如3D打印模型构建等场景。
Description
技术领域
本发明提供一种基于半边半面数据结构的3D打印实体模型生成方法,即一种面向3D打印实体模型的基于半边半面数据结构表示的生成方法,它涉及一种用于在计算机中表示样条实体模型的半面数据结构以及基于该数据结构生成3D打印样条实体模型的方法,属于计算机辅助设计(Computer Aided Design,CAD)和计算机辅助制造(Computer AidedManufacturing,CAM)技术领域。
背景技术
目前CAD技术领域三维实体模型几何建模比较通用的方式是采用边界表示法(B-Rep,即Boundary Representation,意为边界表示,是目前使用最广泛的两种实体表示法之一)。在B-Rep方法中,几何实体使用封闭形体的边界曲面来表示,其最大的特点是将几何信息与拓扑信息分开表述,因此边界表示方法可以提供几何模型完整的边界信息,但这种表示方法缺乏对实体内部信息的完整表达,同时需要牺牲存储空间以及运算效率,并且不易表达具有复杂外形的几何模型,在等几何分析或者需要实体模型内部信息的应用如基于功能梯度材料的3D打印等场景无法满足现代工业的要求。
因此本发明提出了一种可以解决上述问题的基于半边半面的实体模型数据结构,基于此数据结构可以实现样条实体模型边界以及实体内部信息的完整表述,同时在一定程度上降低存储空间消耗并提高运算效率。
发明内容
(一)发明目的:
本发明的目的在于提出一种基于半边半面数据结构的3D打印实体模型生成方法,解决现有的B-REP方法无法详细描述实体内部信息的问题,同时提高运算效率降低存储空间的占用。该方法基于一种以半边及半面为核心元素的数据结构进行实体模型数据的生成;这种数据结构能够详细、准确地描述实体模型的完整拓扑、几何信息,同时可以有效弥补现有的非流形数据结构存在的缺陷,如存储空间增长以及无法准确描述实体模型内部信息等。基于该数据结构的实体模型生成方法的提出能够有效的提升实体模型数据生成的效率和质量,能够方便地应用于诸如3D打印模型生成等实际应用环境。
(二)技术方案:
本发明提出了一种基于半边半面数据结构的3D打印实体模型生成方法,即一种样条实体模型数据的生成方法,可以针对目前主流的B-Rep表示模型数据存储空间大,表达复杂实体结构运算效率低下等问题提供一种新的解决方法,减少存储空间,提高对实体模型尤其是复杂结构实体模型的运算效率,从而可以方便地应用于需要实体模型内部信息的工业场景,如三维拓扑优化、3D打印等;
本发明一种基于半边半面数据结构的3D打印实体模型生成方法,其步骤如下:
步骤一、构建基础网格数据;
构造一个实体网格对象SolidMesh,然后依次逐个创建所有的Anchor、Vertex、Edge、Face、Cube对象,并为每个对象添加相应的部分必要属性,同时将这些拓扑对象分别添加到mesh中的相应list中进行ID标识;
所述的“SolidMesh”,是指:一个实体网格对象,代表模型的整体网格对象,是“实体网格”的英文符号;
所述的“Vertex”,是指:实体网格中的拓扑元素对象——顶点,每个顶点指向一个三维空间中的笛卡尔点;
所述的“Edge”,是指:实体网格中的拓扑元素对象——边,每个边的两端各有一个顶点Vertex;
所述的“Face”,是指:实体网格中的拓扑元素对象——面,每个面代表一个三维空间中的二维平面区域,区域的边界由多个边Edge包围而成;
所述的“Cube”,是指:实体网格中的拓扑元素对象——实体单元,每个实体单元代表三维空间中的一个区域,区域的边界由多个面Face包围而成,同时多个实体单元无缝拼接共同组成实体网格Solidmesh的空间区域;
所述的“Anchor”,是指:实体网格中的几何元素对象——锚点,包含一个表示空间位置的几何坐标属性,以及表示锚点处材料性质的属性;
所述的“mesh”,是指:由点线等拓扑元素构成的网格框架;
所述的“list”,是指:一个列表,通常每个list中仅存放多个相同类型的对象,如vertexlist中仅存放点对象(vertex);
所述的“ID”,是指:索引标识号码。上述的每个拓扑对象及几何对象均需绑定一个ID,同时同类型的对象ID不能出现重复,但不同类型的对象ID可以重复,比如两个Vertex对象的ID号不能相同,但是一个Edge对象的ID号可以与另一个Vertex对象的ID号相同;
步骤二、构建半面链接元素;
对每个Face对象创建两个(非边界情况下)HalfFace对象,并设定每个HalfFace对象指向的Cube、Face对象,同时把这两个HalfFace(非边界情况下)相互设定为HOppo关系;
所述的“HalfFace”,是指:半面对象,是连接体面拓扑元素与边点拓扑元素的中间元素之一,是一个逻辑对象,仅存在于网格结构的逻辑结构层面,具有以下特性:①每个半面属于唯一的一个实体单元,②每个实体单元包含多个半面,③每个半面属于唯一的一个面,④面位于实体网格边界处时仅包含一个半面,其他面都包含两个半面;
所述的“HOppo”,是指:两个半面之间的位置关系——相对关系,如果两个半面指向同一个面对象则把这两个半面定义为一对相对(HOppo)的半面;
步骤三、构建半边链接元素并构建半边环;
对于每个HalfFace对象,执行以下两步操作:
1、按照HalfFace所在Face上的边对象的周向逆时针顺序逐个创建HalfEdge对象,每个HalfEdge对象创建后指定其所属的HalfFace、Edge、Vertex,同时将此HalfEdge添加到上述Edge对象的HalfEdgelist中;
2、按照创建顺序将HalfEdge存为list,对此list中的半边构建半边环,即指定每个半边的前置半边HPre及后置半边HNext;
所述的“HalfEdge”,是指:半边对象,是一个逻辑对象,仅存在于实体网格的逻辑结构层面,且具有以下特性:①每个半边都有唯一一个出发点(vertex),②每个半边都属于唯一一个边对象,③每个半边都属于唯一一个半面对象,④每个半边都属于唯一一个实体单元对象,⑤属于同一个半面的多个半边根据前后半边关系逆时针首尾相连构成环状半边结构;
所述的“HalfEdgelist”,是指:由多个半边对象存放在一个list中组成的半边列表;
所述的“HPre”,是指:半边之间的位置关系,与HNext相对应,若A半边是B半边的前置半边(HPre),则B半边是A半边的后置半边(HNext);
所述的“HNext”,是指:半边之间的位置关系,与HPre相对应,若C半边是D半边的后置半边(HNext),则D半边是C半边的前置半边(HPre);
步骤四、由已完成的内容补全所有已有对象中缺失的成员属性;
由已完成的内容补全其他设置:包括设定每个Cube的主半面、设定每个Vertex的主半边、设定每个半边的相邻半边关系HAdjacent以及半边转角信息HConerType、设定HalfFace对象的边界标志以及细分标志;
所述的“HAdjacent”,是指:两个半边的位置关系——相邻半边关系,若两个半面同时满足:①指向同一个边对象、②指向同一个实体单元,则将这两个半边对象相互定义为相邻关系(HAdjacent);
所述的“HConerType”,是指:半边的出发点在此半边所指向半面上的位置特征标记:若出发点为转角点(即在该面上共用该出发点的两条边之间有夹角)则标记为0,若出发点为非转角点(即在该面上共用该出发点的两条边之间在同一条直线上)则标记为1;
步骤五、对上述构建完成的实体网格按照构建规则进行拓扑结构检查,确保其包含的拓扑信息与链接元素之间的对应关系正确、完整,若没有问题则完成实体网格的构建;
其中,步骤一中所述的“对象”,是面向对象程序设计中的概念,每个对象包含多个属性或内容,如solidmesh是实体网格在程序设计中创建的对象,包含多个list如Anchorlist/Vertexlist/Edgelist/…用于对拓扑对象进行ID标识;
所述的“Anchorlist”,是指:存放了多个锚点(Anchor)对象的列表;
所述的“Vertexlist”,是指:存放了多个顶点(Vertex)对象的列表;
所述的“Edgelist”,是指:存放了多个边(Edge)对象的列表;
其中,步骤一中所述的“为每个对象添加相应的部分必要属性”,是指在这一步骤中只能添加目标对象的部分属性,其他属性需要在后面的步骤逐步进行添加或设定,在这一步骤可以完成添加的对象属性包括:Anchor对象的几何信息(即点的坐标Arc4DPoint)、类型(Type)、材料属性(Material)等;Vertex对象设定其所包含的Anchorlist同时也为Anchorlist中的锚点设定其指向的Vertex;edge对象设定其节点距(Interval);Cube对象设定其所包含的Anchorlist;
所述的“Arc4DPoint”,是指:代表空间坐标点的符号,用于存储空间坐标点在空间直角坐标系中的位置数据;
其中,步骤一中所述的“将这些拓扑对象分别添加到mesh中的相应list中进行ID标识”,以Anchor为例,具体做法是:每创建一个新的Anchor就将此锚点添加到mesh的Anchorlist中,并为其赋予ID,此ID的取值依据为当前列表最后一个Anchor的ID加1,即按照只增不减的方式为新增的对象赋予ID,此外需要说明的一点是,即使需要删除list中的某个对象,也不更改其他对象的ID,即只需要保证同一个list中所有对象的ID具有唯一性即可,无须保持连续性;
其中,步骤二中所述的“对每个Face对象创建两个(非边界情况下)HalfFace对象”,是指:若Face处于非边界位置则创建两个HalfFace对象,若Face处于边界处则仅需创建一个HalfFace对象;同理,“把这两个HalfFace(非边界情况下)相互设定为HOppo关系”是指:对非边界处的Face对象将创建的两个HalfFace对象相互设定为HOppo关系;若Face处于边界处则仅会创建一个HalfFace,且此HalfFace的HOppo属性为空;
其中,步骤二中所述的“设定每个HalfFace对象指向的Cube、Face对象”,具体做法是:由于两个HalfFace是依据同一个Face对象(为叙述方便,暂记为Face0)创建的,因此这两个HalfFace指向的Face对象即为Face0;而每个Face对象都是两个相邻Cube的交界,因此两个HalfFace指向的Cube即分别为此Face相邻的两个Cube。
其中,步骤三所述的“每个HalfEdge对象创建后指定其所属的HalfFace、Edge、Vertex”,具体做法如下:
①由于HalfEdge是基于HalfFace创建的,因此这周向的所有HalfEdge都指向同一个HalfFace,即创建每个HalfEdge的同时将其设定为指向此HalfFace;
②由于是周向逆时针顺序创建HalfEdge,因此若提前遍历HalfFace所在Face对象并逆时针顺序获取面上的点、线列表,则创建的HalfEdge即与列表按顺序一一对应;即首先遍历HalfFace所在Face并按照逆时针方向顺序获取面上的点线列表,则创建每个HalfEdge的同时设定点线列表中与之相对应位置上的点或线为此HalfEdge的指向对象;
其中,步骤三中所述的“按照创建顺序将HalfEdge存为list,对此list中的半边构建半边环”,具体做法为:
①若半边在list开头位置,则此半边的后置半边为list第二个位置的半边,前置半边为list末尾位置的半边;
②若半边在list末尾位置,则此半边的后置半边为list开头位置的半边,前置半边是list倒数第二个位置的半边;
③若半边在list中间位置,则此半边的后置半边为list中下一个位置的半边,前置半边为list中上一个位置的半边。
其中,步骤四中所述的“设定每个Cube的主半面”的具体做法为:遍历获取指向此Cube的所有半面,按照需要选择其中一个半面作为主半面,一般选择某个非细分面作为主半面即可;
其中,步骤四中所述的“设定每个Vertex的主半边”具体做法为:遍历获取指向此Vertex的所有半边,选择其中一个作为主半边即可;
其中,步骤四中所述的“设定每个半边的相邻半边关系HAdjacent”具体做法为:由于每条边会存储指向此边的所有半边list,同时根据基于此数据结构的网格格式可知每个list中的数量必为偶数,即可以按照是否在同一个Cube中将list中的半边两两一组,则每组的两个半边即互为相邻关系;
其中,步骤四中所述的“设定HalfFace对象的边界标志及细分标志”具体做法为:遍历Face对象,若Face对象所指向的两个HalfFace对象都不为空,则两个HalfFace的边界标志均为假;否则若仅有一个不为空,则将不为空的此HalfFace的边界标志设为真;细分标志的设定需判定该面所在Cube是否处于细分边界处,一般是在细分方法中进行设定;
通过以上步骤,可以完成一个基于半边半面数据结构的样条实体模型构建过程,构建完成的样条实体模型不仅可以完整表达实体模型的几何拓扑结构,同时具有可以局部细分的优良特性,可以广泛应用于诸如3D打印模型构建等场景。
(三)本发明的优点及有益效果在于:
1.本发明给出的数据结构具有更加清晰的逻辑结构,更加有效的数据组织,同时由于所有数据均以共享方式存储,因此可以大大减少存储空间的浪费,减少数据冗余,在提高运算效率的同时并降低模型数据的维护难度;
2.本发明给出的数据结构支持任意细分操作,可以表达拓扑结构更加复杂的实体模型,可适应于局部几何、材料等细节信息的描述,实际应用范围更加广泛;
本发明所述的数据结构即保留了B-Rep模型本身边界表示的特点,又可以完整表达实体内部的几何与拓扑属性,比B-Rep方法更加适合分析模型的表达,构建的模型可以直接用于等几何分析,可以省去模型转换的时间,提高分析效率;本发明所述的数据结构将实体模型的几何信息与拓扑信息分开进行描述,并且创造性地将各拓扑元素之间分离开来,相互之间的访问操作全部由半面及半边两种连接元素进行统一管理,可以更加高效高质量地管理实体模型的拓扑关系以及几何信息;
3.基于本发明所述的数据结构的框架,查找等功能的实现可使用局部搜索算法进行,这样做的好处是对于数据量较大的实体模型或者精细度较高的实体模型进行查找操作时,由于是局部搜索方式,因此查找的时间效率不会因为模型增大而降低,这也是本发明所述的数据结构所具有的优势之一。
4.基于本发明所述的方法生成的实体模型支持非均质材料样条模型的3D打印任务,且便于进行切片以及扫描路径生成。
5.本发明所述方法科学,工艺性好,具有广阔推广应用价值。
附图说明
图1为本发明所述的方法流程图。
图2为本发明所述的数据结构组织结构图。
图3为本发明所述的数据结构表示的实体模型示意图。
图4为使用本发明所述的数据结构构造的扳手实体模型示例的外观效果。
图5为图4所示扳手模型的内部剖面图及其局部放大效果示意图。
图6为基于本发明所述的方法生成扳手模型后进行3D打印的流程图。
图中序号、符号、代号说明如下:
图2:SolidMesh代表整个模型的整体网格;Cube代表实体单元,拓扑元素之一,每个SolidMesh由许多Cube组成;Face代表相邻实体单元共用的边界处的面片对象,拓扑元素之一,两个相邻Cube共享同一个Face,但边界处Face由一个Cube独享;HalfFace代表半面对象,是连接体面拓扑元素与边点拓扑元素的中间元素之一;Edge代表边对象,拓扑元素之一,每个面上至少有四条边;HalfEdge代表半边对象,是连接体面拓扑元素与边点拓扑元素的中间元素之一;Vertex代表顶点对象,拓扑元素之一;Anchor代表锚点对象,是用于描述模型几何信息的核心元素。
图2:箭头表示不同元素之间的数据传递关系,其中实线箭头由上位元素指向下位元素,虚线箭头相反;上位元素可包含多个可进行数据传递的下位元素,但下位元素有且仅有一个上位元素,如图2中Edge相对HalfEdge是上位元素就表示一个Edge同时包含多个HalfEdge,但一个HalfEdge仅属于唯一的Edge;不同元素对象之间的上下位关系是相对的,如图2中Cube相对HalfFace是上位元素,HalfFace相对Cube是下位元素;HalfFace相对HalfEdge是上位元素,HalfEdge相对HalfFace是下位元素,但整体而言,拓扑元素相对链接元素是上位元素。
具体实施方式
本发明提出了一种基于半边半面数据结构的3D打印实体模型生成方法,即一种面向3D打印模型生成的样条实体模型数据生成方法;本发明可应用于各种实体几何模型在计算机中的生成数据结构表示,特别是3D打印模型的生成,数据模型中更加清晰的相互依赖结构以及更加丰富的拓扑关系可以明显提高3D打印模型的生成精度以及实物的打印精度。下面结合一个将本发明应用于3D打印模型生成的扳手模型示例及附图,对本发明的技术方案进行清楚、完整的描述。
本发明为一种基于半边半面数据结构的3D打印实体模型生成方法,即一种基于半边半面数据结构的样条实体模型数据的生成方法,流程图如图1所示,以使用C++语言实现为例,数据结构组织图如图2所示,构建的扳手实例模型网格实例如图4、图5所示,构建的过程包括以下几个步骤:
步骤一、构建基础网格数据;
实例化一个实体网格对象solidMesh,此时已同时创建了多个列表,包括CubeList,FaceList,EdgeList,VertexList,AnchorList,用于对此扳手实体模型中的拓扑对象以及几何对象进行ID标识及统一管理。
此扳手模型的基础数据包括:37315个Cube对象、117654个Face对象、123606个Edge对象、43267个Vertex对象、1101391个Anchor对象。逐个创建这些对象,同时为每个对象赋予必要的属性,包括:Anchor对象的几何信息(即点的坐标Arc4DPoint)、类型(Type)、材料属性(Material)等;Vertex对象设定其所包含的Anchorlist同时也为Anchorlist中的锚点设定其指向的Vertex;edge对象设定其节点距(Interval);Cube对象设定其所包含的Anchorlist,其他必要属性将在后面的步骤中完成设定。
每个对象创建完成后分别以共享内存的方式存入对应的列表中并按照只增不减的原则获得唯一ID标识。
步骤二、构建半面链接元素;
遍历上一步骤的FaceList,对于每个Face对象:非边界面情况下创建两个HalfFace对象,并设定两个HalfFace对象同时指向此面,但分别指向此面相邻的两个Cube,同时把这两个HalfFace相互设定为HOppo关系;边界面情况下仅需创建一个HalfFace对象,设定此HalfFace对象指向此面同时指向此面所在的Cube;
步骤三、构建半边链接元素;
通过遍历FaceList对HalfFace进行遍历,对于每个HalfFace对象:
遍历获取HalfFace所在Face上的边及点对象并按照逆时针顺序或单连通域正方向顺序将Vertex及edge分别存放在临时的Vertexlist以及edgelist;
根据拓扑关系可以直观知道Vertexlist与edgelist的长度相同,因此建立一个临时的索引——从1开始且不大于其中一个list中的对象个数,索引递增的同时逐个创建相同数量的HalfEdge,并设定每个HalfEdge指向Vertexlist及edgelist中与此HalfEdge具有相同索引的Vertex及edge,同时将此HalfEdge存入该edge的HalfEdgeList中;
建立一个临时的HalfEdgeList,按照创建顺序,存放上述逐个创建的HalfEdge,对此list中的所有半边构建半边环,按照如下三种情况设定每个半边的前置半边HPre及后置半边HNext:
①若半边在list开头位置,则此半边的后置半边为list第二个位置的半边,前置半边为list末尾位置的半边;
②若半边在list末尾位置,则此半边的后置半边为list开头位置的半边,前置半边是list倒数第二个位置的半边;
③若半边在list中间位置,则此半边的后置半边为list中下一个位置的半边,前置半边为list中上一个位置的半边。
步骤四、由已完成的数据补全所有已有对象中缺失的成员属性;
根据图2,还需进行补充的成员属性及实施方法如下:
设定每个Cube的主半面:局部搜索获取指向此Cube的HalfFace,按需选择一个作为主半面即可;
设定每个Vertex的主半边:局部搜索获取指向此Vertex的半边,按需选择一个作为主半边即可;
设定每个半边的相邻半边关系HAdjacent:在步骤三中已将所有指向同一个edge的半边存入了同一个list,因此只需遍历edgelist,对每个edge中的HalfEdgeList:根据基于此数据结构的网格格式可知每个list中的半边数量必为偶数,因此可以按照是否在同一个Cube中将HalfEdgeList中的半边两两分为一组,将每组的两个半边相互设定为相邻关系;
设定HalfFace对象的边界标志:遍历Face对象,若Face对象所指向的两个HalfFace对象都不为空,则两个HalfFace的边界标志均为假;否则若仅有一个不为空,则将不为空的此HalfFace的边界标志设为真。细分标志的设定需判定该面所在Cube是否处于细分边界处,一般是在细分算法中进行设定。
半边转角信息HConerType及细分标志:一般是在细分算法中进行设定,未进行细分操作的初始模型默认所有半边转角为0,细分标志为假;
步骤五、网格模型完整性检查;
对上述构建完成的扳手实体网格按照构建规则进行拓扑结构检查,确保其包含的拓扑信息与链接元素之间的对应关系正确、完整,如检查每个边是否连接了两个点对象,检查是否有重复构建的半边半面或者其他冲突信息,如果有则需要按照图2及图3所示的数据结构图进行修复处理,最终构建完成的样条实体模型网格内各对象的局部相互关系如图3所示,图中立方体为Cube对象,两个Cube之间为Face对象,每个Face对象链接两个HalfFace对象。图中较小的圆点为Anchor对象,较大的圆点为Vertex对象,两个Vertex对象之间由edge对象进行连接,单边箭头代表HalfEdge对象,但值得一提的是半边及半面对象仅用于管理拓扑对象以及几何对象之间的链接关系,实际显示的网格模型是不包含这两个对象的,相当于一种概念对象。
按照上述步骤完成扳手模型的构建后,最终生成的模型外观如图4所示,内部剖面网格以及局部放大图如图5所示。可以由图4及图5看出实体模型是由分层的小实体单元彼此连接而成,因此基于本发明所述的方法创建的扳手模型完全支持切片成逐层的截面,从而指导打印机进行逐层打印,打印扳手的流程如图6所示。
在3D打印任务中,首先需要给定一个合适的切片方向,这样可以提高生产精度,减少打印耗时,生产出高质量少材料的支撑结构,也有利于提高最终产品的刚度和强度,一般情况下z轴就是一个非常合适的切片方向,但也可以根据实际打印任务的需要选择x轴y轴或自定义的其他方向作为切片方向。基于本发明所述的模型生成方法构建出扳手的实体模型后,在构建完成的模型中使用样条参数构造一个标量场,并使其梯度方向与Z轴对齐,然后即可在参数域中直接对模型进行切片,即按照图5所示剖面的法线方向进行切片。为了构造这个标量场,可以先按照3D打印的需求自定义一个标量计算函数,并根据此函数计算模型内每个节点处的标量值,由此产生的等值线层在标量场中将沿梯度方向均匀分布,之后即可根据等值线按层进行切片。
另外,若针对异质样条模型的3D打印任务,则需要在构建扳手模型的过程中为每个节点赋予不同的材料属性,并在参数域将扳手模型生成切片网格,然后利用移动立方体技术,在参数域内形成一系列三角形切片层,最后映射到非均质材料的物理域上,即可完成切片过程。
完成扳手的切片后,将每个切片层的内部非均质材料离散为具有多个材料分区的离散梯度功能材料结果,根据CuraEngine(一种3D打印切片引擎,可用于3D打印切片模型的扫描路径生成等)的规则对每个离散分区的边界轮廓进行提取、配对和排序,以生成每个切片层的扫描路径。最后,将扫描路径生成为G代码,由配备多喷嘴的3D打印机生成最终的扳手实物。
自此就完成了本发明的全部过程。
以上所述仅为本发明的较佳实例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种基于半边半面数据结构的3D打印实体模型生成方法,其特征在于,步骤如下:
步骤一、构建基础网格数据;
构造一个实体网格对象SolidMesh,然后依次逐个创建所有的Anchor、Vertex、Edge、Face、Cube对象,并为每个对象添加相应的部分必要属性,同时将这些拓扑对象分别添加到mesh中的相应list中进行ID标识;
所述的SolidMesh是指一个实体网格对象,代表模型的整体网格对象,是实体网格的英文符号;
所述的Vertex是指实体网格中的拓扑元素为顶点对象,每个顶点指向一个三维空间中的笛卡尔点;
所述的Edge是指实体网格中的拓扑元素为边对象,每个边的两端各有一个顶点Vertex;
所述的Face是指实体网格中的拓扑元素为面对象,每个面代表一个三维空间中的二维平面区域,区域的边界由多个边Edge包围而成;
所述的Cube是指实体网格中的拓扑元素为实体单元对象,每个实体单元代表三维空间中的一个区域,区域的边界由多个面Face包围而成,同时多个实体单元无缝拼接共同组成实体网格Solidmesh的空间区域;
所述的Anchor是指实体网格中的几何元素为锚点对象,包含一个表示空间位置的几何坐标属性,以及表示锚点处材料性质的属性;
所述的mesh是指由点线拓扑元素构成的网格框架;
所述的list是指一个列表,每个list中仅存放多个相同类型的对象;
所述的ID是指索引标识号码;每个拓扑对象及几何对象均需绑定一个ID,同时同类型的对象ID不能出现重复,但不同类型的对象ID能重复,即两个Vertex对象的ID号不能相同,但是一个Edge对象的ID号能与另一个Vertex对象的ID号相同;
步骤二、构建半面链接元素;
对每个Face对象创建两个HalfFace对象,并设定每个HalfFace对象指向的Cube、Face对象,同时把这两个HalfFace相互设定为HOppo关系;
所述的HalfFace是指半面对象,是连接体面拓扑元素与边点拓扑元素的中间元素之一,是一个逻辑对象,仅存在于网格结构的逻辑结构层面,具有:①每个半面属于唯一的一个实体单元,②每个实体单元包含多个半面,③每个半面属于唯一的一个面,④面位于实体网格边界处时仅包含一个半面,其他面都包含两个半面;
所述的HOppo是指两个半面之间的相对位置关系,如果两个半面指向同一个面对象则把这两个半面定义为一对相对HOppo的半面;
步骤三、构建半边链接元素并构建半边环;
对于每个HalfFace对象,执行以下两步操作:
3.1、按照HalfFace所在Face上的边对象的周向逆时针顺序逐个创建HalfEdge对象,每个HalfEdge对象创建后指定其所属的HalfFace、Edge、Vertex,同时将此HalfEdge添加到上述Edge对象的HalfEdgelist中;
3.2、按照创建顺序将HalfEdge存为list,对此list中的半边构建半边环,即指定每个半边的前置半边HPre及后置半边HNext;
所述的HalfEdge是指半边对象,是一个逻辑对象,仅存在于实体网格的逻辑结构层面,且具:①每个半边都有唯一一个出发点vertex,②每个半边都属于唯一一个边对象,③每个半边都属于唯一一个半面对象,④每个半边都属于唯一一个实体单元对象,⑤属于同一个半面的多个半边根据前后半边关系逆时针首尾相连构成环状半边结构;
所述的HalfEdgelist是指由多个半边对象存放在一个list中组成的半边列表;
所述的HPre是指半边之间的位置关系,与HNext相对应,若A半边是B半边的前置半边HPre,则B半边是A半边的后置半边HNext;
所述的HNext是指半边之间的位置关系,与HPre相对应,若C半边是D半边的后置半边HNext,则D半边是C半边的前置半边HPre;
步骤四、由已完成的内容补全所有已有对象中缺失的成员属性;
由已完成的内容补全其他设置:包括设定每个Cube的主半面、设定每个Vertex的主半边、设定每个半边的相邻半边关系HAdjacent以及半边转角信息HConerType、设定HalfFace对象的边界标志以及细分标志;
所述的HAdjacent是指两个半边的相邻半边位置关系,若两个半面同时满足:①指向同一个边对象、②指向同一个实体单元,则将这两个半边对象相互定义为相邻关系;
所述的HConerType是指半边的出发点在此半边所指向半面上的位置特征标记:若出发点为转角点即在该半面上共用该出发点的两条边之间有夹角,则标记为0,若出发点为非转角点即在该半面上共用该出发点的两条边之间在同一条直线上,则标记为1;
步骤五、对上述构建完成的实体网格按照构建规则进行拓扑结构检查,确保包含的拓扑信息与链接元素之间的对应关系正确、完整,若没有问题则完成实体网格的构建;
步骤一中所述的对象,是面向对象程序设计中的概念,每个对象包含多个属性或内容;solidmesh是实体网格在程序设计中创建的对象,包含多个Anchorlist/Vertexlist/Edgelist用于对拓扑对象进行ID标识;所述的Anchorlist是指存放了多个锚点Anchor对象的列表;
所述的Vertexlist是指存放了多个顶点Vertex对象的列表;所述的Edgelist是指存放了多个边Edge对象的列表;
步骤一中所述的为每个对象添加相应的部分必要属性,是指在这一步骤中只能添加目标对象的部分属性,其他属性需要在后面的步骤逐步进行添加或设定,在这一步骤完成添加的对象属性包括:Anchor对象的几何信息即点的坐标Arc4DPoint、类型Type、材料属性Material;Vertex对象设定其所包含的Anchorlist同时也为Anchorlist中的锚点设定其指向的Vertex;edge对象设定其节点距Interval;Cube对象设定其所包含的Anchorlist;所述的Arc4DPoint是指代表空间坐标点的符号,用于存储空间坐标点在空间直角坐标系中的位置数据;
步骤一中所述的将这些拓扑对象分别添加到mesh中的相应list中进行ID标识,具体做法是:每创建一个新的Anchor就将此锚点添加到mesh的Anchorlist中,并为其赋予ID,此ID的取值依据为当前列表最后一个Anchor的ID加1,即按照只增不减的方式为新增的对象赋予ID;即使需要删除list中的某个对象,也不更改其他对象的ID,即只需要保证同一个list中所有对象的ID具有唯一性,无须保持连续性。
2.根据权利要求1所述一种基于半边半面数据结构的3D打印实体模型生成方法,其特征在于:步骤二中所述的对每个Face对象创建两个HalfFace对象是指若Face处于非边界位置则创建两个HalfFace对象;若Face处于边界处则仅需创建一个HalfFace对象;同理,把这两个HalfFace非边界情况下相互设定为HOppo关系是指对非边界处的Face对象将创建的两个HalfFace对象相互设定为HOppo关系;若Face处于边界处则仅会创建一个HalfFace,且此HalfFace的HOppo属性为空。
3.根据权利要求1所述一种基于半边半面数据结构的3D打印实体模型生成方法,其特征在于:步骤二中所述的设定每个HalfFace对象指向的Cube、Face对象,具体做法是:由于两个HalfFace是依据同一个Face对象创建的,因此这两个HalfFace指向的Face对象即为Face0;而每个Face对象都是两个相邻Cube的交界,因此两个HalfFace指向的Cube即分别为此Face相邻的两个Cube。
4.根据权利要求1所述一种基于半边半面数据结构的3D打印实体模型生成方法,其特征在于:步骤三所述的每个HalfEdge对象创建后指定其所属的HalfFace、Edge、Vertex,具体做法如下:
①由于HalfEdge是基于HalfFace创建的,因此这周向的所有HalfEdge都指向同一个HalfFace,即创建每个HalfEdge的同时将其设定为指向此HalfFace;
②由于是周向逆时针顺序创建HalfEdge,因此若提前遍历HalfFace所在Face对象并逆时针顺序获取面上的点、线列表,则创建的HalfEdge即与列表按顺序一一对应;即首先遍历HalfFace所在Face并按照逆时针方向顺序获取面上的点线列表,则创建每个HalfEdge的同时设定点线列表中与之相对应位置上的点或线为此HalfEdge的指向对象。
5.根据权利要求1所述一种基于半边半面数据结构的3D打印实体模型生成方法,其特征在于:步骤三中所述的按照创建顺序将HalfEdge存为list,对此list中的半边构建半边环,具体做法为:
①若半边在list开头位置,则此半边的后置半边为list第二个位置的半边,前置半边为list末尾位置的半边;
②若半边在list末尾位置,则此半边的后置半边为list开头位置的半边,前置半边是list倒数第二个位置的半边;
③若半边在list中间位置,则此半边的后置半边为list中下一个位置的半边,前置半边为list中上一个位置的半边。
6.根据权利要求1所述一种基于半边半面数据结构的3D打印实体模型生成方法,其特征在于:步骤四中所述的设定每个Cube的主半面的具体做法为:遍历获取指向此Cube的所有半面,按照需要选择其中一个半面作为主半面,选择某个非细分面作为主半面即可;所述的设定每个Vertex的主半边具体做法为:遍历获取指向此Vertex的所有半边,选择其中一个作为主半边即可。
7.根据权利要求1所述一种基于半边半面数据结构的3D打印实体模型生成方法,其特征在于:步骤四中所述的设定每个半边的相邻半边关系HAdjacent具体做法为:由于每条边会存储指向此边的所有半边list,同时根据基于此数据结构的网格格式可知每个list中的数量必为偶数,按照是否在同一个Cube中将list中的半边两两一组,则每组的两个半边即互为相邻关系;所述的设定HalfFace对象的边界标志及细分标志具体做法为:遍历Face对象,若Face对象所指向的两个HalfFace对象都不为空,则两个HalfFace的边界标志均为假;否则若仅有一个不为空,则将不为空的此HalfFace的边界标志设为真;细分标志的设定需判定该半面所在Cube是否处于细分边界处,在细分方法中进行设定。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210227595.9A CN114693869B (zh) | 2022-03-08 | 2022-03-08 | 一种基于半边半面数据结构的3d打印实体模型生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210227595.9A CN114693869B (zh) | 2022-03-08 | 2022-03-08 | 一种基于半边半面数据结构的3d打印实体模型生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114693869A CN114693869A (zh) | 2022-07-01 |
CN114693869B true CN114693869B (zh) | 2024-06-25 |
Family
ID=82137783
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210227595.9A Active CN114693869B (zh) | 2022-03-08 | 2022-03-08 | 一种基于半边半面数据结构的3d打印实体模型生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114693869B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105022910A (zh) * | 2015-04-23 | 2015-11-04 | 北京建筑大学 | 一种三维CSG-BRep模型的拓扑元素的访问方法 |
CN106296824A (zh) * | 2016-08-18 | 2017-01-04 | 北京航空航天大学 | 一种基于半边数据结构的T‑mesh局部细化实现方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4765063B2 (ja) * | 2005-04-04 | 2011-09-07 | 国立大学法人電気通信大学 | 3次元cadシステム及びソリッドモデルの作成方法 |
CN109934923B (zh) * | 2017-12-15 | 2022-10-11 | 中国科学院沈阳自动化研究所 | 适用于生物材料3d打印的模型分层以及轨迹填充方法 |
CN110532670B (zh) * | 2019-08-26 | 2023-06-09 | 北航(天津武清)智能制造研究院有限公司 | 一种适分析样条实体模型构建方法及*** |
-
2022
- 2022-03-08 CN CN202210227595.9A patent/CN114693869B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105022910A (zh) * | 2015-04-23 | 2015-11-04 | 北京建筑大学 | 一种三维CSG-BRep模型的拓扑元素的访问方法 |
CN106296824A (zh) * | 2016-08-18 | 2017-01-04 | 北京航空航天大学 | 一种基于半边数据结构的T‑mesh局部细化实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114693869A (zh) | 2022-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106683167B (zh) | 复杂建筑物高精度模型自动建模方法 | |
CN110795797B (zh) | 一种mbd模型加工特征识别及信息提取方法 | |
JP4381743B2 (ja) | 境界表現データからボリュームデータを生成する方法及びそのプログラム | |
Yerry et al. | Automatic three‐dimensional mesh generation by the modified‐octree technique | |
US7436407B2 (en) | Topology determination, decomposable shape generation, and structured mesh generation | |
CN102682103B (zh) | 一种面向海量激光雷达点云模型的三维空间索引方法 | |
JP4783100B2 (ja) | 境界データのセル内形状データへの変換方法とその変換プログラム | |
CN108776993A (zh) | 带有孔洞的三维点云的建模方法及地下电缆工井建模方法 | |
CN103559374A (zh) | 一种多子网格模型上进行面***型曲面细分的方法 | |
CN109544672A (zh) | 一种三维建筑模型纹理映射方法及装置 | |
CN109325316B (zh) | 基于共点焊接排序的stl模型高效并行切层方法 | |
CN111243094A (zh) | 一种基于点灯法的三维模型精确体素化方法 | |
CN115222873B (zh) | 一种基于标注和空间语义的三维产权体图属批量关联方法 | |
Feng et al. | A hybrid and automated approach to adapt geometry model for CAD/CAE integration | |
CN114693869B (zh) | 一种基于半边半面数据结构的3d打印实体模型生成方法 | |
US7467154B2 (en) | Producing a locally optimal path through a lattice by overlapping search | |
CN110766790A (zh) | 参数驱动的高速铁路桥梁自适应多层次三维可视化方法 | |
Shang et al. | Effective re-parameterization and GA based knot structure optimization for high quality T-spline surface fitting | |
Yin et al. | An intelligent 3d printing path planning algorithm 3d printing path planning algorithm: An intelligent sub-path planning algorithm | |
Yang et al. | A 3D nesting method based on the convex-concave coding similarity of the voxelized model for additive manufacturing | |
CN106600671A (zh) | 一种网格模型的体素化方法及装置 | |
CN113609691A (zh) | 一种面向智慧交通仿真的交叉路口建模处理方法 | |
CN105139435A (zh) | 一种处理多边形多重包含关系的边界一笔画方法 | |
CN110868325B (zh) | 一种可降低刚度矩阵构建难度的均匀网格划分方法 | |
Su et al. | Enhanced Dual Contouring for Continuous Surface Reconstruction: A Novel Method in Real-Time Geometric Visualization for CNC Machining Simulation |
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 |