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

[求助] NXopen C++ 分割成两段,我怎么得到两条线段的tag

  [复制链接]

2020-4-5 10:47:20 1826 2

SimonLv 发表于 2020-4-4 23:57:29 |阅读模式

SimonLv 楼主

2020-4-4 23:57:29

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了; s* g4 P: d' s2 E% [1 ?! s, v: h

' u1 F, e9 A3 ?* H    std::vector<NXObject *> objects1;
9 [% g' K0 u  H; |/ l' ]    objects1 = divideCurveBuilder1->GeTCommittedObjects();
) k$ s) d3 P+ K& {
$ C* r' ]8 i! m* E7 U7 k) P% D+ U' Y! c5 Q1 A5 F

* J& s. m) B* |. g; V7 p完整代码如下:
3 n$ i# S- @& f/ p8 o1 r$ F
& D( m# [5 D& a3 \2 B  C% n5 F! y// NX 7.5.0.32
, U, `$ v$ H# L// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间
6 L& ^+ F- |) ]//" Y# R9 E9 S/ j8 z* k: z1 @
#include <uf_defs.h>  b0 q" S0 `3 o4 e0 G8 X- \: G' d6 v
#include <NXOpen/NXException.hxx>
% m# s; I3 r. I#include <NXOpen/Session.hxx>: r. l2 i" _1 v
#include <NXOpen/Builder.hxx>
& X0 j8 v% T4 i  ]#include <NXOpen/Direction.hxx>. u3 ?' E9 n* D% w5 y7 k
#include <NXOpen/Expression.hxx>
9 ~- e' p0 W, T  t6 {#include <NXOpen/ExpressionCollection.hxx>+ [% S  }* H8 p
#include <NXOpen/Features_BaseFeatureCollection.hxx>, u- d  A2 W8 N5 x  r4 P4 ]
#include <NXOpen/Features_DivideCurveBuilder.hxx>& }% s* j# j  R
#include <NXOpen/Features_FeatureCollection.hxx>8 Y( F$ D1 S+ ^) X
#include <NXOpen/Features_PointFeature.hxx>  b5 ^% y% ^6 c$ x
#include <NXOpen/ModelingView.hxx>
; p# `: N8 c' M+ D& }#include <NXOpen/ModelingViewCollection.hxx>0 B8 p9 ?' o9 R0 a- ?5 ^# u
#include <NXOpen/NXObject.hxx>
. q: O2 \8 p/ |! s8 `6 T#include <NXOpen/Part.hxx>: O8 w% r1 K5 ]9 z, D
#include <NXOpen/PartCollection.hxx>  v; x2 d* U) |# s) u& `) ?
#include <NXOpen/Plane.hxx>5 ^! Y. U# [1 C" s5 _7 C7 f+ ~
#include <NXOpen/PlaneCollection.hxx>; B; ]/ u8 c" D
#include <NXOpen/Point.hxx>
' o$ w6 E2 Z+ j; h1 C" b#include <NXOpen/PointCollection.hxx>1 Q% R, n. ^5 \0 ~  X% c
#include <NXOpen/Preferences_PartModeling.hxx>
( Z+ t3 x' n6 \, P, d0 m#include <NXOpen/Preferences_PartPreferences.hxx>: Q4 f  `& c3 O
#include <NXOpen/Section.hxx>
) b7 @/ u; q) a! v3 L; w1 {9 M6 x, W#include <NXOpen/SectionCollection.hxx>/ K8 j) n7 _, n$ J
#include <NXOpen/SelectCurve.hxx>- l4 p4 `/ R, I! N' r; E
#include <NXOpen/SelectObject.hxx>
' J( r. D3 }  m5 g#include <NXOpen/SelectPointList.hxx>
( m! m5 V3 N1 c2 c* o: I#include <NXOpen/Session.hxx>* Q, y4 F5 s5 N* a% K0 Y5 u5 o6 F
#include <NXOpen/Spline.hxx>
" Q+ R$ ?# ]6 U" J) d#include <NXOpen/SplineCollection.hxx>
9 h7 s/ g$ ?5 \. b#include <NXOpen/TaggedObject.hxx>9 S  R% L  m1 c) _' i- ?+ t9 k! k
#include <NXOpen/Unit.hxx>2 z! B" u6 n! K# s
#include <NXOpen/UnitCollection.hxx>* @6 E: H1 p# d
#include <NXOpen/Update.hxx>" I( s& B8 o! X$ W: O
using namespace NXOpen;
) L3 A) Q; R* m+ j/ V, t/ A7 @! k( l
extern "C" DllExport int ufusr_ask_unload()
! Q; B5 \- n6 c! v{; N- o( ]9 S! |% K( E! t; c
    return (int)Session::LibraryUnloadOptionImmediately;' G' o; Z# c  q9 s, ^7 J
}6 _/ d+ W# x$ g( q6 [* A8 b1 q
$ s" b  m8 Y% V, V% _: ]9 d6 d
extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen), ?  a9 C; P6 p
{
4 T0 @! T0 c! C1 q# L    Session *theSession = Session::GetSession();
  B  _$ b  D- k    Part *workPart(theSession->Parts()->Work());
, r0 P& X% @/ }    Part *displayPart(theSession->Parts()->Display());
% w8 K9 G* A/ F  k    // ----------------------------------------------
5 J; \* z: }; @& W+ H$ k( j& `5 a8 g) t    //   Menu: Edit->Curve->Divide...
; Y% q3 ?. {9 S+ _    // ----------------------------------------------/ ?$ s' w+ X# j) y8 w* X9 U
    Session::UndoMarkId markId1;
2 o! X, q1 F. t: d    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");/ }2 `! m5 ~( @

( i1 L1 p0 J1 G. A    Features::Feature *nullFeatures_Feature(NULL);
" k& V9 x% l, x9 ]9 u3 u5 G6 c/ [0 E7 q2 G5 q- D% n
    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() ): L% `$ G4 ^. }; b" @9 ]
    {; k- ^  g- n, _3 K4 p  g: r# X  J0 p
        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");
2 m; m: s5 `* ]0 E    }
( r. w" v# ]9 d) q& a2 M0 @
+ U1 w4 ~: [: \+ v$ ~! U8 @    Features::DivideCurveBuilder *divideCurveBuilder1;
8 p3 Y' ]; f9 U; r$ i, @2 R    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);
0 D3 x; }# o# \8 K$ V2 [- Q( E& h2 F- z) i2 W
    Point3d origin1(0.0, 0.0, 0.0);
' a( u% g6 }, g" ~    Vector3d normal1(0.0, 0.0, 1.0);
! n6 {! C5 G9 R3 a    Plane *plane1;
# V+ p) V" \; e3 \: `8 M- q2 b    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);
: r7 X: j8 i! K1 v' u3 U! P5 O
; O  T" a; f& C) W/ k    divideCurveBuilder1->SetBoundingPlane(plane1);
1 j: j" ?2 k. B5 j( \4 x0 R3 E
6 }6 ]; x* O7 W2 f  z, j    Section *section1;
+ g& P) j% F- h- H5 }    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
( z9 X2 G  G" ~/ i/ z) C/ C" E. z& F* z# {: ?* J
    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
8 ?, z+ {  }/ [( N    Expression *expression1;
% o9 Q$ v2 [+ ]/ g    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);' X/ N- b; y* n# \

- D4 D: L$ X/ g, z8 P/ a    Section *section2;# r/ O. V; m* K' _# g4 e' H2 r, s2 ]
    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
* W. @2 C" q. B* d" v  t$ T
6 k  U3 d8 d8 |$ G9 J# ?* X    Expression *expression2;8 d! d4 H+ A. E1 C
    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);' T+ Z$ e3 {5 W. R* i0 K  ?4 {0 Q

7 c! q" V2 a( V) S0 ~3 V5 B    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);
' K. i- n2 P- t8 ^! R8 D( a; _, Z, Z5 r# a/ K9 a0 A! p- }
    divideCurveBuilder1->SetEqualParameterSegments(5);
( Z# S" O0 f2 h6 R! @; B- X. A# P9 l
    divideCurveBuilder1->SetEqualArcLengthSegments(5);& N3 s& C& |) b: C3 I* t- U

1 {: l0 x) d$ W* e    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));
1 e6 ^2 X7 B, P" t% I& b; Z7 j. |  X* o. Q
    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);7 n( R4 L( \  [2 F; f9 z
( K( O/ k, o6 O) {( O
    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));( ^. V5 U3 P) W' m) K- x/ `8 @
    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);! t' W% j! f, @# N
    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);' y" {$ _  p" b* W' ]

: R- U2 O4 U8 R6 o8 u1 A# F# B    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);% W; }6 M$ C7 x3 s2 X

+ N) B3 I# P7 i; o! \9 w    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));* s/ x+ B. u! U# m1 r
    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));
