自动化焊缝定义程序fe-safe

shell

python 复制代码
#-*- coding: utf-8 -*-
import re
import sys
import os
import os.path
import time
# import pingmianF
# from pingmianF import vector
import numpy as np
from tkinter import messagebox
from tkinter import filedialog
from tkinter import simpledialog


def popupmsg(msg):
    messagebox.showerror('Warning', msg)

#生成资源文件目录访问路径
def resource_path(relative_path):

    if getattr(sys, 'frozen', False): #是否Bundle Resource
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

# print(WLname)
# print(WDname)
# ['2_open_2_WELDLINE_370957', '1_open_2_WELDLINE_371520', '3_open_2_WELDLINE_371799', '4_open_2_WELDLINE_371050']
# ['2_open_2_WELDDOMAIN_1449250', '1_open_2_WELDDOMAIN_1448858', '3_open_2_WELDDOMAIN_1449047', '4_open_2_WELDDOMAIN_1449218']


# print(start_node)
# print(start_element)
# ['2_open_2_WELDLINE_370957', '1_open_2_WELDLINE_371520', '3_open_2_WELDLINE_371799', '4_open_2_WELDLINE_371050']
# ['2_open_2_WELDDOMAIN_1449450', '1_open_2_WELDDOMAIN_1448858', '3_open_2_WELDDOMAIN_1449047', '4_open_2_WELDDOMAIN_1449218']

def automation(path_inpname):
    ls_weldline = []
    ls_welddomain = []

    ls1 = []
    ls1_ = []
    ls1_data = []
    ls2 = []
    ls2_ = []
    ls2_data = []


    #访问res文件夹下数据.txt的内容
    filename = resource_path(os.path.join("file",path_inpname))
    with open(filename, 'r', encoding='utf-8') as fa:
        data_b = fa.read().splitlines()
        # print(data_b)
        for i in range(0,len(data_b)):

            data_b[i] = str.upper(data_b[i])
            if "WELDLINE_" in data_b[i]:
                ls1_.append(data_b[i])
                j=i+1
                while "*" not in data_b[j]:
                    ls1_data.append(data_b[j])
                    j=j+1
                ls1_ = ls1_+ ls1_data
                ls1_ = ','.join(ls1_)
                ls1.append(ls1_)
                ls1_ = []
                ls1_data = []

            if "WELDDOMAIN_" in data_b[i]:
                ls2_.append(data_b[i])
                k = i + 1
                while "*" not in data_b[k]:
                    ls2_data.append(data_b[k])
                    k=k+1
                ls2_ = ls2_ + ls2_data
                ls2_ = ','.join(ls2_)
                ls2.append(ls2_)
                ls2_ = []
                ls2_data = []

        print(ls1)
        print(ls2)
        ls = ls1 + ls2
        print(ls)

        # ['*NSET, NSET=Closed_2_weldline_126578_143528\n', '*NSET, NSET=Closed_2_weldline_126051_144027\n', '*NSET, NSET=Open_3_weldline_126776_189374\n']
        # ['*ELSET, ELSET=Closed_2_welddomain_318468\n', '*ELSET, ELSET=Closed_2_welddomain_318666\n', '*ELSET, ELSET=Open_3_welddomain_628339\n']

        for i in range(0, len(ls1)):
            ls_weldline.append(ls1[i].strip('\n').split('=')[-1])
        # print(ls_weldline)
        for j in range(0, len(ls2)):
            # print(ls_welddomain[j])
            ls_welddomain.append(ls2[j].strip('\n').split('=')[-1])


        # print(ls_welddomain)
        # print(len(ls_welddomain))
        # ['Closed_1_2_weldline_126578', 'Closed_2_2_weldline_126051, 'Open_3_3_weldline_126776']
        # ['Closed_1_2_welddomain_318468', 'Closed_2_2_welddomain_318666', 'Open_3_3_welddomain_628339']

