导入单个点
向某个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否则装配体下不得重名,示意如下图
输入多个点
弄清单个点输入的脚本,想要导入多个点,只需要通过循环将点数据依次写入脚本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'>
遗留问题
- 如果把以上代码进行封装,可以做成一个abaqus的插件小程序
- 上述代码无法添加中文注释,中文注释后将无法运行,应该是编码的问题
问题解决
如果想要在代码中使用中文注释,在代码开头使用如下语句即可
#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 '截面已经生成'