PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

  [复制链接]

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

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

SimonLv 楼主

2020-4-4 23:57:29

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了
1 Y' m5 P2 J: P# ]$ |) A; q- O) R5 {$ M- r# |# U+ U! h
    std::vector<NXObject *> objects1;
$ ?4 }7 x4 n+ X. A9 a. Q    objects1 = divideCurveBuilder1->GeTCommittedObjects();# G6 S% i0 E+ q7 }
& Y/ M+ D' a& R  F1 \
2 o- m' f+ y! ]

2 e, z% e# R5 V9 P完整代码如下:
/ ^' B6 Z9 [* r9 V" W! S3 b3 a- s9 W3 m6 d7 X8 K8 X1 W* g
// NX 7.5.0.32
: L' U7 l6 Y' u// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间) Z: L) Y3 E# K
//+ s% f. z( c% z+ o2 A" a
#include <uf_defs.h>
: G4 }5 f+ ?& |! u) I#include <NXOpen/NXException.hxx>
- A, M0 M, a- ~#include <NXOpen/Session.hxx>. w: Q; i3 ?6 }2 R9 r, P& I9 N+ \
#include <NXOpen/Builder.hxx>
% s/ H  E6 X6 e1 Z#include <NXOpen/Direction.hxx>
$ F3 U; k- ], Y7 v2 W! A+ c% V/ V#include <NXOpen/Expression.hxx>( J9 u( M# H/ k: r# N. x! D
#include <NXOpen/ExpressionCollection.hxx>! Q& k4 F/ n9 ?# @* c& z
#include <NXOpen/Features_BaseFeatureCollection.hxx>0 b/ Z% ?; k  v1 H
#include <NXOpen/Features_DivideCurveBuilder.hxx>: o& X" A' l2 n# f3 k. m
#include <NXOpen/Features_FeatureCollection.hxx>! c$ m- P" A1 z7 e
#include <NXOpen/Features_PointFeature.hxx>
* a1 {' |4 J; L/ @8 h#include <NXOpen/ModelingView.hxx>1 \, @% K, Y! t
#include <NXOpen/ModelingViewCollection.hxx>  ~% w) {+ G4 a4 m' V
#include <NXOpen/NXObject.hxx>4 O& m) o$ s0 ]; [! H% @
#include <NXOpen/Part.hxx>8 u5 u' U) p1 H  P, i+ H
#include <NXOpen/PartCollection.hxx>
( X5 S* X1 M( E3 ?4 \# D#include <NXOpen/Plane.hxx>/ e4 G9 \/ Y; f7 x4 m
#include <NXOpen/PlaneCollection.hxx>
  i, W& k" S  P9 l) l8 s) H- B% ^#include <NXOpen/Point.hxx>3 F, }. y! N2 ?. ?) p
#include <NXOpen/PointCollection.hxx>: x  @! r6 n3 q
#include <NXOpen/Preferences_PartModeling.hxx>
! I2 z+ V: A% R#include <NXOpen/Preferences_PartPreferences.hxx>8 _+ G# d5 Z) h, _; A0 L1 E
#include <NXOpen/Section.hxx>1 B$ Z; i# E, l: w! P! Z
#include <NXOpen/SectionCollection.hxx>
1 O) l( \' p9 g5 o8 e, H#include <NXOpen/SelectCurve.hxx>8 \( Q6 ]% G. o, _
#include <NXOpen/SelectObject.hxx>
2 F4 e2 y) [/ Z1 L) n$ y#include <NXOpen/SelectPointList.hxx>& t1 S$ s$ b/ |6 M4 H
#include <NXOpen/Session.hxx>6 i9 S$ h4 d* z! F& n
#include <NXOpen/Spline.hxx>0 ]: P5 p8 G6 c3 g3 `% A" h$ r6 f
#include <NXOpen/SplineCollection.hxx>
3 V8 o4 N/ c) O  V#include <NXOpen/TaggedObject.hxx>$ x; ]$ \! A( {# g$ ~4 D" l, h
#include <NXOpen/Unit.hxx>
9 b/ R" o+ J! O' u/ Y1 Z" R#include <NXOpen/UnitCollection.hxx>
9 I1 h% p' w# C; f5 U  E#include <NXOpen/Update.hxx>
4 w" ?4 p! e; Musing namespace NXOpen;6 x% n& U$ t$ K# G+ o" p, K

0 Y. h% X: `8 k+ N, gextern "C" DllExport int ufusr_ask_unload()
8 n9 J  y% Q; y$ ?. g{
& C/ b9 x3 T( ^' F0 q" T    return (int)Session::LibraryUnloadOptionImmediately;
( _5 s9 _, r+ Q# Q( M# d}
3 E; u, V# |; _% y2 o# k/ l' c+ }2 E$ }3 P7 s5 r1 O9 f( J
extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)
" O' {+ y4 s% t1 z. L1 o' i{
0 \! T( ]0 C6 Y7 g) A7 H8 L    Session *theSession = Session::GetSession();. H/ }4 F; r2 i+ i* @$ L# U/ `. D
    Part *workPart(theSession->Parts()->Work());2 d9 H7 L: p: V& x: d7 c; Y, M
    Part *displayPart(theSession->Parts()->Display());8 Q9 K. Z+ p; V/ Z  e) F* {) y
    // ----------------------------------------------
