• NXOpen批量创建部件


    C++ 2010

     //获取UI值和路径
    void CreateNewComponent::GetUIValueandPath()
     {
        try
        {
      NewName.clear();
      NewNamePath.clear();
      selectBodys.clear();

      //获取显示部件的全路径
      partfullpath1 = basedisplaypart->FullPath();
      //theSession->ListingWindow()->WriteLine("显示部件全路径:"+partfullpath1);

      //分割字符串得到显示部件名
      string basedisplaypartName = NameOrPath(partfullpath1.GetLocaleText(), 1);
      //theSession->ListingWindow()->WriteLine("显示部件的名字:"+basedisplaypartName);

      //分割字符串得到模号
      int sta = (int)basedisplaypartName.find_first_of("-");//找到工作部件全路径名中的最后一个杠
      displaypartMoldNo = basedisplaypartName.substr(0, sta);//分割
      //theSession->ListingWindow()->WriteLine("模号:"+displaypartMoldNo);

      //分割字符串得到显示部件路径
      PartPath1 = NameOrPath(partfullpath1.GetLocaleText(), 2);
      //theSession->ListingWindow()->WriteLine("显示部件路径:"+PartPath1);

      //获取模号
      PropertyList *stringMoldNoProps = stringMoldNo->GetProperties();
      NXString theMoldNo = stringMoldNoProps->GetString("Value");
      delete stringMoldNoProps;
      stringMoldNoProps = NULL; 

      //获取工件号
      PropertyList *stringNameProps = stringName->GetProperties();
      NXString theName = stringNameProps->GetString("Value");
      delete stringNameProps;
      stringNameProps = NULL; 

      //获取起始工件号
      PropertyList *stringBeginNameProps = stringBeginName->GetProperties();
      NXString theBeginName = stringBeginNameProps->GetString("Value");
      delete stringBeginNameProps;
      stringBeginNameProps = NULL; 

      //获取选择控件选择的体
      selectBodys = selection0->GetSelectedObjects(); //得选择的体


      //获取枚举值
      int enum0Value = enum0->GetProperties()->GetEnum("Value");

      //转换
      char NewMoldNo1[256];
      sprintf(NewMoldNo1, "%s", theMoldNo.GetLocaleText()); //NXString字符串转char,必须用.GetLocaleText()
      string NewMoldNo2 = NewMoldNo1;

      //
      if ( enum0Value == 0 )
      {
          //转换

       char NewName1[256];
       sprintf(NewName1, "-%s", theName.GetLocaleText()); //NXString字符串转char,必须用.GetLocaleText()
       string NewName2 = NewName1;
       char NewName3[256];
       sprintf(NewName3, "\%s-%s.prt",NewMoldNo2, theName.GetLocaleText()); //NXString字符串转char,必须用.GetLocaleText()
       string NewName4 = NewName3;
       //新建部件的名字
       string NewpartName1 = NewMoldNo2 + NewName2;
       NewName.push_back(NewpartName1);
       //theSession->ListingWindow()->WriteLine("新建部件名:" + NewpartName1 );
       //新建部件全路径
       string NewNamePath1 = PartPath1 + NewName4;
       NewNamePath.push_back(NewNamePath1);
       //theSession->ListingWindow()->WriteLine("新建部件全路径:" + NewNamePath1);
      }
      else if ( enum0Value == 1 )
      {

       string theBeginNamestring1 = theBeginName.GetLocaleText() ;
       int start1 = (int)theBeginNamestring1.find_last_of("-");//找到工作部件全路径名中的最后一个杠
       int end1 = (int)theBeginNamestring1.find_last_of("");//找到工作部件全路径名中的最后一个空格
       string theBeginNamestring2 = theBeginNamestring1.substr(start1+1, end1);//分割
       string theBeginNamestring3 = theBeginNamestring1.substr(0, start1+1);//分割
       int beginNo = atoi(theBeginNamestring2.c_str());//字符串转为整数型

       for ( int i = 0 ; i < selectBodys.size();i++)
       {
        if ( beginNo < 10 )
        {
         //转换
         char NewName1[256];
         sprintf(NewName1, "-%s00%d", theBeginNamestring3,beginNo); //NXString字符串转char,必须用.GetLocaleText()
         string NewName2 = NewName1;
         char NewName3[256];
         sprintf(NewName3, "\%s-%s00%d.prt",NewMoldNo2, theBeginNamestring3,beginNo); //NXString字符串转char,必须用.GetLocaleText()
         string NewName4 = NewName3;
         //新建部件的名字
         string NewpartName1 = NewMoldNo2 + NewName2;
         NewName.push_back(NewpartName1);
         //theSession->ListingWindow()->WriteLine("新建部件名:" + NewpartName1 );
         //新建部件全路径
         string NewNamePath1 = PartPath1 + NewName4;
         NewNamePath.push_back(NewNamePath1);
         //theSession->ListingWindow()->WriteLine("新建部件全路径:" + NewNamePath1);
         beginNo++;
        }
        else if ( beginNo  >= 10 && beginNo < 100 )
        {
         //转换
         char NewName1[256];
         sprintf(NewName1, "-%s0%d", theBeginNamestring3,beginNo); //NXString字符串转char,必须用.GetLocaleText()
         string NewName2 = NewName1;
         char NewName3[256];
         sprintf(NewName3, "\%s-%s0%d.prt",NewMoldNo2, theBeginNamestring3,beginNo); //NXString字符串转char,必须用.GetLocaleText()
         string NewName4 = NewName3;
         //新建部件的名字
         string NewpartName1 = NewMoldNo2 + NewName2;
         NewName.push_back(NewpartName1);
         //theSession->ListingWindow()->WriteLine("新建部件名:" + NewpartName1 );
         //新建部件全路径
         string NewNamePath1 = PartPath1 + NewName4;
         NewNamePath.push_back(NewNamePath1);
         //theSession->ListingWindow()->WriteLine("新建部件全路径:" + NewNamePath1);
         beginNo++;
        }
        else if ( beginNo  >= 100 )
        {
         //转换
         char NewName1[256];
         sprintf(NewName1, "-%s%d", theBeginNamestring3,beginNo); //NXString字符串转char,必须用.GetLocaleText()
         string NewName2 = NewName1;
         char NewName3[256];
         sprintf(NewName3, "\%s-%s%d.prt",NewMoldNo2, theBeginNamestring3,beginNo); //NXString字符串转char,必须用.GetLocaleText()
         string NewName4 = NewName3;
         //新建部件的名字
         string NewpartName1 = NewMoldNo2 + NewName2;
         NewName.push_back(NewpartName1);
         //theSession->ListingWindow()->WriteLine("新建部件名:" + NewpartName1 );
         //新建部件全路径
         string NewNamePath1 = PartPath1 + NewName4;
         NewNamePath.push_back(NewNamePath1);
         //theSession->ListingWindow()->WriteLine("新建部件全路径:" + NewNamePath1);
         beginNo++;    
        }
       }
      }
      else if ( enum0Value == 2 )
      {
       //新建部件的名字
       string NewpartName1 = NewMoldNo2 + "-Layout";
       NewName.push_back(NewpartName1);
       //theSession->ListingWindow()->WriteLine("新建部件名:" + NewpartName1 );
       //新建部件全路径
       char NewName3[256];
       sprintf(NewName3, "\%s-Layout.prt",NewMoldNo2); //NXString字符串转char,必须用.GetLocaleText()
       string NewNamePath1 = PartPath1 + NewName3;
       NewNamePath.push_back(NewNamePath1);
       //theSession->ListingWindow()->WriteLine("新建部件全路径:" + NewNamePath1);

       //新建部件的名字
       string NewpartName2 = NewMoldNo2 + "-Misc";
       NewName.push_back(NewpartName2);
       //theSession->ListingWindow()->WriteLine("新建部件名:" + NewpartName2 );
       //新建部件全路径
       char NewName4[256];
       sprintf(NewName4, "\%s-Misc.prt",NewMoldNo2); //NXString字符串转char,必须用.GetLocaleText()
       string NewNamePath2 = PartPath1 + NewName4;
       NewNamePath.push_back(NewNamePath2);
       //theSession->ListingWindow()->WriteLine("新建部件全路径:" + NewNamePath2);

       //新建部件的名字
       string NewpartName3 = NewMoldNo2 + "-Ejector";
       NewName.push_back(NewpartName3);
       //theSession->ListingWindow()->WriteLine("新建部件名:" + NewpartName3 );
       //新建部件全路径
       char NewName5[256];
       sprintf(NewName5, "\%s-Ejector.prt",NewMoldNo2); //NXString字符串转char,必须用.GetLocaleText()
       string NewNamePath3 = PartPath1 + NewName5;
       NewNamePath.push_back(NewNamePath3);
       //theSession->ListingWindow()->WriteLine("新建部件全路径:" + NewNamePath3);

       //新建部件的名字
       string NewpartName4 = NewMoldNo2 + "-Cavity";
       NewName.push_back(NewpartName4);
       //theSession->ListingWindow()->WriteLine("新建部件名:" + NewpartName4 );
       //新建部件全路径
       char NewName6[256];
       sprintf(NewName6, "\%s-Cavity.prt",NewMoldNo2); //NXString字符串转char,必须用.GetLocaleText()
       string NewNamePath4 = PartPath1 + NewName6;
       NewNamePath.push_back(NewNamePath4);
       //theSession->ListingWindow()->WriteLine("新建部件全路径:" + NewNamePath4);

       //新建部件的名字
       string NewpartName5 = NewMoldNo2 + "-Core";
       NewName.push_back(NewpartName5);
       //theSession->ListingWindow()->WriteLine("新建部件名:" + NewpartName5 );
       //新建部件全路径
       char NewName7[256];
       sprintf(NewName7, "\%s-Core.prt",NewMoldNo2); //NXString字符串转char,必须用.GetLocaleText()
       string NewNamePath5 = PartPath1 + NewName7;
       NewNamePath.push_back(NewNamePath5);
       //theSession->ListingWindow()->WriteLine("新建部件全路径:" + NewNamePath5);
      }
      
      //遍历文件夹和内存
      //filesearch(strDir, 0); 

     
        }
        catch(exception& ex)
        {
            //---- Enter your exception handling code here -----
            CreateNewComponent::theUI->NXMessageBox()->Show("获取UI值和路径", NXOpen::NXMessageBox::DialogTypeError, ex.what());
        }

     }

     //同名对比
    void CreateNewComponent::ToCompareSameName()
     {
        try
        {
      //遍历内存
      Cylmemory();
      //遍历文件夹
      filesearch(strDir, 0);

      ispartnamecreate = false ;

      for(int j = 0 ; j < samepartname1.size();j++)
      {
       string currPartName2 = samepartname1[j];

       for (int Num = 0 ; Num < NewName.size();Num++)
       {
        string newname3 = NewName [Num];

        if (currPartName2 == newname3)
        {
         ispartnamecreate = true ;
         ALLsamenamePart.push_back(newname3);
         //theSession->ListingWindow()->WriteLine(newname3+"  部件已存在请重新输入工件名或起始工件名");
         //theUI->NXMessageBox()->Show("提示", NXOpen::NXMessageBox::DialogTypeInformation, newname3+"部件已存在");
        }
        else
        {
         for ( int i = 0 ; i<samepartname2.size();i++)
         {
          string currPartName3 = samepartname2[i];
          if (currPartName3 == newname3)
          {
           ispartnamecreate = true ;
           ALLsamenamePart.push_back(newname3);
           //theSession->ListingWindow()->WriteLine(newname3+"  部件已存在请重新输入工件名或起始工件名");
           //theUI->NXMessageBox()->Show("提示", NXOpen::NXMessageBox::DialogTypeInformation, newname3+"部件已存在");
          }    
         }

        }
       }

      }


        }
        catch(exception& ex)
        {
            //---- Enter your exception handling code here -----
            CreateNewComponent::theUI->NXMessageBox()->Show("同名对比", NXOpen::NXMessageBox::DialogTypeError, ex.what());
        }

     }

    //遍历内存
    void CreateNewComponent::Cylmemory()
     {
        try
        {

      //通过迭代器获取内存加载部件的名
      samepartname1.clear();
      PartCollection *Pc = theSession->Parts();
      for ( PartCollection::iterator ite = Pc->begin(); ite !=Pc->end(); ite++)
      {
       Part *part = (*ite);
       NXString partfullpath2 = part ->FullPath();
       //theSession->ListingWindow()->WriteLine("部件路径:"+partfullpath2);
       //分割字符串得到内存加载的部件名字
       string currPartName1 = NameOrPath(partfullpath2.GetLocaleText(), 1);
       //新建的部件名字和内存加载部件的名字对比,相同就把内存加载部件的名字塞到容器
       for (int Num = 0 ; Num < NewName.size();Num++)
       {
        string newname1 = NewName [Num];

        if (currPartName1 == newname1)
        {
         samepartname1.push_back(currPartName1);
         //theSession->ListingWindow()->WriteLine("同名部件:"+currPartName1);
        }   
       }

      }

        }
        catch(exception& ex)
        {
            //---- Enter your exception handling code here -----
            CreateNewComponent::theUI->NXMessageBox()->Show("遍历内存", NXOpen::NXMessageBox::DialogTypeError, ex.what());
        }

     }

     //获取文件名和路径
    string CreateNewComponent::NameOrPath(const char* Path, int Type)
     {
        try
        {
       //反向找位置,分割字符串(只读取文件夹路径)
       string strPath = Path;
       string strDir;
       int nPos = strPath.find_last_of('\');
       if (string::npos != nPos)
       {
        strDir = strPath.substr(0, nPos);
       }
     
       //分割字符串(只读取part名字+后缀)
       //方法2
       int pos = strPath.find_last_of('\');
       string s1(strPath.substr(pos + 1));
     
       //分割字符串(只读取part名)
       string PartName(s1.substr(0, s1.find(".prt")));

       if (Type == 1)
       {
        return PartName;//返回名字
       }
       else if (Type == 2)
       {
        return strDir;//返回文件夹路径
       }

        }
        catch(exception& ex)
        {
            //---- Enter your exception handling code here -----
            CreateNewComponent::theUI->NXMessageBox()->Show("获取文件名和路径", NXOpen::NXMessageBox::DialogTypeError, ex.what());
        }


     }

    //创建单个部件
    void CreateNewComponent::CreateSinglPart()
     {
        try
        {

      for ( int i = 0 ; i < NewName.size(); i++)
      {
       //新建部件的名字
          string NewNamestr = NewName[i];
       //新建部件全路径
       string NewNamePathstr = NewNamePath[i];
       //创建部件
       FileNew *fileNew1;
       fileNew1 = theSession->Parts()->FileNew();
       fileNew1->SetTemplateFileName("model-plain-1-mm-template.prt");
       fileNew1->SetApplication(FileNewApplicationModeling);
       fileNew1->SetUnits(Part::UnitsMillimeters);
       fileNew1->SetRelationType("");
       fileNew1->SetUsesMasterModel("No");
       fileNew1->SetTemplateType(FileNewTemplateTypeItem);
       fileNew1->SetNewFileName(NewNamePathstr);//设置新建部件的路径
       fileNew1->SetMasterFileName("");
       fileNew1->SetUseBlankTemplate(false);
       fileNew1->SetMakeDisplayedPart(false);
       Assemblies::CreateNewComponentBuilder *createNewComponentBuilder1;
       createNewComponentBuilder1 = workPart->AssemblyManager()->CreateNewComponentBuilder();
       //createNewComponentBuilder1->SetReferenceSet(Assemblies::CreateNewComponentBuilder::ComponentReferenceSetTypeOther);
       createNewComponentBuilder1->SetReferenceSet(Assemblies::CreateNewComponentBuilder::ComponentReferenceSetTypeModel);//引用集设置
       createNewComponentBuilder1->SetReferenceSetName("MODEL");//设置引用集名字
       createNewComponentBuilder1->SetNewComponentName(NewNamestr);//设置新建部件的名字

       //把选择的体塞到objects1
       std::vector<DisplayableObject *> objects1(selectBodys.size());
       for (int j = 0 ; j < selectBodys.size(); j++ )
       {
        Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(selectBodys[j]->Tag()))); //选择的目标转换body
        objects1[j] = body1;
       }
      
       bool added1;
       added1 = createNewComponentBuilder1->ObjectForNewComponent()->Add(objects1);
       
       createNewComponentBuilder1->SetNewFile(fileNew1);
       
       NXObject *nXObject1;
       nXObject1 = createNewComponentBuilder1->Commit();

       //fileNew1->Destroy();
       
       createNewComponentBuilder1->Destroy();
      
      }

        }
        catch(exception& ex)
        {
            //---- Enter your exception handling code here -----
            CreateNewComponent::theUI->NXMessageBox()->Show("创建单个部件", NXOpen::NXMessageBox::DialogTypeError, ex.what());
        }

     }

    //批量创建部件
    void CreateNewComponent::CreateMultiplePart()
     {
        try
        {

      for ( int i = 0 ; i < NewName.size(); i++)
      {
       //新建部件的名字
          string NewNamestr = NewName[i];
       //新建部件全路径
       string NewNamePathstr = NewNamePath[i];
       //创建部件
       FileNew *fileNew1;
       fileNew1 = theSession->Parts()->FileNew();
       fileNew1->SetTemplateFileName("model-plain-1-mm-template.prt");
       fileNew1->SetApplication(FileNewApplicationModeling);
       fileNew1->SetUnits(Part::UnitsMillimeters);
       fileNew1->SetRelationType("");
       fileNew1->SetUsesMasterModel("No");
       fileNew1->SetTemplateType(FileNewTemplateTypeItem);
       fileNew1->SetNewFileName(NewNamePathstr);//设置新建部件的路径
       fileNew1->SetMasterFileName("");
       fileNew1->SetUseBlankTemplate(false);
       fileNew1->SetMakeDisplayedPart(false);
       Assemblies::CreateNewComponentBuilder *createNewComponentBuilder1;
       createNewComponentBuilder1 = workPart->AssemblyManager()->CreateNewComponentBuilder();
       //createNewComponentBuilder1->SetReferenceSet(Assemblies::CreateNewComponentBuilder::ComponentReferenceSetTypeOther);
       createNewComponentBuilder1->SetReferenceSet(Assemblies::CreateNewComponentBuilder::ComponentReferenceSetTypeModel);//引用集设置
       createNewComponentBuilder1->SetReferenceSetName("MODEL");//设置引用集名字
       createNewComponentBuilder1->SetNewComponentName(NewNamestr);//设置新建部件的名字
       //把选择的体塞到objects1
       std::vector<DisplayableObject *> objects1(1);
       Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(selectBodys[i]->Tag()))); //选择的目标转换body
       objects1[0] = body1;
       bool added1;
       added1 = createNewComponentBuilder1->ObjectForNewComponent()->Add(objects1);
       
       createNewComponentBuilder1->SetNewFile(fileNew1);
       
       NXObject *nXObject1;
       nXObject1 = createNewComponentBuilder1->Commit();

       //fileNew1->Destroy();
      
       createNewComponentBuilder1->Destroy();

      
      }

        }
        catch(exception& ex)
        {
            //---- Enter your exception handling code here -----
            CreateNewComponent::theUI->NXMessageBox()->Show("批量创建部件", NXOpen::NXMessageBox::DialogTypeError, ex.what());
        }

     }

    //新模装配树
    void CreateNewComponent::CreateNewAssmPart()
     {
        try
        {

      //获取UI值和路径
      GetUIValueandPath();

      for ( int i = 0 ; i < NewName.size(); i++)
      {
       //新建部件的名字
          string NewNamestr = NewName[i];
       //新建部件全路径
       string NewNamePathstr = NewNamePath[i];
       //创建部件
       FileNew *fileNew1;
       fileNew1 = theSession->Parts()->FileNew();
       fileNew1->SetTemplateFileName("model-plain-1-mm-template.prt");
       fileNew1->SetApplication(FileNewApplicationModeling);
       fileNew1->SetUnits(Part::UnitsMillimeters);
       fileNew1->SetRelationType("");
       fileNew1->SetUsesMasterModel("No");
       fileNew1->SetTemplateType(FileNewTemplateTypeItem);
       fileNew1->SetNewFileName(NewNamePathstr);//设置新建部件的路径
       fileNew1->SetMasterFileName("");
       fileNew1->SetUseBlankTemplate(false);
       fileNew1->SetMakeDisplayedPart(false);

       NXObject *nXObject1;
       nXObject1 = fileNew1->Commit();
       
       fileNew1->Destroy();

       //把新文件装配到显示部件
       Point3d basePoint1(0.0, 0.0, 0.0);
       Matrix3x3 orientation1;
       orientation1.Xx = 1.0;
       orientation1.Xy = 0.0;
       orientation1.Xz = 0.0;
       orientation1.Yx = 0.0;
       orientation1.Yy = 1.0;
       orientation1.Yz = 0.0;
       orientation1.Zx = 0.0;
       orientation1.Zy = 0.0;
       orientation1.Zz = 1.0;
       PartLoadStatus *partLoadStatus2;
       Assemblies::Component *component1;
       component1 = workPart->ComponentAssembly()->AddComponent(NewNamePathstr, "None", NewNamestr, basePoint1, orientation1, -1, &partLoadStatus2, true);
       
       delete partLoadStatus2;


      }

        }
        catch(exception& ex)
        {
            //---- Enter your exception handling code here -----
            CreateNewComponent::theUI->NXMessageBox()->Show("新模装配树", NXOpen::NXMessageBox::DialogTypeError, ex.what());
        }

     }

    //保存新建部件
    void CreateNewComponent::SaveNewPart()
     {
        try
        {
      
      PartSaveStatus *partSaveStatus1;
      for ( int i = 0 ; i < NewName.size(); i++)
      {
       Part *part1(dynamic_cast<Part *>(theSession->Parts()->FindObject(NewName[i])));
       string savenewname = NewNamePath[i];
       partSaveStatus1 = part1->Save(BasePart::SaveComponentsTrue, BasePart::CloseAfterSaveFalse);
      
      }

         delete partSaveStatus1;

      //保存当前显示部件
      //PartSaveStatus *partSaveStatus2;
      //partSaveStatus2 = basedisplaypart->Save(BasePart::SaveComponentsTrue, BasePart::CloseAfterSaveFalse);
      //delete partSaveStatus2;


        }
        catch(exception& ex)
        {
            //---- Enter your exception handling code here -----
            CreateNewComponent::theUI->NXMessageBox()->Show("新模装配树", NXOpen::NXMessageBox::DialogTypeError, ex.what());
        }

     }

    怡宁塑胶模具设计
  • 相关阅读:
    JMeter工具基础知识篇-使用命令行生成html报告
    解决jmeter请求不成功或者报403错误
    jmeter之JDBC Request各种数据库配置
    Jmeter模拟不同带宽
    SQL语句大全
    Jmeter 吞吐量控制器的使用
    如何找出系统能承受的最大在线用户数
    Jmeter之函数的应用
    jmeter如何设置IP欺骗
    华为云分布式缓存服务DCS与开源服务差异对比
  • 原文地址:https://www.cnblogs.com/hqsalanhuang/p/14456286.html
Copyright © 2020-2023  润新知