PLM之家PLMHome-工业软件践行者

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

  [复制链接]

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

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

SimonLv 楼主

2020-4-4 23:57:29

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了
" ]* S6 Q5 _. o' O4 f6 a: v7 i5 n6 @: {% ~
    std::vector<NXObject *> objects1;7 I" j# K) k! @
    objects1 = divideCurveBuilder1->GeTCommittedObjects();  H8 v, j' e3 F4 k( F
3 J' L  g! f4 a1 s0 }+ q) b

  [/ n1 x% V- W# z# N1 i
! ]$ f6 C: F& `: ~- i8 c# h0 @完整代码如下:
* j( s* q" V; E# A6 I1 b8 R- U3 L$ J2 w' i/ W8 w) H: C7 G
// NX 7.5.0.320 z. C( W  N. j1 j
// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间
- X. B6 `  l8 ~! G9 b//% V9 a& Q' G2 a& Y  k
#include <uf_defs.h>
5 b" J: u' W& s  m3 {: Q5 {#include <NXOpen/NXException.hxx>
$ b: R4 y( U  J# k2 S7 J7 ?6 ]#include <NXOpen/Session.hxx>
- k. G: |. s7 Y, u#include <NXOpen/Builder.hxx>; s! |) ?6 E1 M2 K4 i' h8 F2 j
#include <NXOpen/Direction.hxx>
/ ^/ y4 P9 o) n9 d) ]#include <NXOpen/Expression.hxx>  F! h4 \4 s& a3 M) _7 o
#include <NXOpen/ExpressionCollection.hxx>6 N$ Q% m/ K+ ^. c8 X" m
#include <NXOpen/Features_BaseFeatureCollection.hxx>6 }3 G% a: `- u$ g3 k$ `% e4 S6 {! J, P$ C
#include <NXOpen/Features_DivideCurveBuilder.hxx>
6 M, w7 t* Q- e( }#include <NXOpen/Features_FeatureCollection.hxx>
: S0 |  T' N7 |. l4 S#include <NXOpen/Features_PointFeature.hxx>1 Y' S. c; X" y2 E1 M  `+ _
#include <NXOpen/ModelingView.hxx>" G; X, u. a$ D  R2 z9 t6 k9 v% U
#include <NXOpen/ModelingViewCollection.hxx>/ u1 J' f# {& i8 i& z  j
#include <NXOpen/NXObject.hxx>. z% x8 k1 Q2 E* G9 [
#include <NXOpen/Part.hxx>$ ?4 @# l5 H8 y" m; E- v
#include <NXOpen/PartCollection.hxx>2 F4 `0 C, o$ D$ T; c4 b/ `
#include <NXOpen/Plane.hxx>0 ], D  ]& _6 x* e, L
#include <NXOpen/PlaneCollection.hxx>
' E4 g: T% V; q/ x% ?: h, G: q#include <NXOpen/Point.hxx>8 M! t% z3 U- z1 j6 V
#include <NXOpen/PointCollection.hxx>4 k' j0 }6 p) z
#include <NXOpen/Preferences_PartModeling.hxx>1 p- X: q  s9 t* H: H# u
#include <NXOpen/Preferences_PartPreferences.hxx>
7 f; V! Z: p6 a! k#include <NXOpen/Section.hxx>. f8 }8 Z' ^9 a8 x3 |; s$ Q
#include <NXOpen/SectionCollection.hxx>- S$ ?! r& w" U/ O0 @! H
#include <NXOpen/SelectCurve.hxx># T4 i& b4 g4 b" v+ @6 H
#include <NXOpen/SelectObject.hxx>
. |$ @6 ]# I) w; c' R* D6 v#include <NXOpen/SelectPointList.hxx>
/ P! q3 e; e# @5 e( s% ?( b/ l) a2 ?4 r#include <NXOpen/Session.hxx>, v6 b+ A% w' ~
#include <NXOpen/Spline.hxx>  p! m' d3 |- d3 a6 ]1 O, C+ [
#include <NXOpen/SplineCollection.hxx>& @9 m1 S% [& ?' X, o) E3 C
#include <NXOpen/TaggedObject.hxx>
" i" C1 V: x: g2 V  \; S( l9 U7 p#include <NXOpen/Unit.hxx>7 b3 s$ T8 D  b; a
#include <NXOpen/UnitCollection.hxx>
. [4 f; n: R  G/ S2 M: @/ P6 ~#include <NXOpen/Update.hxx>
5 g' g. v* q+ m, nusing namespace NXOpen;
: K' `0 \! E0 Y+ M+ P* Y9 h8 O! e8 I, Z0 l! I
extern "C" DllExport int ufusr_ask_unload()1 |/ C3 Z7 K8 V3 \0 T/ H' n
{& N  d4 _; ]% r/ I# B7 ~
    return (int)Session::LibraryUnloadOptionImmediately;
/ r5 Y: z2 _6 }3 c3 d}* D8 K; ], U1 C8 P
8 E7 J9 Y+ c: U( Q7 Y% c
extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)
. d+ k- }( v7 e9 J5 ]5 F6 B8 @! n* P4 s{
. K* `! B5 U9 n& v% d    Session *theSession = Session::GetSession();: \( E3 L3 V' i7 n2 u" q4 t
    Part *workPart(theSession->Parts()->Work());
+ ^! R0 v: y& x" C    Part *displayPart(theSession->Parts()->Display());* X8 s# v* r, {: N' H0 D- p! C/ r
    // ----------------------------------------------
1 H2 ?5 y/ q! c+ t    //   Menu: Edit->Curve->Divide...7 h, |( u/ g) |7 P1 _+ B
    // ----------------------------------------------
3 Q/ {3 M0 p) K! K/ |3 ?    Session::UndoMarkId markId1;
4 J/ Z: l4 ?2 B. D# L, V    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");
! R5 l# n$ X8 T! ~% ^: q. m
# Z& L4 O) _% X# {0 y3 S    Features::Feature *nullFeatures_Feature(NULL);
1 O+ m$ _$ |1 p5 c# s4 E% q/ o3 h9 O9 Z# e. ]+ K5 Q* P
    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )
$ d2 p# P) I3 k! q    {1 w) Z6 J$ a) j, }$ ^
        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");% e/ X. r! Y( `8 n
    }
