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

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

  [复制链接]

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

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

SimonLv 楼主

2020-4-4 23:57:29

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了! ^2 L$ Y! C! q, y5 Q6 R3 o. v
* E" z. t/ s' b3 R; g6 s
    std::vector<NXObject *> objects1;/ B- n: y% m$ i3 _5 C) j+ b
    objects1 = divideCurveBuilder1->GeTCommittedObjects();
6 ?5 W0 f% N) t6 j. `
7 D2 W) k& r. m
* \7 D5 e* {" \8 q% f; J# h# F
& [. w! I; N6 E! L' C完整代码如下:: U8 k0 A7 M) X0 \- W) ~

6 t7 R# ^. U+ c6 g' [1 e7 z// NX 7.5.0.32: I3 p2 Z6 h; Z3 C7 o
// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间8 ^& j0 s" _& Z' O4 f
//
+ C. Z- e0 J/ {6 o$ P1 [1 |#include <uf_defs.h>
% P0 M" l- y; |, m! H; w#include <NXOpen/NXException.hxx>/ A# ~( k6 ?( Y/ S& c6 c0 F8 p/ K) b
#include <NXOpen/Session.hxx>
5 V5 I' r3 b1 x& r0 P' i#include <NXOpen/Builder.hxx>8 B+ c1 Q7 Q! f0 v6 I! F5 U  A/ d1 p
#include <NXOpen/Direction.hxx>0 q6 C1 T( R' z: w* M' O0 @" q5 w
#include <NXOpen/Expression.hxx>
. t# ?+ R* i/ o: F+ g#include <NXOpen/ExpressionCollection.hxx>. t4 J6 |* `2 @2 C( n
#include <NXOpen/Features_BaseFeatureCollection.hxx>; {0 {. b+ D, s+ x9 f) S% ]
#include <NXOpen/Features_DivideCurveBuilder.hxx>
6 B+ X( P' l% H6 X#include <NXOpen/Features_FeatureCollection.hxx>
1 e/ M6 _; M- A/ A+ R( t) }9 l" H#include <NXOpen/Features_PointFeature.hxx>
- ^% J2 n8 u) S' {. R#include <NXOpen/ModelingView.hxx>
- Q- k5 C% [) A+ K#include <NXOpen/ModelingViewCollection.hxx>
, u6 d, K9 k- F+ N% G" }: G/ J#include <NXOpen/NXObject.hxx>$ c# P& `+ }" O
#include <NXOpen/Part.hxx>
- `7 z4 z! z& m: K2 g- b#include <NXOpen/PartCollection.hxx>; x" i& }9 S. H1 J
#include <NXOpen/Plane.hxx>) P& u& `6 v$ s' N% @6 X
#include <NXOpen/PlaneCollection.hxx>( {/ U. r" |6 c" t
#include <NXOpen/Point.hxx>9 m; M: P/ a1 G$ p* T
#include <NXOpen/PointCollection.hxx>
1 {1 @; R  [! J* n5 d. o1 k# t% M#include <NXOpen/Preferences_PartModeling.hxx>
) P  x+ N! r( h0 F3 F( A4 _#include <NXOpen/Preferences_PartPreferences.hxx>
7 f# @8 o+ z$ x/ b3 A+ F#include <NXOpen/Section.hxx>
3 c; Q7 T# g/ J$ T  z( A#include <NXOpen/SectionCollection.hxx>
" X% `: l  H. K& U& k) X, t# W#include <NXOpen/SelectCurve.hxx>
$ s3 @7 @0 z6 h* }' {- ^#include <NXOpen/SelectObject.hxx>
5 p2 {: Y; ^! C) `8 s: W6 z! I( k  l#include <NXOpen/SelectPointList.hxx>! ?9 J6 V! E$ {# [0 b
#include <NXOpen/Session.hxx>
/ D: d1 ~' U& h3 J#include <NXOpen/Spline.hxx>( U: Z3 N( p5 e9 ?
#include <NXOpen/SplineCollection.hxx>7 a, f! P/ y" S2 |  U( p  N) a
#include <NXOpen/TaggedObject.hxx>9 Z# n# N2 K0 n- x: V: h, S) s
#include <NXOpen/Unit.hxx>* Y8 n( y7 ]8 w7 q) N" r, D4 ~
#include <NXOpen/UnitCollection.hxx>
- N( X& Q  C2 G' o6 F8 {5 A#include <NXOpen/Update.hxx>2 @" X' f& {5 V6 ?" Z4 s
using namespace NXOpen;# A0 ]5 R/ B6 d: _7 J6 _; h# k' h* p

% u4 z4 ]: g3 _- mextern "C" DllExport int ufusr_ask_unload()1 y9 G# y( O4 b0 h7 o# C  r9 b/ K
{8 {; d! @" f( Y. @9 o2 M* J
    return (int)Session::LibraryUnloadOptionImmediately;; H1 }& \8 t1 A7 L
}: P, T  p5 \6 n- t  ]
, G4 j! T( ~- x4 C
extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)) l# i/ A  j9 Y/ m6 g2 w* ]
{
! o; {9 W# @- t6 r/ U    Session *theSession = Session::GetSession();
+ Q4 Q4 i, M: M" e6 g# A    Part *workPart(theSession->Parts()->Work());
( P; f1 n4 t, R, J: J. q    Part *displayPart(theSession->Parts()->Display());
: N- f3 |" ?; @/ K8 u# ~7 t; f2 x    // ----------------------------------------------; H9 Y  q* S3 P
    //   Menu: Edit->Curve->Divide...# b2 D4 C: o5 i8 @+ G  _
    // ----------------------------------------------
# K+ `5 o, @, C/ t    Session::UndoMarkId markId1;
! P( H+ R: C. ?, |# q) B    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");9 i7 x) t! m9 H: I; |: b
0 K" i+ L6 `& r8 t7 F
    Features::Feature *nullFeatures_Feature(NULL);8 `+ m/ x- G* R6 R4 W

6 e2 f9 c  J- j: v* D+ C) Q* r    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )- m2 x. ?6 ^5 |
    {
, N: w8 g' y0 G/ B5 S# T; b        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");3 i! M; `( j+ k  g! d. b- I$ x
    }
0 T7 X6 ^4 B3 R8 Y3 l! K
# O( _& O0 x+ e    Features::DivideCurveBuilder *divideCurveBuilder1;
5 Y# Y7 v- z  n5 S    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);
; ~7 E5 P+ |$ Z" [
" v4 V0 ]5 }2 Y) ^4 z    Point3d origin1(0.0, 0.0, 0.0);* r% d% G1 y) b( Q) a
    Vector3d normal1(0.0, 0.0, 1.0);
( D& V" o, K& r4 A7 k    Plane *plane1;
  ]" {: z1 I& H7 W( f) V2 `, I    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);
* c, e: p! P7 [0 P0 l. o2 ^0 B! P* e" }" ]: c1 \/ x
    divideCurveBuilder1->SetBoundingPlane(plane1);
: d3 T4 p& G$ F' c+ @# @$ k+ C. J5 L; d2 F, [9 j
    Section *section1;2 p) |- a* e- s& ]5 H) n
    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
