PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

PLM之家PLMHome-国产软件践行者

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

  [复制链接]

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

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

SimonLv 楼主

2020-4-4 23:57:29

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了  ^' J" d  F/ j/ i
' T- z3 I$ L4 [, o% y7 K; h
    std::vector<NXObject *> objects1;  ^& }) J( S" z8 q
    objects1 = divideCurveBuilder1->GeTCommittedObjects();. Q1 N' X: G5 J& E! T: K. y$ Q

3 K3 ]$ g7 w% S' @3 c% u6 P
9 d, g* o6 |) r( M2 B6 ^# r6 O+ [
( ]; j5 {) H; j- }+ k/ r完整代码如下:
* g& S7 }: a) N! h# F
# P; j+ R: U# G% D# T2 t$ A// NX 7.5.0.32
; s! E& _, L# {// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间
9 C( O4 U& G2 {/ t//: a4 `: V. s+ w4 g9 S; Z4 g
#include <uf_defs.h># F3 f8 t6 u1 E( _2 e1 u5 h1 z
#include <NXOpen/NXException.hxx>8 Y, B  {( K) d0 l
#include <NXOpen/Session.hxx>
. K/ I: @7 f7 P2 R6 C9 A, F% V#include <NXOpen/Builder.hxx>. j* W, [% ?7 H
#include <NXOpen/Direction.hxx>
  {& [: o) I4 Y' W, w- e& W( ^#include <NXOpen/Expression.hxx>
7 U* Y/ a3 F% `# {0 P- ^#include <NXOpen/ExpressionCollection.hxx>
* R+ x, h! q: p8 @) \#include <NXOpen/Features_BaseFeatureCollection.hxx>
$ n, `9 \& E, T& W' c8 a#include <NXOpen/Features_DivideCurveBuilder.hxx>) h# J& b; e) ?  m" Z; s
#include <NXOpen/Features_FeatureCollection.hxx>3 Y0 t# K( W) N
#include <NXOpen/Features_PointFeature.hxx>6 l( o% d1 \  J  z8 S6 i* Q
#include <NXOpen/ModelingView.hxx>1 q9 d. n+ s2 ?
#include <NXOpen/ModelingViewCollection.hxx>
  h; B9 ^: g, _2 T#include <NXOpen/NXObject.hxx>4 z3 [+ K/ ^$ X7 J9 Z
#include <NXOpen/Part.hxx>% w# i6 T( A( \
#include <NXOpen/PartCollection.hxx>' c/ ?1 p! v: ^3 i# d6 x) W
#include <NXOpen/Plane.hxx>
9 h8 `# R8 e* c#include <NXOpen/PlaneCollection.hxx>
$ d+ T; [6 T0 H. S7 c9 A#include <NXOpen/Point.hxx>
% i9 R0 j$ p+ T2 _) \0 H#include <NXOpen/PointCollection.hxx>
5 C# n; X7 ^! E$ }#include <NXOpen/Preferences_PartModeling.hxx>
! ^5 j- u, B5 K% T# F; r7 S9 B# P#include <NXOpen/Preferences_PartPreferences.hxx>8 v2 g* `% O" z% O" X% v  i1 E
#include <NXOpen/Section.hxx>
: c2 @3 W. _$ b$ z#include <NXOpen/SectionCollection.hxx>
$ o8 f" U3 E5 j7 m6 ~#include <NXOpen/SelectCurve.hxx>
$ J* O, `9 R: e/ o" B9 C#include <NXOpen/SelectObject.hxx>
3 |; W& g* ~9 E8 J/ c! e3 t#include <NXOpen/SelectPointList.hxx>
! y8 j0 |" T; X#include <NXOpen/Session.hxx>
' C; _$ a( ]; u( b4 M' z" S#include <NXOpen/Spline.hxx>1 O2 o) r6 ~3 f( q
#include <NXOpen/SplineCollection.hxx>
0 N4 U6 M8 i9 B#include <NXOpen/TaggedObject.hxx>
- o% _7 N" |9 _' o#include <NXOpen/Unit.hxx>
) U% U4 T: U: O. T% @- u8 x#include <NXOpen/UnitCollection.hxx>
' v7 R: f: I. F- n' e#include <NXOpen/Update.hxx>
* ?* }9 B4 _  }& fusing namespace NXOpen;9 ~3 ~% d. Y" w2 |, E
9 z; y: Y8 ^. l$ }! N
extern "C" DllExport int ufusr_ask_unload()
' i" d! D# A- @- g& r1 ?! a! ~; u{4 c; l- t+ K- m8 E
    return (int)Session::LibraryUnloadOptionImmediately;
$ ^8 L% ~; d1 k  I. z! H1 Q$ o5 V  Z: k$ X}* a; J7 w  V  M- i# x& o
! t# n. X' c8 X  ^' l" @( z! u
extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)7 l" A: [6 k& U
{
5 f2 o1 S" l+ N6 K2 [    Session *theSession = Session::GetSession();
1 p) t  b3 l7 u" z  i3 ~0 o4 ]    Part *workPart(theSession->Parts()->Work());2 h# M! I, W5 J* ^4 j- d/ V
    Part *displayPart(theSession->Parts()->Display());
3 f. W8 P4 j. J0 ^" w2 F' W! l    // ----------------------------------------------
. O: d3 H& t  ^8 _    //   Menu: Edit->Curve->Divide...
% @" Z* ?3 P: [2 B8 h    // ----------------------------------------------
) c' J* v4 j0 Q    Session::UndoMarkId markId1;* a' A- o( ?: P
    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");8 D3 z. ^- |7 Y8 [
. _# N8 D. [# h
    Features::Feature *nullFeatures_Feature(NULL);
1 o8 J4 `% d3 Z7 F/ a. O  V. X+ Z4 f# q9 v
    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )4 V: k" y: b/ Q6 m, v3 f
    {4 A' T! b. W2 x) v4 E$ P
        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");
5 L# l! G/ T, `: g# N    }( w4 U7 K6 d0 ]" Y; I* P
/ B8 g, k- U+ a0 C
    Features::DivideCurveBuilder *divideCurveBuilder1;8 q7 x' e- E' E$ g* z% L
    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);
& F# j% @3 h) _5 |, n! G6 v0 U" e- q8 k6 j
    Point3d origin1(0.0, 0.0, 0.0);) R! t4 q! m7 R4 r
    Vector3d normal1(0.0, 0.0, 1.0);
4 ]' z8 f4 j" h+ g7 e    Plane *plane1;7 Q9 {/ g* H3 m
    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);4 E6 `7 r2 K* T  I

9 ?% ]0 Z- b" B/ ?* M    divideCurveBuilder1->SetBoundingPlane(plane1);
7 |/ {2 ?4 s& ?$ `6 `
1 h# Q# d5 Z# Y, R8 |) o4 g    Section *section1;4 h7 q8 I. m. R, W( f
    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
" T8 d+ d1 @' d5 k% J% {8 b( d. H$ {+ M+ f) l0 U* p) P2 X
    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
' x" G' X4 ]$ U* U" g8 [( B    Expression *expression1;3 w% U9 c$ W' {# h1 {
    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
* y& ~) F% p; N6 `0 f- k4 M6 b0 r& [1 h) P, `- j5 w0 n
    Section *section2;
1 c+ B# i- q% I0 u8 c" l, K# ]    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
$ F0 {6 T* U$ F" |# K0 b
' M, }$ l7 V( d7 G) F1 [    Expression *expression2;
! c' t8 q2 F- p" o) i, Z    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
4 e# w' G- B! O! K* n4 w8 C) I. p+ M" l1 X/ N% d* H
    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);
0 |( }8 y5 n: \
) K1 c3 e: {4 g2 K9 }# I4 }    divideCurveBuilder1->SetEqualParameterSegments(5);
: a  D1 x0 q: p. a
/ {9 n% \( B# k6 S1 N, _! A    divideCurveBuilder1->SetEqualArcLengthSegments(5);
  _3 W# Y% I; Y5 F' z
% U- ?/ M" p3 i0 p3 F    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));/ S2 @3 J; N% z: w$ b% \: }# z
: @5 ~( [2 ]1 _$ ], e* e
    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);
9 i/ r5 l* K& H; Y, p% ^. k; ?' u1 S& v: N* z9 Y  u5 O0 y/ i3 y
    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));9 l* T1 u- e" ]0 J) B/ B5 k6 G
    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);$ g% {8 @* v- u9 x" e& b6 [
    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);
6 q8 I* Q+ ?' N3 O3 P& a5 k! j
( `" j; G7 |. K% v, ]8 ]9 R    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);
1 j8 {7 q+ f& ]  k, N* [7 G" Z: K6 }' c/ Q9 z( M
    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));2 E: B% t% I1 _" @2 h+ _8 e7 Z
    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));$ Y! g( B8 `; Q+ x$ v8 A2 V
    Xform *nullXform(NULL);- R" m( i7 D5 M* E! C, r: T8 a
    Point *point3;8 D+ k/ F9 t4 h( o8 R  ]
    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);
9 B5 m* R+ n+ S' n* G% T: b
: w2 s8 o( `7 R1 E    divideCurveBuilder1->SetBoundingProjectPoint(point3);
+ X% ?3 A: `7 Q- g* x& u  u& t- _2 @  z- l
    Session::UndoMarkId markId2;- Y6 H. O+ R3 Y
    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");5 m8 \8 D& @. `' q" g
8 b3 w4 x) j& F0 O4 D
    NXObject *nXObject1;
