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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