文章目录
Ultra Edit是一款功能强大的文本编辑器。在使用UE编辑Ansys的Apdl命令流时,通过一定的配置即可让你的使用体验提升数倍。
一、一键运行Ansys命令流
(一)问题描述
通过Ultra Edit可以更方便地对Ansys命令流.mac文件进行编辑。但在编辑完成后,需将.mac拷贝至Ansys工作路径,或在最初就讲需保.mac文件存放在Ansys工作路径。之后需在Ansys对话框输入该文件名,对mac文件进行调用。
整个过程操作繁琐,因此通过结合python与UE运行DOS的方法,实现了在编辑好mac文件之后,一键调用mac文件的方法。并且被运行的.mac文件可在电脑中任意位置。
(二)实现效果
在此演示中,笔者将运行的快捷键设为了F5,按下F5即可保存并运行当前正在编辑的.mac文件。
实现原理:通过UE运行Dos命令。在Dos命令中运行.py脚本,读取正在编辑的.mac文件,并将其输入到已打开的Ansys程序中。
(三)配置方法
1.首先需确保电脑上需安装有python并将其添加至环境变量。
将Python添加至环境变量后,即可在电脑的任意位置通过cmd来执行py脚本。
具体配置可参考(相关教程)
2.创建.py文件
在C盘ProgramData目录下新建RunMac文件夹并将RunMac1.0.py保存至该目录下。
RunMac1.0.py代码位于本文附录部分。
3.在Ultra Edit中进行配置
在菜单栏-高级-用户工具-配置工具。
在工具配置界面:
输入菜单项名称,该项名称可以自定义。
命令行输入以下文字,
python C:\ProgramData\RunMac\RunMac1.0.py %f
工作目录可任意选择,建议直接选择桌面。
选项窗口,勾选Dos程序,保存活动文件,先保存所有文件。
输出截面,控制命令行所运行的内容的输出方式。
选择捕获输出则会对输出内容进行记录。也可不勾选。该部分设置不会影响运行效果,仅用于设置dos输出效果。
4.功能测试
完成以上设置后,在打开Ansys程序的情况下,即可通过点击 用户工具中的运行mac,或通过快捷键Ctrl+Shift+1,运行当前正在编辑的mac文件。
5.配置快捷键
此外,可自定义用户工具1的快捷键,如下图,为用户工具1分配快捷键 F5。即可通过按键F5,运行当前mac文件。
二、代码高亮
APDL使用到Ansys中的一种参数化的计算语言。通过代码的高亮可以让命令流具有更高的可读性。
在Ultra Edit中,你可以在编码栏,语言类型查看方式中设置代码高亮的格式,并选择"APDL (ANSYS Parametric Design Language)"。
如果你的Ultra Edit中没有APDL高亮格式,可以通过下部加号“添加其他语言”,找到APDL并确定。
三、注释 反注释
通过编码菜单下的“外部注释”与“删除注释”按钮,可以快速的对多行文本进行注释与反注释。对于不同格式的文本,根据其语法进行不同的注释。
但每次点击菜单栏的操作比较繁琐,因此可以定义快捷键:
推荐设置为:
添加注释: Ctrl+1
删除注释: Ctrl+2
修改快捷键的方法,打开设置-键映射-按下新(多个)热键-分配。设置快捷键。可定义任意快捷键。
附录
RunMac1.0.py代码如下,将其拷贝,并保存为RunMac1.0.py即可。
该代码主要功能为,根据窗口名称找到正在运行的ANSYS窗口句柄,并将命令流输入。实现对Mac文件的调用。
特别注意!!!!
考虑到ansys版本不同,大家需要将代码中第26行的 indent1 变量 修改成ansys命令流软件的窗口名称。
# -*- coding: utf-8 -*-
import win32gui
import win32con
import time
import os
import pickle
import sys
# 获取输入参数
paras = sys.argv
# 文件目录
path = 'C:\\ProgramData\\RunMac'
# 复制文件到默认位置
file1 = paras[1]
directory, name2 = os.path.split(file1)
name2 = 'temp.mac'
file2 = os.path.join(path,name2)
os.system('copy '+file1+' '+file2)
# 寻找窗口
filename = os.path.join(path,'hwnd.data')
indent1 = 'ANSYS Multi'
# 注意!!!!!需将indent1变量改成ansys命令流软件的 窗口名称,可写前两个单词
indent2 = 'Output Window'
try:
with open(filename,'rb') as f:
hwnd = pickle.load(f)
hwnd1 = hwnd[0]
hwnd2 = hwnd[1]
title = win32gui.GetWindowText(hwnd1)
if indent1 not in title:
raise ValueError('提示:未找到已开启的Ansys程序 或 需添加新的窗口名')
except:
hwnd_title = dict()
def get_all_hwnd(hwnd,mouse):
if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
hwnd_title.update({hwnd:win32gui.GetWindowText(hwnd)})
win32gui.EnumWindows(get_all_hwnd, 0)
for h,t in hwnd_title.items():
if indent1 in t:
hwnd1 = h
break
for h,t in hwnd_title.items():
if indent2 in t:
hwnd2 = h
break
hwnd = [hwnd1,hwnd2]
with open(filename,'wb') as f:
pickle.dump(hwnd,f)
title = win32gui.GetWindowText(hwnd1)
if indent1 not in title:
print('---------------------------------------------------------')
print('提示:未找到已开启的Ansys程序 或 需添加新的窗口名')
print('---------------------------------------------------------')
# 运行文件
location = file2
try:
win32gui.ShowWindow(hwnd1, win32con.SW_MAXIMIZE)
win32gui.ShowWindow(hwnd1,win32con.SW_SHOW)
time.sleep(0.1)
win32gui.ShowWindow(hwnd2, win32con.SW_MINIMIZE)
temp = win32gui.SetForegroundWindow(hwnd1)
except:
pass
finally:
time.sleep(0.1)
WM_CHAR = 0x0102
for char in location:
win32gui.SendMessage(hwnd1, WM_CHAR, ord(char), None)
time.sleep(0.1)
win32gui.SendMessage(hwnd1, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
win32gui.SendMessage(hwnd1, win32con.WM_KEYUP, win32con.VK_RETURN, 0)
结尾
目前可方法可基本实现实际的功能。若在配置过程中遇到问题或发现代码bug,可进一步交流探讨。