#提取出所有weldline和welddomain所在行及命名部分
    data = ls_weldline + ls_welddomain
    WLname = []
    WDname = []
    content = []

    result_dict = {}
    for item in data:
        key = int(item.split('_')[1])  # 获取首个数字作为键
        value = item[0:]  # 获取后续数字作为值

        if key in result_dict:
            result_dict[key].append(value)
        else:
            result_dict[key] = [value]

    print(result_dict)

    # ['1_open_2_WELDLINE_371520', '2_open_2_WELDLINE_370957', '3_open_2_WELDLINE_371799', '4_open_2_WELDLINE_371050', '1_open_2_WELDDOMAIN_1448858', '2_open_2_WELDDOMAIN_1449450', '3_open_2_WELDDOMAIN_1449047', '4_open_2_WELDDOMAIN_1449218']
    # {1: [['open', '2', 'WELDLINE', '371520'], ['open', '2', 'WELDDOMAIN', '1448858']], 2: [['open', '2', 'WELDLINE', '370957'], ['open', '2', 'WELDDOMAIN', '1449450']], 3: [['open', '2', 'WELDLINE', '371799'], ['open', '2', 'WELDDOMAIN', '1449047']], 4: [['open', '2', 'WELDLINE', '371050'], ['open', '2', 'WELDDOMAIN', '1449218']]}
    WLD = []
    for i in range(0, len(result_dict)):
        WLD = list(result_dict.values())
    # print(WLD)
    # print(len(WLD))

    for i in range(len(WLD)):
        WLname.append(WLD[i][0])
        WDname.append(WLD[i][1])
    print(WLname)
    print(WDname)
    content = WLname + WDname

    # ['2_open_2_WELDLINE_370957', '1_open_2_WELDLINE_371520', '3_open_2_WELDLINE_371799', '4_open_2_WELDLINE_371050']
    # ['2_open_2_WELDDOMAIN_1449250', '1_open_2_WELDDOMAIN_1448858', '3_open_2_WELDDOMAIN_1449047', '4_open_2_WELDDOMAIN_1449218']



    new_content = []
    old_content = []
  # print(content)
        # ['NSET COUNT = 37\n*NSET, NSET=2_open_2_WELDLINE_370957\n    274706,    370957,    372104,    372107,    372108,    372115,    372116,    372125,\n    372126,    372133,    372134,    372142,    372143,    372152,    372153,    372162,\n    372163,    372164,    372166,    572824,    572826,    572831,    572834,    572836,\n    572840,    572843,    572846,    572848,    572852,    572854,    572857,    572861,\n    572863,    572866,    572869,    572873,    572876,\n\n',
        # 'NSET COUNT = 20\n*NSET, NSET=1_open_2_WELDLINE_371222\n    299140,    371520,    372110,    372112,    372118,    372121,    372122,    372123,\n    372130,    372131,    372138,    372139,    372146,    372148,    372149,    372157,\n    372159,    373496,    373497,    373498,\n\n',
        # 'NSET COUNT = 18\n*NSET, NSET=3_open_2_WELDLINE_371799\n    298792,    371799,    372168,    372176,    372178,    372184,    372185,    372192,\n    372203,    372205,    372214,    372227,    373506,    373507,    373508,    373509,\n    373510,    373511,\n',
        # 'NSET COUNT = 41\n*NSET, NSET=4_open_2_WELDLINE_371050\n    274430,    371050,    372171,    372179,    372188,    372197,    372207,    372208,\n    372209,    372210,    372216,    372217,    372218,    372229,    373499,    373500,\n    373501,    373502,    373503,    373504,    373505,    572820,    573233,    573324,\n    573326,    573327,    573329,    573341,    573343,    573345,    573347,    573349,\n    573351,    573352,    573354,    573355,    573357,    573358,    573360,    573414,\n    573415,\n',
        # 'ELSET COUNT = 38\n*ELSET,ELSET=1_open_2_WELDDOMAIN_1448858\n   1448891,   1448870,   1448864,   1448874,   1448862,   1448873,   1448866,   1448888,\n   1448863,   1448872,   1448884,   1448889,   1448892,   1448869,   1448859,   1448895,\n   1448868,   1448885,   1448876,   1448875,   1448880,   1448886,   1448883,   1448881,\n   1448858,   1448877,   1448878,   1448860,   1448871,   1448890,   1448867,   1448894,\n   1448879,   1448865,   1448861,   1448882,   1448893,   1448887,\n',
        # 'ELSET COUNT = 72\n*ELSET, ELSET=2_open_2_WELDDOMAIN_1449450\n   1449416,   1449417,   1449418,   1449419,   1449420,   1449421,   1449422,   1449423,\n   1449424,   1449425,   1449426,   1449427,   1449428,   1449429,   1449430,   1449431,\n   1449432,   1449433,   1449434,   1449435,   1449436,   1449437,   1449438,   1449439,\n   1449440,   1449441,   1449442,   1449443,   1449444,   1449445,   1449446,   1449447,\n   1449448,   1449449,   1449450,   1449451,   1656548,   1656549,   1656550,   1656551,\n   1656552,   1656553,   1656554,   1656555,   1656556,   1656557,   1656558,   1656559,\n   1656560,   1656561,   1656562,   1656563,   1656564,   1656565,   1656566,   1656567,\n   1656568,   1656569,   1656570,   1656571,   1656572,   1656573,   1656574,   1656575,\n   1656576,   1656577,   1656578,   1656579,   1656580,   1656581,   1656582,   1656583,\n',
        # 'ELSET COUNT = 34\n*ELSET, ELSET=4_open_2_WELDDOMAIN_1449218\n   1449218,   1449219,   1449220,   1449221,   1449222,   1449223,   1449224,   1449225,\n   1449226,   1449227,   1449228,   1449229,   1449230,   1449231,   1449232,   1449233,\n   1449234,   1449235,   1449236,   1449237,   S1449238,   1449239,   1449240,   1449241,\n   1449242,   1449243,   1449244,   1449245,   1449246,   1449247,   1449248,   1449249,\n   1449250,   1449251,   1449252,   1449253,   1449254,   1449255,   1449256,   1449257,\n   1656698,   1656699,   1656700,   1656701,   1656702,   1656703,   1656704,   1656705,\n   1656706,   1656707,   1656708,   1656709,   1656710,   1656711,   1656712,   1656713,\n   1656714,   1656715,   1656716,   1656717,   1656718,   1656719,   1656720,   1656721,\n   1656722,   1656723,   1656724,   1656725,   1656726,   1656727,   1656728,   1656729,\n   1656730,   1656731,   1656732,   1656733,   1656734,   1656735,   1656736,   1656737,\n\n\n',
        # 'ELSET COUNT = 38\n*ELSET, ELSET=3_open_2_WELDDOMAIN_1449047\n   1449047,   1449048,   1449049,   1449050,   1449051,   1449052,   1449053,   1449054,\n   1449055,   1449056,   1449057,   1449058,   1449059,   1449060,   1449061,   1449062,\n   1449063,   1449064,   1449065,   1449066,   1449067,   1449068,   1449069,   1449070,\n   1449071,   1449072,   1449073,   1449074,   1449075,   1449076,   1449077,   1449078,\n   1449079,   1449080,\n', 'ELSET COUNT = 80\n\n']

    for i in range(0, len(content)):
        list_1 = content[i].strip().split(',')
        # print("list" + str(list))
        target_number = list_1[0].split('_')[-1]
        old_content.append(list_1[0])
        data = list_1[1:]
        # print(data)
        # 将数据合并为一个字符串
        data_str = ''.join(data)
        # print(data_str)

        # data['    274706,    370957,    372104,    372107,    372108,    372115,    372116,    372125,', '    372126,    372133,    372134,    372142,    372143,    372152,    372153,    372162,', '    372163,    372164,    372166,    572824,    572826,    572831,    572834,    572836,', '    572840,    572843,    572846,    572848,    572852,    572854,    572857,    572861,', '    572863,    572866,    572869,    572873,    572876,', '', '']
        # data_str     274706,    370957,    372104,    372107,    372108,    372115,    372116,    372125,    372126,    372133,    372134,    372142,    372143,    372152,    372153,    372162,    372163,    372164,    372166,    572824,    572826,    572831,    572834,    572836,    572840,    572843,    572846,    572848,    572852,    572854,    572857,    572861,    572863,    572866,    572869,    572873,    572876,
        # 370957 存在于列表中。
        # ['    299140,    371520,    372110,    372112,    372118,    372121,    372122,    372123,', '    372130,    372131,    372138,    372139,    372146,    372148,    372149,    372157,', '    372159,    373496,    373497,    373498,', '', '']
        #     299140,    371520,    372110,    372112,    372118,    372121,    372122,    372123,    372130,    372131,    372138,    372139,    372146,    372148,    372149,    372157,    372159,    373496,    373497,    373498,
        # 371222 不存在于列表中,请输入正确标号。
        # ['    298792,    371799,    372168,    372176,    372178,    372184,    372185,    372192,', '    372203,    372205,    372214,    372227,    373506,    373507,    373508,    373509,', '    373510,    373511,', '']
        #     298792,    371799,    372168,    372176,    372178,    372184,    372185,    372192,    372203,    372205,    372214,    372227,    373506,    373507,    373508,    373509,    373510,    373511,
        # 371799 存在于列表中。
        # ['    274430,    371050,    372171,    372179,    372188,    372197,    372207,    372208,', '    372209,    372210,    372216,    372217,    372218,    372229,    373499,    373500,', '    373501,    373502,    373503,    373504,    373505,    572820,    573233,    573324,', '    573326,    573327,    573329,    573341,    573343,    573345,    573347,    573349,', '    573351,    573352,    573354,    573355,    573357,    573358,    573360,    573414,', '    573415,', '']
        #     274430,    371050,    372171,    372179,    372188,    372197,    372207,    372208,    372209,    372210,    372216,    372217,    372218,    372229,    373499,    373500,    373501,    373502,    373503,    373504,    373505,    572820,    573233,    573324,    573326,    573327,    573329,    573341,    573343,    573345,    573347,    573349,    573351,    573352,    573354,    573355,    573357,    573358,    573360,    573414,    573415,
        # 371050 存在于列表中。
        # ['   1448891,   1448870,   1448864,   1448874,   1448862,   1448873,   1448866,   1448888,', '   1448863,   1448872,   1448884,   1448889,   1448892,   1448869,   1448859,   1448895,', '   1448868,   1448885,   1448876,   1448875,   1448880,   1448886,   1448883,   1448881,', '   1448858,   1448877,   1448878,   1448860,   1448871,   1448890,   1448867,   1448894,', '   1448879,   1448865,   1448861,   1448882,   1448893,   1448887,', '']
        #    1448891,   1448870,   1448864,   1448874,   1448862,   1448873,   1448866,   1448888,   1448863,   1448872,   1448884,   1448889,   1448892,   1448869,   1448859,   1448895,   1448868,   1448885,   1448876,   1448875,   1448880,   1448886,   1448883,   1448881,   1448858,   1448877,   1448878,   1448860,   1448871,   1448890,   1448867,   1448894,   1448879,   1448865,   1448861,   1448882,   1448893,   1448887,
        # 1448858 存在于列表中。
        # ['   1449416,   1449417,   1449418,   1449419,   1449420,   1449421,   1449422,   1449423,', '   1449424,   1449425,   1449426,   1449427,   1449428,   1449429,   1449430,   1449431,', '   1449432,   1449433,   1449434,   1449435,   1449436,   1449437,   1449438,   1449439,', '   1449440,   1449441,   1449442,   1449443,   1449444,   1449445,   1449446,   1449447,', '   1449448,   1449449,   1449450,   1449451,   1656548,   1656549,   1656550,   1656551,', '   1656552,   1656553,   1656554,   1656555,   1656556,   1656557,   1656558,   1656559,', '   1656560,   1656561,   1656562,   1656563,   1656564,   1656565,   1656566,   1656567,', '   1656568,   1656569,   1656570,   1656571,   1656572,   1656573,   1656574,   1656575,', '   1656576,   1656577,   1656578,   1656579,   1656580,   1656581,   1656582,   1656583,', '']
        #    1449416,   1449417,   1449418,   1449419,   1449420,   1449421,   1449422,   1449423,   1449424,   1449425,   1449426,   1449427,   1449428,   1449429,   1449430,   1449431,   1449432,   1449433,   1449434,   1449435,   1449436,   1449437,   1449438,   1449439,   1449440,   1449441,   1449442,   1449443,   1449444,   1449445,   1449446,   1449447,   1449448,   1449449,   1449450,   1449451,   1656548,   1656549,   1656550,   1656551,   1656552,   1656553,   1656554,   1656555,   1656556,   1656557,   1656558,   1656559,   1656560,   1656561,   1656562,   1656563,   1656564,   1656565,   1656566,   1656567,   1656568,   1656569,   1656570,   1656571,   1656572,   1656573,   1656574,   1656575,   1656576,   1656577,   1656578,   1656579,   1656580,   1656581,   1656582,   1656583,
        # 1449450 存在于列表中。
        # ['   1449218,   1449219,   1449220,   1449221,   1449222,   1449223,   1449224,   1449225,', '   1449226,   1449227,   1449228,   1449229,   1449230,   1449231,   1449232,   1449233,', '   1449234,   1449235,   1449236,   1449237,   S1449238,   1449239,   1449240,   1449241,', '   1449242,   1449243,   1449244,   1449245,   1449246,   1449247,   1449248,   1449249,', '   1449250,   1449251,   1449252,   1449253,   1449254,   1449255,   1449256,   1449257,', '   1656698,   1656699,   1656700,   1656701,   1656702,   1656703,   1656704,   1656705,', '   1656706,   1656707,   1656708,   1656709,   1656710,   1656711,   1656712,   1656713,', '   1656714,   1656715,   1656716,   1656717,   1656718,   1656719,   1656720,   1656721,', '   1656722,   1656723,   1656724,   1656725,   1656726,   1656727,   1656728,   1656729,', '   1656730,   1656731,   1656732,   1656733,   1656734,   1656735,   1656736,   1656737,', '', '', '']
        #    1449218,   1449219,   1449220,   1449221,   1449222,   1449223,   1449224,   1449225,   1449226,   1449227,   1449228,   1449229,   1449230,   1449231,   1449232,   1449233,   1449234,   1449235,   1449236,   1449237,   S1449238,   1449239,   1449240,   1449241,   1449242,   1449243,   1449244,   1449245,   1449246,   1449247,   1449248,   1449249,   1449250,   1449251,   1449252,   1449253,   1449254,   1449255,   1449256,   1449257,   1656698,   1656699,   1656700,   1656701,   1656702,   1656703,   1656704,   1656705,   1656706,   1656707,   1656708,   1656709,   1656710,   1656711,   1656712,   1656713,   1656714,   1656715,   1656716,   1656717,   1656718,   1656719,   1656720,   1656721,   1656722,   1656723,   1656724,   1656725,   1656726,   1656727,   1656728,   1656729,   1656730,   1656731,   1656732,   1656733,   1656734,   1656735,   1656736,   1656737,
        # 1449218 存在于列表中。
        # ['   1449047,   1449048,   1449049,   1449050,   1449051,   1449052,   1449053,   1449054,', '   1449055,   1449056,   1449057,   1449058,   1449059,   1449060,   1449061,   1449062,', '   1449063,   1449064,   1449065,   1449066,   1449067,   1449068,   1449069,   1449070,', '   1449071,   1449072,   1449073,   1449074,   1449075,   1449076,   1449077,   1449078,', '   1449079,   1449080,', '']
        #    1449047,   1449048,   1449049,   1449050,   1449051,   1449052,   1449053,   1449054,   1449055,   1449056,   1449057,   1449058,   1449059,   1449060,   1449061,   1449062,   1449063,   1449064,   1449065,   1449066,   1449067,   1449068,   1449069,   1449070,   1449071,   1449072,   1449073,   1449074,   1449075,   1449076,   1449077,   1449078,   1449079,   1449080,
        # 1449047 存在于列表中。

        if target_number in data_str:
            # print(f"{target_number} 存在于列表中。")
            new_content.append(list_1[0])

        else:
            # print(f"{target_number} 不存在于列表中,请输入正确标号。")
            new = simpledialog.askinteger(title="",
                                          prompt=list_1[0]+"的"+target_number+"输入有误,请重新输入起始单元或起始节点号:")
            # print(new)
            #     content = str(content).replace(str(target_number),str(new))
            # print(content)
            new_list = list_1[0].replace(str(target_number), str(new))
            # print()
            new_content.append(new_list)


    print(new_content)
    print(old_content)

    filename1 = resource_path(os.path.join("file","weld-current_modify.wdf"))
    os.remove(filename1)

    filename2 = resource_path(os.path.join("file","weld_current_shell.txt"))

    f1 = open(filename1,'a',encoding='utf-8')


    f1.write('<weld_definition>\n')

    with open(filename2,'r',encoding='utf-8') as f2:

        # content = f1.read()
        # f1.seek(0,0)
        # f1.write('<weld_definition>\n'+content)
        for i in range(0,len(ls1)):
            lines = f2.read()
            f2.seek(0)

            lines = lines.replace('%New_Line',old_content[i].upper())
            plate_thick = str.upper(old_content[i].strip('\n').split('_')[2])
            if 'P' in plate_thick:
                lines = lines.replace('%plate_thickness', plate_thick.replace('P','.'))
            else:
                lines = lines.replace('%plate_thickness', plate_thick)
            # "PART-1-1_"+
            lines = lines.replace('%welddomain',"PART-1-1_"+old_content[i+len(ls1)].upper())
            lines = lines.replace('%start_element', new_content[i+len(ls1)].strip('\n').split('_')[-1])

            # lines = lines.replace('%reference_normal',str(pingmianF.vector(node_list[j],node_list[j+1],node_list[j+2])))
            # print(vector(node_list[j], node_list[j + 1], node_list[j + 2]))

            # if '%weldline' in line:

                # f1.write(line.replace('%weldline', 'weldline1234_4567'))
            # "PART-1-1_"+
            lines = lines.replace('%weldline',"PART-1-1_"+old_content[i].upper()+"_nodal")
            lines = lines.replace('%start_node', new_content[i].strip('\n').split('_')[-1])

            lines = lines.replace('%weld_type', old_content[i].strip('\n').split('_')[0].capitalize())

            f1.write(lines)


            # j = j+3

        f1.write('</weld_definition>')
    f1.close()
    f2.close()
    fa.close()

