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

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

  [复制链接]

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

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

SimonLv 楼主

2020-4-4 23:57:29

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了8 H& [# Z4 M4 X1 W; S) ~4 B0 a
2 M& Y& m8 ~2 E; `8 `7 B; I
    std::vector<NXObject *> objects1;- l# L1 o% h$ _* E. X
    objects1 = divideCurveBuilder1->GeTCommittedObjects();
; p2 l6 D( P. h3 d" f' f* M+ J# Y5 }+ t+ J9 O# ?( P- P6 f+ ?8 j# T; a8 g

! m4 @+ g* J1 |& l/ h, S1 i0 O% y7 A5 d- V* B; o
完整代码如下:) p) O$ S9 U3 O9 ~

( R; M  h0 o( p% J// NX 7.5.0.32
% N4 r& C' N6 L; M// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间
$ F7 D& ]8 V. O, q/ X/ B, r' M//
* Z+ o; i  V" i4 B; @#include <uf_defs.h>
& F; x4 m9 T! v9 Q6 D8 q2 F0 t$ v#include <NXOpen/NXException.hxx>: h: U) I, x0 S% r+ w1 U% I: M; W
#include <NXOpen/Session.hxx>
/ R+ [7 C4 l* t, t2 @#include <NXOpen/Builder.hxx>
# u7 }) F0 ^' U#include <NXOpen/Direction.hxx>
4 |% r" J1 O# M) |9 u" N' V$ t( @#include <NXOpen/Expression.hxx>/ ^" _: Y. |; L- e6 S4 ^9 Q
#include <NXOpen/ExpressionCollection.hxx>/ b- A! K4 K$ x& T4 M
#include <NXOpen/Features_BaseFeatureCollection.hxx>
9 a) \% I2 [( x#include <NXOpen/Features_DivideCurveBuilder.hxx>7 I% _  q0 u7 q& z+ ~8 V
#include <NXOpen/Features_FeatureCollection.hxx>
" }: i0 }0 ?. i* m  ^+ X, x#include <NXOpen/Features_PointFeature.hxx>
/ N) U+ q1 D6 C, l; K* V#include <NXOpen/ModelingView.hxx>0 h% l+ F! y. m3 D/ O; d
#include <NXOpen/ModelingViewCollection.hxx>
$ w# ?- I$ l! o( l+ b/ y#include <NXOpen/NXObject.hxx>
# I, F1 X8 J5 ^9 @8 ~3 G# `#include <NXOpen/Part.hxx>+ e. f: D" q) d* W! k
#include <NXOpen/PartCollection.hxx>
5 T% Z, M- L/ M+ D, ]#include <NXOpen/Plane.hxx>9 A' W5 H& Q4 f( {3 V3 B
#include <NXOpen/PlaneCollection.hxx>" m* k' J5 l( ?5 K6 w
#include <NXOpen/Point.hxx># y0 S% u7 `, V& l
#include <NXOpen/PointCollection.hxx>( X, S* c; O3 @5 Y/ }3 P3 }/ m
#include <NXOpen/Preferences_PartModeling.hxx>8 q5 f8 Q; q( I, G4 e3 h- n( S
#include <NXOpen/Preferences_PartPreferences.hxx>
. ]  s+ g, i8 _. ]2 H; w  ~#include <NXOpen/Section.hxx>* w3 s$ m% F1 }1 s' v& r
#include <NXOpen/SectionCollection.hxx>0 O1 Y8 s. P; `7 G8 t7 h# y' U
#include <NXOpen/SelectCurve.hxx>* m* K, x% r$ c* Q" t
#include <NXOpen/SelectObject.hxx>! {" {$ E! a3 m9 l$ z8 l" p( N. m
#include <NXOpen/SelectPointList.hxx>
& ^+ m7 O  r, u8 @: M. ?& i" R# z#include <NXOpen/Session.hxx>5 e4 l- N  k% I* f" |9 w( U+ W
#include <NXOpen/Spline.hxx>
) c( O$ E. @4 l#include <NXOpen/SplineCollection.hxx>
) @5 W  R6 l! _2 ?9 D# P#include <NXOpen/TaggedObject.hxx>. \! [0 U" s0 P/ P- k
#include <NXOpen/Unit.hxx>
9 b) V" J/ q7 L4 Z" L#include <NXOpen/UnitCollection.hxx>
3 u) ?, R% ~# Z8 }; Q+ k#include <NXOpen/Update.hxx>
# j. Y9 ~! z/ |4 H. S, H$ T( h  V3 {  gusing namespace NXOpen;" W0 D: \8 e& F# {* R- g3 w* i
. A; j- j% Y& \( V7 h9 c8 e
extern "C" DllExport int ufusr_ask_unload()+ V' D& i/ F3 ~  v0 W+ }8 ^. b
{
0 H! o4 L8 c/ C    return (int)Session::LibraryUnloadOptionImmediately;& y* u$ a- e3 g) T* l
}
' T! k5 c, C3 Y  b# A0 d( }/ y8 g: _9 f- l4 E# D4 l8 b4 a( o
extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)
+ J6 H- c7 `, I# W( D9 a# S/ z9 D{* X/ a% K2 V. J
    Session *theSession = Session::GetSession();
: ^4 n$ h; J8 x2 P! s2 ^( ?    Part *workPart(theSession->Parts()->Work());
+ \3 u6 C! O" M0 t    Part *displayPart(theSession->Parts()->Display());# Q  k* h! t- w$ P& ?9 Z  z
    // ----------------------------------------------
/ h: X! b4 P* N    //   Menu: Edit->Curve->Divide...5 ~3 ~- Y* ?4 o
    // ----------------------------------------------/ }# z9 n0 R9 C& P/ K* m9 h" s
    Session::UndoMarkId markId1;% |$ \9 p' f" c7 @
    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");9 w9 K/ }6 `! A/ `

# j8 ~% I; g2 v4 \! v    Features::Feature *nullFeatures_Feature(NULL);2 ~4 u! Z: ~# V) Q0 Z9 |( a
. @6 V: V6 o1 r( ?
    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )! O4 y% I( B2 o! X$ x0 H
    {
2 c' W) }% I/ U4 Z. m' l0 F3 g. ^        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");
0 `( o6 S# n& |6 [# {6 p    }
- x* c9 h# E* u1 G& |
; ^# A  j5 x8 s    Features::DivideCurveBuilder *divideCurveBuilder1;
6 [9 r6 M& Z  w4 E  w, V' l    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);
. G# O, X5 `! s9 m( S' [0 y9 N6 t3 j4 @9 R
    Point3d origin1(0.0, 0.0, 0.0);+ o' ]# t: M$ s) e
    Vector3d normal1(0.0, 0.0, 1.0);
; |8 Z) W* G, I8 _' i    Plane *plane1;: n5 F, l* R( M1 C# _# n
    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);9 M+ |4 y4 V7 _
