许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  creo_python_1脚本怎么用?搭配Creo做自动化建模的入门实践

creo_python_1脚本怎么用?搭配Creo做自动化建模的入门实践

阅读数 3
点赞 0
article_banner

代码块

PlainText


"""
======================================================================
【程序功能简介】
本脚本实现了对 Creo 3D图纸(.prt)的批量自动化分类与宏命令(Mapkey)处理。
核心执行流程如下:

1. 环境校验:自动检查输入文件夹及外部 `mapkeys.pro` 宏文件是否存在,并读取宏代码。
2. 自动分类:遍历目标文件夹,识别所有 `.prt.*` 文件,按图纸名称自动创建独立文件夹。
3. 文件归档:将对应的 Creo 图纸原文件安全复制(保留属性)到各自新建的专属文件夹中。
4. 联动控制:通过 Creopyson 接口连接正在运行的 Creo 软件(需开启 Nitro-Program)。
5. 批量处理:依次切换 Creo 工作目录至各独立文件夹,打开图纸,注入并执行指定的宏命令。
6. 内存清理:每张图纸处理完成后,自动关闭当前窗口并擦除内存缓存,防止文件相互干扰。
======================================================================
"""
import os
import shutil
import glob
import creopyson

# ==========================================
# 1. 用户配置区域
# ==========================================
INPUT_DIR = r"D:\Desktop\test"     #  请在次区域 **********修改你的 图纸文件夹目录
Macro_file_address = r"D:\Desktop\Python2025\CREO\pyhton_test\mapkeys.pro"


def main():
    # 确保输入路径存在
    if not os.path.exists(INPUT_DIR):
        print(f"错误: 输入文件夹不存在 -> {INPUT_DIR}")
        return
    if not os.path.exists(Macro_file_address):
        print(f"错误: 宏文件不存在 -> {Macro_file_address}")
        return

    # 彻底根治方案:用 Python 提前读取您的 mapkeys.pro 宏文件内容
    try:
        with open(Macro_file_address, 'r', encoding='utf-8', errors='ignore') as f:
            macro_script = f.read()
        print("成功读取宏文件内容!")
    except Exception as e:
        print(f"读取宏文件失败: {e}")
        return

    # ==========================================
    # 2. 寻找文件夹内所有的 Creo .prt.* 文件
    # ==========================================
    search_pattern = os.path.join(INPUT_DIR, "*.prt.*")
    all_creo_files = glob.glob(search_pattern)

    if not all_creo_files:
        print("未在文件夹中找到任何 .prt 文件。")
        return

    # 存储待处理的任务信息
    tasks = []
    for file_path in all_creo_files:
        file_name = os.path.basename(file_path)  # 例如: Fishhook.prt.1

        # 提取核心 3D 图纸文件名 (取出纯字符串类型)
        base_name_str = file_name.split(".prt")[0]  # 例如: "Fishhook"
        tasks.append((base_name_str, file_path, file_name))

    print(f"共查询到 {len(tasks)} 个 Creo 图纸文件。开始创建文件夹并复制...")

    # ==========================================
    # 3. 创建独立文件夹并复制文件
    # ==========================================
    ready_tasks = []

    for base_name_str, src_path, file_name in tasks:
        # 新文件夹路径
        target_dir = os.path.join(INPUT_DIR, base_name_str)

        # 创建文件夹(如果已存在则跳过)
        if not os.path.exists(target_dir):
            os.makedirs(target_dir)

        # 目标文件复制路径
        dst_path = os.path.join(target_dir, file_name)

        # 复制文件
        try:
            shutil.copy2(src_path, dst_path)
            ready_tasks.append((base_name_str, target_dir, file_name))
        except Exception as e:
            print(f"复制文件 {file_name} 失败: {e}")

    print("文件夹创建与文件复制完成。")

    # ==========================================
    # 4 & 5. 调用 creopyson 遍历操作 Creo
    # ==========================================
    print("正在连接到已打开的 Creo 软件...")
    try:
        # 连接 creopyson 服务
        c = creopyson.Client()
        c.connect()
    except Exception as e:
        print(f"连接 Creopyson 失败!请检查 Nitro-Program 开启状态。错误: {e}")
        return

    # 遍历处理每一个独立的文件夹
    for base_name_str, target_dir, file_name in ready_tasks:
        print(f"\n正在处理图纸: {base_name_str}")
        try:
            # 1. 更改 Creo 当前工作目录
            c.creo_cd(target_dir)
            print(f"-> 工作目录已设置为: {target_dir}")

            # 2. 打开该文件夹下的 3D 图纸文件 (传递标准后缀名,例如 Fishhook.prt)
            clean_creo_name = base_name_str + ".prt"
            c.file_open(clean_creo_name, display=True)
            print(f"-> 已成功打开文件: {clean_creo_name}")

            # 3. 运行宏命令:改用官方标准的 interface_mapkey,直接推送刚刚读取出来的宏代码内容
            c.interface_mapkey(script=macro_script)
            print(f"-> 已通过接口成功触发并执行宏动作")

            # 4. 关闭当前文件窗口,并从内存中彻底擦除,防止相互干扰
            #    注意:creopyson 没有 file_close 方法,正确方法名是 file_close_window,
            #    参数名是 file_(带下划线)。仅关闭窗口不会清内存,因此还需调用 file_erase。
            c.file_close_window(file_=clean_creo_name)
            c.file_erase(file_=clean_creo_name, erase_children=True)
            print(f"-> 已关闭窗口并清理内存: {clean_creo_name}")

        except Exception as e:
            print(f"处理 {base_name_str} 时发生 Creo 操作错误: {e}")

    print("\n所有文件夹遍历处理完毕!")


if __name__ == "__main__":
    main()
    
      复制成功
     
     
     
     



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空