C# SolidWorks 二次开发 API —dll插件如何让 winform 类似ShowDialog,但还能操作solidworks

这篇文章记录一下,这次看api帮助解决到的一个问题:

          由于之前我都是先做好的exe独立开发,后来改成插件形式后遇到的问题。以前经常利用窗体的ShowDialog特性,让程序暂停,让用户进行对象的自定义选择操作,但是到了dll中出现了问题,因为dll和solidworks主进程是一个,所以当用了页面的ShowDialog之后,solidworks就再也无法操作了。这个问题之前花了一天多时间都没搞定,想了好多办法,最后利用的doevents解决的,但是效果不是特别好。

         原来solidworks的帮助文件中已经有了解决方案: 只需要使用 Application.Run(winform)就可以了,我刚才进行了测试,很好用,至于还有没有别的问题,后面再测试一下。

        

         参考链接:

http://help.solidworks.com/2018/English/api/sldworksapiprogguide/overview/Keystrokes_and_Accelerator_Keys_and_ActiveX_Modeless_Dialogs_and_PropertyManager_Pages.htm

C# SolidWorks 二次开发 API —只开工程图的情况下直接转出3D和2D

##昨天晚上有网友咨询了一个问题,问如何只打开工程图的情况下导出step与pdf.

之前我写的博客中存3D格式是在打开的情况下做的,之前我的一篇文章中有写过怎么在工程图中获取零件对象,所以我们只需要在那上面改一改就可以了。直接调用ModelDoc2.Extension.SaveAs方法就可以存成想要的格式,而不产生单独打开窗口的动作了。

代码如下:

           //连接到Solidworks
            ISldWorks swApp = Utility.ConnectToSolidWorks();

            ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;

            // DrawingDoc dc = (DrawingDoc)swModel;

            SelectionMgr selectionMgr = (SelectionMgr)swModel.SelectionManager;

            //获取选择的视图对象
            View view = (View)selectionMgr.GetSelectedObject5(1);

            //获取视图中的引用模型
            var viewModel = view.ReferencedDocument;

            //其它读取属性请参考博文 读取零件属性 ->BtnGetPartData_Click

            MessageBox.Show(viewModel.GetPathName());

            //下面是导出,如果不需要请注释掉以下代码。
            int error = 0;
            int warnings = 0;

            var stepName = System.IO.Path.GetFileNameWithoutExtension(viewModel.GetPathName());

            var bRes = viewModel.Extension.SaveAs($@"D:\{stepName}.step", (int)swSaveAsVersion_e.swSaveAsCurrentVersion, (int)swSaveAsOptions_e.swSaveAsOptions_Silent, null, ref error, ref warnings);

            if (bRes == true)
            {
                MessageBox.Show("Export step Done!");
            }
            else
            {
                MessageBox.Show("Export Error!");
            }

代码已经发布在码云和github.