/ k& u$ ^8 v0 o3 y6 j2 r& k. y
    divideCurveBuilder1->SetBoundingPlane(plane1);
0 k! `* h' d( P. N9 {- y0 a
/ k+ D0 u2 o) c+ @/ J    Section *section1;9 k  y3 n* C$ G
    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);0 \+ O) _+ X- s- M0 V+ T" V
$ J( [9 \$ |8 ?- I& \* q
    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
' z4 o) S1 I8 T7 m1 f    Expression *expression1;
8 e" Y. Z: A0 Q6 d! g    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
' W2 D8 a2 R# s0 Z  \) p& m' D8 x: H# y- J0 a$ O
    Section *section2;8 H8 t5 y6 I3 D5 ]8 {: ~
    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);, G) p' y) k& a- e/ k

) j6 E& c; V+ C- f5 \2 {    Expression *expression2;& L* m, o. l! v- @+ {
    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);- T& w$ H# W, W! K0 v

9 a$ W& t6 x7 c  h1 \; g    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);
. X/ z0 q. [2 N; w) O" R: H4 v5 O$ }* G2 W' Y* N# H$ T/ E
    divideCurveBuilder1->SetEqualParameterSegments(5);$ B* r) n& ~: r) B) D5 f5 @7 O, o" q
; r2 O) B& M  _" Y9 e0 D+ P0 l
    divideCurveBuilder1->SetEqualArcLengthSegments(5);
6 z" ^) u4 s( i. [1 U. c$ K' }
6 b, F7 g9 \8 V5 ~! O. u  _    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));" L8 p5 u( z2 R  U; j* l
8 P* m# t1 r. t& {, |! q
    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);' w! U  y3 h, {( v

. R# X  f5 h( W5 p, U' x    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));' C3 S/ G( E) h0 v. g7 ]- J# n
    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);, {$ T7 ]) B$ g
    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);
2 a- i& X: _) w
& S* x; z: o: l& y    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);
1 j6 V9 [& v) m5 B$ s' s7 d$ p( C, q, E2 n
    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));
9 F% ]1 g' S( m2 X    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));' q+ X9 w/ L" {+ E% s% ~* t, v% @
    Xform *nullXform(NULL);
9 @6 n! t* _2 f% U- r, o    Point *point3;! y; W5 B7 J' Z7 D; i/ q
    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);6 ]1 \$ n+ j1 X6 [: [" i% _
, x% [, x8 [  L# w$ Q! B. Z+ }
    divideCurveBuilder1->SetBoundingProjectPoint(point3);
% S/ \5 y5 b( w- X' a% y& }* n* }: Z+ c. v# x7 [+ U. M
    Session::UndoMarkId markId2;7 s+ p/ a/ e. @4 P" X: ?: @
    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");
1 Q9 x0 ~, t( H1 O9 Q& g) l
) g, V' [3 a, [3 f: h    NXObject *nXObject1;
' }8 d; L8 Z$ @/ [& O7 g  Y! m    nXObject1 = divideCurveBuilder1->Commit();! X* U3 ?" E+ q
2 I, ?% f3 W& V/ @2 k4 I8 p% ^
    std::vector<NXObject *> objects1;
! R+ Y# D( ]) N) B5 i$ L    objects1 = divideCurveBuilder1->GetCommittedObjects();
8 ]: k0 H1 e' E1 {0 V9 h/ y' k. q" t% N7 k
    theSession->DeleteUndoMark(markId2, NULL);
3 D3 r+ @+ n/ }2 V' I3 \% l7 |
# M' `# z3 G; J+ m, o$ G    theSession->SetUndoMarkName(markId1, "Divide Curve");
3 I* h* F0 h2 p5 O3 ?7 C2 D4 [$ F, G5 ~
    divideCurveBuilder1->Destroy();
, G& c" Y+ `$ M9 U$ V" w2 p/ ^
    try) K% z" n2 X$ `( Q0 f3 `6 i. g2 [
    {( |+ K  B9 y1 k6 S) Z; }5 U) ~
        // 表达式仍然在使用中。
