想要运用如下代码在abaqus里在长度为5厚度为0.0585的方形里生成半径指定随机的颗粒,可是显示偏移失败,应该如何更改?
from abaqus import *
from abaqusConstants import *
session.Viewport(name='Viewport: 1', origin=(0.0, 0.0), width=194.916549682617,
height=127.05989074707)
session.viewports['Viewport: 1'].makeCurrent()
session.viewports['Viewport: 1'].maximize()
from caeModules import *
from driverUtils import executeOnCaeStartup
executeOnCaeStartup()
session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(
referenceRepresentation=ON)
Mdb()
#: 新的模型数据库已创建.
#: 模型 "Model-1" 已创建.
session.viewports['Viewport: 1'].setValues(displayedObject=None)
s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',
sheetSize=200.0)
g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints
s.setPrimaryObject(option=STANDALONE)
s.rectangle(point1=(0.0, 0.0), point2=(5, 0.0585))
p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=TWO_D_PLANAR,
type=DEFORMABLE_BODY)
p = mdb.models['Model-1'].parts['Part-1']
p.BaseShell(sketch=s)
s.unsetPrimaryObject()
p = mdb.models['Model-1'].parts['Part-1']
session.viewports['Viewport: 1'].setValues(displayedObject=p)
del mdb.models['Model-1'].sketches['__profile__']
p = mdb.models['Model-1'].parts['Part-1']
f, e, d1 = p.faces, p.edges, p.datums
t = p.MakeSketchTransform(sketchPlane=f[0], sketchPlaneSide=SIDE1, origin=(0.0,
0.0, 0.0))
s1 = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',
sheetSize=424.26, gridSpacing=10.6, transform=t)
g, v, d, c = s1.geometry, s1.vertices, s1.dimensions, s1.constraints
s1.setPrimaryObject(option=SUPERIMPOSE)
p = mdb.models['Model-1'].parts['Part-1']
p.projectReferencesOntoSketch(sketch=s1, filter=COPLANAR_EDGES)
import numpy as np
import random
xmin=0.0
xmax=5
ymin=0.0
ymax=0.0585
beta=0.30
Sph=[]
Sum=0
while True:
flag = True
if Sum>=xmax*ymax*beta:
print('Bones Area is %f mm^2' %Sum)
print('Total Area is %f mm^2' %(xmax*ymax))
print('Bones Area is %f%% of Total Area' %(100*Sum/xmax/ymax))
break
r=random.uniform(0.0025,0.0075)
x=random.uniform(xmin,xmax)
y=random.uniform(ymin,ymax)
if ((x- r>xmin and x+r<xmax) and (y- r>ymin and y+r<ymax)):
if not Sph:
Sph.append([x,y,r])
Sum = Sum + np.pi*(r-0.1)**2
continue
else:
for s in Sph:
D=np.sqrt((s[0]- x)**2+(s[1]- y)**2)
if D<s[2]+r:
flag = False
break
if flag==True:
Sph.append([x,y,r])
Sum = Sum + np.pi*(r-0.1)**2
a=[x[0] for x in Sph]
b=[x[1] for x in Sph]
print(a)
print('========')
print(b)
for index,item in enumerate(Sph):
s1.CircleByCenterPerimeter(center=(item[0], item[1]), point1=(item[0], item[1]+item[2]))
ii = int(2*index+6)
s1.offset(distance=0.1, objectList=(g[ii], ), side=LEFT)
p = mdb.models['Model-1'].parts['Part-1']
f = p.faces
pickedFaces = f.getSequenceFromMask(mask=('[#1 ]', ), )
e1, d2 = p.edges, p.datums
p.PartitionFaceBySketch(faces=pickedFaces, sketch=s1)
s1.unsetPrimaryObject()
del mdb.models['Model-1'].sketches['__profile__']