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

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

  [复制链接]

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

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

SimonLv 楼主

2020-4-4 23:57:29

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了
5 a. O- S& x+ Z4 n
: j% z: N6 F9 X5 b/ A    std::vector<NXObject *> objects1;8 E, C) {* L# ^! Q+ ~" ^. m
    objects1 = divideCurveBuilder1->GeTCommittedObjects();0 I2 Z* P" l% \  q  M5 k' t
- Q! [3 G, }/ k# t
- q- Y6 a+ n) l

2 O; |1 b6 c5 M' w3 B; y  o: m完整代码如下:
( I! P* L% [* `7 v" O& Y% L) R$ Y8 _7 j# H' a1 ]! C3 Y
// NX 7.5.0.32
( l' C" d; _# \6 @5 h# p. @// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间# Z0 S7 f$ a2 }9 N6 Z. ^
//& h; d# h  Q0 X6 w  \" x+ M( C
#include <uf_defs.h>  `/ {2 u% g. Q$ s
#include <NXOpen/NXException.hxx>/ c; r% C* k( ?
#include <NXOpen/Session.hxx>! K2 E+ ?+ j- H, j9 p
#include <NXOpen/Builder.hxx>8 I! I# u7 Y0 i$ G- Y& h0 B" P
#include <NXOpen/Direction.hxx>
* I' ?3 ~) T4 y#include <NXOpen/Expression.hxx>9 ?/ x  Y9 e6 E/ Z! x+ T/ M* z1 p
#include <NXOpen/ExpressionCollection.hxx>
5 e+ ^" C9 P( @9 v#include <NXOpen/Features_BaseFeatureCollection.hxx>
* l) V* U& I" s3 L$ L1 u7 Y- x0 b#include <NXOpen/Features_DivideCurveBuilder.hxx>6 S! ~  c) z! G
#include <NXOpen/Features_FeatureCollection.hxx>& y4 n0 Y5 x9 |0 h& @
#include <NXOpen/Features_PointFeature.hxx>
" f9 C8 ]/ w7 Z1 e6 c+ `& v+ n#include <NXOpen/ModelingView.hxx>( Q4 u. b& ^+ o2 c3 |+ Z* d
#include <NXOpen/ModelingViewCollection.hxx>
  l) `+ d& @" Z) u( p, M. i#include <NXOpen/NXObject.hxx>
1 T5 I/ _3 z; h$ t& w0 N2 A#include <NXOpen/Part.hxx>
! T+ I* d+ I1 _3 f( m& @#include <NXOpen/PartCollection.hxx>
' v1 M/ ]$ O- j#include <NXOpen/Plane.hxx>
# Z+ ^3 z. u- R3 `#include <NXOpen/PlaneCollection.hxx>3 U6 r! M: h. S
#include <NXOpen/Point.hxx>
' U7 _: J* M1 E) e8 y( p6 c#include <NXOpen/PointCollection.hxx># C4 N, v7 E: `6 s- X  p
#include <NXOpen/Preferences_PartModeling.hxx>
. n3 Y; L' q' P/ j#include <NXOpen/Preferences_PartPreferences.hxx>
5 \1 z( p( k: t# o& y  i: E+ i# ^#include <NXOpen/Section.hxx>5 l) w& c* o' f; }1 q5 x- S
#include <NXOpen/SectionCollection.hxx>
3 c! x( @- ?1 J$ z  X: [#include <NXOpen/SelectCurve.hxx>6 u, d9 `# P8 }5 ], B; u2 o5 x+ P2 i
#include <NXOpen/SelectObject.hxx># e; w7 ?$ [, `& e/ z: J; d
#include <NXOpen/SelectPointList.hxx>
; Z# m( j1 p, C/ g, N3 v#include <NXOpen/Session.hxx>" V4 n" B, o/ F8 R/ b
#include <NXOpen/Spline.hxx>
2 S& m( C% Y+ [2 B#include <NXOpen/SplineCollection.hxx>3 ]6 s9 J% @8 X' U# y- V
#include <NXOpen/TaggedObject.hxx>
' ^5 q$ T  \$ Q6 Q. V' u#include <NXOpen/Unit.hxx>, m- ~* B% a9 |* \, g! v( z
#include <NXOpen/UnitCollection.hxx>$ j& I' b) }- E- `4 M& m
#include <NXOpen/Update.hxx>. j0 J0 w6 [) R
using namespace NXOpen;
( X# T! D8 k" a) X# y6 H3 {
% B& u3 M, d4 Y% iextern "C" DllExport int ufusr_ask_unload()
. o# d4 x5 ], i{9 u& V6 @- Q8 U  s
    return (int)Session::LibraryUnloadOptionImmediately;
" D: T# U% }6 \3 b! z8 x, ~}
- \4 {7 k$ N% f5 `/ }  f0 m3 o4 L0 Y5 @# d6 @. C3 l
extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)  D6 V8 T) z/ s+ R9 E( x' G
{: Q% w  R/ z: n4 l5 F& i) y
    Session *theSession = Session::GetSession();
& I, L; f# W/ C8 P, I0 s6 |    Part *workPart(theSession->Parts()->Work());2 p- w. q3 X3 F! k5 i& B1 z- z
    Part *displayPart(theSession->Parts()->Display());
6 N- b- s- t; T8 p" F4 Z6 z    // ----------------------------------------------$ O$ \2 ^0 c! T8 t, U0 ]
    //   Menu: Edit->Curve->Divide...
9 r8 B9 {, V  g' h( W: W" J    // ----------------------------------------------9 E* k6 P9 v) m3 x" `- r
    Session::UndoMarkId markId1;6 b8 s. L! c) \" Y
    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");# r  K5 U1 \5 m8 o5 Y7 g

0 s4 [8 M7 L. d3 ?+ Y, A- Z2 ]6 `    Features::Feature *nullFeatures_Feature(NULL);
- `# S4 {! h) n! h+ ~8 u6 p( }; m5 R5 f" ^0 Z7 c
    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )! O5 q2 ?7 f0 [$ l4 u. s6 Y4 K2 v
    {
! |4 }3 e) x% c% f4 _3 b* r        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");2 ^4 t. a$ A6 [  J& i/ {' C! X
    }4 w3 R3 t- s: _2 W* ~, r

6 W9 B% n; P8 [6 J! Q    Features::DivideCurveBuilder *divideCurveBuilder1;! }2 y" V- {  d+ N5 q* f* N
    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);5 I9 B9 {& [" m5 e/ A4 G1 Y
8 j+ l4 l) t  \* }4 K. u* J/ }: |0 \
    Point3d origin1(0.0, 0.0, 0.0);
. X$ g, F! \" M9 w7 q! |- }7 H1 i$ a    Vector3d normal1(0.0, 0.0, 1.0);
/ k6 Y, @1 P2 B8 U1 B3 ]    Plane *plane1;
9 n* b, v$ T( ~$ \: c    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);( G# X; v# _4 D2 J& |! I# J2 l

  E' l  D  X4 Z" N0 m' s) W$ X$ s    divideCurveBuilder1->SetBoundingPlane(plane1);
' ?- d; `- X7 |8 t/ S5 I, N# n6 N0 d$ W: \" U5 _3 f
    Section *section1;
2 _$ o2 U2 S7 T0 I    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
9 h( N; V9 Z, G% J, h2 J1 U
0 u# R5 d* m1 D0 c1 c    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
3 c7 V! K2 U/ l( L3 ]9 z# b    Expression *expression1;
+ F5 n# Q9 i/ x& a) X$ G    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);" A! u0 Z0 F* L# ?! p* J& U4 Z

4 U& F. P4 Q2 \    Section *section2;8 a+ j3 N) w5 V/ N/ {% ]
    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
; i8 L3 D" ?+ ?) ?& [0 `
7 v) ~. x$ P* W+ K+ U6 K* U2 U    Expression *expression2;
3 I% n  P1 f3 ^- v* b9 ^    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);# L$ X9 @( S, \& n2 l4 l0 r) T6 Y1 u
- W2 `" T' \8 H# o2 `- {
    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);
1 Z% N& m0 ^1 P8 Y* I, c  P
' A* G9 q3 ?: s& z7 [    divideCurveBuilder1->SetEqualParameterSegments(5);
1 e# ^4 W; I$ g6 g/ `
/ K8 c5 b2 g1 y- L3 g* K    divideCurveBuilder1->SetEqualArcLengthSegments(5);
6 u6 K( g8 a- I& W4 G% |% Z2 {( \
    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));
$ I4 |+ E4 J; y( x1 v8 e/ Z- g. q* I- |
    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);
# F( B' d9 j& s$ c& M( M; V' y3 Z- k2 s6 y9 @" K0 q
    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));
  b" r; l: D& s* f    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);
