首页/文章/ 详情

ANSA中进行二次开发的PYthon基础知识

3年前浏览5376

image.png

大家好,我是团长。
此篇分享些PYthon的基础知识。

ANSA、META的二次开发均基于Python开发。本文基于ANSA的帮助文档《Introduction to Python》进行一定的扩展,希望能帮助大家快速掌握这门语言。


image.png

首先来介绍下这门语言里的主要数据类型,包括:整型、浮点型、复数、布尔类型、字符串、列表、元祖、字典、集合等。

1.1、整型(int)、浮点型(float)
通俗点说就是整数和小数,支持加法( )、减法(-)、乘法(*)、除法(/)、整除(//)、求模(%)等。示例如下:

image.png

1.2、布尔类型
即True、False,主要用于条件判断里,如:

image.png

1.3、字符串
以单引号、双引号、三个引号括起来的语句即为字符串,如:

image.png

一般只用前两种形式,后两种用于添加注释、如函数、类的注释,字符串作为较为重要的数据类型,在后续的二次开发中用到针对字符串的方法较多,下面来看一些例子。

例1、字符串切片、拼接
我们在对零件进行重命名时,原始零件名称可能为“PART10235-FS01”,而我们最终命名的形式为“PART10235_DC01_T100”,此时,我们需要对原始字符串进行切片操作,同时进行拼接,代码如下:

image.png

例2、字符串搜索方法之find
在赋材料属性时,会根据零件命名来进行赋予,可以用find方法进行查找,找到就返回字符串的切片索引,未找到就返回-1。如:

image.png

1.4、列表、元祖
列表和元祖较为类似,列表用方括号[]表示,为可变类型;元组用小括号()表示,为不可变类型,大多数情况下,用列表即可满足使用需求。因此,暂只介绍列表的一些知识。列表的元素可以是数值、字符串、列表(二维列表)、字典等,支持切片、排序等操作,如:

image.png

1.5、字典
字典在后续二次开发中用到的非常多,因此需要重点掌握,例如一个零件的信息如下图:

image.png

该图片为LSDYNA模板下一个零件的信息,包含了Name、PID、MID、T1等信息,下面以上图所示信息为例,介绍字典的用法:

image.png

上述代码的运行效果如下:

image.png

1.6、集合
集合在二次开发中用得较少,不做过多介绍。简单介绍其中一种用途,过滤列表中的重复元素。如:

image.png

通过集合的方法过滤了上述列表中的重复元素1,2,3。
image.png

接下来给大家简单介绍下条件分支、循环、函数、类、模块的导入等部分知识。

2.1、条件判断分支

以下展示如何根据PID名称进行判断然后进行材料属性ID的赋值。

Prop_name = '1234567_DC01_T120'
if Prop_name.find('DC01') > -1:
    mat_id = 10001
elif Prop_name.find('DC03') > -1:
    mat_id = 10002
else:
    mat_id = 10000
print(mat_id)#打印出10001

2.2、循环

循环包含for循环和while循环,其中for循环我们用得较多,因此主要介绍for循环的用法,如:

prop_lst = ['1234567_DC01_T120', '2345678_B280VK_T100', '3456789_B340/590DP_T150']
for prop in prop_lst:
    print(prop) #打印出1234567_DC01_T120,2345678_B280VK_T100,3456789_B340/590DP_T150

2.3、函数

运用函数可以将重复的代码进行封装,减少代码量。函数可以带返回值、也可以不带返回值。如下两种:

def fun1(a, b):
    sum = a   b
    return sum
def fun2(a, b):
    sum = a   b
f1=fun1(3, 4)
print(f1)#print 7
f2=fun2(3, 4)
print(f2)#print None

2.4、类

类为更高级别的抽象。

简单举个例子,所有的Shell单元都应该有同样的属性,如EID、PID、N1、N2、N3、N4等,因此可以把所有的Shell单元归为同一个带有以上6个属性的类,如下代码:

class Shell_Element:

    def __init__(self, EID, PID, N1, N2, N3, N4):
        self.EID = EID
        self.PID = PID
        self.N1 = N1
        self.N2 = N2
        self.N3 = N3
        self.N4 = N4

    def get_EID(self):
        return self.EID

    def get_PID(self):
        return self.PID

    def get_N1(self):
        return self.N1

    def get_N2(self):
        return self.N2

    def get_N3(self):
        return self.N3

    def get_N4(self):
        return self.N4

elem1 = Shell_Element(13721, 1, 12545, 14029, 10822, 10821) #定义如下图所示的的element实例
print(elem1.get_EID()) #打印出13721
elem1.set_EID(123)  #设置EID为123
print(elem1.get_EID()) #打印出123

image.png

上述代码的所有get函数为获得某属性,set函数为修改某属性,后续具体开发实例中再进行讲解。

2.5、模块导入

模块的导入方法很多,可以是如下多种方式:

import ansa #直接导入某模块
from ansa import constants #导入ansa模块中的某子模块、函数、类
import tkinter as tk  #将tkinter模块名以简化名tk的形式导入
from ansa import * #导入ansa模块中的所有子模块、函数、类,为避免名字冲突,一般不建议用此种方式

本期仅讲述在ANSA的二次开发中会用到的Python语言的基础知识,上述基本知识基本可以覆盖在ANSA中的使用了。Python本身很强大的各个包,在ANSA中反而用处有限。本教程并不会让你成为二次开发的大神,但是基于明确目标的二次开发练习会。所以,只要你有想法,就开始,完事儿。

本文完。

ANSA
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2021-04-21
最近编辑:3年前
团长
硕士 | 白车身结构设... 专注ANSA使用技巧-微信公众号『C...
获赞 114粉丝 934文章 135课程 6
点赞
收藏
作者推荐
未登录
2条评论
Jane_L
签名征集中
1年前
请问可以用其他的python解释器调用ansa吗?
回复
2年前
团长,我系您的fans,
那个厚度(T)显示1. 有没有方法可以保留一位小数呢,方便批量附厚度,谢谢您🌹🌹
回复
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