PLM之家PLMHome-工业软件践行者

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

  [复制链接]

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

1

主题

1

回帖

21

积分

新手上路

积分
21
发表于 2020-4-4 23:57:29 | 显示全部楼层 |阅读模式

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了9 J3 E" l( M& Y) S6 q
8 t3 X4 K# b0 y4 H; @5 t* ~
    std::vector<NXObject *> objects1;
6 F! P1 F/ W/ n0 u$ h/ A) x    objects1 = divideCurveBuilder1->GeTCommittedObjects();/ d2 ?' a# c: N5 v
1 u# g3 d, _/ [8 y3 O2 {2 k3 X8 M8 }

) @$ b' p: ~8 i/ t& c9 R4 C, C7 r! j( ?0 k5 C
完整代码如下:. U8 C' t6 Z) h9 z( f* S

, ^( S* t. B/ |3 w9 f8 n3 n/ d/ U// NX 7.5.0.32. ~) ]' }9 ^) x: q* s$ z* A' I+ P' I( O
// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间
$ M; n/ A( W% E. B4 z7 w% ~//
$ ?! P" }" z2 o  [/ a#include <uf_defs.h>
& i. ~& n* _* n3 B5 r, [#include <NXOpen/NXException.hxx>
! E5 |& s1 D1 q. o3 @- Z8 C#include <NXOpen/Session.hxx>
. g( G( r5 `  r3 R) v#include <NXOpen/Builder.hxx>
8 l, q# a# h( l( k#include <NXOpen/Direction.hxx>9 C' m0 J- m! Z+ a
#include <NXOpen/Expression.hxx>
; |0 d0 Q" {  h" Y% B) N#include <NXOpen/ExpressionCollection.hxx>$ A( W6 H! Z( C+ A8 u! m2 B* @( k
#include <NXOpen/Features_BaseFeatureCollection.hxx>
/ U5 i. y7 M5 _$ u1 ~# F#include <NXOpen/Features_DivideCurveBuilder.hxx>9 }) ?* t2 T3 j1 [) w9 I
#include <NXOpen/Features_FeatureCollection.hxx>
/ m& _2 ]* s' r# @. b5 `( ]9 M  f#include <NXOpen/Features_PointFeature.hxx>( F  p+ _" x' t, X4 M7 L/ e
#include <NXOpen/ModelingView.hxx>
  X% Y; {3 c$ I% j#include <NXOpen/ModelingViewCollection.hxx>
8 `( n$ \2 K6 _6 U#include <NXOpen/NXObject.hxx>" G* M. E1 E. @/ z
#include <NXOpen/Part.hxx>( s9 V( R. v8 A: Y9 L7 Y
#include <NXOpen/PartCollection.hxx>$ k1 B  R, c  I5 L  Y  [
#include <NXOpen/Plane.hxx>, \5 t+ {3 }" j: l4 m
#include <NXOpen/PlaneCollection.hxx>. H2 v) h' B2 _& `: H/ D, X0 q
#include <NXOpen/Point.hxx>
1 E& c8 Y  H( K+ p#include <NXOpen/PointCollection.hxx>
# P9 c+ w" g2 E#include <NXOpen/Preferences_PartModeling.hxx>
9 P4 P; p0 x) `1 {) e( i: p! E#include <NXOpen/Preferences_PartPreferences.hxx>2 Y: v4 u. w% r
#include <NXOpen/Section.hxx>3 L0 E! O$ R" `
#include <NXOpen/SectionCollection.hxx>
" B( a( S* G- [. R1 H( n#include <NXOpen/SelectCurve.hxx>1 I$ W- Q* D5 \4 B' X2 n
#include <NXOpen/SelectObject.hxx>1 ]! t8 n8 e5 a. R
#include <NXOpen/SelectPointList.hxx>9 F  D5 V# A( M3 N' O2 m9 g
#include <NXOpen/Session.hxx>
( A# ?, ~9 p% h& N/ K% D; I#include <NXOpen/Spline.hxx>
' H% e0 Z7 j9 O#include <NXOpen/SplineCollection.hxx>
/ `/ y, a1 y, o6 ~, f  p#include <NXOpen/TaggedObject.hxx>
1 f5 W: e3 r5 _' j2 E: R# ?4 z#include <NXOpen/Unit.hxx>
/ L5 F4 M. ~  Z* {6 n2 K#include <NXOpen/UnitCollection.hxx>
7 U2 V# [( y. y7 m+ Q# |6 r6 Y#include <NXOpen/Update.hxx>% y! k9 k: m" g3 {* O6 v
using namespace NXOpen;
3 [4 c! p0 j* C" V/ L! j* {( _1 ^8 J& O, }
extern "C" DllExport int ufusr_ask_unload()! ]; L; G" a5 q! i' E
{2 E3 i% v1 F3 E
    return (int)Session::LibraryUnloadOptionImmediately;/ {' B7 [* C* i/ y4 ^6 B
}
! Y7 O; N& V! l' _( y- Q8 v/ F* g$ |: t- E
extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)
) M1 T% W& R& ]0 a/ Q- t7 a{9 v2 q0 S9 n9 Q( }8 E1 ^
    Session *theSession = Session::GetSession();3 p9 o, i( w7 e  f% l
    Part *workPart(theSession->Parts()->Work());
0 f8 P/ Y) i+ e" }* W2 m; P    Part *displayPart(theSession->Parts()->Display());
3 p2 p! n- U2 ]    // ----------------------------------------------
: j0 W: t* W- |9 E/ q    //   Menu: Edit->Curve->Divide...
8 K9 F+ X3 B, m1 c( R    // ----------------------------------------------
( w& ]6 r7 O0 f. J* w8 Z5 T    Session::UndoMarkId markId1;& V. h8 d: b, d, r
    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");
3 S$ r/ r4 M0 I8 j7 {) l* \% F+ \/ c& [/ {# ?
    Features::Feature *nullFeatures_Feature(NULL);
3 e) [9 x6 U! G+ m) D! a
" g; `& \) L, c; \    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )
6 P" v( i( m8 V4 O" r    {! w! e. w4 w* N- s
        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");
& F4 k3 p; V1 q6 G: _0 [    }( ^8 z/ c3 r! v1 C- p" r! A' R, e
! h0 L# K" p, }1 f# |8 E) L( E) H
    Features::DivideCurveBuilder *divideCurveBuilder1;2 Z% R( o( K! G! f' I4 z, F
    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);
6 J( g* h' i( l% T! P1 ?$ Q
  i7 t: g2 a! b, h0 d$ \    Point3d origin1(0.0, 0.0, 0.0);. A3 m- R' g9 ?  g( c  y# M
    Vector3d normal1(0.0, 0.0, 1.0);
9 {$ \2 N7 @7 l1 m- I! `7 X    Plane *plane1;
% M, O( i8 n  b    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);
8 o0 @5 V. ?8 w) V" b0 V2 v& M- q' V7 V% `( W6 Z$ ~
    divideCurveBuilder1->SetBoundingPlane(plane1);, y6 P- g. K& F

- |, @! R/ }+ g* i9 j    Section *section1;' F% d& b5 B2 k( \2 m/ d4 i4 P  y
    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
3 K; C; W* ]5 D  t1 W, ]6 s) ]$ O! U8 R" y
    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));; W% v& b# q2 I, a
    Expression *expression1;
; A9 ]/ _) d7 J: ^7 o+ k) P    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);* W7 e9 T$ H& j
) t4 I+ W; J) z8 H' U
    Section *section2;
