PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

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

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

  [复制链接]

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

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

SimonLv 楼主

2020-4-4 23:57:29

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了* z6 {1 P. h4 g3 H& ~  x
" e' o" M' |% N& F7 a
    std::vector<NXObject *> objects1;0 K2 ]" ~* ]6 f9 X% h
    objects1 = divideCurveBuilder1->GeTCommittedObjects();
& L1 f6 [' n* ~" l: A) e1 ^3 F6 y: j7 H; h8 s+ f

. S4 H) E5 N' P9 F" H  N  y6 \# H1 s3 ?7 N  B% |
完整代码如下:
0 l  S; w, y5 Z7 ]
' Q' |9 K0 {+ t  L: a5 Y9 v// NX 7.5.0.32" d8 V! x9 {2 F* B4 T
// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间, b0 q: s! ^& B0 I5 O( l
//
7 h" P. u, c- f; Q5 e9 d#include <uf_defs.h># g1 S! l- W$ Y  L! A
#include <NXOpen/NXException.hxx>
1 q# o7 p* V1 \( R5 `#include <NXOpen/Session.hxx>
3 x; U! z' }# _8 S5 Z#include <NXOpen/Builder.hxx>
  h- U$ |3 [! M2 C* ]  ]9 h. X#include <NXOpen/Direction.hxx>0 ~7 R% e; a4 V0 B* t
