马上注册,结交更多同行朋友,交流,分享,学习。
您需要 登录 才可以下载或查看,没有帐号?注册
x
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工作区
 art rootPart; //装配体根文件的对象
 artLoadStatus 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; //用于记录装配体中零件个数(其中包括装配体文件)
 art[] PartsArray; //申明Part对象的数组
 artsArray = 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);
PrototypeTag = theUFSession.Assem.AskPrototypeOfOcc(ChildComponentArray.Tag);
Console.Write(PrototypeTag.ToString());
ComponentInstanceTag = theUFSession.Assem.AskInstOfPartOcc(ChildComponentArray.Tag);
theUFSession.Assem.AskMcDataOfCompnt(ChildComponentArray.Tag, out mated,out ConstraintData);//这句话死活不对
}
}
}
}
}
总是出现越界错误!!!! |