子体积八叉树的制作方法

文档序号:17439751发布日期:2019-04-17 04:36阅读:307来源:国知局
子体积八叉树的制作方法

增材制造技术可以通过构建材料的选择性凝固在逐层基础上生成三维对象。在此类技术的示例中,构建材料被以逐层方式供应并且凝固方法可以包括把构建材料的层加热以在选定区域中(例如在带有熔剂的区域中)引起熔化。在其他技术中,可以使用其他凝固方法,诸如化学凝固方法或粘结材料。

与要生成的三维对象有关的数据可以被提供给增材制造设备并用于生成三维对象。

附图说明

现在将参考附图描述非限制性示例,在附图中:

图1是用于生成表示三维对象的数据的示例方法的流程图;

图2是图示了八叉树结构的示意绘图;

图3是用于定义八叉树中的节点的示例方法的流程图;

图4是用于使用增材制造来生成对象的示例方法的流程图;

图5是示例处理设备的示意绘图;

图6是结合机器可读介质的示例处理器的示意绘图;以及

图7是图示了多级八叉树结构的示意绘图。

具体实施方式

增材制造技术可以通过构建材料的凝固来生成三维对象。在一些示例中,构建材料可以是粉末状粒状材料,其可以例如是塑料、陶瓷或金属粉末。生成的对象的性质可以取决于构建材料的类型和使用的凝固机制的类型。构建材料可以被例如沉积在打印床上并逐层处理,例如在制作室内。

在一些示例中,选择性凝固是通过能量的定向施加来实现的,例如使用导致被施加有定向能量的构建材料的凝固的激光或电子束。

在其他示例中,至少一种打印剂可以被选择性地施加到构建材料,并且在施加时可以是液体。例如,可以将熔剂(也称为“聚结剂”或“聚结剂”)按照从表示要生成的三维对象的切片的数据导出的图案(其可以例如从结构设计数据生成)选择性地分配到构建材料的层的各部分上。熔剂可以具有吸收能量的成分,使得当能量(例如,热)被施加到层时,构建材料依照图案聚结和凝固以形成三维对象的切片。在其他示例中,可以以某种其他方式实现聚结。聚结改性剂(也称为改性剂或细化剂)用来例如通过减少或者增加聚结来修改熔剂的效果或者用来帮助产生对象的特定饰面或外观,并且此类试剂可以因此被称为细化剂,在一些示例中还可以被用作打印剂。着色剂(例如包括染料或色料)可以在一些示例中被用作熔剂或改性剂,和/或用作打印剂以为对象提供特定颜色。

增材制造系统可以基于结构设计数据生成对象。这可以涉及设计者例如使用计算机辅助设计(cad)应用来生成要生成的对象的三维模型。模型可以定义对象的实体部分。为了使用增材制造系统来从模型生成三维对象,可处理模型数据以生成模型的平行平面的切片。每个切片可以定义构建材料的相应层的一部分,所述构建材料将由增材制造系统凝固或者使得其聚结。

当以高分辨率对大且复杂零件进行建模时,数据模型可迅速地变大。

图1是可以为计算机实现的方法的方法的流程图,包括在块102中接收对象的第一数据模型,所述对象可以是要在增材制造中生成的对象。

在一些示例中,可以将此数据提供为要作为多个节点在逐层制造过程中制造的对象的至少一部分的八叉树表示,例如经典八叉树表示,其中首先描述表示最大体积的节点(“根”节点),后面是其八分体,后面是其八分体,依此类推。在一些示例中,数据可以将对象的表示提供为设计文件,诸如stl文件、.obj文件、dxf文件、json文件、3mf文件、vtk文件等。对象可以被表示为网格(例如,多边形网格),或者用一系列切片加以表示。在一些示例中,表示可以包括数据的打印分辨率表示,例如包括为对象和/或周围体积(例如,包封对象的长方体)的每个“体素”指定至少一种属性(例如,存在或不存在、颜色、纹理、透明度、导电性、强度、孔隙率、弹性等)或打印材料(例如,打印剂或构建材料的选择)。体素可以被认为是体积像素,任何每个体素可以是打印可寻址区域,并且在一些示例中,体素是以设备的打印分辨率定义的。在一些示例中,每个体素是相同的形状和/或大小,例如包括立方体或相同的大小,然而在其他示例中体素可以在大小和/或形状上不同。

块104和106包括生成第二数据模型的方法。块104包括针对包含对象的体积的多个连续的非重叠子体积中的每一个生成表征该子体积的子体积八叉树,并且块106包括生成表征包含对象的体积的体积八叉树,八叉树在其最低节点中表征子体积八叉树的根节点。

