C# SolidWorks 二次开发 API—零件组合之后保留颜色

C# SolidWorks 二次开发 API—零件组合之后保留颜色

solidworks默认在一个零件中把另一个零件组合进来,颜色会丢失。
组合前:

组合后:

这个例子只是简单引导一下,也是一个实际需求延申出来的。因为有时候发给客户是一个整体,并且有些颜色是有特殊意义的。
所以我们需要保留:
到这里大家可以考虑一下,有什么解决方案???

=分割线===================

方案一: 不组合,直接利用把装配另存为零件/x_t,这样能保证颜色的存在,而且发出去的是一个零件。 这样特征会丢失,同时也不方便更新后操作。

方案二: 写代码,在每次生成组合(Join)特征之后 ,把特征的颜色修改掉,改为零件的颜色。 这样保证了参数的保留,也解决了颜色 的问题。

简单方案的代码如下:

 /// <summary>
        /// 组合零件后保留零件颜色
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnJoinKeepBodyColor_Click(object sender, EventArgs e)
        {
            //请先打开45_JoinTest.sldasm

            JoinPart(@"clamp1-1@45_JoinTest", @"JoinPart2-1@45_JoinTest");

        }

        /// <summary>
        /// 组合零件
        /// </summary>
        /// <param name="BasePartSelectID">基础零件</param>
        /// <param name="JoinPartSelectId">要组合进来的零件</param>
        private bool JoinPart(string BasePartSelectID, string JoinPartSelectId)
        {
            SldWorks swApp = PStandAlone.GetSolidWorks();
            ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;
            AssemblyDoc assemblyDoc = (AssemblyDoc)swModel;

            var boolstatus = swModel.Extension.SelectByID2(BasePartSelectID, "COMPONENT", 0, 0, 0, false, 0, null, 0);

            assemblyDoc.EditPart();

            var resSel = swModel.Extension.SelectByID2(JoinPartSelectId, "COMPONENT", 0, 0, 0, false, 0, null, 0);

            if (resSel == true)
            {
                var resJoin = assemblyDoc.InsertJoin2(true, false);

                if (resJoin == true)
                {
                    swModel.SelectedFeatureProperties(0, 0, 0, 0, 0, 0, 0, true, false, "JoinColor");

                    assemblyDoc.EditAssembly();

                    swModel.ClearSelection();

                    boolstatus = swModel.Extension.SelectByID2(BasePartSelectID, "COMPONENT", 0, 0, 0, false, 0, null, 0);

                    assemblyDoc.OpenCompFile();

                    var swPart = (PartDoc)swApp.ActiveDoc;

                    var thisFeatureClip = (Feature)swPart.FeatureByName("JoinColor");

                    if (thisFeatureClip != null)
                    {
                        var vFaceProp = (double[])swPart.MaterialPropertyValues;

                        var vProps = (double[])thisFeatureClip.GetMaterialPropertyValues2(1, null);
                        //这里指定为红色,正常是要从被组合的零件中获取的。
                        vProps[0] = 1;
                        vProps[1] = 0;
                        vProps[2] = 0;
                        vProps[3] = vFaceProp[3];
                        vProps[4] = vFaceProp[4];
                        vProps[5] = vFaceProp[5];
                        vProps[6] = vFaceProp[6];
                        vProps[7] = vFaceProp[7];
                        vProps[8] = vFaceProp[8];

                        thisFeatureClip.SetMaterialPropertyValues2(vProps, 1, null);

                        vProps = null;

                        vFaceProp = null;
                        swPart.EditRebuild();


                    }
                }
                else
                {
                    MessageBox.Show("Error to Insert Join!");
                }
            }

            return true;
        }
   

结果如下图:

posted @
2023-01-17 21:15 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源