SolidWorks 使用 Python 开发的方法步骤(3)
·
第三步:使用 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")
更多推荐

所有评论(0)