+ a7 F  }  b7 X4 D$ B
: A& y( L5 z2 W) _# o    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
# u" @6 g. l) C: h    Expression *expression1;
; J1 X6 @- W+ ~+ c2 C( s+ P    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
) [6 j2 K5 ?$ E4 h6 }1 }/ c8 m9 R/ R7 P
    Section *section2;8 B& |" Z. k9 a2 a1 S
    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);7 {3 ^2 A$ P% ^+ ^. N+ `- {

& {4 G0 n: t3 L  q    Expression *expression2;
+ q3 v1 m" v+ u3 ~. n    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
; P' {- W! p8 n" F: k" N  d' [
& [+ g. P" Q0 M9 t    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);
0 S5 G# `6 Q8 P2 \3 d6 Z9 Z) t! m. B. b8 w
    divideCurveBuilder1->SetEqualParameterSegments(5);7 R3 ~- w1 t: n3 A

* w. m2 w2 u$ ?7 P5 q+ b2 ]4 d4 _    divideCurveBuilder1->SetEqualArcLengthSegments(5);
( {6 J) I3 f3 u* j
5 z$ \9 V5 T( i! U6 ~4 F; g( ]    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));# M; F" _4 C4 Y0 l
8 c7 v8 W' w$ r- t9 z5 V
    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);& O$ {4 g6 p& ~4 F5 U- A2 Y6 D- [

6 o3 V6 T2 D6 K    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));
$ s1 T5 P7 Z3 f6 S+ f& ^" t    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);% L( v% t0 O. N3 T
    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);, p- x# M$ d  X" j5 ~9 i( F& W) Z

  g$ m/ W# i" z3 ~7 o3 c    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);
) ^0 M+ z+ i+ \; v$ p
! w) Y% U) M5 R' J    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));
; r1 }4 k  S6 F$ f4 @    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));4 I5 x2 }- y' g- H
    Xform *nullXform(NULL);4 Y% b4 B7 ~" K" N8 i+ }
    Point *point3;% V% E9 Q/ P% \+ b. g3 A, n
    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);; b2 k* R. \/ M/ e
$ ]/ @* n# z2 x9 |3 J3 N  R
    divideCurveBuilder1->SetBoundingProjectPoint(point3);
% k, b2 Y1 f7 G0 h! a
# O6 X0 d& V3 `; C; a    Session::UndoMarkId markId2;+ g# m8 A7 g1 @+ q& o
    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");1 q; p) l% x9 ?- g
