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

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

  [复制链接]

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

1

主题

1

回帖

21

积分

新手上路

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

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了2 Z7 o. Y. f0 W6 Z$ W+ q' V
. T$ S8 Q' s: d/ ^  M( Z
    std::vector<NXObject *> objects1;
9 Y7 H/ m" E. C# E    objects1 = divideCurveBuilder1->GeTCommittedObjects();7 [7 p  ]1 r9 B0 d! f

8 f2 z" R* U6 F9 X/ T. z0 L$ _5 r9 d' m4 a/ [( x1 l
* p7 d9 Q: w- K7 j# H
完整代码如下:* q) g0 G2 X* B  X( e* m
" J' m% ~3 S4 ^5 T( Y$ y
// NX 7.5.0.32$ H) n8 E% m# {" E& O
// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间1 t) B9 W1 K9 S9 s0 K
//
9 M1 r( B; I. [* J0 V0 K# D#include <uf_defs.h>+ v( f7 H/ X. t) p
#include <NXOpen/NXException.hxx>
8 V' G6 n, y( v" ]0 Z' X#include <NXOpen/Session.hxx>
. [  w/ p0 s8 t) b) v2 w#include <NXOpen/Builder.hxx>
2 f4 L9 x  U: s: H#include <NXOpen/Direction.hxx>
8 }5 P' P" b% F: U! ]7 a, ~#include <NXOpen/Expression.hxx>% R6 k6 D# N/ r) s( \7 d! l
#include <NXOpen/ExpressionCollection.hxx>+ C* T4 S7 ~+ l) W: ^1 L
#include <NXOpen/Features_BaseFeatureCollection.hxx>3 U2 ]5 ?4 U0 d" x. e
#include <NXOpen/Features_DivideCurveBuilder.hxx>2 B' u) ^5 B# x. k$ `9 m
#include <NXOpen/Features_FeatureCollection.hxx>+ i! a+ I) n. M% J- D, }
#include <NXOpen/Features_PointFeature.hxx>4 p# c1 Q9 B+ Y$ d- ?/ Z; R
#include <NXOpen/ModelingView.hxx>8 f$ X. n& S: u6 ]& h; J. e3 @3 H
#include <NXOpen/ModelingViewCollection.hxx>
. f$ m! @, C/ K. @#include <NXOpen/NXObject.hxx>% B/ J/ h2 J6 Q8 k$ |
#include <NXOpen/Part.hxx>
2 m- e' j9 h8 ~# n/ |& a8 X$ S0 ?, D#include <NXOpen/PartCollection.hxx>
& E/ X% g0 g4 A, k#include <NXOpen/Plane.hxx>9 ^, z4 }3 {' o* s" e& s
#include <NXOpen/PlaneCollection.hxx>
9 N8 G4 }8 v! k6 M3 m#include <NXOpen/Point.hxx>  _( w* S. S. `/ i& h
#include <NXOpen/PointCollection.hxx>
9 e' V* u! \2 U) r* z#include <NXOpen/Preferences_PartModeling.hxx>9 Z! W/ \8 ^  T- Z1 I
#include <NXOpen/Preferences_PartPreferences.hxx>( }. Y) k1 \5 p
#include <NXOpen/Section.hxx>! @! M- `' }( Z
#include <NXOpen/SectionCollection.hxx>  g7 ~, N% ~& b" f& x
#include <NXOpen/SelectCurve.hxx>! T5 [( j% x4 h9 ^
#include <NXOpen/SelectObject.hxx>
0 ~( V/ X5 ~& A7 R& r#include <NXOpen/SelectPointList.hxx>( U5 o9 R% \, P( v; ~! D
#include <NXOpen/Session.hxx>
% }# ]* B% c* ]/ c; Z% j#include <NXOpen/Spline.hxx>
5 p4 K: u1 k" \! Y( M5 Q, b#include <NXOpen/SplineCollection.hxx>* l+ Y, p- p6 }
#include <NXOpen/TaggedObject.hxx>
+ Z% c9 t/ C/ _0 g#include <NXOpen/Unit.hxx>
, O4 p0 t* o' I2 j/ P7 a#include <NXOpen/UnitCollection.hxx>
9 G( L' D; ?! c5 ~! _: B#include <NXOpen/Update.hxx>9 Y3 [& @6 V$ q+ T, ~
using namespace NXOpen;
: u7 i& n0 ^8 E% O% H1 o
9 s- i, O3 Z. ]4 I2 C  a# i+ mextern "C" DllExport int ufusr_ask_unload()( q- E8 |0 q6 m# [* z( X8 Q+ S
{
6 d3 i# w% k( Q3 ^( k/ ^+ a/ m    return (int)Session::LibraryUnloadOptionImmediately;
. C% K+ W0 i2 M  q}
9 Q0 D" f2 g$ s4 T, a3 `5 z" P2 D; M( s9 ]
extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)/ C- t* S0 H' F: C7 m
{
1 {6 I0 R* g( i. x, w    Session *theSession = Session::GetSession();& B3 R! y" n% `0 O) z7 ^+ O
    Part *workPart(theSession->Parts()->Work());
5 M) H/ e; x' K3 O2 C, x    Part *displayPart(theSession->Parts()->Display());
) y. F  Q9 j/ u% n2 k" D    // ----------------------------------------------0 E1 L: p0 N$ W2 r
    //   Menu: Edit->Curve->Divide...
1 T& J& v5 @& {- w    // ----------------------------------------------
% s  a1 {* S- L* F    Session::UndoMarkId markId1;/ a* P  o7 x: h  c2 ~- ]9 F, ~
    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");2 h. ?& A; ~& H8 u& w/ c9 @

# K, Y, x; S/ ~    Features::Feature *nullFeatures_Feature(NULL);
( Z" g9 p5 n8 f6 e8 O& b1 ?9 r8 f7 Q8 I% x0 R1 a
    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )  B' W* O! v: u6 N8 B: w$ A  e
    {% H% t4 ^: j) v& |
        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");
' a9 W* g3 q; h+ r6 x, Y; B" Q. F    }
9 A: T- b4 v) N5 x/ Z4 h
3 T  }  T, u7 b$ K5 f, _. O    Features::DivideCurveBuilder *divideCurveBuilder1;1 Q2 n1 ^. C" h4 P! p
    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);