#include <NXOpen/Expression.hxx>4 k+ T9 d8 b( W" L$ f' x
#include <NXOpen/ExpressionCollection.hxx>5 @, M2 M' E- k+ r( Z
#include <NXOpen/Features_BaseFeatureCollection.hxx>
0 y1 r5 p) L1 y#include <NXOpen/Features_DivideCurveBuilder.hxx>
" U+ A" E3 C( ^8 M) r2 X#include <NXOpen/Features_FeatureCollection.hxx>
& q0 ~9 I5 w2 B: \' _: L#include <NXOpen/Features_PointFeature.hxx>
! N' ]; Y( u& E+ \- ]; i- v" j#include <NXOpen/ModelingView.hxx>$ Z  Z9 }# F& w8 X0 s7 f& d
#include <NXOpen/ModelingViewCollection.hxx>
+ ]2 }/ @2 L8 k( s+ B1 t) a#include <NXOpen/NXObject.hxx>7 u7 u0 B: J) a6 A* F% S+ |, @
#include <NXOpen/Part.hxx>6 l: ?  e/ F2 d+ v
#include <NXOpen/PartCollection.hxx>
& V2 T# }% e+ T! z: U% i#include <NXOpen/Plane.hxx>9 K7 ~; K% R- N6 Q% y
#include <NXOpen/PlaneCollection.hxx>+ M+ k- u  B9 w
#include <NXOpen/Point.hxx>0 g" A/ M" j* y& L* a+ X
#include <NXOpen/PointCollection.hxx>/ G4 k8 H& c9 g: \7 s$ q
#include <NXOpen/Preferences_PartModeling.hxx>7 {) ]" |9 Y$ K
#include <NXOpen/Preferences_PartPreferences.hxx>
- f" q3 C# `9 Q* x7 W# M) i#include <NXOpen/Section.hxx>
5 @! t. _% ?) J* M% t#include <NXOpen/SectionCollection.hxx># v; S! h( F0 m% t3 T
#include <NXOpen/SelectCurve.hxx>
* d* }1 y0 H0 F4 f; I#include <NXOpen/SelectObject.hxx>
- \/ \5 y& V4 ]) t/ Y# p) h#include <NXOpen/SelectPointList.hxx>
. N  v5 ]8 y) p. r#include <NXOpen/Session.hxx>
4 m! \2 T2 P: {3 U8 ~9 O. d; U#include <NXOpen/Spline.hxx>: i7 }0 S' R* C, ^8 d6 |
#include <NXOpen/SplineCollection.hxx>$ C  v0 f6 H4 {2 m8 A
#include <NXOpen/TaggedObject.hxx>5 x$ \' t! {" z5 ?& ?5 n; S1 j. O
#include <NXOpen/Unit.hxx>
' Q9 J" a! p: D* d( w4 O# E9 w% Y#include <NXOpen/UnitCollection.hxx>
4 U3 W1 v1 [4 k8 W$ q# _$ [#include <NXOpen/Update.hxx>9 A+ `' h8 r; a+ d) v
using namespace NXOpen;
& f3 @8 c, M( i. g8 g; \. Z6 }2 ^( |9 `
extern "C" DllExport int ufusr_ask_unload()4 E# n2 X' y: n2 W
{+ I; K" Y4 j3 s: K1 W- s
    return (int)Session::LibraryUnloadOptionImmediately;
+ Z9 H6 H8 l7 K3 C7 Q) W% P}
0 v& `  }0 s4 V; @$ B9 i5 |- \9 `' {/ ?6 p
extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)
: u9 x1 O6 W% H+ Z5 g{( S' T* }$ a1 L2 C" N
    Session *theSession = Session::GetSession();
, n6 ?6 F+ A& Z- f' U% e5 ^    Part *workPart(theSession->Parts()->Work());
3 e0 _6 C% A( ]: ^$ L" A5 M# W& d    Part *displayPart(theSession->Parts()->Display());
8 n) q! ^( y* ^6 L    // ----------------------------------------------+ W, |7 c3 D- P" t3 [
    //   Menu: Edit->Curve->Divide...7 E& Y* L4 Q; H" ^( ]/ ^
    // ----------------------------------------------. q' u! e6 D% K, h
    Session::UndoMarkId markId1;
# v- D$ v& J3 d2 ~4 ?" d    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");- _8 ?+ e% A0 B7 g8 X' [* \
* S3 z* z( g! y! d/ D) Q$ O5 w
    Features::Feature *nullFeatures_Feature(NULL);: t/ R8 r( W2 r4 x, _* z

6 P9 o$ D# E: S: n1 [- p' {7 `, [    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() )/ T/ ^& Z5 W! b+ v: {+ i8 `
    {! d) D( ^+ E$ o/ V. O3 @$ ~: t2 ]
        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");
$ r% A) M7 d0 u8 r+ d) T! f* Y    }
$ I5 T1 |6 F# F  X& N5 Q% o, b5 ]: M
    Features::DivideCurveBuilder *divideCurveBuilder1;
8 a: e0 B9 x0 g, k    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);5 n' [0 @: b+ d# w" J& q
5 [. L. ~2 Z# j8 E) v+ U1 s
    Point3d origin1(0.0, 0.0, 0.0);
/ Y' ]2 j2 ]3 f9 E. @    Vector3d normal1(0.0, 0.0, 1.0);3 b" K; n) O' A: t
    Plane *plane1;
& U; `1 _; Y- X2 {9 ]% Z" f* S    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);
9 T1 f: w6 A, N2 m6 }* O3 X, r
! d8 B' p  {+ ]* a0 H5 C6 `    divideCurveBuilder1->SetBoundingPlane(plane1);
" E' d% W2 w* J
; x. m/ i! b0 j( i% P5 _* W    Section *section1;
. d$ {9 B! z6 I8 N    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
  j% e0 z( J3 y1 h% K7 o1 l, n( Y( d- c4 m
    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
1 o' _6 ]  c  @( [3 A2 i    Expression *expression1;
8 b6 m7 U: n: C7 B0 [- B    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);8 p  W  O. C5 w- Z, }0 R3 r
: i$ u  A4 M7 e' {5 X! `+ U! s
    Section *section2;
8 {2 C' i2 R: X$ v3 c2 m4 G    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
; E$ Z* d' l" [1 u; |* B
1 \3 S  F( a7 r. z% K    Expression *expression2;
1 o) N  j6 c6 f2 T' z; I; m2 f    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
0 r, i" S% |( h* @" }: a6 Y; v3 r- y( ?# l+ b0 M
    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);1 @0 ]) ^. }# l$ M3 L/ Y

! T# R4 N2 B/ `4 X$ R* n: k2 ^    divideCurveBuilder1->SetEqualParameterSegments(5);& g" D3 G* I% P8 J

$ |6 P4 h+ Z6 e* A3 c" R    divideCurveBuilder1->SetEqualArcLengthSegments(5);
' c6 f8 l. L" z- P6 z
" B. N/ r9 }. E* d8 E    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));
0 Z% L- E8 w5 ]5 V( V) y
* B. R! f. A7 w, f) S) {+ x    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);
) r% R& U& Z7 h2 N  y3 X+ l! d3 o6 V% {$ w8 z7 i
    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));( H1 E5 P3 I+ m7 U) s" M6 k
    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);
5 M3 u1 P# C6 ?( X    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);- W' ?9 d* T1 b7 Z
8 k5 A) g4 Q* d; c% u: f
    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);1 p2 p/ T( ?& E: B2 C

, M6 B" J  O0 K9 a8 c" {6 \/ M    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));0 h; U" q; z* E4 j6 R& |
    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));
  j- m+ o/ @+ n    Xform *nullXform(NULL);% P; o/ }# \* p9 e( V7 n, {5 p
    Point *point3;8 ]9 \$ x! J( L8 D- m
    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);5 j. e3 Z, r! ^: w& H$ P! c
