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

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

  [复制链接]

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

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

SimonLv 楼主

2020-4-4 23:57:29

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了
6 s  K' F3 s- |! W; {6 Y/ Q3 v2 A  m& A* C7 g1 x
    std::vector<NXObject *> objects1;  [- i, B5 t! C0 \. q9 C! S' L
    objects1 = divideCurveBuilder1->GeTCommittedObjects();
3 t( g  I& Q6 T' f7 [+ C% ~4 r
3 e: z2 M' P: i- o+ _8 ?0 p1 ^" q4 {  g& i# J8 I# q: L
! k3 i- g* ~# w. o. x7 X$ U: ~8 |
完整代码如下:
4 B8 Q# E/ b! r2 A6 J
/ c" Y$ J' T# k. ?" F// NX 7.5.0.32
0 F- ?* {; A+ @4 v$ Y// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间
, c4 Y/ b3 d  A. t1 p/ D//
: L" d/ P! D" X. Q% c#include <uf_defs.h>
2 A) Q. U* ~" \6 i" ]#include <NXOpen/NXException.hxx>1 N9 K* W: `! U2 B4 z; F/ y0 ^
#include <NXOpen/Session.hxx>3 f3 T2 v: T! Y% Z2 k
#include <NXOpen/Builder.hxx>$ ?' K* Z& v, t( g0 m- Z
#include <NXOpen/Direction.hxx>: y1 y; M8 ?2 g" F: K+ c3 C
#include <NXOpen/Expression.hxx>
8 H8 K( {: x+ ?! `' ?, h& L#include <NXOpen/ExpressionCollection.hxx>/ \7 q$ s1 C2 t5 k  V
#include <NXOpen/Features_BaseFeatureCollection.hxx>" j* b) @. ?6 X5 q% v1 K8 x9 Q
#include <NXOpen/Features_DivideCurveBuilder.hxx>
; U% q7 e$ e! T: \. f#include <NXOpen/Features_FeatureCollection.hxx>
) w- d: _+ g- B+ o' {+ R#include <NXOpen/Features_PointFeature.hxx>
: t1 `* K) i) G5 ?#include <NXOpen/ModelingView.hxx>+ o/ O+ p  j. c( q2 J; O& X% y# j
#include <NXOpen/ModelingViewCollection.hxx>
" N6 I, X: {3 \5 A/ I6 n#include <NXOpen/NXObject.hxx>2 i* u* O) [6 {  U6 a3 e6 N) l% {
#include <NXOpen/Part.hxx>
; `6 b8 m. X2 Y#include <NXOpen/PartCollection.hxx>, I) u  ^$ U) q7 [% |1 |; ~$ ~$ e
#include <NXOpen/Plane.hxx>
% h0 z( c/ w! ^( V# n+ M7 B* j#include <NXOpen/PlaneCollection.hxx>8 o/ f; A8 |- v
#include <NXOpen/Point.hxx>( n6 e# {/ ~7 }% O& p' j
#include <NXOpen/PointCollection.hxx>
8 z# i0 R, R! y( I#include <NXOpen/Preferences_PartModeling.hxx>0 N. t  D9 X+ D9 ]0 m& ~' ~; G
#include <NXOpen/Preferences_PartPreferences.hxx>, R, f5 K' O* q# f' |6 [
#include <NXOpen/Section.hxx>0 |- V1 z  g4 [0 @; ?
#include <NXOpen/SectionCollection.hxx>: v" L0 F  d7 q' I. ]; O
#include <NXOpen/SelectCurve.hxx>
+ K8 o# s: j4 Z  q$ @4 Q; c& m. |, {! g#include <NXOpen/SelectObject.hxx>
. ]- ^+ t$ O1 ?: {  \8 x, v#include <NXOpen/SelectPointList.hxx>! }3 ?/ a2 }5 i7 t7 T+ g( \
#include <NXOpen/Session.hxx>
, {9 j, |- ^& X0 C1 n7 {#include <NXOpen/Spline.hxx>+ S* U5 x, {! T- K% [
#include <NXOpen/SplineCollection.hxx>9 C$ p6 \7 E% n2 S
#include <NXOpen/TaggedObject.hxx>4 t3 X; L1 [) u$ \' C( [  _2 T
#include <NXOpen/Unit.hxx>" ]: d( b6 A; ?0 Z- I4 O/ G; U
#include <NXOpen/UnitCollection.hxx>; l* y& d6 w; G
#include <NXOpen/Update.hxx>' D) \, G% h' z3 T: K- Q
using namespace NXOpen;9 t& Z9 R3 j% N. Q6 y, M1 v

: M6 k6 D1 B8 b+ B1 Qextern "C" DllExport int ufusr_ask_unload()
$ V* L/ L4 j* s/ v8 D{# h( ?3 q/ o( V. N4 b9 E
    return (int)Session::LibraryUnloadOptionImmediately;
+ f, E1 G) H; r" j5 L2 Z/ w}2 L* U! G/ ?9 o; p# w* c
+ x7 q* L: Y4 a2 m
extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)2 W$ Q1 l! V8 _* N
{, g- T8 F' n& n4 ]  j; X* l
    Session *theSession = Session::GetSession();
6 }2 w) W  x8 A' m, |    Part *workPart(theSession->Parts()->Work());
5 w, T0 Y# W) Y7 ]; W$ S, H( ^! Y6 Q  E    Part *displayPart(theSession->Parts()->Display());( c7 C1 b( u3 Q" a1 J
    // ----------------------------------------------
7 m6 s/ d4 D- b& ^0 S" f    //   Menu: Edit->Curve->Divide...: j! i4 W  P( S1 o
    // ----------------------------------------------
& F6 n/ }+ R9 ?- g6 Z    Session::UndoMarkId markId1;% Q3 W. O- S; _: L1 V7 x) g* V
    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");9 }7 e& T- ?2 N; ~9 x
# ^: Y9 v& I- h+ N: Y
    Features::Feature *nullFeatures_Feature(NULL);
( e- x, ]7 h8 w+ [# V5 J9 s! g( g* \  s% b) E' z4 T5 o) }6 r
    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )1 |% ~- L( l( D8 L( [+ q
    {5 R+ v6 v% V+ @8 y! E, }
        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");
$ d2 Y: a( U  @& O    }8 `4 K- z5 U! D0 S2 x3 C+ M2 a
6 p% h, P5 A: W1 @' b
    Features::DivideCurveBuilder *divideCurveBuilder1;: G7 l# r2 f) {+ f
    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);