0 w. D# |8 D$ Y" B; d( \
( l/ e, U5 `* ^5 X8 ^* [7 J- B    Features::DivideCurveBuilder *divideCurveBuilder1;( f  d# l% O9 u* Y1 k' c
    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);3 a+ p, \( v3 g% U% Z! S7 S4 q

9 E1 u( p* T4 F' R    Point3d origin1(0.0, 0.0, 0.0);
6 H* M! s9 Q( X3 _+ U    Vector3d normal1(0.0, 0.0, 1.0);
5 M8 s6 L% B' u    Plane *plane1;$ q) r6 u, b8 W$ K3 B, T  s
    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);' ^1 n3 a8 h$ \4 r5 K

$ M9 _& Q& f- p* e& ^0 f, T    divideCurveBuilder1->SetBoundingPlane(plane1);$ f: l. t) C8 l9 r8 n
9 e2 q, m4 S7 s2 G8 u8 y
    Section *section1;( C) e* P  a) u7 z: @1 {& p, F) r6 o# o
    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
  a. u' j% _- i, }2 m+ H+ }
- T0 n) L% z# F; Z8 ?/ h    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
5 o" H* ~3 M8 h    Expression *expression1;" U# H9 O' C; A" \) k
    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
) b4 K8 _. M! q" `; P7 f7 i# I% |9 A, e
    Section *section2;9 w) D6 \! y7 k0 i8 U
    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
7 O( s3 w# Q3 g7 M
  ]8 Q# s* S7 {: W: O4 h! i2 Y  z% j    Expression *expression2;+ x6 t( I: [( v5 s
    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);/ I6 w/ W' ?8 i/ l( b1 J4 y
8 H3 [# a  L6 p# Q* N3 d
    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);6 o& S$ L* X0 G" r$ _, q

3 q0 F, t: G- }    divideCurveBuilder1->SetEqualParameterSegments(5);
; m: i* T  G8 }" v! P# p- m3 p
" H9 T4 n( f3 Q* n: z0 Q    divideCurveBuilder1->SetEqualArcLengthSegments(5);9 B8 z, F! [+ h% G0 r: t, t" @
' m: K! f2 k8 T! m( W: i) o8 u6 Y
    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));, V  s5 ?) H* Q. y) ~
1 |; r( @4 o& |3 K
    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);, @5 E$ C8 S& T$ r& t7 ^

/ z  a+ S9 \; B- N2 O% \    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));4 _( Y) M. C3 q6 T2 D+ Q4 D
    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);
1 K  \- f5 e2 z* r    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);
/ ^- m! J6 l- m" H! E, n  [7 t" Z
    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);
2 f9 B8 e* p$ h1 d* ^3 d! Z$ z7 M% H! k" o
    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));
! R* [4 J: c$ q# Q* t  {' H    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));
) v3 a; w5 t; q* O. |    Xform *nullXform(NULL);
6 h' C/ ?, }3 _4 A3 t2 [    Point *point3;2 |2 J4 R: C; b# P+ @7 @  g
    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);# x, w' e5 |4 D0 Q3 W2 ]
  v2 o! e" Q; B9 |
    divideCurveBuilder1->SetBoundingProjectPoint(point3);  w/ a! V, P  v/ d1 g5 v4 \# t- S

