Ultra Edit中编辑并一键运行Ansys命令流

文章目录

  • 一、一键运行Ansys命令流
    • (一)问题描述
    • (二)实现效果
    • (三)配置方法
      • 1.首先需确保电脑上需安装有python并将其添加至环境变量。
      • 2.创建.py文件
      • 3.在Ultra Edit中进行配置
      • 4.功能测试
      • 5.配置快捷键​
  • 二、代码高亮
  • 三、注释 反注释
  • 附录
  • 结尾

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脚本。

具体配置可参考(相关教程)Ultra Edit中编辑并一键运行Ansys命令流_第1张图片

2.创建.py文件

在C盘ProgramData目录下新建RunMac文件夹并将RunMac1.0.py保存至该目录下。
RunMac1.0.py代码位于本文附录部分。
image-20210616182047914

3.在Ultra Edit中进行配置

在菜单栏-高级-用户工具-配置工具。
Ultra Edit中编辑并一键运行Ansys命令流_第2张图片
在工具配置界面:

输入菜单项名称,该项名称可以自定义。

命令行输入以下文字,

python C:\ProgramData\RunMac\RunMac1.0.py %f

工作目录可任意选择,建议直接选择桌面。
Ultra Edit中编辑并一键运行Ansys命令流_第3张图片
选项窗口,勾选Dos程序,保存活动文件,先保存所有文件。
Ultra Edit中编辑并一键运行Ansys命令流_第4张图片
输出截面,控制命令行所运行的内容的输出方式。

选择捕获输出则会对输出内容进行记录。也可不勾选。该部分设置不会影响运行效果,仅用于设置dos输出效果。
Ultra Edit中编辑并一键运行Ansys命令流_第5张图片

4.功能测试

完成以上设置后,在打开Ansys程序的情况下,即可通过点击 用户工具中的运行mac,或通过快捷键Ctrl+Shift+1,运行当前正在编辑的mac文件。
Ultra Edit中编辑并一键运行Ansys命令流_第6张图片

5.配置快捷键​

此外,可自定义用户工具1的快捷键,如下图,为用户工具1分配快捷键 F5。即可通过按键F5,运行当前mac文件。
Ultra Edit中编辑并一键运行Ansys命令流_第7张图片

二、代码高亮

APDL使用到Ansys中的一种参数化的计算语言。通过代码的高亮可以让命令流具有更高的可读性。

在Ultra Edit中,你可以在编码栏,语言类型查看方式中设置代码高亮的格式,并选择"APDL (ANSYS Parametric Design Language)"。
Ultra Edit中编辑并一键运行Ansys命令流_第8张图片

如果你的Ultra Edit中没有APDL高亮格式,可以通过下部加号“添加其他语言”,找到APDL并确定。
Ultra Edit中编辑并一键运行Ansys命令流_第9张图片

三、注释 反注释

通过编码菜单下的“外部注释”与“删除注释”按钮,可以快速的对多行文本进行注释与反注释。对于不同格式的文本,根据其语法进行不同的注释。
Ultra Edit中编辑并一键运行Ansys命令流_第10张图片Ultra Edit中编辑并一键运行Ansys命令流_第11张图片
但每次点击菜单栏的操作比较繁琐,因此可以定义快捷键:

推荐设置为:
添加注释: Ctrl+1
删除注释: Ctrl+2

修改快捷键的方法,打开设置-键映射-按下新(多个)热键-分配。设置快捷键。可定义任意快捷键。
Ultra Edit中编辑并一键运行Ansys命令流_第12张图片

附录

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,可进一步交流探讨。

你可能感兴趣的:(ansys,python)