木木带你一键爆改Abaqus默认配色方案

文摘   2024-10-23 09:00   中国  

题外话:因为微信的推荐机制变动,有可能大家不会第一时间看到我的文章,请大家给我的公众号标上⭐,以免错过好资源。

今日分享的主要内容:如何将Matplotlib的colormap添加至Abaqus的云梯配色方案

随着使用Abaqus的频率越来越高,已经不满足于已有的配色方案,在后处理的过程中更加倾向于Paraview的默认配色,个人觉得比Rainbow更加清爽。可以做一下对比:

Rainbow
coolwarm

(当然不排除某些领导偏爱花里胡哨的配色~)

于是乎有了个想法:是否可以将paraview的colormap或者其他个人觉得舒服的配色方案添加至Abaqus呢?

答案是肯定的,之前分享过如何将Matlab的colormap添加至Abaqus中,以及前段时间刚分享关于有限元后处理过程如何应用Matplotlib的推文,建议读者先阅读一下两篇历史推文:

往期精彩

1. 有限元后处理过程如何应用Matplotlib?
2. Abaqus colormap如何更改为Matlab云图配色方案?

数值实现

具体如何实现呢?直接上干货:

# -* - coding:UTF-8 -*-
import os
from abaqus import *
from abaqusConstants import *

# -----------------------------定义存放颜色表的类(请勿更改)------------------------------
class ColorMap_List:
    def __init__(self, ColorMap_Name, ColorMap_Value):
        self.ColorMap_Name = ColorMap_Name
        self.ColorMap_Value = ColorMap_Value
        self.ColorMap_Validated = True

        # 修改颜色数量的检查逻辑,允许更多的颜色
        if len(self.ColorMap_Value) < 2:
            self.ColorMap_Validated = False
            print "%s has less than 2 colors" % self.ColorMap_Name
            return

        # 遍历检查每个颜色的 RGB 值是否在 [0, 255] 之间
        for Color in self.ColorMap_Value:
            if len(Color) != 3:
                self.ColorMap_Validated = False
                print "%s has invalid color format" % self.ColorMap_Name
                return
            for Value in Color:
                if not (0 <= Value <= 255):
                    self.ColorMap_Validated = False
                    print "%s has values out of range" % self.ColorMap_Name
                    return


# ------------------------定义载入颜色表至Abaqus的函数(请勿更改)--------------------------
def Abaqus_Spectrum_Generator(My_ColorMap):
        
    if My_ColorMap.ColorMap_Validated == False:
        Error_Info = My_ColorMap.ColorMap_Name + " is not a valid color map"
        print Error_Info
        return
    
    # 转换RGB颜色为16进制颜色
    My_ColorMap.ColorMap_Value_Hex = []
    for RGB in My_ColorMap.ColorMap_Value:
        Color_Hex = '#{:02x}{:02x}{:02x}'.format(*RGB)
        My_ColorMap.ColorMap_Value_Hex.append(Color_Hex)
    My_ColorMap.ColorMap_Value_Hex = tuple(My_ColorMap.ColorMap_Value_Hex)

    # 载入颜色表至Abaqus
    session.Spectrum(name=My_ColorMap.ColorMap_Name,
                     colors=My_ColorMap.ColorMap_Value_Hex)
    Remind_Info = My_ColorMap.ColorMap_Name + " has been loaded."
    print Remind_Info


# -------------------------定义从txt文件加载颜色表的函数-------------------------
def load_colormap_from_txt(file_path):
    ColorMap_Value = []
    with open(file_path, 'r'as f:
        for line in f.readlines():
            values = line.strip().split()[:3]  # 只取前三列(RGB)
            try:
                # 检查颜色值是否在 [0, 1] 范围内,然后转换为 [0, 255] 的整数
                rgb = [int(float(v) * 255for v in values]  # 直接乘以255,转换为[0, 255]范围
                ColorMap_Value.append(rgb)
            except ValueError:
                print "Error reading line in file %s: %s" % (file_path, line)
                continue
    return ColorMap_Value


# -------------------------批量导入txt文件的colormap至Abaqus------------------------
def import_colormaps_to_abaqus(folder_path):
    for file_name in os.listdir(folder_path):
        if file_name.endswith('.txt'):
            file_path = os.path.join(folder_path, file_name)
            colormap_name = "Matplotlib_" + os.path.splitext(file_name)[0]  # 在名字前加上Matplotlib_
            colormap_values = load_colormap_from_txt(file_path)
            My_ColorMap = ColorMap_List(colormap_name, colormap_values)
            Abaqus_Spectrum_Generator(My_ColorMap)


# -------------------------设置文件夹路径并调用导入函数----------------------------
folder_path = r"C:\temp\MatplotlibColomap"
import_colormaps_to_abaqus(folder_path)

以上代码中的C:\temp\MatplotlibColomap是我将matpotlib的colormapRGB色值导出至txt文件中,可在公众号后台回复:AbaqusMatplotlib,即可自动获取该文件。

将以上脚本在abaqus中运行即可,然后在Spectrum中选取相应配色即可。

这个方法有个小小的缺陷,就是每次重新打开Abaqus后,需要重新加载该脚本,为了方便起见,可以借助之前分享过的免费插件:PythonTest,每次只需轻轻点击插件按钮,即可自动运行脚本。


觉得本篇推文对你有帮助的话,可以动动的小手一键三连(点赞➕在看➕分享)哦~
粉丝交流群:后台回复stress

参与更多互动交流,快快在下方留言区留下你的小脚印吧~

-End-

♡若喜欢这篇文章,欢迎带它去朋友圈逛♡

易木木响叮当

想陪你一起度过短暂且漫长的科研生活



易木木响叮当
一名求真务实的有限元领域小小UP主,专注于各种单元技术与非线性有限元分析,根据业余时间不定时更新干货内容,号内偶尔会有培训广告的插入,希望大家可以理解,感谢关注!
 最新文章