在体积八叉树和子体积八叉树的上下文中的术语“体积”和“子体积”纯粹旨在作为标识符,因为体积八叉树描述“整个”感兴趣体积并且子体积八叉树各自描述感兴趣体积的部分。能替代地使用术语“第一”和“第二”八叉树。

在图2中示出了3级八叉树的表示。在图2中,根节点a是单个体积。下一级将此体积分割成八分体b1-8,其中的每一个表示物理子体积。b1、b2、b3和b4表示体积的下半部分的象限,然而b5、b6、b7和b8表示体积的上半部分。图2还示出了下一级,但是出于图示的简单的目的,仅针对b1示出这个。下一级将b1分割成八分体c11至c18(其中这种表示法在下面延伸,使得b2可以被分割成标记为c21至c28的八分体,并且更一般地bn可以被分割成标记为cn1至cn8的八分体),其中的每一个表示物理子体积。再次,在此示例中cn1-cn4表示n=1至8的每个bn体积的下半部分。应理解的是,每个节点包括描述对象的至少一个方面的数据,如在下面进一步阐述的。

尽管未示出,然而可以定义“d”级节点,包括分割成八分体的每个cnm(其中n=1至8并且m=1至8)体积。在示例中每个d级节点可以描述八个打印分辨率体素。在这种示例中,图1的块104可以包括形成六十四个子体积八叉树,每个子体积八叉树包括描述其8个子体积的单个c节点和512个d级节点。块106可以包括生成具有根节点(a,描述8个子体积)和八个b节点(各自描述8个子体积,其中子体积各自对应于c节点)的八叉树。

以这种方式,产生了描述对象的八叉树的两个“级”或“阶”。虽然八叉树提供表示对象的有效方法,其中对象将被以某些分辨率描述,但是即使当使用数据压缩技术时,用于有效地处理模型的数据存储和处理资源也可以是巨大的。虽然例如12个八叉树级可以适于描述一个对象,但是这可以使ram少于16gb的处理器慢下来。随着八叉树随深度以指数方式增长,增加分辨率意味着用于处理数据的处理和存储资源也急剧地增加,所以问题不容易度量。

图1描述了用于形成分割级八叉树表示的方法,其中体积空间被有效地细分成子体积单元的规则网格,并且构建用于这些单元中的每一个的子体积八叉树。当它们已全部被构建时,遍历网格以构建全局体积八叉树的顶层。如在下面更详细地描述的,可以随后合并八叉树。

在一些示例中,可以通过参考属性来描述对象。在一些示例中,可以将对象内的体积分类为下列中的一个:(i)在整个体积上具有预定属性(即,每一子体积或其区域共享预定属性)、(ii)完全缺少预定属性(即,每一子体积或其区域缺少预定属性)或(iii)包括具有预定属性的子区域和缺少预定属性的子区域。

在一个示例中,属性可以是体积是否包括对象的部分并且每个体积可以被分类为下列中的一个:

(i)完全在对象内部(被称为“黑色”),

(ii)完全在对象外部(被称为“白色”),

(iii)横跨对象边界(被称为“灰色”),使得体积的子区域在对象内部并且另一子区域在外部。

在一些示例中,对于扫描边界(或者更一般地包括具有属性的子区域和缺少该属性的子区域)的体积存在两种可能的类别:“末端灰色”体积或“中间灰色”体积。末端灰色体积在体积是打印分辨率体积时可以被编码,或者是由特定模型编码的最小体积。可以不同于中间灰色体积处理此类灰色体积,因为可以做出关于将体积视为黑色体积还是白色体积的判定;例如,实际上,体积被指派为在对象内部或外部。然而,在一些示例中可以省略此类末端灰色体积。

在此示例中,体积的分类用两个比特表达:00用于白色体积,01用于黑色体积,10用于中间灰色体积并且11用于末端灰色体积。

可以将每个节点表示为表征其子体积的16比特串。因此,如果对象占据填充立方体的底部的切片,占去图2中所示的立方体的底部四分之一,则“a”节点将具有4个“灰色”体积和4个白色体积,并且能被按数字顺序在其子体积方面表示为

b1{10}、b2{10}、b3{10}、b4{10}、b5{00}、b6{00}、b7{00}、b8{00},或者表示为:

[1010101000000000]

b1节点在上半部分中有白色体积并且在下半部分中有黑色(包含在对象中)体积,所以能被编码为

[0101010100000000]

b5体积是白色:如在下面进一步阐述的,在一些示例中,这可以意味着b5节点未形成在八叉树内,因为关于b5体积没有获得更多的信息。

更一般地,这种编码能用于指定任何二元属性,例如,特定颜色、导电性、弹性、打印剂等的存在与否。例如,每个体积能被分类为“红色”或“非红色”或“包含红色子区域和非红色子区域”,或者被分类为“导电”或“不导电”或“包含导电子区域和非导电子区域”。