& D: `) `2 K/ I' r# `  ~" m% M
  q) q  V& e' h+ _! P0 M, z    Point3d origin1(0.0, 0.0, 0.0);
, A% ]/ {/ M$ L! b5 Y3 u7 q% ?- U    Vector3d normal1(0.0, 0.0, 1.0);! D) c6 q( |& ~: ~6 v% M; k' s
    Plane *plane1;4 r% C0 B4 k) S4 U* Y
    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);
% R% z5 O# q- X* C9 f7 F* H6 D
3 z5 c& }& z- g' _; [: ^. F    divideCurveBuilder1->SetBoundingPlane(plane1);
0 B' \6 N1 z: d" h8 ?  y
9 U5 `/ [& t* e2 g: q$ K$ H' B    Section *section1;
0 L' G; ~' m8 r. u  g    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);8 p: _1 ~9 C' s* N0 ^
1 ^7 i8 h& c- @' {, E: x: O
    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));4 e2 r( }; e7 ~1 }5 O+ T" A+ }
    Expression *expression1;
. _  a! A( Q* n, O- [, ]7 e    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
0 E7 d- T* a; X: D8 M
; N( I. ]+ {( P* {! [+ ?; u/ @2 [. P# N    Section *section2;7 s) H8 w3 `# u0 ?" |
    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);4 A9 `5 n# z3 G& Z0 d! L, I5 e

2 c2 G+ S2 ^2 z, ?) [    Expression *expression2;/ C0 v& l' \- ~0 y( w$ x
    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);) U/ X! y, ]9 N: Z1 x

( t) i" S/ `, D7 ~0 J2 x: n3 l    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);
' e8 x/ f  Q' d6 D% Z' s3 N/ \0 k* L& [5 [' B
    divideCurveBuilder1->SetEqualParameterSegments(5);
, ^! n1 }7 ~# @8 E: `0 Q: l) k
+ T) H+ g9 v5 x2 \: }    divideCurveBuilder1->SetEqualArcLengthSegments(5);% e* ^& L8 S  y8 @) X6 y! J
7 _; W3 A3 D9 g9 h# b  G
    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));- K( \# }& R2 j
( \' F3 H3 Z  o6 W1 S/ j
    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);4 N! k: s) W+ t
