C# SolidWorks二次开发---获取和创建DimXpert(MBD)尺寸

124 篇文章 71 订阅
53 篇文章 14 订阅

MBD

MBD 代表 Model Based Definition(基于模型的定义),这是一种使用 3D 模型(如实体模型)、产品和制造信息 (PMI) 以及相关元数据来定义单个部件和产品装配体的方法。相比之下,传统上的其他方法都需要使用 2D 工程图来提供此类细节。

示例图

我找了一张图,这是PTC网站上的,我觉得看着不错。

我的解释

就是把常规的2d工程图甩掉,在模型上定义加工尺寸与信息。因为复杂的2d图需要你有丰富的3维构造想向力。而基于三维的话,更直观,还能动态旋转,想怎么看就怎么看。

本文章的目标

通过代码来自动创建3d尺寸标注,以及读取标注。

模型实现步骤

先建一个简单的模型,这里我们采用mbd提供的模板
在这里插入图片描述
就这样吧,太复杂 了怕我自己看不懂。在这里插入图片描述
在这里插入图片描述
然后采用SolidWorks中的自动尺寸方案,然后出来的效果图(尺寸位置有手动整理)
在这里插入图片描述
在这里插入图片描述
整体效果还不错,我是选择了左下角的两个面为基准。(当然也发现六边形的孔它不标,可能要手动再增加)

选中某个尺寸,会自动高亮有对应的实体面。
像这个有两个对象,还会自动在前面2x
在这里插入图片描述

大家可能发现,尺寸有两种颜色 100和200是我在草图中有标注过的尺寸,它是黑色,而且没有公差。
其它出来的尺寸是自动公差的,这个值 是和前面选择的模型模板属于哪个尺寸级别有关的。公差带范围不一样。

如何修改公差

手动改:
在这里插入图片描述
文档属性里面可以控制默认值(这个值 改了之后 再增加的尺寸才会使用设置中的默认值) :
在这里插入图片描述

如何读取:

那肯定是查Api帮助。
在这里插入图片描述
这个示意是遍历了所有的尺寸特征(大家可以自己去试试,我就不贴了)
我就做个简单的(主要是复杂的我也不会)在这里插入图片描述

在这里插入图片描述

执行这个按钮之前,我选中了这个尺寸。
在这里插入图片描述

private void btnCreateDimXpert_Click(object sender, EventArgs e)
        {

            var swApp = PStandAlone.GetSolidWorks();

            var swModel = (ModelDoc2)swApp.ActiveDoc;       

            var selectedObject = (object)swModel.ISelectionManager.GetSelectedObject6( 1, -1);

            var dimXpertFeature = selectedObject as DimXpertFeature;                   

            var dimType = dimXpertFeature.Type;

            var dimAnnotations = (object[])dimXpertFeature.GetAppliedAnnotations();

            for (int i = 0; i < dimAnnotations.Length; i++)
            {
                var tempAnno = (DimXpertAnnotation)dimAnnotations[i];

                var dimTol = (DimXpertDimensionTolerance)tempAnno;              

                MessageBox.Show(dimTol.GetNominalValue().ToString());
            }
        }

它居然给了提示了四个尺寸值 。
这样说明了一个问题,它设计的时候是针对 一个整体,这个特征上有四个尺寸来定义。在这里插入图片描述
如果你想获取具体的公差值信息,可以参考Api帮助中的获取公差示例https://help.solidworks.com/2018/english/api/swdocmgrapi/get_dimxpert_tolerance5_example_csharp.htm

如何创建这些尺寸

在这里插入图片描述
通过查找 ,找到一个自动尺寸方案的示例。 这个示例我就不说了。因为我也看不懂,哈哈
https://help.solidworks.com/2018/english/api/swdimxpertapi/auto_dimension_scheme_example_csharp.htm

我就弄个简单的版本。
利用神器宏录制器,录制一个。
在这里插入图片描述
然后改成C#版本

   //先打开 MBDTest_Clear.SLDPRT
            #region C#转换版
            var boolstatus = swModel.Extension.SelectByRay(-0.199999999999932, 7.99159865590582E-03, 2.08147507191825E-03, 0.388737791327055, 0.42257073135628, -0.81872883581512, 1.1566601033182E-03, 2, false, 0, 0);
            boolstatus =swModel.Extension.SelectByRay(-0.193540180170828, 0, 7.74886573458389E-03, 0.388737791327055, 0.42257073135628, -0.81872883581512, 1.1566601033182E-03, 2, true, 0, 0);
            boolstatus =swModel.Extension.SelectByRay(-8.93087496499163E-02, 7.75246027125149E-02, 6.27227943436992E-03, 0.388737791327055, 0.42257073135628, -0.81872883581512, 1.1566601033182E-03, 2, true, 0, 0);
            boolstatus =swModel.ISelectionManager.SetSelectedObjectMark(3, 51,(int)swSelectionMarkAction_e.swSelectionMarkSet);
            boolstatus =swModel.Extension.SelectByRay(-0.117784661174085, 3.60124267366473E-02, 4.68486280385605E-03, 0.388737791327055, 0.42257073135628, -0.81872883581512, 1.1566601033182E-03, 2, true, 0, 0);
            boolstatus =swModel.ISelectionManager.SetSelectedObjectMark(4, 52, (int)swSelectionMarkAction_e.swSelectionMarkSet);
            var swConfig = swModel.ConfigurationManager.ActiveConfiguration;

            var swDimXPertMgr = swModel.Extension.DimXpertManager[swConfig.Name, true];
            var swDimXPertPart = (DimXpertPart)swDimXPertMgr.DimXpertPart;
            var swADSOpt = swDimXPertPart.GetAutoDimSchemeOption();

            swADSOpt.PartType = (int)swDimXpertAutoDimSchemePartType_e.swDimXpertAutoDimSchemePartType_Prismatic;
            swADSOpt.ToleranceType = (int)swDimXpertAutoDimSchemeToleranceType_e.swDimXpertAutoDimSchemeToleranceType_PlusMinus;
            swADSOpt.PatternType = (int)swDimXpertAutoDimSchemePatternType_e.swDimXpertAutoDimSchemePatternType_Linear;
            swADSOpt.PolarPatternHoleCount = 5;
            swADSOpt.ScopeAllFeature = false;
            boolstatus = swDimXPertPart.AutoDimensionScheme(swADSOpt);

            swModel.ClearSelection2(true);

            #endregion

运行结果:
效果还是可以的,时间有限,就写这么多了。
在这里插入图片描述

总结

这个对于简单零件来说还是特别方便的,复杂 的就需要去进行什么视图的处理了,不然太多尺寸一起显示,就太麻烦了。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Paine Zeng

如果对有帮助,请我喝咖啡吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值