, z2 W# ^! Y( s# ?    Session::UndoMarkId markId2;& f& t7 q! |9 {) D& T
    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");
$ w" ^( ]) x  a% }5 |
  |* M! m0 w, n. |    NXObject *nXObject1;& C% ~. a) T7 D8 I* Y0 `* G, b
    nXObject1 = divideCurveBuilder1->Commit();: D  F/ {- k- }: K7 v

6 L; N4 I" X1 Q3 z3 J' Z/ ~2 s    std::vector<NXObject *> objects1;
/ E9 I3 B5 }4 C. E    objects1 = divideCurveBuilder1->GetCommittedObjects();
: e% w" w6 C' R3 z5 P7 A' q  G! H! A4 _. H
    theSession->DeleteUndoMark(markId2, NULL);7 m8 M* F( R9 Y' v+ y

* Q) {5 S5 E( b* b- ?4 X! \0 D    theSession->SetUndoMarkName(markId1, "Divide Curve");7 ~& Z1 J2 l; F* B* c
5 P) A" V) [; M: P
    divideCurveBuilder1->Destroy();+ a' |, \# v' ^' p

. ^, p; j* O( S, n    try5 c8 H/ j% M9 [, O
    {1 L- v8 T; K, k( O6 o
        // 表达式仍然在使用中。6 `' k5 ?; l" E* |/ g
        workPart->Expressions()->Delete(expression2);
( U# T& W, G2 v; H    }! L6 |) B  Y: l( Z, D9 `! {
    catch (const NXException &ex)
+ ^! k6 m% x: s1 G0 \    {
8 n! w6 c- J8 y+ a" e0 M      ex.AssertErrorCode(1050029);
: T& R" _1 h3 k; M8 L! v: G    }
9 q" Q4 }- [( d4 e
$ G7 c9 Q$ k$ z    section2->Destroy();  K6 t' g$ q6 h
# Y" J' v, q9 ]2 p
    try5 C1 E$ U) S" _. v
    {* C5 H3 j/ _. b1 Q# @
        // 表达式仍然在使用中。: Q, v4 \$ n/ T3 x9 J
        workPart->Expressions()->Delete(expression1);
6 Z  q: }: d% M5 q- f    }
( F1 m! d1 E6 ]  c2 A    catch (const NXException &ex)
, o. w& \9 \2 R    {
* T3 e; S4 H6 a1 V. w" Z' }      ex.AssertErrorCode(1050029);
3 F$ t5 t2 f4 r    }
2 ?! R) N& V; L2 m
2 p, G# X8 R7 ?6 r; Z' ~. D* U) S    section1->Destroy();
+ N9 t- v1 W0 ], D& f: P5 H$ a; G1 O+ e5 p& b0 C0 v, @
    plane1->DestroyPlane();
6 I6 u, ~3 r7 Q3 H2 L2 ^+ m' r5 k! e! O9 u
    int nErrs1;
4 y9 u4 K* _9 p" i8 j4 ^( E    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);% O8 h+ @) U: F) e8 ^- `
# z4 W, R" {# O
    // ----------------------------------------------
7 Y( T+ s8 L& r  U3 s# Q) \    //   Menu: Tools->Journal->Stop Recording
0 }% I# g; D4 o/ [4 b    // ----------------------------------------------
" m# L% d* g7 O, B. N9 K$ |, t}
  v( b8 i) I) m% L; R- \, D3 F5 |9 l1 I1 h# X  Z# l9 m7 g
9 b3 L" ~7 ]6 F  Y3 c( S
  P5 F6 c6 V8 p
希望大神指点# u/ k) U; p2 b9 D9 D4 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()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。, a0 T' m' ~4 i* U; h& T
+ B, M! y5 t- M8 E2 H5 d
另外一种方式就是生成的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\Desktop7 z9 ?: W5 V* n6 o* K, k( m( Z
捕获.PNG 1 ?9 @! Y1 E+ W
[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的0 ]+ _: C9 \0 C. v
. f6 b3 j, l5 Y' t" R
我用& ]9 i) n# f3 D+ G

* ~1 e8 _% L1 t
, ~7 S( x3 ~2 @[mw_shl_code=cpp,true]        Features::Feature *feat1;* G$ p" x) L2 E3 m& z  p3 X
        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]
* E. c( c" E8 l1 T) i" d1 m! i! z) \代替5 w/ C9 m/ O$ K! y2 @# Y4 E% x
[mw_shl_code=cpp,true]    NXObject *nXObject1;
2 y0 Z1 k8 z! s3 c# B6 s: i9 F; Y$ o    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]7 ?4 }3 v5 ~' I. A( `
也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??
4 G2 z' z7 O' z希望指点一下?/ q, C' q9 S4 C0 l* d8 `' V9 _
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了