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

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

  [复制链接]

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

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

浮游 楼主

2015-8-25 11:30:57

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

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

x
我是新人 想用TextBuilder辅助实现刻字功能,附上我自己克隆journal 的字体处理代码,还在修改中:
+ Y: P" C* ^! t. m$ [( N
0 h2 e6 w. E* M' N9 z/ n* Rvoid Letter::textProcess(const char * fonTContent, char* fontType, double& wScale,bool bools)' k6 \* Z) k5 P% t/ @4 U7 [
{8 P" l" p. D, B# F1 v
if (m_pTextBuilder == NULL)  ^, H" |. j& s
  m_pTextBuilder = m_pTextBuilder = workPart->Features()->CreateTextBuilder(m_pNullNXOpen_Features_Texts);
" K8 B7 f! M0 A/ P  Q" V int i = 0;; T: {2 ^5 U+ _! Y0 j, k& |  b

4 }* S( X7 ~" q# L6 ? m_pTextBuilder->SetFontStyle(NXOpen::Features::TextBuilder::FontStyleOptions::FontStyleOptionsRegular);
0 D: J& R, c: o4 M1 f4 } m_pTextBuilder->SetOrientationMethod(NXOpen::Features::TextBuilder::OrientationMethodOptions::OrientationMethodOptionsNatural);
& C- i1 [7 o: x' z NXOpen::Features::TextBuilder::ScriptOptions characterSet;
( S  {# H: X9 j! ? if (fontType[1] >= 'A'&&fontType[1] <= 'z')9 G  _" V* h4 o5 P6 e
  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsWestern;
7 W, V) a! O- y& y else; U4 P7 x! l5 V, Q; V
  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312;8 e' u7 Z: v# z' M( o% n- I
i = 0;  ?- \0 t5 @& Q6 ]
while (1)
5 X* l4 N) g9 \) s, r {
4 z: {( \5 @% q, `7 n2 T  if (fontContent == 0) break;
& |5 D* a. N+ x8 z$ z. a+ M  if (fontContent & 0x80)1 F2 V  j- i7 H6 S
   if (fontContent[i + 1] & 0x80)4 E4 T2 Y+ v! }" }
    if (characterSet != NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312)( p4 q6 L8 |- M: o% `* _
    {* o6 [3 r2 |. d- h
     uc1601("含有汉字,选择的字符集可能不支持汉字而导致系统提示出错!!!", 1);. [4 N+ m/ ^2 K" A3 e) O
     break;
! ^1 k# |( a8 h  ^8 Y0 @" M    }) F3 u+ k$ p) A+ R) P& n
  i++;1 u+ \( i* T5 m- t; Q
}
- V, R% S) m+ e: v2 @4 f0 y. _ m_pTextBuilder->SetTextString(fontContent);
: ^+ H) N8 d1 o# y. g m_pTextBuilder->SelectFont(fontType, characterSet);
+ C+ a# S% U; [6 @' L* ~ m_pTextBuilder->SetCanUseKerningSpaces(true);0 x, X$ Z0 P; s; c' K
m_pTextBuilder->SetCanReverseIntersectionCurve(true);; ^, p1 }# p* s3 i7 u5 d

% v& o, ]! |  A( D NXOpen:irection * orientationVector = workPart->Directions()->CreateDirection(Point3d(m_pnPoint[0], m_pnPoint[1], m_pnPoint[2]),* z3 l1 _% }. x6 F7 G& O
  Vector3d((m_pnPoint[0] - m_pnPoint[6]), (m_pnPoint[1] - m_pnPoint[7]), (m_pnPoint[2] - m_pnPoint[8])),
" c0 b- V; \1 e+ F; ~$ H5 A! n  SmartObject::UpdateOption::UpdateOptionWithinModeling);# @1 N" J8 r# i. C
m_pTextBuilder->SetOrientationVector(orientationVector);
8 W7 r' g2 U, n+ c3 t- h8 Z) u0 N- ?
m_pTextBuilder->SetType(NXOpen::Features::TextBuilder::TypesOnFace);
! S4 M  Y. A* h, [& H+ c( S+ T m_pTextBuilder->lanarFrame()->SetAnchorLocation(NXOpen::GeometricUtilities::RectangularFrameBuilder::AnchorLocationTypeBottomCenter);
- [1 b3 O. o+ G; a7 x* l
) S: }6 o0 k( O4 c5 S1 F" V! }1 }5 r i = strlen(fontContent);3 o% \* z: \+ ?- Q
char buf[256] = { 0 };
) E) ^% x/ h7 X9 } sprintf(buf, "%f", i * 10 * (wScale / 50.0));
! x8 q* _! @. w+ y/ ~( m' a4 K m_pTextBuilder->lanarFrame()->Length()->SetRightHandSide(buf);# b0 ~- G& H9 [. _# ~4 j
sprintf(buf, "%f", 10 * (wScale / 50.0));# N+ C& S5 V* E  n6 @4 K2 ^
m_pTextBuilder->lanarFrame()->Height()->SetRightHandSide(buf);
" N: `9 U, {7 r- a3 g- }) v m_pTextBuilder->lanarFrame()->Shear()->SetRightHandSide("0");; a0 R" r& y" n1 A& }4 B0 Q/ K& P3 O2 L

/ P, O" e+ U1 e% D m_pTextBuilder->FrameOnPath()->AnchorPosition()->SetParameterUsed(false);. \0 G  H: ^! L' n2 l; e
m_pTextBuilder->FrameOnPath()->Offset()->SetRightHandSide("0");! D8 l# q* I5 F2 N3 v3 o
m_pTextBuilder->FrameOnPath()->Length()->SetRightHandSide("5.25771270972214");
! O1 J" a( w* [$ S, F1 d+ ]4 f m_pTextBuilder->FrameOnPath()->Height()->SetRightHandSide("3.1");
. l" R, J& G3 [6 \+ }# C m_pTextBuilder->FrameOnPath()->AnchorPosition()->Expression()->SetRightHandSide("50");
5 L- H& O& \' @3 F* a! V
" s1 }2 j; G, J1 j std::vector<NXOpen::Face *> boundaryFaces2(0);
3 E& u7 D6 ^9 J. q: l% T1 T  C NXOpen::FaceTangentRule *faceTangentRule2 = workPart->ScRuleFactory()->CreateRuleFaceTangent(m_pface, boundaryFaces2, 0.05);4 d4 x% m3 i2 x  k: y
std::vector<NXOpen::SelectionIntentRule *> rules2(1);8 H5 a! V( G, T8 H% b' m
rules2[0] = faceTangentRule2;3 E) a7 E3 R$ i: j  t, C
m_pTextBuilder->lacementFaces()->ReplaceRules(rules2, false);/ N" K4 ~) H: l5 G, Q0 t* ]$ V3 G0 @

2 M5 T+ Y/ U9 w8 ], @ m_pTextBuilder->OnFacePlacementProfile()->SetAllowedEntityTypes(NXOpen::Section::AllowTypesOnlyCurves);8 @" n, p. c/ U8 k1 D
std::vector<NXOpen::Features::Feature *> CurveOnSurfaceFeatures(1);
& [2 ^& @0 L& F# r CurveOnSurfaceFeatures[0] = dynamic_cast<NXOpen::Features::CurveOnSurface *>(m_pCurveOnSurfaceObject);
' i" M% j/ e; l7 [; B! s! X NXOpen::Spline *spline1 = dynamic_cast<NXOpen::Spline *>(CurveOnSurfaceFeatures[0]->FindObject("CURVE 1"));% N& @7 s9 n. s. B) B
NXOpen::Curve *nullNXOpen_Curve(NULL);% N7 U6 k! e% F
std::vector<NXOpen::SelectionIntentRule *> rules(1);
0 t& S5 I7 b$ ]2 y4 L) B9 [ rules[0] = workPart->ScRuleFactory()->CreateRuleCurveFeatureTangent(CurveOnSurfaceFeatures, spline1, nullNXOpen_Curve, false, 0.001, 0.05);
/ T! L6 p, G  v& d5 B+ d& F; ?+ A0 A m_pTextBuilder->OnFacePlacementProfile()->AllowSelfIntersection(true);2 t- \; x  ]' _( I' o
NXOpen::NXObject *nullNXOpen_NXObject(NULL);
# R' b) K6 r% @; }6 [% o  \: W NXOpen:oint3d helpPoint1(m_pnPoint[3], -m_pnPoint[4], m_pnPoint[5]);
2 r  G8 d$ v1 m& L* ^ m_pTextBuilder->OnFacePlacementProfile()->AddToSection(rules, spline1, nullNXOpen_NXObject, nullNXOpen_NXObject, helpPoint1,
6 P: W  h1 W+ K8 I+ I3 x  NXOpen::Section::ModeCreate, false);
+ b: I2 g7 t; B
+ T  a8 T, |3 S/ d, @: v if (bools)1 Z' E. Z/ K% v3 V+ l% A
{
( {9 ~" V3 D* k: Z/ ~. ]4 A6 m  
/ n, r2 F9 N3 T/ h7 a# _& D  if (m_pTextBuilder->Validate())
% h+ z1 h! |" r9 P6 V: z# a5 k7 I  {
: S3 r+ }; K) s( }- v+ f   m_pTextObject = m_pTextBuilder->Commit();
7 @) v9 ^. }0 n# ?: D) d   m_pTextBuilder->Destroy();
0 I% {$ H1 H' z- E   m_pTextBuilder = NULL;
. P4 n4 U$ k7 r! `   changeFontType->SetSensitivity(UF_STYLER_NO_SUB_INDEX, false);' E2 v" ?+ D4 j' W/ }- Z
   changeStringContent->SetSensitivity(false);
* Q0 Y. X; Q6 F7 R8 E+ K! Q   changeRealScale->SetSensitivity(false);
5 U: z3 k" ^# Y, R+ c% B  }
& L/ r% }# h9 b5 R# w1 t  ( t8 B/ k  t' j' q7 E9 y, s
}
# A) C7 O; M) k) { else, L/ z. c6 N% y
{  
& @( z. l- g, y; u/ N/ ~4 J //
' a3 n/ v' S$ |$ g  }  if (m_pTextBuilder->Validate())2 K2 f) k& W  j5 e: ]2 f1 G
  {
) B* T5 {8 M9 C( K/ V. l# Q   m_pTextBuilder->Commit();- }: C! {) E0 m2 V$ D  A. @
   UF_SO_set_visibility_option(m_pTextBuilder->Tag(), UF_SO_visible);6 T' o1 W9 t% b) d
   m_pTextBuilder->Destroy();( m$ O1 n6 z* R+ y
   m_pTextBuilder = NULL;
. S8 q" A) S# ^$ k! w/ D5 m  }2 S* u  T. I$ h' l6 @* c
} * w+ k6 ]) J4 z, K( S
3 s. p! U0 `9 y8 O4 s" w
}我想实现一个字体预览效果 ,望有空的前辈指导指点!!!!
" [) _* H' i  a
上海点团信息科技有限公司,承接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会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了.设置 撤销操作即可
2 M* E$ |& P# n1 {7 g" ItheSession->SetUndoMark();          m# g- T% T* `  ]* ~
theSession->UndoToMark();
/ r9 W! I- `  P  @2 l7 ]  CtheSession->DeleteUndoMark();% O8 T" X- b% B) v6 k; o. b
这样是没问题的,速度又很快.: h/ W/ o$ i4 ~( C# J
但是问题又来了:
6 j/ [7 T, G5 o- H在拉伸的时候出现 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) y2 t5 b4 l! a/ ?$ a2 b
...嘿嘿 我知道如何解决了 ,最后双向拉伸就好了 这是布尔运算造成的...
# ]! T9 Z4 w) g/ s* Z+ X( A/ e
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
' Y" c( i# n$ w: _4 n4 F- @+ o这个是不可行的,commit会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了. ...

7 {% J2 M: S* C5 f& p要预览的代码你放在哪里,我放在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二次开发专题模块培训报名开始啦

    我知道了