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

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

SimonLv 楼主

2020-4-4 23:57:29

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

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

x
我想请教一下大神:为什么我用分割曲线命令,将一条线分割成两段,我怎么得到两条线段的tag,这是录制代码,每到这里程序就蹦了* _( \  x, Y5 i' @; p; m
. Z5 b$ d1 U. O5 ~0 n! L& O
    std::vector<NXObject *> objects1;; B$ u: e9 W( w% I9 T# r7 N
    objects1 = divideCurveBuilder1->GeTCommittedObjects();: O* a4 B/ b" {) O$ d# B" N

, M! P- b- v8 l0 B) F. x* Q4 o% d
$ e2 K4 o4 x5 }) G. Y2 U+ J: v( [, g+ `4 H* r5 K! W
完整代码如下:
6 k% ]% ?/ a. O1 A' q# z& k& Z& G& o: H7 P! t% t$ [5 d/ {
// NX 7.5.0.32! J. B% ]9 k3 V- e1 e* [" ?" D
// Journal created by 99112 on Sat Apr 04 23:13:53 2020 中国标准时间
3 ^6 m3 f/ `0 G+ \- i% S! G//
$ N) j, F( E- P( F7 h. |#include <uf_defs.h>* W5 Q! B. P+ F* _# K
#include <NXOpen/NXException.hxx>- j) ]5 T  v& b3 @# K" m5 }
#include <NXOpen/Session.hxx>. d0 a4 W, w0 O/ a. C
#include <NXOpen/Builder.hxx>* [2 B- y/ K, v( S' y% o
#include <NXOpen/Direction.hxx>, D6 k1 _+ a( ~. {0 T5 s( E, ~
#include <NXOpen/Expression.hxx>: w+ k) H$ Z( O4 [9 H+ G
#include <NXOpen/ExpressionCollection.hxx>
  O8 A& W( G7 q- K#include <NXOpen/Features_BaseFeatureCollection.hxx>
0 I/ r! ]3 n0 `1 \6 u) u+ k6 m: `#include <NXOpen/Features_DivideCurveBuilder.hxx>' g6 r* m" {( D- S0 j
#include <NXOpen/Features_FeatureCollection.hxx>" N* o7 u# s  b: M7 v8 U2 M- M
#include <NXOpen/Features_PointFeature.hxx>2 U! e7 W) O; r1 ]' k. f
#include <NXOpen/ModelingView.hxx>
- e) F4 u/ D; Q2 Y5 j" t! N! m8 g#include <NXOpen/ModelingViewCollection.hxx>
  H$ s, ?! G, @+ ]! d) W& E#include <NXOpen/NXObject.hxx>5 i. m- [  C" y