2 `0 q% V8 v/ `! j5 ]    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);) _0 O/ ~) b+ L* G% d3 N

: R+ ^( [' y+ B- [; N    Expression *expression2;
4 Q/ s& ?) k+ X0 B. C/ @! |    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);" p  Q# y+ V# F/ u1 P
- h0 s3 s2 e% l& ~0 f" r
    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);% U! ~4 X1 D* Q) r
' @; d$ o! R; D, m; _/ s' h
    divideCurveBuilder1->SetEqualParameterSegments(5);+ D1 ~) e9 g) P; a4 N0 g( _9 u( l
5 P; w2 H$ z5 ^; d. v) l
    divideCurveBuilder1->SetEqualArcLengthSegments(5);
' K4 z" a8 e0 k& _
. u  l# B3 j5 d7 R+ S/ m. s    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));
6 J6 Z' r- M- w2 i9 ~: `% _& b# G1 @  u# u: C; w5 J
    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);
2 N3 A7 V/ i' V8 S8 t
4 b- h6 m6 ~3 N9 t& Z$ ]    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));. i5 D, Z% L4 o7 A4 f6 r
    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);* v. |( d) D' R6 }& L. g# N+ j, s2 l, h) h
    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);
0 g! Z* H6 b0 J$ u' u9 Z
! }  L  U% f4 b+ H0 z! T    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);
& h# p; C' t; B* ?9 t6 D+ M0 O7 n$ C+ _. w1 l; H" g# d, N" E
    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));
  K- C/ F$ w( p: D    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));7 h' n1 v3 Z8 \
    Xform *nullXform(NULL);
( m- |! Y6 g9 W8 b    Point *point3;
# U$ C/ z" B& X0 Z+ u+ {    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);' y4 \  X$ [8 Y8 }2 X( v3 D2 z- O
" X+ D9 j( t! Y: g/ z& R
    divideCurveBuilder1->SetBoundingProjectPoint(point3);
; l  Z. C& n3 ~; R# T! {+ B
8 m9 `' o; i, d    Session::UndoMarkId markId2;( O. o4 B* f' f
    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");# S& w' b+ e6 _0 e. E% G: c- p

- A! e0 a7 R0 K# o8 R( l- l+ G    NXObject *nXObject1;/ I) t& e8 K8 L! a+ e$ h/ e
    nXObject1 = divideCurveBuilder1->Commit();7 Y2 V. _  g( P' V
# F7 b' K8 D4 {8 b: v0 `
    std::vector<NXObject *> objects1;% F9 e$ g0 D4 ~9 M& P# n4 Z9 f& v
    objects1 = divideCurveBuilder1->GetCommittedObjects();! M8 @: J* ]/ z) k! h5 C9 v

