HyperView 二次开发 自动化后处理

您所在的位置:网站首页 hypermesh应力云图 HyperView 二次开发 自动化后处理

HyperView 二次开发 自动化后处理

2023-07-20 12:05| 来源: 网络整理| 查看: 265

目 录 一、前言二、帮助文档二、Page 和 Window2.1 新建 Page 对象2.2 修改 Page 对象的名称2.3 设置 Window 对象的类型2.4 设置当前活跃 Window 三、加载数据库四、视图与显示4.1 通过视图名称设置视图4.2 通过欧拉矩阵设置视图 五、结果数据与云图5.1 分析步/荷载步/子工况5.2 分析子步/帧5.3 位移云图5.4 应力云图 六、图例与注释6.1 显示图例6.2 隐藏注释 七、截图八、文本与表格8.1 写入文本8.2 写入表格 九、报告9.1 PPT 十、参考文献

一、前言

  HyperWorks 是由 Altair 公司开发的企业级 CAE 平台,HyperWorks 包括 HyperMesh、OptiStruct、HyperView 等模块。HyperView 模块主要用于分析结果的后处理,它具有强大的三维图形显示和数据分析能力。 Altair 公司为 HyperWorks 提供了二次开发的接口,HyperWorks 的二次开发依托 Tcl 语言实现,通过 Tcl/Tk 编程的方式,能使一些多次重复的操作自动化。

在这里插入图片描述

HyperView的启动与图形用户界面

  Tcl (Tool Command Language)语言是由美国加州大学伯克利分校教授 John Ousterhout 开发的一种解释性语言,它功能强大,简单易学,代码的可重用性好。Tk 是 Tcl 语言的图形界面扩展库,用于图形界面开发,使用者常常通称为 Tcl/Tk。在 HyperView 界面的底部的 Tcl Console(Command Window)可以输入和执行 Tcl/Tk 命令。

在这里插入图片描述

Tcl 控制台

  所有的 Tcl 命令都是以对象为中心的,也就是说,必须有一个可以应用命令的对象,Tcl 基本的语法结构是:

{object_handle_name} {command}{command parameter(s)} 二、帮助文档

  Altair 公司发布 HyperWorks 软件时,会同时发布各种与二次开发相关的 API 函数(Tcl 接口函数),用户通过 Tcl 编程并结合这些函数,便可进行对 HyperMesh、HyperView 等模块的二次开发。各种 API 函数记录在帮助文档 HyperWorks Desktop Reference Guide 内,它位于 HyperWorks 软件安装目录下的 help/hwdesktop/hwd/topics/chapter_heads 子文件夹中,名称为 hyperworks_desktop_reference_guides_r.htm 。

在这里插入图片描述

HyperWorks Desktop Reference Guide

  HyperView 的二次开发主要是通过调用 HyperWorks 提供的各种 API(应用程序编程接口)来实现的。在 Tcl 编程中,HyperView 各级对象的访问以句柄(Handle)的形式进行,所谓句柄就是用来标识对象的标识符。例如,程序一旦检索/获取到 Session 对象的句柄,就可以通过它来访问 HyperWorks 数据库中的所有定义在 Session 对象基础上的其他对象,如 Page 对象、Window 对象等等。

在这里插入图片描述

Session对象的子对象

  HyperWorks 数据库由各种继承关系的对象构成,如 Session、Windows、Project、SelectionSet、Legend 和 Note 等,数据库的根对象是自动创建的 hwi 对象。hwi 提供对 hwISession 对象和一些高级工具的访问。

在这里插入图片描述

Class Hierarchy for HyperView Tcl/Tk Commands 二、Page 和 Window

  The main display area of the user interface is called a page. Each page can contain up to 16 windows. Any window on a page can display an HM model (HyperMesh), MBD model (MotionView), animation (HyperView), 2D plot (HyperGraph), 3D plot (HyperGraph 3D), text (TextView), or media file (MediaView).All pages and windows are created and stored in a hierarchical list in the Session Browser. You can create unlimited pages in a session; however, only one page can be displayed at a time. The current page number and the total number of pages in the session are displayed in the upper-right corner of the application.

在这里插入图片描述