在一些示例中,可以以预定方式(例如,基于在节点内描述的子体积的位置)对数据进行排序。例如,“最低有效比特”即在比特串末尾的比特包含关于具有较小的z坐标的子体积的信息,当z坐标相等时那么具有较小的x坐标的子体占据最低有效比特等。能使用其他预定顺序。

两比特指定还可以扩展到将节点类型识别为灰色、黑色或白色。这可以是有用的,因为四个此类节点包括一字节并且因此可以被存储在一起。如将在下面变得显而易见的,在一些示例中,八叉树被合并或者其部分被提取。然而,在下面给出的各种示例中,例如考虑到对象生成的逐层性质,可以采用序列化表示。像图2图示那样,在每个分辨率下在对象的横向区域中有4个节点,并且将在任何数据处理中一起处理这些节点。

在其他示例中,能使用诸如霍夫曼编码之类的其他编码。

如上面关于体积b5简要地提及的,并且如可容易地理解的那样,如果b级体积完全在对象内部,则可以被形成的其任何子节点也将完全在对象内部。因此,情况可以是仅“灰色”节点(即包括具有属性的子区域和缺少属性的子区域的那些节点)被存储。如果体积是白色或黑色,则不必将它存储为节点,因为体积被表征在在先节点中,并且此表征扩展到所有后代。例如,对于占据体积的下半部分的对象,这能通过具有单个节点的一级八叉树(其中4个白色子体积具有较高z并且4个黑色子体积具有较低z)来充分地表征。例如,16比特串能将根节点(其描述灰色体积)表征为:0000000001010101。这充分地表示整个对象。然而,如果黑色或白色子体积中的一个替代地为灰色,则能为该子体积形成另一个节点,从而表征其子体积。

在一些示例中,因此,八叉树可以包括表征灰色体积的节点(因为不必存储黑色和白色节点体积)并且在体素或打印分辨率级下,可以将子体积分类为黑色或白色。在其他示例中,灰色节点可以是被细分的任何节点(即使后代节点全部具有或者缺少属性)。黑色或白色节点可以是未被细分的那些节点。

在一些示例中,可以将子体积八叉树定义成具有根节点。如果子体积是完全一致的(例如,是“黑色”或“白色”)体积,则它仍然可以作为节点被维护。因此,在一些示例中,除了在子体积八叉树的根节点的情况下之外八叉树仅包括由不同类别的八分体构成的节点,所述子体积八叉树可以描述完全一致的体积。

图3示出了方法的示例,所述方法可以是用于构建对象的八叉树表示的计算机实现的方法,并且可以用于执行以上块104和106中的任何一个。方法可以被认为是从较小的体积开始的构建八叉树的“自下而上”方法。

块302包括检查数据模型中的第一大小的八个体积的组。可以关于特定预定属性(例如,内部、导电、特定颜色等)执行这种检查。在块304中确定了组是否完全由在其整个体积各处共享预定属性的体积组成。如果是这样的话,则在块306中,体积被合并以定义具有预定属性的第二(较大的,包括体积的8倍)大小的体积。否则,在块308中确定了组是否完全由在其整个体积各处缺少预定属性的体积组成,在此情况下块310包括合并体积以定义缺少预定属性的第二大小的体积。如果这些条件当中谁都不为真,则组被混合:第一大小的一些体积至少部分地具有属性,并且第一大小的一些体积至少部分地缺少属性。在那种情况下,块312包括定义指示第二大小的体积的节点,所述节点包括其子部分中的属性。在块306和310的合并动作中的每一个中,可以实际上丢弃较小的体积,使得不保留与其具体地有关的数据,因为这种数据将不会导致关于对象可用的信息。然而,当在块312中形成节点时,可以保留描述第一大小的体积的数据,以便区分包括属性的那些体积和缺少属性的那些体积。例如可以在表征节点的比特串中返回此数据,所述比特串可以是如上所述的16比特串。

当生成子体积八叉树时,可以通过检查由在先迭代中定义的节点/体积表示的体积并且形成新节点/体积来迭代地执行图3的方法直到指示子体积的节点或体积被形成为止,此时可以将数据例如存储在计算机可读存储器中。如上面所指出的,在一些示例中,即使所有那些子体积都共享属性,或者所有子体积都缺少属性,最大体积也被存储为表征其子体积的节点。可以基于存储器和处理能力确定子体积的大小。例如,可以根据可由可用处理设备并行构建的子体积的数量或可用于存储子体积的存储器的类型来确定子体积的大小。

可以在相对较快的存取存储器(诸如ram)中构建这种子体积八叉树,因为可以贯穿过程重复地访问数据。可以基于可用资源和模型复杂度确定子体积八叉树的深度级的数量。

