查看: 2124|回复: 2

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

 火 [复制链接]

1

主题

1

回帖

21

积分

新手上路

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

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

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

×
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了* A$ ~6 B5 e  Y, I' U4 N! E# m3 Y
! v3 A. ?) u: W( I
    std::vector<NXObject *> objects1;
7 @4 B7 d# I) R* I; n+ ?* W    objects1 = divideCurveBuilder1->GeTCommittedObjects();5 X8 m, y8 T, g! J' q2 ~: G9 G& N
$ ]4 ^" W6 F- A! |
& E: H3 X$ y1 p7 J6 j8 t! d3 R
4 D6 k( T% {3 }5 s4 m
完整代码如下:* l; y" H$ t" d" y0 O& C+ f
, b! h: A9 K7 J: p7 a4 s% c8 u* h
// NX 7.5.0.32) y. W  c0 |# t; e
// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间+ f! E7 L+ ~& s
//" y2 {; O2 ]$ h
#include <uf_defs.h>
0 H. q- ^3 N3 d! F  G" h#include <NXOpen/NXException.hxx>
$ @/ \. [8 {+ p# G" S- K( K) H#include <NXOpen/Session.hxx>1 N3 \! X& L9 _; _; ]& |& B
#include <NXOpen/Builder.hxx>8 l* {( z& R0 [) o8 Z2 N
#include <NXOpen/Direction.hxx>
# S/ t! _% u" d( x- B#include <NXOpen/Expression.hxx>* s# w: p5 {5 `  E( X
#include <NXOpen/ExpressionCollection.hxx>
  b& F$ c4 M0 N* F' ?#include <NXOpen/Features_BaseFeatureCollection.hxx>
# O3 C; q" q$ X3 ?#include <NXOpen/Features_DivideCurveBuilder.hxx>3 O" V1 J3 a9 x7 E
#include <NXOpen/Features_FeatureCollection.hxx>
! c1 }3 u& B6 H- S$ k+ M0 M#include <NXOpen/Features_PointFeature.hxx>
! R. B& w5 W# t. f9 B  q/ g2 N) j#include <NXOpen/ModelingView.hxx>; S9 ~$ w. b3 M' I6 s
#include <NXOpen/ModelingViewCollection.hxx>
6 g, ^7 T& ?# f. d9 Y+ Q# K$ w#include <NXOpen/NXObject.hxx>
# W6 K- Q; y: v/ i- z8 h5 r#include <NXOpen/Part.hxx>1 y3 g0 W7 Y2 l% M8 C. D
#include <NXOpen/PartCollection.hxx>
2 Y8 N* W3 o1 o#include <NXOpen/Plane.hxx>) g% [" u) {2 i7 H. r
#include <NXOpen/PlaneCollection.hxx>
: @- v7 _- R+ \, s' {# t#include <NXOpen/Point.hxx>
- r- z. ?7 Y2 ?' C. a$ n. L#include <NXOpen/PointCollection.hxx>
1 K/ A& a2 l/ M- \' K% G  I#include <NXOpen/Preferences_PartModeling.hxx>9 V" z' `5 j( G9 I# ]  N# E
#include <NXOpen/Preferences_PartPreferences.hxx>
! i& M5 [& w3 n$ w  C3 ^! T#include <NXOpen/Section.hxx>$ W2 x/ o1 v4 {: \. O2 D+ `9 b) [
#include <NXOpen/SectionCollection.hxx>( H- E, i5 m5 s* D9 g; |/ l
#include <NXOpen/SelectCurve.hxx>" z2 f6 g8 g' L$ i, O
#include <NXOpen/SelectObject.hxx>3 C4 G+ W; c% h" k
#include <NXOpen/SelectPointList.hxx>$ Z% K1 k7 t. V3 r. {& i: L' ~. U
#include <NXOpen/Session.hxx>
6 B+ }5 _& [; l+ }#include <NXOpen/Spline.hxx>
$ G$ G+ z0 E1 E" f#include <NXOpen/SplineCollection.hxx>+ S# F. `: t& I/ y0 t% O
#include <NXOpen/TaggedObject.hxx>
1 g( F; D( D$ M* V. E  S, G  U#include <NXOpen/Unit.hxx>% y2 B# t& Y, h% w  W% [& i) s
#include <NXOpen/UnitCollection.hxx>
/ o5 d. J! u, i6 B# q9 V#include <NXOpen/Update.hxx>8 o, x$ ~: J* y
using namespace NXOpen;  ~. o9 Q5 c9 z5 ]' F

5 Q  R  [: O* J! }: A4 }extern "C" DllExport int ufusr_ask_unload()1 @8 R3 N6 P. I1 W3 [( {3 V- r
{
5 O4 p8 L& C  S) \8 y9 k    return (int)Session::LibraryUnloadOptionImmediately;$ e& w( N- @! d! Z# u
}
& |! X/ J! f1 `5 ]( N9 G
/ ?1 j. |* m- e7 \extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)& @. @- y$ Y. ~% t0 z
{4 }+ t' j9 M7 ?: l
    Session *theSession = Session::GetSession();9 X+ R2 g5 y, i8 n
    Part *workPart(theSession->Parts()->Work());
& @  q3 W. Z, G/ ?( m    Part *displayPart(theSession->Parts()->Display());
+ \2 ?( O* I6 a9 q5 r3 H: X/ e: W    // ----------------------------------------------" f- I& D) B6 o& x
    //   Menu: Edit->Curve->Divide...3 p& ]8 w1 f1 z3 D  P
    // ----------------------------------------------$ j3 M% K1 V! a1 e% l$ }! o4 s0 j
    Session::UndoMarkId markId1;+ ?7 C/ J0 t- D& ]
    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");
+ \2 x6 J2 {5 \$ Z- F5 m# B& O2 w7 c1 B, S  C8 X9 K0 j. e2 k  W& v
    Features::Feature *nullFeatures_Feature(NULL);$ r6 W3 e% W. P, s. b" T
5 Z, d- `% ^- X; `; E7 F. n
    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )7 f$ o) D2 r: Q" {$ \# T; E
    {' ^9 ?6 s, F1 n
        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");- G2 f6 I, `* i$ g
    }
% ?  [  D$ Z3 ^& E- o
" @# X2 [! ?+ _% M    Features::DivideCurveBuilder *divideCurveBuilder1;
" u+ `" v. R- x. n: B    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);. Y& H7 x" t9 f' C
$ A! t6 Q2 D2 f
    Point3d origin1(0.0, 0.0, 0.0);
! X0 ]* T. m( z& ?1 A0 R    Vector3d normal1(0.0, 0.0, 1.0);
/ ^! f, X0 C" d9 Z    Plane *plane1;0 c! ~. f5 i' z. d* u1 p
    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);" O. L6 `3 T% ^& F' y

9 a# P0 w8 s$ I! m+ _# r- Q    divideCurveBuilder1->SetBoundingPlane(plane1);
' m  [+ g& x) V) N- f3 O) p; C5 L3 V
    Section *section1;
# H+ g& C  W- a) j+ ^$ [    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
' B1 W. u6 q2 G3 w1 \, ^! J5 ^& ^7 `- K& o6 `' V7 W
    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));& I$ Q( O/ S& r' E1 S2 _
    Expression *expression1;9 W0 P/ {, u0 O  q
    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
& Y. T7 c- z" ^+ t: o, z( X, B2 \/ E; T
    Section *section2;
  x8 b: g" F  L$ z    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);0 N1 \. j0 H/ P3 C- l* P* j# I

$ B* v% l9 W' w& v( K    Expression *expression2;
" g- c5 f  N0 \    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);6 V4 P, |( Q4 n8 S! k) A

% A. G: f/ Q, x    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);8 n$ Q2 U' c% ?, L1 P* S; N1 z" }0 [
. B6 I" z5 R7 C: g$ e
    divideCurveBuilder1->SetEqualParameterSegments(5);
4 q% p; Z/ F( O3 s* x0 z1 X) w4 c2 a) D! h1 F* w8 W2 V" u
    divideCurveBuilder1->SetEqualArcLengthSegments(5);
