找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 2835|回复: 6

[求助] NXOpenC++装配体约束出现问题

[复制链接]

2

主题

10

回帖

100

积分

上等兵

积分
100
发表于 2016-6-15 21:54:32 | 显示全部楼层 |阅读模式
1111.png
图中接触约束明明已经求解成功,为什么这两个面没有合上呢,而且创建的接触约束和对齐约束双击之后都不能重定义,
如下图。显示添加的引用无效(想想只有可能是选择的接触面不对,但图中接触面看得出来就是我要选择的面),
但具体不知道什么无效,有谁能帮忙解答吗??
U%H16CY5J523R)_5Q2J`R32.jpg

27

主题

757

回帖

6243

积分

上尉

积分
6243
发表于 2016-6-16 10:11:23 | 显示全部楼层
能否指明一下,是那两个面要接触对齐呢??

2

主题

10

回帖

100

积分

上等兵

积分
100
 楼主| 发表于 2016-6-16 15:43:02 | 显示全部楼层
UG自在观 发表于 2016-6-16 10:11
能否指明一下,是那两个面要接触对齐呢??

可以看图一,我选中了接触这个约束,图上面夹着白色圆柱那段的左右两个圆环面。

27

主题

757

回帖

6243

积分

上尉

积分
6243
发表于 2016-6-16 16:42:24 | 显示全部楼层
对齐之后,试一试用同心约束。看一看是否可以

27

主题

757

回帖

6243

积分

上尉

积分
6243
发表于 2016-6-16 16:42:42 | 显示全部楼层
还不行,介意再把图档上传。我看一看

2

主题

10

回帖

100

积分

上等兵

积分
100
 楼主| 发表于 2016-6-16 20:59:14 | 显示全部楼层
UG自在观 发表于 2016-6-16 16:42
还不行,介意再把图档上传。我看一看

我先把我做的接触约束代码发上来,(整个做装配的代码比较长,不知道这里能不能上传文件,可以的话我就把全部文件代码发给你)我创建的是螺栓螺母装配,全称包括模型都是代码生成的。可以看我之前发的图片,代码中comp1和comp2是我创建的两个组件(comp1中创建两个圆柱体作布尔和,即螺栓部分,comp2中创建两个圆柱体作布尔差,即螺母部分),找接触约束配合面的那部分代码中的bd11_Tag是组件comp1中创建的两个圆柱体做布尔和后获得的实体,bd22_Tag是组件comp2中两个圆柱体作布尔差后获得的体。
  1. //接触约束
  2. NXOpen::Positioning::ComponentPositioner *componentPositioner3;
  3.          componentPositioner3 = workPart->ComponentAssembly()->Positioner();   
  4.          componentPositioner3->ClearNetwork();   
  5.          NXOpen::Assemblies::Arrangement *arrangement1(dynamic_cast<NXOpen::Assemblies::Arrangement *>(workPart->ComponentAssembly()->Arrangements()->FindObject("Arrangement 1")));
  6.          componentPositioner3->SetPrimaryArrangement(arrangement1);   
  7.          componentPositioner3->BeginAssemblyConstraints();   
  8.          NXOpen::Positioning::Network *network3;
  9.          network3 = componentPositioner3->EstablishNetwork();   
  10.          NXOpen::Positioning::ComponentNetwork *componentNetwork3(dynamic_cast<NXOpen::Positioning::ComponentNetwork *>(network3));
  11.          componentNetwork3->SetMoveObjectsState(true);     
  12.          NXOpen::Assemblies::Component *nullNXOpen_Assemblies_Component(NULL);
  13.          componentNetwork1->SetDisplayComponent(nullNXOpen_Assemblies_Component);   
  14.          componentNetwork1->SetNetworkArrangementsMode(NXOpen::Positioning::ComponentNetwork::ArrangementsModeExisting);   
  15.          componentNetwork1->SetMoveObjectsState(true);   
  16.          componentNetwork1->SetNetworkArrangementsMode(NXOpen::Positioning::ComponentNetwork::ArrangementsModeExisting);
  17. NXOpen::Positioning::Constraint *constraint3;
  18.          constraint3 = componentPositioner3->CreateConstraint(true);   
  19.          NXOpen::Positioning::ComponentConstraint *componentConstraint3(dynamic_cast<NXOpen::Positioning::ComponentConstraint *>(constraint3));
  20.          componentConstraint3->SetConstraintAlignment(NXOpen::Positioning::Constraint::AlignmentInferAlign);   
  21.          componentConstraint3->SetConstraintType(NXOpen::Positioning::Constraint::TypeTouch);
  22. uf_list_p_t face_list1;
  23.              tag_t  object_id1 =NULL_TAG;
  24.          UF_MODL_create_list(&face_list1); //初始化列表
  25.          UF_MODL_ask_body_faces (bd11_Tag, &face_list1);//获得实体上所有表面
  26.          UF_MODL_ask_list_item(face_list1,0,&object_id1);
  27.          UF_OBJ_set_color(object_id1,3);
  28.                  Face *face1;
  29.          face1=dynamic_cast<NXOpen::Face *>(NXObjectManager::Get(object_id1));

  30.              uf_list_p_t face_list2;
  31.          tag_t  object_id2 =NULL_TAG;
  32.          UF_MODL_create_list(&face_list2); //初始化列表
  33.          UF_MODL_ask_body_faces (bd22_Tag, &face_list2);//获得实体上所有表面
  34.          UF_MODL_ask_list_item(face_list2,1,&object_id2);
  35.          UF_OBJ_set_color(object_id2,3);
  36.                  Face *face2;
  37.          face2=dynamic_cast<NXOpen::Face *>(NXObjectManager::Get(object_id2));

  38.          NXOpen::Positioning::ConstraintReference *constraintReference1;
  39.          constraintReference3 = componentConstraint3->CreateConstraintReference(comp1, face1, false, false, false);
  40. NXOpen::Positioning::ConstraintReference *constraintReference2;
  41.          constraintReference2 = componentConstraint3->CreateConstraintReference(comp2, face2, false, false, false);   
  42.          constraintReference2->SetFixHint(true);
  43. componentNetwork1->Solve();   
  44.          componentPositioner3->ClearNetwork();
  45.                  componentPositioner3->DeleteNonPersistentConstraints();   
  46.          NXOpen::Assemblies::Arrangement *nullNXOpen_Assemblies_Arrangement(NULL);
  47.          componentPositioner3->SetPrimaryArrangement(nullNXOpen_Assemblies_Arrangement);   
  48.          componentPositioner3->EndAssemblyConstraints();
复制代码

2

主题

10

回帖

100

积分

上等兵

积分
100
 楼主| 发表于 2016-6-16 21:03:03 | 显示全部楼层
UG自在观 发表于 2016-6-16 16:42
对齐之后,试一试用同心约束。看一看是否可以

我创建了3个约束,先对comp1固定,然后让两个圆柱面通过轴对齐约束,最后是两个圆环面接触约束
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

咨询QQ:1359218528|发帖须知!|Archiver|手机版|小黑屋|UG爱好者论坛 ( 京ICP备10217105号-2 )

GMT+8, 2024-12-23 02:46

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表