3 \7 n' [, B; c5 A        workPart->Expressions()->Delete(expression2);* b2 z: [* U% j5 M
    }) |8 J7 f( U; F! n; q8 D
    catch (const NXException &ex)
' _8 y' d* w8 M4 u    {
+ V; G: ~# P( l4 {3 H: s$ \( \      ex.AssertErrorCode(1050029);. |* t: ?% T/ [, H
    }0 P& s" N/ j$ H+ T
5 g" n/ ~7 C* C. A
    section2->Destroy();
, r) C  h( Z4 a- a. {% H3 n/ L2 L, P% t, E
    try- a4 c# g8 W: V7 ]3 W( i
    {+ e0 W1 k( Q" g" B7 c, m
        // 表达式仍然在使用中。+ O' Q) L2 X$ p
        workPart->Expressions()->Delete(expression1);) V+ r$ ?. w2 B! j$ L& S; W
    }$ ?# W3 [3 i$ a4 ^* B3 i
    catch (const NXException &ex)- r$ J3 L: _8 `4 R/ y; |  j
    {9 J9 t/ n7 k. ^4 Q
      ex.AssertErrorCode(1050029);
. e6 @8 T# p) v. u7 y    }' m( ]7 @( ~! c; H7 \/ G+ t

  \" E; m$ d7 A& p# J9 j2 \    section1->Destroy();" ~: o  I. x6 _+ a

( l0 m# h' a% [0 {/ v3 g& {    plane1->DestroyPlane();- m7 _" V3 C$ K. R: r

0 y3 b- e: n" R# ~7 c; O6 F5 w    int nErrs1;, j5 f( v  _% Z( o0 n5 d+ [
    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);
- O# V6 y1 r. I' ^" y& v! G5 f' X1 U% V
    // ----------------------------------------------
' z3 e" p7 B/ Z    //   Menu: Tools->Journal->Stop Recording2 v" o" }7 k/ ^- T5 m
    // ----------------------------------------------
3 b: L# g. ?/ U; g$ @0 c}- ]- a% {- w) X0 K
* K0 W! f' k. b( n% O  E' l+ t

8 ~9 t+ c: {: w: }* l/ r+ z" s
7 ^! H7 v6 r1 @! T% S希望大神指点8 t6 }( w' ?4 K0 ?% @, E" a- 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()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。  P1 B7 E2 @/ W: x
1 A, q+ E# e3 Z! w( g. ?
另外一种方式就是生成的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% X# u. p* L1 N4 p
捕获.PNG   f( h, w- [. T3 E: l6 B& q1 y7 |( X
[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的# r" J+ i& Y  @4 f5 t) T

6 k! I6 |0 p# \; L+ _3 ?我用! @) X: I3 t# }; M( F( F
; Z/ U. @& B' @, O
  s1 V3 G1 a4 s9 _" r0 N+ a& r# t
[mw_shl_code=cpp,true]        Features::Feature *feat1;
5 V/ s1 v. O5 g8 I$ U% j  [1 a: c        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code], @+ I, O( l8 Z  }. c5 q7 ^
代替* l9 Q% ~  o$ _+ s4 n
[mw_shl_code=cpp,true]    NXObject *nXObject1;
& W8 k/ S5 A% n) N( ?9 {    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]
- M" B3 d; k' f, G; Z' _$ c也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??
, ]9 f* u) J: d% k希望指点一下?2 i, Y* s: }3 s: z, a) t$ |
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了