查看: 9196|回复: 5

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

 火 [复制链接]

2

主题

5

回帖

48

积分

新手上路

积分
48
QQ
发表于 2015-8-25 11:30:57 | 显示全部楼层 |阅读模式

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

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

×
我是新人 想用TextBuilder辅助实现刻字功能,附上我自己克隆journal 的字体处理代码,还在修改中:
- O# Y2 Z5 P# Q; v3 h6 U1 t  E3 k& J' w
void Letter::textProcess(const char * fonTContent, char* fontType, double& wScale,bool bools)- [3 M5 x! D9 v/ j0 B2 {
{* z2 n; s# i3 E  }: X6 `5 w+ s5 _! |
if (m_pTextBuilder == NULL)! z+ i* C- D9 P3 k0 c: t/ d9 H3 S
  m_pTextBuilder = m_pTextBuilder = workPart->Features()->CreateTextBuilder(m_pNullNXOpen_Features_Texts);
% F6 z" J' z5 s7 d int i = 0;
" u2 M( N8 o& M/ _) ^) g8 m  ?/ a
+ B7 k+ Z5 Y0 U3 e' Z m_pTextBuilder->SetFontStyle(NXOpen::Features::TextBuilder::FontStyleOptions::FontStyleOptionsRegular);
0 L$ W. e8 C8 l# y m_pTextBuilder->SetOrientationMethod(NXOpen::Features::TextBuilder::OrientationMethodOptions::OrientationMethodOptionsNatural);$ P* E* F2 q  @8 N7 C) ?
NXOpen::Features::TextBuilder::ScriptOptions characterSet;
5 [8 y' l9 Z% L3 M9 k* a if (fontType[1] >= 'A'&&fontType[1] <= 'z')
2 |- K: y, H8 _& B0 N1 ?; r$ w2 F  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsWestern;* n# P# Q2 J- m! y
else
8 d7 I; S! U, ?/ w# S  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312;
) n: k; B6 K& b1 y4 S3 m3 V i = 0;
$ H+ C. ?) u& W3 @7 u" [ while (1)7 G" G0 c( h! ^% m1 a, w
{$ o" ^2 d0 ^& M
  if (fontContent == 0) break;$ c) _9 H: w# f$ i2 r5 p" k
  if (fontContent & 0x80)! O* H6 O5 w1 X% t
   if (fontContent[i + 1] & 0x80)
& E9 n6 _' U9 N    if (characterSet != NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312)6 A, D! @. e5 R( j" H1 y% b
    {
! A6 J* M9 o$ ]0 e1 U- @     uc1601("含有汉字,选择的字符集可能不支持汉字而导致系统提示出错!!!", 1);
( ~3 }& z6 |$ c$ P. R5 j     break;
  e4 M; @( c7 Q. v7 P  O    }
1 h; Y: \" Q$ S% V3 l+ z; J5 B% Y  i++;
. n9 \$ t' z' d }
$ C# }3 v  G1 ]. l; v# ?) S m_pTextBuilder->SetTextString(fontContent);( F! g3 X6 T+ B) u# C
m_pTextBuilder->SelectFont(fontType, characterSet);
. B! q2 U1 ]/ F8 D m_pTextBuilder->SetCanUseKerningSpaces(true);8 P3 }; g( l! Z+ R# x2 M# r, X7 X
m_pTextBuilder->SetCanReverseIntersectionCurve(true);, w& x; g/ K& m% S8 U
( v6 W5 C- h6 U* j* z/ f
NXOpen:irection * orientationVector = workPart->Directions()->CreateDirection(Point3d(m_pnPoint[0], m_pnPoint[1], m_pnPoint[2])," I. ]  Y1 n9 Z) `( d) i/ M
  Vector3d((m_pnPoint[0] - m_pnPoint[6]), (m_pnPoint[1] - m_pnPoint[7]), (m_pnPoint[2] - m_pnPoint[8])),
: G8 M3 E& o$ A2 b2 ~7 A2 x7 w- P+ ?  SmartObject::UpdateOption::UpdateOptionWithinModeling);+ u" j. i5 m+ b  O, s
m_pTextBuilder->SetOrientationVector(orientationVector);5 G! s" g) V& }* T* v) k% B- I
7 s5 l' x3 x- p4 U9 W
m_pTextBuilder->SetType(NXOpen::Features::TextBuilder::TypesOnFace);
/ T! I8 A' q+ K: n1 |. ~' b m_pTextBuilder->lanarFrame()->SetAnchorLocation(NXOpen::GeometricUtilities::RectangularFrameBuilder::AnchorLocationTypeBottomCenter);( ~3 o# j" g) l5 t$ J

9 M/ P4 Y2 t0 g! q2 p4 q! Z i = strlen(fontContent);" [6 k  Y4 c8 G) o" ^+ A" P
char buf[256] = { 0 };
3 A4 U- q" [( q sprintf(buf, "%f", i * 10 * (wScale / 50.0));
, t. t4 j( [: H m_pTextBuilder->lanarFrame()->Length()->SetRightHandSide(buf);
6 O( |- J' l, ^- o0 _. I! X! @% } sprintf(buf, "%f", 10 * (wScale / 50.0));
7 w7 E+ k  c* H5 } m_pTextBuilder->lanarFrame()->Height()->SetRightHandSide(buf);& C1 k/ r* |4 U2 r8 H2 J5 J
m_pTextBuilder->lanarFrame()->Shear()->SetRightHandSide("0");
5 R' t) p9 k6 g' U& o+ k4 A% o: A% |7 T' U: n+ P* ^0 O
m_pTextBuilder->FrameOnPath()->AnchorPosition()->SetParameterUsed(false);
' |8 f9 ~0 J2 Q+ b! |4 p" U+ ~ m_pTextBuilder->FrameOnPath()->Offset()->SetRightHandSide("0");4 i9 `8 G: ?) |" [' \* ?: D
m_pTextBuilder->FrameOnPath()->Length()->SetRightHandSide("5.25771270972214");( v9 s# E* g" z. K. x. V( K1 a
m_pTextBuilder->FrameOnPath()->Height()->SetRightHandSide("3.1");
7 N0 [8 {$ P$ a" b4 @2 P$ n3 O: E/ B m_pTextBuilder->FrameOnPath()->AnchorPosition()->Expression()->SetRightHandSide("50");. `6 X# d5 u, {+ n4 X( P/ i
7 ]4 l+ v( }( E. w& M  a: o
std::vector<NXOpen::Face *> boundaryFaces2(0);  e6 d0 @1 ~* f) a- M
NXOpen::FaceTangentRule *faceTangentRule2 = workPart->ScRuleFactory()->CreateRuleFaceTangent(m_pface, boundaryFaces2, 0.05);
4 r2 P- ]* r7 {2 `; y" \ std::vector<NXOpen::SelectionIntentRule *> rules2(1);: r0 k- R: z% X
rules2[0] = faceTangentRule2;6 n2 u# p2 p  e) V$ U9 B6 C- ~
m_pTextBuilder->lacementFaces()->ReplaceRules(rules2, false);" o6 @! Z, Y6 Q$ L" F& _
& c4 o, i7 r5 T8 E" l5 l3 C6 N
m_pTextBuilder->OnFacePlacementProfile()->SetAllowedEntityTypes(NXOpen::Section::AllowTypesOnlyCurves);+ `& X$ M, S& s- J. D5 _" x' c, l
std::vector<NXOpen::Features::Feature *> CurveOnSurfaceFeatures(1);
  C2 P, J* j5 i5 T) I; _7 z$ S CurveOnSurfaceFeatures[0] = dynamic_cast<NXOpen::Features::CurveOnSurface *>(m_pCurveOnSurfaceObject);
9 ^0 S( `& h, {8 u' K NXOpen::Spline *spline1 = dynamic_cast<NXOpen::Spline *>(CurveOnSurfaceFeatures[0]->FindObject("CURVE 1"));
/ ]; _7 F/ k3 T4 r; y% Z6 w NXOpen::Curve *nullNXOpen_Curve(NULL);8 n  r" p8 V, R% `! B
std::vector<NXOpen::SelectionIntentRule *> rules(1);
2 L! B: r' m( V+ c& y7 S rules[0] = workPart->ScRuleFactory()->CreateRuleCurveFeatureTangent(CurveOnSurfaceFeatures, spline1, nullNXOpen_Curve, false, 0.001, 0.05);
9 j) x& V: L4 ~5 g& b m_pTextBuilder->OnFacePlacementProfile()->AllowSelfIntersection(true);7 o3 C1 Y& i) H8 s, L
NXOpen::NXObject *nullNXOpen_NXObject(NULL);
' H" {) w" }; V4 f# q NXOpen:oint3d helpPoint1(m_pnPoint[3], -m_pnPoint[4], m_pnPoint[5]);
# `5 T7 ], e" J% | m_pTextBuilder->OnFacePlacementProfile()->AddToSection(rules, spline1, nullNXOpen_NXObject, nullNXOpen_NXObject, helpPoint1,
2 R9 U& y1 i+ ]9 h8 p% a1 r& `  NXOpen::Section::ModeCreate, false);
9 w  W) ^8 t' e4 @5 E2 ]& y! E7 [1 {; u3 ]! m
if (bools)* K  ^1 K0 t- P- ?$ }5 Y- x% y
{1 ?+ K- E4 r+ a3 {! s+ X
  
: r" l  p3 ]) A  if (m_pTextBuilder->Validate())5 K5 }3 J& o2 z# M
  {
( ?2 A- F7 d! E0 h0 M" B7 |   m_pTextObject = m_pTextBuilder->Commit();. }& k6 _3 u1 e6 J3 {0 G
   m_pTextBuilder->Destroy();4 Y) ~% E$ j' x) E: Z3 N1 A+ e: l
   m_pTextBuilder = NULL;* o4 F& \, y5 Q3 M$ v* f# O/ M7 n" _: Z
   changeFontType->SetSensitivity(UF_STYLER_NO_SUB_INDEX, false);
  F" a0 }" R" e   changeStringContent->SetSensitivity(false);
  D' j  a2 P5 s+ Q$ Z   changeRealScale->SetSensitivity(false);
/ d( H* E/ ^" |$ Y) G& D  i  }
9 q3 m2 x3 \; Q  3 g$ x2 M9 [- P/ p1 F
}9 e7 Q% r; N/ M1 X. k5 @$ _
else/ ?  h; c/ J7 I% {6 S, m$ N: F5 G1 T
{  ! y  L  M1 i! u2 v1 L
//
, ]7 E& t8 D5 u0 d+ Y$ }  if (m_pTextBuilder->Validate())
8 p  ^9 N5 K4 Z8 r% I( A  {9 l7 A5 ~& e2 V4 ]
   m_pTextBuilder->Commit();0 I* @9 W9 q) c) A" q" N+ J
   UF_SO_set_visibility_option(m_pTextBuilder->Tag(), UF_SO_visible);
. I# g* X# u4 N) I" K2 v   m_pTextBuilder->Destroy();" ?* c, `1 [1 H# J$ Y5 w# p+ v
   m_pTextBuilder = NULL;
) G- ^1 H& D5 O7 B) z" h  }
( [' g/ R  _" P5 F+ C }
9 q+ ^% U  F7 Q) d1 p3 V& {
8 X$ b; \% v  J. V9 F, L# A. ^}我想实现一个字体预览效果 ,望有空的前辈指导指点!!!!
+ d) p* \' m* o% ?
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

6

主题

4

回帖

60

积分

管理员

积分
60
发表于 2015-8-25 16:23:53 | 显示全部楼层
预览就是你先commit 生成,然后设置下透明度 而已
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

2

主题

5

回帖

48

积分

新手上路

积分
48
QQ
 楼主| 发表于 2015-8-25 17:56:35 | 显示全部楼层
这个是不可行的,commit会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了.设置 撤销操作即可
' s6 f% \3 K8 q2 ptheSession->SetUndoMark();        " i) e  x6 x1 u9 _" T8 y6 c
theSession->UndoToMark();
, b# U2 j0 V( i  _theSession->DeleteUndoMark();4 R# z( u4 ~* y$ |5 a7 [8 ~
这样是没问题的,速度又很快.
6 q2 D. M/ c2 E* j4 H" P+ |但是问题又来了:& k) P, y0 D0 d' d6 X6 ^
在拉伸的时候出现 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.doteam.tech
回复 支持 反对

使用道具 举报

2

主题

5

回帖

48

积分

新手上路

积分
48
QQ
 楼主| 发表于 2015-8-25 18:07:59 | 显示全部楼层
...嘿嘿 我知道如何解决了 ,最后双向拉伸就好了 这是布尔运算造成的...
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

2

主题

13

回帖

163

积分

注册会员

积分
163
发表于 2016-1-9 16:52:09 | 显示全部楼层
浮游 发表于 2015-8-25 18:07
+ Y3 d4 j, }$ @' b6 c1 d/ Z  K...嘿嘿 我知道如何解决了 ,最后双向拉伸就好了 这是布尔运算造成的...

  u1 Y  V, q  Q  [% q, Q, H# u' Pm_pTextObject 这个nxobject对象如何使用到后面拉伸所用的截面线的呢?需要转化?
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

1

主题

10

回帖

125

积分

注册会员

积分
125
发表于 2016-1-15 13:59:38 来自手机 | 显示全部楼层
浮游 发表于 2015-8-25 17:56
  h2 C* B  o# l2 B这个是不可行的,commit会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了. ...

9 @; ]* N( Y9 m$ Y3 Z. b8 r要预览的代码你放在哪里,我放在update中,但是生成的模型无法再撤回了,求指点一下
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部