找回密码
 注册
Simdroid-非首页
楼主: changjun79611

[二次开发] [原创]选取ABAQUS实体的两个简单Python函数

[复制链接]
发表于 2008-10-17 19:14:22 | 显示全部楼层 来自 辽宁沈阳
这个好,不会,先收藏。
回复 不支持

使用道具 举报

发表于 2008-10-18 17:01:15 | 显示全部楼层 来自 湖北武汉
Simdroid开发平台
abaqus6.5 通不过,错误:
AttributeError: 'Face' object has no attribute 'getCells'
回复 不支持

使用道具 举报

发表于 2008-10-20 19:44:59 | 显示全部楼层 来自 上海

回复

changjun79611大侠,
我用你的searchObjectByRange函数在part模块下对实体进行建立SET。语句如下:
p= mdb.models['Model-1'].parts['zhi']
session.viewports['Viewport: 1'].setValues(displayedObject=p)
myparts =searchObjectByRange(p, 'CELL',(-r2,r2),(-r2,r2),(0,l2+lzt))
p.Set(cells= myparts, name='zhi')
前三句没问题,第四句输入后提示错误:
TypeError: cells; too many arguments; expected 0, got 1
我用的是6.8版本,
各位大侠可否高手我这个菜鸟这错误是什么意思,怎么才能改正后建立SET
谢谢
回复 不支持

使用道具 举报

发表于 2008-10-29 11:48:38 | 显示全部楼层 来自 湖北黄石
昨天正为这个发愁呢。
谢谢changjun79611。
回复 不支持

使用道具 举报

发表于 2009-7-14 14:31:22 | 显示全部楼层 来自 大连理工大学
楼主真是高人!自己倍感差距巨大啊!
回复 不支持

使用道具 举报

发表于 2009-8-13 02:33:16 | 显示全部楼层 来自 英国
本帖最后由 lyk_302 于 2009-8-13 23:46 编辑
谢谢你的意见,我对函数作了修改,现在可以通过坐标选取点(VERTICE)、线(EDGE)、面(FACE)、体(CELL),以及节点(NODE)和单元(ELEMENT)。

[ 本帖最后由 changjun79611 于 2007-6-26 14:18 编辑 ]
changjun79611 发表于 2007-6-26 14:14



这个文件不能下载了,以前下载的朋友能不能提供一份给我
谢谢了。


现在可以下载了,谢谢
回复 不支持

使用道具 举报

发表于 2009-9-14 16:04:56 | 显示全部楼层 来自 云南昆明
高啊!学习!
回复 不支持

使用道具 举报

发表于 2009-9-15 18:12:58 | 显示全部楼层 来自 江苏南京
谢谢分享  下来学习
回复 不支持

使用道具 举报

发表于 2009-9-23 23:00:05 | 显示全部楼层 来自 浙江杭州
不知楼主的函数是否能对odb文件中的节点,通过设定范围进行选取。
回复 不支持

使用道具 举报

发表于 2009-10-2 19:19:29 | 显示全部楼层 来自 山东济南
原来崇拜ronaldo,现在崇拜楼主了!呵呵!
回复 不支持

使用道具 举报

发表于 2009-10-28 15:53:09 | 显示全部楼层 来自 上海
在rar附件中的函数定义中
  1.         else:
  2.             if xyzRange[i][0] == None:
  3.                 xyzRange[i][0] = INFINITE_RANGE[0]
  4.             if xyzRange[i][1] == None:
  5.                 xyzRange[i][1] = INFINITE_RANGE[1]
复制代码
关于这段语句想问个问题:楼主是不是想实现以下坐标范围的取值
(None,10)下限不限定或(10,None)上限不限定
参数输入有个doc string就好理解。
还是顶楼的函数定义比较好理解
回复 不支持

使用道具 举报

发表于 2009-10-28 17:22:19 | 显示全部楼层 来自 湖南长沙
1# changjun79611
楼主强人啊!希望楼主再接再厉,攻克在局部坐标系下直接创建RP的难关.
回复 不支持

使用道具 举报

发表于 2010-1-24 21:44:23 | 显示全部楼层 来自 贵州毕节
本帖最后由 weiriguang 于 2010-1-24 23:21 编辑

个人觉得用.getCentroid( ):来判断面是不是在选择的范围内比 .pointOn要好
简单地做了个面的集合,选择面心坐标z分量为从0到15的面,在上面加对流换热
a = mdb.models['Model-1'].rootAssembly
s1 = a.instances['Part-1-1']
my= []
for fa in s1.faces:
       index=fa.getCentroid()   
       if (index[0][2] > 0 and index[0][2] < 15):
         my.append(s1.faces.findAt(fa.pointOn))
set1=a.Set(faces=my,name='myset')
fe=regionToolset.Region(side1Faces=set1.faces)
mdb.models['Model-1'].FilmCondition(name='Int-1', createStepName='Step-1',
surface=fe, definition=EMBEDDED_COEFF, filmCoeff=0.01,
filmCoeffAmplitude='', sinkTemperature=20.0, sinkAmplitude='')
回复 不支持

使用道具 举报

发表于 2010-2-10 15:16:25 | 显示全部楼层 来自 广东佛山
我把楼主的程序,嵌入到自己编的python里,选取cell,但是,通不过,老是显示 invalid arguments for region,不知道是什么问题啊

