使用脚本导入点数据

导入单个点

向某个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'>

遗留问题

  • 如果把以上代码进行封装,可以做成一个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 '截面已经生成'

猜你喜欢

转载自blog.csdn.net/qq_16458375/article/details/80212322
今日推荐