PLM之家PLMHome-工业软件与AI结合践行者

[已解决] NX Open C++自动化装配约束求解正确但是显示不正确

  [复制链接]

2014-5-6 20:11:05 4684 2

小新 发表于 2014-4-28 11:53:40 |阅读模式

小新 楼主

2014-4-28 11:53:40

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
QQ截图20140428114628.png " M, ~6 D  |5 u" F: X$ F
这个是两个正方体进行装配。有三个约束条件,分别是三个面对齐。但是加载DLL后,RT所示,对其约束信息框中约束求解正确,没有出错。所对齐的面也和代码中设定的一致。但是实际窗口中两个面却没有对齐啊。其余两个约束也是同样状况。) m9 f9 I$ ^: J8 B: K
主要代码:
' W5 w! Y6 L; U' V
  1. //Face *face1(dynamic_cast<Face *>(component2->FindObject("PROTO#.Features|BLOCK(1)|FACE 2 {(250,0,50) BLOCK(1)}")));
    2 j% P& U' D$ S
  2.         Face *face1=findface(component2,"FACE4");
    4 ~' f/ s- b8 c6 Y8 f  }8 G
  3.     Positioning::ConstraintReference *constraintReference1;
    , @& B8 E: y# K! ^/ h- F* a
  4.     constraintReference1 = componenTConstraint1->CreateConstraintReference(component2, face1, false, false, false);
    6 K4 ]  u4 F% a2 R
  5.     ) h9 {3 L* c% N* v; K
  6.     Point3d helpPoint1(151.841109777454, 1.38777878078145e-014, 70.5813805572551);
    7 \$ J& r5 L) f1 y2 M
  7.     constraintReference1->SetHelpPoint(helpPoint1);" S5 S3 i, r# o  G
  8.     : _. ^; O5 s0 H, R0 Y6 I
  9.     //Face *face2(dynamic_cast<Face *>(component1->FindObject("PROTO#.Features|BLOCK(1)|FACE 2 {(50,0,50) BLOCK(1)}")));2 p- \! y* l3 S' M. u3 W
  10.         Face *face2=findface(component1,"FACE1");5 \3 V; }4 `( d( V
  11.     Positioning::ConstraintReference *constraintReference2;$ h4 E1 M( z2 W& `- B* j
  12.     constraintReference2 = componentConstraint1->CreateConstraintReference(component1, face2, false, false, false);
复制代码
上面被注释的两行是通过JA录制产生的。我没用用的自己写的findface函数,代码如下:
# a$ N; C" n/ t& I9 o5 r: P' i& k
  1. Face * findface(Assemblies::Component *component,const char *c)
    4 E8 ]4 b. a9 Z; N* Q! z2 @
  2. {
    + t# X( s2 I% h9 X0 `% h
  3.         Part * component_part=(dynamic_cast<Part *>(component->Prototype()));
    ! I: I1 x: ^  m$ @
  4.         BodyCollection *bc=component_part->Bodies();. T2 t6 P$ X# b" D: l
  5.         Face *face;& L) I" k: T, w. @9 O. f' b' ~- z
  6.                
    8 o+ S1 m( o/ x$ k, F; @4 F
  7.         for(BodyCollection::iterator it = bc->begin();it!=bc->end();it++)* N5 M! R5 K7 c: p# ^
  8.         {( P; ?- C# J9 g: ~1 ]) N' B
  9.                 Body *body = (*it);
    ( F. u9 {$ R2 b7 c$ k( _
  10.                 std::vector<Face*> faces = body->GetFaces();, ^) Y: h4 Y5 U/ h. F) U0 J. E
  11.                 unsigned int k=faces.size();, b! u- ~. S7 o- S- Y2 w0 j1 f# j5 z
  12.                 for(unsigned int j=0;j<faces.size();j++)
    6 n* X( w* J8 W7 U% _* f
  13.                 {
    6 k! D8 b" c6 P1 ?8 r
  14.                         const char *c1=faces[j]->Name().GetText();       
    8 I8 Y; u5 V9 {
  15.                         if (!strcmp(c,c1))) M$ E* E+ s9 v4 E5 ]
  16.                                 {6 N* F& G; G4 h/ e- `+ K+ r
  17.                                         face=faces[j];) Z: E& }; Q0 u1 U$ z$ x
  18.                                         return(face);
    ' T, E1 t; X2 k1 K( h' L$ L: n
  19.                                 }
    , k2 k/ N- E) b7 ?8 n/ u
  20.                 }, G/ T/ q6 t; e9 o- D) s
  21.         }2 e7 G5 ?% h- b  }2 Z% g
  22.         * [2 \$ x. T$ w$ `
  23. }
复制代码
) G4 k4 s9 F7 v" k  p

6 q; W: C# D* U
; r* j( n4 I2 `* W7 T7 W& Y- F& C# K% Q, S
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复2

admin 发表于 2014-4-28 12:51:25

admin 沙发

2014-4-28 12:51:25

你找到的面是 部件原型的面
& W; D) V2 ]# L# J  O) {3 p; Z- ?2 Q3 O: O! c, U
装配里面需要的面是 occurrence实例对象的面 , 所以结算结果不对
. {4 u* ^% G6 m) D
5 A1 B4 c, J) k: H这个地方使用 ufun的  
7 m, W; u  D* t! ~2 x" `9 b, d$ c' F2 F* i
UF_OBJ_cycle_by_name    去找 就可以了
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

小新 发表于 2014-5-6 20:11:05

小新 板凳

2014-5-6 20:11:05

admin 发表于 2014-4-28 12:51
9 ?1 D; p# d. ]+ \你找到的面是 部件原型的面 . A: G5 @6 m  ]

- R# J/ B/ p" c9 h3 I6 }: e装配里面需要的面是 occurrence实例对象的面 , 所以结算结果不对
! ]2 n: n1 ~( A: ^  r+ R
但是CreateConstraintReference()方法中第二个参数没有要求用的是occurrenc的面啊?在NX C++中好像也没有关于occurrence和instancen的相关类
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了