SolidWorks机械工程师网——最大的SolidWorks学习平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6146|回复: 6
打印 上一主题 下一主题

二次开发通过SOLIDWORKS API将组件位置导出到CSV文件

  [复制链接]

19

主题

30

帖子

525

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1303

最佳新人活跃会员宣传达人

跳转到指定楼层
楼主
 楼主| 发表于 2023-8-29 00:26:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

   经典图书
  1. using SolidWorks.Interop.sldworks;
  2. using SolidWorks.Interop.swconst;
  3. using System;
  4. using System.IO;

  5. namespace YourNamespace
  6. {
  7.     class YourClass
  8.     {
  9.         // 定义常量:输出文件路径和单位转换因子
  10.         const string OUT_FILE_PATH = @"D:\locations.csv";
  11.         const double CONV_FACTOR = 1000; // 米转换为毫米

  12.         static SldWorks swApp;

  13.         static void Main(string[] args)
  14.         {
  15.             // 初始化SolidWorks应用程序对象
  16.             swApp = Activator.CreateInstance(Type.GetTypeFromProgID("SldWorks.Application")) as SldWorks;

  17.             // 获取当前激活的装配文档
  18.             ModelDoc2 swAssy = swApp.ActiveDoc as ModelDoc2;

  19.             if (swAssy != null)
  20.             {
  21.                 // 获取用户选择的第一个组件
  22.                 Component2 swSeedComp = GetSelectedComponent(swAssy);

  23.                 if (swSeedComp != null)
  24.                 {
  25.                     // 获取装配中所有组件的位置信息
  26.                     string table = GetComponentsPositions(swAssy, swSeedComp, CONV_FACTOR);

  27.                     // 将位置信息写入文本文件
  28.                     WriteTextFile(OUT_FILE_PATH, table);
  29.                 }
  30.                 else
  31.                 {
  32.                     Console.WriteLine("未选择组件");
  33.                 }
  34.             }
  35.             else
  36.             {
  37.                 Console.WriteLine("请打开装配");
  38.             }
  39.         }

  40.         // 获取用户选择的组件
  41.         static Component2 GetSelectedComponent(ModelDoc2 assy)
  42.         {
  43.             Component2 swSeedComp = null;

  44.             // 获取用户选择的第一个组件
  45.             object[] selectedObjs = assy.SelectionManager.GetSelectedObjectsComponent4(1, -1);

  46.             if (selectedObjs.Length > 0)
  47.             {
  48.                 swSeedComp = selectedObjs[0] as Component2;
  49.             }

  50.             return swSeedComp;
  51.         }

  52.         // 获取所有组件的位置信息
  53.         static string GetComponentsPositions(ModelDoc2 assy, Component2 seedComp, double convFactor)
  54.         {
  55.             // 初始化位置信息表格的表头
  56.             string table = "Path,Configuration,Name,X,Y,Z";

  57.             // 获取装配中的所有组件
  58.             Component2[] vComps = assy.GetComponents(false) as Component2[];

  59.             foreach (Component2 swComp in vComps)
  60.             {
  61.                 // 检查组件是否被抑制
  62.                 if (swComp.GetSuppression() != (int)swComponentSuppressionState_e.swComponentSuppressed)
  63.                 {
  64.                     bool includeComp = (seedComp == null) ||
  65.                         (string.Compare(seedComp.GetPathName(), swComp.GetPathName(), StringComparison.OrdinalIgnoreCase) == 0 &&
  66.                          string.Compare(seedComp.ReferencedConfiguration, swComp.ReferencedConfiguration, StringComparison.OrdinalIgnoreCase) == 0);

  67.                     if (includeComp)
  68.                     {
  69.                         // 获取组件的原点坐标并添加到table中
  70.                         double[] vOrigin = GetOrigin(swComp);
  71.                         table += Environment.NewLine +
  72.                             swComp.GetPathName() + "," +
  73.                             swComp.ReferencedConfiguration + "," +
  74.                             swComp.Name2 + "," +
  75.                             (vOrigin[0] * convFactor).ToString() + "," +
  76.                             (vOrigin[1] * convFactor).ToString() + "," +
  77.                             (vOrigin[2] * convFactor).ToString();
  78.                     }
  79.                 }
  80.             }

  81.             return table;
  82.         }

  83.         // 获取组件的原点坐标
  84.         static double[] GetOrigin(Component2 comp)
  85.         {
  86.             // 获取组件的变换矩阵
  87.             MathTransform swXForm = comp.Transform2;

  88.             // 获取数学工具
  89.             MathUtility swMathUtils = swApp.GetMathUtility() as MathUtility;

  90.             // 创建表示原点的数学点
  91.             double[] dPt = new double[3] { 0, 0, 0 };
  92.             MathPoint swMathPt = swMathUtils.CreatePoint(dPt);

  93.             // 使用组件的变换将原点坐标转换到装配坐标系
  94.             swMathPt = swMathPt.MultiplyTransform(swXForm) as MathPoint;

  95.             // 返回原点坐标
  96.             return (double[])swMathPt.ArrayData;
  97.         }

  98.         // 将文本内容写入文件
  99.         static void WriteTextFile(string filePath, string content)
  100.         {
  101.             try
  102.             {
  103.                 using (StreamWriter writer = new StreamWriter(filePath))
  104.                 {
  105.                     writer.Write(content);
  106.                 }
  107.             }
  108.             catch (Exception ex)
  109.             {
  110.                 Console.WriteLine("写入文件时出错:" + ex.Message);
  111.             }
  112.         }
  113.     }
  114. }
复制代码
这是c#代码 放给新手练习用的有任何问题可以找我

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 转播转播 分享教程|习题|模型|技巧 点赞点赞1 拍砖拍砖
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复

使用道具 举报

0

主题

615

帖子

442

金币

传奇

Rank: 8Rank: 8

积分
3676

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

沙发
发表于 2023-8-29 09:32:45 | 只看该作者
好好学习,天天向上!
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

3

主题

1403

帖子

493

金币

传奇

Rank: 8Rank: 8

积分
5387

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

板凳
发表于 2023-8-29 10:27:43 | 只看该作者

   经典图书
楼主很专业,写得很好!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

319

帖子

447

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2686

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

地板
发表于 2023-8-29 19:33:49 | 只看该作者
很不错,顶一下!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

136

帖子

136

金币

堂主

Rank: 4

积分
561

最佳新人活跃会员热心会员宣传达人灌水之王

5#
发表于 2023-10-9 08:23:23 | 只看该作者

   经典案例图书
楼主很专业,写得很好!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

136

帖子

136

金币

堂主

Rank: 4

积分
561

最佳新人活跃会员热心会员宣传达人灌水之王

6#
发表于 2023-10-9 10:58:53 | 只看该作者
SolidWorks机械工程师网,顶一下。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

721

帖子

334

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2401

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

7#
发表于 2024-7-16 15:52:45 | 只看该作者

   经典案例图书
SW机械工程师网,找到组织了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

SOLIDWORKS 2023 机械设计从入门到精通

手机版|小黑屋| GMT+8, 2025-6-3 05:01 , Processed in 0.226004 second(s), 16 queries , Memcache On.

SolidWorks机械工程师网 ( 鲁ICP备14025122号-2 ) 鲁公网安备 37028502190335号

声明:本网言论纯属发表者个人意见,与本网立场无关。
如涉版权,可发邮件: admin@swbbsc.com

快速回复 返回顶部 返回列表