Abaqus obj inp 檔案內部讀取點座標並統計
阿新 • • 發佈:2019-01-08
任務描述:對一個三維的帶網格的模型,生成一個二維平面的影象描述,其中每個空格內部顯示這個座標下在z方向具有多少網格,類似於三維模型的深度圖
方法:有兩個方法
1.從網格檔案OBJ內部讀取點座標,統計(x,y)的個數
2.從Inp檔案內部讀取點座標,統計(x,y)的個數
在實驗過程中,發現方法1 的obj檔案內部的點的資訊比較雜,可能包含除了網格以外的其他的點的資訊,所以放棄了這種方法。這裡主要介紹方法2
inp檔案讀取
writenode = []
#writenode 點集
write_flag = False
input = open("new_1.inp","r")
#讀取inp檔案
astring = input.readlines()
#這裡這種讀入方式的好處是astring是list型別,其餘方式可能是str型別
for i,line in enumerate(astring):
if line =="*Node\n":
#找到inp檔案內部開始記錄點資訊的地方
write_flag = True
#寫入檔案標誌位開始
continue
#跳出當前迴圈,執行下一次迴圈,這樣*Node就不會寫入檔案內部
print(i)
if line =="*Element, type=C3D8R\n" :
break
#點描述資訊結束後是描述單元資訊,正好這裡截止,挑出for迴圈
if write_flag ==True:
writenode.append(line.replace(",",""))
點集寫出
接下來可以將我們的點資訊輸出另一個檔案:
f=open('point.txt','w')
for i in writenode:
f.write(i)
f.close()
重新讀入生成numpy array
a = np.loadtxt('zz.txt')
a = np.around(a)
#四捨五入,可能出現一些不準的點,防止出問題
刪除無關資訊
c= np.delete(a,0,axis=1)
#刪除第一列:各個點的標號[1,2,3,4,5...]
c= np.delete(c,2,axis=1)
#刪除Z座標,只需要統計xy座標
統計xy相同的點的個數
e = []
for (x,y) in (c):
#這裡如果直接統計列表是會報錯的,無法生成hash表所以要先生成這樣的陣列的型別,後面才好統計
e.append((x,y))
然後做一個字典,記錄各個點的個數
h = {}
for i in e:
h[i] = e.count(i)
print()
這樣就可以看到各個點的座標的個數了
{(-139.0, -18.0): 23,
(199.0, -96.0): 23,
(-199.0, -60.0): 23,
(-182.0, -150.0): 23,
(251.0, -60.0): 23,
(-243.0, -102.0): 23,
(208.0, 66.0): 23,...