使用腳本導入點數據

導入單個點

向某個part中個導入點

p = mdb.models[‘Model-1’].parts[‘Part-1’]
p.DatumPointByCoordinate(coords=(10.0, 10.0, 10.0))
mdb.models[‘Model-1’].parts[‘Part-1’].features.changeKey(fromName=’Datum pt-1’,
toName=’jizhundian1’)

向裝配體中導入點

a = mdb.models[‘Model-1’].rootAssembly
a.DatumPointByCoordinate(coords=(0.0, 0.0, 0.0))
mdb.models[‘Model-1’].rootAssembly.features.changeKey(fromName=’Datum pt-1’,
toName=’jizhundian1’)

導入參考點

a = mdb.models[‘Model-1’].rootAssembly
a.ReferencePoint(point=(1.0, 1.0, 1.0))
mdb.models[‘Model-1’].rootAssembly.features.changeKey(fromName=’RP-2’,
toName=’cankaodian1’)

注意

  • 使用腳本導入點的時候需要明確作用對象,是在某個part下導入還是在裝配裏面導入
  • 導入點後,默認名稱均爲Datum pt-1形式,故每次輸入(導入)點後均應該養成重新編號的習慣,重新編號可以使用changeKey方法,命令如下

mdb.models[‘Model-1’].parts[‘Part-1’].features.changeKey(fromName=’Datum pt-1’,
toName=’input_point1’)

  • 對於導入的點(主要指基準點),不同的part中的點名稱可以同名,裝配件中的命名也可以和某個part中的點名稱一樣,但是同一個part否則裝配體下不得重名,示意如下圖

不同part的相同點名稱
part和model下的相同點名稱


輸入多個點

弄清單個點輸入的腳本,想要導入多個點,只需要通過循環將點數據依次寫入腳本DatumPointByCoordinate(coords=(x,y, z))即可,此時我們需要藉助excel相關模塊讀取excel數據,並將點座標按要求寫入,然而abaqus本身使用python3.0以前的版本寫的,其自帶的python自身不帶相關excel模塊,雖然自帶操作csv文件類型的模塊也可以間接完成excel讀取操作,畢竟使用不方便,且考慮到需要使用點批處理導入載荷數據或交互輸入數據,不方便協同工作.
這裏以xlrd模塊爲例說明
首先安裝該模塊,參考
如何導入第三方模塊
如何使用該模塊,參考
模塊操作範例

現在abaqus可以使用該模塊操作數據了


讀取excel數據

完整的操作實例如下
需要導入的數據

from abaqus import *
from abaqusConstants import *
from caeModules import *
import xlrd

data=xlrd.open_workbook('G:\python 3.5\point.xlsx')
table = data.sheets()[0]
nrows = table.nrows

for i in range(nrows-1):
    p = mdb.models['Model-1'].parts['Part-1']
    pointnumber=table.row_values(i+1)[0]
    x=table.row_values(i+1)[1]
    y=table.row_values(i+1)[2]
    z=table.row_values(i+1)[3]
    p.DatumPointByCoordinate(coords=(x, y, z))
    mdb.models['Model-1'].parts['Part-1'].features.changeKey(fromName='Datum pt-1',toName=str(pointnumber))

結果如圖
導入結果

需要注意的是,toName必須爲字符串類型,使用type()函數測試單元格類型結果如下

>>> temp=table.row_values(2)[0]
>>> type(temp)
<type 'unicode'>
>>> temp2=str(temp)
>>> type(temp2)
<type 'str'>
>>> temp3=table.row_values(2)[1]
>>> type(temp3)
<type 'float'>

遺留問題

  1. 如果把以上代碼進行封裝,可以做成一個abaqus的插件小程序
  2. 上述代碼無法添加中文註釋,中文註釋後將無法運行,應該是編碼的問題
  3. 如果'Datum pt-1'已經存在,則fromName='Datum pt-1'語句會打亂點的順序,而DatumPointByCoordinate(coords=(x, y, z))只生成一個對象,對象名稱在部件或裝配的features字典庫中,比如下面的例子,故在導入點時需要檢測當前的特徵,包括總特徵數量,是否有以Datum pt-x的點存在 ,如果有,求其最大的點編號
    保存特徵的字典中國的鍵

問題解決

如果想要在代碼中使用中文註釋,在代碼開頭使用如下語句即可

#coding=gbk

雖然可以使用中文註釋,但是在寫程序時,輸出中文提示時依然會亂碼

但是以下代碼可以正常打印中文,原因???

# coding=gbk
# 本代碼用於生成生成材料Q235並創建一個stellSection的截面屬性
# 由於abaqus所有版本均使用python3.0以前的版本
# 爲了支持中文提示,必須指定編碼格式''# coding=gbk ''
Mdb()
mdb.models['Model-1'].Material(name='Q235')
mdb.models['Model-1'].materials['Q235'].Elastic(table=((210000.0, 0.3), ))
mdb.models['Model-1'].HomogeneousSolidSection(name='stellSection', 
    material='Q235', thickness=None)
print '截面已經生成'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章