当生成体积八叉树时,可以通过检查由在先迭代中定义的节点/体积所表示的体积并且从表示子体积的节点/体积开始形成新节点以及在一些示例中继续直到“根节点”被形成为止来迭代地执行图3的方法。

在一些示例中,可以存在多于一个子体积级。例如可以通过分割级八叉树来描述由子体积八叉树所表征的每个体积。

确定八叉树可以包括使数据序列化,其中,如在下面更详细地阐述的,序列化表示被构建为使得节点被以特定方式排序。这在考虑xyz空间时可以被认为是“z优先”排序,其中z坐标与对象的高度有关,因为它在位于xy平面中的层中生成。如将变得显而易见的那样,这种排序可以适于处理与层中的三维对象有关的数据。

在示例中,序列化表示符合关于图2中所示的3级八叉树所讨论的三个规则,为了说明书的此部分起见,图2中所示的3级八叉树可以是体积八叉树的或子体积八叉树的示例。可以记住b1、b2、b3和b4表示体积的下半部分的象限,然而b5、b6、b7和b8与体积的上半部分有关。类似地,cn1-cn4表示n=1至8的每个b体积的下半部分。

要在存储序列化表示时应用的第一规则是表示包括要按照对象生成的预定顺序较早地生成的对象的层的体积的节点在表示由要随后生成的对象的层构成的体积的节点之前。

以图2为例(并且假定所有节点都存在于八叉树中),并且基于在增材制造中,对象通常从其基础向上生成,在示例中要首先生成的层是下层,其包括n=1至4的cn1-cn4。节点b1-b4也包括此层,节点a也是如此。因此,这个规则意味着a和b1-b4将被列举在b5-b6(其不包括第一层的表示)之前。它还意味着n=1至4的cn1至cn4将被列举在所有其他c节点之前。

第二规则是表示包括对象的给定层的体积的节点基于八叉树表示内的节点的级被排序,其中父节点出现在后代节点之前。因此,对于第一层,a将被列举在b1至b4中的任一个之前并且b1至b4将被列举在n=1至4的cn1至cn4之前。

第三规则是,在已经应用第一规则和第二规则之后,即对于表示包括对象的给定层并且在八叉树内具有相同级的体积的节点,节点根据位置编码图案被序列化。例如,这可以是定义通过空间的特定路径的莫顿(z顺序)码等。莫顿码是将多维数据映射到一个维度同时保存局部性的函数的一个示例。在此示例中,因此可以应用位置编码图案来确定b1至b4的顺序以及n=1至4的cn1至cn4的顺序。

如上面所指出的,对于对象的第一层,这将产生a、b1-4(根据位置编码图案排序)、n=1至4的cn1-cn4(根据空间编码图案排序)的顺序。这给出序列化表示的第一部分。为了易于表示,位置编码图案被指示在方括号中并且此部分能被概括为:

a:[b1-b4]:[cn1-cn4]n=1-4

尚未包括的下一层向上包括n=1至4的cn5-cn8。然而,此层也通过b1-b4和a来表示,从而表示此层仅意指将n=5至8的cn1-cn4添加到以上码部分的末尾,因为这未打破任何规则,从而扩展序列化表示如下:

a:[b1-b4]:[cn1-cn4]n=1-4:[cn5-cn8]n=1-4

尚未包括的下一层向上包括b5-b8的部分,其应该被包括在其后代节点之前。在此示例中,这给出包含在体积a中的对象的序列化表示如下:

a:[b1-b4]:[cn1-cn4]n=1-4:[cn5-cn8]n=1-4:[b5-b8]:[cn1-cn4]n=5-8:[cn5-cn8]n=5-8

如果添加了另一级即“d”级,则节点将根据z优先排序被插入在其对应的‘c’级表示之后。

如已经提及的,在一些示例中,可能的是在一些情况下,如果一些节点表示全部具有或者全部缺少属性(并且不是子体积八叉树的根节点)的子体积则不定义它们,所以如上所述一些节点可以在表示中缺少。

这种数据结构很适于三维打印,因为描述对象的特定层的数据被级联。这可以与按照级顺序(其可以是术语‘广度排序’)表示的八叉树对比,其中,在相同的表示法下,对象的描述可以如下:

a:[b1-b8]:[c11-c18]:...:[c81-c88]

数据的另一可能的表示可以是“深度优先”排序,其能被表示如下:

a:b1:c11-c18:b2:c21-c28:b3:c31-c38...b8:c81-c88

在此类表示中,要制造的第一层的描述(n=1-4的cn1-cn4)分散在数据各处并且检索数据变得复杂。此外,如从接下来的讨论中将变得显而易见的,此类表示不允许关于一个层而检索到的数据有助于检索与后续层有关的数据。

