NX/UG二次开发,建模模块下,装配关系对应的一种数据结构(c++)
【代码】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

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