c2064 项不会计算为接受0个参数的函数_getMask()讨论:Abaqus Part对象的成员变量常用函数...
最近工作之余,想制作一個自動對多cell的Part進行skin并建立相應set的小插件。我的目的是對該Part中各個cell分別進行skin,以便于將來賦予不同的屬性。這樣可以有效的減少輸出結果文件的大小。
本以為這應該是一個極其簡單的小問題,不會浪費我太多的精力。但是當開始寫程序的時候才發現一個巨大的坑點:Part對象的Skin函數不接受列表類型的參數或者數組類型的參數,它只接受ABAQUS特定的幾何數組類型或者序列類型,按理說list類型屬于序列類型,但是該函數并不接受。如果通過getSequenceFromMask生成可用faces,mask究竟如何獲得又是一個問題。
mask為什么難以獲得呢?因為getMask()函數是FaceArray對象的成員函數,而該對象的建立是通過part對象建立的(p.faces),它會生成所有faces的合集(比如[0,1,2,3,4,5,6]),而我要進行skin的cell只包含這些faces中的一部分,并且編號是隨機的不可預測的,但是組成該cell的face編號可以通過c.getFaces()((2,3.4,5))。按照我最初的想法,我有了這些面的ID號,把它們從p.faces中讀取出來重新組合就可以了,但是組合完成的類型是list,Skin函數不接受它作為參數。我嘗試了多種方法均不能將最終的結果轉化成Skin可以使用的格式。并且由于組合后的不是abaqus的幾何數組類型,所以它并沒有getMask()方法,也就無法通過該方法獲得可以使用的mask。
無奈之下只好使用getSequenceFromMask函數,這就要解決一個麻煩的問題:getSequenceFromMask的mask值究竟怎么來?目前看來唯一的辦法就是解密getMask()函數。(未知原因,公司網絡連接不了ABAQUS幫助文件。)
我使用如下命令獲取目標part的faces信息,得知共有47個面:
>>> p = mdb.models['G101ABS'].parts['G101ABS-qiaoguan-banhuang-1']
>>> f = p.faces
>>> len(f)
47
>>>
我想先看一下,如果我想選擇所有面,mask是多少:
>>> f.getMask()
("('[#ffffffff #7fff ]',),",)
>>>
好吧,我看出來了這是一個十六進制的東西,但是完全搞不明白這堆亂碼究竟怎么來的...
我想看看編號是0的面的mask是多少:
>>> f0=f[:1]
>>> f0.getMask()
("('[#1 ]',),",)
>>>
我想看看編號是1的面的mask是多少:
>>> f1=f[1:2]
>>> f1.getMask()
("('[#2 ]',),",)
>>>
不出所料,那么編號2的面mask會是3嗎:
>>> f2=f[2:3]
>>> f2.getMask()
("('[#4 ]',),",)
>>>
好吧竟然是4,那么編號3的面mask會是多少呢?
>>> f3=f[3:4]
>>> f3.getMask()
("('[#8 ]',),",)
>>>
那么編號4的面mask會是多少呢?
>>> f4=f[4:5]
>>> f4.getMask()
("('[#10 ]',),",)
>>>
好吧不出意外是16(說過啦,mask是十六進制的)。這讓我想起了初中數學對我來說噩夢難度的找規律填數字問題。這到底是一個什么規律呢?各位客官也許已經有了發現,不如讓我試試編號是[1,2,3]組合的mask是多少吧:
>>> f123=f[1:4]
>>> f123.getMask()
("('[#e ]',),",)
>>>
結果是e(14),非常漂亮的2+4+8。
到這里大家可以想象一下:有一根導線將這47個face按照順序串在一起,每一個face都是一個小燈泡,你需要哪個,哪個就亮而其余的都是暗的,然后它們組成了美麗的二進制數字:所以1是1,01是2,001是4,0001是8,00001是16,0111是14。規律好像被我們找到了。不過還有一個問題啊,還記得這個嗎?
>>> f.getMask()
("('[#ffffffff #7fff ]',),",)
>>>
這個#ffffffff #7fff 是什么鬼啊?哦哦,應該是ABAQUS希望每32個燈泡一組吧?那就試試吧,看看32號面(第33個面,因為第一面的id是0)的mask是多少吧,應該會是# #1 吧?
>>> f32=f[32:33]
>>> f32.getMask()
("('[#0 #1 ]',),",)
>>>
好的,沒問題!到這里我應該是順利的找出了getMask()的計算方法了,但是我還是不會設置ABAQUS特有的幾何數組唉,那只能自己制作一個getmask函數來代替getMask函數來生成期待已久的mask啦。getmask()函數接受正整數list類型參數生成該list的mask。
通過實踐順利完成了對多cell的part進行逐一skin的功能。
等等,還有一個大問題,這些cell都是有公用面的,那么skin出來的face再賦予屬性,豈不是相當于公用面賦予了多余的屬性?如此看來,還需要對c.getFaces()生成的list進行更進一步的剔除相同項之后再使用自己的getmask函數。這樣就完美了。
OK,通過如上的介紹,相信有心人完全可以自己解決這個小問題。附件就是這個小插件啦。期待各位的使用反饋:
getMask()討論:Abaqus Part對象的成員變量常用函數?www.jishulink.com總結
以上是生活随笔為你收集整理的c2064 项不会计算为接受0个参数的函数_getMask()讨论:Abaqus Part对象的成员变量常用函数...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c malloc 头文件_C 数据类型
- 下一篇: spring el表达式 if else