1 Z2 J- o% a' j/ Z+ I. f- X- W    Xform *nullXform(NULL);
8 `. u+ i  H3 z5 v8 m( y    Point *point3;6 e0 M; ?" }0 o2 Q, ]/ d
    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);
* ]- d  g, f% P2 b5 P0 c  j! Q7 w2 e" r2 a% j
    divideCurveBuilder1->SetBoundingProjectPoint(point3);
4 @  ^, @0 b# b" {$ m3 Q2 {. {7 z- S$ ?1 C) s) v* {
    Session::UndoMarkId markId2;
( D0 t1 Q( L, u! G# a& u1 J3 G    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");
; H' t4 K: j1 Y, {, v
9 f4 l# M; E: x9 V) z    NXObject *nXObject1;
+ o! b, y& U6 w# V8 ~    nXObject1 = divideCurveBuilder1->Commit();1 F, m3 c& x0 W+ V( w$ B( y

2 Z2 V  o+ k2 c3 O( P6 A) B* l) w    std::vector<NXObject *> objects1;
+ t/ T, ]& Q& f$ T    objects1 = divideCurveBuilder1->GetCommittedObjects();
* Z9 B- o- ^' Z/ \: g. M+ q4 O4 ^+ ?1 X4 t
    theSession->DeleteUndoMark(markId2, NULL);
" x2 y  I" O" s2 w. f* i. R9 n
+ w  G( R3 H; I+ ?8 O+ [) E/ Z; C    theSession->SetUndoMarkName(markId1, "Divide Curve");8 h: e" m+ A1 _) w" h. R3 _  i- W
" C2 M0 E3 L' V' j) k' C
    divideCurveBuilder1->Destroy();
) C! A2 j* U0 b1 m* U6 \
- y. H4 B! F8 M2 s+ h    try
  }7 _1 t" ~  G    {
4 G  d1 k! F' ]- ~        // 表达式仍然在使用中。; ?( f( ^7 j5 K
        workPart->Expressions()->Delete(expression2);
1 q# H* ?" W2 v6 b# J    }
4 H$ d( ^$ c6 D2 E7 f/ p    catch (const NXException &ex)
! v! f3 n; r* E    {
. H) x1 H/ X( q7 g# N      ex.AssertErrorCode(1050029);9 a0 _9 |! g- k5 K7 E
    }
# Q$ \1 M; R9 z! A5 E0 T, A4 }+ m& D0 @9 X/ T+ Y, n& @
    section2->Destroy();
* P) N  Y+ e( U5 S; M
; m1 l1 {. |: y4 I* f, ]    try0 |* b9 r' ^/ V8 J5 s
    {
& I' y$ w  S, w, i: b5 y+ v& ?        // 表达式仍然在使用中。9 X/ R3 `. w! p; W
        workPart->Expressions()->Delete(expression1);
