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

[已解决] 二次开发NXOpenC++中NXOpen::Features::TextBuilder对象如何实现预览功

  [复制链接]

2016-1-15 13:59:38 8782 5

浮游 发表于 2015-8-25 11:30:57 |阅读模式

浮游 楼主

2015-8-25 11:30:57

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

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

x
我是新人 想用TextBuilder辅助实现刻字功能,附上我自己克隆journal 的字体处理代码,还在修改中:
* }' f; K7 O) D* d7 y# r
0 U8 e; J0 J, f( Q. R& T+ ovoid Letter::textProcess(const char * fonTContent, char* fontType, double& wScale,bool bools)
( I2 F( v! U$ u{0 G2 `/ l' Q2 O( L4 A& ?4 e
if (m_pTextBuilder == NULL): u) R- N0 N/ Z: u: c1 H
  m_pTextBuilder = m_pTextBuilder = workPart->Features()->CreateTextBuilder(m_pNullNXOpen_Features_Texts);
1 F" ]; ^4 _. k' L, y int i = 0;
8 g( {) n# o7 `) \: T6 K& q4 \, ]. u8 [2 H$ V- n5 ?0 s
m_pTextBuilder->SetFontStyle(NXOpen::Features::TextBuilder::FontStyleOptions::FontStyleOptionsRegular);
- G" f7 i: f# [+ s" o+ P" L m_pTextBuilder->SetOrientationMethod(NXOpen::Features::TextBuilder::OrientationMethodOptions::OrientationMethodOptionsNatural);
, N" z* I1 p: e9 L! E NXOpen::Features::TextBuilder::ScriptOptions characterSet;
, f6 y  t4 r/ S# z if (fontType[1] >= 'A'&&fontType[1] <= 'z')) c" H0 H! R: q9 w8 @! K
  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsWestern;* N0 i* z5 E/ p: P7 t! U. ?7 x2 o
else
2 T5 v/ S/ Z. L  {/ D  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312;
+ M; h0 S  n( b4 Z! A% ?' M: A3 ] i = 0;2 T& |2 C7 D( E) D! E) V
while (1)
. d2 _8 R+ e# R {/ n. A1 }8 K- o( B. q' x
  if (fontContent == 0) break;5 V+ f; g: K1 b: S! G- P
  if (fontContent & 0x80)
  X4 m3 m$ d8 ?& e   if (fontContent[i + 1] & 0x80)3 w& [' y+ q3 J& k3 d; A# E
    if (characterSet != NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312)
* j% r! u2 A9 L3 G3 u3 _    {
1 x0 f) J2 g. {: W3 b! A     uc1601("含有汉字,选择的字符集可能不支持汉字而导致系统提示出错!!!", 1);
# X5 j0 b8 k6 Z  s1 t" [3 S. ]9 h4 ^     break;
, h9 }" F+ A5 _    }4 W' Z! p: s# Z! {7 ^1 W2 ^
  i++;4 V0 B5 m+ \; C4 m) [, f- t
}
) Z1 A) i; A& C1 k$ o m_pTextBuilder->SetTextString(fontContent);
' ?& d( {: `* E$ ?7 V2 _. C+ S: o m_pTextBuilder->SelectFont(fontType, characterSet);
& w1 ?" z7 e" m m_pTextBuilder->SetCanUseKerningSpaces(true);
  s# z) w  _% \9 Q4 V3 E m_pTextBuilder->SetCanReverseIntersectionCurve(true);
8 o' I" ^( A- l- t- R! M* N$ R! z
0 A6 e' V7 W2 X: z  s  U* U2 t9 H NXOpen:irection * orientationVector = workPart->Directions()->CreateDirection(Point3d(m_pnPoint[0], m_pnPoint[1], m_pnPoint[2]),# p- a: E$ T$ p2 [0 e! q3 \
  Vector3d((m_pnPoint[0] - m_pnPoint[6]), (m_pnPoint[1] - m_pnPoint[7]), (m_pnPoint[2] - m_pnPoint[8])),9 ~& b# h% t5 y; b" c
  SmartObject::UpdateOption::UpdateOptionWithinModeling);
' I4 Q2 A/ Z4 Z# Z! f& l% a4 u6 ` m_pTextBuilder->SetOrientationVector(orientationVector);
5 W5 v( k( m8 @8 h, N9 W) V( V8 ^& P1 Q, C5 L4 ^: j! j7 d  T
m_pTextBuilder->SetType(NXOpen::Features::TextBuilder::TypesOnFace);* ?/ t/ I; F. e% d
m_pTextBuilder->lanarFrame()->SetAnchorLocation(NXOpen::GeometricUtilities::RectangularFrameBuilder::AnchorLocationTypeBottomCenter);2 Q. L! a8 i3 s8 [& e
0 }+ e. d) J( f' Y
i = strlen(fontContent);! r* W. @4 p3 u! m4 t2 _. S
char buf[256] = { 0 };3 P& J: R7 u$ Q, O2 }) ^& F
sprintf(buf, "%f", i * 10 * (wScale / 50.0));8 i  B7 P) p; r  h/ N( v
m_pTextBuilder->lanarFrame()->Length()->SetRightHandSide(buf);
4 F) F5 p- |# P$ J: ^7 u sprintf(buf, "%f", 10 * (wScale / 50.0));, ]; b. k2 S' e& v
m_pTextBuilder->lanarFrame()->Height()->SetRightHandSide(buf);
; M, y8 H) X0 m m_pTextBuilder->lanarFrame()->Shear()->SetRightHandSide("0");2 `5 M+ T8 g& B/ G! {

5 B/ J- ^/ y) Y4 g4 _7 x m_pTextBuilder->FrameOnPath()->AnchorPosition()->SetParameterUsed(false);
9 e+ X9 _" J! v m_pTextBuilder->FrameOnPath()->Offset()->SetRightHandSide("0");
, ?! k" ^0 S. X9 J m_pTextBuilder->FrameOnPath()->Length()->SetRightHandSide("5.25771270972214");& q9 K! b+ C& u  `1 S+ L
m_pTextBuilder->FrameOnPath()->Height()->SetRightHandSide("3.1");
! g6 P- o1 Y0 U# Z, i m_pTextBuilder->FrameOnPath()->AnchorPosition()->Expression()->SetRightHandSide("50");; d' J9 u4 N4 N( ^2 p

