Batch Mesh是利用程式,根據設定自動完成mesh的功能(註1)。
乍聽之下是個萬靈丹,全部CAD都拿來batch mesh,是不是就可以不用建網格了。
很抱歉的是,您想要的是一個AI版的batch mesh,目前各家廠商可能都還在開發中?
實務上,batch mesh適合用在簡單幾何或是每次幾何pattern都差不多的零件。
mesh,不易發生失敗,相信不用多做解釋。batch mesh對特徵萃取功能,來找出孔洞、凸包或折邊等特徵。由於特徵萃取是個比較複雜的主題,我們只打算用一天的篇幅來介紹batch mesh,所以只好忍痛割捨了,或許留待明年鐵人賽再跟大家分享?
batch mesh的設定檔為ansa_mpar及ansa_qual兩個檔案。ANSA會讀取這兩個檔案,並盡力做出滿足條件的網格。
ansa_mpar是包含網格所需參數的設定檔,而ansa_mpar是包含網格所需滿足品質的設定,兩者都可以從GUI介面產生。這裡我們分別產生surface.ansa_mpar及surface.ansa_qual兩個檔,並置於當前目錄。
下面的程式則分別將surface.ansa_mpar及surface.ansa_qual指定給surface_mpar_str及surface_qual_str兩個變數。
#batchmesh_surf.py
surface_mpar_str = 'surface.ansa_mpar'
surface_qual_str = 'surface.ansa_qual'
我們先利用base.Open,讀取同一資料夾的CAD檔surface.igs,CAD檔案內是含有一個洞的surface。
在進行batch mesh前,我們可以對CAD先進行幾何的修復。
首先,我們可以考慮使用base.Topo。base.Topo是一個裁縫師,可以將一些微小的誤差區域修補起來,成為較大塊而可以建立網格的區域。
接著,我們使用base.CheckAndFixGeometry來真正修復幾何。base.CheckAndFixGeometry一般需要三個參數,分別是input、options及fix_options。
input是所需修復的Entity或Entities,我們這邊使用base.CollectEntities收集所有face。
options參考手冊共有:
UNMESHED MACROS
UNCHECKED FACES
NEEDLE FACES
COLLAPSED CONS
TRIPLE CONS
OVERLAPS
CRACKS
SINGLE CONS
SHARP EDGES
我們選了六種來使用。
fix_options是代表要不要真的使用相對應位置的options,1代表要,2代表不要。我們因為已經選好了六種,所以全都給1(小孩子才做選擇,我們全都要)。
#batchmesh_surf.py
cad_file = 'surface.igs'
r = base.Open(cad_file)
# topo
base.Topo(cons='all')
# geometry fix
print(f'Running geometry fix...')
options = ["CRACKS",
"OVERLAPS",
"NEEDLE FACES",
"COLLAPSED CONS",
"UNCHECKED FACES",
"UNMESHED MACROS"]
options = [1, 1, 1, 1, 1, 1]
faces = base.CollectEntities(deck, None, 'FACE')
ret = base.CheckAndFixGeometry(faces, options, fix, True, True)
print(f'Geometry fixed')
Scenario是一種container,裡面可以添加多個Session,每個session可以有自己的ansa_mpar及ansa_qual檔。這麼一來我們可以將不同的part甚至不同種類的幾何拆到不同的session,透過ansa_mpar及ansa_qual的設定,達成更細微的控制。
這裡我們
batchmesh.GetNewMeshingScenario建立了一個新scenario,scenario名為01_senario,變數名為scenario1。batchmesh.GetNewSession建立了一個新session,session名為01_surface ,變數名為surface_sess。batchmesh.ReadSessionMeshParams讀取surface_mpar_str為surface_sess的ansa_mpar檔。batchmesh.ReadSessionQualityCriteria讀取surface_qual_str為surface_sess的ansa_qual檔。sessions的list承載surface_sess。batchmesh.AddSessionToMeshingScenario將sessions加入到scenario1中。#batchmesh_surf.py
print(f'Running batch meshing...')
scenario1 = batchmesh.GetNewMeshingScenario('01_senario')
surface_sess = batchmesh.GetNewSession('01_surface')
surface_mpar = batchmesh.ReadSessionMeshParams(
surface_sess, surface_mpar_str)
surface_qual = batchmesh.ReadSessionQualityCriteria(
surface_sess, surface_qual_str)
sessions = [surface_sess]
batchmesh.AddSessionToMeshingScenario(sessions, scenario1)
這裡我們透過老朋友base.GetEntity取得PID為1的Entity,即surface.igs內的surface,接著透過batchmesh.AddPartToSession將surface加進surface_sess。
#batchmesh_surf.py
surface = base.GetEntity(deck, LSDYNAType.PROPERTY, 1)
batchmesh.AddPartToSession(surface, surface_sess)
最後透過batchmesh.RunMeshingScenario來執行scenario1(註2)。
#batchmesh_surf.py
batchmesh.RunMeshingScenario(scenario1)
可以點選下圖,觀看此script執行batch mesh的過程。
註1:Batch Mesh並不是ANSA的獨家武器,許多前處理也擁有類似的功能。
註2: 如果你有多個scenario,不想一個一個執行,可以考慮使用batchmesh.RunAllMeshingScenarios。