iCAx开思工具箱

标题: NX Open开发有困难,急!!!无法读取装配关系。 [打印本页]

作者: wanneng2005    时间: 2005-5-20 16:05
标题: NX Open开发有困难,急!!!无法读取装配关系。
using System;
using System.Xml;
  
using NXOpen;
using NXOpen.UF;
using NXOpen.Features;
using NXOpen.Assemblies;
  
namespace ConsoleApplication1
{
  /// <summary>
  /// Class1 的摘要说明。
  /// </summary>
  class Class1
  {
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    //[STAThread]
    public static Session theSession;  
    public static UFSession theUFSession;  
    static void Main(string[] args)
    {
      //
      // TODO: 在此处添加代码以启动应用程序
      String m_sPartFilePath;//需打开的装配文件的路径
  
      m_sPartFilePath = "E:\\UGPartTest\\tailasm.prt";  
  
      XmlDocument doc = new XmlDocument();                      //申明一个XML文档的实例
      doc.LoadXml("<?xml version='1.0' encoding='GB2312' ?><Assemb></Assemb>");//加载最初的节点
      XmlElement root = doc.DocumentElement;                    //得到根节点
  
      theSession = Session.GetSession();                        //得到工作区
      theUFSession = UFSession.GetUFSession();                  //得到UF工作区    
  
     &nbspart rootPart;    //装配体根文件的对象
     &nbspartLoadStatus status;
      Component RootComponent;
      
      rootPart = theSession.Parts.Open(m_sPartFilePath,out status);//打开装配体
      RootComponent = rootPart.ComponentAssembly.RootComponent;//获得装配体的根Component
  
      Component[] ChildComponentArray;
      ChildComponentArray = RootComponent.GetChildren();
      bool mated;
      UFAssem.MatingCondition ConstraintData;
          
      XmlElement Constraint;
      Constraint = doc.CreateElement("","Constraint","");  
  
      int m_iChildNum;
  
      m_iChildNum = ChildComponentArray.GetLength(0);
  
      XmlElement eleAssemb;
      eleAssemb = doc.CreateElement("","AssemblyPart","");    //创建一个记录零件特征信息的节点
      root.AppendChild(eleAssemb);                            //向根节点下添加AssemblyPart节点
  
      //构造装配体中零件的循环
      int num=0;                                               //用于记录装配体中零件个数(其中包括装配体文件)
     &nbspart[] PartsArray;                                       //申明Part对象的数组
     &nbspartsArray = theSession.Parts.ToArray();                 //得到装配体中所有零件的Part对象
      num = PartsArray.GetLength(0);                           //得到零件个数
      String m_sPartPath;                                      //零件的全路径
      String m_sPartName;                                      //零件名称
      String m_sPartTag;                                       //零件的tag号
      String m_sPartHandle;                                    //零件的Handle号
    
      XmlElement element;
      XmlText eleText;    
  
      for(int i=0;i<num;i++)                                    
      {
        if(!PartsArray.Tag.Equals(null))
        {
          theSession.Parts.SetDisplay(PartsArray,true,true,out status);     //将零件设为显示零件
          theSession.Parts.SetWork(PartsArray);                           //将零件设为工作零件
          
          m_sPartPath = PartsArray.FullPath;           //得到全路径         //
          m_sPartName = m_sPartPath.Remove(0,m_sPartPath.LastIndexOf("\\")+1);//得到最后零件名称
          XmlElement elePart;
          elePart = doc.CreateElement("","art","");      //创建Part节点
          eleAssemb.AppendChild(elePart);                 //在AssemblyPart节点下附加Part节点
  
          element = doc.CreateElement("","Name","");     //创建Name节点
          eleText = doc.CreateTextNode(m_sPartName);      //创建Name节点
          element.AppendChild(eleText);          //添加Name节点内容
          elePart.AppendChild(element);                //在Part节点下添加Name节点  
  
          m_sPartTag = PartsArray.Tag.ToString();     //得到Part的Tag号
          element = doc.CreateElement("","Tag","");      //创建Tag节点
          eleText = doc.CreateTextNode(m_sPartTag);
          element.AppendChild(eleText);
          elePart.AppendChild(element);                  //在Part节点下添加Tag节点
  
          m_sPartHandle = theUFSession.Tag.AskHandleOfTag(PartsArray.Tag); //得到Part零件Tag号的Handle号
          element = doc.CreateElement("","Handle","");
          eleText = doc.CreateTextNode(m_sPartHandle);
          element.AppendChild(eleText);
          elePart.AppendChild(element);                                       //在Part节点下添加Handle号
        }
      }
      try  
      {  
        doc.Save ( "c:\\"+"Constraint"+".xml" ) ;   
      }  
      catch ( Exception e )  
      {  
        //显示错误信息  
        Console.WriteLine ( e.Message ) ;  
      }  
  
      Tag PrototypeTag;
      for(int i=0;i<m_iChildNum;i++)
      {
        
        if(ChildComponentArray.GetChildren().GetLength(0)!=0)
        {
          //GetComponentConstraint(ChildComponentArray,AssemblyTree,doc);        
        }        
        else
        {
          root.AppendChild(Constraint);
  
          Tag ComponentInstanceTag;
          //theUFSession.Assem.AskCompsMatedToMe(ChildComponentArray.Tag,out mated_component,out num);
  
          
         &nbsprototypeTag = theUFSession.Assem.AskPrototypeOfOcc(ChildComponentArray.Tag);
          Console.Write(PrototypeTag.ToString());
          ComponentInstanceTag = theUFSession.Assem.AskInstOfPartOcc(ChildComponentArray.Tag);
          
          theUFSession.Assem.AskMcDataOfCompnt(ChildComponentArray.Tag, out mated,out ConstraintData);//这句话死活不对
                  
        }      
      }
      
    }
      
  }
}
总是出现越界错误!!!!




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3