C# SolidWorks 二次开发 API — 插件Add-In的自动更新

C# SolidWorks 二次开发 API — 插件Add-In的自动更新

写了程序,难免需要更新。所以大家都各自有各自的更新方案。

一般的.net可执行程序可以通过oneclick发布,从而自己更新,在每次用户打开时完成更新,

但是插件的更新有个问题,不能热更新。因为Solidworks在加载完dll之后 无法完全释放,所以无法直接替换。

所以一般的做法是在程序加载完成之后,提示用户有更新,这样就会要求用户必须重启一次Soldiworks.

—————————————————————————————————————————————————–

目前我的做法是创建一个新的Soldiworks插件,用于更新。需要注意的是要保证这个更新程序被solidworks先于功能的DLL加载。

具体我也没有研究它是基于名字还是基于GUID,至少我测试是能用的。

然后就需要在Update.dll中写具体更新的过程了。

需要在实体这个类的时候就去更新,这时solidworks只是加载了这个update.dll 

Tool.dll是还没有加载到内存的,所以这个时候是可以替换的。

此时是基于网络或者局域网都可以实现更新。

这样用户就会在每次重新开启Solidworks的时候实现了更新。

 

posted @
2019-10-18 13:20 
painezeng  阅读(
151)  评论(
0
编辑 
收藏 
举报

C# SolidWorks 二次开发 API — 另一种方式插件Add-In

C# SolidWorks 二次开发 API — 另一种方式插件Add-In

上一篇介绍了使用solidworks自带帮助的模板来创建插件。今天来介绍github上一个框架,使用它来创建插件似乎更方便易懂。

地址是:https://github.com/codestackdev/swex-addin

我们先下载zip压缩包,然后解压。用VS打开 swex-addin.sln 

然后重建项目,nuget会自动恢复引用 。

然后就可以编辑 SwSampleAddIn.cs类中的信息了。

这个是一个例子,里面包含了各种事件以及命令。要弄懂还是要一些功底的。

调试的话可以直接在AddInExample中调试中配置Solidworks的路径,并设置为默认启动项目,然后启动调试。

启动成功之后新建一个零件,即会出现一些信息,你可以代码中找到。

界面上也出现了:

大家可以参考它的github或者网站自己研究,有很多学习的地方。

posted @
2019-10-17 12:46 
painezeng  阅读(
153)  评论(
0
编辑 
收藏 
举报

C# SolidWorks 二次开发 API—创建插件Add-In

C# SolidWorks 二次开发 API—创建插件Add-In

在新建项目时选择SwCSharpAddin

如果没有这一项,可以在把swcsharpaddin.zip放到对应的模板目录下.

https://download.csdn.net/download/zengqh0314/12182239

一般在安装过电脑上都会有这个文件,如果实在找不到可以去网上搜索.

SolidWorks API SDK.msi这个里面有: 可以利用下面的命令解压出来 msiexec /a “SolidWorks API SDK.msi” /qb TARGETDIR=”d:\”

在上面输入自己想要的命字之后 .项目会自动创建,并加好引用.

双击swAddin.cs查看内容.

 这里会自动做了一些注释:

在调试选项中确认使用的sldworks文件位置.点击启动进行调试.(注意Visual Studio需要用管理员权限启动)

这里会自动启动Solidworks, 手动新建一个零件 ,即可发现新多了菜单 .

然后下一步就是参考这个Addin实例 去修改成自己想要的界面了.

 

 

 

posted @
2019-10-15 21:43 
painezeng  阅读(
234)  评论(
0
编辑 
收藏 
举报

C# SolidWorks 二次开发 API—获取质量属性

C# SolidWorks 二次开发 API—获取质量属性

有些情况我们需要通过系统的质量属性获取一些信息.

这个api帮助里自带例子.

        private void btn_GetMass_Click(object sender, EventArgs e)
        {
            // 获取质量属性可参考 Get Mass Properties of Visible and Hidden Components Example (C#)

            ISldWorks swApp = Utility.ConnectToSolidWorks();

            ModelDoc2 swModel = swApp.ActiveDoc;

            ModelDocExtension swModelDocExt = (ModelDocExtension)swModel.Extension;

            swModelDocExt.IncludeMassPropertiesOfHiddenBodies = false;
            int massStatus = 0;

            double[] massProperties = (double[])swModelDocExt.GetMassProperties(1, ref massStatus);
            if ((massProperties != null))
            {
                Debug.Print(" CenterOfMassX = " + massProperties[0]);
                Debug.Print(" CenterOfMassY = " + massProperties[1]);
                Debug.Print(" CenterOfMassZ = " + massProperties[2]);
                Debug.Print(" Volume = " + massProperties[3]);
                Debug.Print(" Area = " + massProperties[4]);
                Debug.Print(" Mass = " + massProperties[5]);
                Debug.Print(" MomXX = " + massProperties[6]);
                Debug.Print(" MomYY = " + massProperties[7]);
                Debug.Print(" MomZZ = " + massProperties[8]);
                Debug.Print(" MomXY = " + massProperties[9]);
                Debug.Print(" MomZX = " + massProperties[10]);
                Debug.Print(" MomYZ = " + massProperties[11]);
            }
            Debug.Print("-------------------------------");
        }

 

posted @
2019-10-11 19:38 
painezeng  阅读(
196)  评论(
0
编辑 
收藏 
举报

C# SolidWorks 二次开发 API—获取测量结果

C# SolidWorks 二次开发 API—获取测量结果

有些情况下我们需要通过solidworks的测量功能来帮助我们获取想要的结果,如面积,体积,重心这些信息.

今天先看下测量:

 

  private void btn_Measure_Click(object sender, EventArgs e)
        {
            //请先打开../TemplateModel/Measure.SLDPRT  并选中保存的选择--SelMeasure
            //
            //返回指定草图中所有线的总长 请参考之前的遍历草图对象

            //下面的代码是获取零件的体积.
            //可以参考API帮助 的实例 Measure Selected Entities Example (C#)

            ISldWorks swApp = Utility.ConnectToSolidWorks();

            ModelDoc2 swModel = swApp.ActiveDoc;

            ModelDocExtension swModelDocExt = (ModelDocExtension)swModel.Extension;

            Measure swMeasure = (Measure)swModelDocExt.CreateMeasure();

            swMeasure.ArcOption = 0;

            bool status = swMeasure.Calculate(null);

            if (status)
            {
                swApp.SendMsgToUser((swMeasure.Distance * 1000).ToString());
            }
        }

 

posted @
2019-10-10 21:41 
painezeng  阅读(
112)  评论(
0
编辑 
收藏 
举报

C# SolidWorks 二次开发 API — 包围框(Bounding Box)

C# SolidWorks 二次开发 API — 包围框(Bounding Box)

很多情况下我们都要获取零件的尺寸,用来包装. 在2018版之前,solidworks提供了GetBox这个函数来获取相关数据.

但是默认获取的都是零件坐标系方向上的,当然特定情况下我们也是可以通过旋转零件来获取最小空间上的包装尺寸.

在2018版中,Solidworks提供了一个自带的BoundingBox 新功能.它默认显示的就是空间上的最小方向,最好的一点就是它会随着零件的修改自动更新.虽然测试下来有一些bug.但是平时使用没有问题.

提示下: 装配体中没有这个功能,而之前版本中提供的装配体的那个GetBox尺寸不准确,要获取精确的包装箱大小,可以先把装配体存成一个零件,再通过此方法来获取大小.

 

 

上代码:

 private void btnBounding_Click(object sender, EventArgs e)
        {
            //首先请打开一个零件.

            ISldWorks swApp = Utility.ConnectToSolidWorks();

            ModelDoc2 swModel = swApp.ActiveDoc;

            FeatureManager featureManager = swModel.FeatureManager;

            PartDoc partDoc = (PartDoc)swModel;
            //通过特征名字获取特征
            Feature feature = partDoc.FeatureByName("Bounding Box");
            int longstatus;
            if (feature == null)//特征为null时将创建Bounding Box

            {
                feature = featureManager.InsertGlobalBoundingBox((int)swGlobalBoundingBoxFitOptions_e.swBoundingBoxType_BestFit, true, false, out longstatus);
            }

            // 显示 Bounding Box sketch
            var b = swModel.SetUserPreferenceToggle((int)swUserPreferenceToggle_e.swViewDispGlobalBBox, true);

            //获取自动生成的属性值
            string str;
            string str2;
            string str3;
            string str4;
            IConfiguration configuration = swModel.GetActiveConfiguration();
            CustomPropertyManager manager2 = swModel.Extension.get_CustomPropertyManager(configuration.Name);

            manager2.Get3("Total Bounding Box Length", true, out str, out str2);
            manager2.Get3("Total Bounding Box Width", true, out str, out str3);
            manager2.Get3("Total Bounding Box Thickness", true, out str, out str4);

            swApp.SendMsgToUser($"size={str2}x{str3}x{str4}");
        }

 

posted @
2019-10-09 16:58 
painezeng  阅读(
180)  评论(
0
编辑 
收藏 
举报