0 M- a' j7 c- j/ }$ w, L0 m4 ~6 g
- Z( l- k5 R5 C: v" i# J    Point3d origin1(0.0, 0.0, 0.0);
7 j# }" _5 ~! w$ W    Vector3d normal1(0.0, 0.0, 1.0);
5 Q3 U* u2 @7 e0 T- Y2 m5 S    Plane *plane1;6 D  I  w; d# ~
    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);
3 P1 I9 G# }6 p7 E  k5 }6 v: w8 v$ S( `
    divideCurveBuilder1->SetBoundingPlane(plane1);
% [4 Q( o0 o' ]/ O
" ^& [; A' u  }4 U1 A    Section *section1;6 Z2 P  e8 {8 ^
    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
0 G, G) e& f- @( h7 _7 G9 C1 |/ x: I! }
    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
* H/ C( g0 z( s4 Q1 B2 G! D$ K! ]    Expression *expression1;7 }: a4 h" P9 T; ^* Q
    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);4 f6 w0 H: x+ @8 ~/ y9 e; a1 r
: a- c9 g# i. l2 H
    Section *section2;
0 L5 v4 @7 I7 C/ z& p- ~  t5 \6 P    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
: N8 D" I8 J/ x' d  q9 F
" Z2 I3 ^2 B" c# ]4 u    Expression *expression2;, s+ e1 K" n# W9 ]( r
    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
8 q: F+ h$ q2 j% x$ @. E8 P. v. ?' M& n  F! c
    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);
0 `  I. l- a$ G5 q5 j0 L" i) R# }
    divideCurveBuilder1->SetEqualParameterSegments(5);
+ O% k- o) U. Z9 T0 e1 I4 ^5 Z
. i! T: \$ p3 D" f2 O' x1 ~" C    divideCurveBuilder1->SetEqualArcLengthSegments(5);8 n& `; ]* ]+ _5 e; |8 y* w. p

0 \; a- Z9 Z+ R/ `" o' c1 n% f    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));5 ?; }  q0 x  |0 V
7 H  X& ]1 K0 {1 ]- e/ x
    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);
3 Y/ r5 q5 o3 P. q% B; {' E2 ^+ j8 X+ Y; R9 e  O- L" u$ `
    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));
8 b# B; L5 l7 i9 T0 y9 r! Z    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);
0 @. j# v% I$ [2 q    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);  A7 s  G# f8 L& ~  q+ M
$ {1 ]$ g' \+ Z, h, \  T
    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);
( g/ I8 U. W1 Q- B! R9 Q
' H% L$ u  b" d6 c    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));5 E, @6 }8 f  @7 _: k; U1 G, g
    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));