在以上示例中,表示根节点a的节点被首先布置在序列化中。

在数据读取器将理解数据与指定顺序相关联的意义上,数据被“布置”成序列化。在一些示例中,数据可以物理上分散在存储介质(例如,随机存取存储介质)上。然而,数据被存储以便具有关系,在所述关系中所描述的数据的布置被编码。

图4是可以是提供对象的八叉树表示的方法并且可以是计算机实现的方法的方法的示例。

块402包括在此示例中使用上述的“z优先”序列化表示来形成多个子体积八叉树,并且每个子体积八叉树在块404中被作为数据对象独立地存储在机器可读介质中。块406包括形成体积八叉树(也使用序列化表示),并且块408包括通过将每个子体积八叉树插入到体积八叉树中同时将体积八叉树作为数据对象存储在机器可读介质中来合并体积八叉树和子体积八叉树。可简单地通过在体积八叉树的最终节点之间插入子体积八叉树的根节点及其任何后代节点来执行合并。这种合并的序列化表示也将符合上述的“z优先”顺序。

在示例中,在合并的八叉树中可以存在约10至14个深度级。如果八叉树的第14个深度级是完整的(即,八叉树在该深度级下包含所有可能的节点),则这将意味着将存储约5×1012个节点。当构建这种八叉树时,只要数据存储规范不太高,存储器内表示就是实用的。

在八叉树节点包括16个比特(2个字节)的情况下,前述示例将需要约(214)3*2个字节=8796gb的ram,其表示可观的计算资源。

虽然已在上面描述了16比特节点,但是可以使用指针来定义节点的结构,这意味着在实践中,节点可以是约34个字节。此外,所描述的16比特节点对仅一个性质进行编码。对象的数据模型可以具有许多性质,并且因此,在实践中,资源规范可以是实质上较高的。

因此甚至相对简单的对象也可以产生大量数据要存储和处理,并且这可能在当前常规容易可访问硬件的范围之外,超过“现成”处理资源规范。在此类示例中,多级方法可以放松用于存储器内处理的处理资源规范。

例如,如果八叉树被分割使得在体积八叉树中表示前6个级并且定义64×64×64个子体积八叉树,则每个八叉树将包括约20×106个节点,其可以“在核心中”(即在ram中)或者在可用的快速存储器资源中被高效地处理。

块410包括从第二数据中提取数据以提供要在增材制造中生成的多个层中的每一个的数据表示,并且块412包括基于该数据表示生成对象。

在块412中z优先顺序可以允许高效数据提取实现以用于对象生成。在一些示例中,可以将序列化数据存储在存储器中并且可以检索其部分以便执行处理来确定用于生成对象的控制指令(例如,以便确定指定构建材料和/或打印剂可以被放置在哪里、要使用什么材料/试剂、可以使用诸如温度等之类的什么参数的指令)。

为了考虑示例,为了生成对象的最低层,可以从序列化表示中提取表示包含第一层的至少一部分的所有节点的数据。出于本讨论的目的,在此示例中,第一层对应于较低的c节点并且第二层对应于较高的c节点,但是在其他示例中,这些节点中的每一个均可以被分割成表示多于一个层的子体积。

考虑图2的示例,包含对象的最低层的一部分的所有节点被布置在单个串中,所述单个串可以被表达为:

a:[b1-b4]:[cn1-cn4]n=1-4

此表示假定所有“c级”节点都被包括在八叉树中。情况可能不是这样,因为b节点中的一个可以指示其子体积在所考虑的属性方面是同质的,并且因此可以没有与该子体积相对应的c级节点。

可以根据所提取的数据确定第一层的表示。例如,这可以包括提取节点[cn1-cn4]n=1-4,其提供关于其许多子体积中的每一个的信息。如果未定义c节点中的任何一个,则确定第一层的表示可以包括考虑较高级节点(即,在此示例中,b或a节点)的内容。在一些示例中,所确定的第一层的表示可以处于对象生成分辨率。在包括末端灰色体积的示例中,确定第一层的表示可以包括将每个体积指派为黑色或白色体积。在一些示例中,第一层的表示可以被用作输入来生成用于增材制造设备的控制指令。例如,将体积表征为在对象内部可以产生将熔剂放置在与该体积相对应的物理位置处的指令。将体积表征为完全在对象外部可以产生在与该体积相对应的物理位置处不放置熔剂或者放置细化剂的指令。

在一些示例中,控制指令可以用于由增材制造设备生成对象,并且使用第一层的表示来生成对象层。