6 ?, y( o6 W/ [4 {! ?8 Q( P    nXObject1 = divideCurveBuilder1->Commit();# Q6 D3 Z& \! R
& [' L( G/ g* y) p7 s% J0 s
    std::vector<NXObject *> objects1;
: _" a: u9 y" B' P" g    objects1 = divideCurveBuilder1->GetCommittedObjects();
6 [" L& w7 P) X' ^& c! [2 @5 A% U) M( E7 M* b
    theSession->DeleteUndoMark(markId2, NULL);
( _5 `. u6 F% U) T  t. m1 ?0 ^4 I: Q/ E% T) ^2 a
    theSession->SetUndoMarkName(markId1, "Divide Curve");; m( ?- q; Y5 E2 M6 z) A

4 c  e( b% H0 d    divideCurveBuilder1->Destroy();/ a+ V/ v- |7 f5 q% {3 ^

) i1 g' n! J* N2 N    try
/ e- s, ~2 |5 N8 R    {
  l6 L" l" T% `7 e        // 表达式仍然在使用中。
5 _& G& u' e/ f        workPart->Expressions()->Delete(expression2);
: g- K5 n9 B6 \1 Y    }
# ^; v. j: U# A    catch (const NXException &ex)1 _) E* {6 H  V
    {
+ v2 V) d$ {  b/ `/ N6 D1 H      ex.AssertErrorCode(1050029);
. ]/ U& T( O/ j% Q" X7 Z# l    }' N: s  K" R7 J# Y. r

0 G0 ~6 b( x4 Q0 e$ L    section2->Destroy();& u) a$ F+ q1 x- B
* E: Z( s1 F9 r6 _; a8 E5 \. z5 a
    try1 J9 C: @0 j7 {. ~" b
    {! {4 i& {6 s# z6 ]; n/ W  i
        // 表达式仍然在使用中。
: L, X" [. m2 m& G        workPart->Expressions()->Delete(expression1);
/ P( p' o6 h  `    }1 N) {6 E7 M( U: O$ u, O
    catch (const NXException &ex)
; o( S( k4 j' A3 i9 Z    {- E% }& K6 m7 g2 \4 R
      ex.AssertErrorCode(1050029);
- h( p  V+ Z, u* v    }
3 R5 ?8 R% `1 ?: X' X! r0 y% X! |( U1 f% o
    section1->Destroy();
" ?% `; C4 d+ x8 U1 S7 m: O' I  Q- B# l/ u1 J3 c# h. |
    plane1->DestroyPlane();
6 i5 g( J+ k, a' i: v* H) f! \- {' Q* v
    int nErrs1;
# g' a) e' m. [' m# R3 C  p9 ]/ ]    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);0 D' o; H' s+ w/ h! |" B
2 e8 y6 x& {, F7 N2 K2 }+ O
    // ----------------------------------------------, H; h" q$ L% W& {( I$ _
    //   Menu: Tools->Journal->Stop Recording
7 y0 n3 P; y7 l9 d# N2 G0 \1 b    // ----------------------------------------------
" o4 C9 T3 k: |& P, K6 C  I2 _}/ A' I/ P+ x1 Q9 |/ Y+ A1 |2 X

4 @/ T7 r1 o# r3 N' P. k  [! ~0 d/ h! v2 t2 A* y4 g

, h) n& u5 O( f8 C+ u, I希望大神指点4 W5 e7 O+ s9 `
上海点团信息科技有限公司,承接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()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。
3 W2 n' ?- p. b8 [5 y2 C# k. M3 N  K- w, I. T( P+ U- r2 _) J
另外一种方式就是生成的feature,通过feature去找对应的子对象
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

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

SimonLv 板凳

2020-4-5 10:47:20

C:\Users\99112\Desktop1 t$ k6 X1 x4 {( S
捕获.PNG
% b" o" j7 S& `[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的
* H3 U, S" z1 Y
" E2 v. r5 V& D! @2 p; m我用
9 j8 I% w3 a% @0 q
' v$ E& Y+ {3 d, Z
# ^9 d9 l! s6 D* J% X5 D[mw_shl_code=cpp,true]        Features::Feature *feat1;! n. n* a; x9 N4 K- G% E
        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]3 `. u5 m& [5 m2 d6 K' y
代替
! [/ J4 n& [$ _- e/ b3 D; [[mw_shl_code=cpp,true]    NXObject *nXObject1;
8 F+ R. i0 g% z, O* g" ~8 g    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]
9 a; h' L, P, s$ s1 g9 ^. `也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??
! r" E+ V0 r7 S7 Y& \" {希望指点一下?
3 M0 f1 K% u# G( a+ k! X0 C$ _
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了