if __name__ == '__main__':
    path_inpname = filedialog.askopenfilenames(title="Select Text File",
                                       filetypes=[("INP File", "*.inp"), ("All Files", "*.*")])
    # print(path_inpname)
    automation(path_inpname[0])

    print('工具运行成功!')
    # except:
    #     popupmsg('工具运行不成功!')
# f2.close()

solid

python 复制代码
#-*- coding: utf-8 -*-
import re
import sys
import os
import os.path
import time
import pingmianF
from pingmianF import vector
import numpy as np
from tkinter import messagebox
from tkinter import filedialog
from tkinter import simpledialog


def popupmsg(msg):
    messagebox.showerror('Warning', msg)

#生成资源文件目录访问路径
def resource_path(relative_path):

    if getattr(sys, 'frozen', False): #是否Bundle Resource
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

# print(WLname)
# print(WDname)
# ['2_open_2_WELDLINE_370957', '1_open_2_WELDLINE_371520', '3_open_2_WELDLINE_371799', '4_open_2_WELDLINE_371050']
# ['2_open_2_WELDDOMAIN_1449250', '1_open_2_WELDDOMAIN_1448858', '3_open_2_WELDDOMAIN_1449047', '4_open_2_WELDDOMAIN_1449218']


# print(start_node)
# print(start_element)
# ['2_open_2_WELDLINE_370957', '1_open_2_WELDLINE_371520', '3_open_2_WELDLINE_371799', '4_open_2_WELDLINE_371050']
# ['2_open_2_WELDDOMAIN_1449450', '1_open_2_WELDDOMAIN_1448858', '3_open_2_WELDDOMAIN_1449047', '4_open_2_WELDDOMAIN_1449218']
def automation(path_inpname):
    ls_weldline = []
    ls_welddomain = []
    ls_face = []

    ls1 = []
    ls1_ = []
    ls1_data = []
    ls2 = []
    ls2_ = []
    ls2_data = []
    ls3 = []
    ls3_ = []
    ls3_data = []


    #访问res文件夹下数据.txt的内容
    filename = resource_path(os.path.join("file",path_inpname))
    with open(filename, 'r', encoding='utf-8') as fa:
        data_b = fa.read().splitlines()
        # print(data_b)
        for i in range(0,len(data_b)):

            data_b[i] = str.upper(data_b[i])
            if "WELDLINE_" in data_b[i]:
                ls1_.append(data_b[i])
                j=i+1
                while "*" not in data_b[j]:
                    ls1_data.append(data_b[j])
                    j=j+1
                ls1_ = ls1_+ ls1_data
                ls1_ = ','.join(ls1_)
                ls1.append(ls1_)
                ls1_ = []
                ls1_data = []

            if "WELDDOMAIN_" in data_b[i]:
                ls2_.append(data_b[i])
                k = i + 1
                while "*" not in data_b[k]:
                    ls2_data.append(data_b[k])
                    k=k+1
                ls2_ = ls2_ + ls2_data
                ls2_ = ','.join(ls2_)
                ls2.append(ls2_)
                ls2_ = []
                ls2_data = []


            if "FACE_" in data_b[i]:
                ls3_.append(data_b[i])
                m = i + 1
                while "*" not in data_b[m]:
                    ls3_data.append(data_b[m])
                    m=m+1
                ls3_ = ls3_ + ls3_data
                ls3_ = ','.join(ls3_)
                ls3.append(ls3_)
                ls3_ = []
                ls3_data = []
        #
        # print(ls1)
        # print(ls2)
        # print(ls3)
        ls = ls1 + ls2 +ls3
        # print(ls)

        # ['*NSET, NSET=Closed_2_weldline_126578_143528\n', '*NSET, NSET=Closed_2_weldline_126051_144027\n', '*NSET, NSET=Open_3_weldline_126776_189374\n']
        # ['*ELSET, ELSET=Closed_2_welddomain_318468\n', '*ELSET, ELSET=Closed_2_welddomain_318666\n', '*ELSET, ELSET=Open_3_welddomain_628339\n']

        for i in range(0, len(ls1)):
            ls_weldline.append(ls1[i].strip('\n').split('=')[-1])
        # print(ls_weldline)
        for j in range(0, len(ls2)):
            # print(ls_welddomain[j])
            ls_welddomain.append(ls2[j].strip('\n').split('=')[-1])
        for k in range(0, len(ls3)):
            # print(ls_welddomain[j])
            ls_face.append(ls3[k].strip('\n').split('=')[-1])


        # print(ls_welddomain)
        # print(len(ls_welddomain))
        # ['Closed_1_2_weldline_126578', 'Closed_2_2_weldline_126051, 'Open_3_3_weldline_126776']
        # ['Closed_1_2_welddomain_318468', 'Closed_2_2_welddomain_318666', 'Open_3_3_welddomain_628339']

