SolidWorks机械工程师网——最大的SolidWorks学习平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: li568172326
打印 上一主题 下一主题

装配体bom表数量遍历反写到零件属性中,要与自带的bom表一致

  [复制链接]

8

主题

92

帖子

871

金币

传奇

Rank: 8Rank: 8

积分
3406

最佳新人活跃会员热心会员宣传达人

21#
 楼主| 发表于 2022-1-12 09:10:12 | 只看该作者

   经典图书
tg000057 发表于 2022-1-12 08:22
不明白你提出的问题,我只看到最后一张图,你那个配置特定应用显示是”Default“,而代码写入的是”默认 ...

感谢你的指点,是我大意了。回头我再仔细看一下代码。
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

10

主题

92

帖子

893

金币

传奇

Rank: 8Rank: 8

积分
3052

最佳新人活跃会员热心会员宣传达人

22#
发表于 2022-1-13 09:20:09 | 只看该作者
楼主的装配体里包含了导入的第三方格式3D模型,主要问题是遍历模型树时能准确判断出非SLDPRT、SLDASM格式文件,才能正确统计零部件数量
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

5

主题

582

帖子

201

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2689

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

23#
发表于 2022-1-13 14:18:46 | 只看该作者

   经典图书
很不错,找到组织了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

169

帖子

147

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2177

最佳新人活跃会员热心会员宣传达人灌水之王

24#
发表于 2022-1-13 23:48:32 | 只看该作者
学习学习
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

271

帖子

226

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1655

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

25#
发表于 2022-4-30 14:06:34 | 只看该作者

   经典案例图书
tg000057 发表于 2022-1-7 13:31
试下这个,统计当前装配体下所有子件的装配数量,然后将数量覆写到其自定义和配置特定属性里。

补充内容 ...

被你骗了10个金币,下了你的宏毛用没有。相信你还不如相信世上有鬼
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

788

帖子

441

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2188

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

26#
发表于 2022-5-28 16:20:32 | 只看该作者
楼主辛苦了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

788

帖子

441

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2188

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

27#
发表于 2022-5-28 16:21:18 | 只看该作者

   经典案例图书
SW机械工程师网,找到组织了!
SolidWorks机械工程师网
回复 支持 0 反对 1

使用道具 举报

10

主题

150

帖子

2114

金币

传奇

Rank: 8Rank: 8

积分
7158

最佳新人活跃会员热心会员宣传达人灌水之王

28#
发表于 2022-5-28 16:36:46 | 只看该作者
楼主可以用宏在装配体中插入bom表(如果不想要可以删除),然后读取bom表中的数量,写入属性
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

788

帖子

441

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2188

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

29#
发表于 2022-5-28 23:25:33 | 只看该作者
楼主辛苦了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

39

帖子

44

金币

天使

Rank: 2Rank: 2

积分
158

最佳新人活跃会员宣传达人

30#
发表于 2022-5-29 12:28:26 | 只看该作者

   经典图书
小白到此留个脚印
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

29

主题

569

帖子

258

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2376

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

31#
发表于 2022-6-13 22:17:58 来自手机 | 只看该作者
SW机械工程师网,找到组织了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

29

主题

569

帖子

258

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2376

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

32#
发表于 2022-6-13 22:17:58 来自手机 | 只看该作者
SW机械工程师网,找到组织了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

8

主题

92

帖子

871

金币

传奇

Rank: 8Rank: 8

积分
3406

最佳新人活跃会员热心会员宣传达人

33#
 楼主| 发表于 2022-6-13 22:24:46 | 只看该作者
鲁东秀才 发表于 2022-5-28 16:36
楼主可以用宏在装配体中插入bom表(如果不想要可以删除),然后读取bom表中的数量,写入属性

你自己在写插件呀
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

10

主题

150

帖子

2114

金币

传奇

Rank: 8Rank: 8

积分
7158

最佳新人活跃会员热心会员宣传达人灌水之王

34#
发表于 2022-6-14 10:34:19 | 只看该作者
li568172326 发表于 2022-6-13 22:24
你自己在写插件呀

自学了点c#编程,写点插件自己用。水平有限的很
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

10

主题

150

帖子

2114

金币

传奇

Rank: 8Rank: 8

积分
7158

最佳新人活跃会员热心会员宣传达人灌水之王

35#
发表于 2022-6-14 10:43:16 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

li568172326 发表于 2022-6-13 22:24
你自己在写插件呀

