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

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

  [复制链接]

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

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

SimonLv 楼主

2020-4-4 23:57:29

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了" [  r; o% e" ?/ G

4 A! l$ v- X7 E, [* O  }    std::vector<NXObject *> objects1;
( _( @/ s- r8 J& R    objects1 = divideCurveBuilder1->GeTCommittedObjects();; ^: m  f( b' P; Z7 T

2 G  \$ x  o; J; w9 D* D, x/ N. |
5 h0 v8 c4 ]5 I: ?/ T" k/ b
完整代码如下:# U. s& p, _1 H4 f- i/ j
2 ?" o2 U. c( a6 X" n6 O9 {
// NX 7.5.0.32( p! \7 u* b; k8 m
// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间
; ~8 e/ c3 B$ [$ _+ s0 j//! O% ]$ p0 _9 o/ d: t/ O/ R
#include <uf_defs.h>
! S3 t0 x- K: {0 G#include <NXOpen/NXException.hxx>
$ r4 d; @* u! q0 o& x8 P/ d: {#include <NXOpen/Session.hxx>. N  {, h) T! R4 }% N0 T
#include <NXOpen/Builder.hxx>
! t6 D: K! i. H+ P4 @* a#include <NXOpen/Direction.hxx>, Z4 y8 ^; y1 P% L  R
#include <NXOpen/Expression.hxx>+ t3 y0 l2 G! |1 B5 \
#include <NXOpen/ExpressionCollection.hxx>8 g" I# k- L- L# C' o
#include <NXOpen/Features_BaseFeatureCollection.hxx>8 \' T$ C2 h- Y' W2 t
#include <NXOpen/Features_DivideCurveBuilder.hxx>! l  j: e- i" S3 g9 o
#include <NXOpen/Features_FeatureCollection.hxx>' r7 ^0 x9 p+ w
#include <NXOpen/Features_PointFeature.hxx>( M( N) Q8 J# S! _. ^" D3 W
#include <NXOpen/ModelingView.hxx>
( }6 T4 z6 {' m" t5 }3 _& U#include <NXOpen/ModelingViewCollection.hxx>
% n1 H5 q  g* e2 O4 _$ G#include <NXOpen/NXObject.hxx>
6 ^- v" _" x0 k' I: _+ @#include <NXOpen/Part.hxx>
$ m# ~# C8 n& U  ^5 b/ |( \& @#include <NXOpen/PartCollection.hxx>9 t. I) ^* D$ v/ D
#include <NXOpen/Plane.hxx>
" ^9 B2 c  F% o( S# I#include <NXOpen/PlaneCollection.hxx>
! k2 a0 x% v$ m  L+ V) M#include <NXOpen/Point.hxx>+ E* H* }/ H! g4 |4 V5 B
#include <NXOpen/PointCollection.hxx>
& D, o  H% m  O+ ]' n#include <NXOpen/Preferences_PartModeling.hxx>
- R  ^% C  [/ q#include <NXOpen/Preferences_PartPreferences.hxx>7 ^- G# }! o# }0 I* t! W2 X
#include <NXOpen/Section.hxx>
5 y9 W) D! U, Q8 h9 y, S$ l#include <NXOpen/SectionCollection.hxx>, p% I6 V3 t2 r: f, z) K0 }
#include <NXOpen/SelectCurve.hxx>
( Y! L$ d7 R; Y! n* e# Y6 o#include <NXOpen/SelectObject.hxx>
3 q- z: N  P% M; i9 Y#include <NXOpen/SelectPointList.hxx>: E7 H$ U6 l; W
#include <NXOpen/Session.hxx>
" N) v; d/ W: n( ?3 @#include <NXOpen/Spline.hxx>
: j; |2 r8 _: x% |#include <NXOpen/SplineCollection.hxx>1 S) ~( d2 Y9 ?; G. L6 j: H
#include <NXOpen/TaggedObject.hxx>
# W5 D6 l' T! ^  U#include <NXOpen/Unit.hxx>% U  e2 g" r) M% `( x5 n$ S3 `
#include <NXOpen/UnitCollection.hxx>% r% @% n, k3 n& `" ?% z; B' Y% [
#include <NXOpen/Update.hxx>
) z0 {4 i* p9 i0 M5 G+ Wusing namespace NXOpen;3 g4 i6 v: v6 v4 u, s# `
. @4 i- q6 W# u$ M; r8 c
extern "C" DllExport int ufusr_ask_unload()& Z  W# u3 K: d  B- q
{
" y0 V+ ~: ~2 l& G    return (int)Session::LibraryUnloadOptionImmediately;
" @( _$ X1 b& _" c$ F- N* d}
3 F- X( r; @9 K9 {/ k# E9 A, l
. z( D+ L/ W3 b2 r0 @extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)* G! ~5 O' {6 M' L5 F$ a
{
, V% q) A* c: s- P% h4 ?    Session *theSession = Session::GetSession();3 W. g8 ]. P3 y) Z6 Q
    Part *workPart(theSession->Parts()->Work());4 Q7 w8 J7 S! v3 X
    Part *displayPart(theSession->Parts()->Display());* i; x8 |6 K' W( t' z. i
    // ----------------------------------------------: Q& ?/ m4 b2 J
    //   Menu: Edit->Curve->Divide...
- X. I: Q* a2 h8 T6 `7 Q# r    // ----------------------------------------------
0 r  t0 f  W2 i) S    Session::UndoMarkId markId1;
* V1 G* q& c7 X; A    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");
4 j" H) l" {3 N3 S
- C7 J3 m- `& K; Q$ A' v9 f  Z) x    Features::Feature *nullFeatures_Feature(NULL);
6 I* L4 p' w( D) @! a' D7 }, l
    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )
0 H2 i1 m- j) ?7 C    {9 z& ?; Q9 V, j% N7 P# I* F
        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");
1 O) C% e) M1 V6 l    }% Z9 _# Z! M2 u9 z" y6 S5 T- i% S/ e
% k! O4 D* i  c
    Features::DivideCurveBuilder *divideCurveBuilder1;
! M8 R; q" M6 ^' H, A! X    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);3 M$ p3 r( ]. J0 f, g4 g2 G

! ?+ x9 }# d7 k3 ^) ^* w/ h0 m. f    Point3d origin1(0.0, 0.0, 0.0);
% C7 T7 g5 h' d: {    Vector3d normal1(0.0, 0.0, 1.0);
' ?4 ^* d5 l. E; B  a/ l    Plane *plane1;
( ~; s2 }: W2 `* S2 y+ `    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);
. c  y# `. h5 H0 O; @6 I) Z: ]% z) B5 a2 O1 @7 A5 h+ O8 ~
    divideCurveBuilder1->SetBoundingPlane(plane1);