* }2 T8 x1 n2 [9 {# L( J
    divideCurveBuilder1->SetBoundingProjectPoint(point3);6 {. y+ n( `4 }  F5 _
; Q! @! k! P; s
    Session::UndoMarkId markId2;
/ V6 ?# Q9 N5 x# C# [    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");
  J- A, U  N; O
! \$ r/ A" J5 A  `8 S    NXObject *nXObject1;
, k4 W. N2 C! K0 c3 E7 s* C    nXObject1 = divideCurveBuilder1->Commit();; l# w7 u, _7 a
; M) r5 \3 Z1 {/ ]* ^- P& H; l$ b
    std::vector<NXObject *> objects1;/ S4 v9 G+ |5 Z+ i* |( C
    objects1 = divideCurveBuilder1->GetCommittedObjects();+ d4 q4 V  E+ A

: J% m* X& k3 b- i& e' R% ?    theSession->DeleteUndoMark(markId2, NULL);' }# i( g; S. |& D* j7 a+ U0 W
. o; V9 ~: }" E2 C9 P  V- I+ f6 H
    theSession->SetUndoMarkName(markId1, "Divide Curve");
  w; G* N, J1 C0 Q+ \% T2 D, c6 b
6 K, g8 l% C; B) T2 P, R    divideCurveBuilder1->Destroy();
. |& I3 C( F* j! J
) z( `+ X9 `" H( Q3 ~6 |    try
- f7 S% i  j2 M6 z# B    {
1 j8 ^% c9 @  y5 M  o1 t' o2 q        // 表达式仍然在使用中。
7 ^4 ?; ], `; D9 d        workPart->Expressions()->Delete(expression2);
% N) W+ V+ F, v4 S    }/ m* d: }9 b* [3 c* \& t
    catch (const NXException &ex)- `# L6 D& K* L6 |: j' q5 }
    {6 E. |0 A0 _9 L; j+ s! m
      ex.AssertErrorCode(1050029);+ W; Z, ^5 H0 z5 G5 t2 z
    }) m/ }& S3 u9 u. Y4 j0 O  n

8 Q* E) d7 C" B# J) @4 u    section2->Destroy();! T+ _+ M8 B- k$ C

6 c1 b! z  @- K- {- g3 Q    try
5 [* K+ T- q; a1 q$ N# P6 }    {1 w6 G- Y6 v6 M/ F
        // 表达式仍然在使用中。* I; Z! `& h! m' l( K( R
        workPart->Expressions()->Delete(expression1);
) [0 k0 g- H  M6 R. m- W* B    }
+ ], J" E0 N3 p. N* I' j    catch (const NXException &ex)
: c3 L$ K1 Y  h2 m; m: v    {
4 G  X/ |2 U! F) ^      ex.AssertErrorCode(1050029);
: C& \$ {* q- h* p( _    }3 o) \* M  v7 ~7 p  G$ ^' i/ l

2 {  O! Z; r9 e/ y, k: z5 v    section1->Destroy();
; C. o3 C4 U6 w+ [, `; f3 V8 `
5 c7 b- E" |: D" y+ G9 M$ r1 f. O    plane1->DestroyPlane();
9 E" m5 h4 _: T+ K
! ]' M' i. F1 J# N- u( n9 k1 y9 g9 {    int nErrs1;' Y: A7 m: W0 y9 Z: M9 f/ K- L; y+ h
    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);
* h! Q8 z* }- ?+ r2 X' I5 O2 W6 k
# I- r& Y0 C2 v' I5 t8 X    // ----------------------------------------------
, i4 \+ r9 G8 A# S    //   Menu: Tools->Journal->Stop Recording0 U" H7 Q6 f1 r$ z; h* {3 n9 x
    // ----------------------------------------------
. k( K. s, V. ?  X6 j; y4 c}4 A* L1 i6 Y/ Y
5 @! F" Z1 |5 w% O
- g% E) H" H2 K+ N5 e
* |* _. N$ c6 i4 Y! l2 I# c: S6 f
希望大神指点
4 M( C0 _' Q& V. M6 h& z* {% |- e
上海点团信息科技有限公司,承接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()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。+ g( Z* a4 y6 ]' F" H4 q
+ O) K! i' L/ ?0 g7 l
另外一种方式就是生成的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
9 C/ S" L4 z" j# B# B 捕获.PNG + ?3 z+ ?, W0 S$ i
[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的$ o0 T" a! r' J' f" ~) ~

6 n( O- f8 R" n+ `& J' @我用
& h# `# F; C1 r+ E6 {- ^4 u" l+ P& [8 C5 a+ w. [! g  D- ]
: {# U; ~: J) W7 t1 R8 t& R. o
[mw_shl_code=cpp,true]        Features::Feature *feat1;
- p4 x) c* f2 x" O( p7 k8 b- l        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]
, I+ ?& S1 J; r代替! P0 b; Q% ^$ I
[mw_shl_code=cpp,true]    NXObject *nXObject1;
$ H3 I4 D" R$ H+ P# F# @    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]
: _  o# ]3 ~6 \! k! A& Z也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??7 P  l( u) W" R& a9 z5 t2 n
希望指点一下?6 G4 J4 \% [( Y; I4 R5 v
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了