, c# y6 n- F3 W    theSession->DeleteUndoMark(markId2, NULL);$ [: @9 m& h/ r& u

. E7 Q  W% a- D0 o- ?7 b# [5 p    theSession->SetUndoMarkName(markId1, "Divide Curve");
% N+ m' S; k. F4 v: X
% ~5 ~6 F0 K2 m5 F5 _0 n6 Q. z+ u    divideCurveBuilder1->Destroy();) F# o& G: |  p5 Z* v$ v( G
' G7 i7 i% m: o, }( w, j( x" H
    try+ Z7 |! T% Q+ W$ T( G
    {: S; l9 X. d8 Y/ S! o
        // 表达式仍然在使用中。
+ }9 G/ h) C( L- @9 M        workPart->Expressions()->Delete(expression2);- T8 p$ E1 w3 V9 E! q
    }5 \4 x: e' }, x4 B( A- K
    catch (const NXException &ex): j% }5 l9 z% f1 v
    {4 F/ O) P+ ]! r! T: u, [# }
      ex.AssertErrorCode(1050029);
: f$ t* y* O* H' b% L; B  J! E/ K& b    }1 q1 a8 C. w# Z; h* |3 U# Z# o# q8 u, I
# v+ B% E" S/ w$ f  y4 d) U2 J
    section2->Destroy();, C/ c7 J1 x/ E* g! u) f, G# }/ g
# n0 @: `- L, M+ a0 B
    try
4 Q* v* p5 i* a: S: J" }    {) \6 \; I& g- ?! ]) ?
        // 表达式仍然在使用中。/ i- k5 t3 y' ~! u8 e7 p6 Z: j
        workPart->Expressions()->Delete(expression1);' v% }4 U' s' c
    }+ U) C2 `7 ]( E+ K7 s' J2 `7 x
    catch (const NXException &ex), p# |  T. p/ f7 G9 V
    {& s. H( |1 T6 p0 B) I
      ex.AssertErrorCode(1050029);
, A! ?0 U$ h+ p    }8 T8 N, w; Y3 U* N( }8 @2 @% E

) r" X' i) [. S! z, n    section1->Destroy();
5 X4 O: N: q% z1 K& d! F2 {7 S- u) q$ s+ d
    plane1->DestroyPlane();, A) I2 p) _" M  c' R  e
5 T6 M- a, ?5 Q8 \" h" E1 H
    int nErrs1;
5 U" e# V, B  d    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);
% H# B# S2 `1 f  D& c4 W$ Z) w$ C
  m1 a+ a0 d% Q1 d    // ----------------------------------------------
' z  p& t) y$ x  n% H( l  g: a    //   Menu: Tools->Journal->Stop Recording
0 i  h+ \' y) L5 m6 P3 J    // ----------------------------------------------
: F# D& l. g$ k. u7 F, c}
9 w# @0 S% q" d8 Y" r1 B# G
9 A! W2 e4 p/ m4 o2 a+ P
! {& k0 b( O& X  H0 A* x( I
/ C, Q* J7 H# z/ a1 j希望大神指点
' A1 F3 f' |8 B4 Q: G2 W4 A7 y
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

全部回复2

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2020-4-5 08:52:59 | 显示全部楼层
objects1 = divideCurveBuilder1->GetCommittedObjects()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。) [% |- O) H' i1 I5 l+ f7 Q

. h4 s* T) @6 _# x, L7 B另外一种方式就是生成的feature,通过feature去找对应的子对象
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

1

主题

1

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2020-4-5 10:47:20 | 显示全部楼层
C:\Users\99112\Desktop
4 A" K6 r+ w' z, b' S$ b 捕获.PNG , A8 _/ i* V' |  V! D* }7 P/ K% g" z
[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的0 {9 ]. [3 f) Y! z- A( a7 E7 M( i

& |' M, N. r  A$ t  l9 c5 g) B7 }我用7 Y6 y+ @" r/ f! B
8 l% q0 o, k7 n! D# B
4 D5 p6 N( e8 O8 @4 ?
[mw_shl_code=cpp,true]        Features::Feature *feat1;
' ]2 S. l8 L- M        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]
+ W1 m! z, m# ]& C代替
( C; C* a8 s2 `# A0 T* K" r0 Y[mw_shl_code=cpp,true]    NXObject *nXObject1;) W5 t  Y# S  g7 g
    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]8 U- I- [, Q* `" p/ [
也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??6 i7 ~* D* C  y0 m
希望指点一下?7 P" _+ I# t7 E
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了