iges格式 平面轉128nurbs曲面

2021-06-14 19:30:56 字數 3357 閱讀 4645

最近通過同學介紹在一家公司幹了兩個星期活,掙了1000

塊生活費。公司不大,是乙個外包公司,現在在做乙個類似

autocad

的軟體,我負責其中乙個功能的開發,這個功能是將三維立體圖形(例如橋梁的立體模型圖)匯出成

iges

格式的檔案。昨天剛結束這個任務,在部落格留個腳印。

先說一下iges

格式。這個格式遠比格式

png、音訊格式

***這型別格式複雜。他是乙個工業標準。

iges

(the initial graphics exchange specification

)格式是被定義基於

computer-aided design (cad)&computer-aided manufacturing (cam) systems 

(電腦輔助設計

&電腦輔助製造系統)不同電腦系統之間的通用

ansi

資訊交換標準。簡單可以理解為:

iges

是乙個公共橋梁,用於不同製圖軟體之間進行通訊。如下圖。

雖然做完了這個功能,但我個人感覺並不完善。iges

格式包含了很多的構圖系統,而常見的面,線,都是使用最通用的

nurbs

曲面,nurbs

曲線。這兩個曲面就我個人感覺是特別複雜的,引數特別多。這種引數曲線,更具一些點生成的線條非常的光華,根據設定引數,設計出來的形狀可以符合流體動力學。比如說汽車的車身,用這種設計軟體設計出來,就會更符合空氣動力學。這種曲線(面)是由控制點,控制點上的權值,節點向量s,

t以及樣條基函式構成。簡單理解就是

p = f(i)

,給定乙個自變數

i,就會根據函式規則

f產生乙個點

p。而這條曲線就是由這些

p點構成。(理解很淺薄。。。。勿噴)

在iges

中128

針對的是

nurbs

曲面,126

針對的是

nurbs

曲線。126:

126,k,

m,pr1..4,s

,p(控制點),

smin

,smax

,法線128,k1,

k2,pr1..5,s

,t,p

,smin

,smax

,tmin

,tmax

作為乙個沒接觸過計算機圖形學的人,完全不懂這些東西。為了掙錢,看了幾天和這個相關的一本書《計算機圖形學》孫家廣,清華。

雖然這個本身很複雜,但是我外包的這個公司要匯出的體都是由平面、直線組成的。因此只要研究明白「如何將平面轉化為nurbs

引數形式」就可以了。

利用inventor

生成了一些直線觀察了一下,發現除了控制點外,其他的值(k,

m,s等)都是固定的,控制點由兩個點組成,就是p1和

p2,並且如果

p1指向

p2那麼在

126裡就是

p1寫在

p2的前面。

同樣利用inventor

匯出一些平面作分析,我匯出了在

zoy平面的三邊面,四邊面,五邊面,六邊面。分析完之後特別開心,資料是這樣的:

所有的平面,不管是幾條邊,都是由四個控制點組成,權值都是1,

s的值:

0.0,0.0

,ymax-ymin      t

的值:0.0,0.0

,zmax-zmin

控制點也有規律,如圖:

興奮了一小下後發現不對勁,這幾個圖都是某一平面的,太特殊,於是就又用inventor

生成了乙個斜的三角形,看完資料後就哭了:

資料:由於是立體圖形的,所以沒有立即發現控制點的規律,觀察了好久,又用軟體把平面上的點和控制點繪製出來,分析了邊長,最後發現了最終的規律:

結論是:

對於任意的平面x,控制點(包圍盒的概念)就是與平面

x共面且包圍平面

x的矩形。

s是其中的一條邊長,

t是另一條邊長。

這樣128

的格式就出來了。我們假設四個控制點是

p1,p2,p3,p4,

兩條邊長是

a,b則最終的

128格式是:

至於寫**,為了表示為實體,我們使用了

406,

504,502,128,126,508,510,514,186

這些元素(乙個體包含乙個

504,

乙個502,

乙個514

乙個186

。乙個體包含多個面,乙個面包含乙個

128,乙個

508,乙個

510,多個

126。),由於

504(邊表)

中要有所有

126的

p值的資訊。所以在匯出

iges

格式時,先將s段,

g段的資訊寫入

2檔案中,然後分為兩步,第一步是迴圈所有的面將所有邊處理為

126(只分配

p值,不處理具體資料。開乙個陣列,記錄每條

126的

p值,注意重邊的判斷,我使用的是臨接表),然後將

p值整合到

504的陣列中。處理完之後再迴圈一遍所有的面,將

504,

128,126

這些資訊的

p段的值寫入到

1檔案中,同時將

d段的值寫入到

2檔案中。所有體處理完之後,將

t段的值寫入到

1檔案中,最後將

1檔案寫入到

2檔案中。

2檔案便是要匯出的

igs格式檔案了。

寫**的部分寫的不是很詳細,因為我這次主要負責的是搞清楚128

格式,然後寫了輸出p段和

d段的**,具體格式資訊是同事處理的。

期待板磚~~

dos格式轉unix格式

今天用shell傳送郵件時,總是報打不開或者找不到檔案錯誤。後來alex發現是檔案是dos格式,在vi下轉換成unix格式之後就可以了。dos格式檔案傳輸到unix系統時,會在每行的結尾多乙個 m,當然也有可能看不到,但是在vi的時候,會在下面顯示此檔案的格式,比如 dos.txt dos 120l...

VOC格式資料轉COCO格式

博主使用labelme對目標檢測資料進行標註的時候,標註的結果只能選擇是voc格式的檔案。但是,現在新的網路一般都是用coco格式的資料進行執行的。所以,乙個voc轉coco格式的 就變得非常重要了。這篇部落格主要是為了資料增廣的那篇做引用的,所以原理就不說了,直接上 吧。在實際執行執行的時候,資料...

前端轉日期格式

後端的日期一般是定義為date型別的,前端接收到以後,直接在頁面顯示的話,會出現問題 格式不對 現在就寫乙個function來轉化一下 1 export function getnowdatetime datestr 13if strdate 0 strdate 9 16if hour 0 hour...