包括所提取的数据以及指示未被包含在所提取的数据中的数据在序列化表示中的位置的索引的数据块可以被存储在存储器中。此数据块可以例如包括作为c编程语言(以及其他语言)中使用的术语的“结构(struct)’。索引可以包括指示最后提取的节点或者序列化数据中的第一“未提取的”节点的指针。

因为这种数据块当与对象的序列化表示相比较时可以是相对较小的,它实际上可以被保持在相对较快的核心内或处理器存储器中,与较慢的存储器资源(例如,“核心外”或固态存储器)相反。

然后可以生成要在逐层制造过程中生成的对象的第二层的数据表示。例如,这可以是要紧接在第一层之后生成的层(即,第二层将直接地在物理上生成的对象中的第一层之上),或者可以是后续层。在c级节点表示多于一个层的示例中,用于生成这种层的数据可以被包含在已经提取的数据内,并且因此可以针对适当的后续层执行此方法。然而,在此示例中,第二层对应于较高的c节点。

这可以通过首先访问数据块来生成。如上面所指出的,此数据块可以在一些示例中被保持在本地“核心内”或快速存储器中,因为它相对较小。这能导致存储器访问延迟减小,这对大型数据文件来说可能很重要。可以丢弃表示不表示第二层的任何部分的任何节点的数据。在此示例中,这留下数据:

a:[b1-b4]

索引可以用于确定序列化数据中的起始位置。在此示例中,索引可以是到被最后读取的序列化数据中的位置的指针,在此示例中,下面的位置“loc”。实际上,这可以是到被提取的数据部分的末尾或到尚未被提取的后续数据的开始的指针。

a:[b1-b4]:[cn1-cn4]n=1-4:*loc*:[cn5-cn8]n=1-4:[b5-b8]:[cn1-cn4]n=5-8:[cn5-cn8]n=5-8

可以从序列化表示中提取表示所有节点并且出现在起始位置之后的数据,所述所有节点表示第二层的至少一部分。这可以连同来自数据块的保留数据一起用于生成第二层的表示。在此示例中,它所基于的数据是:

a:[b1-b4]:[cn5-cn8]n=1-4(如上面所指出的,就b和c节点存在来说)。

然后可以使用第二层的表示来生成对象层,同时包括从第一数据块保留的数据和为第二层提取的数据的更新的数据块以及到新位置的指针被存储在存储器中。在此示例中,指针将是到指示为*loc*的位置的指针:

a:[b1-b4]:[cn1-cn4]n=1-4:[cn5-cn8]n=1-4:*loc*:[b5-b8]:[cn1-cn4]n=5-8:[cn5-cn8]n=5-8

可以按照预定制造顺序一层一层地迭代地执行此过程,其中更新的数据块被创建并用于下一层,直到检索到与最终层有关的数据为止。在此示例中,下一层向上是在区域b5-b8而不是b1-b4中,所以要丢弃的数据将在前一个数据块中只留下节点a,并且要提取的下一个数据串将包含[b5]-b8]:[cn1-cn4]n=5-8。

如上面已讨论的,数据块可以被保持在核心内或相对较快的存储器资源(例如,本地ram)中并且相对高效地存取。序列化表示可以被保持在诸如固态存储器资源之类的“核心外”高容量存储器资源中。用于在数据存取时间方面可能相对较慢的这种高容量存储器的数据提取任务有效地分散在处理各处以生成层。在以上示例中,在对象生成期间执行方法,在此情况下它可以有助于提供不过度冗长的基本上恒定的层处理时间。可以在在先层的生成正在进行的同时执行用于后续层的数据处理。

为了考虑层处理时间的影响,示例增材制造过程可以涉及各种过程。可以在打印床或构建平台上形成构建材料的层。可以使用例如构建材料分配器来形成构建材料的层,所述构建材料分配器可以以预定厚度使构建材料沉积并散布到打印床上。

可以使用例如诸如红外灯之类的辐射源或者通过某种其他装置来预热构建材料的层。打印剂可以由试剂分配器分配到构建材料的层上。可以对构建材料的层施加能量(例如,来自熔灯或来自多个熔灯的热量)以便引起已被施加有熔剂的构建材料的那些部分的聚结和凝固。在另一个示例中,可以允许构建材料的层沉降和冷却。

上面参考示例增材制造过程所描述的过程可以形成层处理循环的一部分,可以针对要生成的多层对象的每个层重复所述层处理循环。层处理循环或层生成循环可以被认为包括关于构建材料的单个层执行以便形成要构建的三维对象的切片的一组过程,并且关于构建材料的单个层执行该组过程的时间可以被认为是层处理时间或层生成时间。这可以包括用于生成要在形成层时使用的指令(例如指定打印剂的放置、温度等)的处理时间,所述指令可以基于从对象的表示中提取的数据。

