Abaqus obj inp 文件內部讀取點座標並統計

任務描述:對一個三維的帶網格的模型,生成一個二維平面的圖像描述,其中每個空格內部顯示這個座標下在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,...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章