6 B2 {3 Q( C; l7 `5 N4 v7 o/ \( q
& R2 [  F' [7 O7 s    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));# d1 z+ T1 Y' a: W1 h2 x: w

4 ~  ~4 Y! H. K; F3 I* S9 g    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);
, F( k1 V* w5 d3 `, A& R) Y( Y4 j5 b$ F. P% z5 u
    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));9 _, l/ B6 o/ G: y( s
    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);
4 I- \8 R: }5 M. @    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);( w5 J( P! r" r- v. z+ c5 p" n1 k
% Y( B4 I( h- F. J) q6 n- v
    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);3 M- F2 u4 q7 h# J7 ^  f% b6 q

( y3 L" D( c! j- M, [' l    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));
. N7 k& Y' {( P    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));$ R8 Q3 S! K- V7 X
    Xform *nullXform(NULL);
, \$ e# a9 C8 @, e& |8 {    Point *point3;
  l$ {# n3 Q% E7 q$ t8 Y    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);% Y& B% \# L; o/ O1 [+ X

) \, r) w& i, ?# c: p# e6 D    divideCurveBuilder1->SetBoundingProjectPoint(point3);: C" P* e) R* Y

1 ~" t3 n) ~" h    Session::UndoMarkId markId2;
2 W8 m0 ~; _; N/ X& S8 z5 [    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");& U# E! T  B* E! {

" ]1 J" o# @3 y    NXObject *nXObject1;7 Q1 m7 e4 i7 O4 G5 }0 }) E
    nXObject1 = divideCurveBuilder1->Commit();
, x9 h  {' n6 E6 m% ?% i
" w0 K4 k. j/ R) R9 o1 l. X    std::vector<NXObject *> objects1;' W$ a  [( [, C! E% y5 H
    objects1 = divideCurveBuilder1->GetCommittedObjects();4 V/ `2 }! V, K3 s* A( g
& |! y6 u$ @4 e' A: g2 ]/ C
    theSession->DeleteUndoMark(markId2, NULL);
; Q' ?( a2 w/ F# Z0 Q3 h0 r( r0 ]1 y$ Y
    theSession->SetUndoMarkName(markId1, "Divide Curve");) C; O' d' K9 ~2 I/ ]1 m2 `

/ R$ y) u+ u$ [    divideCurveBuilder1->Destroy();  l* _3 R- j3 P6 S
' L! S  F9 p9 l5 t) o+ r; Y* s
    try
, j* d: m4 U* Q- J5 ^    {
! ^# @* O- x# W! n9 _% K9 Z% V: E" U        // 表达式仍然在使用中。  ]  ^: U; {: i0 p8 r8 W! z* g5 F
        workPart->Expressions()->Delete(expression2);! W& ]+ ~3 q6 @
    }4 u* Z: {' {* `% P* F
    catch (const NXException &ex)$ Y. J5 A0 R+ ^" ]. p( U  x
    {" `1 w5 y% H  w0 C! n
      ex.AssertErrorCode(1050029);! Q) L0 [0 A! t$ Y! ]6 y% ]
    }
% S8 K; m' A; ]  R
' \- j8 ]6 C8 F5 O( f0 K    section2->Destroy();: v0 W, \! N- P& U! ?- B
% u* w1 ^) v' B  ~5 O6 ^  n- i; Z
    try
  R: a% G" y) V- b: o# n    {' g4 |( g3 @( f; k
        // 表达式仍然在使用中。
8 a5 @& w) @( f        workPart->Expressions()->Delete(expression1);
9 g% J  W$ ]% A5 g" J5 `8 M    }
# ^( U8 V  \' t: e/ l    catch (const NXException &ex)
# i8 }# Y2 `" w7 X. ]    {
" X9 I. J' q0 z0 F      ex.AssertErrorCode(1050029);+ I% M& _* }3 \0 T" `$ m. m& H4 w3 x
    }
! Y# v6 r5 k, X# b' l/ H" G# q& H8 a) V! u7 g& z4 c* a2 {9 B
    section1->Destroy();5 ?" `; z3 s% |- \; K; o