流程:
1.画part,再partition
2.material
3.直接赋予section,或者用程序选cell,这一步不成功

预祝大家新年好,虎年大吉!



# -*- coding: mbcs -*-
#
# ABAQUS/CAE Version 6.6-1 replay file
# Internal Version: 2006_03_22-16.31.34 69548
# Run by kongdong on Wed Feb 10 14:32:28 2010
#

# from driverUtils import executeOnCaeGraphicsStartup
# executeOnCaeGraphicsStartup()
#: Executing "onCaeGraphicsStartup()" in the site directory ...
from abaqus import *
from abaqusConstants import *
from caeModules import *
from driverUtils import executeOnCaeStartup
executeOnCaeStartup()
Mdb()


### 生成part,并partition
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=(10.0, 10.0))
p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=THREE_D,
    type=DEFORMABLE_BODY)
p = mdb.models['Model-1'].parts['Part-1']
p.BaseSolidExtrude(sketch=s, depth=10.0)
s.unsetPrimaryObject()
p = mdb.models['Model-1'].parts['Part-1']
del mdb.models['Model-1'].sketches['__profile__']
p = mdb.models['Model-1'].parts['Part-1']
c = p.cells
pickedCells = c.getSequenceFromMask(mask=('[#1 ]', ), )
e, v1, d1 = p.edges, p.vertices, p.datums
p.PartitionCellByPlanePointNormal(normal=e[7], cells=pickedCells,
    point=p.InterestingPoint(edge=e[7], rule=MIDDLE))

p = mdb.models['Model-1'].parts['Part-1']
c = p.cells
pickedCells = c.getSequenceFromMask(mask=('[#3 ]', ), )
e1, v2, d2 = p.edges, p.vertices, p.datums
p.PartitionCellByPlanePointNormal(normal=e1[3], cells=pickedCells,
    point=p.InterestingPoint(edge=e1[3], rule=MIDDLE))

### 材料参数
mdb.models['Model-1'].Material(name='Material-1')
mdb.models['Model-1'].materials['Material-1'].Elastic(table=((100.0, 0.3), ))
mdb.models['Model-1'].HomogeneousSolidSection(name='Section-1',
    material='Material-1', thickness=1.0)
p = mdb.models['Model-1'].parts['Part-1']
c = p.cells

##### 选择cells,并赋予截面性质(1)
##cells = c.getSequenceFromMask(mask=('[#f ]', ), )
##region = regionToolset.Region(cells=cells)
##p = mdb.models['Model-1'].parts['Part-1']
##p.SectionAssignment(region=region, sectionName='Section-1', offset=0.0)

########### 以上没有问题!在使用以下python程序自动选取,就不行了

### 用程序来实现选择cells,并赋予截面性质(2)
p = mdb.models['Model-1'].parts['Part-1']
c = p.cells


xyzRange=[(-1,1000),(-1,1000),(-1,1000)]

myObjects = []

for cell in p.cells:
    ptsList = []
    flag = 1
    ptsList.append(cell.pointOn[0])
    #Get the vertices on the face
    for index in cell.getVertices():
        ptsList.append(p.vertices[index].pointOn[0])
    for ptCoords in ptsList:
        if (ptCoords[0] < xyzRange[0][0] or ptCoords[0] > xyzRange[0][1]):
            flag = 0
            break
        if (ptCoords[1] < xyzRange[1][0] or ptCoords[1] > xyzRange[1][1]):
            flag = 0
            break
        if (ptCoords[2] < xyzRange[2][0] or ptCoords[2] > xyzRange[2][1]):
            flag = 0
            break
    if flag == 1:
        myObjects.append(cell)

p = mdb.models['Model-1'].parts['Part-1']
p.SectionAssignment(region=myObjects, sectionName='Section-1', offset=0.0)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2010-2-10 15:24:43 | 显示全部楼层 来自 广东佛山
33# weiriguang

嗯,按照getcentroid(),好想直观一点。

楼主的程序时用vertices和pointOn,vertices是定点,那pointOn是什么位置呢?对这个还不懂
回复 不支持

使用道具 举报

发表于 2010-3-10 21:39:47 | 显示全部楼层 来自 北京海淀
NameError: global name 'getSurfaces' is not defined
这是怎么回事啊
高手指教
回复 不支持

使用道具 举报

发表于 2010-5-19 00:23:07 | 显示全部楼层 来自 美国
KongDong,

The last line is wrong: p.SectionAssignment(region=myObjects, sectionName='Section-1', offset=0.0)
The comment SectionAssignment need a region set, not a sequence of cells. See what the Documentation says: "A Set object specifying the region to which the section is assigned."

Good luck
回复 不支持

使用道具 举报

发表于 2010-5-21 15:16:20 | 显示全部楼层 来自 江西抚州
lz厉害,学习了

另外,向lz请教个问题,怎么提取纯网格的边缘点呢?
回复 不支持

使用道具 举报

发表于 2010-7-7 14:31:16 | 显示全部楼层 来自 大连理工大学
有人做过验证么  函数是有问题的 因为range范围很有可能会包含相邻的pointON  把本来不想选的面选了进来
回复 不支持

使用道具 举报

发表于 2011-3-30 14:07:46 | 显示全部楼层 来自 江西南昌
感谢楼主的分享 很有用
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-26 10:26 , Processed in 0.046792 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表