#提取出所有weldline和welddomain所在行及命名部分
    data = ls_weldline + ls_welddomain + ls_face
    # print(data)
    WLname = []
    WDname = []
    WFname = []
    content = []

    result_dict = {}
    for item in data:
        key = int(item.split('_')[1])  # 获取首个数字作为键
        value = item[0:]  # 获取后续数字作为值

        if key in result_dict:
            result_dict[key].append(value)
        else:
            result_dict[key] = [value]

    # print(result_dict)

    # ['1_open_2_WELDLINE_371520', '2_open_2_WELDLINE_370957', '3_open_2_WELDLINE_371799', '4_open_2_WELDLINE_371050', '1_open_2_WELDDOMAIN_1448858', '2_open_2_WELDDOMAIN_1449450', '3_open_2_WELDDOMAIN_1449047', '4_open_2_WELDDOMAIN_1449218']
    # {1: [['open', '2', 'WELDLINE', '371520'], ['open', '2', 'WELDDOMAIN', '1448858']], 2: [['open', '2', 'WELDLINE', '370957'], ['open', '2', 'WELDDOMAIN', '1449450']], 3: [['open', '2', 'WELDLINE', '371799'], ['open', '2', 'WELDDOMAIN', '1449047']], 4: [['open', '2', 'WELDLINE', '371050'], ['open', '2', 'WELDDOMAIN', '1449218']]}
    WLD = []
    for i in range(0, len(result_dict)):
        WLD = list(result_dict.values())
    # print(WLD)
    # print(len(WLD))

    for i in range(len(WLD)):
        WLname.append(WLD[i][0])
        WDname.append(WLD[i][1])
        WFname.append(WLD[i][2])
    # print(WLname)
    # print(WDname)
    # print(WFname)
    content = WLname + WDname
    node_set = []
    for i in range(0,len(WFname)):
        WFname[i] = WFname[i].strip().split(",")
        node_set.append(WFname[i][1:4])

    # print(node_set)
    #node_set为法平面的三个点
    new_content = []
    old_content = []

    for i in range(0, len(content)):
        list_1 = content[i].strip().split(',')
        # print("list" + str(list))
        target_number = list_1[0].split('_')[-1]
        old_content.append(list_1[0])
        data = list_1[1:]
        # print(data)
        # 将数据合并为一个字符串
        data_str = ''.join(data)
        # print(data_str)

        # data['    274706,    370957,    372104,    372107,    372108,    372115,    372116,    372125,', '    372126,    372133,    372134,    372142,    372143,    372152,    372153,    372162,', '    372163,    372164,    372166,    572824,    572826,    572831,    572834,    572836,', '    572840,    572843,    572846,    572848,    572852,    572854,    572857,    572861,', '    572863,    572866,    572869,    572873,    572876,', '', '']
        # data_str     274706,    370957,    372104,    372107,    372108,    372115,    372116,    372125,    372126,    372133,    372134,    372142,    372143,    372152,    372153,    372162,    372163,    372164,    372166,    572824,    572826,    572831,    572834,    572836,    572840,    572843,    572846,    572848,    572852,    572854,    572857,    572861,    572863,    572866,    572869,    572873,    572876,
        # 370957 存在于列表中。
        # ['    299140,    371520,    372110,    372112,    372118,    372121,    372122,    372123,', '    372130,    372131,    372138,    372139,    372146,    372148,    372149,    372157,', '    372159,    373496,    373497,    373498,', '', '']
        #     299140,    371520,    372110,    372112,    372118,    372121,    372122,    372123,    372130,    372131,    372138,    372139,    372146,    372148,    372149,    372157,    372159,    373496,    373497,    373498,
        # 371222 不存在于列表中,请输入正确标号。
        # ['    298792,    371799,    372168,    372176,    372178,    372184,    372185,    372192,', '    372203,    372205,    372214,    372227,    373506,    373507,    373508,    373509,', '    373510,    373511,', '']
        #     298792,    371799,    372168,    372176,    372178,    372184,    372185,    372192,    372203,    372205,    372214,    372227,    373506,    373507,    373508,    373509,    373510,    373511,
        # 371799 存在于列表中。
        # ['    274430,    371050,    372171,    372179,    372188,    372197,    372207,    372208,', '    372209,    372210,    372216,    372217,    372218,    372229,    373499,    373500,', '    373501,    373502,    373503,    373504,    373505,    572820,    573233,    573324,', '    573326,    573327,    573329,    573341,    573343,    573345,    573347,    573349,', '    573351,    573352,    573354,    573355,    573357,    573358,    573360,    573414,', '    573415,', '']
        #     274430,    371050,    372171,    372179,    372188,    372197,    372207,    372208,    372209,    372210,    372216,    372217,    372218,    372229,    373499,    373500,    373501,    373502,    373503,    373504,    373505,    572820,    573233,    573324,    573326,    573327,    573329,    573341,    573343,    573345,    573347,    573349,    573351,    573352,    573354,    573355,    573357,    573358,    573360,    573414,    573415,
        # 371050 存在于列表中。
        # ['   1448891,   1448870,   1448864,   1448874,   1448862,   1448873,   1448866,   1448888,', '   1448863,   1448872,   1448884,   1448889,   1448892,   1448869,   1448859,   1448895,', '   1448868,   1448885,   1448876,   1448875,   1448880,   1448886,   1448883,   1448881,', '   1448858,   1448877,   1448878,   1448860,   1448871,   1448890,   1448867,   1448894,', '   1448879,   1448865,   1448861,   1448882,   1448893,   1448887,', '']
        #    1448891,   1448870,   1448864,   1448874,   1448862,   1448873,   1448866,   1448888,   1448863,   1448872,   1448884,   1448889,   1448892,   1448869,   1448859,   1448895,   1448868,   1448885,   1448876,   1448875,   1448880,   1448886,   1448883,   1448881,   1448858,   1448877,   1448878,   1448860,   1448871,   1448890,   1448867,   1448894,   1448879,   1448865,   1448861,   1448882,   1448893,   1448887,
        # 1448858 存在于列表中。
        # ['   1449416,   1449417,   1449418,   1449419,   1449420,   1449421,   1449422,   1449423,', '   1449424,   1449425,   1449426,   1449427,   1449428,   1449429,   1449430,   1449431,', '   1449432,   1449433,   1449434,   1449435,   1449436,   1449437,   1449438,   1449439,', '   1449440,   1449441,   1449442,   1449443,   1449444,   1449445,   1449446,   1449447,', '   1449448,   1449449,   1449450,   1449451,   1656548,   1656549,   1656550,   1656551,', '   1656552,   1656553,   1656554,   1656555,   1656556,   1656557,   1656558,   1656559,', '   1656560,   1656561,   1656562,   1656563,   1656564,   1656565,   1656566,   1656567,', '   1656568,   1656569,   1656570,   1656571,   1656572,   1656573,   1656574,   1656575,', '   1656576,   1656577,   1656578,   1656579,   1656580,   1656581,   1656582,   1656583,', '']
        #    1449416,   1449417,   1449418,   1449419,   1449420,   1449421,   1449422,   1449423,   1449424,   1449425,   1449426,   1449427,   1449428,   1449429,   1449430,   1449431,   1449432,   1449433,   1449434,   1449435,   1449436,   1449437,   1449438,   1449439,   1449440,   1449441,   1449442,   1449443,   1449444,   1449445,   1449446,   1449447,   1449448,   1449449,   1449450,   1449451,   1656548,   1656549,   1656550,   1656551,   1656552,   1656553,   1656554,   1656555,   1656556,   1656557,   1656558,   1656559,   1656560,   1656561,   1656562,   1656563,   1656564,   1656565,   1656566,   1656567,   1656568,   1656569,   1656570,   1656571,   1656572,   1656573,   1656574,   1656575,   1656576,   1656577,   1656578,   1656579,   1656580,   1656581,   1656582,   1656583,
        # 1449450 存在于列表中。
        # ['   1449218,   1449219,   1449220,   1449221,   1449222,   1449223,   1449224,   1449225,', '   1449226,   1449227,   1449228,   1449229,   1449230,   1449231,   1449232,   1449233,', '   1449234,   1449235,   1449236,   1449237,   S1449238,   1449239,   1449240,   1449241,', '   1449242,   1449243,   1449244,   1449245,   1449246,   1449247,   1449248,   1449249,', '   1449250,   1449251,   1449252,   1449253,   1449254,   1449255,   1449256,   1449257,', '   1656698,   1656699,   1656700,   1656701,   1656702,   1656703,   1656704,   1656705,', '   1656706,   1656707,   1656708,   1656709,   1656710,   1656711,   1656712,   1656713,', '   1656714,   1656715,   1656716,   1656717,   1656718,   1656719,   1656720,   1656721,', '   1656722,   1656723,   1656724,   1656725,   1656726,   1656727,   1656728,   1656729,', '   1656730,   1656731,   1656732,   1656733,   1656734,   1656735,   1656736,   1656737,', '', '', '']
        #    1449218,   1449219,   1449220,   1449221,   1449222,   1449223,   1449224,   1449225,   1449226,   1449227,   1449228,   1449229,   1449230,   1449231,   1449232,   1449233,   1449234,   1449235,   1449236,   1449237,   S1449238,   1449239,   1449240,   1449241,   1449242,   1449243,   1449244,   1449245,   1449246,   1449247,   1449248,   1449249,   1449250,   1449251,   1449252,   1449253,   1449254,   1449255,   1449256,   1449257,   1656698,   1656699,   1656700,   1656701,   1656702,   1656703,   1656704,   1656705,   1656706,   1656707,   1656708,   1656709,   1656710,   1656711,   1656712,   1656713,   1656714,   1656715,   1656716,   1656717,   1656718,   1656719,   1656720,   1656721,   1656722,   1656723,   1656724,   1656725,   1656726,   1656727,   1656728,   1656729,   1656730,   1656731,   1656732,   1656733,   1656734,   1656735,   1656736,   1656737,
        # 1449218 存在于列表中。
        # ['   1449047,   1449048,   1449049,   1449050,   1449051,   1449052,   1449053,   1449054,', '   1449055,   1449056,   1449057,   1449058,   1449059,   1449060,   1449061,   1449062,', '   1449063,   1449064,   1449065,   1449066,   1449067,   1449068,   1449069,   1449070,', '   1449071,   1449072,   1449073,   1449074,   1449075,   1449076,   1449077,   1449078,', '   1449079,   1449080,', '']
        #    1449047,   1449048,   1449049,   1449050,   1449051,   1449052,   1449053,   1449054,   1449055,   1449056,   1449057,   1449058,   1449059,   1449060,   1449061,   1449062,   1449063,   1449064,   1449065,   1449066,   1449067,   1449068,   1449069,   1449070,   1449071,   1449072,   1449073,   1449074,   1449075,   1449076,   1449077,   1449078,   1449079,   1449080,
        # 1449047 存在于列表中。

        if target_number in data_str:
            # print(f"{target_number} 存在于列表中。")
            new_content.append(list_1[0])

        else:
            # print(f"{target_number} 不存在于列表中,请输入正确标号。")
            new = simpledialog.askinteger(title="",
                                          prompt=list_1[0]+"的"+target_number+"输入有误,请重新输入起始单元或起始节点号:")
            # print(new)
            #     content = str(content).replace(str(target_number),str(new))
            # print(content)
            new_list = list_1[0].replace(str(target_number), str(new))
            # print()
            new_content.append(new_list)

    # print("new_content"+str(new_content))
    # print(old_content)


    filename = resource_path(os.path.join("file",path_inpname))
    # print(filename)
    node_coordinate = []
    ls4 = []
    ls4_ = []
    ls4_data = []
    with open(filename,'r',encoding='utf-8') as fa:
        data_c = fa.read().splitlines()
    # print(data_b)
    for i in range(0, len(data_c)):

        data_c[i] = str.upper(data_c[i])
        if "*NODE" in data_c[i]:
            n = i + 1
            while "*" not in data_c[n]:
                ls4_data.append(data_c[n])
                n = n + 1
            ls4.append(ls4_data)
            ls4_data = []
            break

    # print(ls4)
    node_cor = []
    node_cor = ls4[0]

    #node_cor里面含所有节点坐标
    node = []
    for j in range(0,len(node_set)):
        for k in range(0,3):
            for i in range(0, len(node_cor)):
                str1 = node_cor[i].split(',')[0]
                int_str1 = int(str1)
                if int_str1 == int(node_set[j][k]):
                    node_coordinate.append(node_cor[i])
                    break
    # print(node_coordinate)

    #node_coordinate
    #['126051,        -213.32157,      -23.94757,       55.92702\n',
    # '126578,         -49.68242,      -23.94821,      -50.66072\n',
    # '126776,        -114.42335,      -23.94608,      -46.53174\n',
    # '127140,        -212.51184,      -23.98995,       56.26252\n',
    # '143528,         -48.68259,      -23.94195,      -50.67784\n',
    # '143529,         -48.67345,      -23.97157,      -50.15527\n',
    # '144028,        -212.89419,      -23.97285,       57.18638\n',
    # '189374,        -115.39657,      -23.94313,      -46.30191\n',
    # '189375,        -115.09989,      -23.98079,      -45.04446\n']

    node_list = []
    for j in range (0,len(node_coordinate)):
        str3 = node_coordinate[j].strip(' ').strip('\n').split(',')[1:4]
        node_list.append(str3)
    # print(node_list)

    #['126776,        -114.42335,      -23.94608,      -46.53174\n',
    # '189374,        -115.39657,      -23.94313,      -46.30191\n',
    # '189375,        -115.09989,      -23.98079,      -45.04446\n',
    # '144028,        -212.89419,      -23.97285,       57.18638\n',
    # '127140,        -212.51184,      -23.98995,       56.26252\n',
    # '126051,        -213.32157,      -23.94757,       55.92702\n',
    # '143529,         -48.67345,      -23.97157,      -50.15527\n',
    # '143528,         -48.68259,      -23.94195,      -50.67784\n',
    # '126578,         -49.68242,      -23.94821,      -50.66072\n']

    # [['        -114.42335', '      -23.94608', '      -46.53174'],
    # ['        -115.39657', '      -23.94313', '      -46.30191'],
    # ['        -115.09989', '      -23.98079', '      -45.04446'],
    # ['        -212.89419', '      -23.97285', '       57.18638'],
    # ['        -212.51184', '      -23.98995', '       56.26252'],
    # ['        -213.32157', '      -23.94757', '       55.92702'],
    # ['         -48.67345', '      -23.97157', '      -50.15527'],
    # ['         -48.68259', '      -23.94195', '      -50.67784'],
    # ['         -49.68242', '      -23.94821', '      -50.66072']]

    filename1 = resource_path(os.path.join("file","weld-current_modify.wdf"))
    os.remove(filename1)

    filename2 = resource_path(os.path.join("file","weld_current.txt"))

    f1 = open(filename1,'a',encoding='utf-8')


    f1.write('<weld_definition>\n')

    j = 0
    with open(filename2,'r',encoding='utf-8') as f2:

        # content = f1.read()
        # f1.seek(0,0)
        # f1.write('<weld_definition>\n'+content)
        for i in range(0,len(ls1)):
            lines = f2.read()
            f2.seek(0)
            lines = lines.replace('%New_Line',old_content[i].upper())

            plate_thick = str.upper(WLname[i].strip('\n').split('_')[2])
            if 'P' in plate_thick:
                lines = lines.replace('%plate_thickness', plate_thick.replace('P', '.'))
            else:
                lines = lines.replace('%plate_thickness', plate_thick)
            # "PART-1-1_"+
            lines = lines.replace('%welddomain',"PART-1-1_"+old_content[i+len(ls1)].upper())
            lines = lines.replace('%start_element', new_content[i+len(ls1)].strip('\n').split('_')[-1])

            lines = lines.replace('%reference_normal',str(pingmianF.vector(node_list[j],node_list[j+1],node_list[j+2])))
            # print(vector(node_list[j], node_list[j + 1], node_list[j + 2]))

            # if '%weldline' in line:

                # f1.write(line.replace('%weldline', 'weldline1234_4567'))
            # "PART-1-1_"+
            lines = lines.replace('%weldline',"PART-1-1_"+old_content[i].upper()+"_nodal")
            lines = lines.replace('%start_node', new_content[i].strip('\n').split('_')[-1])

            lines = lines.replace('%weld_type', new_content[i].strip('\n').split('_')[0].capitalize())

            f1.write(lines)


            j = j+3

        f1.write('</weld_definition>')


    f1.close()
    f2.close()
    fa.close()