这是我自己写的统计标准件的代码,请参考         

           ISldWorks swApp = UtilityForSW.ConnectSW();
            ModelDoc2 swModel = default(ModelDoc2);
            SelectionMgr swSeleMgr = default(SelectionMgr);
            ModelDocExtension swModelDocExt = default(ModelDocExtension);
            BomTableAnnotation swBOMAnnotation = default(BomTableAnnotation);

            TableAnnotation swTable = default(TableAnnotation);

            string TemplateName = null;
            bool boolstatus = false;
            int nNumCol = 0;//总列数
            int nNumRow = 0;//总行数

            int BomType = (int)swBomType_e.swBomType_PartsOnly;
            string Configuration = "";
            if (txtConfigName.Text == "")
            {
                Configuration = "默认";
            }
            else
            {
                Configuration = txtConfigName.Text;
            }
            TemplateName = @"C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\lang\chinese-simplified\材料明细表.sldbomtbt";

            swModel = (ModelDoc2)swApp.ActiveDoc;

            if (swModel.GetType() != (int)swDocumentTypes_e.swDocASSEMBLY)
            {
                MessageBox.Show("当前文档不是装配体!\r\n请打开一个装配体再进行操作。", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            bool result = false;
            List<string> tableLst = new List<string>();
            result = TableListOfMaterials(swModel, out tableLst);

            if (result) //存在表格
            {
                foreach (var item in tableLst)
                {
                    if (item.Contains ("材料明细表")) //存在材料明细表
                    {
                        swSeleMgr = (SelectionMgr)swModel.SelectionManager;
                        boolstatus = swModel.Extension.SelectByID2(item, "BOMFEATURE", 0, 0, 0, false, 0, null, 0);

                        BomFeature swBomFeat = (BomFeature)swSeleMgr.GetSelectedObject2(1);

                        object[] vTableArr = null;
                        object vTable = null;

                        vTableArr = (object[])swBomFeat.GetTableAnnotations();
                        foreach (TableAnnotation vTable_loopVariable in vTableArr)
                        {
                            vTable = vTable_loopVariable;
                            swTable = (TableAnnotation)vTable;
                        }

                        nNumCol = swTable.ColumnCount;
                        nNumRow = swTable.RowCount;

                        for (int m = 0; m < nNumRow; m++)
                        {
                            if (swTable.DisplayedText[m, 1].Contains("GB") || swTable.DisplayedText[m, 1].Contains("JB") || swTable.DisplayedText[m, 1].Contains("HG"))
                            {
                                int index = this.dataGridView1.Rows.Add();
                                this.dataGridView1.Rows[index].Cells[0].Value = swTable.DisplayedText[m, 2];//标准件名称
                                this.dataGridView1.Rows[index].Cells[1].Value = swTable.DisplayedText[m, 1];//标准件代号
                                this.dataGridView1.Rows[index].Cells[2].Value = swTable.DisplayedText[m, 7];//标准件规格(备注)
                                this.dataGridView1.Rows[index].Cells[3].Value = swTable.DisplayedText[m, 4];//标准件材料
                                this.dataGridView1.Rows[index].Cells[4].Value = swTable.DisplayedText[m, 3];//标准件数量

                            }
                        }
                    }
                    else //不存在材料明细表
                    {
                        try
                        {
                            swModelDocExt = swModel.Extension;

                            // 插入BOM表
                            swBOMAnnotation = swModelDocExt.InsertBomTable2(TemplateName, 400, 300, BomType, Configuration, true);

                            swTable = (TableAnnotation)swBOMAnnotation;
                            nNumCol = swTable.ColumnCount;
                            nNumRow = swTable.RowCount;
                           
                            for (int m = 0; m < nNumRow; m++)
                            {
                                if (swTable.DisplayedText[m, 1].Contains("GB") || swTable.DisplayedText[m, 1].Contains("JB") || swTable.DisplayedText[m, 1].Contains("HG"))
                                {
                                    int index = this.dataGridView1.Rows.Add();
                                    this.dataGridView1.Rows[index].Cells[0].Value = swTable.DisplayedText[m, 2];//标准件名称
                                    this.dataGridView1.Rows[index].Cells[1].Value = swTable.DisplayedText[m, 1];//标准件代号
                                    this.dataGridView1.Rows[index].Cells[2].Value = swTable.DisplayedText[m, 7];//标准件规格(备注)
                                    this.dataGridView1.Rows[index].Cells[3].Value = swTable.DisplayedText[m, 4];//标准件材料
                                    this.dataGridView1.Rows[index].Cells[4].Value = swTable.DisplayedText[m, 3];//标准件数量

                                }
                            }

                            boolstatus = swModel.Extension.SelectByID2("材料明细表1", "BOMFEATURE", 0, 0, 0, false, 0, null, 0);

                            swModel.EditDelete();
                        }
                        catch
                        {

                        }

                    }

                }
            }
            else //不存在表格
            {

                try
                {
                    swModelDocExt = swModel.Extension;

                    // 插入BOM表

                    swBOMAnnotation = swModelDocExt.InsertBomTable2(TemplateName, 400, 300, BomType, Configuration, true);

                    swTable = (TableAnnotation)swBOMAnnotation;
                    nNumCol = swTable.ColumnCount;
                    nNumRow = swTable.RowCount;
                    
                    for (int m = 0; m < nNumRow; m++)
                    {
                        if (swTable.DisplayedText[m, 1].Contains("GB") || swTable.DisplayedText[m, 1].Contains("JB") || swTable.DisplayedText[m, 1].Contains("HG"))
                        {
                            int index = this.dataGridView1.Rows.Add();
                            this.dataGridView1.Rows[index].Cells[0].Value = swTable.DisplayedText[m, 2];//标准件名称
                            this.dataGridView1.Rows[index].Cells[1].Value = swTable.DisplayedText[m, 1];//标准件代号
                            this.dataGridView1.Rows[index].Cells[2].Value = swTable.DisplayedText[m, 7];//标准件规格(备注)
                            this.dataGridView1.Rows[index].Cells[3].Value = swTable.DisplayedText[m, 4];//标准件材料
                            this.dataGridView1.Rows[index].Cells[4].Value = swTable.DisplayedText[m, 3];//标准件数量

                        }
                    }

                    boolstatus = swModel.Extension.SelectByID2("材料明细表1", "BOMFEATURE", 0, 0, 0, false, 0, null, 0);

                    swModel.EditDelete();

                }
                catch
                {

                }
            }
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

8

主题

92

帖子

871

金币

传奇

Rank: 8Rank: 8

积分
3406

最佳新人活跃会员热心会员宣传达人

36#
 楼主| 发表于 2022-6-14 23:22:59 | 只看该作者

   经典案例图书
鲁东秀才 发表于 2022-6-14 10:43
这是我自己写的统计标准件的代码,请参考         

           ISldWorks swApp = UtilityForSW.Con ...

你有写BOM工具没有啊
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

10

主题

150

帖子

2114

金币

传奇

Rank: 8Rank: 8

积分
7158

最佳新人活跃会员热心会员宣传达人灌水之王

37#
发表于 2022-6-15 07:45:46 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

li568172326 发表于 2022-6-14 23:22
你有写BOM工具没有啊

你可以搜索SW小工具,这是我写的小软件。免费的
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

5

主题

131

帖子

97

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1975

最佳新人活跃会员热心会员宣传达人灌水之王

38#
发表于 2022-6-15 09:11:52 | 只看该作者

   经典案例图书
鲁东秀才 发表于 2022-5-28 16:36
楼主可以用宏在装配体中插入bom表(如果不想要可以删除),然后读取bom表中的数量,写入属性

哪个宏有这个功能,能否分享一下
SolidWorks机械工程师网
回复 支持 0 反对 1

使用道具 举报

10

主题

150

帖子

2114

金币

传奇

Rank: 8Rank: 8

积分
7158

最佳新人活跃会员热心会员宣传达人灌水之王

39#
发表于 2022-6-15 09:19:55 | 只看该作者
lxr8833661 发表于 2022-6-15 09:11
哪个宏有这个功能,能否分享一下

小工具是用c#编写的。VBA还不太熟悉,编写起来比较困难
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

6

主题

546

帖子

801

金币

传奇

Rank: 8Rank: 8

积分
3325

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

40#
发表于 2022-12-22 14:40:54 | 只看该作者
SolidWorks机械工程师网,顶一下。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

SOLIDWORKS 2023 机械设计从入门到精通

手机版|小黑屋| GMT+8, 2025-7-4 15:26 , Processed in 0.255809 second(s), 15 queries , Memcache On.

SolidWorks机械工程师网 ( 鲁ICP备14025122号-2 ) 鲁公网安备 37028502190335号

声明:本网言论纯属发表者个人意见,与本网立场无关。
如涉版权,可发邮件: admin@swbbsc.com

快速回复 返回顶部 返回列表