PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

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

SimonLv 楼主

2020-4-4 23:57:29

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了1 k; x+ E! w7 O
: L1 w9 A* s" Y' q9 I* z
    std::vector<NXObject *> objects1;6 {) x$ ]; ~2 _+ i# [" m
    objects1 = divideCurveBuilder1->GeTCommittedObjects();  e' o) h6 n/ k5 X7 d1 v, I
: f4 `% N% _8 `( l/ Q/ x
3 \1 N0 U: q3 N' u% B& t
( X0 E$ `1 \0 K, y( r" V
完整代码如下:
, z& L  B6 |1 i9 u
5 E/ @8 W3 l$ p: @0 Y1 {// NX 7.5.0.320 g6 m0 f: R0 h
// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间
9 G1 ]% C, I' @" L( h8 O/ |//" d% H% H" R  J* r+ E  ~, S
#include <uf_defs.h>
. E" W1 P: f) @" g#include <NXOpen/NXException.hxx>
8 @  C/ Y; _# h. Q' h  {#include <NXOpen/Session.hxx>8 h7 b( ?' y) l
#include <NXOpen/Builder.hxx>
/ m2 ?$ D" m( L4 O7 o' z2 T. I) S#include <NXOpen/Direction.hxx>
6 @5 S, T9 ?5 Q: u6 ^#include <NXOpen/Expression.hxx>& J. v- O: Z8 s" N6 c% B7 U
#include <NXOpen/ExpressionCollection.hxx>- V' q( L' s9 w) `- Q  s; j
#include <NXOpen/Features_BaseFeatureCollection.hxx>
& H" ?- N2 p7 i. G+ Q0 e#include <NXOpen/Features_DivideCurveBuilder.hxx>
: l+ o- W  [3 U) U7 G#include <NXOpen/Features_FeatureCollection.hxx>
/ j3 m2 g* V3 ~7 W: T6 `#include <NXOpen/Features_PointFeature.hxx>
/ d) c  B% \% A) w3 Y1 x6 t#include <NXOpen/ModelingView.hxx>* D. v- k+ ~" Q; b8 \
#include <NXOpen/ModelingViewCollection.hxx>
. ]2 a# K* D7 w$ E#include <NXOpen/NXObject.hxx>7 R* T4 ^& r& Z* _' M
#include <NXOpen/Part.hxx>
- X) P1 R6 S) e% l% E+ r#include <NXOpen/PartCollection.hxx>, P1 F; A% g) B  n, e, f6 r
#include <NXOpen/Plane.hxx>
: f7 n1 I" ]; p( g  @' O3 l( D#include <NXOpen/PlaneCollection.hxx>
9 [; k- X/ d& C+ Z7 P3 Y#include <NXOpen/Point.hxx>  N" D( E! D$ K3 L$ p4 K' H
#include <NXOpen/PointCollection.hxx>6 v, L1 ^7 `8 X/ J2 _' U- [: f" j
#include <NXOpen/Preferences_PartModeling.hxx>  X3 b/ u2 L, F$ X0 L3 G
#include <NXOpen/Preferences_PartPreferences.hxx>. ^" [- g7 H) G* E
#include <NXOpen/Section.hxx>
: G! m+ ]2 y- @9 U8 q5 g6 E, I#include <NXOpen/SectionCollection.hxx>
" R5 Q2 K' c" i#include <NXOpen/SelectCurve.hxx>
# U; D" v2 B. l/ `#include <NXOpen/SelectObject.hxx>* a9 S2 ^  L9 @% K% ]0 E# A2 u
#include <NXOpen/SelectPointList.hxx>2 n2 f4 a4 F! \# A+ b
#include <NXOpen/Session.hxx>" A" ]" ^! S' |  K! P" |! E
#include <NXOpen/Spline.hxx>
4 f* t. M5 f9 |) B; x- U#include <NXOpen/SplineCollection.hxx>
2 t9 q, L& u& L# \# ~' p#include <NXOpen/TaggedObject.hxx>8 k/ {9 ~2 `  Q) }* l- s
#include <NXOpen/Unit.hxx>2 K# H% V  \) x. K8 M" X
#include <NXOpen/UnitCollection.hxx>8 y* E, ^, ]4 P6 C* g. S* ^
#include <NXOpen/Update.hxx>
. }' G' y  x; Eusing namespace NXOpen;3 u, B8 Z. C$ [
1 u  f+ H: ~$ f8 n$ d
extern "C" DllExport int ufusr_ask_unload()" ~  y* O" u! g. C1 E/ R8 j
{
' O. o, }- O, m6 ?2 H    return (int)Session::LibraryUnloadOptionImmediately;6 {1 N2 ~& g5 c" `( v. M; `% a
}9 u5 Y2 ~" p" h' h" S* U/ S2 |8 ]
! j- |4 y& R6 V" ^
extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)
9 Z3 G; p0 J& P. a' Y" U6 I  H0 [{
' X: c. t( I9 _6 Z( T" w- R; {    Session *theSession = Session::GetSession();
! f' d! C( j$ D+ K    Part *workPart(theSession->Parts()->Work());
4 z& j* h( Q& @1 ?* |) A    Part *displayPart(theSession->Parts()->Display());- ]2 P5 W) T2 {# |
    // ----------------------------------------------* ]0 C6 U6 m6 b! @5 ?% Z' S- e
    //   Menu: Edit->Curve->Divide...
7 {, _+ D- P0 _1 Q' N    // ----------------------------------------------' K/ L6 h: Y+ e$ j
    Session::UndoMarkId markId1;4 k% S0 u4 n' O
    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");
. Z. w0 Z& `8 J: ]/ q. p, d! j6 [( B9 P) l, G! |+ F1 D# r
    Features::Feature *nullFeatures_Feature(NULL);4 n: Z7 y  ]2 m$ B+ x

2 p9 q; X1 q- l% E  f: \    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )
! F0 x& Q* V+ S9 c, H8 B    {
- m! b2 H1 w2 k- `  X) F        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");3 W% z/ o5 E6 k! J2 r
    }; s8 U7 e, W. s