$ K" p9 q: ^, f3 L% M std::vector<NXOpen::Face *> boundaryFaces2(0);) R! Q8 ^2 K. j7 q
NXOpen::FaceTangentRule *faceTangentRule2 = workPart->ScRuleFactory()->CreateRuleFaceTangent(m_pface, boundaryFaces2, 0.05);
) |) O! N, V2 n std::vector<NXOpen::SelectionIntentRule *> rules2(1);( R0 K: c, Y$ g  U) K) y; E
rules2[0] = faceTangentRule2;
6 i" V4 f( C3 Y3 S: p' ?/ } m_pTextBuilder->lacementFaces()->ReplaceRules(rules2, false);
$ j4 y8 I% Z$ V" Z
6 o% Y& d1 z1 y+ i! z0 n  ^/ @9 y m_pTextBuilder->OnFacePlacementProfile()->SetAllowedEntityTypes(NXOpen::Section::AllowTypesOnlyCurves);
9 ?& A. F- Q0 @8 ~& r3 t/ [ std::vector<NXOpen::Features::Feature *> CurveOnSurfaceFeatures(1);
7 S0 c- x6 y. r1 ]* @) J+ M CurveOnSurfaceFeatures[0] = dynamic_cast<NXOpen::Features::CurveOnSurface *>(m_pCurveOnSurfaceObject);
# t8 k* o6 R$ P3 a; \ NXOpen::Spline *spline1 = dynamic_cast<NXOpen::Spline *>(CurveOnSurfaceFeatures[0]->FindObject("CURVE 1"));+ @5 L( k- k+ m1 ~8 }# D
NXOpen::Curve *nullNXOpen_Curve(NULL);
. q- F* Y! X4 @- r2 b% q std::vector<NXOpen::SelectionIntentRule *> rules(1);& `% n7 ?$ r3 R8 s3 r
rules[0] = workPart->ScRuleFactory()->CreateRuleCurveFeatureTangent(CurveOnSurfaceFeatures, spline1, nullNXOpen_Curve, false, 0.001, 0.05);9 d' t( t9 K6 `9 p
m_pTextBuilder->OnFacePlacementProfile()->AllowSelfIntersection(true);
2 ?7 U2 f$ g) _0 g9 T3 {* C NXOpen::NXObject *nullNXOpen_NXObject(NULL);% \5 f. |6 R2 N5 }* {  J
NXOpen:oint3d helpPoint1(m_pnPoint[3], -m_pnPoint[4], m_pnPoint[5]);
, \9 n  k# z1 B5 t m_pTextBuilder->OnFacePlacementProfile()->AddToSection(rules, spline1, nullNXOpen_NXObject, nullNXOpen_NXObject, helpPoint1,. [" P$ X* D5 y, e
  NXOpen::Section::ModeCreate, false);/ e" J$ c- w2 _: H2 k# F