! G$ b; m0 z( ^% o- m4 e* _; U
    NXObject *nXObject1;3 ?* p7 D) T; b3 V  I% m
    nXObject1 = divideCurveBuilder1->Commit();. q- A2 O4 y- g$ ^+ O  z7 T

- P5 e4 c# k1 i% ~    std::vector<NXObject *> objects1;( z# J. u! @5 p+ J. q+ O
    objects1 = divideCurveBuilder1->GetCommittedObjects();
/ m$ d4 i! B5 o  j3 w  k1 P* X
% A- v; b5 y$ S: R' k    theSession->DeleteUndoMark(markId2, NULL);& s2 G& o8 |  A' L
! ]. @' n- Y8 q! X2 E
    theSession->SetUndoMarkName(markId1, "Divide Curve");
) l, f' E( E" C& \$ i1 u- x5 G( L+ W5 @2 g
    divideCurveBuilder1->Destroy();5 H# M9 i+ t: Z5 D7 k$ R' E) s( R

# M! r4 ~, F6 S  G    try  c  ]) g& G) I/ y8 q' m; j8 `
    {
7 X- f5 \+ u& M6 q        // 表达式仍然在使用中。' H$ L# v, Z- }. f
        workPart->Expressions()->Delete(expression2);$ n5 O& f4 ~6 C8 g' M
    }
1 ]- }/ U  L6 `' J7 D+ X& S6 Q    catch (const NXException &ex)8 z6 }( N" o1 M) L
    {
0 R$ l2 u* J5 U. ~      ex.AssertErrorCode(1050029);
. B8 C  a/ F$ j7 ^3 z' Z4 k    }0 z# n) m6 m, G2 B

- {9 H# e. _$ Y    section2->Destroy();
6 _: u1 j7 n" Q" b5 p& r! D5 b$ @5 I5 A9 B0 K- U
    try  o+ y& e9 W* [6 s
    {
$ Q( e4 U  e* s# I& }6 _4 r# I        // 表达式仍然在使用中。+ k: U0 G; O) Z3 R) h0 v
        workPart->Expressions()->Delete(expression1);
; F! L6 n' k3 M0 H    }' n) i0 N: ?) z  D( c1 x1 e8 Q
    catch (const NXException &ex)% \/ ~# C2 l$ [, S4 B% I; b7 m) `! G
    {
4 e" e0 p* `0 E, K! X' V& h. I      ex.AssertErrorCode(1050029);
/ @* E5 Q8 I1 P4 |  b7 o. n2 g    }6 s/ f* Y8 ?7 `# x

; h7 z  K( C9 B; d3 s1 x    section1->Destroy();
6 x) g" Y1 a8 O" U1 f1 |
9 I& r* n6 D5 w) I    plane1->DestroyPlane();
6 L5 A$ ?# \/ x. Q; R' d$ p+ y( `* D  P; A) R
    int nErrs1;, d  D' o& h/ D: K! Y0 }8 s
    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);" V+ l+ w' _3 C. r' L
( w7 g& F+ _# b- f3 \- v1 q
    // ----------------------------------------------0 J. m) N; z. M0 ~
    //   Menu: Tools->Journal->Stop Recording
" H* J9 k& G  T, J    // ----------------------------------------------
" a( X( a7 H" `0 @% j7 P}
9 G; c- `+ u7 F4 {& `+ r* h7 G: Y  N8 c0 p9 Q* V* n
) {7 d- K3 U# j- n
/ T( |1 s2 b( {5 l' ^5 t
希望大神指点
. p4 Z1 `) I2 f/ }
上海点团信息科技有限公司,承接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()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。( I% I6 W  J$ M% W

# l7 y6 z8 H" p. z# o1 V3 k另外一种方式就是生成的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\Desktop
/ \9 V$ m. r7 e& |- d, ] 捕获.PNG ) U/ H$ x# A, b, ?% O
[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的# H8 ^* I$ p. s( k
) Q9 R( I7 |" y3 r3 T# `
我用
4 ]! J  u% j3 {6 E% K. V, a3 B& R& Q: r$ M; K* k  J9 c
4 f- e. @2 ^" f+ [7 W% P
[mw_shl_code=cpp,true]        Features::Feature *feat1;. e3 y; W: h% n
        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]' `0 f, }, P5 V- c2 N; ~* r& H
代替
6 T+ m4 R& l) ^, D: ?[mw_shl_code=cpp,true]    NXObject *nXObject1;% q/ N+ T. o& @' _0 I' u
    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]
$ f& |) H- u2 H+ S6 g$ [3 k; G' D也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??, Q2 |% ~2 s; L7 T3 n
希望指点一下?
$ D9 B1 d- ~: d. s: p6 V
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了