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

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

  [复制链接]

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

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

SimonLv 楼主

2020-4-4 23:57:29

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了
& _( Y" H7 k/ |4 q8 ], N$ R8 s( ^; R/ k% n  Y6 J* ?& ^
    std::vector<NXObject *> objects1;
6 f8 D& x! ^# G3 D" c5 A$ T6 m    objects1 = divideCurveBuilder1->GeTCommittedObjects();8 e( _% ~2 r- R) [

, m. F( J5 C1 b1 {
3 D2 P7 m0 M, S! F- t2 ?# X' Y; ?
! C) e% A  d2 ]  X$ F0 a( k完整代码如下:; a, @2 j2 P' I# x6 A4 {
( |% }& L& N: ?$ N9 d* C
// NX 7.5.0.327 G$ G# ~( Y# `% [5 S0 a% a4 D4 Y* J
// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间
! p; L0 ?1 K/ R//3 F) v- _9 Q: R5 Y/ P9 p
#include <uf_defs.h>
, k+ z) R. V" k* Y$ y#include <NXOpen/NXException.hxx>
+ D5 }8 N( p% A  {2 i1 y! m! S) T) G#include <NXOpen/Session.hxx>
7 n9 G2 N, @5 W2 J7 u#include <NXOpen/Builder.hxx>
& p9 r6 W, m0 {) t#include <NXOpen/Direction.hxx>
0 y. F: W; v6 N6 O! m' m#include <NXOpen/Expression.hxx>6 t% g$ Y6 x  |1 {. K$ R
#include <NXOpen/ExpressionCollection.hxx>5 J9 z+ E# w6 _: t' W7 K* L
#include <NXOpen/Features_BaseFeatureCollection.hxx>
5 K3 p( `" Z  p' {#include <NXOpen/Features_DivideCurveBuilder.hxx># j3 ^  D2 N8 H1 y7 ^% }
#include <NXOpen/Features_FeatureCollection.hxx>  S" L/ j( n' D( Y# O+ h0 E# x
#include <NXOpen/Features_PointFeature.hxx>
( w! k# E" t" p2 H2 o#include <NXOpen/ModelingView.hxx>
- L- L+ i) G9 o1 A; C#include <NXOpen/ModelingViewCollection.hxx>( _0 x7 q* k2 G. M. j+ B4 w
#include <NXOpen/NXObject.hxx>
# T7 B  _+ d8 K; g) n$ [$ F#include <NXOpen/Part.hxx>/ A: |1 y* n5 z8 r* m8 G5 l) p/ o
#include <NXOpen/PartCollection.hxx>7 S7 u  [5 R5 o8 R+ l, F1 w5 c( M
#include <NXOpen/Plane.hxx>0 q! k! \$ b; y5 d) Z% c+ D
#include <NXOpen/PlaneCollection.hxx>
, n8 F. P" f6 A# e#include <NXOpen/Point.hxx>
+ s7 T% ?) [. M7 y" j1 _#include <NXOpen/PointCollection.hxx>- @. R* j9 E  N( `! N; r
#include <NXOpen/Preferences_PartModeling.hxx>7 O$ d' D9 F8 ]& ?: T' `$ P  H
#include <NXOpen/Preferences_PartPreferences.hxx>
4 ]* f+ y4 M2 w8 }, j& A9 R: t1 `, A#include <NXOpen/Section.hxx>
; o# J- J# u+ B5 j1 T5 n#include <NXOpen/SectionCollection.hxx>
: q* V" \) B4 Y6 C% d5 r#include <NXOpen/SelectCurve.hxx>
0 ?+ \, i0 V. n$ e#include <NXOpen/SelectObject.hxx>
' ]  j* N1 n' k3 r. U; p#include <NXOpen/SelectPointList.hxx>9 S% c/ _  x/ p5 S
#include <NXOpen/Session.hxx>
1 V, e& m2 ^; v+ C6 [, E1 s' ^#include <NXOpen/Spline.hxx>( a( {# E: e: `6 \- D1 {# g
#include <NXOpen/SplineCollection.hxx>: c1 z  @( n: r
#include <NXOpen/TaggedObject.hxx>
/ \* P8 G& w2 g) m& h! s% n: ?! ?4 H#include <NXOpen/Unit.hxx>$ [' s( o' T. t. |: T5 N
#include <NXOpen/UnitCollection.hxx>
( y- n4 d0 O5 U( l* I& k! h# {#include <NXOpen/Update.hxx>
6 m1 d2 _5 o6 u% e" S% m' cusing namespace NXOpen;
4 y6 u& \& E; L! F/ E
5 g" N/ t: T1 e1 z4 a; g4 i8 ^0 lextern "C" DllExport int ufusr_ask_unload()7 Z6 k4 \0 n" O
{: U/ E& p# b* a
    return (int)Session::LibraryUnloadOptionImmediately;
: j: x. u. I8 g# e}, o$ s! r/ S& x. N3 N# p
" W8 z  k' H! p. m/ `' A* Y5 Q+ h
extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)
: o3 s3 ~; k' q+ W! ?0 t; @' B{6 i- {3 H& g& \; W& s$ y0 b; H; Y0 ~
    Session *theSession = Session::GetSession();. w9 ~2 i7 o8 C  A9 x! Y2 v
    Part *workPart(theSession->Parts()->Work());
- _: h5 b( D& W2 S5 O( {    Part *displayPart(theSession->Parts()->Display());
( ~6 c" x2 n3 Z& b/ y    // ----------------------------------------------
/ A+ @$ F1 G7 G    //   Menu: Edit->Curve->Divide...
# Q7 i' }- a( V8 ~; H" k7 ]8 T    // ----------------------------------------------
( P' d  C3 D9 R" Q    Session::UndoMarkId markId1;7 H' }8 O4 n/ D+ P5 y- e
    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");
0 T9 w4 h' v! q" s6 T# _& ^( H' D: q$ J6 F  L- t& e
    Features::Feature *nullFeatures_Feature(NULL);' q! }% x% ]: b7 L6 L# S2 d

2 o! K* U* I, r9 o" L* V    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )
+ H1 m4 O& m. N, b+ J" x3 W    {
2 I  f+ U5 f" H        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");" b' x1 L0 M" W  B
    }4 E7 H$ G- |, L9 W) [, L

: h- E* F, p6 @    Features::DivideCurveBuilder *divideCurveBuilder1;4 z; e; ~# t$ {% o' O
    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);" Q8 }& f* V. U# \; d6 D" u) ^3 T( @' L
( B# L6 M+ H5 G
    Point3d origin1(0.0, 0.0, 0.0);
6 q. g, [7 }6 m3 ^0 j    Vector3d normal1(0.0, 0.0, 1.0);
, W, G1 n: E, O5 A    Plane *plane1;
6 k" i, l! a' i: x    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);, R- t$ \5 ^8 G8 l9 l/ Y+ L1 e
& J4 \; Y! f1 L& r% L( v# T4 Q: h
    divideCurveBuilder1->SetBoundingPlane(plane1);; K) g9 m7 z8 U9 P+ V, F3 |% Q
! Y/ f" U- U, ~! I+ G3 R$ v' e3 [
    Section *section1;
5 j# X) d6 {. S. Y    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
5 s+ j8 @3 P$ R
; k! F3 u5 f; U: h0 t    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
- u% q' x8 T" T  ?% f0 r' W    Expression *expression1;0 [' k0 N8 S1 K) r
    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
3 W9 z6 h4 [5 X9 H1 Y7 o2 C  B& @1 j; `
2 Y: z5 P7 ?2 x7 _; M% z: W8 G    Section *section2;" |' r7 `* p, d& A
    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);# O! |! W6 d+ A7 L! N
0 }' d) F* F' Y# B* [
    Expression *expression2;) }( W$ b# k9 ^: `0 M- o% t- g
    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
- h) B, t, f( h1 |& D$ E6 {# I/ S
" V& J* x, {# D3 i    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);, n; s- y6 @. s
, C# r  |3 g' a" n. B* ^
    divideCurveBuilder1->SetEqualParameterSegments(5);. X& k9 `) F) t/ ?$ w

& O  A/ N# z: Y) q, N    divideCurveBuilder1->SetEqualArcLengthSegments(5);
2 f7 W- }$ c' |! A. M. I' o8 T1 a! g' A7 K
    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));1 T3 j! D: g: O- L( b% J9 P
! ^* e) j6 z! p
    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);9 _" b( i1 Q' s5 h! p  b2 U
1 v# q( S$ V' L$ K0 ?# ~
    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));
; _- o; e( H' d' p2 [    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);
3 U# \$ ~0 `+ h5 T2 ~+ _/ K; Z    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);% ^, J) ~7 S* R  ^' l3 u( v* k# I
/ e; I8 H' v0 H! R$ |0 G! N
    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);
# N1 ^$ E0 ]2 Q! d$ I. A
' u  f2 O, e. e+ [$ ~2 J6 @( g6 n    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));8 @* V& Q9 b/ V
    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));
' T0 m5 |- X1 R0 o7 P    Xform *nullXform(NULL);% Z! h" u6 J% e5 U
    Point *point3;; G! I6 ]2 |  w% r2 E. t
    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);( s) Q" h( ?. Q$ Q2 V$ D: l" L
  L/ K9 F- S0 s3 s3 n
    divideCurveBuilder1->SetBoundingProjectPoint(point3);