( |, g1 J$ \  f& e. \- J" Y
    plane1->DestroyPlane();
8 D9 _. Q7 o- ^! P
' w5 r! g2 ^3 L: Z: L, B$ V. p) i    int nErrs1;0 l6 e1 s( ^/ P- z% [3 X
    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);
1 e% i# @. a" ?9 t$ ^* E* ?* |* a3 ?3 s. T2 L2 i. m2 K
    // ----------------------------------------------; `8 @/ c. g: Y# [- N+ N- D; \
    //   Menu: Tools->Journal->Stop Recording
. K+ o' B; p! [3 p  y3 o8 ?  V    // ----------------------------------------------
9 }" L. q7 s. k0 a/ D}
+ E. ^# i& d# `  o, o# {
1 L" i# u: O" J) H4 j7 g# \- d- r0 w  Y. {+ Z+ f, m9 N

$ b/ K4 i2 X( X, [6 ~( B1 R希望大神指点
+ Z* F% H- }) ?4 F8 Q( f  }
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

6

主题

4

回帖

60

积分

管理员

积分
60
发表于 2020-4-5 08:52:59 | 显示全部楼层
objects1 = divideCurveBuilder1->GetCommittedObjects()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。
" k5 Q' I- P/ N% a/ b9 H6 Q
* {4 |$ t  s, C6 u2 s另外一种方式就是生成的feature,通过feature去找对应的子对象
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

1

主题

1

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2020-4-5 10:47:20 | 显示全部楼层
C:\Users\99112\Desktop4 E  B- C6 ?4 n- [: o% t  S" o* ?) j1 ^
捕获.PNG
" c" G8 E' A( h[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的
& T" G- ^' M; l
) l4 q& Z4 G1 F$ ^+ p0 O9 h5 ?我用
# T) T5 A/ l/ @/ [1 F
  x. }) j! v& H+ E% q: ]- L0 t' \: J- O( q# Q2 e
[mw_shl_code=cpp,true]        Features::Feature *feat1;
: s4 @$ O/ g  t/ ?, C        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]
( l4 r7 J) B, R代替
5 D8 D3 U/ |7 ^; A# s2 ]2 m[mw_shl_code=cpp,true]    NXObject *nXObject1;
- a" e7 x: z" j- F    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]/ w- l+ s9 }' E
也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??
* i. c% l' {, e4 Q希望指点一下?
! [6 `2 E, v6 _8 m! u
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

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

本版积分规则

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