日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c2064 项不会计算为接受0个参数的函数_getMask()讨论:Abaqus Part对象的成员变量常用函数...

發布時間:2025/3/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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对象的成员变量常用函数...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。