# r; I8 g  p/ C" F! C* `# J, W: D( r- [( M2 z7 O: R. G( [; n
    Session::UndoMarkId markId2;& m0 x. O5 O4 ?( H1 Z
    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");
6 D" O! A9 [9 \  B8 o8 B/ V
! d& y' K9 U3 d) b) E3 i    NXObject *nXObject1;2 F9 i! W8 X9 n: n( r8 _' q
    nXObject1 = divideCurveBuilder1->Commit();& }) l/ T/ v9 J/ w! \, S
# X! a8 r2 ~7 n. U; E- p
    std::vector<NXObject *> objects1;' D  D& m+ ~" P! ~9 v! W; x) T+ P
    objects1 = divideCurveBuilder1->GetCommittedObjects();* V' W( U2 q9 F2 N2 r8 K! C
( g  m% M- S) V" s- Z
    theSession->DeleteUndoMark(markId2, NULL);0 C! u1 M3 ?1 Y. P: Y0 s

: u$ `  y# `! h    theSession->SetUndoMarkName(markId1, "Divide Curve");
/ H. I9 y5 R2 X5 q4 W8 U$ H9 J' D  G8 r- W/ b2 v; t
    divideCurveBuilder1->Destroy();9 I% V0 n* ~* O' z: p4 V