if __name__ == '__main__':
    path_inpname = filedialog.askopenfilenames(title="Select Text File",
                                       filetypes=[("INP File", "*.inp"), ("All Files", "*.*")])
    # print(path_inpname)
    automation(path_inpname[0])

    print('工具运行成功!')
    # except:
    #     popupmsg('工具运行不成功!')
# f2.close()

pingmianF

python 复制代码
# import numpy as np
#
# def compute_normal_vector(point1, point2, point3):
#     vector1 = np.array(point2) - np.array(point1)
#     vector2 = np.array(point3) - np.array(point1)
#     normal_vector = np.cross(vector1, vector2)
#     return normal_vector
#
# # 示例输入
# point1 = [-114.42335,      -23.94608,      -46.53174]
# point2 = [-115.39657,      -23.94313,      -46.30191]
# point3 = [-115.09989,      -23.98079,      -45.04446]
#
# normal_vector = compute_normal_vector(point1, point2, point3)
# print(normal_vector)
# # 在上面的代码示例中,我们使用了numpy库来进行向量的计算。
# # compute_normal_vector函数接受三个点作为输入,然后使用numpy库中的array函数将这些点转换为数组。
# # 接着,我们计算两个向量vector1和vector2,它们分别是point2-point1和point3-point1。
# # 最后,我们使用numpy库中的cross函数计算向量的叉积,得到平面的法向量。


