本發(fā)明涉及一種3d打印旋轉曲面切片方法,屬于3d打印。
背景技術:
1、3d打印時,目前通常采用平面切片方法,平面切片會沿固定方向進行切片,而曲面切片一般會出現(xiàn)自相交嚴重、精度不可控、算法復雜度高、處理困難等問題。目前對于現(xiàn)有曲面切片方法處理模型也相對單一,并且主要針對柱面和球面模型或工件,且生成曲面效果不好。
技術實現(xiàn)思路
1、本發(fā)明所要解決的技術問題是克服現(xiàn)有技術的缺陷,提供一種3d打印旋轉曲面切片方法、裝置及存儲介質。
2、為解決上述技術問題,本發(fā)明采用的技術方案如下:
3、一種3d打印旋轉曲面切片方法,包括以下步驟:
4、步驟1)獲取基本數(shù)據(jù),包括工件和旋轉曲面;
5、步驟2)矩陣變換
6、對旋轉曲面和工件分別進行先平移再旋轉變換,得到變換的旋轉曲面和變換的工件;
7、步驟3)獲取旋轉輪廓線
8、3.1)確定z向區(qū)間:變換的旋轉曲面的第二包圍盒的z向最大值為maxz,最小值為minz,則第二包圍盒z向區(qū)間范圍為[minz,maxz]。
9、3.2)獲取交線:將初始向量和原點o(0,0,0)構成的第一平面與變換的旋轉曲面求交,獲得兩條交線;判斷兩條交線的z向范圍是否連續(xù)覆蓋第二包圍盒z向區(qū)間范圍;
10、若未連續(xù)覆蓋,則將初始向量繞z軸旋轉一設定角度得到第二向量與原點o(0,0,0)構成第二平面,與變換的旋轉曲面求交獲得兩條新交線,與之前計算出來的兩條交線一起再次判斷兩條交線的z向區(qū)間范圍是否連續(xù)覆蓋第二包圍盒z向區(qū)間范圍;
11、若仍未完全連續(xù)覆蓋,則重復以上步驟,直至連續(xù)覆蓋;
12、3.3)合并交線;若成功連續(xù)覆蓋第二包圍盒z向區(qū)間范圍,則將所有交線繞z軸旋轉到y(tǒng)oz面上,合并所有的交線,獲得第一旋轉輪廓線;
13、步驟4)偏置輪廓線
14、4.1)旋轉:將第一旋轉輪廓線,繞y軸旋轉90°到xoy面上,得到第二旋轉輪廓線;
15、4.2)首尾延長:將第二旋轉輪廓線的首端和尾端延長后得到延長輪廓線;
16、4.3)偏置:將延長輪廓線上的所有點按偏置寬度step進行偏置處理,得到偏置輪廓線;
17、步驟5)軸向離散
18、5.1)細化輪廓線:根據(jù)給定的軸向精度來離散偏置輪廓線,得到細化后的輪廓線;
19、5.2)旋轉:將細化后的輪廓線繞y軸旋轉-90°,重新回到y(tǒng)oz面上,得到第三旋轉輪廓線;
20、步驟6)周向離散
21、6.1)確定周向離散范圍:變換的工件的第三包圍盒的z向最大值為maxz',最小值為minz';設第三旋轉輪廓線上任意連續(xù)點pi'、pi+1',最小值minz'在pi'、pi+1'兩點z值范圍內;則計算出第三旋轉輪廓線上z向值為最小值minz'的點pmin和z向值為最大值maxz'的點pmax,將pmin和pmax按照z向值大小插入到第三旋轉輪廓線中,作為離散邊界點;
22、6.2)周向離散:第三旋轉輪廓線上,z向值在[minz',maxz']內的所有輪廓點以z軸為旋轉軸進行周向離散,獲取多行離散點云;
23、步驟7)判別
24、判別離散點云是否在變換的工件內部,保留在變換的工件內部的點,記錄存儲內部的點在離散點云中的行號和每行中對應的排序號,形成存儲文件sifting_ids;
25、步驟8)分塊
26、8.1)判斷類型:將sifting_ids每行中連續(xù)的排序號歸為一段,將所有行進行分段處理,若所有行的段數(shù)相同,判定為分體工件;若不同,判定為整體工件;若所有行段數(shù)均為1,則判定為整體工件;
27、8.2)分塊:對所有行進行分塊處理,每塊便對應每個分體工件;對于分體工件,每一塊中有多行,每一行中只有一段,塊作為一個整體進行存儲;
28、對于整體工件,只有一塊,無需分塊;每一塊中有多行,一行包含一段或多段,每一行作為一個整體存儲;
29、步驟9)增加邊界點
30、對于分體工件,每塊的首尾行存儲在邊界點中,去除首尾行,其他點存儲在內部點中;
31、對于整體工件,整體工件首尾行存儲在邊界點中,去除首尾行,其他點存儲在內部點中;
32、根據(jù)分體工件和整體工件的不同,再進行周向邊界插點、相鄰行插點和邊界中間插點,并存儲在邊界點中;
33、步驟10)降采和重構面片
34、10.1)降采樣:利用層次化下采樣的方法,對內部點進行降采樣處理,得到降采內部點;
35、10.2)重構:將降采內部點和邊界點組合成最終點云,利用推進前表面重建方法共同重構曲面面片;
36、10.3)篩選面片:對重構后的曲面面片進行篩選,若重構后的曲面面片中存在三個點均由邊界點構成的三角面片,則舍棄,得到篩選后的面片;
37、步驟11)輸出曲面
38、將篩選后的面片先旋轉再平移變換,得到切片曲面。
39、進一步地,步驟4.2)首尾延長時,設定延長距離diste,第二旋轉輪廓線outline'從首端起的第一個點和第二個點兩個點分別為pte0、pte1,則首端延長點spt,尾端延長點同理計算;第二旋轉輪廓線outline'的首端和尾端延長后得到延長輪廓線extend_outline。
40、進一步地,步驟4.3)偏置時,設偏置寬度為step,延長輪廓線extend_outline上任意一點ptt的切向向量為的垂直向量為點ptt延垂直向量方向移動step寬度,得到偏置點ptt',將延長輪廓線extend_outline上的所有點按偏置寬度step進行偏置處理,得到偏置輪廓線offset_line。
41、進一步地,步驟5.1)細化輪廓線時,根據(jù)給定的軸向精度outline_dist來離散偏置輪廓線offset_line;設偏置輪廓線offset_line上任意連續(xù)點pi、pi+1,當這兩點間距d>outline_dist時,則進行插點操作;設插點數(shù)量num=d/outline_dist-1,點間間隔len=d/(num+1);最終得到細化后的輪廓線refining_line。
42、進一步地,步驟6.2)周向離散時,設點pr的z值在[minz',maxz']內,輪廓線在yoz面上,周向半徑r為點pr的y向值,r=|pr.y|,式中,pr.y表示點pr的y向值;給定旋轉精度arc_dist,該旋轉精度對應角度以r為半徑,以基點pr_0(r·sin0,r·cos0,pr.z)為起點,繞z軸逆時針旋轉計算離散點,則離散的第k個點pr_k的坐標值為pr_k(r·sin(k·θ),r·cos(k·θ),pr.z),k·θ≤2π,式中,pr.z表示點pr的z向值;對[minz',maxz']內的第三旋轉輪廓線refining_line'上的所有輪廓點進行離散,最終獲取多行離散點云discrete_points。
43、進一步地,步驟8.2)分塊時,對于分體工件,每行被分成不同段且段數(shù)相同,不同段歸屬于不同的分體工件;設相鄰兩行rowj、rowj+1,段數(shù)為m,rowj行第s段首點rowj+1行第t段首點當距離最近時,該距離這兩段中的兩個首點所在的段視為同屬一塊。
44、一種3d打印旋轉曲面切片系統(tǒng),包括以下模塊:
45、獲取基本數(shù)據(jù)模塊,該模塊包括工件和旋轉曲面;
46、矩陣變換模塊,用于對旋轉曲面和工件分別進行先平移再旋轉變換,得到變換的旋轉曲面和變換的工件;
47、獲取旋轉輪廓線模塊,包括:
48、確定z向區(qū)間子模塊:變換的旋轉曲面的第二包圍盒的z向最大值為maxz,最小值為minz,則第二包圍盒z向區(qū)間范圍為[minz,maxz]。
49、獲取交線子模塊:將初始向量和原點o(0,0,0)構成的第一平面與變換的旋轉曲面求交,獲得兩條交線;判斷兩條交線的z向范圍是否連續(xù)覆蓋第二包圍盒z向區(qū)間范圍;
50、若未連續(xù)覆蓋,則將初始向量繞z軸旋轉一設定角度得到第二向量與原點o(0,0,0)構成第二平面,與變換的旋轉曲面求交獲得兩條新交線,與之前計算出來的兩條交線一起再次判斷兩條交線的z向區(qū)間范圍是否連續(xù)覆蓋第二包圍盒z向區(qū)間范圍;
51、若仍未完全連續(xù)覆蓋,則重復以上步驟,直至連續(xù)覆蓋;
52、合并交線子模塊;若成功連續(xù)覆蓋第二包圍盒z向區(qū)間范圍,則將所有交線繞z軸旋轉到y(tǒng)oz面上,合并所有的交線,獲得第一旋轉輪廓線;
53、偏置輪廓線模塊,包括:
54、旋轉子模塊:將第一旋轉輪廓線,繞y軸旋轉90°到xoy面上,得到第二旋轉輪廓線;
55、首尾延長子模塊:將第二旋轉輪廓線的首端和尾端延長后得到延長輪廓線;
56、偏置子模塊:將延長輪廓線上的所有點按偏置寬度step進行偏置處理,得到偏置輪廓線;
57、軸向離散模塊,包括:
58、細化輪廓線子模塊:根據(jù)給定的軸向精度來離散偏置輪廓線,得到細化后的輪廓線;
59、旋轉子模塊:將細化后的輪廓線繞y軸旋轉-90°,重新回到y(tǒng)oz面上,得到第三旋轉輪廓線;
60、周向離散模塊,包括:
61、確定周向離散范圍子模塊:變換的工件的第三包圍盒的z向最大值為maxz',最小值為minz';設第三旋轉輪廓線上任意連續(xù)點pi'、pi+1',最小值minz'在pi'、pi+1'兩點z值范圍內;則計算出第三旋轉輪廓線上z向值為最小值minz'的點pmin和z向值為最大值maxz'的點pmax,將pmin和pmax按照z向值大小插入到第三旋轉輪廓線中,作為離散邊界點;
62、周向離散子模塊:第三旋轉輪廓線上,z向值在[minz',maxz']內的所有輪廓點以z軸為旋轉軸進行周向離散,獲取多行離散點云;
63、判別模塊,用于判別離散點云是否在變換的工件內部,保留在變換的工件內部的點,記錄存儲內部的點在離散點云中的行號和每行中對應的排序號,形成存儲文件sifting_ids;
64、分塊模塊,包括:
65、判斷類型子模塊:將sifting_ids每行中連續(xù)的排序號歸為一段,將所有行進行分段處理,若所有行的段數(shù)相同,判定為分體工件;若不同,判定為整體工件;若所有行段數(shù)均為1,則判定為整體工件;
66、分塊子模塊:對所有行進行分塊處理,每塊便對應每個分體工件;對于分體工件,每一塊中有多行,每一行中只有一段,塊作為一個整體進行存儲;
67、對于整體工件,只有一塊,無需分塊;每一塊中有多行,一行包含一段或多段,每一行作為一個整體存儲;
68、增加邊界點模塊,用于對于分體工件,每塊的首尾行存儲在邊界點中,去除首尾行,其他點存儲在內部點中;
69、對于整體工件,整體工件首尾行存儲在邊界點中,去除首尾行,其他點存儲在內部點中;
70、根據(jù)分體工件和整體工件的不同,再進行周向邊界插點、相鄰行插點和邊界中間插點,并存儲在邊界點中;
71、降采和重構面片模塊,包括:
72、降采樣子模塊:利用層次化下采樣的方法,對內部點進行降采樣處理,得到降采內部點;
73、重構子模塊:將降采內部點和邊界點組合成最終點云,利用推進前表面重建方法共同重構曲面面片;
74、篩選面片子模塊:對重構后的曲面面片進行篩選,若重構后的曲面面片中存在三個點均由邊界點構成的三角面片,則舍棄,得到篩選后的面片;
75、輸出曲面模塊,用于將篩選后的面片先旋轉再平移變換,得到切片曲面。
76、一種計算機設備,所述計算機設備包括處理器和存儲器,所述存儲器中存儲有計算機程序,所述計算機程序由所述處理器加載并執(zhí)行以實現(xiàn)任一項所述3d打印旋轉曲面切片方法。
77、一種計算機可讀存儲介質,其上存儲有計算機程序,所述計算機程序被處理器執(zhí)行時實現(xiàn)任一項所述3d打印旋轉曲面切片方法。
78、本發(fā)明所達到的有益效果:
79、本發(fā)明的旋轉曲面切片方法主要針對回轉體模型或工件,可對軸向和周向兩個方向進行精度設定,實現(xiàn)精度可控,避免自相交問題,并且運算速度快,生成曲面效果好。