& G* |/ n7 N/ Q: y! `    Xform *nullXform(NULL);0 w& Y( Z2 |/ H3 ^- I
    Point *point3;! Y7 |  e9 s0 B3 N  u
    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);
' Z: q$ {! ~/ l) F2 k9 F$ b1 K7 _: p' j. M" E: }; `+ `
    divideCurveBuilder1->SetBoundingProjectPoint(point3);& Z' \8 T( T0 ]6 p

  U& C. H# U. z2 h- M4 N- P    Session::UndoMarkId markId2;! }& c7 k7 b. Y, i2 f
    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");
! l% `; M; O- h, [  H3 d9 R6 k6 L4 v3 u
    NXObject *nXObject1;- w( j0 y( S0 m- w* j5 q3 J1 h3 x
    nXObject1 = divideCurveBuilder1->Commit();
8 ?+ V, m" e- y$ Y
" t3 G# y1 P) l- s* A( J    std::vector<NXObject *> objects1;( q+ \6 }1 M4 c& {6 Q% E" A& q
    objects1 = divideCurveBuilder1->GetCommittedObjects();: J, T; \0 b1 e  [" q  b
, g: k3 y! {; U8 i  R& Z
    theSession->DeleteUndoMark(markId2, NULL);+ ?8 L. U# Y8 p+ E- d4 ^
1 o/ G" s( v7 S1 h* R$ ^: ?
    theSession->SetUndoMarkName(markId1, "Divide Curve");$ u$ K& M+ i, j% f
: ]: P( }8 a- H& W  Y
    divideCurveBuilder1->Destroy();
- Q. e* c- ?, V+ h2 k# f" J. B0 H& |" B! r- [4 e& R9 F
    try+ M/ W/ A4 @" n
    {
4 u, ~8 T; A. I7 O! W6 B        // 表达式仍然在使用中。
) F" N; _3 Q+ n! H1 m        workPart->Expressions()->Delete(expression2);
, a" P3 c- @. ?3 Q0 f2 \! J    }
! V" X0 L, g# n- o; n. I2 Z( C" v    catch (const NXException &ex)
( o: v5 d$ y+ B; u# t    {
$ q6 y1 Y8 q$ p( D- q      ex.AssertErrorCode(1050029);& O1 K3 U- d' `& W1 B
    }
  Q) V5 d- d( ]+ M& }; Y
" G% P* P, k  w5 R5 v1 @& R6 g5 ]    section2->Destroy();
) H7 |+ {/ T% \) U( Y: j( D; e: S' a+ R, I! x
    try
" s; X0 s7 B$ B9 v+ ]! V1 d, F    {
0 ~9 m8 b2 P8 C/ {2 j$ I' N- i- x5 D        // 表达式仍然在使用中。: G; v5 I8 }/ `) b6 K; v3 y
        workPart->Expressions()->Delete(expression1);" |% N1 \/ P$ H
    }% N6 c. U3 O3 w  \
    catch (const NXException &ex)
0 D* d4 F# j$ K) m( J. o- x0 Y    {
# u" ]* `7 q% c  l2 D7 q      ex.AssertErrorCode(1050029);
. J" b% X$ E6 z* [    }
4 r1 Q% m( [: J5 V1 G
4 {4 j1 Y& B  U$ ~+ O$ f4 L1 Z8 F    section1->Destroy();9 k% B0 n/ l* K/ W" M) P) e* v

7 Y3 G: r! \: k! Z9 b    plane1->DestroyPlane();
# T3 i8 v) @& r* w; S8 U2 P3 v1 ~! F5 Q  ^
    int nErrs1;* S& }- c& i* r7 r8 z; A
    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);
% J) w; p( K+ e# y
6 d6 ]) n8 w; i6 P3 S    // ----------------------------------------------+ J+ y9 ]: j$ ^
    //   Menu: Tools->Journal->Stop Recording
, ]# \# c; ^6 _: Z' D    // ----------------------------------------------
: _  u8 d4 Z: B1 y+ a}
) Z% K; v4 l9 ~8 n3 C. _( t! g" N9 N* [3 E

' [$ x+ K0 u' \/ K- Y2 r; @5 a
7 M+ q' S! K2 J希望大神指点
1 `7 A) |9 u/ `. m
上海点团信息科技有限公司,承接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()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。( _* \1 [$ X. M& c: V
1 _% s* w+ o3 z6 J, S/ Q
另外一种方式就是生成的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
& |# C* R3 S+ }- P0 C 捕获.PNG
( z' {2 |7 P/ J) v1 M  q% |[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的
, J6 J; p- x" `& e
- `! Z+ Q9 W/ P4 j我用2 y, \3 y& _, A! K, n: A

- v5 [0 U+ H- K1 u6 b2 g2 T5 N0 [/ N  Y$ y) X7 r( b7 H
[mw_shl_code=cpp,true]        Features::Feature *feat1;
' O& Y& l' r1 I( A. K+ s1 [- b4 k        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]2 q+ h, P1 r! {. k* ?
代替
& i( w+ Q- O8 q[mw_shl_code=cpp,true]    NXObject *nXObject1;
# z/ v) d3 ?& U" L4 d! ~) L. b    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]
: A( S- @- r* V# P也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??
' q0 `$ p4 R1 H3 \9 U希望指点一下?
; \. B' j& s# l+ m0 s* M% b
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了