NX/UG二次开发,建模模块下,装配关系对应的一种数据结构(c++)

NX的装配设计,本人将其理解为一种父子关系的树结构,希望对大家对装配的开发有帮助..引用NXOpen中的一些名词,直接上代码:

//hpp
//一个装配下的部件(模拟occ,instance,prototype)
struct Sheet  
{
public:

	string name;      //组件名称(通过其可以获取occ,instance,prototype)
	string path;      //组件路径
	
	Sheet* parent;    //父部件(occ)
	Sheet* base;      //部件原型(prototype)
	Sheet* root;      //最顶层部件(唯一)

	vector<Sheet*> myChild;  //子部件(instance)
	Part* myPart;            //对应的原型(prototype)
	vector<tag_t> myBodies;  //名下的实体(bodies)

	vector<Sheet*> allChild;           //子孙万代(instance)
	vector<vector<Sheet*>> myLoadData; //加载的子部件(数量<=allChild)
	bool loadState;                    //加载状态
	bool isQuote;                      //是否引用(是否为prototype)
			
	map<string,double> attribute;      //数值类型的属性
	string unit ;                      //单位(inch or mm)
	int level;                         //装配等级(第几代)
	
	Sheet();
	~Sheet();
private:

};

//操作器(manager)
class dataOPT
{
public:	
	//--------------------------------------------------------------------------------------------------------
	//----------------------------------------初始化----------------------------------------------------------
	//--------------------------------------------------------------------------------------------------------
	vector<vector<string>> getASM(string pathMSG);   //1.读取待建立(加载)部件的信息
	void doPreload(vector<Sheet*> sheetV);           //2.预加载部件
	void buildSheet(Sheet* sheetV);                  //3.建立整个装配架构		
	void show(Sheet *sheet);                         //4.显示预览
	//--------------------------------------------------------------------------------------------------------
	//----------------------------------------数据处理与更新--------------------------------------------------
	//--------------------------------------------------------------------------------------------------------
	void read(string msg);                     //读取用户输入或更改		
	void update(Sheet *sheet);                 //根据用户输入或更改,进行更新	
	//数据处理
	string findQuote(string exp,Sheet* from);  //部件间引用处理
	vector<Sheet*> getChild(Sheet *sheet);     //更新名下的部件
	void handleChild(Sheet *sheet);            //更新名下的部件
	void copySheet(Sheet* fromST,Sheet* toST); //copyComponent
	Sheet* findSheet(string name);             //findObject
	void doSomething();

	dataOPT();
	~dataOPT();
private:

};

//cpp
//递归更新名下的部件
void dataOPT::handleChild(Sheet *sheet)
{
	doSomething();
	if(!getChild(sheet).empty())
	{
		for(size_t i = 0; i < sheet->myChild.size(); i++)
		{
			handleChild(sheet->myChild[i]);
		}	
	}
}

//如果感兴趣,欢迎互相交流学习 QQ: 3041844196

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值