SolidWorks二次开发-工程图-预定义视图

SolidWorks二次开发-工程图-预定义视图

知识点: 利用预定义视图来创建工程图

今天还比较早,来补个知识点吧。

我们来学习一下工程图,大家知道在做工程图模板的时候可以先预定一个视图在工程图上。

比如: 我想要在某个固定的位置放上一个固定的视图,下次用这个工程图模板出图的时候,这个预定义视图就会根据我们关联的模型来显示。

下面是插件预定义视图的菜单:


比如我在图纸的右上角插入一个轴侧图,带颜色 显示的那种。

视图名称我们改成了MyView1

然后我们看下用代码怎么用我们刚定义的模板来新建工程图,并且给零件出个图纸。

关键代码:

 private void btnCreateDrawing_Click(object sender, EventArgs e)
        {
            SldWorks swApp = Utility.ConnectToSolidWorks();

            string dotPath = @"D:\09_Study\CSharpAndSolidWorks\CSharpAndSolidWorks\TemplateModel\DrawingTemplate.DRWDOT";

            //用我们的模板新建一个工程图
            var Part = swApp.NewDocument(dotPath, 12, 0, 0);

            ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;
            //选中视图,并获取
            var boolstatus = swModel.Extension.SelectByID2("MyView1", "DRAWINGVIEW", 0, 0, 0, false, 0, null, 0);

            var thisView = (View)swModel.ISelectionManager.GetSelectedObject5(1);

            DrawingDoc drawingDoc = (DrawingDoc)swModel;

            string partPath = @"D:\09_Study\CSharpAndSolidWorks\CSharpAndSolidWorks\TemplateModel\globalvariable.SLDPRT";
            //给预定义视图插入模型
            drawingDoc.InsertModelInPredefinedView(partPath);

            //设置视图的比例
            thisView.ScaleDecimal = 0.2;

            swModel.EditRebuild3();
        }

使用频率: 中

结果预览:


总结:

这种方式适合于动态创建工程图,如果是已经做好的工程图就不需要用到这个功能了。

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

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
编辑 
收藏 
举报  
来源

SolidWorks二次开发官方教程-API Fundamentals学习分享

SolidWorks二次开发官方教程-API Fundamentals学习分享

今天618,送大礼!
间断的花了快两个月时间,终于把官方的API基础知识学习完了。
下面是链接和截图:

API Fundamentals https://my.solidworks.com/training/elearning/68/api-fundamentals
这个访问需要正版Solidworks订阅用户。

文章目录

课程目录:

  1. Course Modules
  2. eCourse Overview
  3. Course Introduction
  4. Using the Macro Recorder (1 of 2)
  5. Using the Macro Recorder (2 of 2)
  6. Understanding the API Object Model (1 of 2)
  7. Understanding the API Object Model (2 of 2)
  8. Setting System Options and Document Properties
  9. Automating Part Design
  10. Automating Assembly Design
  11. Automating Drawing Development
  12. Using Selection and Traversal Techniques
  13. Adding Custom Properties and Attributes
  14. Installing and Using the SOLIDWORKS API SDK (1 of 2)
  15. Installing and Using the SOLIDWORKS API SDK (2 of 2)
  16. Customizing the SOLIDWORKS User Interface (1 of 2)
  17. Customizing the SOLIDWORKS User Interface (2 of 2)
  18. Understanding Notifications

我的学习PPT记录 截图:



官方提供的代码与练习资料:
我把我的学习记录与资料放在了新的开源库里:

下载地址:

https://gitee.com/painezeng/api-fundamentals

里面包括文字,教材与 对应的基本上每页的PPT。

大家可以去这里拿。

学习总结:

这是官方提供的原生的视频教程,市面上的官方教程也是参考这个来编写的。
这里面基本上是从零基础讲解的,很多基础知识都有涉及,包括api帮助的使用,宏特征,对象关系 等等。
当然也是全英文的,里面有一些跟着视频动手操作的交互过程,用来加深印象。
通过这一次系统的学习官方的API基础知识,我也是收获了不少。

posted @
2021-06-18 08:42 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源

SolidWorks二次开发-Z轴直线全部倒圆角

SolidWorks二次开发-Z轴直线全部倒圆角

做机械加工的小伙伴肯定都知道,像如下这个图加工的时候,我们肯定要倒些圆角 。
今天我们来做一个小功能,自动倒圆角 。

文章目录

思路:

	通过遍历一边,根据边的方向来判断是否需要倒圆角。 这个示例我们就要以根据边线的方向是沿Z轴的来判断这条边是要倒圆角的。

代码:

//遍历Z轴方向的直线
            SldWorks swApp = PStandAlone.GetSolidWorks();//连接solidworks
            swApp.CommandInProgress = true; //因为是exe测试,所以启动该选项,加快速度
            ModelDoc2 swModel = default(ModelDoc2);
            ModelDocExtension swModelDocExt = default(ModelDocExtension);
            SelectionMgr swSelMgr = default(SelectionMgr);
            Feature swFeature = null;

            swModel = (ModelDoc2)swApp.ActiveDoc; //获取当前零件

            swModelDocExt = (ModelDocExtension)swModel.Extension;

            //选择所有,零件中是选中所有的边。 swModelDocExt.SelectAll();

            swSelMgr = (SelectionMgr)swModel.SelectionManager;

            var edgeCount = swSelMgr.GetSelectedObjectCount();  //获取 已经选中的边数

            Debug.Print("总边数:" + edgeCount);

            int faceidStart = 10000;  //设定一个面的起始id,用于识别该面是否已经被获取到。

            //List<Face2> face2sList001 = new List<Face2>();
            //List<Face2> face2sList002 = new List<Face2>();

            List<Edge> ZEdges = new List<Edge>();

            for (int i = 1; i <= edgeCount; i++)
            {
                var thisEdge = (Edge)swSelMgr.GetSelectedObject(i);

                var swCurve = (Curve)thisEdge.GetCurve();

                var thisCurveP = thisEdge.GetCurveParams3();

                if (swCurve.IsLine() == true)
                {
                    var lineV = (double[])swCurve.LineParams;

                    Debug.Print($"Root Point-> X {lineV[0].ToString()} ,Y {lineV[1].ToString()} ,Z {lineV[2].ToString()}");
                    Debug.Print($"Direction Point-> X {lineV[3].ToString()} ,Y {lineV[4].ToString()} ,Z {lineV[5].ToString()}");

                    if (lineV[3] == 0 && lineV[4] == 0)
                    {
                        ZEdges.Add(thisEdge);
                    }
                }
            }

            swModel.ClearSelection();//清除掉所有选择的边

            // 重新选中 需要处理掉0.001的面
            for (int i = 0; i < ZEdges.Count; i++)
            {
                var faceEntity = (Entity)ZEdges[i];

                // faceEntity.Select4(true, selectData);

                faceEntity.SelectByMark(true, 1);
            }
            double AsyRadius1;
            double AsyRadius2;
            double AsyRadius3;
            double AsyRadius4;
            bool boolstatus;
            double[] radiis = new double[2];
            object radiiArray0;
            object conicRhosArray0;
            object setBackArray0;
            object pointArray0;
            object pointRhoArray0;
            object dist2Array0;
            object pointDist2Array0;

            conicRhosArray0 = 0;
            setBackArray0 = 0;
            pointArray0 = 0;
            pointRhoArray0 = 0;
            pointDist2Array0 = 0;

            var FilletFea = (Feature)swModel.FeatureManager.FeatureFillet3(195, 0.002, 0.010, 0, (int)swFeatureFilletType_e.swFeatureFilletType_Simple, (int)swFilletOverFlowType_e.swFilletOverFlowType_Default, (int)swFeatureFilletProfileType_e.swFeatureFilletCircular, 0, 0, 0,
            (setBackArray0), (pointArray0), (pointDist2Array0), (pointRhoArray0));
            FilletFea.Name = "AutoFillet";

结果:

小结:

这只是一个简单的功能,实际情况肯定是要复杂 很多,大家可以思考 一下,比如内边和外边如何判断?  

posted @
2021-06-11 10:36 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源

SolidWorks PDM二次开发—学习线路

SolidWorks PDM二次开发—学习线路

最近比较忙,所以博客的频率更新不太高。
Solidworks二次开发入门基本结束了,后面有新的知识点我还会持续更新的。

下面这个图列了个Solidworks PDM Professional(Solidworks EPDM)的二次开发大纲,后面有机会慢慢带大家入门。


SolidWorks PDM 二次开发

前提

  • 编程语言基础:C# / VB.net /VBA 基础,以及面向对象编程
  • 窗体应用程序/控制台/DLL
  • 方法/属性/事件/类/调试/集合…
  • SolidWorks PDM Professional 客户端
  • 本机管理员帐号
  • SolidWorks PDM管理员工具权限
  • Visual Studio 2017或以上(Community即可)
  • SolidWorks 使用基础
  • MSSQL查询

基础

  • PDM对象结构介绍

  • 学习方法
    API 帮助
    官方论坛

  • 开发方法
    Dispatch
    EXE
    DLL

  • Dispatch示例

  • 以序列号修改文件名

  • 与PDM系统连接
    输入用户名,密码,以及登陆库名称
    自动登陆-> 已经登陆的直接获取,未登陆的弹窗登陆

  • 遍历本地库名称

  • 获取文件的信息
    根目录与文件夹
    名称,版本 状态。。。
    通f过路径获取文件对象
    通过搜索获取文件

  • 遍历文件夹中的文件

  • 检入 检出 取消检出 文件

  • 变量

     	遍历变量名
     	文件卡变量
     		读取
     		修改
    
  • 插件的创建

  • 插件的调试

  • 增加菜单

     	右键调用
     	文件卡中调用
    
  • 读取文件引用

  • 获取 装配体中的 BOM 表

  • 工程图中的材料明细表

  • 批量操作
    检出
    写属性

  • 字典的使用

  • 事件
    状态
    预提交
    流程

  • 文件链接

  • 获取文件最新版本

  • 缓存

  • 从数据库获取变量值

  • 利用代码增加变量

  • 获取指定版本的变量值

posted @
2021-06-01 08:36 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源