查看: 2232|回复: 2

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

 火 [复制链接]

1

主题

1

回帖

21

积分

新手上路

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

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

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

×
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了
' t* a* I# k1 O* [5 z" b8 J3 ]3 j( q( f9 m1 L5 r. h1 ?0 V/ Q; @3 F& I5 c
    std::vector<NXObject *> objects1;5 k+ Q* ]+ _1 y
    objects1 = divideCurveBuilder1->GeTCommittedObjects();9 G3 y' y1 H7 B+ `9 L
4 e1 X$ h' p5 E+ J; l/ [2 k; f
2 |/ \( P4 \* m8 c* v
6 w) g; v. G& e& J+ I; }0 f
完整代码如下:
8 l4 v" x  ]6 T) u% r9 g! v
8 P. e& V/ \+ Y/ e' {4 w# |// NX 7.5.0.32* Y5 U% w3 Z4 x
// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间
/ l7 s5 P/ U4 V8 \3 e9 N0 g! e//
, w) Z  I1 S0 u) u. `( H4 W#include <uf_defs.h>
) ]; w0 c- h6 x7 R% G, O6 H( Q#include <NXOpen/NXException.hxx>
8 x' F; @( ]8 e2 ?# b+ g#include <NXOpen/Session.hxx>
3 m( H2 u$ \  I% d% h#include <NXOpen/Builder.hxx>; Y( j9 {; n' L! c' R& w) d# o
#include <NXOpen/Direction.hxx>
& x3 n2 g2 W" H* @: c6 ]#include <NXOpen/Expression.hxx>
& i/ k7 r* J* A' U#include <NXOpen/ExpressionCollection.hxx>
  q$ c" x6 ~( V0 O- |#include <NXOpen/Features_BaseFeatureCollection.hxx>
7 m- a* U. u8 H, ~- [- M#include <NXOpen/Features_DivideCurveBuilder.hxx>
0 [4 g0 I1 j2 x' V#include <NXOpen/Features_FeatureCollection.hxx>) v4 v4 J7 e4 o4 i( ]
#include <NXOpen/Features_PointFeature.hxx>
' e) k4 b' L1 r/ h' ~8 B  Z- w3 L#include <NXOpen/ModelingView.hxx>9 E" m5 _8 h9 _- e
#include <NXOpen/ModelingViewCollection.hxx>
& s- h; }; Z" b" g4 v#include <NXOpen/NXObject.hxx>9 j1 D6 v, v" p- A
#include <NXOpen/Part.hxx>, T5 t3 j+ Q. j9 i0 S( r  l  {: s5 j
#include <NXOpen/PartCollection.hxx>6 E* @% D7 t: c6 T( Y4 {0 V
#include <NXOpen/Plane.hxx>8 k9 H6 ~0 a/ l, J8 T# S+ r
#include <NXOpen/PlaneCollection.hxx>
9 J  _# t7 W6 s" S#include <NXOpen/Point.hxx># w% R/ {; F! R6 p! _: T
#include <NXOpen/PointCollection.hxx>( a( r$ ]( h" j8 w. V  H! I* o/ ~- H
#include <NXOpen/Preferences_PartModeling.hxx>
# @) v8 b6 D/ {! A#include <NXOpen/Preferences_PartPreferences.hxx>6 R. H0 ?! W. Z9 u
#include <NXOpen/Section.hxx>$ `5 z& l+ p0 x+ |( O2 n
#include <NXOpen/SectionCollection.hxx>
: R2 V+ z' Q' P5 \7 {# u  U: w#include <NXOpen/SelectCurve.hxx>
  K' F& B! @; O  v% H' @* ]#include <NXOpen/SelectObject.hxx>
! g. `" }7 c: \* _- Z#include <NXOpen/SelectPointList.hxx>
" Y; y% e/ N: T' m5 S$ O; u* t#include <NXOpen/Session.hxx>% b3 z5 g4 T# K0 a* c6 a" T
#include <NXOpen/Spline.hxx>1 W6 P0 n' o% y( q7 ]& j6 V
#include <NXOpen/SplineCollection.hxx>' M, d% D2 }' o" S4 b& S
#include <NXOpen/TaggedObject.hxx>
5 R. ~! G( S/ z% ^#include <NXOpen/Unit.hxx>
9 R/ |6 ^; u/ B+ _8 H  I% `#include <NXOpen/UnitCollection.hxx>
& c; Z" K- \  i- m#include <NXOpen/Update.hxx>, V& G. W5 b! L( A* n
using namespace NXOpen;
" @/ c# S5 ], {4 ~. G( w' K
' b  {6 `1 \$ j% T' h& pextern "C" DllExport int ufusr_ask_unload()
1 R. K3 ~4 a7 H3 n: l* W{
" `" I, C, _# f3 G8 `: t' G9 `, R    return (int)Session::LibraryUnloadOptionImmediately;/ @, G# G, @0 _
}
) l9 d0 p- B6 W* z; X  j2 c$ j6 ~: p; C. ~1 v2 w+ O
extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)# n; ~$ D$ i% C8 c
{. S9 U8 \' `' B/ \% L
    Session *theSession = Session::GetSession();( Z0 ~. G5 p' M7 L
    Part *workPart(theSession->Parts()->Work());! y* g! L: X+ G( z6 b$ ~
    Part *displayPart(theSession->Parts()->Display());
% H4 m" F+ }6 x1 }1 x9 A    // ----------------------------------------------
" k6 K+ ^) M+ D& [) u    //   Menu: Edit->Curve->Divide.... g2 l  w9 g. X& `; `4 X2 }
    // ----------------------------------------------7 R8 F0 s5 o5 _2 n. f' D
    Session::UndoMarkId markId1;- `2 ?" w: l& p# A: G$ x
    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");( |) m# n& e: d. G  h  p
7 H) G" ~, k$ [% M+ D: r
    Features::Feature *nullFeatures_Feature(NULL);6 K6 Q# k7 y- H1 m( T2 [
3 D$ N: E/ r) X( R
    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )* X* f, Z  w( }  R& I
    {# ]+ @1 D0 x# |) Y
        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");3 z; _) @6 X, _9 P
    }2 K. C2 a* O% Z

: ~5 O- J) |# C8 _6 i9 ]" M$ \, c  Q    Features::DivideCurveBuilder *divideCurveBuilder1;
2 N8 R  Y- C+ E% A' |    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);
8 V! z$ b. W; g0 }' o3 ~) e, E, P
2 K4 A5 h5 H! |" p/ G, m    Point3d origin1(0.0, 0.0, 0.0);
$ Y" ~+ Z, P% m    Vector3d normal1(0.0, 0.0, 1.0);$ A. l0 L; G5 v* l+ G
    Plane *plane1;5 Y3 e. Y0 k4 i8 {8 f  o4 |6 V
    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);; j) m, I5 b+ Y
2 L- ^( b  V1 R& Y6 i, z
    divideCurveBuilder1->SetBoundingPlane(plane1);
: K  P. [! ^7 e8 q
1 e5 a5 O+ J+ J) ]    Section *section1;. V! W; @5 M7 b) E, ]+ k& [6 n
    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
6 I7 l, r+ [6 }
  |' v6 h1 a1 t. k" n) j    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
  K- }) C2 j" k# q- B# N    Expression *expression1;
7 ^. R  [4 D$ b    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);' N7 M7 G2 ^, K9 V  [/ b. j
- N0 @5 _1 V5 R" m
    Section *section2;
$ o# X7 w' ]& ]2 Y$ o( \2 v    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
, {+ Q; f8 [, o1 @5 _; F' _' [$ z3 B- q7 w+ |4 D, t% a
    Expression *expression2;
- G* T$ N% I8 I* H2 N    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
8 N6 C7 l7 M- @4 r8 V9 X3 q4 Y3 `" |+ f' P
    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);
! M0 X0 B* s: q) a6 t( I" f/ g) q$ A  _9 s! z; G; E% _
    divideCurveBuilder1->SetEqualParameterSegments(5);" Q( E2 @* k& _1 b; D5 }" t" M8 R
2 Q2 v8 t# y# u. o$ }; P
    divideCurveBuilder1->SetEqualArcLengthSegments(5);' F- H  f' H5 W

% N0 M% R+ q" S3 b    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));$ f, |6 l  L# T/ X+ ]
3 ]9 s- R$ t; a/ ?) d
    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);