; E4 g) U" K" M5 k* {$ X    }) P! z3 k4 ^5 k
    catch (const NXException &ex)9 F+ u' u! I1 l/ w$ r2 ?
    {1 L' M1 W5 U1 ~  C% N& e* Z
      ex.AssertErrorCode(1050029);; ]' t( K/ v; Y+ p! B
    }8 f2 H- R  ]  r' i* i

2 @  d# b) Z. p9 t    section1->Destroy();& }0 w2 T5 A2 L) x

7 M7 E  H: v0 d    plane1->DestroyPlane();
! g' i  _0 r$ W; x8 o+ L0 a! K5 X. O, i% K! ?9 q' W& Z
    int nErrs1;
- t, ^, X  p6 D; `: m; L% f    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);
; F$ S( R+ s- t) @$ B" T0 E$ S
( S9 z4 Y: X7 \8 K$ O! ?    // ----------------------------------------------" {( L# Z# R& z4 g; p+ m
    //   Menu: Tools->Journal->Stop Recording
- S1 }2 F% S0 `6 o; N    // ----------------------------------------------
3 s% D! r6 a8 a" `# U  ~( E}
* _2 a5 P! E5 ?7 \, J) N9 z& n" ]2 I8 A% Z, F# [0 A" @( x" ^

- _; {2 w' D8 X& \" Y; i; N) n3 F! t
希望大神指点
' I: {5 ]% o1 e6 w4 ?' A4 A! w
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复2

admin 发表于 2020-4-5 08:52:59

admin 沙发

2020-4-5 08:52:59

objects1 = divideCurveBuilder1->GetCommittedObjects()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。! \! `7 I# H# P7 M$ d, D

' O: @3 H. O' M/ S# f; T6 k$ b% ~另外一种方式就是生成的feature,通过feature去找对应的子对象
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

SimonLv 发表于 2020-4-5 10:47:20

SimonLv 板凳

2020-4-5 10:47:20

C:\Users\99112\Desktop4 b; z3 H. O/ p" m
捕获.PNG % n3 ?6 D$ P2 }0 {9 ^
[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的# _/ f  Q5 @: G' T
- k: ~5 Y/ `) _  `( n; W
我用/ F7 @; W$ b" C* R" q
/ t4 y. j. n  T1 h& _9 \

- S( t! F' V. R# A[mw_shl_code=cpp,true]        Features::Feature *feat1;( C4 }- c$ _* j4 S. N( I) a
        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]2 q6 P, ?$ D3 B) g) r" G1 C
代替
$ U" Q  _6 ]4 u8 G2 m[mw_shl_code=cpp,true]    NXObject *nXObject1;8 G  Y0 k; G* e# {) ^
    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]% n# k$ `) C  P
也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??
5 ~* x. _5 y+ h( p' |希望指点一下?
& O& G7 p& ~' U5 O
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了