PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

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

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

  [复制链接]

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

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

SimonLv 楼主

2020-4-4 23:57:29

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了* B- K/ y9 }8 F7 |3 ^

7 t' I# g) J/ q) v& ^! [2 ]$ J$ {7 G    std::vector<NXObject *> objects1;) L$ W4 H. j1 Q1 P+ ^3 ?. E& q
    objects1 = divideCurveBuilder1->GeTCommittedObjects();# P# {5 G% c, J4 R3 `
7 y  \. A  c! i# a* e4 S7 l
) v  l/ w, W8 n. l" Y2 H' C% |

7 x. Y' a. b5 u% u( H完整代码如下:
3 U5 k" F2 J6 a, a: A
$ [" N9 i, R+ ]5 r% w// NX 7.5.0.32
2 K: t( l! u( f( W$ k// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间
0 ?4 `' c5 }  B+ n5 I//
, r- I5 l9 T0 b  Z#include <uf_defs.h>: ~" p2 B; F. Q! |5 L/ J$ g
#include <NXOpen/NXException.hxx>
& W- S" j. P$ P& x/ X#include <NXOpen/Session.hxx>$ ?- d. S* R& H( C% {' g
#include <NXOpen/Builder.hxx>" C: ^! K  P# t% s$ u
#include <NXOpen/Direction.hxx>. R1 Z9 Y% z3 S( i8 Z
#include <NXOpen/Expression.hxx>4 a( a1 B* J+ K3 q0 u
#include <NXOpen/ExpressionCollection.hxx>+ e8 U# M$ K( B1 X- \4 T( a/ C
#include <NXOpen/Features_BaseFeatureCollection.hxx>' F1 t/ S/ W5 }( @  T) y
#include <NXOpen/Features_DivideCurveBuilder.hxx>* U4 S3 W2 \2 O
#include <NXOpen/Features_FeatureCollection.hxx>
# o# x/ U. t/ c5 {4 Q#include <NXOpen/Features_PointFeature.hxx>
9 @" V) W0 w) ?3 c#include <NXOpen/ModelingView.hxx>
# Y; j: y" D( j#include <NXOpen/ModelingViewCollection.hxx>6 P" t* Z4 U8 }" \' N
#include <NXOpen/NXObject.hxx>" ?& D1 ^3 W$ c
#include <NXOpen/Part.hxx>
% \+ ^& r# g' A& c% }+ @#include <NXOpen/PartCollection.hxx>
& \& o6 [/ h0 f: s: C6 P#include <NXOpen/Plane.hxx>% U) a, M/ }+ ~
#include <NXOpen/PlaneCollection.hxx>
: _' n/ q7 @' y# a6 U' G#include <NXOpen/Point.hxx>! o5 M) `1 Q: `. A. k$ T. s
#include <NXOpen/PointCollection.hxx>
. E$ R$ Y. u' x# q#include <NXOpen/Preferences_PartModeling.hxx>
, N- \' Y! ]: m1 P#include <NXOpen/Preferences_PartPreferences.hxx>9 s1 u+ y3 t/ d+ E/ B4 m
#include <NXOpen/Section.hxx>
0 H( y3 F( V1 `) b# L3 s4 M#include <NXOpen/SectionCollection.hxx>4 [! V$ H# n  E0 D1 f3 k" l
#include <NXOpen/SelectCurve.hxx>* B4 u! z, m$ c7 t/ @  u: ~
#include <NXOpen/SelectObject.hxx>, L& \6 H5 g' J  @
#include <NXOpen/SelectPointList.hxx>! m  ~1 t9 t+ g2 v% J, V
#include <NXOpen/Session.hxx>( }  I" O1 e4 o1 X- v! J; }% p
#include <NXOpen/Spline.hxx>% _; n( u1 z! G# _* W+ Q
#include <NXOpen/SplineCollection.hxx>
5 I1 ~" ~6 L/ V1 h#include <NXOpen/TaggedObject.hxx>
( N- m& p8 o* e5 C#include <NXOpen/Unit.hxx>
6 T. U7 ^5 Z* o+ r; o#include <NXOpen/UnitCollection.hxx># v% B1 b# B# i
#include <NXOpen/Update.hxx>
. B' Q  w* K& k: ~1 Rusing namespace NXOpen;
& K4 y" q: U1 u7 O! n5 }
- X& o0 _. G, L8 x8 |extern "C" DllExport int ufusr_ask_unload()
9 q% q" z/ e* I' A% r{
, v' Z" [" P# c. ^! P    return (int)Session::LibraryUnloadOptionImmediately;
3 _3 @( A1 z, Z3 n* L}
) d1 W4 A( F' _$ O2 G' F( \+ G$ x
/ J! Z/ C, j' J' {extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)% a  X$ O4 B$ U/ e2 t
{, q8 q* E! J. e5 r
    Session *theSession = Session::GetSession();
) E( }) w9 P" x& K    Part *workPart(theSession->Parts()->Work());
* w- p% A$ a" x    Part *displayPart(theSession->Parts()->Display());
& t1 q" y8 X/ t& L# V- D    // ----------------------------------------------+ x7 t" O, Y0 I% }( L
    //   Menu: Edit->Curve->Divide...3 J( \; u  D! I, R
    // ----------------------------------------------4 z( `# A% O" o0 J5 G7 T7 f
    Session::UndoMarkId markId1;
; Q% `' P) Z2 Z; o' _& d, N+ b" `    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");
6 h0 m$ r( t' n( ^7 q5 ]8 R  B( j4 o# I( j
    Features::Feature *nullFeatures_Feature(NULL);; I$ Y3 m; a8 t# T
2 P( c6 t# ^" x" k6 b
    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )6 S% ^" x3 R; W, h  Z
    {
/ y3 i2 h' y4 u8 K: |        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");
6 n( s6 V2 o: e2 D( F    }
+ A( w3 s6 K: o8 p# r* n9 w; b! N
! e( b. g. b( O% O" n) @    Features::DivideCurveBuilder *divideCurveBuilder1;6 g" h5 \0 B/ b
    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);: P3 `& i+ T0 A$ k8 l7 P% g
1 M; h2 `- b  M0 \/ \# p
    Point3d origin1(0.0, 0.0, 0.0);
& ~3 {& ~; ^/ r- t' F2 P    Vector3d normal1(0.0, 0.0, 1.0);2 p# W2 r  O" a) T# t5 U3 [# |
    Plane *plane1;4 W3 k  F' n' z$ E" W8 ?* ]6 |
    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);- Y1 q/ Q8 Y3 ?) `7 x
* r( c5 I: Z2 E9 |0 s0 v) ^
    divideCurveBuilder1->SetBoundingPlane(plane1);
# H, [; M2 q* u% e: |* Q+ h
. R* w: b5 ?( c- V2 Q    Section *section1;' i2 o3 R4 ^! H. X
    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
) T2 n3 ?: M3 f5 E! c/ ]* {. s5 @2 d
    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
/ X. x# h* H7 S2 D; m    Expression *expression1;
3 e4 m* P9 K; t    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
5 h& b# K) g  P1 m) O9 z) G+ a$ A- O1 b9 y! U
    Section *section2;
1 d) {' N% ?/ `/ [+ ?    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);2 y0 C1 D0 u- ~
( m7 t6 o+ }( ?4 F
    Expression *expression2;
* T0 s' `0 o& H. `( ]    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
2 u% O7 R- I4 N
$ ]: d0 M# V% ~- G  @    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);7 y7 u* R, X9 M- u& d

8 w/ Z* v3 b3 Z: U. G    divideCurveBuilder1->SetEqualParameterSegments(5);
; {5 Z: }  R$ t# B4 Q# V( [$ z3 e+ o( s
    divideCurveBuilder1->SetEqualArcLengthSegments(5);
% g0 G$ m6 a+ J! V. J7 U
+ \4 y# U7 ]+ Y" Z* f) K6 G    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));
. @$ Q1 b* g# T7 ~; b* Z3 c
  k* l5 y5 k( {, K    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);! \9 J: O8 {  l, q6 d
- Z0 h0 D% i! C0 F/ `5 o
    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));6 n# {( H+ E' V, M5 k
    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);' ~3 q7 L0 U, g$ ]
    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);
, _% I( d+ p- a/ ]: G& j( ?; a# R& E# j
    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);1 g4 k9 d! r5 q3 l3 ~9 z* g  [

+ Q8 r  ^( C% b5 f$ E$ ~    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));
3 l/ A( ~" G' z    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));9 M$ _9 }$ D0 ?: f# C, W
    Xform *nullXform(NULL);
! k) |0 K) q4 S; _, t5 B+ c$ d7 w+ t: L2 n    Point *point3;
3 v6 j. x3 b6 J1 s5 z7 k' m7 q    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);
3 T$ @- c/ j& h# ?" p) b1 G# O
    divideCurveBuilder1->SetBoundingProjectPoint(point3);
  m; J# e) j! O5 E1 N+ L$ `# D( ^2 A( l0 ?; I* y! a4 w- F# e
    Session::UndoMarkId markId2;
# Y; J4 ]: O  f3 _4 m* c# Q" s6 S0 z    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");
5 v# s1 Y) o; s/ z! l$ c0 N$ p2 B, f- v# t# G& c' c
    NXObject *nXObject1;2 [' L: O+ ~& H# k: r
    nXObject1 = divideCurveBuilder1->Commit();% A' I( _6 ]5 f

% R7 O7 o1 x- v# Y- P( Y$ {( a    std::vector<NXObject *> objects1;  Z$ y2 Z( u+ A  }# {! h* L
    objects1 = divideCurveBuilder1->GetCommittedObjects();
( O3 b  Q1 C6 E- v$ t- C" J* p+ `
6 t& N8 v' l. V    theSession->DeleteUndoMark(markId2, NULL);
0 J3 C/ q9 G1 f0 U8 k
2 n2 O. y# a0 W    theSession->SetUndoMarkName(markId1, "Divide Curve");5 C8 Z) \- Z. h" Y6 i4 i0 M

3 d& S$ Z. l7 ]: S  |2 h0 |    divideCurveBuilder1->Destroy();& M  e5 M9 G8 A1 S; z! T. R

- u5 a  n0 L) }2 d  p  C- \) P) j    try
0 c( P! b; X) N" n4 w5 g' ^3 G5 \    {4 k: |3 a$ X" b5 L
        // 表达式仍然在使用中。
) J! [' m1 t4 \5 A6 l$ o        workPart->Expressions()->Delete(expression2);* `5 i0 S/ G, y# H. H/ c: Q. ~
    }
8 F* U5 G, j+ X  q    catch (const NXException &ex)
4 U! P) }) |0 u, K( x5 l    {- m0 u" ^7 t- o, F* o4 @  k
      ex.AssertErrorCode(1050029);
8 j# P" I+ k2 W1 x$ f    }, Z& {% E' X$ l0 ?

% `' k! l; h4 z' `9 X5 _* S$ G    section2->Destroy();
- J* `0 L+ n% I6 U8 g4 Y& M* f3 ?9 v: r0 V  f4 F( Z
    try0 W1 @' l2 H/ B* C( d( Y0 H* _
    {7 D; e% ~. B: K- ^# D8 x, A' E
        // 表达式仍然在使用中。
  F2 w8 K2 }. z4 {0 s- G        workPart->Expressions()->Delete(expression1);) [& l1 g0 i$ m& [2 g
    }. w8 ~6 _* h) b7 n, i6 o: C8 T
    catch (const NXException &ex)4 l2 }) w& Z; q+ g8 g, ~0 B2 S
    {3 z; e7 _, ~8 q6 u
      ex.AssertErrorCode(1050029);
3 u! r# ?) [1 g) v8 y    }
$ P7 D( A0 s7 M  w. ]; P3 x' W" O. U' s. l: g* D
    section1->Destroy();1 M/ ^& |/ h: f3 ]7 U- x
( b5 G# J8 V9 b1 ?) ], d
    plane1->DestroyPlane();
  ?  J# q, E& x2 h
. ]# ?+ r2 E) [0 o! Q1 c    int nErrs1;. W* `! T3 |6 \! j- U2 R8 C
    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);
3 d1 X) i: l  K0 E3 V. b' [7 E' U" U8 |; I3 \; `. o/ O: k' g- \
    // ----------------------------------------------
) o; H  n8 l( k" `5 y2 E    //   Menu: Tools->Journal->Stop Recording# H0 k2 i* L/ b! h
    // ----------------------------------------------
" f+ X, }! T# i: [8 k" t9 ~}6 _* c4 a! n% D  J
2 l" p" v; M6 A# Q7 P* r
7 f$ \3 S9 e1 e; N2 O8 m7 N2 ^/ ~3 d

. S3 P( Y% u& p5 O希望大神指点: u$ A3 b, D2 z" [0 M0 m/ o
上海点团信息科技有限公司,承接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()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。
8 T, W5 C: o! ~/ K& D2 L0 t& U. t1 N" T9 d6 G
另外一种方式就是生成的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\Desktop
+ L- u1 c# X5 _( d2 K 捕获.PNG
: v0 y3 N/ ~% r* x/ a7 S* p[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的
* Y0 _8 A& j: ^/ M: Y* E) f% i
* m9 a( t  b! T* K% g& A  d我用
: A5 @& Z6 d. r
/ q% n9 P! P, o( L0 M) h' w* s" n) z1 A. I& R$ m$ C4 a3 X
[mw_shl_code=cpp,true]        Features::Feature *feat1;
. H! l% w# g8 b        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]# ?5 B3 w' k; r: g
代替3 P, q6 P" B1 o2 r
[mw_shl_code=cpp,true]    NXObject *nXObject1;( O; @( P& w2 ?2 J7 [1 a9 e
    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]
8 o7 S4 ?( w/ J9 u  [1 u: X3 @9 c/ Q也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??' c0 R0 g3 _) u( b0 s% D8 k
希望指点一下?1 F, C: ]3 {8 l' w$ U! s" h
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了