* W  W9 i+ w/ c% C& C0 Y) O
if (bools)) m+ k/ g; {8 \8 N6 m# j
{
# A' I2 X7 E' }: Y3 p+ S1 c& H  
, z  \/ \8 p4 i" t# L0 z  if (m_pTextBuilder->Validate())5 `4 Z( _/ F0 M+ @
  {$ K. i6 h2 m! q8 ~. o# K, N
   m_pTextObject = m_pTextBuilder->Commit();
4 q. }5 ^, r  j# T   m_pTextBuilder->Destroy();% `& I3 T. W8 C, I; Z9 H3 {/ k
   m_pTextBuilder = NULL;
8 R, e2 q; ]. u   changeFontType->SetSensitivity(UF_STYLER_NO_SUB_INDEX, false);& Q7 m: G7 R6 m6 X/ |
   changeStringContent->SetSensitivity(false);% G- Z$ Z- U% H1 F
   changeRealScale->SetSensitivity(false);& W$ \* k' V" u. e9 l/ C+ Y5 `
  }
- B  @* E( P$ F* `& E2 ^: L  ( j$ d2 R& B% L7 I
}
- {! m* `% \0 k2 R; ?0 G$ K- w else
& g6 D% q% N2 q% e {  
% S/ C# R" T1 c1 h& } //
5 o, `3 C$ ?1 M/ L+ k  if (m_pTextBuilder->Validate())
! R; n) t5 W  X5 d  {+ a6 y" m* T8 i
   m_pTextBuilder->Commit();7 L* u- l: l9 B. f- I  g
   UF_SO_set_visibility_option(m_pTextBuilder->Tag(), UF_SO_visible);
- m5 A% C" O# V- s1 g4 u   m_pTextBuilder->Destroy();
9 b+ B! l* C# M3 P# u3 i. y& X   m_pTextBuilder = NULL;* {  }; f9 A. }2 }% m( Z& D
  }  `; |# l, o. q. P( E- o# A
} - I8 w/ i. _+ b% o. e
7 R0 N( m) Z& N8 a0 T
}我想实现一个字体预览效果 ,望有空的前辈指导指点!!!!+ P6 i$ Q8 A  v# J( e
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复5

admin 发表于 2015-8-25 16:23:53

admin 沙发

2015-8-25 16:23:53

预览就是你先commit 生成,然后设置下透明度 而已
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

浮游 发表于 2015-8-25 17:56:35

浮游 板凳

2015-8-25 17:56:35

这个是不可行的,commit会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了.设置 撤销操作即可3 g2 i9 H5 ?  E0 e
theSession->SetUndoMark();        , [% e, U- ~$ t/ d" b
theSession->UndoToMark();
' S; T8 |/ c1 y& a& U- MtheSession->DeleteUndoMark();# a& f# x( C- o9 r% F
这样是没问题的,速度又很快.! B- q- ~/ f9 }& l  ]5 l0 @
但是问题又来了:
. n* k  _9 j) b& [& D: |. s) `在拉伸的时候出现 err:the tool and target do not form a complete intersection
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

浮游 发表于 2015-8-25 18:07:59

浮游 地板

2015-8-25 18:07:59

...嘿嘿 我知道如何解决了 ,最后双向拉伸就好了 这是布尔运算造成的...
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

f1405602 发表于 2016-1-9 16:52:09

f1405602 5#

2016-1-9 16:52:09

浮游 发表于 2015-8-25 18:07# M  _2 \2 D" U
...嘿嘿 我知道如何解决了 ,最后双向拉伸就好了 这是布尔运算造成的...
) d$ u9 W9 @0 l0 P' H/ f$ e, Y
m_pTextObject 这个nxobject对象如何使用到后面拉伸所用的截面线的呢?需要转化?
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

heromo 发表于 2016-1-15 13:59:38 PLM之家手机频道

heromo 6#

2016-1-15 13:59:38

浮游 发表于 2015-8-25 17:56. W6 s  F: V" W' d. s  O, D
这个是不可行的,commit会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了. ...
- z; y; z+ R% b2 g2 x4 e
要预览的代码你放在哪里,我放在update中,但是生成的模型无法再撤回了,求指点一下
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了