3 r0 b$ S" K, m; t4 v3 b+ `
    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));* Z# l6 m4 y6 M1 ~) R1 ~
    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);; `$ G% I6 j) Z9 ~5 q; h, \! ~3 t
    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);& m8 f( |; A' B5 c: s
! s% `% w4 o/ e  x+ l2 ^+ ^
    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);7 E: T6 h) c6 {
, f: s5 G. `2 X" w* t
    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));
% v7 g$ R% `% i    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));
9 j9 f* z- E: l+ s# p    Xform *nullXform(NULL);
# o- R: c8 L) e/ C; G, G; ^    Point *point3;
3 t( |! c( M' r+ {- n5 D0 F/ }& H* I    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);( ]2 J5 T+ U( z/ e+ q# A
, L# K, l$ S, @  I+ q/ I6 e9 _/ e( E! Y
    divideCurveBuilder1->SetBoundingProjectPoint(point3);
7 r4 L4 a+ N, K1 H8 f) Y# z0 O+ s9 a1 ]7 N- x( L
    Session::UndoMarkId markId2;
, q1 l' H2 v1 i; k5 e    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");" X0 F" H, e8 a, {  V

  }. U3 |0 B& `1 e$ b    NXObject *nXObject1;
" ?, k' j) i; B$ E5 ?  Q6 u4 ^    nXObject1 = divideCurveBuilder1->Commit();$ @; }9 B) w; p; I" N6 z: |

0 B- E4 M7 a1 u2 C    std::vector<NXObject *> objects1;
/ ?, J9 A+ C& Q) n6 P    objects1 = divideCurveBuilder1->GetCommittedObjects();
& C! j2 ~; n3 {- ~6 j0 A" q# x- V1 ~" }3 ^( R
    theSession->DeleteUndoMark(markId2, NULL);+ k5 H; S6 [6 q2 t" j- q
3 h$ R7 H5 x- T5 R
    theSession->SetUndoMarkName(markId1, "Divide Curve");
, d( J& a) R% M4 r! C3 x0 g$ P, R' |# k) F
    divideCurveBuilder1->Destroy();
  d. A2 I4 p* d3 w! X& p
/ U  y7 t) ]1 c, g  h  G9 B/ g    try
1 p7 P/ `( `+ i1 |6 I    {
) w) ^, d$ t8 ^. m7 U) z        // 表达式仍然在使用中。1 h& ]- v6 b* g
        workPart->Expressions()->Delete(expression2);+ M/ @: r* u+ Y
    }
- O; @/ h- X3 y; K$ P  s    catch (const NXException &ex)- u6 `: [3 Z" A$ a! h7 h
    {
6 `- q$ C" T, E. K$ J& v) C! A      ex.AssertErrorCode(1050029);
0 g5 @' z0 Q5 |( z0 {/ F& C$ P    }
: q, C- k# K1 l( M% d" j
4 B+ \$ q! ^0 \( b9 n! J0 X* }' b# F    section2->Destroy();
8 o% I" g2 E0 N( O% H7 X+ G9 d* K& U4 m6 T
    try9 K& s9 Q1 w+ [+ k4 g7 z" O' h
    {
" \+ O* @- L8 `' K        // 表达式仍然在使用中。/ t6 w$ W) N: c4 @5 L
        workPart->Expressions()->Delete(expression1);
7 {8 t2 U" e( M3 J$ r    }' m7 T/ r5 ]/ P7 P+ P3 R# |7 s
    catch (const NXException &ex)" ]. c/ U& _+ ~# r8 X. v
    {
1 ~8 J! O' t& @      ex.AssertErrorCode(1050029);
$ n: N- j) o7 `    }: W% T: J/ ]7 }, C) g# s
0 k6 z  z* {7 k
    section1->Destroy();
3 x( g0 b& f. k
% l' G/ J/ ?5 D; u    plane1->DestroyPlane();7 v5 P5 l. W) c! y$ V& C1 j. K

" r$ P' }+ U, M    int nErrs1;% }) u, f2 ~8 f4 T& y
    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);% x; d' _8 D+ t+ J) @7 {) T0 E3 g4 ?2 H
0 H) _* S( J1 E$ O% b+ [6 K* A
    // ----------------------------------------------1 H! p* x9 y# ~: M, e+ m
    //   Menu: Tools->Journal->Stop Recording' D) a& z+ _4 h; J: P
    // ----------------------------------------------" L' z( g9 x8 ^/ f6 r
}6 ]1 Y1 a  K/ [; s

; R6 K7 J& U1 D5 }( T+ ^( d2 I$ I8 R: E9 o% ?, |
' c( M2 B+ J+ q* r$ N* y4 L' V
希望大神指点* y: w% H9 g! j
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

全部回复2

2471

主题

1276

回帖

8万

积分

管理员

PLM之家站长

积分
82195
QQ
发表于 2020-4-5 08:52:59 | 显示全部楼层
objects1 = divideCurveBuilder1->GetCommittedObjects()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。
' \* `' }% j/ f% i0 _) K$ n
' u3 `* W! N8 k5 a# w% V0 ^$ f9 q另外一种方式就是生成的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& j5 E  H* V7 C1 q7 j  V
捕获.PNG
' I0 W0 k, ~! J: x( E[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的! j# f* |& E' D: W3 L- a+ O. S

& e$ X$ R. ]3 t, ]$ y" C我用
; z2 b# n* w" t# J( e/ {+ b% k3 W& o; I& b
: l! U. g* K1 r
[mw_shl_code=cpp,true]        Features::Feature *feat1;
; K; U4 k) i0 E* N8 c  T" }) c        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]" t: X" q; l) J
代替1 ?: c5 e( y  i7 d) b
[mw_shl_code=cpp,true]    NXObject *nXObject1;: e# W3 v; O+ m; D) C
    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]
# P. X/ ^' B: W; D也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??
% M3 c. [& @  b2 h& _3 c希望指点一下?6 Z2 C. G$ j) h$ P6 J1 ?6 H
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了