6 r/ K1 J2 {3 E. M* J8 @# u
+ F7 k, k) y# }) |0 G5 g% N) t& O    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));
; P2 e  Q; |$ a$ A# ?( ?) E1 g    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);$ d) ]3 Z8 q: L
    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);
) Z  |( u& r$ g3 N1 a
# F) l* a/ w! l4 f% ~    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);
( Q0 F$ d) q6 i- ?
4 j# i# d6 z4 d* z    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));
, s5 G9 n9 c" J' [- A* ^    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));2 w1 |5 J' \3 o
    Xform *nullXform(NULL);# y- F! ~0 }# Z! K2 V
    Point *point3;" M: ^$ {# e( d1 L9 u
    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);
5 G) o4 c4 R1 ]# @6 h2 H* R- ^# p7 w& a: l! L: ^: L
    divideCurveBuilder1->SetBoundingProjectPoint(point3);
. G: S  J2 A- q3 I" J- t- d) Y& ]( h! i4 K
    Session::UndoMarkId markId2;) ^2 @# n7 \% q0 g3 d7 o, a; c
    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");
9 B( H: {' H0 L- ]1 O# m5 I% P  f. u; P2 M( y3 |
    NXObject *nXObject1;( ~5 h* k- e8 G% K( \7 @$ i
    nXObject1 = divideCurveBuilder1->Commit();
' G' k& A2 C/ l0 ?4 a) u7 I4 S( Z" R# I1 _" L+ X( U3 W
    std::vector<NXObject *> objects1;
2 J& {3 T& N2 U9 `# c5 s6 g( h- f' \    objects1 = divideCurveBuilder1->GetCommittedObjects();
8 u" n& c. j1 E1 g# W8 k
0 T* e/ {% C7 i  _" V    theSession->DeleteUndoMark(markId2, NULL);
& x2 u7 R% X( {1 x/ O; Z% t3 ~  w7 I# `
    theSession->SetUndoMarkName(markId1, "Divide Curve");
2 A9 \$ V4 H# p' l* j3 p2 J' r/ m3 D+ ?& {# z) g
    divideCurveBuilder1->Destroy();
0 V& `) t5 p: g& W: u; b3 |/ |
7 C$ o2 T/ N4 j    try7 l1 G* R7 [1 B
    {
0 l) |# h( m; x% i2 I/ n9 M7 Y$ R        // 表达式仍然在使用中。
( b" T+ Z1 S1 k. e        workPart->Expressions()->Delete(expression2);
0 v8 Q# k. u. [: L; T4 r0 j! `5 S    }# O: K8 V3 ~3 m! j$ L1 [; X
    catch (const NXException &ex)
7 c$ U0 E( b& i, z& \    {  _5 \9 E+ C0 F
      ex.AssertErrorCode(1050029);: Y2 l) a9 u3 K
    }3 w1 X: `$ N8 k) k) X2 C" J$ z0 W
2 p  b' e* @! Z
    section2->Destroy();8 }" u6 J. @4 f. L$ {/ q7 S1 C4 t# W8 O
5 W5 {3 [/ y  W  s
    try
4 `% G% U) b( X4 V" V    {( H. `% [7 P$ `# F9 W/ F
        // 表达式仍然在使用中。
1 n1 A0 Q( c$ e' n  b8 ?        workPart->Expressions()->Delete(expression1);  o# V& r' {0 \3 l2 F
    }
) a7 D9 Y3 z  m/ y& T    catch (const NXException &ex)  a7 ^  f4 f4 H4 @. R; S3 M/ p
    {
' o/ j4 Z* P% V# ~1 N: [  J      ex.AssertErrorCode(1050029);" q3 O* S4 d* r3 ?' N4 ~+ V6 a
    }: L1 B& w  ]$ i2 Z

! P5 {' P# W1 C: ~9 f- o    section1->Destroy();" ]: E  J1 [) {" z

3 y8 [- U8 F" N% s) {    plane1->DestroyPlane();
$ z# y5 X2 F0 r9 c# s/ ]8 O5 ?5 @
    int nErrs1;: h4 _# w7 b4 p+ I; ]7 w, ?
    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);
7 Q+ e$ V! a, `2 g; g3 F6 E. e- B/ C% \' q, `/ z+ _5 d7 Q
    // ----------------------------------------------
$ F+ z8 z) x  o; a    //   Menu: Tools->Journal->Stop Recording* B  _3 O% b, r5 L/ M) G0 w  b
    // ----------------------------------------------, p  V5 B! A, c+ g2 s' l$ @
}/ N- n4 E% V7 |/ g2 H) l
+ S& _7 G# B* N  O
, D$ [/ Y" S& p; ~, v; j% ^
7 Q1 j7 ?& Q, y: c" N+ H) n2 |% @2 o' R
希望大神指点5 y4 `8 Z! ?3 k& b! {# I
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

2477

主题

1280

回帖

8万

积分

管理员

PLM之家站长

积分
82265
QQ
发表于 2020-4-5 08:52:59 | 显示全部楼层
objects1 = divideCurveBuilder1->GetCommittedObjects()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。
% s( L, _+ C& S/ c3 M% r+ K2 y! K* ?. p2 a+ D6 }, Y" U* U
另外一种方式就是生成的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
$ _1 ?" J8 s: E' R# b# J 捕获.PNG / s0 C$ G  ~3 W, c1 A
[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的
: N* R) |0 [, ]0 ?/ \3 o, x* s$ C! K  \# T4 H1 J1 v" _0 F! Y' U
我用5 p/ S3 a' U7 A3 o8 W/ R
+ j1 ^: v* y! h* R

' t3 w8 g7 A4 j. h4 E& C3 N0 l( V[mw_shl_code=cpp,true]        Features::Feature *feat1;
. J* A- b/ v, m, v- w        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]- S* Q; \% a3 U1 F& p
代替
" H+ E5 J' o0 x[mw_shl_code=cpp,true]    NXObject *nXObject1;5 ^% ]  j# F8 [0 }
    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]4 c+ P$ P3 l# w' N! }; d
也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??
" [4 p7 o: G# A1 y& F希望指点一下?
/ H( k1 O! c' ]) H# [
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部