8 {7 J* y" F% Z' \6 |
    Features::DivideCurveBuilder *divideCurveBuilder1;: [1 J1 S& p" \- o3 L) D$ N
    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);
6 f6 s& F' q: M+ W1 V# ]+ ?0 i9 R4 G) V" o# Z
    Point3d origin1(0.0, 0.0, 0.0);
" @8 u  r, `( ^6 i/ _) R+ L" x    Vector3d normal1(0.0, 0.0, 1.0);
& `' O) P! g8 L  ~    Plane *plane1;, ]0 k. w0 p) H/ C7 _: T0 r
    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);' g+ ]5 [) Q2 W: e% A& {

# l, f* n: a7 Z    divideCurveBuilder1->SetBoundingPlane(plane1);# {' e8 m7 A$ ]8 N
) p8 I3 D. G, Q
    Section *section1;
0 ?% U( Y1 G* l0 @. z; c# d    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);* h; O$ i2 h  ~9 J1 b
# B0 S& i% I6 k4 l5 X; }$ E
    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));0 k; k9 ?  V# R: e
    Expression *expression1;
3 o9 K) C3 a* u* s# W' D    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);2 D' @( L2 N! l* O" Y) X
' |. q3 P: H4 O$ q) ]9 N
    Section *section2;
0 x4 [+ R. k* B1 C    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);. j; Z9 w* W: r
$ a9 i2 r( X6 }& E; W' Y, ^
    Expression *expression2;
6 e1 `, l' J, L" q$ v    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
! V0 [8 W4 U9 a# v' D1 a6 K
2 i2 ^( N4 y0 T/ C5 Q4 g. n    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);
- T7 a& ^# J' g5 G& }2 k) H1 V1 \; l( N4 w
    divideCurveBuilder1->SetEqualParameterSegments(5);2 u0 ]5 j# z1 I" O. ?
6 s( @( U$ X  s) Q5 A- d9 M
    divideCurveBuilder1->SetEqualArcLengthSegments(5);
! e) z3 c3 z- t; H( n0 s6 G
3 j+ J1 H  k0 O    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));
( w% }8 v# K7 n4 f) z- R& Y" b( F) i( w& E. r. j  h5 w
    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);
9 B* K$ n/ o" q/ \0 F' x' N  S- x. o- M
    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));
6 k9 E- w2 h8 D9 G% h    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);
! d$ Y$ Q! x6 V/ g4 Z' P    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);% Y/ p% N5 V! Y

: C! b+ }# K2 y! x5 A' O- C: Q, T4 x    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);& _# a1 j2 ^- Z/ `8 v

6 V3 J+ r+ l6 P5 D: l; z* D    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));: n; Q  U: V/ a1 r
    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));