7 N- Q$ ~% s1 F, R+ G; y, O    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);1 H+ c1 ~& v! B8 |# M6 w# B5 N
# |. Y' Y4 ^0 T/ v) P5 M
    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);
7 h0 G; ~; R' \0 f$ l( V" F$ A) O4 O6 t
    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));& m: k( T" K" t
    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));
+ S  z4 ~7 h" t5 g9 `' B- F    Xform *nullXform(NULL);% a8 p7 ~/ [& Y. e+ @6 P
    Point *point3;+ s, Q% @" s* w1 T9 |6 A$ a
    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);
1 f6 U! D$ b. H8 S5 o" S, @6 C. E9 {( m% c; E
    divideCurveBuilder1->SetBoundingProjectPoint(point3);1 [2 D5 B" g$ N3 S( B, ?& n

- v/ t2 P! J1 y    Session::UndoMarkId markId2;8 C! n& }2 g# L2 ^* A
    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");5 j- `* z6 ^3 O. b

. i- G3 d) u" ?/ s7 `& k) Z    NXObject *nXObject1;
8 h% k- T3 k+ F. v; w    nXObject1 = divideCurveBuilder1->Commit();
& J  p5 g, U7 h! U, ?
& t! D7 |# Y' p# y  j, ]    std::vector<NXObject *> objects1;! U; t( }) f2 J8 V
    objects1 = divideCurveBuilder1->GetCommittedObjects();9 y; Q2 ^- S; C. e