# I' T. R6 B& b+ P1 U& ~: }    //   Menu: Edit->Curve->Divide...
% I. x1 q9 J3 c    // ----------------------------------------------% G+ U# e5 a$ _/ F) Q
    Session::UndoMarkId markId1;# j& L4 G! \) o1 q& w- d
    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");
$ T6 o4 n7 W; ^3 S; D" H3 V5 s# ^  B
    Features::Feature *nullFeatures_Feature(NULL);5 f/ d, w4 e' N$ E0 M8 P0 |
# y8 Q3 \( o$ D1 _/ x* B
    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )
8 \. R2 L# s0 N6 h    {4 V# |5 S& B& G( L2 d- g/ v8 L7 g
        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");3 s3 z: H% J0 ^: ?9 n
    }- q7 V6 H  i; v. }, Z4 [

6 y9 `; \9 \1 G- z    Features::DivideCurveBuilder *divideCurveBuilder1;) `& ^" n( a  w9 X8 i
    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);
2 h, L/ S+ M. F- Y  B& N1 S6 J& x0 i8 u; C% q5 o% K% F- ~" K
    Point3d origin1(0.0, 0.0, 0.0);* _' X2 ?" u% v- F7 L0 ~( d+ t
    Vector3d normal1(0.0, 0.0, 1.0);
9 m% R1 O7 y/ P5 w    Plane *plane1;
2 R, B( ?1 F2 F& H    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);4 Y9 _5 D& s! `8 _" a2 b) Q

* B; U2 i  @& N2 O! O8 A8 L6 T    divideCurveBuilder1->SetBoundingPlane(plane1);# c: \4 ^: S2 S+ t! f8 t6 D
# m$ t% u( Q3 [1 K, s+ k
    Section *section1;3 k# Q- a; x7 M% `
    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
9 k) v" Y- E6 [2 t5 B
  _0 L5 W- g) h    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
- b1 Y, ^9 ^" o    Expression *expression1;% |9 M4 ]2 b! u8 P4 a( }
    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);# H+ P+ m4 p; l3 h
; H7 {& j# K! @- ?! U7 A* }9 F
    Section *section2;( `. y0 w1 B6 W
    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
2 N* W) i+ T/ {8 l/ ]* \8 m+ m! f# V4 R9 U7 E# \, c, @7 c+ W1 j
    Expression *expression2;
6 f# h( s4 M1 i) W' X    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);& j+ l$ n* H$ A& D  o# e+ e( B
" K. Q$ e7 s. S/ I0 U' b
    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);4 _$ ?$ [. W" w  @( g
, z! ?# {/ H' L! s6 Z) q
    divideCurveBuilder1->SetEqualParameterSegments(5);+ \7 Z) y+ P, z4 k! H
6 {9 \/ Y- \, \( q/ d
    divideCurveBuilder1->SetEqualArcLengthSegments(5);
. A$ I. ]) Q! v1 e& ?
9 l/ z$ n# X& n4 j4 m, M    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));
' @# i" h: n/ Y' N1 {+ P. M8 L7 o/ \, z, m5 t8 j$ e7 c
    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);
, b2 Z" ~2 V. o
# P" }9 S& N5 p4 ^    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));
; `  C& c" y: o% I, o+ j& X* {    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);
$ f/ l/ [1 v. V* C* O) ^2 f    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);
3 s% h  c' C) d: a1 p5 ?, x( Z" O  _9 N" C7 \
    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);0 |& g* u8 v$ Z/ F' J* |
9 }$ n0 S  i' K) C
    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));3 \: S2 _, ~- v; b/ [& N
    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));
! W: S- Q/ a7 z! d+ `3 ^0 a) a; ^    Xform *nullXform(NULL);
, a1 _" J, g- A& d$ p    Point *point3;' e; ]9 `2 d) B4 Z2 u
    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);
