当前位置: 代码迷 >> 综合 >> C# SolidWorks 二次开发 API --- 修改全局变量的值
  详细解决方案

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

热度:40   发布时间:2024-01-26 19:01:55.0

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

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

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

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

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

This example shows how to get the values of equations.//-----------------------------------------
// Preconditions:
// 1. Open public_documents\samples\tutorial\api\partequations.sldprt.
// 2. Open the Immediate window.
//
// Postconditions:
// 1. Gets each equation's value and index and whether the 
//    equation is a global variable. 
// 2. Examine the Immediate window.
//------------------------------------------
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using System.Runtime.InteropServices;
using System;
using System.Diagnostics;namespace Macro1CSharp.csproj
{public partial class SolidWorksMacro{public void Main(){ModelDoc2 swModel = default(ModelDoc2);EquationMgr swEqnMgr = default(EquationMgr);int i = 0;int nCount = 0;swModel = (ModelDoc2)swApp.ActiveDoc;swEqnMgr = (EquationMgr)swModel.GetEquationMgr();Debug.Print("File = " + swModel.GetPathName());nCount = swEqnMgr.GetCount();for (i = 0; i < nCount; i++){Debug.Print("  Equation(" + i + ")  = " + swEqnMgr.get_Equation(i));Debug.Print("    Value = " + swEqnMgr.get_Value(i));Debug.Print("    Index = " + swEqnMgr.Status);Debug.Print("    Global variable? " + swEqnMgr.get_GlobalVariable(i));}}/// <summary>///  The SldWorks swApp variable is pre-assigned for you./// </summary>public SldWorks swApp;}
}

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

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

运行一下:

 

下面我们来做修改:

private void butGlobalVariables_Click(object sender, EventArgs e){//连接solidworksISldWorks swApp = Utility.ConnectToSolidWorks();if (swApp != null){//获取当前模型ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;//定义方程式管理器EquationMgr swEqnMgr = default(EquationMgr);int i = 0;int nCount = 0;if (swModel != null){swEqnMgr = (EquationMgr)swModel.GetEquationMgr();// nCount = swEqnMgr.GetCount();//for (i = 0; i < nCount; i++)//{//    Debug.Print("  Equation(" + i + ")  = " + swEqnMgr.get_Equation(i));//    Debug.Print("    Value = " + swEqnMgr.get_Value(i));//    Debug.Print("    Index = " + swEqnMgr.Status);//    Debug.Print("    Global variable? " + swEqnMgr.get_GlobalVariable(i));//}//修改高度为60if (SetEquationValue(swEqnMgr, "h", 60)){swModel.ForceRebuild3(true);}else{MessageBox.Show("没有找到这个值!");}}}}#region 修改全局变量所用到的方法public bool SetEquationValue(EquationMgr eqMgr, string name, double newValue){int index = GetEquationIndexByName(eqMgr, name);if (index != -1){eqMgr.Equation[index] = "\"" + name + "\"=" + newValue;return true;}else{return false;}}//通过名字找方程式的位置private int GetEquationIndexByName(EquationMgr eqMgr, string name){int i;for (i = 0; i <= eqMgr.GetCount() - 1; i++){var eqName = eqMgr.Equation[i].Split('=')[0].Replace("=", "");eqName = eqName.Substring(1, eqName.Length - 2); // removing the "" symbols from the nameif (eqName.ToUpper() == name.ToUpper()){return i;}}return -1;}#endregion 修改全局变量所用到的方法

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

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