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 1239 2

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

SimonLv 楼主

2020-4-4 23:57:29

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了2 I, _/ v5 r' l4 V1 G$ V

/ t* g9 k/ Q$ _2 k4 A$ D3 R    std::vector<NXObject *> objects1;
9 w0 U0 \! `4 ^( M+ \, v    objects1 = divideCurveBuilder1->GeTCommittedObjects();
& ^; {" R/ s' K/ w1 Z4 J
, t. S5 s9 S  [3 o, ^
" n5 }3 o1 X4 n* e/ O( ?, T
: C7 x, D/ E- s3 E! A* T+ @' }完整代码如下:
+ {% y/ N2 k4 F; F$ M, F
" T+ o9 t- ]' b0 ]4 K# z// NX 7.5.0.32
  A3 R: [) W6 u  s& M) a# f// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间5 T; J1 m0 s( ]2 U: A
//4 b% t9 I3 q0 u1 u
#include <uf_defs.h>
% z9 G: j/ \/ ^( H  j' v# K#include <NXOpen/NXException.hxx>0 e4 ?, {& j) s6 L& d6 M! Q: R' Y
#include <NXOpen/Session.hxx>2 V' f8 p9 |5 O0 _* r- W* \
#include <NXOpen/Builder.hxx>
) M8 ^: e8 n4 n- W# U  b+ h#include <NXOpen/Direction.hxx>
6 f$ I; f+ I! M#include <NXOpen/Expression.hxx>3 |+ U0 ?! T8 Z2 T2 ]) e" v) a# E( J
#include <NXOpen/ExpressionCollection.hxx>$ e8 i, l' V1 j9 R; ], g
#include <NXOpen/Features_BaseFeatureCollection.hxx>
! f! g2 ~/ q  r$ g#include <NXOpen/Features_DivideCurveBuilder.hxx>
6 L* L) E# E, w( X9 ^' K#include <NXOpen/Features_FeatureCollection.hxx>/ s; h; M8 y3 C; `  p0 s& \, V
#include <NXOpen/Features_PointFeature.hxx>
4 v' u: m; D+ m, k#include <NXOpen/ModelingView.hxx>
2 R8 W/ b. ~; f6 J; y! e8 a( e#include <NXOpen/ModelingViewCollection.hxx>
8 o6 K! O) v7 _#include <NXOpen/NXObject.hxx>% F7 i; J+ |- f: O! e$ y: G
#include <NXOpen/Part.hxx>
- `$ T7 A3 F- b#include <NXOpen/PartCollection.hxx>
* u; Z8 l: T! K! G' |$ h#include <NXOpen/Plane.hxx>
+ w4 h( B3 f$ i5 F* h& u#include <NXOpen/PlaneCollection.hxx>" X* o' N; p! G$ O7 b5 |
#include <NXOpen/Point.hxx>
* v1 C& Z, N9 c#include <NXOpen/PointCollection.hxx>
9 W" i. f( F# L+ |" x#include <NXOpen/Preferences_PartModeling.hxx>! [9 m3 Y! G, G$ H  a/ y
#include <NXOpen/Preferences_PartPreferences.hxx>
9 h* ~' N( D' ~  E, G#include <NXOpen/Section.hxx>
7 i" E. Z/ W/ F. F0 C; ]3 y7 C#include <NXOpen/SectionCollection.hxx>
- e8 E' ^: B# t7 l; B, V! R8 \#include <NXOpen/SelectCurve.hxx>; g* j/ w) }; W) V7 S+ @! A  _+ \
#include <NXOpen/SelectObject.hxx>1 l% d) o* @! A8 n/ ~0 U: ]! ~
#include <NXOpen/SelectPointList.hxx>
% u2 U  a: t: O$ V; d  B& e  z4 G#include <NXOpen/Session.hxx>
  j( y5 K% Z4 l8 A  h8 [# E#include <NXOpen/Spline.hxx>
% V- K3 D4 G0 x$ I5 X#include <NXOpen/SplineCollection.hxx>
# |5 U1 Q; n) t% X% C* u* U#include <NXOpen/TaggedObject.hxx>
- i* c! g" p6 z' ^) ]. l#include <NXOpen/Unit.hxx>
# z% `4 s* _" G#include <NXOpen/UnitCollection.hxx>
/ `$ j% x1 q' y; [3 X8 i$ ]4 p' ~#include <NXOpen/Update.hxx>
- y$ k+ k' x( `7 [using namespace NXOpen;. K% o2 M3 c- }! _3 P( K% Y0 d

* x# G6 @$ K' A- Q7 Textern "C" DllExport int ufusr_ask_unload()
$ F8 M. r$ ^+ x1 q  Y{  W+ d) l" s* N& n7 X
    return (int)Session::LibraryUnloadOptionImmediately;8 L, b9 c9 ]9 K/ Q
}
  v2 d( L, I! E& Z8 |+ l1 E9 Y6 t& o1 }- M6 u; r& t! S6 R  S  H
extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)+ h7 f" ~& L/ ^" f( @
{
% _1 f% q& W' g; \    Session *theSession = Session::GetSession();# r1 i: P- x" i: d& p
    Part *workPart(theSession->Parts()->Work());
5 K! L# }# N3 |! d$ p  R0 Q/ \    Part *displayPart(theSession->Parts()->Display());2 {6 l$ ?4 W1 M* f5 f
    // ----------------------------------------------  e" Y" d& p9 Z" M
    //   Menu: Edit->Curve->Divide...
& D) X7 q* j6 b* l2 o6 c    // ----------------------------------------------
1 y2 s, }3 W1 ~' O; c5 n  ~# n+ @    Session::UndoMarkId markId1;+ [1 c7 o& I& t* C9 Y/ m: f
    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");
# N& Y! d. ?1 Z' q. C
$ i7 O+ N/ Y: g    Features::Feature *nullFeatures_Feature(NULL);  h6 H/ G" L8 v7 R& c: h

9 U( g9 v9 |8 d$ C5 F" l, i5 m    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )
- E. g* r% ~) S( Y! h1 M& M! E    {6 q2 A  P3 \/ `6 w2 O4 l$ U5 A, B
        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");5 P2 p# r0 W" A4 D
    }* q- v3 G3 P4 y

/ Q+ f& k6 s- {- T; q    Features::DivideCurveBuilder *divideCurveBuilder1;# \7 d- S5 \, m& m& h, ^  B
    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);
$ a& g; s4 L+ [3 w- n
- B, {1 O6 g8 P2 T1 T$ |) o# N! `    Point3d origin1(0.0, 0.0, 0.0);
8 M# V, Z. d  r! J. [* g2 I: r  c    Vector3d normal1(0.0, 0.0, 1.0);2 h' ]5 ?  [' G& n( X/ n
    Plane *plane1;
4 v  u/ Z2 B5 a- C# N1 v9 r& d# G    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);
' K" B2 c" C* o! k
% w. Q) s9 Y* _, p    divideCurveBuilder1->SetBoundingPlane(plane1);
3 v$ W  I4 r1 s( M
5 J$ f( E9 ^) ~9 n+ _    Section *section1;# F  W* r' P3 m
    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);* V: c0 K, u) t
2 e! ^, r& Q/ @0 @4 J/ w0 l! {
    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));! w0 \9 p+ B0 l' K1 ]6 T
    Expression *expression1;
2 F9 N# r% K) w3 U# D    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);; [# |3 n' K: A: T$ T
: d: d0 J' B, G* Q  _4 a9 `+ r( k
    Section *section2;! f+ ~0 @: J9 ]" |; u2 z6 O! |4 s
    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
) e' V  a( b- l, k6 f4 t3 f+ Z$ e  ?* b/ V
    Expression *expression2;) i3 F% c# v% P( z* U/ G4 Z
    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);1 u! u, q( x5 Z  H7 o: _2 y$ L7 X
" m# N0 J3 Q( z8 h
    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);  s1 B( N! L$ g$ ]1 v