6 t5 P/ t. a* {0 t6 {; p3 L. u9 q8 y' }1 T; h# w
    divideCurveBuilder1->SetBoundingProjectPoint(point3);" R3 g& ^5 ~3 V* M* H/ ?
) X! i& `4 M0 k; }- ^( F
    Session::UndoMarkId markId2;
; r9 v. b" S4 A; P' \6 o% e    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");- r! d' I6 Y8 Z2 i) v
* M- e+ t7 Y6 r- j) ~1 x
    NXObject *nXObject1;/ k0 h+ A) H$ ?6 k$ H
    nXObject1 = divideCurveBuilder1->Commit();
1 r% F- s; ^6 B$ M
( Y" _( E* a. i8 F3 q+ V# Z    std::vector<NXObject *> objects1;
4 c$ y+ I! _) r' T& g    objects1 = divideCurveBuilder1->GetCommittedObjects();
! g0 ^' s9 L- a& F# S2 P  J* t! f6 h$ o
' K! s9 R8 D6 g    theSession->DeleteUndoMark(markId2, NULL);
+ A2 {" e: W2 s6 G
6 e( Y, o: w1 {/ h4 v9 S    theSession->SetUndoMarkName(markId1, "Divide Curve");
0 z5 ^$ ?' f+ ]/ a  e
9 F; ^: v; ]7 `+ |( Y5 x' H* W    divideCurveBuilder1->Destroy();
  e7 N% e. o9 ?6 k( F, |
+ N; |# p5 C+ R- V$ z    try
& x* U6 ?: j; S0 @$ _    {
' i9 ?4 I. W% r+ t9 P! Q- }        // 表达式仍然在使用中。2 R* C/ t, i+ a* f
        workPart->Expressions()->Delete(expression2);5 j* e! P: g% ~7 c( q+ z
    }
5 S: a5 z5 j% W    catch (const NXException &ex)
# \* F" Y& k! K- I0 D7 Y: N    {2 z; ]  ^; p0 r9 q" q; T
      ex.AssertErrorCode(1050029);6 A  \4 \; }: `2 @
    }
- ~6 s) H0 |2 T" ]8 H& P- S/ w8 e
7 T, j" W! G6 u" c. A    section2->Destroy();
; c- m* t% M( d6 _6 p# c5 l3 @& a* O" h) I. y
    try
( A; f1 W# |! Z  _    {  x  y) T9 n  R, F
        // 表达式仍然在使用中。9 ?# V; g6 g% M6 e- o3 }0 Z
        workPart->Expressions()->Delete(expression1);
( i) I. \5 t5 N    }
9 B2 K: i# F6 k2 w, _4 Q6 }4 S    catch (const NXException &ex)
8 q2 s) X  T8 L# w4 O; e/ X    {
5 P, Q- E% {1 K8 y      ex.AssertErrorCode(1050029);
) B1 z% l0 X0 `9 I    }# W  \# B$ h$ T( f

, S/ m# N" x( [$ ~9 P( |    section1->Destroy();7 q: C, b  ^: q) ~! v3 Y9 P

6 Q7 ]4 P+ o2 z: q6 }& \+ Y6 J    plane1->DestroyPlane();6 P: ]3 R# Y0 U- e1 |

4 J! G, e8 i3 P* u: b    int nErrs1;
8 ^2 _0 S. T* g& R& b# B    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);
0 L7 G7 T$ Y6 |) B; R! I& u( _& l, j" ?( F( ]. N) K! S5 B
    // ----------------------------------------------+ W& n2 P7 T  J/ Z/ }/ k$ F9 b
    //   Menu: Tools->Journal->Stop Recording0 M% N, S* v# H& r! s
    // ----------------------------------------------
' Q: G( r( y( `! g0 P. e& m}$ |* R- w9 |+ N* `
9 K3 n6 _1 ]5 {

  C& _# g* q  i1 Y4 r2 k( B' }. a) [0 r# s4 C4 x! R
希望大神指点% R* l1 m; J( ~& X7 u* v
上海点团信息科技有限公司,承接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()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。
3 L4 y+ ]) A( q( d9 _! r
/ _. m9 _' t# P5 o; n: a: Q4 p另外一种方式就是生成的feature,通过feature去找对应的子对象
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

SimonLv 发表于 2020-4-5 10:47:20

SimonLv 板凳

2020-4-5 10:47:20

C:\Users\99112\Desktop: s, \& X  S, m& `4 D
捕获.PNG
: Z9 _6 [9 o5 e% |. D[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的7 I) u- `  {& b8 u. p/ @. ]

  p4 l  c, i1 e我用+ L2 u3 p; E3 t

' y+ V; a- G0 ~6 h% T4 H
5 ]* q9 \. O7 _* A[mw_shl_code=cpp,true]        Features::Feature *feat1;
2 r3 |! E/ e6 ~) R2 K        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]9 h1 ?* x5 t, J. V" y2 }. ~) a0 ^
代替6 P! b% {8 ~, z' q3 j, ?9 M* W/ t
[mw_shl_code=cpp,true]    NXObject *nXObject1;
- q3 |5 u7 f% C+ \8 U" h    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]# \' s  E8 |/ y9 u! F
也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??5 R) A& \) p8 n9 ?. N" J. w7 s
希望指点一下?
5 Y0 v" @1 J; k, d
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了