0 d! f8 g) b. n# M. W! X: @
    try
7 w, Z7 r* d3 X* c1 z+ X# m1 r# x  y0 L    {
. @+ r3 [. j5 X$ E. O( g        // 表达式仍然在使用中。9 [0 |0 \: D/ ~8 E! r
        workPart->Expressions()->Delete(expression2);# J' Q! B3 r$ O# e  l) K
    }6 J/ F- P" m0 c) G+ j3 U( {
    catch (const NXException &ex)$ t6 r+ Z9 m" t& w2 V+ O
    {# S- h8 n/ c2 ]$ k5 U* U8 v, O
      ex.AssertErrorCode(1050029);. |( x$ R' J' V7 }, l% l
    }
) Z( J5 p, @; n- T: o/ R, C! r. l  h8 L' q+ g
    section2->Destroy();
) @$ S6 I( F3 O) S* P8 y0 F& Q' [3 z, V3 r! B, c; x- B7 V+ b% H5 C
    try
; q( u, y' k8 k/ e7 A  F# |4 @$ r    {
5 T; u+ q# L+ I  q4 _' L        // 表达式仍然在使用中。
3 k- G" v: V* p- C' T        workPart->Expressions()->Delete(expression1);
8 m# z) s0 e' ?+ W. @, P$ e    }
$ i9 T/ g. `, p: {* M    catch (const NXException &ex)
9 c3 \2 q* B" |; X" ?    {. M) h% J* e5 }% b6 Q0 @1 z
      ex.AssertErrorCode(1050029);. |' K8 U. H1 l& ]
    }* o0 B2 ?' t$ t

4 H7 m! [. `% k6 A$ c6 H: D    section1->Destroy();5 {" D2 z, V3 i) X+ W- K

1 z' H) ?! A: j5 l6 J    plane1->DestroyPlane();
* m, \/ R6 e% ]  I' L" K* j, y; V9 ~9 f0 v& C$ ]4 f
    int nErrs1;
" O1 J4 U. v$ }7 z% F2 S' F    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);5 O9 e$ U* u' {; W6 E, N
. M5 @: ~5 @6 t# P. @
    // ----------------------------------------------
! u6 R. F7 s( U+ q    //   Menu: Tools->Journal->Stop Recording
/ ^+ ]5 j0 b: l% t; `    // ----------------------------------------------
; Z: D$ V5 z7 X}
2 v8 o$ U, {$ o8 r6 t/ \! h$ t: }) t7 `  f
6 @( o& a2 f" H( j5 }7 C

0 m! n. w6 i4 @7 v) T& ^) l: U* }希望大神指点
2 C; ~( |- b! u" _# k+ n& `( r
上海点团信息科技有限公司,承接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()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。  w6 P% P3 ~: C
# T7 p* Z/ L7 _0 Q8 E* P  g
另外一种方式就是生成的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\Desktop7 `- C+ x  o; q3 t8 T0 e
捕获.PNG " Y6 R, W! A% x. V* i3 e6 M# n
[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的/ X  S3 \& F3 J5 g
4 U0 o* a/ f( u& B
我用" ?; y# X. n0 e8 Q3 D- e% n! S
* ^; p, ?' ?* D" H& _- u# H

/ I" E1 e: \( w4 o$ F4 c[mw_shl_code=cpp,true]        Features::Feature *feat1;% V7 D# h+ _$ O2 j
        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]7 v! c0 O0 g( L* O
代替0 a$ q4 w* H' y) R  q; K
[mw_shl_code=cpp,true]    NXObject *nXObject1;
1 R' h6 w; \0 q0 N' A. C    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]( Z6 @  c( g. n* n
也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??, d) m. d# c- B4 V# y
希望指点一下?
! ^- D( |2 Y' X. q) p" X
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了