8 h0 [7 Y+ a  U: V+ p, q
    divideCurveBuilder1->SetEqualParameterSegments(5);9 e+ s' {# B- h# }' t; J, s

! Z- q( H$ \( q% y" C2 }8 I0 R    divideCurveBuilder1->SetEqualArcLengthSegments(5);
3 T1 u9 Q- E5 K. F! B0 R' H* v; j6 N+ o( o* X- S- \
    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));
, R! W9 D! G- ^$ \% N9 b( [- O
8 G3 g  l0 `- ?& l0 _    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);
4 c! d8 e1 s/ A( D( f* A
  ]! o: H, X! N! u* X    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));' Z+ i) _: n+ {
    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);) _7 C' L+ y; j9 ]
    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);
6 [" s5 e( P& {7 ]9 C( u2 ~6 J3 o. q
    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);/ d7 Z/ }$ K0 o& b
& s6 m4 }) v% M
    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));, p  a5 T8 e: G, d
    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));
7 U/ C0 A. r/ c- M1 i8 K    Xform *nullXform(NULL);9 y6 C4 }) P" s( d9 x0 _
    Point *point3;
) P. L6 ?; g# d. ?! L    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);0 m$ d  ^  n" L0 k& U; J: @5 [- v
( q: o7 @% }( [6 w
    divideCurveBuilder1->SetBoundingProjectPoint(point3);
6 F2 c/ \+ F2 K/ j$ G+ d5 g7 X$ S% J! N  J/ b
    Session::UndoMarkId markId2;
: b5 _) {& t, U    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");% r' k( @$ Z/ E, v7 D
. i  s* G5 F1 }  ~* c; z( |
    NXObject *nXObject1;, O) u5 w$ H3 Q
    nXObject1 = divideCurveBuilder1->Commit();- I" G' m, g: L) O4 P. R

6 Q& T5 I, k, b    std::vector<NXObject *> objects1;
& V% M8 p7 }2 P( e$ o) V1 ]" m    objects1 = divideCurveBuilder1->GetCommittedObjects();
! e' p! `4 b( @" G2 g: h3 Z% x8 n$ ~: g; Y0 N' z; {1 ?& y
    theSession->DeleteUndoMark(markId2, NULL);7 j5 x5 e  ^3 f# s

5 D0 ^7 k; e1 i* D, c0 f    theSession->SetUndoMarkName(markId1, "Divide Curve");5 m$ {" C" e# n$ l0 {+ d
' u, e6 p& k% e9 X
    divideCurveBuilder1->Destroy();# p7 E6 v3 h  L8 s  J- ^0 ]

' l! K! V' b5 J7 n    try; @' \' c7 k7 r
    {
- X' W+ v( E1 M2 B        // 表达式仍然在使用中。3 N# }9 t3 n+ z
        workPart->Expressions()->Delete(expression2);1 H! {' E- x: Y
    }
, T4 z$ ]6 O, L! X* k9 R/ e* S    catch (const NXException &ex)
3 s& V9 _( N3 `/ L% E' m! w    {' w2 f* c( w6 p+ x- O! J( o
      ex.AssertErrorCode(1050029);9 X: ?. ]) o: N2 p
    }
; N. d4 ~1 B* `4 I/ h' N9 Z! b) N9 ~* g! q: }) o/ J0 C4 j  f; k4 r
    section2->Destroy();4 H) f' p3 r0 l0 I6 o

/ w2 Y5 C% i/ P, s; r    try' z5 J6 q1 q# f* u. D! L
    {; R8 g' j2 X* K: L9 ^
        // 表达式仍然在使用中。
8 M( \2 s, y. G" @% o2 M3 b; V8 P        workPart->Expressions()->Delete(expression1);; X7 K7 ^  ~" C$ I2 r
    }& u1 J6 y2 ]# b( }- [
    catch (const NXException &ex)' B# I( ~7 r) p1 q2 q
    {
( \- y+ F# ]0 P      ex.AssertErrorCode(1050029);4 t% _7 b0 v" G; o4 }2 q# K
    }+ U/ t" E, ~5 P
6 r" H2 z0 x  Y' J' p+ x
    section1->Destroy();0 E" k3 D! J0 r; C! P
" F9 u& T: x. w, r! A
    plane1->DestroyPlane();5 ?5 ~3 s3 p3 Z/ N$ r4 I0 N7 b
: U/ _) |, n7 C8 Q/ }6 b
    int nErrs1;
/ Y+ Z' ]# k, e/ v& f) K    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);, j2 n4 j' K* c2 r0 ]5 y

1 k6 s- a5 ^2 _    // ----------------------------------------------
4 ^& Y9 V% Z# q, T3 Q    //   Menu: Tools->Journal->Stop Recording6 s3 q5 ?) X6 g2 C9 N4 `
    // ----------------------------------------------$ v3 _, y( h" W% w
}
7 G0 |% d$ p9 }
) _# X5 W" @* U$ \. B( k7 L% s; w. G

1 h3 e: |. \+ z1 n& a& W2 ?希望大神指点
( ?% O1 c) e3 `, ^9 ]# l" }2 h
上海点团信息科技有限公司,承接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()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。* |1 E. i+ T7 V' _( q8 Q1 R

( V8 t6 G* B$ \3 n另外一种方式就是生成的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
: y6 L- {" u% A 捕获.PNG
6 K0 J: \6 `# L8 o+ ^[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的
4 V! `/ P5 _) M
9 X! W, z, ^# L( q% p+ d+ g' W+ I% v我用2 u+ D/ i- g- _. ~2 r: [4 b
0 q* v4 W# B( _: Y

$ X2 e8 n7 U# E[mw_shl_code=cpp,true]        Features::Feature *feat1;1 b& }1 K/ {0 u2 S9 X8 O- Y8 Z3 [2 v, C
        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]0 p: x) G- G* i. L
代替
% N7 _0 D" a8 z[mw_shl_code=cpp,true]    NXObject *nXObject1;
  @4 p: s& k3 `; r    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]% e4 W6 C  m" m" n2 S- \
也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??
. D" C; N# P& k* E% M8 o希望指点一下?
0 D& E; m; U3 N$ V; P4 V2 Y! i
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了