这是用户在 2025-5-7 9:10 为 https://blog.csdn.net/zengqh0314/article/details/104559123 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?

C# SolidWorks 二次开发 API --- 修改全局变量的值

今天来简单讲一下如何修改方程式中的一些数据,有时候一些简单的模型我们就可以利用这个全局变量来控制模型.

如下图: 我设定了零件的高度方程式与全局变量h相等.

等到我们需要更新高度时,就可以直接修改这个全局变量,做到更简单的参数化方式,这个全局变量可以是上级装配体中的信息.

 下面来具体演示下如何找api:

打开api帮助文件,搜索关键字 globalvariable,就会发现右侧的实例,是一个获取信息的.

  1. This example shows how to get the values of equations.
  2. //-----------------------------------------
  3. // Preconditions:
  4. // 1. Open public_documents\samples\tutorial\api\partequations.sldprt.
  5. // 2. Open the Immediate window.
  6. //
  7. // Postconditions:
  8. // 1. Gets each equation's value and index and whether the
  9. // equation is a global variable.
  10. // 2. Examine the Immediate window.
  11. //------------------------------------------
  12. using SolidWorks.Interop.sldworks;
  13. using SolidWorks.Interop.swconst;
  14. using System.Runtime.InteropServices;
  15. using System;
  16. using System.Diagnostics;
  17. namespace Macro1CSharp.csproj
  18. {
  19. public partial class SolidWorksMacro
  20. {
  21. public void Main()
  22. {
  23. ModelDoc2 swModel = default(ModelDoc2);
  24. EquationMgr swEqnMgr = default(EquationMgr);
  25. int i = 0;
  26. int nCount = 0;
  27. swModel = (ModelDoc2)swApp.ActiveDoc;
  28. swEqnMgr = (EquationMgr)swModel.GetEquationMgr();
  29. Debug.Print("File = " + swModel.GetPathName());
  30. nCount = swEqnMgr.GetCount();
  31. for (i = 0; i < nCount; i++)
  32. {
  33. Debug.Print(" Equation(" + i + ") = " + swEqnMgr.get_Equation(i));
  34. Debug.Print(" Value = " + swEqnMgr.get_Value(i));
  35. Debug.Print(" Index = " + swEqnMgr.Status);
  36. Debug.Print(" Global variable? " + swEqnMgr.get_GlobalVariable(i));
  37. }
  38. }
  39. /// <summary>
  40. /// The SldWorks swApp variable is pre-assigned for you.
  41. /// </summary>
  42. public SldWorks swApp;
  43. }
  44. }

我们参考这段代码来完成方程式信息的读取: 增加按钮写代码.

 参照帮助文件写完的版本大概为:

运行一下:

 

下面我们来做修改:

  1. private void butGlobalVariables_Click(object sender, EventArgs e)
  2. {
  3. //连接solidworks
  4. ISldWorks swApp = Utility.ConnectToSolidWorks();
  5. if (swApp != null)
  6. {
  7. //获取当前模型
  8. ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;
  9. //定义方程式管理器
  10. EquationMgr swEqnMgr = default(EquationMgr);
  11. int i = 0;
  12. int nCount = 0;
  13. if (swModel != null)
  14. {
  15. swEqnMgr = (EquationMgr)swModel.GetEquationMgr();
  16. // nCount = swEqnMgr.GetCount();
  17. //for (i = 0; i < nCount; i++)
  18. //{
  19. // Debug.Print(" Equation(" + i + ") = " + swEqnMgr.get_Equation(i));
  20. // Debug.Print(" Value = " + swEqnMgr.get_Value(i));
  21. // Debug.Print(" Index = " + swEqnMgr.Status);
  22. // Debug.Print(" Global variable? " + swEqnMgr.get_GlobalVariable(i));
  23. //}
  24. //修改高度为60
  25. if (SetEquationValue(swEqnMgr, "h", 60))
  26. {
  27. swModel.ForceRebuild3(true);
  28. }
  29. else
  30. {
  31. MessageBox.Show("没有找到这个值!");
  32. }
  33. }
  34. }
  35. }
  36. #region 修改全局变量所用到的方法
  37. public bool SetEquationValue(EquationMgr eqMgr, string name, double newValue)
  38. {
  39. int index = GetEquationIndexByName(eqMgr, name);
  40. if (index != -1)
  41. {
  42. eqMgr.Equation[index] = "\"" + name + "\"=" + newValue;
  43. return true;
  44. }
  45. else
  46. {
  47. return false;
  48. }
  49. }
  50. //通过名字找方程式的位置
  51. private int GetEquationIndexByName(EquationMgr eqMgr, string name)
  52. {
  53. int i;
  54. for (i = 0; i <= eqMgr.GetCount() - 1; i++)
  55. {
  56. var eqName = eqMgr.Equation[i].Split('=')[0].Replace("=", "");
  57. eqName = eqName.Substring(1, eqName.Length - 2); // removing the "" symbols from the name
  58. if (eqName.ToUpper() == name.ToUpper())
  59. {
  60. return i;
  61. }
  62. }
  63. return -1;
  64. }
  65. #endregion 修改全局变量所用到的方法

到此,零件高度变成了60, 这一节先讲这么多吧.

最终代码请到码云或者github上下载.

登录后您可以享受以下权益:

×
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Paine Zeng

如果对有帮助,请我喝咖啡吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

举报

选择你想要举报的内容(必选)
  • 内容涉黄
  • 政治相关
  • 内容抄袭
  • 涉嫌广告
  • 内容侵权
  • 侮辱谩骂
  • 样式问题
  • 其他
点击体验
DeepSeekR1满血版
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回顶部