复制装配体内的链条护板到E:\cqh-图纸\设计模型库\链条护板\测试

先通过插件桥查找装配体里的「链条护板」路径,再复制到目标目录。

{
“success”: true,
“message”: “pong”
}
“drawingPath”: “E:\code\试验\装配体导出\链条护板\链条护板1800-小孔.slddrw”,
“hasDrawing”: true
}
]
}
L1015x95��������-��.SLDPRT 775951 2026/6/16 14:26:26
��������1800-���.slddrw 266567 2026/6/17 16:54:13
��������1800-���.SLDPRT 859116 2026/6/16 14:45:14
��������1800-��.slddrw 343727 2026/6/17 16:54:13
��������1800-��.SLDPRT 878729 2026/6/16 14:45:05
第一个零件的 .sldprt 因路径拼写错误未复制,正在补拷。

L1015x95��������-��.SLDPRT (757.8 KB)
��������1800-���.slddrw (260.3 KB)
��������1800-���.SLDPRT (839 KB)
��������1800-��.slddrw (335.7 KB)
��������1800-��.SLDPRT (858.1 KB)
已从当前装配体 E:\code\试验\装配体导出\装配体3.SLDASM 中,将 4 个链条护板零件(含工程图)复制到目标目录:

E:\cqh-图纸\设计模型库\链条护板\测试

零件名 数量 已复制文件
L1015x95链条护板-14齿
2
.SLDPRT + .slddrw
L1015x95链条护板-小孔
1
.SLDPRT + .slddrw
链条护板1800-大孔
1
.SLDPRT + .slddrw
链条护板1800-小孔
1
.SLDPRT + .slddrw
共 8 个文件(4 个零件 + 4 个工程图)。

如果只想复制其中某一个(例如只复制「1800-大孔」),告诉我零件名即可

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using tools;

namespace SolidWorksAddinStudy.Services
{
    /// <summary>
    /// 从装配体 BOM 采集零件 <c>.sldprt</c> / <c>.sldasm</c> 与同级 <c>.slddrw</c> 磁盘路径(供 Cursor / HTTP 桥接)。
    /// </summary>
    public sealed class AssemblyPartFileInfo
    {
        public string PartName { get; set; } = string.Empty;

        public string PartType { get; set; } = string.Empty;

        public string Quantity { get; set; } = string.Empty;

        public string PartPath { get; set; } = string.Empty;

        public string DrawingPath { get; set; } = string.Empty;

        public bool HasDrawing { get; set; }
    }

    public static class AssemblyPartPathService
    {
        /// <summary>
        /// 须在 SolidWorks 主线程调用:从装配体 BOM 列出各零件文件路径及同级工程图路径(按零件路径去重)。
        /// </summary>
        /// <param name="nameKeyword">非空时仅保留零件名包含该子串的行(忽略大小写)。</param>
        public static bool TryCollectFromAssembly(
            SldWorks swApp,
            ModelDoc2 assemblyModel,
            string? nameKeyword,
            out string assemblyPath,
            out List<AssemblyPartFileInfo> rows,
            out string errorMessage)
        {
            assemblyPath = string.Empty;
            rows = new List<AssemblyPartFileInfo>();
            errorMessage = string.Empty;

            if (swApp == null)
            {
                errorMessage = "SolidWorks 未连接";
                return false;
            }

            if (assemblyModel == null || assemblyModel.GetType() != (int)swDocumentTypes_e.swDocASSEMBLY)
            {
                errorMessage = "当前文档不是装配体";
                return false;
            }

            assemblyPath = assemblyModel.GetPathName()?.Trim() ?? string.Empty;
            if (string.IsNullOrEmpty(assemblyPath))
            {
                errorMessage = "请先保存装配体文件";
                return false;
            }

            try
            {
                List<TaskPaneBomPartRow>? bomRows =
                    asm2bom.CollectPartRowsForTaskPaneAsync(swApp, assemblyModel).GetAwaiter().GetResult();
                if (bomRows == null)
                {
                    errorMessage = "采集 BOM 失败(返回为空)";
                    return false;
                }

                string keyword = (nameKeyword ?? string.Empty).Trim();
                var seenPaths = new HashSet<string>(StringComparer.OrdinalIgnoreCase);

                foreach (TaskPaneBomPartRow r in bomRows)
                {
                    if (r == null)
                    {
                        continue;
                    }

                    string partName = (r.PartName ?? string.Empty).Trim();
                    if (partName.Length == 0)
                    {
                        continue;
                    }

                    if (keyword.Length > 0
                        && partName.IndexOf(keyword, StringComparison.OrdinalIgnoreCase) < 0)
                    {
                        continue;
                    }

                    string partPath = (r.PartPath ?? string.Empty).Trim();
                    if (partPath.Length == 0)
                    {
                        continue;
                    }

                    if (!seenPaths.Add(partPath))
                    {
                        continue;
                    }

                    string drawingPath = PartDrawingDrwFileStatus.GetSiblingSlddrwPath(partPath);
                    rows.Add(
                        new AssemblyPartFileInfo
                        {
                            PartName = partName,
                            PartType = r.PartType ?? string.Empty,
                            Quantity = r.Quantity ?? string.Empty,
                            PartPath = partPath,
                            DrawingPath = drawingPath,
                            HasDrawing = drawingPath.Length > 0
                        });
                }

                return true;
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"AssemblyPartPathService.TryCollectFromAssembly: {ex}");
                errorMessage = ex.Message;
                return false;
            }
        }
    }
}

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