# import read_inp_auto as read_inp
import numpy as np


p1 =['        -114.42335', '      -23.94608', '      -46.53174']
p2 =['        -115.39657', '      -23.94313', '      -46.30191']
p3 =['        -115.09989', '      -23.98079', '      -45.04446']

def vector(p1,p2,p3):

    # 定义三个点的坐标
    point1 = np.array(p1)
    point2 = np.array(p2)
    point3 = np.array(p3)

    float_point1 = point1.astype(np.float64)
    float_point2 = point2.astype(np.float64)
    float_point3 = point3.astype(np.float64)
    # 计算两个向量
    vector1 = float_point2 - float_point1
    vector2 = float_point3 - float_point1

    # 计算法向量
    normal_vector = np.cross(vector1, vector2)

    # 归一化为单位向量
    unit_normal_vector = normal_vector / np.linalg.norm(normal_vector)
    vector_final =",".join(("{:.4f}".format(num) for num in unit_normal_vector))

    return vector_final
# print(vector(p1,p2,p3))

weld-current

python 复制代码
   <!--fe-safe weld definition file-->
    <groups>
        <group name="%welddomain" type="elemental"></group>
    </groups>
    <weld name="%New_Line" type="line">
        <parameter id="plate thickness">
            <!--Plate Thickness-->
            <value>%plate_thickness</value>
        </parameter>
        <parameter id="smoothing iterations">
            <!--Number of smoothing iterations-->
            <value>2</value>
        </parameter>
        <parameter id="ir function">
            <!--I(r) Function-->
            <value>Structural Joints / Displacement Control</value>
        </parameter>
        <parameter id="weld end correction">
            <!--Weld End Correction-->
            <value>Virtual node (original)</value>
        </parameter>
        <parameter id="element type">
            <!--Element type-->
            <value>Solids</value>
        </parameter>
        <parameter id="weld line group name">
            <!--Weld line nodes-->
            <value>%weldline</value>
        </parameter>
        <parameter id="weld toe elements">
            <!--Weld reference elements-->
            <value>%welddomain</value>
        </parameter>
        <parameter id="start node">
            <!--Start Node-->
            <value>%start_node</value>
        </parameter>
        <parameter id="start element">
            <!--Start Element-->
            <value>%start_element</value>
        </parameter>
        <parameter id="reference normal">
            <!--Reference Normal-->
            <value>%reference_normal</value>
        </parameter>
        <parameter id="weld type">
            <!--Weld type-->
            <value>%weld_type</value>
        </parameter>
        <parameter id="failure mode">
            <!--Failure Mode-->
            <value>Unspecified Failure Mode</value>
        </parameter>
        <parameter id="through thickness node validation tolerance">
            <!--Through thickness node validation cone tolerance-->
            <value>0.1</value>
        </parameter>
        <parameter id="Through thickness node search co-planarity tolerance angle">
            <!--Through thickness node search co-planarity tolerance angle-->
            <value>5</value>
        </parameter>
        <group name="%weldline" type="nodal" id="weld nodes"></group>
    </weld>
相关推荐
waicsdn_haha5 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
蜜獾云30 分钟前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
小屁不止是运维31 分钟前
麒麟操作系统服务架构保姆级教程(五)NGINX中间件详解
linux·运维·服务器·nginx·中间件·架构
qq_5290252934 分钟前
Torch.gather
python·深度学习·机器学习
数据小爬虫@35 分钟前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python
Hacker_Oldv36 分钟前
WPS 认证机制
运维·服务器·wps
bitcsljl1 小时前
Linux 命令行快捷键
linux·运维·服务器
ac.char1 小时前
在 Ubuntu 下使用 Tauri 打包 EXE 应用
linux·运维·ubuntu
Cachel wood1 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
終不似少年遊*1 小时前
pyecharts
python·信息可视化·数据分析·学习笔记·pyecharts·使用技巧