意图可以是,层处理时间对于要生成的对象的所有层来说是相同的或大致相同的。也就是说,在增材制造过程中用于每个层的层处理时间可以是大致恒定的或固定的。这里,表达“相同的”旨在意指确切相同的或大致相同的。

针对要生成的对象的所有层维持恒定的或大致恒定的层处理时间有助于确保对象被生成有一致层。

通过以所描述的序列化方式存储数据,可以贯穿数据处理有效地“摊销”其检索,并且可以更容易地实现不过度冗长的恒定的层处理时间。在一些情况下,后续层的处理可以在在先层的生成正在进行的同时开始。

图5示出了包括处理器502、核心外存储器504和核心内存储器506的计算机系统的示意图。核心外存储器504和核心内存储器506可以分别包括“远程”存储器和“本地”存储器,其中应该按处理器的数据检索来理解那些术语:可以比核心外存储器504更快地访问核心内存储器506。核心外存储器504可以用于例如被构建用于数据的高效大容量存储,然而核心内存储器可以被配置成基本上按需提供数据。为此,存储器504、506可以是不同类型的。例如,核心外存储器504可以包括固态存储器,例如硬盘驱动器hdd或固态驱动器(ssd),然而核心内存储器可以包括随机存取存储器(ram)。在其他示例中,核心外存储器504可以包括只读存储器。

在一些示例中,核心内存储器506可以在物理上更靠近处理器502(以便允许更短的信号路径实现),并且可以在物理上小于核心外存储器504。在一些示例中,处理器502可以经由计算机网络(诸如局域网、广域网或互联网)连接到核心外存储器504,然而核心内存储器可以被布置在包括处理器502的设备中或附近。在一些示例中,可以在与处理器相同的芯片或管芯上提供核心内存储器502,或者处理器可以是“在存储器中处理”处理器。在一些示例中,存储器504、506能基本上位于一处。

在一些示例中,序列化数据可以被存储在核心外存储器504中并且仅包括与特定层有关的数据的那些部分的数据块可以被存储在核心内存储器506中。可以注意到,一旦已制定了用于第一层的数据块,就已经从核心外存储器504中检索到与第二层有关的至少一些数据。数据的相对较慢的检索遍布数据检索和处理(并且在一些示例中,遍布对象生成运用)。在一些示例中,子体积八叉树可以形成在核心内存储器506中。

图6示出了机器可读介质602和处理器604。机器可读介质602包括如下指令:当由处理器执行时,使处理器生成表示要在逐层制造中生成的对象的数据模型。

指令包括用于通过检查第一大小的八个体积的组来生成表示要在逐层制造中生成的对象的多个第一数据模型的指令,并且,针对每个组:

(i)如果该组由共享预定属性的体积构成,则合并这些体积以定义第二大小的具有预定属性的体积;否则,(ii)如果该组由缺少预定属性的体积构成,则合并这些体积以定义第二大小的缺少预定属性的体积,以及否则(iii)定义指示第二大小的在其子部分中包括属性的体积的节点。在一些示例中,指令可以包括用于执行图3的方法的指令。

指令可以是这样的,即基于检查由在先迭代中定义的节点/体积所表示的体积迭代地执行节点/体积的形成,直到包括所形成的节点的表示的数据集达到阈值大小为止。在一些示例中,如果先前尚未识别节点,则最大体积可以在任何情况下被编码为节点。

指令可以进一步包括用于使处理器604存储多个第一数据模型(例如,在存储器中)并且用于生成第二数据模型的指令,其中生成第二数据模型包括,从表示在生成第一个数据模型时形成的最大体积的节点/体积开始,检查第一大小的八个体积的组,并且,针对每个组,(i)如果该组由共享预定属性的体积构成,则合并这些体积以定义第二大小的具有预定属性的体积,否则(ii)如果该组由缺少预定属性的体积构成,则合并这些体积以定义第二大小的缺少预定属性的体积,否则(iii)定义指示第二大小的在其子部分中包括属性的体积的节点。可以基于检查由在先迭代中定义的节点/体积所表示的体积迭代地执行节点/体积的形成,直到单个节点指示包含对象的体积为止。

机器可读介质602可以进一步包括如下指令:当由处理器604执行时,使处理器604通过将多个第一数据模型交织到第二数据模型中来合并第一数据模型和第二数据模型,例如如关于图4所描述的。

机器可读介质602可以进一步包括如下指令:当由处理器604执行时,使处理器604生成第一数据模型和第二数据模型,使得在每个数据模型中:

(i)表示包括要按照对象生成的预定顺序较早地生成的对象的层的体积的节点在表示由要随后生成的对象的层构成的体积的节点之前;

(ii)对于表示包括对象的给定层的体积的节点,处于较粗体积分辨率下的节点在处于更精细体积分辨率下的节点之前;并且

