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