5 I( |3 Z4 l) p    Xform *nullXform(NULL);
; @. X0 F& V. `* n1 L    Point *point3;
9 [7 z4 E$ N( s    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);: w. N9 l0 N$ D4 i+ c9 z7 b/ U: U5 T
  }$ T; t4 Z) Y4 L3 L
    divideCurveBuilder1->SetBoundingProjectPoint(point3);
9 e5 B& ]5 m, V1 [% @
; o. P% ]! f' \& y% v4 D    Session::UndoMarkId markId2;
6 H/ `! c2 u( p/ f4 E, w/ Z9 n    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");
0 f9 v' [: m: D: B
+ O4 k+ @6 q5 b& Q" T4 y    NXObject *nXObject1;
- t7 i& H, R- k) S: y    nXObject1 = divideCurveBuilder1->Commit();4 X# Z/ x8 |" O; P
: A2 v( r0 a% _: \5 S+ X
    std::vector<NXObject *> objects1;$ o. N3 c7 c  f  ~+ t
    objects1 = divideCurveBuilder1->GetCommittedObjects();
( }2 S9 M0 i- H  {8 @& i6 i2 z: z* b$ W9 Q
    theSession->DeleteUndoMark(markId2, NULL);* w6 v- A$ v7 h( l0 I

( u* H( i: K4 r. G0 f. e    theSession->SetUndoMarkName(markId1, "Divide Curve");
$ |6 W& y8 i  Q9 e8 r$ i) \9 Q1 M7 [( e0 f9 z' w
    divideCurveBuilder1->Destroy();' b% W( O; j4 n

. z! e7 u! D, Z3 z) Y4 G( o    try: b& w: ^* y# d3 {$ ~) r9 m0 i
    {) N& j3 D4 X7 ^% R3 S" p) g9 H
        // 表达式仍然在使用中。; M8 P& f% d+ Z4 r
        workPart->Expressions()->Delete(expression2);
# `$ T9 x. }! n+ [" Y    }3 s2 ]7 k0 [1 e
    catch (const NXException &ex)
9 r' R! W7 S! u6 r' ^    {. ?' ~% C# E5 {3 V3 O* `# Y, z  t
      ex.AssertErrorCode(1050029);
. x; c/ Y( ]. _! x3 Q    }! c1 T+ A% D: o3 k8 |, L8 X2 J

  q0 `) h/ G& |# q    section2->Destroy();9 r6 R3 V7 V. m" \# c

$ ]! L$ f/ i# D$ u$ b    try- p( x0 b/ j& y9 Z: p$ e
    {* P' A/ o# ~) \. K6 b4 B
        // 表达式仍然在使用中。
$ c6 M' h' t9 t4 |; H: Q        workPart->Expressions()->Delete(expression1);
. R" [( L/ ]6 L    }
$ P5 F; D" d. @3 ~) w    catch (const NXException &ex)
0 N( {- k2 }( I3 l% K8 b$ r% }    {1 D2 s, j; k! C5 Z3 y
      ex.AssertErrorCode(1050029);
" U2 O) d2 Z# N& @( c0 i) ]    }
6 S+ ^/ B5 j% x
4 J7 J$ ?) d, |7 N+ [    section1->Destroy();
. k! J; A; J; U2 L! P/ W' f/ l$ C* S& o5 t. v5 d
    plane1->DestroyPlane();" ]$ f& p+ a9 v, ?% \& @; r- w+ ?# s

; f  k9 N! t: N2 q- f/ A# T    int nErrs1;' {1 m' b# z' r* {& j. K4 a
    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);
( z7 ?2 r8 n2 T: A  F7 L* b6 s7 Z0 s, {
    // ----------------------------------------------
2 c( d, _# `+ L7 B6 h    //   Menu: Tools->Journal->Stop Recording
8 S4 @0 o& i2 g' F    // ----------------------------------------------
1 F6 S) p& E: y1 o( O, n}
9 f% }5 g$ w; q* f6 L. F. Y/ H9 N9 X' B
- n# v+ i& |0 K1 e$ C/ F5 c% v/ O4 F5 o% ?2 u! h0 Q
) U" _; G. J& r% s( G5 X
希望大神指点; s& ~& p7 G% y& m( q' Y" K
上海点团信息科技有限公司,承接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()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。, w* M: r7 g' ~8 W% G$ P7 z0 a/ }
3 _' X6 d3 g! y, ]/ l
另外一种方式就是生成的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+ z# |" l& u' L' e
捕获.PNG ) ]4 n- [% W9 L+ M* \) ^! w
[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的0 y7 h8 U' o) E+ |9 H/ ?/ B6 I5 Y1 V( q4 C

4 Y2 |4 Q: q* l我用
! o' o8 J: y4 Z; r, Q& c  {0 N( Q% u3 S. D1 f" {; X' B, x$ o
: C4 b) j2 I7 K6 @+ _' ^. @
[mw_shl_code=cpp,true]        Features::Feature *feat1;
% `  I3 z1 q5 U6 K5 o: N7 U/ v        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]4 A. U* Y, Z' y6 i0 C* ~
代替
, n8 b% B8 l1 K% j( z. c[mw_shl_code=cpp,true]    NXObject *nXObject1;
4 L9 W7 z( L$ ^# L9 X3 f    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]
7 N8 S1 B* C% ~; V; t) [+ u也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??
# z" u5 l) b5 F9 h& J, [  `0 |; f) s7 Z希望指点一下?
+ H: \) u+ k' x1 M
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了