经常采用UG NX二次开发(NXOpen C#)(UG NX二次开发(C#)专栏),在用UFun创建一个实体时,采用强制转换,能将tag对象转换为body对象,但是次开创建在C++时却不能直接强制转换,经过多次测试,我找到一种方法,现在分享给大家,如果有其他更好的方法,请留言指正。
在UFun函数中,创建一个长方体,如果没有布尔操作,用UF_MODL_create_block1,其帮助说明如下: 其输入参数有三个:
我们现在改变输入参数,和输出参数,即是,输入参数有两个:
其完整的代码如下:
void UFModel::CreateBlock(Point3d* point3D, char*length[], Body* body){double origionPnt[3] = {point3D->X,point3D->Y,point3D->Z};tag_t bodyTag;UF_MODL_create_block1(UF_FEATURE_SIGN::UF_NULLSIGN,origionPnt,length,&bodyTag);body = dynamic_cast然后,编译链接完成生成dll,在UG NX中测试,确实生成了一个长方体,这是对的。
但是根据,代码中添加了一行,即获取实体的面,代码如下:
void UFModel::CreateBlock(Point3d* point3D, char*length[], Body* body){double origionPnt[3] = {point3D->X,point3D->Y,point3D->Z};tag_t bodyTag;UF_MODL_create_block1(UF_FEATURE_SIGN::UF_NULLSIGN,origionPnt,length,&bodyTag);body = dynamic_cast其就爆出空指针的错误: 其就是强制转换不成功。
其中一种有效的建模解决方法是通过以下代码实现:
void UFModel::CreateBlock(Point3d* point3D, char*length[], Body* body){double origionPnt[3] = {point3D->X,point3D->Y,point3D->Z};tag_t bodyTag;UF_MODL_create_block1(UF_FEATURE_SIGN::UF_NULLSIGN,origionPnt,length,&bodyTag);TaggedObject *taggedObject = NXObjectManager::Get(bodyTag);NXObject *nXObject = dynamic_cast通过JournalIdentifier来做一个中转,这个经过测试是可以的。
在NXOpen二次开发(C#)中,我不太关心JournalIdentifier,因为强制转换一般都没有问题,但是在C++中可能就不同了,还是需要JournalIdentifier的,以后多学习多注意