(iii)表示包括给定层并具有相同分辨率的体积的节点根据预定位置编码图案被序列化。

换句话说,数据模型可以各自包括如上所述的“z优先”数据模型。

图7示出了要在逐层制造过程中制造的对象的至少一部分的表示,其中该表示包括:表示具有横跨对象的介于第一分辨率与第二分辨率之间的体积分辨率(在此示例中,三个体积分辨率)的第一多个节点的八叉树702的数据以及表示具有横跨对象的介于第三分辨率与第四分辨率之间的体积分辨率(在此示例中另外两个体积分辨率)的第二多个节点的多个八叉树704a-n中的每一个的数据。应领会的是,八叉树702可以具有多达64个八叉树704a-n,所述64个八叉树704a-n具有与其相关联的第二多个节点。具有横跨对象的介于第一分辨率与第二分辨率之间的体积分辨率的节点的八叉树702可以包括体积八叉树,并且具有横跨对象的介于第三分辨率与第四分辨率之间的体积分辨率的节点的八叉树704可以包括子体积八叉树。

在每个八叉树702、704的序列化表示内,可以对节点进行排序,使得表示包括要按照对象生成的预定顺序较早地生成的对象的层的体积的节点在表示由要随后生成的对象的(一个或多个)层构成的体积的节点之前,对于表示包括对象的给定层的体积的节点来说,处于较粗体积分辨率下的节点在处于更精细体积分辨率下的节点之前;并且表示包括给定层并具有相同分辨率的体积的节点根据预定位置编码图案被序列化(即,数据根据如上所述的“z优先”顺序被排序)。如上所述,这种数据结构适于增材制造过程中的“摊销”数据检索。

在一些示例中,八叉树的每个节点通过预定公共长度的比特串来表示并且将多个子体积分类为下列中的一个:

(i)在子体积各处具有一致的预定属性,

(ii)在子体积各处缺少预定属性

(iii)在子体积的子部分中具有预定属性。

可将本公开中的示例提供为方法、系统或机器可读指令,诸如软件、硬件、固件等的任何组合。此类机器可读指令可以被包括在其中或在其上具有计算机可读程序代码的计算机可读存储介质(包括但不限于盘储存器、cd-rom、光学储存器等)上。

参考根据本公开的示例的方法、装置和系统的流程图和/或框图对本公开进行描述。尽管上述的流程图示出了具体执行顺序,但是执行顺序可以与所描绘的顺序不同,并且可以并行执行至少一些过程。关于一个流程图所描述的块可以与另一流程图的块组合。应理解的是,流程图中的至少一些流程以及流程图和/或框图中的流程和/或图的组合可通过机器可读指令来实现。

机器可读指令可以例如由通用计算机、专用计算机、嵌入式处理器或其他可编程数据处理装置的处理器执行以实现说明书和图中描述的功能。特别地,处理器或处理设备可以执行机器可读指令。因此设备和装置的功能模块可以由执行存储在存储器中的机器可读指令的处理器或依照嵌入在逻辑电路中的指令操作的处理器来实现。术语“处理器”将被广义地解释成包括cpu、处理单元、asic、逻辑单元或可编程门阵列等。方法和功能模块可以全部由单个处理器执行或者划分在若干处理器之中。

此类机器可读指令还可以被存储在计算机可读储存器中,所述计算机可读储存器可引导计算机或其他可编程数据处理装置在具体模式下操作。

此类机器可读指令也可以被加载到计算机或其他可编程数据处理装置上,使得该计算机或其他可编程数据处理装置执行一系列操作来产生计算机实现的处理,从而在该计算机或其他可编程装置上执行的指令实现由流程图中的(一个或多个)流程所指定的功能。

进一步地,可以以计算机软件产品的形式实现本文的教导,计算机软件产品被存储在存储介质中并且包括用于使计算机装置实现本公开的示例中叙述的方法的多个指令。

虽然已经参考某些示例描述了方法、设备和相关方面,但是在不脱离本公开的精神的情况下,可做出各种修改、改变、省略和取代。因此,意图是方法、设备和相关方面仅受到以下权利要求及其等同物的范围限制。应该注意的是,上面提及的示例图示而不是限制本文中描述的东西,并且本领域的技术人员将能够在不脱离所附权利要求的范围的情况下设计许多替代实施方式。关于一个示例所描述的特征可以与另一示例的特征组合。

单词“包括”不排除存在除权利要求中列举的那些元件以外的元件,“一”或“一个”不排除多个,并且单个处理器或其他单元可以履行权利要求中叙述的若干单元的功能。

任何从属权利要求的特征可以与独立权利要求或其他从属权利要求中的任一项的特征组合。

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