: N0 @# N4 h8 d3 U; B# t: D" H+ q% l6 a! f6 T
    Section *section1;' v* F. L  n+ ~- p# c. K' o4 {
    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);2 c6 w1 ~4 p0 D  h

8 b9 m. r% ~0 B. H; |, \' V3 o    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));3 D: s# Q' B' O) G9 g8 G: B7 w2 r
    Expression *expression1;3 s' Q/ b$ q$ E
    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);: b3 ]3 G3 l4 @6 s. D/ S
3 _7 {1 x- P: g. s- `2 z
    Section *section2;
8 V. ]& ?+ A7 I/ ~    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
" m: B* W" m9 f. I4 X
3 ]3 Q& H& H6 j" o, n- U, H3 h    Expression *expression2;' Q' c8 D, j/ c% k
    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
( ~6 }; S8 n; [4 D. t' @/ p5 m% D
4 m# k5 l* |% k( g* t' H9 H- ]    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);
7 B0 d8 m: {- h$ \! b6 V0 |3 H6 H! T* a2 `& p: k# k9 E
    divideCurveBuilder1->SetEqualParameterSegments(5);
. [# v$ {. w% A1 F4 E# A7 A; p' Y
; Z9 e  [: s% K5 x/ [    divideCurveBuilder1->SetEqualArcLengthSegments(5);  b, V- |5 i. B6 b& _, s% \

& H( s5 Q5 g" W9 G. R; O    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));. G4 F  l0 @' Q2 @
) p1 H6 H' z; t+ C
    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);
/ o% Q- O! h7 S" r+ p/ n" M7 N5 |+ u% ~' d2 J
    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));
2 m9 N9 Y3 r# M# t: a    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);
/ W7 Q7 @5 U9 _: R' }  X+ N    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);
4 ~( Z' t7 o% e% h
+ B' v8 l- G3 i" e, U3 `$ |, X1 p    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);* S* J" ~, ~1 l: y! m8 M* B0 C( r

* R9 X; F' X0 d! E$ U6 p% D3 [    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));
/ U; E9 O: d% h    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));9 W- {" }9 v  i; |7 |
    Xform *nullXform(NULL);( a/ w( {6 Z7 r* ]
    Point *point3;8 x) N- i. Z2 [/ p8 M' `2 o
    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);
0 H: D) i8 h8 k; A; g# _4 B' Q! [% {/ ?* T/ t* a$ l+ s& r9 @( o
    divideCurveBuilder1->SetBoundingProjectPoint(point3);6 x( J6 B! C9 |+ [. P2 Y

4 W# P( B. ]( L* _' K, B    Session::UndoMarkId markId2;9 ~0 r0 X! ^% Z  v) A3 |) a* L
    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");
& I3 p, @8 p! M$ f
( V- c& w5 `" l  c" M$ A+ Z    NXObject *nXObject1;
0 v! [- M4 _4 b4 N. }    nXObject1 = divideCurveBuilder1->Commit();) I1 I5 ?3 o0 H, g
/ q1 p# b) i7 r% s, S0 f: W
    std::vector<NXObject *> objects1;4 L( r+ Z2 P4 I& ?* h# H% Q
    objects1 = divideCurveBuilder1->GetCommittedObjects();, V% F, M6 ?. }! a: _) p

3 W9 ?; A+ H* z! Z3 I: P    theSession->DeleteUndoMark(markId2, NULL);2 @5 Q! W- ?) `4 a& Y

' `  m7 X" a. q2 \# h& `, R    theSession->SetUndoMarkName(markId1, "Divide Curve");
1 D  D/ o8 |2 R; ^0 s8 T  D6 n+ K" O5 t' q( y& Q( c
    divideCurveBuilder1->Destroy();% h4 V$ @5 D- Z' h$ B$ a
2 Q. b6 R' P5 z9 B
    try
9 Z/ w+ C2 ]" w/ T+ f    {
2 N' k, e& ?" y( J        // 表达式仍然在使用中。. Q. `! ~- v8 {8 F7 g& P* c
        workPart->Expressions()->Delete(expression2);
  y' g0 w% H1 V* _    }
; ~2 J3 k! H; y, D8 K    catch (const NXException &ex), p2 L8 ^7 F! V7 U
    {
3 A# X: e5 D: p: h) Q/ |      ex.AssertErrorCode(1050029);1 `7 O! w. n' V
    }* E' e, m& H- a( v1 Y0 K

9 b! T1 o0 T* A6 A6 k$ E    section2->Destroy();  A- u& _! z" s0 `* s5 y
$ o7 {* E1 G+ g/ Z; D
    try  f  \' A! ?  M/ F: x  v1 K
    {0 a5 S- x/ ]/ h6 o6 r0 V
        // 表达式仍然在使用中。6 h% ~& t3 g: u5 v
        workPart->Expressions()->Delete(expression1);3 A% z$ w! s) Z+ W8 T7 G
    }# ?8 [# M5 h  @! {  b
    catch (const NXException &ex)9 _4 S% W5 ~5 R
    {
+ o( B/ c5 ^" V+ I* }      ex.AssertErrorCode(1050029);
. X8 Q. M& S4 s4 A; c- N) [    }
/ C- b/ o$ t; J, g4 v/ i! W2 U. F4 J1 B+ [6 z9 Y5 p+ X
    section1->Destroy();& y% q- Y7 \, ?: k- r

" X7 g3 g3 Q" }0 T2 k    plane1->DestroyPlane();7 T/ T% Z' b( i9 X) U% l6 B% J5 p  }

8 ?) U$ f  Y: y1 \1 j    int nErrs1;
/ o5 ?7 U: G6 E: @, @/ q    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);
) Y; V$ q. L3 _+ j( }% ~( a2 a! ?- r2 L
    // ----------------------------------------------6 T2 Q7 W$ p7 l2 B* N& ^3 P
    //   Menu: Tools->Journal->Stop Recording+ S4 s7 g: }7 I7 D
    // ----------------------------------------------1 K7 q& f* D$ r2 F
}
. I# C$ M$ S6 C' Q* `' g! Z6 k  q8 c3 P8 b. K
: Z2 R7 g1 Z6 ]7 U! F: D

4 b$ a% w) \. b& T  E希望大神指点  C& m! T* Q) D! R6 d% p7 _
上海点团信息科技有限公司,承接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()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。- M4 p$ ~& b9 \1 K
7 k+ c- Y# c4 `& K+ Q" C$ e
另外一种方式就是生成的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* S4 ~9 d  ]# d0 Z( c! c
捕获.PNG 1 {0 B3 K! _7 h8 [: z
[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的, i/ \# O! O( ^

7 f$ A9 D8 P6 W5 J. }我用6 m* f: ~: |4 s

1 b  y: F( j# U; V1 [$ X
: Y4 W2 h$ o( a2 S8 j[mw_shl_code=cpp,true]        Features::Feature *feat1;
/ r1 t5 x6 K# E: W        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]
9 i" j# H( k4 \  H代替
" t9 P6 P* K: k# h- S[mw_shl_code=cpp,true]    NXObject *nXObject1;
. r! o% e  f  Y9 X+ ?( V2 R* a0 A    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]" Q. H* l6 l" m6 l. b
也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??
/ }) ^0 a) l* S# M) ]9 [5 H% F希望指点一下?
# P; t8 x2 k# [1 I: v" i2 t" k
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了