名称为Subcase-1的Page对象及其下属的四个Window对象 2.1 新建 Page 对象 proc createNewPage {{pagename ""} {type "9"}} { # 作者:DalNur;邮箱:[email protected] # 功能:Session下新建Page对象 # 参数:pagename为新建Page对象的名称/Session下的名称 # 参数:type为Page对象内窗口的类型 # 参数:The page layout type: 0 = One window; # 参数:The page layout type: 1 = Two windows (left and right); # 参数:The page layout type: 9 = Four windows # 返回:新建Page对象的ID hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle # 02-Page对象的设置与复制 set numpages [myProject$Handle GetNumberOfPages] ; # 当前Project中所含的Page数目 set pageid [expr $numpages + 1] ; # 新建Page对象的ID/原有最大ID值+1 myProject$Handle AddPage ; # 新建Page对象 myProject$Handle SetActivePage $pageid ; # 新建Page对象设置为当前活跃Page myProject$Handle GetPageHandle myPage$Handle $pageid if { $pagename != "None" } { myPage$Handle SetTitle $pagename ; # 设置Page对象的名称 # myPage$Handle SetTitleDisplayed True ; # 在窗口显示Page对象的名称 } # 03-Page内窗口布局/两窗口/三窗口等 myPage$Handle SetLayout $type puts "" puts "----------------------" puts "***NOTE: PageName === $pagename" puts "***NOTE: PageID === $pageid" puts "***NOTE: LayoutType === $type" puts "----------------------" puts "" hwi CloseStack return $pageid }

  createNewPage 为在当前 Session 下创建新 Page 对象的函数。其中,参数 pagename 为新建 Page 对象的名称;参数 type 为新建 Page 对象的布局类型,可以为 -1 到19 的整数,具体含义如下图所示。

在这里插入图片描述

createNewPage "Hulunbuir" 9 ; # 创建名称为Hulunbuir的Page/Page对象内为4窗口布局

在这里插入图片描述

新建Page对象 PageName = "Hulunbuir" PageLayoutType = "Four Windows" 2.2 修改 Page 对象的名称 proc setPageName {pageid {pagename ""}} { # 作者:DalNur;邮箱:[email protected] # 功能:设置Page对象的名称 # 参数:pageid为已存在Page对象的ID/索引 # 参数:pagename为Page对象的名称 # 返回:无 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle myProject$Handle SetActivePage $pageid myProject$Handle GetPageHandle myPage$Handle [myProject$Handle GetActivePage] # 02-Page对象名称的设置 set oldname [myPage$Handle GetTitle] set newname $pagename if { $pagename != "None" } { myPage$Handle SetTitle $newname ; # 设置Page对象的名称 # myPage$Handle SetTitleDisplayed True ; # 在窗口显示Page对象的名称 } puts "" puts "----------------------" puts "***NOTE: PageID === $pageid" puts "***NOTE: PageOldName === $oldname" puts "***NOTE: PageNewName === $newname" puts "----------------------" puts "" hwi CloseStack }

  setPageName 为设置 Page 对象名称的函数。其中,参数 pageid 为已存在 Page 对象的 ID 或索引;参数 pagename 为设置的 Page 对象的名称。

setPageName 1 "DalaiNur" ; # 将ID为1的Page对象的名称设置为DalaiNur

在这里插入图片描述

设置Page对象的名称 PageID = 1 PageName = "DalaiNur" 2.3 设置 Window 对象的类型 proc setWindowType {{pageid "1"} {windid "1"} {type "Animation"}} { # 作者:DalNur;邮箱:[email protected] # 功能:设置Page对象内Window对象的类型 # 参数:pageid为已存在Page对象的ID/索引 # 参数:windid为Page对象内Window对象的的ID/索引 # 参数:type为Window对象的类型/The client type # 参数:The client type. Choices include: FePre, Model, Animation, # 参数:Plot, Plot3D, TextEditor, and Video. # 返回:无 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle myProject$Handle SetActivePage $pageid myProject$Handle GetPageHandle myPage$Handle [myProject$Handle GetActivePage] myPage$Handle SetActiveWindow $windid myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myClient$Handle # 02-设置Window对象类型 myWindow$Handle SetClientType $type puts "" puts "----------------------" puts "***NOTE: PageID === $pageid" puts "***NOTE: WindowID === $windid" puts "***NOTE: WindowType === $type" puts "----------------------" puts "" hwi CloseStack }

  setWindowType 为设置 Window 对象类型函数。其中,参数 pageid 为已存在 Page 对象的 ID 或索引;参数 windid 为已存在 Window 对象的 ID 或索引;参数 type 为 Window 对象的类型,可以为:FePre、Model、Animation、Plot、Plot3D、TextEditor 和 Video。

在这里插入图片描述

setWindowType 2 1 "FePre" ; # PageID=2/WindowID=1/WindowType=HypeMesh setWindowType 2 2 "Animation" ; # PageID=2/WindowID=2/WindowType=HypeView setWindowType 2 3 "Table" ; # PageID=2/WindowID=3/WindowType=TableView setWindowType 2 4 "TextEditor" ; # PageID=2/WindowID=4/WindowType=TextView

在这里插入图片描述

设置Window对象的类型 PageID = 2 WindowID = 1 WindowType = "HypeMesh" PageID = 2 WindowID = 2 WindowType = "HypeView" PageID = 2 WindowID = 3 WindowType = "TableView" PageID = 2 WindowID = 4 WindowType = "TextView" 2.4 设置当前活跃 Window proc setActiveWindow {{pageid "1"} {windid "1"}} { # 作者:DalNur;邮箱:[email protected] # 功能:设置当前活跃Window对象 # 参数:pageid为Page对象的ID # 参数:windid为Window对象的ID # 返回:无 hwi OpenStack # 01-定义各级对象句柄的名称 set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle myProject$Handle SetActivePage $pageid myProject$Handle GetPageHandle myPage$Handle [myProject$Handle GetActivePage] myPage$Handle SetActiveWindow $windid myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myClient$Handle # 02-刷新窗口显示 myClient$Handle Draw puts "" puts "----------------------" puts "***NOTE: PageID === $pageid" puts "***NOTE: WindowID === $windid" puts "----------------------" puts "" hwi CloseStack }

  setActiveWindow 为设置当前处于活跃状态的 Window 函数。其中,参数 pageid 为已存在 Page 对象的 ID 或索引;参数 windid 为已存在 Window 对象的 ID 或索引。

三、加载数据库

在这里插入图片描述

数据库的加载 proc loadModelAndResultDatabase {mdlpath rstpath} { # 作者:DalNur;邮箱:[email protected] # 功能:加载模型数据库与结果数据库 # 参数:mdlpath为模型数据库文件的绝对路径 # 参数:rstpath为结果数据库文件的绝对路径 # 返回:无 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle set pageid [myProject$Handle GetActivePage] myProject$Handle GetPageHandle myPage$Handle $pageid set windid [myPage$Handle GetActiveWindow] myPage$Handle GetWindowHandle myWindow$Handle $windid myWindow$Handle GetClientHandle myClient$Handle myClient$Handle Clear ; # 清空/类似于新建 # 02-加载模型与结果 set mdlid [myClient$Handle AddModel $mdlpath] ; # mdlid = Model ID myClient$Handle GetModelHandle myModel$Handle $mdlid # 设置加载的模型对象的句柄/myModelName为加载的模型对象的句柄/句柄用来标识对象/句柄不能是常量 set rstid [myModel$Handle SetResult $rstpath] # This command attaches the given result file to the model. myModel$Handle GetResultCtrlHandle myResult$Handle # myResult$Handle = Handle name of result control object # This command retrieves a handle to the result control object. puts "" puts "----------------------" puts "***NOTE: PageID === $pageid" puts "***NOTE: WindowID === $windid" puts "***NOTE: ModelDatabasePath === $mdlpath" puts "***NOTE: ResultDatabasePath === $rstpath" puts "----------------------" puts "" hwi CloseStack }

  loadModelAndResultDatabase 为加载模型数据库与结果数据库函数。其中,参数 mdlpath 为模型数据库文件的绝对路径;参数 rstpath 为结果数据库文件的绝对路径。

set workdir "F:/HyperViewTest-0626" ; # 工作目录/模型文件与结果文件 set mdlname "car.h3d" ; # 模型文件的名称/LoadModel/可与结果文件同名 set rstname "car.h3d" ; # 结果文件的名称/LoadResults set mdlpath [file join $workdir $mdlname] ; # 模型文件的绝对路径 set rstpath [file join $workdir $rstname] ; # 结果文件的绝对路径 setActiveWindow 2 2 ; # 激活窗口/PageID=2/WindowID=2 loadModelAndResultDatabase $mdlpath $rstpath ; # 加载数据库

在这里插入图片描述

加载模型数据库与结果数据库 PageID = 2 WindowID = 2 四、视图与显示 4.1 通过视图名称设置视图 proc setViewByName {{viewname "ISO"}} { # 作者:DalNur;邮箱:[email protected] # 功能:通过系统默认的视图名称设置视图 # 参数:viewname为系统认可的视图名称, # 参数:viewname可以为Front、Back、Left、Right、Top、Bottom、ISO # 返回:无 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle set pageid [myProject$Handle GetActivePage] myProject$Handle GetPageHandle myPage$Handle $pageid set windid [myPage$Handle GetActiveWindow] myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myClient$Handle myWindow$Handle GetViewControlHandle myView$Handle # 02-调整视图 myView$Handle GetActiveView myView$Handle SetOrientation $viewname myView$Handle Fit ; # 显示最佳视图/自适应窗口 myClient$Handle Draw ; # 刷新视图 puts "" puts "----------------------" puts "***NOTE: PageID === $pageid" puts "***NOTE: WindowID === $windid" puts "***NOTE: CurrentViewName === [myView$Handle GetCurrentViewString]" puts "***NOTE: CurrentViewOrientation === [myView$Handle GetOrientation]" puts "----------------------" puts "" hwi CloseStack }

  setViewByName 为通过视图名称设置视图的函数。其中,参数 viewname 为系统认可的视图名称,可以为:Front、Back、Left、Right、Top、Bottom 和 ISO,分别表示正视图、后视图、左视图、右视图、俯视图、仰视图和等轴测视图。

在这里插入图片描述

setActiveWindow 2 2 ; # 激活窗口/PageID=2/WindowID=2 setViewByName "Front" ; # 设置视图/ViewName="Front"

在这里插入图片描述

设置视图 PageID = 2 WindowID = 2 ViewName = "Front" 4.2 通过欧拉矩阵设置视图 proc setViewByMatrix {{matrix 0}} { # 作者:DalNur;邮箱:[email protected] # 功能:通过欧拉矩阵设置视图 # 参数:matrix为定义视图的欧拉矩阵 # 返回:无 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle set pageid [myProject$Handle GetActivePage] myProject$Handle GetPageHandle myPage$Handle $pageid set windid [myPage$Handle GetActiveWindow] myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myClient$Handle myWindow$Handle GetViewControlHandle myView$Handle # 02-调整视图 pass puts "" puts "----------------------" puts "***NOTE: PageID === $pageid" puts "***NOTE: WindowID === $windid" puts "***NOTE: CurrentViewName === [myView$Handle GetCurrentViewString]" puts "***NOTE: CurrentViewOrientation === [myView$Handle GetOrientation]" puts "----------------------" puts "" hwi CloseStack } 五、结果数据与云图

在这里插入图片描述

5.1 分析步/荷载步/子工况 proc getNumberOfLoadCases {} { # 作者:DalNur;邮箱:[email protected] # 功能:获取当前结果数据库中包含的分析步/分析工况/荷载步数目 # 参数:无 # 返回:分析步数目 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle set pageid [myProject$Handle GetActivePage] myProject$Handle GetPageHandle myPage$Handle $pageid set windid [myPage$Handle GetActiveWindow] myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myClient$Handle myClient$Handle GetModelHandle myModel$Handle [myClient$Handle GetActiveModel] myModel$Handle GetResultCtrlHandle myResult$Handle # 02-获得分析步的总数目 set numsteps [myResult$Handle GetNumberOfSubcases "Base"] # Gets the number of subcases in the result file. # subcase = step / Abaqus中的分析步数目 # "Base" (default) or "derived". puts "" puts "----------------------" puts "***NOTE: PageID === $pageid" puts "***NOTE: WindowID === $windid" puts "***NOTE: NumberofLoadCases === $numsteps" puts "----------------------" puts "" hwi CloseStack return $numsteps } proc setCurrentLoadCase {stepid} { # 作者:DalNur;邮箱:[email protected] # 功能:设置当前活跃的分析步/分析工况 # 参数:stepid为分析步的ID # 返回:无 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle set pageid [myProject$Handle GetActivePage] myProject$Handle GetPageHandle myPage$Handle $pageid set windid [myPage$Handle GetActiveWindow] myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myClient$Handle myClient$Handle GetModelHandle myModel$Handle [myClient$Handle GetActiveModel] myModel$Handle GetResultCtrlHandle myResult$Handle # 02-设置当前激活的分析步 myResult$Handle SetCurrentSubcase $stepid # sets the current subcase for result manipulation operations # 第i个分析步/第i个工况/第i个荷载步 myClient$Handle Draw ; # 刷新视图 puts "" puts "----------------------" puts "***NOTE: PageID === $pageid" puts "***NOTE: WindowID === $windid" puts "***NOTE: CurrentLoadCaseID === $stepid" puts "----------------------" puts "" hwi CloseStack } 5.2 分析子步/帧 proc getNumberOfFrames {stepid} { # 作者:DalNur;邮箱:[email protected] # 功能:获取当前结果数据库内某个分析步中所包含的帧数 # 参数:stepid为分析步的ID # 返回:分析步数目 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle set pageid [myProject$Handle GetActivePage] myProject$Handle GetPageHandle myPage$Handle $pageid set windid [myPage$Handle GetActiveWindow] myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myClient$Handle myClient$Handle GetModelHandle myModel$Handle [myClient$Handle GetActiveModel] myModel$Handle GetResultCtrlHandle myResult$Handle # 02-获得分析步内的总帧数 set numframes [myResult$Handle GetNumberOfSimulations $stepid] # Gets the number of simulations for the specified subcase. # simulation = frame / Abaqus分析步中的帧数目 puts "" puts "----------------------" puts "***NOTE: PageID === $pageid" puts "***NOTE: WindowID === $windid" puts "***NOTE: NumberofFrames === $numframes" puts "----------------------" puts "" hwi CloseStack return $numframes } proc setCurrentFrame {frameid} { # 作者:DalNur;邮箱:[email protected] # 功能:设置当前活跃的分析子步/帧 # 参数:frameid为帧的ID # 返回:无 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle set pageid [myProject$Handle GetActivePage] myProject$Handle GetPageHandle myPage$Handle $pageid set windid [myPage$Handle GetActiveWindow] myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myClient$Handle myClient$Handle GetModelHandle myModel$Handle [myClient$Handle GetActiveModel] myModel$Handle GetResultCtrlHandle myResult$Handle # 02-设置当前激活的分析步 set stepid [myResult$Handle GetCurrentSubcase] myResult$Handle SetCurrentSubcase $stepid # sets the current subcase for result manipulation operations # 第i个分析步/第i个工况/第i个荷载步 myResult$Handle SetCurrentSimulation $frameid # Sets the current transient simulation. # 第j帧/第j个荷载子步 myClient$Handle Draw ; # 刷新视图 puts "" puts "----------------------" puts "***NOTE: PageID === $pageid" puts "***NOTE: WindowID === $windid" puts "***NOTE: CurrentLoadCaseID === $stepid" puts "***NOTE: CurrentFrameID === $frameid" puts "----------------------" puts "" hwi CloseStack } 5.3 位移云图 proc plotDisplacementContours {{component "Mag"} {scale 1.0} {filter ""} {rstext ".odb"}} { # 作者:DalNur;邮箱:[email protected] # 功能:绘制位移云图 # 参数:component为位移云图的分量名称,可以为Mag、X、Y和Z # 参数:scale变形云图的变形系数/比例系数 # 参数:filter为过滤值,大于此数值结果不显示在云图上 # 参数:rstext为结果文件的拓展名,可以为.odb、.h3d等 # 返回:无 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle set pageid [myProject$Handle GetActivePage] myProject$Handle GetPageHandle myPage$Handle $pageid set windid [myPage$Handle GetActiveWindow] myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myClient$Handle myClient$Handle GetModelHandle myModel$Handle [myClient$Handle GetActiveModel] myModel$Handle GetResultCtrlHandle myResult$Handle myResult$Handle GetContourCtrlHandle myContour$Handle myWindow$Handle GetViewControlHandle myView$Handle myContour$Handle GetLegendHandle myLegend$Handle myClient$Handle GetNoteHandle myNote$Handle 1 # 02-获取当前分析步内所包含所有变量的类型 set stepid [myResult$Handle GetCurrentSubcase] myResult$Handle GetSubcaseHandle mySubcase$Handle $stepid set frameid [myResult$Handle GetCurrentSimulation] set dtypelist [mySubcase$Handle GetDataTypeList] # 03-设置变量类型/位移/各结果文件表示位移的标签略有不同 set datatype "UT-Spatial displacement" if { $rstext == ".odb" } { set datatype "UT-Spatial displacement" } elseif {$rstext == ".rst"} { set datatype "Displacement" } elseif {$rstext == ".h3d"} { set datatype "Displacement" } else { set datatype "Displacement" } myContour$Handle SetDataType $datatype # {"Displacement" "Stress" "Effective plastic strain"} # $myContourName SetDataType "Displacement" # set datatype [lindex $dtlist 0] myContour$Handle SetDataComponent $component ; # 设置云图的分量 myContour$Handle SetEnableState True # 04-设置变形系数/图例/注释/过滤值/视图 myResult$Handle GetScaleCtrlHandle sch$Handle sch$Handle SetScale [list $scale $scale $scale] ; # 设置三个方向上的变形比例系数 myContour$Handle SetAverageMode "None" ; # 结点数据的平均算法 myContour$Handle SetValueFilterEnableState False if { $filter != "" } { myContour$Handle SetValueFilterEnableState True # Sets the state of the contour value filter. set valimit $filter ; # 结果云图的限值/小于该数值的单元隐藏/ValueLimit myContour$Handle SetValueFilter "= 10.123" # The filter string to be applied. Examples of the valid filter strings are: # “>= 10.123”, “component "vonMises"} {scale 1.0} {average "Simple"} {filter ""} {rstext ".odb"}} { # 作者:DalNur;邮箱:[email protected] # 功能:绘制应力云图 # 参数:component为应力云图的分量名称,可以为vonMises等 # 参数:scale变形云图的变形系数/比例系数 # 参数:average为结点物理量的平均方法,可以为none, simple, maximum, minimum, advanced, difference, # 参数:average为结点物理量的平均方法,还可以为Max of corner, Min of corner, or Extreme of corner. # 参数:filter为过滤值,大于此数值结果不显示在云图上 # 参数:rstext为结果文件的拓展名,可以为.odb、.h3d等 # 返回:无 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle set pageid [myProject$Handle GetActivePage] myProject$Handle GetPageHandle myPage$Handle $pageid set windid [myPage$Handle GetActiveWindow] myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myClient$Handle myClient$Handle GetModelHandle myModel$Handle [myClient$Handle GetActiveModel] myModel$Handle GetResultCtrlHandle myResult$Handle myResult$Handle GetContourCtrlHandle myContour$Handle myWindow$Handle GetViewControlHandle myView$Handle myContour$Handle GetLegendHandle myLegend$Handle myClient$Handle GetNoteHandle myNote$Handle 1 # 02-获取当前分析步内所包含所有变量的类型 set stepid [myResult$Handle GetCurrentSubcase] myResult$Handle GetSubcaseHandle mySubcase$Handle $stepid set frameid [myResult$Handle GetCurrentSimulation] set dtypelist [mySubcase$Handle GetDataTypeList] # 03-设置变量类型/应力/各结果文件表示位移的标签略有不同 set datatype "S-Stress components" if { $rstext == ".odb" } { set datatype "S-Stress components" } elseif {$rstext == ".rst"} { set datatype "S-Stress components" } elseif {$rstext == ".h3d"} { set datatype "Element Stresses (2D & 3D)" } else { set datatype "S-Stress components" } myContour$Handle SetDataType $datatype # {"Displacement" "Stress" "Effective plastic strain"} # $myContourName SetDataType "Displacement" # set datatype [lindex $dtlist 0] myContour$Handle SetDataComponent $component ; # 设置云图的分量 myContour$Handle SetEnableState True # 04-设置变形系数/图例/注释/过滤值/视图 myResult$Handle GetScaleCtrlHandle sch$Handle sch$Handle SetScale [list $scale $scale $scale] ; # 设置三个方向上的变形比例系数 myContour$Handle SetAverageMode $average ; # 结点数据的平均算法 myContour$Handle SetValueFilterEnableState False if { $filter != "" } { myContour$Handle SetValueFilterEnableState True # Sets the state of the contour value filter. set valimit $filter ; # 结果云图的限值/小于该数值的单元隐藏/ValueLimit myContour$Handle SetValueFilter "= 10.123" # The filter string to be applied. Examples of the valid filter strings are: # “>= 10.123”, “ # 作者:DalNur;邮箱:[email protected] # 功能:显示图例 # 参数:无 # 返回:无 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle set pageid [myProject$Handle GetActivePage] myProject$Handle GetPageHandle myPage$Handle $pageid set windid [myPage$Handle GetActiveWindow] myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myClient$Handle myClient$Handle GetModelHandle myModel$Handle [myClient$Handle GetActiveModel] myModel$Handle GetResultCtrlHandle myResult$Handle myResult$Handle GetContourCtrlHandle myContour$Handle myWindow$Handle GetViewControlHandle myView$Handle myContour$Handle GetLegendHandle myLegend$Handle # myClient$Handle GetNoteHandle myNote$Handle 1 # 02-设置图例参数 set stepid [myResult$Handle GetCurrentSubcase] myResult$Handle GetSubcaseHandle mySubcase$Handle $stepid set frameid [myResult$Handle GetCurrentSimulation] myLegend$Handle SetNumericFormat "Scientific" ; # 设置数值格式/Fixed、Scientific或Auto. myLegend$Handle SetNumericPrecision 3 ; # 设置数值有效数字的位数/小数点后3为 myLegend$Handle SetType "Fixed" ; # 设置图例类型/还可为Fixed或Dynamic myLegend$Handle SetMinMaxVisibility False ; # 显示最大最小值/true或false # $myLegendName SetStyle "Linear" ; # 设置图例类型/linear、log、db10、db20 # $myLegendName SetHeader "Displacement-Z" # poILegend_handle GetFooter GetDefaultScript type myClient$Handle SetDisplayOptions "Legend" True ; # 显示图例 myLegend$Handle SetDefaultState True myClient$Handle Draw ; # 刷新视图 puts "" puts "----------------------" puts "***NOTE: StepNumber === $stepid" puts "***NOTE: FrameNumber === $frameid" puts "----------------------" puts "" hwi CloseStack } 6.2 隐藏注释 proc hideNote {} { # 作者:DalNur;邮箱:[email protected] # 功能:隐藏注释 # 参数:无 # 返回:无 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle set pageid [myProject$Handle GetActivePage] myProject$Handle GetPageHandle myPage$Handle $pageid set windid [myPage$Handle GetActiveWindow] myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myClient$Handle myClient$Handle GetModelHandle myModel$Handle [myClient$Handle GetActiveModel] myModel$Handle GetResultCtrlHandle myResult$Handle myResult$Handle GetContourCtrlHandle myContour$Handle myWindow$Handle GetViewControlHandle myView$Handle myClient$Handle GetNoteHandle myNote$Handle 1 # 02-隐藏注释 set stepid [myResult$Handle GetCurrentSubcase] myResult$Handle GetSubcaseHandle mySubcase$Handle $stepid set frameid [myResult$Handle GetCurrentSimulation] myNote$Handle SetVisibility False ; # 注释不可见 myClient$Handle Draw ; # 刷新视图 puts "" puts "----------------------" puts "***NOTE: StepNumber === $stepid" puts "***NOTE: FrameNumber === $frameid" puts "----------------------" puts "" hwi CloseStack } 七、截图 proc captureImage {path width height} { # 作者:DalNur;邮箱:[email protected] # 功能:截图并另存为.jpeg文件/截取当前活跃窗口 # 参数:path为图片的绝对路径; # 参数:width、height分别为图片的宽度和高度 # 返回:无 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle set pageid [myProject$Handle GetActivePage] myProject$Handle GetPageHandle myPage$Handle $pageid set windid [myPage$Handle GetActiveWindow] myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myClient$Handle # 02-设置Page/Window/图片尺寸 set pageid [myProject$Handle GetActivePage] ; # 当前Page对象的ID set windid [myPage$Handle GetActiveWindow] ; # 当前Windows对象的ID mySession$Handle CaptureActiveWindow "jpeg" "$path" mm $width $height puts "" puts "----------------------" puts "***NOTE: PageID === $pageid" puts "***NOTE: PageID === $windid" puts "***NOTE: ImagePath === $path" puts "***NOTE: PictureWidth === $width" puts "***NOTE: PictureHeight === $height" puts "----------------------" puts "" hwi CloseStack } set workdir "F:/HyperViewTest-0626" ; # 工作目录/模型文件与结果文件 set picname "Hulunbuir.jpeg" ; # .jped文件名称 set width 1000 ; # 图片宽度1000 set height 800 ; # 图片高度800 set picpath [file join $workdir $picname] ; # 结果文件的绝对路径 setActiveWindow 2 2 ; # 激活窗口/PageID=2/WindowID=2 captureImage $picpath $width $height

在这里插入图片描述

截图并另存为 八、文本与表格 8.1 写入文本 proc writeText2TextEditor {text} { # 作者:DalNur;邮箱:[email protected] # 功能:向TextEditor窗口内写入文本 # 参数:text为文本的内容 # 返回:无 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle set pageid [myProject$Handle GetActivePage] myProject$Handle GetPageHandle myPage$Handle $pageid set windid [myPage$Handle GetActiveWindow] myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myClient$Handle myWindow$Handle GetClientHandle myText$Handle # 02-写入文本 myText$Handle SetRawText $text myText$Handle SetEvaluated True myText$Handle Draw puts "" puts "----------------------" puts "***NOTE: PageID === $pageid" puts "***NOTE: WindowID === $windid" puts "----------------------" puts "" hwi CloseStack }

  writeText2TextEditor 为文本数据写入函数。其中,参数 text 为文本的内容。

setActiveWindow 2 4 ; # 激活窗口/PageID=2/WindowID=4 set text "Hulunbuir DalaiNur" writeText2TextEditor $text

在这里插入图片描述

写入文本 8.2 写入表格 proc writeData2TableEditor {cellname data {color ""}} { # 作者:DalNur;邮箱:[email protected] # 功能:向TableView窗口内写入数据 # 参数:cellname为单元格的名称 # 参数:data为写入单元格内的数据 # 参数:color为文字的颜色为0至63的整数,4表示蓝色 # 返回:无 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle set pageid [myProject$Handle GetActivePage] myProject$Handle GetPageHandle myPage$Handle $pageid set windid [myPage$Handle GetActiveWindow] myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myTable$Handle # set t [hw::GetT] # set activetableHandle [hwi GetActiveClientHandle ch$t] # 02-向单元格内写入数据/居中对齐/设置颜色 myTable$Handle SetCellData "$cellname" "$data" myTable$Handle SetCellAlignment "$cellname" center if { $color != "" } { myTable$Handle SetCellTextColor "$cellname" $color } myTable$Handle Draw puts "" puts "----------------------" puts "***NOTE: PageID === $pageid" puts "***NOTE: WindowID === $windid" puts "***NOTE: CellName === $cellname" puts "***NOTE: ColorNumber === $color" puts "----------------------" puts "" hwi CloseStack }

  writeData2TableEditor 为表格数据写入函数。其中,参数 cellname 为单元格的名称,例如:A1、B3 等等;参数 data 为写入单元格的数据;参数 color 为写入数据的颜色(The text color. An integer between 0 and 63.)。

setActiveWindow 2 3 ; # 激活窗口/PageID=2/WindowID=3 writeData2TableEditor "A1" "Hulunbuir" "" ; # CellName=A1/CellValue="Hulunbuir"/ColorNumber="" writeData2TableEditor "C3" "DalaiNur" 4 ; # CellName=A1/CellValue="DalaiNur"/ColorNumber=4

在这里插入图片描述

写入数据 九、报告 9.1 PPT proc sendSessionPages2PPT {pptpath} { # 作者:DalNur;邮箱:[email protected] # 功能:将Session下的各Pages显示发送到PPT # 参数:pptpath为PPT的绝对路径 # 返回:无 hwi OpenStack # 01-设置/获取各级对象的句柄(Handle) set Handle [clock clicks] ; # 句柄名称后缀 hwi GetSessionHandle mySession$Handle mySession$Handle GetProjectHandle myProject$Handle set pageid [myProject$Handle GetActivePage] myProject$Handle GetPageHandle myPage$Handle $pageid set windid [myPage$Handle GetActiveWindow] myPage$Handle GetWindowHandle myWindow$Handle [myPage$Handle GetActiveWindow] myWindow$Handle GetClientHandle myClient$Handle # 02-将当前Session下的所有Page云图发送到PPT mySession$Handle GetPublishingHandle myPublish$Handle myPublish$Handle GetPPTPublishHandle myPPTObj$Handle myPPTObj$Handle GetPPTOptionsHandle myPPTOpt$Handle myPPTOpt$Handle SetSyncTableViewColorFormatting False myPPTObj$Handle SetSyncAtPublish False myPPTObj$Handle SetSyncHgNotes False myPPTObj$Handle SetDestination "disk" myPPTObj$Handle SetPathOnDisk $pptpath myPPTObj$Handle Publish puts "" puts "----------------------" puts "***NOTE: PPTPath === $pptpath" puts "----------------------" puts "" hwi CloseStack } set workdir "F:/HyperViewTest-0626" ; # 工作目录/模型文件与结果文件 set pptname "pptMaster.pptx" ; # PPT文件名称 set pptpath [file join $workdir $pptname] ; # 结果文件的绝对路径 sendSessionPages2PPT $pptpath

在这里插入图片描述

创建PPT报告 十、参考文献

[1]. HyperMesh & HyperView 应用技巧与高级实例. 王钰栋 金磊 洪清泉 等编著.

[2]. Hyperworks API二次开发入门指南. 坐倚北风.

[3]. Altair_自动报告网络研讨会课件_2020_06_17.zip. Altair官方技术博客.

本文最早发表于 2022-05-31 21:35:07 若本文对你有所帮助,可微信扫码打赏 你的鼓励将是我创作的最大动力 如有问题/合作/招聘,欢迎邮件交流 [email protected] 祝各位攻城狮们,天天开心,一切顺利!

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3