collections = [ Model.Mesh.Children, # 网格数据 Model.NamedSelections.Children, # 命名选择 ExtAPI.DataModel.GetObjectsByType(DataModelObjectCategory.FixedSupport), # 固定约束 ExtAPI.DataModel.GetObjectsByType(DataModelObjectCategory.TotalDeformation), # 变形结果]for collection in collections: for item in collection: item.Delete() # 批量删除
def mat_definition(mat2geo_dict): # 步骤1:获取已加载材料列表 mat_lib = [mat.Name for mat in Model.Materials.Children] # 步骤2:提取所需材料并去重 mat_needs = list(set(mat2geo_dict.values())) # 步骤3:校验材料是否存在 isExist_mat = True missing_mats = [] for need_mat in mat_needs: if need_mat not in mat_lib: isExist_mat = False missing_mats.append(need_mat) # 步骤4:存在则分配,缺失则报错 if isExist_mat: for geo_name, target_mat in mat2geo_dict.items(): for part in Model.Geometry.Children: for body in part.Children: if geo_name in body.Name: # 模糊匹配几何体名称 body.Material = target_mat return isExist_mat, missing_mats
Q1: 为什么加「材料存在性校验」?
ns = Model.AddNamedSelection()ns.Name = "ns_center" # 轴孔位置命名选择ns.GenerationCriteria[0].EntityType = SelectionType.GeoEdge # 选择几何边ns.GenerationCriteria[0].Criterion = SelectionCriterionType.LocationZ # Z坐标定位ns.GenerationCriteria[0].Operator = SelectionOperatorType.Smallest # 最小Z值处(轴孔边缘)ns.Generate()# 施加固定约束到命名选择fixed_support = a nalysis.AddFixedSupport()fixed_support.Location = ns
# 用迭代法求解(适合模态分析,速度更快)an alysis_setting.SolverType = SolverType.Iterative# 求解并生成所有阶次振型an alysis.Solve()deformation.CreateResultsAtAllSets()an alysis_solution.EvaluateAllResults()
CreateResultsAtAllSets()的作用时自动生成所有阶次的振型云图,避免手动点击 “Evaluate All Results”,节省后处理时间。
# encoding: utf-8def mat_definition(mat2geo_dict): """ 批量材料分配函数 参数:mat2geo_dict - 几何体-材料映射字典(dict类型) 返回:isExist_mat - 材料存在性校验结果(bool类型:True=所有材料存在,False=存在缺失材料);missing_mats - 缺失的材料 """ # 步骤1:获取当前Model中已加载的所有材料名称(从Materials树中读取) mat_lib = [mat.Name for mat in Model.Materials.Children] # 提取材料名称列表 print "当前ANSYS材料库中已加载的材料:%s" % mat_lib # 步骤2:提取映射字典中所需的所有材料(去重) mat_needs = list(set(mat2geo_dict.values())) # set去重后转list print "本次批量分配所需的材料:%s" % mat_needs # 步骤3:校验材料存在性 isExist_mat = True missing_mats = [] for need_mat in mat_needs: if need_mat not in mat_lib: isExist_mat = False missing_mats.append(need_mat) # 步骤4:根据校验结果执行操作 if isExist_mat: print "\n=== 所有材料已存在,开始批量分配 ===" for geo_name, target_mat in mat2geo_dict.items(): # 遍历字典项 for part in Model.Geometry.Children: # 遍历部件 for body in part.Children: # 遍历几何体 if geo_name in body.Name: # 名称匹配 body.Material = target_mat # 核心分配操作 print "分配成功:几何体「%s」→ 材料「%s」" % (body.Name, target_mat) print "=== 批量材料分配完成 ===" else: print "材料缺失,分配终止!缺失的材料:%s" % missing_mats print "解决方案:1. 进入Engineering Data模块;2. 补充材料" return isExist_mat, missing_mats# 初始化collections = [ Model.Mesh.Children, Model.NamedSelections.Children, ExtAPI.DataModel.GetObjectsByType(DataModelObjectCategory.FixedSupport), ExtAPI.DataModel.GetObjectsByType(DataModelObjectCategory.TotalDeformation),]for collection in collections: for item in collection: item.Delete()# 材料定义mat_lib = [mat.Name for mat in Model.Materials.Children]mat2geo_dict = {"Fan": "Polyethylene"}mat_check_result, missing_mats = mat_definition(mat2geo_dict)if not mat_check_result: raise Exception("材料缺失,脚本终止执行,缺失的材料:%s" % missing_mats)# 创建Name Selectionns = Model.AddNamedSelection()ns.Name = "ns_center"ns.ScopingMethod = GeometryDefineByType.Worksheetns.GenerationCriteria.Add(None)ns.GenerationCriteria[0].EntityType = SelectionType.GeoEdgens.GenerationCriteria[0].Criterion = SelectionCriterionType.LocationZns.GenerationCriteria[0].Operator = SelectionOperatorType.Smallestns.Generate()# 求解方法设置为迭代法an alysis = DataModel.A nalysisList[0]an alysis_setting = ana lysis.A nalysisSettingsana lysis_setting.SolverType = SolverType.Iterative# 创建固定约束fixed_support = an alysis.AddFixedSupport()fixed_support.Location = ns# 插入后处理an alysis_solution = a nalysis.Solutiondeformation = an alysis_solution.AddTotalDeformation()# 求解an alysis.Solve()# 后处理求模态振型deformation.CreateResultsAtAllSets()a nalysis_solution.EvaluateAllResults()
以下是课程大纲及主要内容: