コード例 #1
0
 public static void InsertPart(SldWorks swApp, ModelDoc2 Doc, string newpartpath)
 {
     swApp.OpenDoc(newpartpath, 1);
     ((AssemblyDoc)Doc).AddComponent5(newpartpath, 0, "", false, "", 0, 0.3, 0);
     ((AssemblyDoc)Doc).AddComponent5(newpartpath, 0, "", true, "实心", 0.5, 0.3, 0);
     ((AssemblyDoc)Doc).AddComponent5(newpartpath, 0, "", true, "挖孔", 1, 0.3, 0);
     swApp.CloseDoc(newpartpath);
 }
コード例 #2
0
        public TabletModelInformation()
        {
            string hobNumber = ((ModelDoc2)sldWorks.ActiveDoc).GetType() == (int)swDocumentTypes_e.swDocPART ?
                               ((ModelDoc2)sldWorks.ActiveDoc).GetTitle() :
                               ((ModelDoc2)sldWorks.ActiveDoc).GetTitle().Remove(((ModelDoc2)sldWorks.ActiveDoc).GetTitle().IndexOf(' '));

            HobNumber = hobNumber;
            string    modelPath = GetTabletPath(hobNumber) + ".SLDPRT";
            ModelDoc2 tablet    = (ModelDoc2)sldWorks.OpenDoc(modelPath, (int)swDocumentTypes_e.swDocPART);

            if (tablet is null)
            {
                tablet = (ModelDoc2)sldWorks.ActivateDoc(hobNumber);
            }
            CustomPropertyManager cpmTablet = (CustomPropertyManager)tablet.Extension.CustomPropertyManager[""];

            GetDieNumber(tablet, cpmTablet);
            GetSize(tablet);
            sldWorks.CloseDoc(HobNumber);
        }
コード例 #3
0
ファイル: SomeHelpful.cs プロジェクト: CatEye12/3DSearch
        public static bool OpenLocal(string path)
        {
            SldWorks swApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application");

            if (File.Exists(path))
            {
                swApp.OpenDoc(path, 1);
                return(true);
            }
            else
            {
                MessageBox.Show("Файл не был найден локально!");
                return(false);
            }
        }
コード例 #4
0
        //не работает при открытом документе
        public byte[] ModelBytes(string path)
        {
            byte[] modelBytes = new byte[] { };


            if (path != string.Empty)
            {
                modelDoc = swApp?.ActiveDoc;
                swApp.CloseDoc(path);

                using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, System.IO.FileShare.ReadWrite))
                {
                    using (var reader = new BinaryReader(stream))
                    {
                        modelBytes = reader.ReadBytes((int)stream.Length);
                    }
                }
                swApp.OpenDoc(path, 1);
            }
            return(modelBytes);
        }
コード例 #5
0
        void OpenSolidWorks()
        {
            try
            {
                var item = default(EpdmVault.ColumnsBind);
                DgFiles.Dispatcher.Invoke(new Action(() => { item = (EpdmVault.ColumnsBind)DgFiles.SelectedItem; }));
                var processes = Process.GetProcessesByName("SLDWORKS");
                if (processes.Length == 0)
                {
                    //swApp = new SldWorks() { Visible = true };
                    Process.Start(item.FilePath);
                }
                else
                {
                    swApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application");
                    var fileType  = Path.GetExtension(item.FilePath);
                    var swDocType = 0;
                    switch (fileType.ToLower())
                    {
                    case ".sldprt":
                        swDocType = (int)swDocumentTypes_e.swDocPART;
                        break;

                    case ".sldasm":
                        swDocType = (int)swDocumentTypes_e.swDocASSEMBLY;
                        break;

                    case ".slddrw":
                        swDocType = (int)swDocumentTypes_e.swDocDRAWING;
                        break;
                    }
                    swApp.OpenDoc(item.FilePath, swDocType);
                }
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show(ex.Message + "\n" + ex.StackTrace);
            }
        }
コード例 #6
0
        public static void AddMate(SldWorks swApp, ModelDoc2 Doc, string newpartpath)
        {
            #region 添加部件
            swApp.OpenDoc(newpartpath, 1);
            ((AssemblyDoc)Doc).AddComponent5(newpartpath, 0, "", false, "", 0, 0.3, 0);
            swApp.CloseDoc(newpartpath);
            #endregion

            Component2 BaseComp  = ((AssemblyDoc)Doc).GetComponentByName("底座-1");
            Component2 RoateComp = ((AssemblyDoc)Doc).GetComponentByName("转轴-1");

            int err = 0;
            #region 轴装配
            Feature BaseAxi  = BaseComp.FeatureByName("基准轴1");
            Feature RoateAxi = RoateComp.FeatureByName("转轴中心轴");
            BaseAxi.Select(false);
            RoateAxi.Select(true);
            ((AssemblyDoc)Doc).AddMate5((int)swMateType_e.swMateCOINCIDENT, (int)swMateAlign_e.swMateAlignALIGNED, false, 0, 0, 0, 0, 0, 0, 0, 0, false, false, 0, out err);
            #endregion

            #region 底面装配距离
            Feature BaseBp  = BaseComp.FeatureByName("Top");
            Feature RoateBp = RoateComp.FeatureByName("Top");
            BaseBp.Select(false);
            RoateBp.Select(true);
            ((AssemblyDoc)Doc).AddMate5((int)swMateType_e.swMateDISTANCE, (int)swMateAlign_e.swMateAlignALIGNED, false, 10 / 1000.0, 10 / 1000.0, 10 / 1000.0, 0, 0, 0, 0, 0, false, false, 0, out err);
            #endregion

            #region 方位装配
            Feature BaseOir  = BaseComp.FeatureByName("Right");
            Feature RoateOir = RoateComp.FeatureByName("Right");
            BaseOir.Select(false);
            RoateOir.Select(true);
            ((AssemblyDoc)Doc).AddMate5((int)swMateType_e.swMateANGLE, (int)swMateAlign_e.swMateAlignALIGNED, false, 0, 0, 0, 0, 0, (30 / 180.0) * Math.PI, (30 / 180.0) * Math.PI, (30 / 180.0) * Math.PI, false, false, 0, out err);
            #endregion

            Doc.EditRebuild3();
        }
コード例 #7
0
        private void button_create_Geom_Click(object sender, RoutedEventArgs e)
        {
            #region a test example, not important
            m         = 9;
            width     = 8 / 1000.0;
            thickness = 1 / 1000.0;
            l1        = 30 / 1000.0;
            l2        = 16 / 1000.0;
            l3        = 21 / 1000.0;
            F1        = 1;
            F2        = 37;
            F3        = 49;

            l4          = l2;
            l1_         = l1 - 2 * width;
            l2_         = l2;
            l3_         = l3 + 2 * width;
            l4_         = l4;
            cell_length = l1 + l3;
            cell_height = l2 + width;
            #endregion

            Count = int.Parse(textBox_count.Text);
            Random randomSeed       = new Random();
            Random random_m         = new Random(randomSeed.Next());
            Random random_width     = new Random(randomSeed.Next());
            Random random_thickness = new Random(randomSeed.Next());
            Random random_l1        = new Random(randomSeed.Next());
            Random random_l2        = new Random(randomSeed.Next());
            Random random_l3        = new Random(randomSeed.Next());
            Random random_F1        = new Random(randomSeed.Next());
            Random random_F2        = new Random(randomSeed.Next());
            Random random_F3        = new Random(randomSeed.Next());

            for (int j = 0; j < Count; j++)
            {
                Console.WriteLine(string.Format("---------------------------------now No.{0}", j));

                #region generate random Data
                try
                {
                    /* change to double
                     * ran_m = random_m.Next(int.Parse(textBox_hm_cells_min.Text), int.Parse(textBox_hm_cellls_max.Text));
                     * ran_width = random_width.Next(int.Parse(textBox_width_min.Text), int.Parse(textBox_width_max.Text));
                     * ran_thickness = random_thickness.Next(int.Parse(textBox_thickness_min.Text), int.Parse(textBox_thickness_max.Text));
                     * ran_l1 = random_l1.Next(int.Parse(textBox_l1_min.Text), int.Parse(textBox_l1_max.Text));
                     * ran_l2 = random_l2.Next(int.Parse(textBox_l2_min.Text), int.Parse(textBox_l2_max.Text));
                     * ran_l3 = random_l3.Next(int.Parse(textBox_l3_min.Text), int.Parse(textBox_l3_max.Text));
                     * ran_F1 = random_F1.Next(int.Parse(textBox_F1_min.Text), int.Parse(textBox_F1_max.Text));
                     * ran_F2 = random_F2.Next(int.Parse(textBox_F2_min.Text), int.Parse(textBox_F2_max.Text));
                     * ran_F3 = random_F3.Next(int.Parse(textBox_F3_min.Text), int.Parse(textBox_F3_max.Text));
                     */
                    ran_m         = random_m.Next(int.Parse(textBox_hm_cells_min.Text), int.Parse(textBox_hm_cellls_max.Text));
                    ran_width     = random_width.NextDouble() * (int.Parse(textBox_width_max.Text) - int.Parse(textBox_width_min.Text)) + double.Parse(textBox_width_min.Text);
                    ran_thickness = random_thickness.NextDouble() * (int.Parse(textBox_thickness_max.Text) - int.Parse(textBox_thickness_min.Text)) + double.Parse(textBox_thickness_min.Text);
                    ran_l1        = random_l1.NextDouble() * (int.Parse(textBox_l1_max.Text) - int.Parse(textBox_l1_min.Text)) + double.Parse(textBox_l1_min.Text);
                    ran_l2        = random_l2.NextDouble() * (int.Parse(textBox_l2_max.Text) - int.Parse(textBox_l2_min.Text)) + double.Parse(textBox_l2_min.Text);
                    ran_l3        = random_l3.NextDouble() * (int.Parse(textBox_l3_max.Text) - int.Parse(textBox_l3_min.Text)) + double.Parse(textBox_l3_min.Text);
                    ran_F1        = random_F1.NextDouble() * (int.Parse(textBox_F1_max.Text) - int.Parse(textBox_F1_min.Text)) + double.Parse(textBox_F1_min.Text);
                    ran_F2        = random_F2.NextDouble() * (int.Parse(textBox_F2_max.Text) - int.Parse(textBox_F2_min.Text)) + double.Parse(textBox_F2_min.Text);
                    ran_F3        = random_F3.NextDouble() * (int.Parse(textBox_F3_max.Text) - int.Parse(textBox_F3_min.Text)) + double.Parse(textBox_F3_min.Text);
                }
                catch (Exception)
                {
                    Console.WriteLine("Input Format Error");
                    return;
                }


                m         = ran_m;
                width     = (double)(ran_width / 1000.0);
                thickness = (double)(ran_thickness / 1000.0);
                l1        = (double)(ran_l1 / 1000.0);
                l2        = (double)(ran_l2 / 1000.0);
                l3        = (double)(ran_l3 / 1000.0);

                F1 = (double)ran_F1;
                F2 = (double)ran_F2;
                F3 = (double)ran_F3;
                F3 = 0;

                l4          = l2;
                l1_         = l1 - 2 * width;
                l2_         = l2;
                l3_         = l3 + 2 * width;
                l4_         = l4;
                cell_length = l1 + l3;
                cell_height = l2 + width;


                #endregion



                Console.WriteLine(string.Format("{0},{1},{2},{3},{4},{5}", m, width, thickness, l1, l2, l3));

                #region geometrie
                Console.WriteLine("Start creating new Germetrie");

                try
                {
                    swModel = swApp.NewPart();
                }
                catch (Exception)
                {
                    Console.WriteLine("starting SolidWorks");
                    try
                    {
                        swApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application");
                    }
                    catch (Exception)
                    {
                        swApp         = new SldWorks();
                        swApp.Visible = false;
                    }

                    //get MaterialLib
                    strMaterialLib = swApp.GetExecutablePath() + "\\lang\\english\\sldmaterials\\solidworks materials.sldmat";

                    Console.WriteLine("SolidWorks successfully started");
                    j--;
                    continue;
                }

                swModel.Extension.SelectByID("前视基准面", "PLANE", 0, 0, 0, false, 1, null);
                swModel.InsertSketch2(true);
                #region sketch
                for (int i = 0; i < m; i++)
                {
                    if (i == 0)
                    {
                        swModel.SketchManager.CreateLine(0, 0, 0, l1 - width, 0, 0);
                        swModel.SketchManager.CreateLine(l1 - width, 0, 0, l1 - width, -l2, 0);
                        swModel.SketchManager.CreateLine(l1 - width, -l2, 0, l1 + l3 - width, -l2, 0);
                        swModel.SketchManager.CreateLine(l1 + l3 - width, -l2, 0, l1 + l3 - width, 0, 0);

                        swModel.SketchManager.CreateLine(0, 0, 0, 0, -width, 0);
                        swModel.SketchManager.CreateLine(0, -width, 0, l1_, -width, 0);
                        swModel.SketchManager.CreateLine(l1_, -width, 0, l1_, -(width + l2_), 0);
                        swModel.SketchManager.CreateLine(l1_, -(width + l2_), 0, l1_ + l3_, -(width + l2_), 0);
                        swModel.SketchManager.CreateLine(l1_ + l3_, -(width + l2_), 0, l1_ + l3_, -width, 0);
                    }
                    else
                    {
                        x_o  = i * cell_length - width;
                        y_o  = 0;
                        x_o_ = x_o + width;
                        y_o_ = y_o - width;

                        swModel.SketchManager.CreateLine(x_o, y_o, 0, x_o + l1, 0, 0);
                        swModel.SketchManager.CreateLine(x_o + l1, 0, 0, x_o + l1, -l2, 0);
                        swModel.SketchManager.CreateLine(x_o + l1, -l2, 0, x_o + l1 + l3, -l2, 0);
                        swModel.SketchManager.CreateLine(x_o + l1 + l3, -l2, 0, x_o + l1 + l3, 0, 0);

                        swModel.SketchManager.CreateLine(x_o_, y_o_, 0, x_o_ + l1_, y_o_, 0);
                        swModel.SketchManager.CreateLine(x_o_ + l1_, y_o_, 0, x_o_ + l1_, y_o_ - l2_, 0);
                        swModel.SketchManager.CreateLine(x_o_ + l1_, y_o_ - l2_, 0, x_o_ + l1_ + l3_, y_o_ - l2_, 0);
                        swModel.SketchManager.CreateLine(x_o_ + l1_ + l3_, y_o_ - l2_, 0, x_o_ + l1_ + l3_, y_o_, 0);
                    }
                }
                swModel.SketchManager.CreateLine(x_o_ + l1_ + l3_, y_o_, 0, x_o_ + l1_ + l3_, 0, 0);
                swModel.SketchManager.CreateLine(x_o_ + l1_ + l3_, 0, 0, x_o + l1 + l3, 0, 0);

                #endregion
                swModel.FeatureManager.FeatureExtrusion2(
                    true, false, false, 0, 0, thickness, 0, false, false, false, false, 0, 0, false, false, false, false, true, true, true, 0, 0, true
                    );

                swModel.SaveAsSilent("D:\\TUD\\7.Semeter\\SA\\SA_code\\c#\\W_Form_analyse_get_TrainingDaten\\Geometrie.sldprt", true);
                swApp.CloseAllDocuments(true);
                swApp.OpenDoc("D:\\TUD\\7.Semeter\\SA\\SA_code\\c#\\W_Form_analyse_get_TrainingDaten\\Geometrie.sldprt", (int)swOpenDocOptions_e.swOpenDocOptions_Silent);
                Console.WriteLine("Geometrie success");


                #endregion

                #region simulaiton
                string path_to_cosworks_dll = @"C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\Simulation\cosworks.dll";
                errors       = swApp.LoadAddIn(path_to_cosworks_dll);
                COSMOSObject = (CwAddincallback)swApp.GetAddInObject("SldWorks.Simulation");
                try
                {
                    COSMOSWORKS = (CosmosWorks)COSMOSObject.CosmosWorks;
                }
                catch (Exception)
                {
                    Console.WriteLine("something wrong in Simulaiton Add In, start a new one");
                    continue;
                }


                COSMOSWORKS = COSMOSObject.CosmosWorks;
                //Get active document
                ActDoc = (CWModelDoc)COSMOSWORKS.ActiveDoc;

                //Create new static study
                StudyMngr = (CWStudyManager)ActDoc.StudyManager;
                Study     = (CWStudy)StudyMngr.CreateNewStudy("static study", (int)swsAnalysisStudyType_e.swsAnalysisStudyTypeStatic, 0, out errCode);

                //Add materials
                SolidMgr  = Study.SolidManager;
                SolidComp = SolidMgr.GetComponentAt(0, out errCode);
                SolidBody = SolidComp.GetSolidBodyAt(0, out errCode);
                intStatus = SolidBody.SetLibraryMaterial(strMaterialLib, "AISI 1020");

                //fixed restraints
                LBCMgr = Study.LoadsAndRestraintsManager;

                swModel = (ModelDoc2)swApp.ActiveDoc;
                swModel.ShowNamedView2("", (int)swStandardViews_e.swIsometricView);

                selectionMgr = (SelectionMgr)swModel.SelectionManager;
                isSelected   = swModel.Extension.SelectByID2("", "FACE", 0, -width / 2.0, thickness / 2.0, false, 0, null, 0);
                if (isSelected)
                {
                    object      selectedFace = (object)selectionMgr.GetSelectedObject6(1, -1);
                    object[]    fixedFaces   = { selectedFace };
                    CWRestraint restraint    = (CWRestraint)LBCMgr.AddRestraint((int)swsRestraintType_e.swsRestraintTypeFixed, fixedFaces, null, out errCode);
                }
                swModel.ClearSelection2(true);

                //add force
                selectionMgr = (SelectionMgr)swModel.SelectionManager;
                isSelected   = swModel.Extension.SelectByID2("", "FACE", x_o + l1 + l3 + (width / 2.0), 0, thickness / 2.0, false, 0, null, 0);
                if (isSelected)
                {
                    object   selectedFace = (object)selectionMgr.GetSelectedObject6(1, -1);
                    object[] forceAdd     = { selectedFace };
                    selectionMgr = (SelectionMgr)swModel.SelectionManager;
                    swModel.Extension.SelectByID2("", "FACE", x_o + l1 + l3 + width, -(l4 + width) / 2.0, thickness / 2.0, false, 0, null, 0);
                    object   selectedFaceToForceDir = (object)selectionMgr.GetSelectedObject6(1, -1);
                    double[] distValue  = null;
                    double[] forceValue = null;
                    double[] Force      = { F2, F3, F1 };
                    cwForce = (CWForce)LBCMgr.AddForce3((int)swsForceType_e.swsForceTypeForceOrMoment, (int)swsSelectionType_e.swsSelectionFaceEdgeVertexPoint,
                                                        2, 0, 0, 0,
                                                        (distValue),
                                                        (forceValue),
                                                        false, true,
                                                        (int)swsBeamNonUniformLoadDef_e.swsTotalLoad,
                                                        0, 7, 0.0,
                                                        Force,
                                                        false, false,
                                                        (forceAdd),
                                                        (selectedFaceToForceDir),
                                                        false, out errCode); //i have tried to figure out these arguments for one day, keep them and dont't change them.
                                                                             //the way to check cwForce : cwForce.GetForceComponentValues()
                                                                             //ForceComponet: [int b1, // 1 if x-direction hat Force-komponent, else 0
                                                                             //                int b2, // 1 if y-direction hat Force-komponent, else 0
                                                                             //                int b3, // 1 if z-direction hat Force-komponent, else 0
                                                                             //                double d1, // Force-komponent in x
                                                                             //                double d2, // Force-komponent in y
                                                                             //                double d3 // Force-komponent in z
                                                                             //                          ]
                                                                             //PS: the definition of xyz seems like not the same as the global XYZ system in SW.
                    swModel.ClearSelection2(true);

                    //meshing
                    CWMesh CWMeshObj = default(CWMesh);
                    CWMeshObj            = Study.Mesh;
                    CWMeshObj.MesherType = (int)swsMesherType_e.swsMesherTypeStandard;
                    CWMeshObj.Quality    = (int)swsMeshQuality_e.swsMeshQualityDraft;
                    errCode   = Study.CreateMesh(0, MeshEleSize, MeshTol);
                    CWMeshObj = null;

                    //run analysis
                    errCode = Study.RunAnalysis();
                    if (errCode != 0)
                    {
                        Console.WriteLine(string.Format("RunAnalysis errCode = {0}", errCode));
                        Console.WriteLine(string.Format("RunAnalysis failed"));



                        swApp.CloseAllDocuments(true);
                        errors = swApp.UnloadAddIn(path_to_cosworks_dll);
                        Console.WriteLine(string.Format("ready to start a new one"));
                        continue;
                    }
                    Console.WriteLine("RunAnalysis successed, ready to get results");

                    //get results
                    CWFeatobj = Study.Results;
                    //get max von Mieses stress
                    Stress = (object[])CWFeatobj.GetMinMaxStress((int)swsStressComponent_e.swsStressComponentVON,
                                                                 0, 0, null,
                                                                 (int)swsStrengthUnit_e.swsStrengthUnitNewtonPerSquareMillimeter,
                                                                 out errCode);
                    maxStress = (float)Stress[3]; //Stress: {node_with_minimum_stress, minimum_stress, node_with_maximum_stress, maximum_stress}
                    Console.WriteLine(maxStress);

                    /*
                     * if (maxStress >= 351.6)
                     * {
                     *  Console.WriteLine("out of yield stress, start a new example");
                     *  errors = swApp.UnloadAddIn(path_to_cosworks_dll);
                     *  swApp.CloseAllDocuments(true);
                     *  j--;
                     *  continue;
                     * }
                     */
                    //get max URES displacement
                    Disp = (object[])CWFeatobj.GetMinMaxDisplacement((int)swsDisplacementComponent_e.swsDisplacementComponentURES,
                                                                     0, null,
                                                                     (int)swsLinearUnit_e.swsLinearUnitMillimeters,
                                                                     out errCode);
                    maxDisp   = (float)Disp[3]; //Disp: {node_with_minimum_displacement, minimum_displacement, node_with_maximum_displacement, maximum_displacement}
                    CWFeatobj = null;
                    Console.WriteLine(string.Format("max Displacement: {0:f4} mm", maxDisp));


                    //output to Excel
                    exlSheet.Cells[j + 2, 1]  = m;
                    exlSheet.Cells[j + 2, 2]  = width * 1000;
                    exlSheet.Cells[j + 2, 3]  = thickness * 1000;
                    exlSheet.Cells[j + 2, 4]  = l1 * 1000;
                    exlSheet.Cells[j + 2, 5]  = l2 * 1000;
                    exlSheet.Cells[j + 2, 6]  = l3 * 1000;
                    exlSheet.Cells[j + 2, 7]  = F1;
                    exlSheet.Cells[j + 2, 8]  = F2;
                    exlSheet.Cells[j + 2, 9]  = F3;
                    exlSheet.Cells[j + 2, 10] = maxStress;
                    exlSheet.Cells[j + 2, 11] = maxDisp;
                    if (j % 5 == 0)
                    {
                        exlBook.Save();//C:\Users\Zhao\Documents\工作簿1.xlsx
                    }

                    errors = swApp.UnloadAddIn(path_to_cosworks_dll);
                    swApp.CloseAllDocuments(true);
                }
                #endregion
            }
            exlBook.SaveCopyAs("D:\\TUD\\7.Semeter\\SA\\SA_code\\c#\\W_Form_analyse_get_TrainingDaten\\W_Form_simulationDaten_" + GetTimeStamp() + "_F3=0" + ".xlsx");
            exlBook.Save();//C:\Users\zhaojie\Documents\工作簿1.xlsx
            exlApp.Quit();
        }
コード例 #8
0
        private void Button_generateFEM_Click(object sender, RoutedEventArgs e)
        {
            #region Variable definition

            int              m;     //how many cells
            int              Count; // how many data
            double           width, thickness, l1, l2, l3, F1, F2, F3;
            double           l4, l1_, l2_, l3_, l4_, cell_length, cell_height;
            double           x_o            = 0.0;
            double           y_o            = 0.0;
            double           x_o_           = 0.0;
            double           y_o_           = 0.0;
            const double     MeshEleSize    = 2.0;
            const double     MeshTol        = 0.1;
            string           strMaterialLib = null;
            object[]         Disp           = null;
            object[]         Stress         = null;
            ModelDoc2        swModel        = null;
            SelectionMgr     selectionMgr   = null;
            CosmosWorks      COSMOSWORKS    = null;
            CwAddincallback  COSMOSObject   = default(CwAddincallback);
            CWModelDoc       ActDoc         = default(CWModelDoc);
            CWStudyManager   StudyMngr      = default(CWStudyManager);
            CWStudy          Study          = default(CWStudy);
            CWSolidManager   SolidMgr       = default(CWSolidManager);
            CWSolidBody      SolidBody      = default(CWSolidBody);
            CWSolidComponent SolidComp      = default(CWSolidComponent);


            CWForce cwForce = default(CWForce);
            CWLoadsAndRestraintsManager LBCMgr = default(CWLoadsAndRestraintsManager);
            CWResults CWFeatobj = default(CWResults);
            bool      isSelected;
            float     maxDisp   = 0.0f;
            float     maxStress = 0.0f;
            int       intStatus = 0;
            int       errors    = 0;
            int       errCode   = 0;
            int       warnings  = 0;



            int ran_m, ran_width, ran_thickness, ran_l1, ran_l2, ran_l3, ran_F1, ran_F2, ran_F3;
            Excel.Application exlApp;
            Excel.Workbook    exlBook;
            Excel.Worksheet   exlSheet;



            #endregion

            #region read data from UI
            try
            {
                m         = int.Parse(textBox_hm_cells.Text);
                width     = double.Parse(textBox_width.Text) / 1000.0;
                thickness = double.Parse(textBox_thickness.Text) / 1000.0;
                l1        = double.Parse(textBox_l1.Text) / 1000.0;
                l2        = double.Parse(textBox_l2.Text) / 1000.0;
                l3        = double.Parse(textBox_l3.Text) / 1000.0;
                F1        = double.Parse(textBox_F1.Text);
                F2        = double.Parse(textBox_F2.Text);
                F3        = double.Parse(textBox_F3.Text);
            }
            catch (Exception)
            {
                MessageBox.Show("input format error, check input data");
                return;
            }

            l4          = l2;
            l1_         = l1 - 2 * width;
            l2_         = l2;
            l3_         = l3 + 2 * width;
            l4_         = l4;
            cell_length = l1 + l3;
            cell_height = l2 + width;
            #endregion

            #region geometrie
            Console.WriteLine("Start creating new Germetrie");
            swModel = swApp.NewPart();
            swModel.Extension.SelectByID("前视基准面", "PLANE", 0, 0, 0, false, 1, null);
            swModel.InsertSketch2(true);
            #region sketch
            for (int i = 0; i < m; i++)
            {
                if (i == 0)
                {
                    swModel.SketchManager.CreateLine(0, 0, 0, l1 - width, 0, 0);
                    swModel.SketchManager.CreateLine(l1 - width, 0, 0, l1 - width, -l2, 0);
                    swModel.SketchManager.CreateLine(l1 - width, -l2, 0, l1 + l3 - width, -l2, 0);
                    swModel.SketchManager.CreateLine(l1 + l3 - width, -l2, 0, l1 + l3 - width, 0, 0);

                    swModel.SketchManager.CreateLine(0, 0, 0, 0, -width, 0);
                    swModel.SketchManager.CreateLine(0, -width, 0, l1_, -width, 0);
                    swModel.SketchManager.CreateLine(l1_, -width, 0, l1_, -(width + l2_), 0);
                    swModel.SketchManager.CreateLine(l1_, -(width + l2_), 0, l1_ + l3_, -(width + l2_), 0);
                    swModel.SketchManager.CreateLine(l1_ + l3_, -(width + l2_), 0, l1_ + l3_, -width, 0);
                }
                else
                {
                    x_o  = i * cell_length - width;
                    y_o  = 0;
                    x_o_ = x_o + width;
                    y_o_ = y_o - width;

                    swModel.SketchManager.CreateLine(x_o, y_o, 0, x_o + l1, 0, 0);
                    swModel.SketchManager.CreateLine(x_o + l1, 0, 0, x_o + l1, -l2, 0);
                    swModel.SketchManager.CreateLine(x_o + l1, -l2, 0, x_o + l1 + l3, -l2, 0);
                    swModel.SketchManager.CreateLine(x_o + l1 + l3, -l2, 0, x_o + l1 + l3, 0, 0);

                    swModel.SketchManager.CreateLine(x_o_, y_o_, 0, x_o_ + l1_, y_o_, 0);
                    swModel.SketchManager.CreateLine(x_o_ + l1_, y_o_, 0, x_o_ + l1_, y_o_ - l2_, 0);
                    swModel.SketchManager.CreateLine(x_o_ + l1_, y_o_ - l2_, 0, x_o_ + l1_ + l3_, y_o_ - l2_, 0);
                    swModel.SketchManager.CreateLine(x_o_ + l1_ + l3_, y_o_ - l2_, 0, x_o_ + l1_ + l3_, y_o_, 0);
                }
            }
            swModel.SketchManager.CreateLine(x_o_ + l1_ + l3_, y_o_, 0, x_o_ + l1_ + l3_, 0, 0);
            swModel.SketchManager.CreateLine(x_o_ + l1_ + l3_, 0, 0, x_o + l1 + l3, 0, 0);

            #endregion
            swModel.FeatureManager.FeatureExtrusion2(
                true, false, false, 0, 0, thickness, 0, false, false, false, false, 0, 0, false, false, false, false, true, true, true, 0, 0, true
                );

            swModel.SaveAsSilent("D:\\TUD\\7.Semeter\\SA\\SA_code\\c#\\W_Form_analyse_FEM_NN_GUI\\Geometrie.sldprt", true);
            swApp.CloseAllDocuments(true);
            swApp.OpenDoc("D:\\TUD\\7.Semeter\\SA\\SA_code\\c#\\W_Form_analyse_FEM_NN_GUI\\Geometrie.sldprt", (int)swOpenDocOptions_e.swOpenDocOptions_Silent);
            Console.WriteLine("Geometrie success");


            #endregion

            #region simulaiton
            string path_to_cosworks_dll = @"C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\Simulation\cosworks.dll";
            errors       = swApp.LoadAddIn(path_to_cosworks_dll);
            COSMOSObject = (CwAddincallback)swApp.GetAddInObject("SldWorks.Simulation");
            try
            {
                COSMOSWORKS = (CosmosWorks)COSMOSObject.CosmosWorks;
            }
            catch (Exception)
            {
                Console.WriteLine("something wrong in Simulaiton Add In, start a new one");
                swApp.CloseAllDocuments(true);

                return;
            }


            COSMOSWORKS = COSMOSObject.CosmosWorks;
            //Get active document
            ActDoc = (CWModelDoc)COSMOSWORKS.ActiveDoc;

            //Create new static study
            StudyMngr = (CWStudyManager)ActDoc.StudyManager;
            Study     = (CWStudy)StudyMngr.CreateNewStudy("static study", (int)swsAnalysisStudyType_e.swsAnalysisStudyTypeStatic, 0, out errCode);

            //Add materials
            //get MaterialLib
            strMaterialLib = swApp.GetExecutablePath() + "\\lang\\english\\sldmaterials\\solidworks materials.sldmat";
            SolidMgr       = Study.SolidManager;
            SolidComp      = SolidMgr.GetComponentAt(0, out errCode);
            SolidBody      = SolidComp.GetSolidBodyAt(0, out errCode);
            intStatus      = SolidBody.SetLibraryMaterial(strMaterialLib, "AISI 1020");

            //fixed restraints
            LBCMgr = Study.LoadsAndRestraintsManager;

            swModel = (ModelDoc2)swApp.ActiveDoc;
            swModel.ShowNamedView2("", (int)swStandardViews_e.swIsometricView);

            selectionMgr = (SelectionMgr)swModel.SelectionManager;
            isSelected   = swModel.Extension.SelectByID2("", "FACE", 0, -width / 2.0, thickness / 2.0, false, 0, null, 0);
            if (isSelected)
            {
                object      selectedFace = (object)selectionMgr.GetSelectedObject6(1, -1);
                object[]    fixedFaces   = { selectedFace };
                CWRestraint restraint    = (CWRestraint)LBCMgr.AddRestraint((int)swsRestraintType_e.swsRestraintTypeFixed, fixedFaces, null, out errCode);
            }
            swModel.ClearSelection2(true);

            //add force
            selectionMgr = (SelectionMgr)swModel.SelectionManager;
            isSelected   = swModel.Extension.SelectByID2("", "FACE", x_o + l1 + l3 + (width / 2.0), 0, thickness / 2.0, false, 0, null, 0);
            if (isSelected)
            {
                object   selectedFace = (object)selectionMgr.GetSelectedObject6(1, -1);
                object[] forceAdd     = { selectedFace };
                selectionMgr = (SelectionMgr)swModel.SelectionManager;
                swModel.Extension.SelectByID2("", "FACE", x_o + l1 + l3 + width, -(l4 + width) / 2.0, thickness / 2.0, false, 0, null, 0);
                object   selectedFaceToForceDir = (object)selectionMgr.GetSelectedObject6(1, -1);
                double[] distValue  = null;
                double[] forceValue = null;
                double[] Force      = { F2, F3, F1 };
                cwForce = (CWForce)LBCMgr.AddForce3((int)swsForceType_e.swsForceTypeForceOrMoment, (int)swsSelectionType_e.swsSelectionFaceEdgeVertexPoint,
                                                    2, 0, 0, 0,
                                                    (distValue),
                                                    (forceValue),
                                                    false, true,
                                                    (int)swsBeamNonUniformLoadDef_e.swsTotalLoad,
                                                    0, 7, 0.0,
                                                    Force,
                                                    false, false,
                                                    (forceAdd),
                                                    (selectedFaceToForceDir),
                                                    false, out errCode); //i have tried to figure out these arguments for one day, keep them and dont't change them.
                                                                         //the way to check cwForce : cwForce.GetForceComponentValues()
                                                                         //ForceComponet: [int b1, // 1 if x-direction hat Force-komponent, else 0
                                                                         //                int b2, // 1 if y-direction hat Force-komponent, else 0
                                                                         //                int b3, // 1 if z-direction hat Force-komponent, else 0
                                                                         //                double d1, // Force-komponent in x
                                                                         //                double d2, // Force-komponent in y
                                                                         //                double d3 // Force-komponent in z
                                                                         //                          ]
                                                                         //PS: the definition of xyz seems like not the same as the global XYZ system in SW.
                swModel.ClearSelection2(true);

                //meshing
                CWMesh CWMeshObj = default(CWMesh);
                CWMeshObj            = Study.Mesh;
                CWMeshObj.MesherType = (int)swsMesherType_e.swsMesherTypeStandard;
                CWMeshObj.Quality    = (int)swsMeshQuality_e.swsMeshQualityDraft;
                errCode   = Study.CreateMesh(0, MeshEleSize, MeshTol);
                CWMeshObj = null;

                //run analysis
                errCode = Study.RunAnalysis();
                if (errCode != 0)
                {
                    Console.WriteLine(string.Format("RunAnalysis errCode = {0}", errCode));
                    Console.WriteLine(string.Format("RunAnalysis failed"));

                    errors = swApp.UnloadAddIn(path_to_cosworks_dll);
                    swApp.CloseAllDocuments(true);
                    Console.WriteLine(string.Format("please start a new one"));
                    return;
                }
                Console.WriteLine("RunAnalysis successed, ready to get results");

                //get results
                CWFeatobj = Study.Results;
                //get max von Mieses stress
                Stress = (object[])CWFeatobj.GetMinMaxStress((int)swsStressComponent_e.swsStressComponentVON,
                                                             0, 0, null,
                                                             (int)swsStrengthUnit_e.swsStrengthUnitNewtonPerSquareMillimeter,
                                                             out errCode);
                maxStress = (float)Stress[3]; //Stress: {node_with_minimum_stress, minimum_stress, node_with_maximum_stress, maximum_stress}
                Console.WriteLine(maxStress);
                if (maxStress >= 351.6)
                {
                    Console.WriteLine("out of yield stress, start a new example");
                    errors = swApp.UnloadAddIn(path_to_cosworks_dll);
                    swApp.CloseAllDocuments(true);
                    textBox_FEM_result.Text = "out of yield stress";
                    return;
                }
                //get max URES displacement
                Disp = (object[])CWFeatobj.GetMinMaxDisplacement((int)swsDisplacementComponent_e.swsDisplacementComponentURES,
                                                                 0, null,
                                                                 (int)swsLinearUnit_e.swsLinearUnitMillimeters,
                                                                 out errCode);
                maxDisp   = (float)Disp[3]; //Disp: {node_with_minimum_displacement, minimum_displacement, node_with_maximum_displacement, maximum_displacement}
                CWFeatobj = null;
                Console.WriteLine(string.Format("max Displacement: {0:f4} mm", maxDisp));
                textBox_FEM_result.Text = maxDisp.ToString();
            }
            else
            {
                Console.WriteLine("not selected");
            }
            #endregion
            errors = swApp.UnloadAddIn(path_to_cosworks_dll);
            swApp.CloseAllDocuments(true);
        }
コード例 #9
0
        /// <summary>
        /// 当结果返回True 时 表示两个零件不一样,结果false时表示 两个零件一样
        /// </summary>
        /// <param name="sendTocustomer"></param>
        /// <param name="localModel"></param>
        /// <returns></returns>
        public bool CheckTwoParts(string sendTocustomer, string localModel)
        {
            bool different1 = false;

            bool different2 = false;

            swApp = ConnectToSolidWorks();
            // swApp = ConnectToSolidWorks();

            //加载参考关系零件
            swApp.SetUserPreferenceIntegerValue((int)swUserPreferenceIntegerValue_e.swLoadExternalReferences, (int)swLoadExternalReferences_e.swLoadExternalReferences_ChangedOnly);

            //后台模式 前台不显示界面

            swApp.EnableBackgroundProcessing = true;

            //禁止记录文件路径
            swApp.SetUserPreferenceToggle((int)swUserPreferenceToggle_e.swLockRecentDocumentsList, true);

            swApp.OpenDoc(localModel, 1);

            swApp.OpenDoc(sendTocustomer, 1);

            ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;

            string LocalPath = System.IO.Directory.GetParent(swModel.GetPathName()).ToString();

            string tempAssembly = swApp.GetUserPreferenceStringValue((int)swUserPreferenceStringValue_e.swDefaultTemplateAssembly);

            AssemblyDoc assemblyDoc = (AssemblyDoc)swApp.NewDocument(tempAssembly, 0, 0, 0);

            Component2 insertComponentSendtoCustomer = assemblyDoc.AddComponent5(sendTocustomer, 0, "", false, "", 0, 0, 0);
            Component2 insertComponentLocal          = assemblyDoc.AddComponent5(localModel, 0, "", false, "", 0, 0, 0);

            string sendSelect  = insertComponentSendtoCustomer.GetSelectByIDString();
            string localSelect = insertComponentLocal.GetSelectByIDString();

            swModel = (ModelDoc2)swApp.ActiveDoc;

            bool b1 = swModel.Extension.SelectByID2("Point1@Origin" + "@" + sendSelect, "EXTSKETCHPOINT", 0, 0, 0, false, 0, null, 0);
            bool b2 = swModel.Extension.SelectByID2("Point1@Origin" + "@" + localSelect, "EXTSKETCHPOINT", 0, 0, 0, true, 0, null, 0);
            int  longstatus;

            Mate2 mate2 = assemblyDoc.AddMate5(20, -1, false, 0, 0.001, 0.001, 0.001, 0.001, 0, 0, 0, false, false, 0, out longstatus);

            swModel = (ModelDoc2)swApp.ActiveDoc;

            swModel.SaveAs(LocalPath + @"\TopCheck.sldasm");

            //不显示特征树
            //swModel.Extension.HideFeatureManager(true);

            swModel.ClearSelection2(true);
            //swModel.FeatureManager.ViewFeatures = false;

            //FeatureManager featureManager = swModel.FeatureManager;

            //禁用特征树
            //featureManager.EnableFeatureTree = false;

            // swModel.FeatureManager.EnableFeatureTreeWindow = false;

            #region first join

            Component2        sendToCustomerBodies     = default(Component2);
            List <Component2> sendToCustomerBodiesList = new List <Component2>();

            object swFaceOrPlane = default(object);

            assemblyDoc.InsertNewVirtualPart(swFaceOrPlane, out sendToCustomerBodies);

            sendToCustomerBodies.Select(true);

            assemblyDoc.FixComponent();
            sendToCustomerBodies.Select(true);
            assemblyDoc.EditPart();

            insertComponentSendtoCustomer.Select(false);
            insertComponentLocal.Select(true);

            assemblyDoc.InsertJoin2(false, false);

            swModel = (ModelDoc2)swApp.ActiveDoc;
            swModel.BreakAllExternalReferences();

            object[] splits = sendToCustomerBodies.Name2.Split('^');
            // string compName = System.IO.Directory.GetParent(swModel.GetPathName()) + "\\" + splits[0];
            string compName = System.IO.Directory.GetParent(swModel.GetPathName()) + "\\" + "localBodies-1";

            ModelDoc2 compModel = default(ModelDoc2);
            compModel = (ModelDoc2)sendToCustomerBodies.GetModelDoc();

            if (compModel.GetType() == (int)swDocumentTypes_e.swDocPART)
            {
                compName = compName + ".sldprt";
            }
            else
            {
                compName = compName + ".sldasm";
            }

            bool ret;

            ret = sendToCustomerBodies.SaveVirtualComponent(compName);

            sendToCustomerBodiesList.Add(sendToCustomerBodies);

            insertComponentSendtoCustomer.Select(false);

            swModel = (ModelDoc2)sendToCustomerBodies.GetModelDoc2();

            #region 获取所有零件中的零件,每一个实体做一次反切

            List <string> bodyNamesCustomer = new List <string>();

            PartDoc swPart = null;
            object  vBody;
            swPart = (PartDoc)swModel;
            // Solid bodies
            object[] vBodyArr = null;
            Body2    swBody   = default(Body2);

            MathTransform swMathTrans = null;
            vBodyArr = (object[])swPart.GetBodies2((int)swBodyType_e.swSolidBody, true);

            if ((vBodyArr != null))
            {
                // Debug.Print("  Number of solid bodies: " + vBodyArr.Length);

                foreach (object vBody_loopVariable in vBodyArr)
                {
                    vBody  = vBody_loopVariable;
                    swBody = (Body2)vBody;

                    string[] vConfigName = null;
                    vConfigName = (string[])swModel.GetConfigurationNames();
                    string sMatDB   = "";
                    string sMatName = swBody.GetMaterialPropertyName("", out sMatDB);

                    //bRet = swBody.RemoveMaterialProperty((int)swInConfigurationOpts_e.swAllConfiguration, (vConfigName));

                    //Debug.Print("Body--> " + swBody.Name + " " + "");

                    bodyNamesCustomer.Add(swBody.Name);
                }
            }

            //如果实体数量大于1,则继续新建对应数量的join 实体。

            OnlyKeepNamedBody(bodyNamesCustomer[0], sendToCustomerBodies.GetSelectByIDString(), assemblyDoc, sendToCustomerBodies, insertComponentSendtoCustomer, ref different1);

            if (bodyNamesCustomer.Count > 1)
            {
                assemblyDoc.EditAssembly();

                for (int i = 0; i < bodyNamesCustomer.Count - 1; i++)
                {
                    Component2 returnpart = default(Component2);
                    var        partSelect = CreateNewJoinPart(assemblyDoc, insertComponentSendtoCustomer, insertComponentLocal, swModel, "localBodies-" + (i + 2), out returnpart);
                    sendToCustomerBodiesList.Add(returnpart);

                    OnlyKeepNamedBody(bodyNamesCustomer[i + 1], partSelect, assemblyDoc, returnpart, insertComponentSendtoCustomer, ref different1);
                }
            }
            // boolstatus = Part.Extension.SelectByID2("Join1[2]@localBodies-1@TopCheck", "SOLIDBODY", 0, 0, 0, True, 0, Nothing, 0)
            //Dim myFeature As Object
            //Set myFeature = Part.FeatureManager.InsertDeleteBody2(True)

            #endregion 获取所有零件中的零件,每一个实体做一次反切

            //assemblyDoc.InsertCavity4(0, 0, 0, true, 1, -1);
            Feature theFeature;

            //theFeature = swModel.FeatureByPositionReverse(0);

            //if (theFeature.Name.Contains("Cavity"))
            //{
            //    //theFeature.Select(true);

            //    swModel = (ModelDoc2)swApp.ActiveDoc;

            //    bool b = swModel.Extension.SelectByID2(theFeature.Name + "@" + sendToCustomerBodies.GetSelectByIDString(), "BODYFEATURE", 0, 0, 0, false, 0, null, 0);

            //    swModel.BreakAllExternalReferences();
            //    different1 = true;
            //    //JoinPart1 留下的: 发给客户的没有此部分。 而本地零件中有
            //}
            //else
            //{
            //    //无法Join时表示 全切了。
            //    swModel = (ModelDoc2)swApp.ActiveDoc;

            //    bool b = swModel.Extension.SelectByID2(theFeature.Name + "@" + sendToCustomerBodies.GetSelectByIDString(), "BODYFEATURE", 0, 0, 0, false, 0, null, 0);

            //    swModel.EditSuppress();
            //}
            //sendToCustomerBodies.Select(true);

            assemblyDoc.EditAssembly();

            #endregion first join

            #region sercond join2

            Component2        localBodies     = default(Component2);
            List <Component2> LocalBodiesList = new List <Component2>();
            assemblyDoc.InsertNewVirtualPart(swFaceOrPlane, out localBodies);

            localBodies.Select(true);

            assemblyDoc.FixComponent();
            localBodies.Select(true);
            assemblyDoc.EditPart();

            insertComponentSendtoCustomer.Select(false);
            insertComponentLocal.Select(true);

            assemblyDoc.InsertJoin2(false, false);

            swModel = (ModelDoc2)swApp.ActiveDoc;
            swModel.BreakAllExternalReferences();

            splits = localBodies.Name2.Split('^');
            // string compName = System.IO.Directory.GetParent(swModel.GetPathName()) + "\\" + splits[0];
            compName = System.IO.Directory.GetParent(swModel.GetPathName()) + "\\" + "sendToCustomerBodies-1";

            compModel = default(ModelDoc2);
            compModel = (ModelDoc2)localBodies.GetModelDoc();

            if (compModel.GetType() == (int)swDocumentTypes_e.swDocPART)
            {
                compName = compName + ".sldprt";
            }
            else
            {
                compName = compName + ".sldasm";
            }

            ret = localBodies.SaveVirtualComponent(compName);
            LocalBodiesList.Add(localBodies);
            insertComponentLocal.Select(false);

            swModel = (ModelDoc2)localBodies.GetModelDoc2();

            #region 获取所有零件中的零件,每一个实体做一次反切

            List <string> bodyNamesLocal = new List <string>();

            PartDoc swPart2 = null;
            object  vBody2;
            swPart2 = (PartDoc)swModel;
            // Solid bodies
            object[] vBodyArr2 = null;
            Body2    swBody2   = default(Body2);

            MathTransform swMathTrans2 = null;
            vBodyArr2 = (object[])swPart2.GetBodies2((int)swBodyType_e.swSolidBody, true);

            if ((vBodyArr2 != null))
            {
                // Debug.Print("  Number of solid bodies: " + vBodyArr.Length);

                foreach (object vBody_loopVariable in vBodyArr2)
                {
                    vBody2  = vBody_loopVariable;
                    swBody2 = (Body2)vBody2;

                    string[] vConfigName = null;
                    vConfigName = (string[])swModel.GetConfigurationNames();
                    string sMatDB   = "";
                    string sMatName = swBody2.GetMaterialPropertyName("", out sMatDB);

                    //bRet = swBody.RemoveMaterialProperty((int)swInConfigurationOpts_e.swAllConfiguration, (vConfigName));

                    bodyNamesLocal.Add(swBody2.Name);
                }
            }

            //如果实体数量大于1,则继续新建对应数量的join 实体。

            OnlyKeepNamedBody(bodyNamesLocal[0], localBodies.GetSelectByIDString(), assemblyDoc, localBodies, insertComponentLocal, ref different2);

            if (bodyNamesLocal.Count > 1)
            {
                assemblyDoc.EditAssembly();

                for (int i = 0; i < bodyNamesLocal.Count - 1; i++)
                {
                    Component2 returnpart = default(Component2);
                    var        partSelect = CreateNewJoinPart(assemblyDoc, insertComponentSendtoCustomer, insertComponentLocal, swModel, "sendToCustomerBodies-" + (i + 2), out returnpart);
                    LocalBodiesList.Add(returnpart);
                    OnlyKeepNamedBody(bodyNamesLocal[i + 1], partSelect, assemblyDoc, returnpart, insertComponentLocal, ref different2);
                }
            }
            // boolstatus = Part.Extension.SelectByID2("Join1[2]@localBodies-1@TopCheck", "SOLIDBODY", 0, 0, 0, True, 0, Nothing, 0)
            //Dim myFeature As Object
            //Set myFeature = Part.FeatureManager.InsertDeleteBody2(True)

            #endregion 获取所有零件中的零件,每一个实体做一次反切

            //assemblyDoc.InsertCavity4(0, 0, 0, true, 1, -1);

            //theFeature = swModel.FeatureByPositionReverse(0);

            //swModel = (ModelDoc2)localBodies.GetModelDoc2();

            //theFeature = swModel.FeatureByPositionReverse(0);

            //if (theFeature.Name.Contains("Cavity"))
            //{
            //    //theFeature.Select(true);

            //    swModel = (ModelDoc2)swApp.ActiveDoc;

            //    bool b = swModel.Extension.SelectByID2(theFeature.Name + "@" + localBodies.GetSelectByIDString(), "BODYFEATURE", 0, 0, 0, false, 0, null, 0);

            //    swModel.BreakAllExternalReferences();
            //    different2 = true;
            //    //JoinPart2 留下的: 发给客户的有此部分。 而本地零件中没有
            //}
            //else
            //{
            //    //无法Join时表示 全切了。
            //    swModel = (ModelDoc2)swApp.ActiveDoc;

            //    bool b = swModel.Extension.SelectByID2(theFeature.Name + "@" + sendToCustomerBodies.GetSelectByIDString(), "BODYFEATURE", 0, 0, 0, false, 0, null, 0);

            //    swModel.EditSuppress();
            //}

            //localBodies.Select(true);

            //assemblyDoc.EditAssembly();

            #endregion sercond join2

            #region joinPartPublic

            Component2 publicBodies = default(Component2);

            assemblyDoc.InsertNewVirtualPart(swFaceOrPlane, out publicBodies);

            publicBodies.Select(true);

            assemblyDoc.FixComponent();
            publicBodies.Select(true);
            assemblyDoc.EditPart();

            insertComponentSendtoCustomer.Select(false);
            insertComponentLocal.Select(true);

            assemblyDoc.InsertJoin2(false, false);

            swModel = (ModelDoc2)swApp.ActiveDoc;
            swModel.BreakAllExternalReferences();

            splits = publicBodies.Name2.Split('^');
            // string compName = System.IO.Directory.GetParent(swModel.GetPathName()) + "\\" + splits[0];
            compName = System.IO.Directory.GetParent(swModel.GetPathName()) + "\\" + "publicBodies";

            compModel = default(ModelDoc2);
            compModel = (ModelDoc2)publicBodies.GetModelDoc();

            if (compModel.GetType() == (int)swDocumentTypes_e.swDocPART)
            {
                compName = compName + ".sldprt";
            }
            else
            {
                compName = compName + ".sldasm";
            }

            ret = publicBodies.SaveVirtualComponent(compName);

            swModel.ClearSelection();

            foreach (var item in sendToCustomerBodiesList)
            {
                item.Select(false);

                assemblyDoc.InsertCavity4(0, 0, 0, true, 1, -1);

                theFeature = (Feature)swModel.FeatureByPositionReverse(0);

                swModel    = (ModelDoc2)publicBodies.GetModelDoc2();
                theFeature = (Feature)swModel.FeatureByPositionReverse(0);

                if (theFeature.Name.Contains("Cavity"))
                {
                    //theFeature.Select(true);

                    swModel = (ModelDoc2)swApp.ActiveDoc;

                    bool b = swModel.Extension.SelectByID2(theFeature.Name + "@" + publicBodies.GetSelectByIDString(), "BODYFEATURE", 0, 0, 0, false, 0, null, 0);

                    swModel.BreakAllExternalReferences();

                    //joinPartPublic 留下的: 发给客户的有此部分。 而本地零件中没有
                }
                else
                {
                }
            }
            foreach (var item in LocalBodiesList)
            {
                item.Select(false);

                assemblyDoc.InsertCavity4(0, 0, 0, true, 1, -1);

                theFeature = (Feature)swModel.FeatureByPositionReverse(0);

                swModel    = (ModelDoc2)publicBodies.GetModelDoc2();
                theFeature = (Feature)swModel.FeatureByPositionReverse(0);

                if (theFeature.Name.Contains("Cavity"))
                {
                    //theFeature.Select(true);

                    swModel = (ModelDoc2)swApp.ActiveDoc;

                    bool b = swModel.Extension.SelectByID2(theFeature.Name + "@" + publicBodies.GetSelectByIDString(), "BODYFEATURE", 0, 0, 0, false, 0, null, 0);

                    swModel.BreakAllExternalReferences();

                    //joinPartPublic 留下的: 发给客户的有此部分。 而本地零件中没有
                }
                else
                {
                }
            }

            publicBodies.Select(true);

            assemblyDoc.EditAssembly();

            #endregion joinPartPublic

            foreach (var item in sendToCustomerBodiesList)
            {
                item.Select(false);
                setColour(Color.Red);
            }
            foreach (var item in LocalBodiesList)
            {
                item.Select(false);
                setColour(Color.Blue);
            }

            swModel = (ModelDoc2)swApp.ActiveDoc;
            swModel.ClearSelection2(true);

            insertComponentLocal.Select(false);
            insertComponentSendtoCustomer.Select(true);
            swModel.HideComponent2();
            swModel.ClearSelection2(true);

            publicBodies.Select(false);
            assemblyDoc.SetComponentTransparent(true);
            setColour(Color.Green);
            swModel.EditRebuild3();
            swModel.Save();

            swModel.SaveAs3(LocalPath + @"\01_CheckResult.sldprt", 0, 0);

            swApp.CloseDoc("TopCheck.sldasm");
            swApp.CloseAllDocuments(true);
            swApp.OpenDoc(LocalPath + @"\01_CheckResult.sldprt", 1);
            swModel = (ModelDoc2)swApp.ActiveDoc;
            swModel.ShowNamedView2("*Isometric", 7);

            swModel.ViewZoomtofit2();

            swApp.SetUserPreferenceToggle((int)swUserPreferenceToggle_e.swLockRecentDocumentsList, false);
            try
            {
                System.IO.File.Delete(LocalPath + @"\TopCheck.sldasm");
                System.IO.File.Delete(LocalPath + @"\localBodies.sldprt");
                System.IO.File.Delete(LocalPath + @"\sendToCustomerBodies.sldprt");
                System.IO.File.Delete(LocalPath + @"\publicBodies.sldprt");
            }
            catch (Exception)
            {
            }

            //第二次反向剪切

            swApp.CloseDoc(sendTocustomer);
            swApp.CloseDoc(localModel);

            swModel.FeatureManager.EnableFeatureTree = true;

            swApp.SetUserPreferenceIntegerValue((int)swUserPreferenceIntegerValue_e.swLoadExternalReferences, 2);

            if (different1 == false && different2 == false)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }