这个脚本,在距离判断的时候如果用‘==’,判断连接器两点的距离与我们输入的连接器的长度是否相等时,如果连接器两点的距离比较短可能会不成功
此时,可将if的判定条件‘==’改为'<'
<左边为模型中连接器两点的距离,右边输入一个稍稍大于连接器长度的数
具体的代码如下
代码块
PlainText
自动换行
复制代码
123456789101112131415161718192021222324252627
import section
import regionToolset
import displayGroupMdbToolset as dgm
from abaqusConstants import *
import part
import material
import assembly
import step
import interaction
import load
import mesh
import optimization
import job
import sketch
import visualization
import xyPlot
import displayGroupOdbToolset as dgo
import connectorBehavior
import math
a = mdb.models['test'].rootAssembly
n1,n2 = a.sets['set1'].nodes,a.sets['set2'].nodes
for i in n1:
for j in n2:
xd,yd,zd=i.coordinates[0]-j.coordinates[0],i.coordinates[1]-j.coordinates[1],i.coordinates[2]-j.coordinates[2]
if pow( xd**2.0+yd**2.0+zd**2.0,0.5 ) < 0.051:
a.WirePolyLine(points=((i, j),), mergeType=IMPRINT, meshable=OFF)
复制成功
加入getinput可以在abaqus里输入所需的参数,修改后的代码如下
代码块
PlainText
自动换行
复制代码
123456789101112131415161718192021222324252627282930313233
#!/usr/bin/python
# -*- coding: utf-8 -*-
import section
import regionToolset
import displayGroupMdbToolset as dgm
from abaqus import*
from abaqusConstants import *
import part
import material
import assembly
import step
import interaction
import load
import mesh
import optimization
import job
import sketch
import visualization
import xyPlot
import displayGroupOdbToolset as dgo
import connectorBehavior
ModelName = str(getInput("请输入模型的名称"))
Set1 = str(getInput("请输入第一个set的名称"))
Set2 = str(getInput("请输入第二个set的名称"))
a = mdb.models[ModelName].rootAssembly
n1,n2 = a.sets[Set1].nodes,a.sets[Set2].nodes
d = float(getInput("请输入连接器的长度"))
for i in n1:
for j in n2:
xd,yd,zd=i.coordinates[0]-j.coordinates[0],i.coordinates[1]-j.coordinates[1],i.coordinates[2]-j.coordinates[2]
if pow(xd**2.0+yd**2.0+zd**2.0, 0.5) < d:
a.WirePolyLine(points=((i, j),), mergeType=IMPRINT, meshable=OFF)
复制成功
可将该脚本在abaqus里做成插件文件在abaqus菜单栏的Plug-ins栏里找到
将以下分享的文件复制到c盘的用户文件夹内,重启abaqus即可使用该插件
基于部件的几何点vertices脚本:
代码块
PlainText
自动换行
复制代码
1234567891011121314151617181920212223242526272829303132333435363738394041424344
#!/usr/bin/python
# -*- coding: utf-8 -*-
import math
import section
import regionToolset
import displayGroupMdbToolset as dgm
from abaqus import*
from abaqusConstants import *
import part
import material
import assembly
import step
import interaction
import load
import mesh
import optimization
import job
import sketch
import visualization
import xyPlot
import displayGroupOdbToolset as dgo
import connectorBehavior
def euclidean_distance(tuple1, tuple2):
squared_diffs = [(a - b) ** 2 for a, b in zip(tuple1, tuple2)]
sum_of_squared_diffs = sum(squared_diffs)
distance = math.sqrt(sum_of_squared_diffs)
return distance
ModelName = str(getInput("请输入模型的名称"))
Set1 = str(getInput("请输入第一个set的名称"))
Set2 = str(getInput("请输入第二个set的名称"))
a = mdb.models[ModelName].rootAssembly
n1 = a.sets[Set1].vertices
n2 = a.sets[Set2].vertices
d = float(getInput("请输入连接器的长度"))
for i in n1:
for j in n2:
up = i.pointOn[0]
down = j.pointOn[0]
distance = euclidean_distance(up,down)
if distance == d:
a.WirePolyLine(points=((i, j),), mergeType=IMPRINT, meshable=OFF)
print(distance)
复制成功
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删