#include <NXOpen/Part.hxx>
3 H& x4 e" F0 T9 G6 Y#include <NXOpen/PartCollection.hxx>
* W7 E5 w# P% \' }! p#include <NXOpen/Plane.hxx>& r: S2 Z8 \. L+ b  ?. g9 f& k+ O
#include <NXOpen/PlaneCollection.hxx>6 [( z/ Q( @# U) I$ e4 x- j. `
#include <NXOpen/Point.hxx>. Z: d0 \( Q, m# t6 g6 x
#include <NXOpen/PointCollection.hxx>
+ V0 W7 a8 M5 R9 c8 d#include <NXOpen/Preferences_PartModeling.hxx>* b- F( x( I" v8 Z+ U3 T0 M; _
#include <NXOpen/Preferences_PartPreferences.hxx>& N8 r4 J+ V2 F3 S  a! x
#include <NXOpen/Section.hxx>7 t" A0 [) ]' l3 O( p& W7 _% R# K
#include <NXOpen/SectionCollection.hxx>
$ q1 p+ H3 X9 d& J#include <NXOpen/SelectCurve.hxx>5 a& L1 v' I) g0 t0 y& _6 s# K" ]( {
#include <NXOpen/SelectObject.hxx>
& Z  X" M' }" u. E* T( j; |#include <NXOpen/SelectPointList.hxx>
+ {& _$ C5 {# `# G1 n( k% |( [% y' u. T#include <NXOpen/Session.hxx>6 [! G/ f+ P) J" @* X* V0 P
#include <NXOpen/Spline.hxx>$ K* t0 F, q; ~' L2 G2 O% O; J
#include <NXOpen/SplineCollection.hxx># ~$ j* w7 `1 w2 D
#include <NXOpen/TaggedObject.hxx>, P- I. }; f8 t
#include <NXOpen/Unit.hxx>7 a6 d2 k6 }4 P
#include <NXOpen/UnitCollection.hxx>
9 i; ]: l7 W. m2 u$ q#include <NXOpen/Update.hxx>" x. ^; c( N0 {  h3 e. F" [% X9 y
using namespace NXOpen;
( \! |, }* _, {' s$ @& i: |/ t
5 J( \; C1 x: Mextern "C" DllExport int ufusr_ask_unload()2 u0 h8 s( ?/ n$ j7 h7 O4 e6 G
{) b4 Q4 h2 k7 I5 ?) ?
    return (int)Session::LibraryUnloadOptionImmediately;+ J7 M: m% g& y* ?; y
}7 ?$ e( G1 U$ ]2 t7 E7 }$ u

. {5 n. S, W# X! `6 ]% t( |+ Rextern "C" DllExport void ufusr(char *param, int *retCode, int paramLen)4 `7 j0 C! |0 l* v1 k8 T* Y0 A  C
{
6 M$ u) R0 x/ g: t$ u: L. Z    Session *theSession = Session::GetSession();
" A; N* i" n, H6 t% r/ @4 y+ W    Part *workPart(theSession->Parts()->Work());
7 a' M1 e# X' F0 {0 E$ ^    Part *displayPart(theSession->Parts()->Display());$ r8 K2 r" c  L4 `' L
    // ----------------------------------------------* M5 {) Z  a0 m9 z, o- c
    //   Menu: Edit->Curve->Divide...
  J  D  j# A- ?5 H" i  E' C  V6 b    // ----------------------------------------------
6 T8 R/ ~' ^) Z% E1 Q    Session::UndoMarkId markId1;3 Z+ ^4 [) q3 x; l& N
    markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Start");3 f$ H- v- O2 s2 B

% m; Q- B$ x( [8 G3 b    Features::Feature *nullFeatures_Feature(NULL);$ B- k& q! M2 ?$ x

; F( E1 {$ a4 i$ ^& W$ B    if ( !workPart->Preferences()->Modeling()->GetHistoryMode() ): i9 O" ^! \. W# @3 |
    {9 B, |, k" L) z/ M& B
        throw NXException::Create("Create or edit of a Feature was recorded in History Mode but playback is in History-Free Mode.");
+ N9 `0 g3 s6 G  A% y7 @    }. }  f5 r. C5 P8 `4 F
' W! e& q1 ]2 G& W& g$ e/ O/ m
    Features::DivideCurveBuilder *divideCurveBuilder1;
" m5 M6 z8 P: e3 ]  f% g) U4 d) E    divideCurveBuilder1 = workPart->BaseFeatures()->CreateDivideCurveBuilder(nullFeatures_Feature);
: v  @/ k/ U4 R+ U
9 D/ C3 T( _* g6 w+ i( v7 l9 w7 ?    Point3d origin1(0.0, 0.0, 0.0);6 J' N& \1 {/ S4 `9 z
    Vector3d normal1(0.0, 0.0, 1.0);
: e5 W0 R$ O: M    Plane *plane1;3 b# K* U5 J( V9 S& S* p
    plane1 = workPart->Planes()->CreatePlane(origin1, normal1, SmartObject::UpdateOptionWithinModeling);+ N1 L+ m9 i% C/ S( P" {& R

! [. A) ^+ N& p* c% F) ]+ a    divideCurveBuilder1->SetBoundingPlane(plane1);
0 I. [) A9 C. y& |8 p  [" m3 i$ \! M
    Section *section1;$ w2 N# _$ o5 g: \" `4 c
    section1 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);$ N) L7 x6 M5 B8 J& u. i
0 t, X, _7 G1 k4 o/ `8 ?" Q0 u8 j
    Unit *unit1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));4 g  A$ c+ p1 W+ b- T3 M
    Expression *expression1;% Z) J/ y; W. ~! w- W
    expression1 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
: @$ k: ~# S* B7 h% u% i- L9 M5 U' [3 A. o
    Section *section2;
' d* W/ l& Y1 Q9 J) B& @  |    section2 = workPart->Sections()->CreateSection(0.00095, 0.001, 0.005);
9 H3 m9 B8 V/ R5 m+ q0 B$ {) G4 n9 P
    Expression *expression2;
7 D( _$ [, `+ d; [! U+ i    expression2 = workPart->Expressions()->CreateSystemExpressionWithUnits("0", unit1);
+ g: B4 X& {$ m- I
9 |- b4 J0 i! j! |    divideCurveBuilder1->SetEqualSegmentMethod(Features::DivideCurveBuilder::EqualSegmentOptionEqualArcLength);# n2 i' s7 ~* V: h- i
/ F& v* A# D/ \- D+ i) V  x& {$ r1 y
    divideCurveBuilder1->SetEqualParameterSegments(5);
) f$ o0 `# n: d% x6 R/ V. i. n5 Y' r
    divideCurveBuilder1->SetEqualArcLengthSegments(5);
7 m) s3 s( b, I" s# g8 f: Y( r  k% U
    theSession->SetUndoMarkName(markId1, NXString("Divide Curve \345\257\271\350\257\235\346\241\206", NXString::UTF8));
+ d' D9 i& [3 K/ \# s. b8 i" i0 Z9 k! l, ~7 z& f" N& [
    divideCurveBuilder1->SetType(Features::DivideCurveBuilder::TypesByBoundingObjects);& r# f+ s! f% P3 c% C7 Z1 R

5 k+ X. i; F4 e    Spline *spline1(dynamic_cast<Spline *>(workPart->Splines()->FindObject("HANDLE R-13222")));3 j  |& f3 N4 L. y# ?8 z; X% M7 r( f3 v# L
    Point3d point1(687.588524265161, -38.7585251796817, 92.0013591828029);
; t+ J1 [7 e6 w    divideCurveBuilder1->DividingCurve()->SetValue(spline1, workPart->ModelingViews()->WorkView(), point1);4 f* S3 g& g1 U3 j! `( w# s: |! A
1 u+ s8 p8 {- g' A1 r6 O, d
    divideCurveBuilder1->SetBoundingObjectMethod(Features::DivideCurveBuilder::BoundingObjectOptionProjectPoint);/ @6 k; f9 r( s5 j
" h! ?" a# T% a- J8 l
    Features::PointFeature *pointFeature1(dynamic_cast<Features::PointFeature *>(workPart->Features()->FindObject("POINT(33)")));4 |; a" W' V2 p
    Point *point2(dynamic_cast<Point *>(pointFeature1->FindObject("POINT 1")));
- {0 O4 _& V9 }0 m  T    Xform *nullXform(NULL);$ o% p/ y- `9 w, E8 W3 P1 F/ s2 @* y
    Point *point3;
. g* e! i6 M+ J5 H) |/ H% e    point3 = workPart->Points()->CreatePoint(point2, nullXform, SmartObject::UpdateOptionWithinModeling);
7 f) S/ Z% [! k# Z$ f0 Y/ J% H6 Z0 E# v: s* [- g5 Y
    divideCurveBuilder1->SetBoundingProjectPoint(point3);
7 Y' K  `: L) p: Z# R# c/ b" U% w, O- Q: z! E0 N
    Session::UndoMarkId markId2;
& k0 X  i6 d" ]! l9 z9 W    markId2 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Divide Curve");+ U5 ^3 I" J# l* _) {* X
6 v  L, U8 P7 _1 V" n8 e6 I
    NXObject *nXObject1;
% L8 H4 y2 J8 i4 [5 m, R. r    nXObject1 = divideCurveBuilder1->Commit();4 p) V% R9 r0 X) v0 Z& `( }, K) J
' Z) Y+ f+ N* y( G
    std::vector<NXObject *> objects1;
/ p1 X* H$ t9 q4 U- B  k! \    objects1 = divideCurveBuilder1->GetCommittedObjects();
5 e; W8 s. n) ]+ b; _7 d' g/ N+ _; b3 r$ i. r) J9 ^& W
    theSession->DeleteUndoMark(markId2, NULL);
9 x+ f( [$ ^+ w$ ?) ?, i
9 k  V- Q' u2 S8 Q$ ~    theSession->SetUndoMarkName(markId1, "Divide Curve");
" a/ w  k. ?" A5 ^. z; b
* W- M% y6 S) `0 a3 t    divideCurveBuilder1->Destroy();
- U: L9 ?2 ~* x6 d8 x8 _8 H& n
& W$ d8 C! [8 ^4 t" V    try
0 p6 D# [+ v) ?+ q  e    {% n2 \0 d! B4 `
        // 表达式仍然在使用中。
$ U6 |+ r8 q& c7 n1 d        workPart->Expressions()->Delete(expression2);/ H& \7 h( Q6 q* y1 c+ N3 s: h
    }8 }. Y+ r. q% L' y. K" o
    catch (const NXException &ex)+ o5 S. D" [4 e6 {
    {
" }' r7 a5 |/ y4 F; f$ \1 a      ex.AssertErrorCode(1050029);
7 q% O$ H/ q' a: }! K( B; ^    }6 k" z- g( E, {6 {) `
2 B# V$ z) O0 W# {" p
    section2->Destroy();7 J3 M& O+ M% S2 l. U

8 i$ M( N( O9 k/ A  _    try4 y) T0 e+ O5 M, P
    {
" K0 q. H0 h: B' }/ x; L- c        // 表达式仍然在使用中。
* N4 e- W/ R3 V! I: ]% n        workPart->Expressions()->Delete(expression1);+ r) A4 [- A) y0 n
    }
9 I8 b; x: L! m. ]6 y5 o  ^    catch (const NXException &ex)$ W7 r* D4 W0 ^2 O% V& t
    {6 j5 Y& H% j( \
      ex.AssertErrorCode(1050029);
% `2 h8 |) F2 [" e) X% o0 Q6 p    }9 d4 ^- ?1 r8 o0 ]' N( ^2 B5 S
/ Q; K' j9 X. T7 I4 z  _
    section1->Destroy();
1 G$ R& ]: _5 e+ q' C' H  y( h( f$ q; g: N+ B; s+ c0 ]* {
    plane1->DestroyPlane();
6 d: Y, X% X; L& s. i+ t( Q  j5 Q' {6 d4 u6 D
    int nErrs1;
2 }$ |0 i& \  h6 x4 f    nErrs1 = theSession->UpdateManager()->DoUpdate(markId1);0 O3 p. o- I9 U2 X. B. Q4 `
! Y0 r9 s* X* [2 G9 u
    // ----------------------------------------------$ D+ a; a8 C% F0 i; @& A
    //   Menu: Tools->Journal->Stop Recording9 L" i: F! ^5 o" {) I0 f7 ?
    // ----------------------------------------------
' \7 Z  {7 ~. G8 O7 Z+ N  j}5 `9 l. t$ G' D- f# j
2 Q: D" |6 n1 M- m# r4 s
( V9 T6 A" [( S7 m0 j
, e( v' B4 d$ X" n. A
希望大神指点" g' R; n8 z; }: M2 Y
上海点团信息科技有限公司,承接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()  这个是空吗? 如果不是通常情况下,就是在这里,你可以打印看下。
& M7 e8 N7 }; `% N% G4 x: d# H# \: O6 y# _2 Z; c7 k2 f
另外一种方式就是生成的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
' d8 ?8 ]$ @9 o. `# c 捕获.PNG
0 i9 }. T5 @$ ]  o[mw_shl_code=cpp,true]objects1 = divideCurveBuilder1->GetCommittedObjects() [/mw_shl_code]的值一直是两个0,这段是录制jounal生成的,源代码就是这么获取的
" `$ _8 G5 L/ L& u9 B! b, o6 E7 R; y. |
我用9 A6 _5 M4 |4 `- H
0 c) s5 G, e; y3 z
9 ^# T& @/ r8 x3 g% q  v. o
[mw_shl_code=cpp,true]        Features::Feature *feat1;$ c  h6 b9 ^- G8 U; K
        feat1 = divideCurveBuilder1->CommitFeature();[/mw_shl_code]' R. F6 D) `% R$ K
代替
9 ~5 Y2 h# x6 O$ V[mw_shl_code=cpp,true]    NXObject *nXObject1;. z- ~8 P7 L" L  j! g( `
    nXObject1 = cylinderBuilder1->Commit();[/mw_shl_code]( u& ~( x# A, j" p
也可以分割一条曲线成两条   但是我想用这两条线怎么获取他们的tag??
. R8 \6 g3 Y4 m- n( g' N% ?6 g. q希望指点一下?
. d( [  Z, q, H: P- n  ~1 A7 |
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了