SolidWorks PDM二次开发—连接PDM

SolidWorks PDM二次开发—连接PDM

我们今天开始PDM开发学习的第一步—连接到PDM!

好像不是第一步,第一步应该是环境安装。这个我就不讲了,基本上安装上就行了。
环境ok的话,管理端界面(我新建了一个PDMTraining的库)

本地库界面:(里面文件夹是我新建的)

好了,现在我们看下怎么操作:
新建一窗口程序 ,然后设计一个高大上的页面,加上一个按钮!
如下图:

增加PDM库的引用:

然后贴下代码:

    private void btnConnectToPDM_Click(object sender, EventArgs e)
        {
            try
            {
                //new 一个库对象
                var vault = new EdmVault5();
                //登陆到库中 -有好几种api,大家自己查询 
                vault.LoginAuto("PDMTraining", this.Handle.ToInt32());

                //如果用户登录成功,显示下本地库根目录路径
                if (vault.IsLoggedIn)
                {
                    MessageBox.Show(vault.RootFolderPath);
                }




                string message = "";
                IEdmFile5 file5 = null;  //文件对象
                IEdmFolder5 folder5 = null; //文件夹对象
                folder5 = vault.RootFolder; //根目录

                IEdmPos5 pos5 = null;
                pos5 = folder5.GetFirstFilePosition();  //第一个文件
                if (pos5.IsNull)
                {
                    message = "The root folder of your vault does not contain any files";
                    MessageBox.Show(message);
                    return;
                }

                message = "The root folder of your vault contains these files:" + "\n";

                //获取所有文件
                while (!pos5.IsNull)
                {
                    file5 = folder5.GetNextFile(pos5);
                    message = message + file5.Name + "\n";
                }

                MessageBox.Show(message);
            }
            catch (System.Runtime.InteropServices.COMException ex)
            {
                MessageBox.Show("Hresult=0x" + ex.ErrorCode.ToString("x") + "\n" + ex.Message);
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
                throw;
            }
        }

当前库状态:

结果提示:

好了,说明我们连接成功了,并且递归显示了文件的路径。

还是老样子,上码云下载源码:
https://gitee.com/painezeng/solidworks-pdmprofessional-apistudy

觉得写的马马虎虎,能看的过去的,麻烦加个关注,点个赞。
有钱的打个赏,没钱的尽量打个赏。哈哈

posted @
2021-08-26 10:21 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源

SolidWorks二次开发—简单的参数化示例

SolidWorks二次开发—简单的参数化示例

参数化设计? 我们看下百度的解释

哇,好像没几个字,你会了吗?

我用小白的口气解释一下: 就像我有个生产苹果的机器 ,你想要苹果的时候告诉我你想要多大的苹果就行。 这里面苹果的大小就是一个参数。小朋友 可能 只要直径10cm的苹果就能吃饱,但是大人就得要直径20cm的苹果。所以这个生产苹果的机器 就只需要这一个参数就行了。
这就参数化设计,元芳,你怎么看?
在SolidWorks中做参数化开发有不同的方式,大多都采用先建立好一套初始模型,然后通过程序 修改参数来得到新的模型,从而完成设计。
当然也有些是直接采用api接口直接进行绘制的,这种就相对来说比较复杂,不适合大量的操作。

下面我们就用一个简单的例子,来实战一下:

我们先弄一个简单的界面,里面有一些参数:
其实就是一个零件上有很多个小孔, 通过些小孔控制整个零件的尺寸,来设计零件。

下面是主要的代码(Vb.net版本):

Function ModifyActionModel() As Boolean
        Try
            Dim swModel As ModelDoc2
            Dim swEqnMgr As EquationMgr

            Dim eqName As String

            swApp = GetObject(, "SldWorks.Application")
            swModel = swApp.ActiveDoc

            If swModel Is Nothing Then

                MsgBox("当前模型为空。请打开后重试")

            End If
			
			'通过这个属性来检查零件是否能通过工具修改
            Dim ActionPartCode = swModel.CustomInfo2("", "CodeID")
            If ActionPartCode = "B0000001" Then


            Else

                MsgBox("当前模型不是工具生成的零件,所以无法修改。")

                Return False

            End If
			
            swEqnMgr = swModel.GetEquationMgr
            ProgressStatus.Value = 40
            Dim str1 As String = """"
			'通过修改方程式来控制模型
            For i = 0 To swEqnMgr.GetCount - 1

                eqName = Mid(swEqnMgr.Equation(i), 1, (InStrRev(swEqnMgr.Equation(i), "=")) - 1)

                If InStr(eqName, Chr(34) & "circle_R" & Chr(34)) Then swEqnMgr.Equation(i) = """circle_R""= " & Val(txtR.Text)
                If InStr(eqName, Chr(34) & "number_X" & Chr(34)) Then swEqnMgr.Equation(i) = """number_X""= " & Val(cobXQty.Text)
                If InStr(eqName, Chr(34) & "number_Y" & Chr(34)) Then swEqnMgr.Equation(i) = """number_Y""= " & Val(cobYQty.Text)
                If InStr(eqName, Chr(34) & "circle_x" & Chr(34)) Then swEqnMgr.Equation(i) = """circle_x""= " & Val(txtLeft.Text)
                If InStr(eqName, Chr(34) & "circle_Y" & Chr(34)) Then swEqnMgr.Equation(i) = """circle_Y""= " & Val(txtRight.Text)
                If InStr(eqName, Chr(34) & "box_Height" & Chr(34)) Then swEqnMgr.Equation(i) = """box_Height""= " & Val(txtHeight.Text)
                If InStr(eqName, Chr(34) & "circle_Dim" & Chr(34)) Then swEqnMgr.Equation(i) = """circle_Dim""= " & Val(Double.Parse(txtR.Text) + Double.Parse(txtGap.Text))

            Next
            ProgressStatus.Value = 80
            Dim ret As Integer

            ret = swEqnMgr.EvaluateAll
            ret = swModel.ForceRebuild3(True) 'Rebuid model
            ProgressStatus.Value = 100
            Return True
        Catch ex As Exception
            Return False

        End Try

    End Function

这样就完成了设计,至于工具编程涉及的功能我之前 的博文中都有写到。
比如修改尺寸,属性 ,方程式,压缩特征等等。。。

posted @
2021-08-10 16:59 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源