6 Q) W0 Q, d+ X5 I
    theSession->DeleteUndoMark(markId2, NULL);
* [  E6 N: t1 S  n
" A) v( I' A$ ?0 R    theSession->SetUndoMarkName(markId1, "Divide Curve");& i9 x& x+ s) l& d6 ^
2 j. b. o3 C9 R4 ~$ L% _$ R7 F
    divideCurveBuilder1->Destroy();- D: c" \2 z2 ^/ d7 P
$ @1 ^, y- H  K1 v
    try
% @6 V. X# C% G    {% @0 `" _+ s4 |0 c
        // 表达式仍然在使用中。! m5 }2 M3 E* K3 K. s
        workPart->Expressions()->Delete(expression2);
$ A8 J- o5 A' C, s! Y; `    }
3 r9 k4 W0 s, X8 p    catch (const NXException &ex)
8 m# P4 Q+ h- O! I& m6 r    {
  H; F& P8 t* |0 m# A6 N: p      ex.AssertErrorCode(1050029);  Z( h! p; {, P9 ]) C
    }
5 i+ t) z0 T' R
& \* q- k7 |4 V4 R7 _4 Q    section2->Destroy();
6 q( a, X- x* s; U' }; g/ h/ H( h- t
! t* [1 Z6 m& l5 }" a    try1 y2 D4 B2 D* t# k% s8 h
    {; }, V5 [! B  v4 |" l: G/ W
        // 表达式仍然在使用中。
9 ?, b3 v& a! ?0 Z6 F8 T8 m' z$ ^        workPart->Expressions()->Delete(expression1);
6 ~& n: j6 k0 \4 j' }! b+ w    }5 Z. J% L7 ?/ Y( v' t1 x9 o& R7 b/ m2 j
    catch (const NXException &ex)- u5 Z* `; t; N, @# E; D: T$ j7 j7 P
    {1 S1 @, i2 `% U6 E, G( ^2 {
      ex.AssertErrorCode(1050029);
: B& R( M0 ^7 ^0 v) y& K# M' \    }4 y3 X8 j- ]3 u. T
% Z; x5 R, C* `' O
    section1->Destroy();
2 K. V0 s4 r, E& \
- z( k9 y- U% F. z8 a- y    plane1->DestroyPlane();9 L- }# B0 A5 V0 s& B
9 K$ i' H% v- J* v) q3 Q
    int nErrs1;2 O! q: L. d$ j" G1 Q2 N
    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);
+ b2 [7 e" J6 _, e/ ~
% F1 q: Q9 k" h) \' }& C    // ----------------------------------------------
( D7 h0 N/ i) Z6 `" c0 t0 M    //   Menu: Tools->Journal->Stop Recording6 V+ K; u: `8 n
    // ----------------------------------------------
7 T) `- i$ y- ?2 w}& k% w: ~! I  v5 F4 k- U
% h: O9 e% W9 e- Z
# J/ ~3 U5 W  T
- i9 {/ u' a5 f6 m
希望大神指点
5 A; j( j0 y* @; ]' E4 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()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。9 h# i2 w- \4 ]
. K& A+ d; g0 W" C8 p6 d
另外一种方式就是生成的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
& Z$ D+ D8 y' F) r 捕获.PNG 3 i5 v) l: I5 G; A3 b7 O
[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的# L$ O* t% @1 c; ^

9 e! Z7 Q+ K: E& _3 N/ W6 g我用* p5 l  N8 W6 E. L4 q* w
  ~9 r& ~3 D7 K/ I$ M
  b& J1 G7 h1 C2 G& v
[mw_shl_code=cpp,true]        Features::Feature *feat1;
- r2 }( f9 K% P& U/ _& v. c9 r! y        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]# X2 ?* |( `; w# `& K  [
代替
5 |# ?4 m0 u1 {7 l[mw_shl_code=cpp,true]    NXObject *nXObject1;" l, P% R: u% H' I$ e. g
    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]) A! n2 c+ Q! B1 z- K1 J
也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??
7 Z7 z+ p/ b) ?2 D3 p7 S$ }, Z希望指点一下?
! F" |* z/ k  W0 c5 Z4 Y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了