第三步:使用 COM API 进行核心自动化操作

连接到 SolidWorks 后,您可以操作模型、图纸、装配体等。以下是一些常见任务的示例。

示例 1:创建新零件并绘制草图
def create_new_part(sw_app):
    """
    创建新零件并绘制矩形草图
    """
    try:
        # 1. 创建新零件文档
        sw_app.NewDocument("C:\\ProgramData\\SolidWorks\\SOLIDWORKS 2023\\templates\\Part.prtdot", 0, 0, 0)
        
        # 2. 获取活动文档和模型
        sw_model = sw_app.ActiveDoc
        if sw_model is None:
            print("未激活文档")
            return
        
        # 3. 在Front平面上插入草图
        boolstatus = sw_model.Extension.SelectByID2("Front Plane", "PLANE", 0, 0, 0, False, 0, None, 0)
        sw_model.SketchManager.InsertSketch(True)
        
        # 4. 绘制矩形(起点,终点坐标)
        sketch_segment = sw_model.SketchManager.CreateCornerRectangle(0, 0, 0, 0.1, 0.05, 0)
        
        # 5. 退出草图
        sw_model.SketchManager.InsertSketch(True)
        
        # 6. 拉伸凸台
        feature = sw_model.FeatureManager.FeatureExtrusion2(
            True,  # 侧1方向
            False, # 侧2方向
            0,     # 方向1类型(0=盲孔)
            0,     # 方向1深度
            0.01,  # 方向1深度值(米)
            0,     # 拔模角度
            False, # 向外拔模
            0,     # 方向2类型
            0,     # 方向2深度
            0,     # 方向2深度值
            0,     # 方向2拔模角度
            False, # 方向2向外拔模
            True,  # 合并结果
            False, # 使用草图切线延伸
            False  # 创建为薄壁特征
        )
        
        print("成功创建拉伸特征")
        return sw_model
        
    except Exception as e:
        print(f"创建零件失败: {e}")
        return None

# 执行创建
if sw_app:
    part_doc = create_new_part(sw_app)
示例 2:遍历装配体组件
def traverse_assembly(sw_model):
    """
    遍历装配体中的所有组件
    """
    try:
        # 获取装配体对象
        sw_assy = sw_model
        
        # 获取根组件
        root_comp = sw_assy.GetRootComponent()
        if root_comp is None:
            print("不是装配体文档")
            return
        
        # 获取所有组件
        components = root_comp.GetChildren()
        
        # 递归遍历组件
        def print_component(comp, level=0):
            indent = "  " * level
            comp_name = comp.Name2
            comp_type = "子装配体" if comp.IsRoot() else "零件"
            print(f"{indent}└── {comp_name} ({comp_type})")
            
            # 如果有子组件,继续遍历
            if comp.GetChildren():
                for child in comp.GetChildren():
                    print_component(child, level + 1)
        
        print("装配体结构:")
        print_component(root_comp)
        
    except Exception as e:
        print(f"遍历装配体失败: {e}")

# 使用示例(假设已打开装配体)
if sw_app:
    sw_model = sw_app.ActiveDoc
    if sw_model:
        traverse_assembly(sw_model)
示例 3:批量处理文件 - 导出PDF图纸
import os

def batch_export_drawings_to_pdf(sw_app, folder_path):
    """
    批量将指定文件夹中的工程图导出为PDF
    """
    try:
        # 获取文件夹中所有SLDDRW文件
        drawings = [f for f in os.listdir(folder_path) if f.endswith('.slddrw')]
        
        for idx, drawing_name in enumerate(drawings, 1):
            drawing_path = os.path.join(folder_path, drawing_name)
            
            print(f"正在处理 ({idx}/{len(drawings)}): {drawing_name}")
            
            # 打开工程图
            sw_model = sw_app.OpenDoc6(
                drawing_path,  # 文件路径
                3,             # 类型(3=工程图)
                1,             # 选项(1=只读,0=可读写)
                "",            # 配置名称
                0, 0           # 错误和警告代码
            )
            
            if sw_model:
                # 构建PDF输出路径
                pdf_path = drawing_path.replace('.slddrw', '.pdf')
                
                # 导出为PDF(参数可能需要根据版本调整)
                sw_model.SaveAs4(
                    pdf_path,    # 输出路径
                    0,           # 版本(0=当前)
                    2,           # 选项(2=PDF)
                    0,           # 导出数据选项
                    None         # 自定义属性
                )
                
                print(f"  已导出: {os.path.basename(pdf_path)}")
                
                # 关闭文档(不保存更改)
                sw_app.CloseDoc(drawing_name)
                
    except Exception as e:
        print(f"批量导出失败: {e}")

# 使用示例
if sw_app:
    batch_export_drawings_to_pdf(sw_app, "C:\\MyDrawings")

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