PLM之家PLMHome-工业软件践行者

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

  [复制链接]

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

2

主题

5

回帖

48

积分

新手上路

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

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

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

x
我是新人 想用TextBuilder辅助实现刻字功能,附上我自己克隆journal 的字体处理代码,还在修改中:
, u4 Y0 L% Q. L) W9 m6 W& e0 T$ ]
# K9 M6 O+ i- y! A9 N7 \void Letter::textProcess(const char * fonTContent, char* fontType, double& wScale,bool bools)) z% a) u/ q3 H, l6 d
{
/ T5 M$ m3 n# w0 r8 I/ k if (m_pTextBuilder == NULL)
4 G# N8 Q8 K* b; t: m  m_pTextBuilder = m_pTextBuilder = workPart->Features()->CreateTextBuilder(m_pNullNXOpen_Features_Texts);% X& j. |8 `/ d. H/ T, w0 U
int i = 0;
+ @* j7 M. C+ V/ s/ m4 f/ L! k" V9 t( ~! O" K/ u( G
m_pTextBuilder->SetFontStyle(NXOpen::Features::TextBuilder::FontStyleOptions::FontStyleOptionsRegular);
7 A: O6 f+ p0 _: t2 z m_pTextBuilder->SetOrientationMethod(NXOpen::Features::TextBuilder::OrientationMethodOptions::OrientationMethodOptionsNatural);
, A. B/ o2 [1 d- c5 Q NXOpen::Features::TextBuilder::ScriptOptions characterSet;
6 B5 A. V6 x  x; y1 Z' y. x if (fontType[1] >= 'A'&&fontType[1] <= 'z')
4 I7 {- D3 A! p4 z: `! h+ ~. j* D  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsWestern;: S( ]% n+ ]  w! b3 L' S
else
: k6 Y( n3 B+ ~1 \1 K$ v/ F0 }  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312;7 c# ?/ h- k; l3 b
i = 0;
) c, u: W0 W0 C, L2 e while (1)1 r9 }. w! Y% J5 g# w
{
8 Z$ Y0 e- K5 X- h  if (fontContent == 0) break;4 ~  _/ U1 u. t
  if (fontContent & 0x80)
" O  p& k; h- M# U% y   if (fontContent[i + 1] & 0x80)
" o6 a' s( J$ ]6 r( W7 d1 w0 r    if (characterSet != NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312)) x( k% }* Y' h9 e: S' R( I
    {
8 I/ K7 x; j5 H( l     uc1601("含有汉字,选择的字符集可能不支持汉字而导致系统提示出错!!!", 1);& K6 p5 q  P  p0 D4 Z" h+ \
     break;
8 V! U+ N; B  C* l! b0 {5 b$ J    }5 C9 t$ Z  k8 @0 m4 v3 l) {
  i++;% i9 J2 c# H: P$ R/ T, j' P
}
; e* R' L- U) I6 y9 P m_pTextBuilder->SetTextString(fontContent);- F; I# a3 x  c# Q) [
m_pTextBuilder->SelectFont(fontType, characterSet);$ `4 x  F1 v  l: T  q$ O
m_pTextBuilder->SetCanUseKerningSpaces(true);
% X% z  `0 p9 f7 b2 y7 j; a m_pTextBuilder->SetCanReverseIntersectionCurve(true);
, m+ ?7 J( {  f7 w
& l' S6 c6 K- K; @1 t NXOpen:irection * orientationVector = workPart->Directions()->CreateDirection(Point3d(m_pnPoint[0], m_pnPoint[1], m_pnPoint[2]),+ Y, d6 u$ c! ?
  Vector3d((m_pnPoint[0] - m_pnPoint[6]), (m_pnPoint[1] - m_pnPoint[7]), (m_pnPoint[2] - m_pnPoint[8])),( Y: L2 N7 y8 Z  j7 A( c9 K
  SmartObject::UpdateOption::UpdateOptionWithinModeling);
3 L! f3 F5 A3 g% ~. N m_pTextBuilder->SetOrientationVector(orientationVector);; |( |8 A$ T$ l# b* {1 e
. Y) u! E( `8 p# l
m_pTextBuilder->SetType(NXOpen::Features::TextBuilder::TypesOnFace);
5 d/ M% X* l% B) ]5 [ m_pTextBuilder->lanarFrame()->SetAnchorLocation(NXOpen::GeometricUtilities::RectangularFrameBuilder::AnchorLocationTypeBottomCenter);
, l0 ~6 R+ {  }# S7 M& ?0 P
% W; W" c+ O; v# K% R9 T; d i = strlen(fontContent);
0 n$ k  \) a& z. M& T char buf[256] = { 0 };6 `# y8 w3 p. y, E
sprintf(buf, "%f", i * 10 * (wScale / 50.0));
% C/ E( d" ?3 K  ` m_pTextBuilder->lanarFrame()->Length()->SetRightHandSide(buf);
5 Y/ K' V( H$ w6 u) Q sprintf(buf, "%f", 10 * (wScale / 50.0));
+ ~1 }/ d' C+ t& v9 S* s/ @ m_pTextBuilder->lanarFrame()->Height()->SetRightHandSide(buf);8 e& W- h9 ~: W# [+ m! U
m_pTextBuilder->lanarFrame()->Shear()->SetRightHandSide("0");
5 f* Q3 P8 I' a+ Z- f- {  ?5 o9 v
9 _: r6 b" n, v3 ~- T0 |* C) g) } m_pTextBuilder->FrameOnPath()->AnchorPosition()->SetParameterUsed(false);% R8 ]/ X$ L- P
m_pTextBuilder->FrameOnPath()->Offset()->SetRightHandSide("0");
: i+ D  w6 g% ^. \1 r0 p: N; ~ m_pTextBuilder->FrameOnPath()->Length()->SetRightHandSide("5.25771270972214");6 d. E! u. i* p, ~
m_pTextBuilder->FrameOnPath()->Height()->SetRightHandSide("3.1");% a' _2 z+ Q  G
m_pTextBuilder->FrameOnPath()->AnchorPosition()->Expression()->SetRightHandSide("50");
) N( d: T8 ?" p/ `" m0 a
" q6 N; u8 F: e! H std::vector<NXOpen::Face *> boundaryFaces2(0);
; e0 {3 m+ G8 i6 x) u4 k NXOpen::FaceTangentRule *faceTangentRule2 = workPart->ScRuleFactory()->CreateRuleFaceTangent(m_pface, boundaryFaces2, 0.05);- ~; B+ J$ B: t9 M) a* L
std::vector<NXOpen::SelectionIntentRule *> rules2(1);9 R  O3 S+ {- c1 Y1 H6 `' c
rules2[0] = faceTangentRule2;4 O) m2 r# E# c' d7 Q
m_pTextBuilder->lacementFaces()->ReplaceRules(rules2, false);
* r6 x4 H$ x  W3 b% v
/ \* @) m9 K# U0 L, }6 P0 x# C, w m_pTextBuilder->OnFacePlacementProfile()->SetAllowedEntityTypes(NXOpen::Section::AllowTypesOnlyCurves);
# L% M1 K7 @9 Q+ f std::vector<NXOpen::Features::Feature *> CurveOnSurfaceFeatures(1);6 t: N+ C( S, F: x: w  k
CurveOnSurfaceFeatures[0] = dynamic_cast<NXOpen::Features::CurveOnSurface *>(m_pCurveOnSurfaceObject);
8 e. s% V! ^& ~$ q( S NXOpen::Spline *spline1 = dynamic_cast<NXOpen::Spline *>(CurveOnSurfaceFeatures[0]->FindObject("CURVE 1"));
- h) o7 Y5 N6 m: v2 a8 h- ? NXOpen::Curve *nullNXOpen_Curve(NULL);
9 q1 a+ Z# c8 q9 T; O std::vector<NXOpen::SelectionIntentRule *> rules(1);
! Z' {' r6 X. B, s% V6 f) @2 o rules[0] = workPart->ScRuleFactory()->CreateRuleCurveFeatureTangent(CurveOnSurfaceFeatures, spline1, nullNXOpen_Curve, false, 0.001, 0.05);6 T; O+ h* U5 M, n
m_pTextBuilder->OnFacePlacementProfile()->AllowSelfIntersection(true);
/ X+ e2 u- q$ c) o: H2 f4 L NXOpen::NXObject *nullNXOpen_NXObject(NULL);
& E6 V4 c7 D$ N  k% O' c NXOpen:oint3d helpPoint1(m_pnPoint[3], -m_pnPoint[4], m_pnPoint[5]);
0 F- h0 ]& N2 C6 K% D m_pTextBuilder->OnFacePlacementProfile()->AddToSection(rules, spline1, nullNXOpen_NXObject, nullNXOpen_NXObject, helpPoint1,
' U9 l, V5 A. L4 n; I+ N  NXOpen::Section::ModeCreate, false);+ b2 }5 B0 F7 A) I/ [
$ F- Z6 |- ~9 K  q3 m+ e0 w" r
if (bools)
" X/ E2 p6 p, k* G {
' g6 i: p3 B, _$ ^. j9 P  
: q& T" R: D# z, \8 H  if (m_pTextBuilder->Validate())5 v4 B) H0 ?/ C* f# z; I. [
  {
1 ]9 {4 |. k+ _; ^  v3 Q, J   m_pTextObject = m_pTextBuilder->Commit();
/ D( S) U  n) ?6 P, }   m_pTextBuilder->Destroy();0 K: M& u4 A: }# q8 ]. }3 T2 `" i$ Y- x
   m_pTextBuilder = NULL;6 t' K9 ?* D( U; j  ~
   changeFontType->SetSensitivity(UF_STYLER_NO_SUB_INDEX, false);
5 ]: `, m8 Y$ _0 @) w7 U$ J% P   changeStringContent->SetSensitivity(false);9 [2 M6 l' }  c3 p9 V+ F: u6 Y9 }
   changeRealScale->SetSensitivity(false);5 T4 [" L- M+ J$ L( m/ G* U1 v- W
  }2 ^, ^( o& x; w5 M0 W  u
  
8 s7 y- P: R4 Z% c. Q) R }
  P" }* V5 y) p0 o7 A! V else
7 J, F' i% T6 C. T4 ? {  ) J' y6 M4 s, h4 _4 |3 \* v
//
# }  n# h3 Z* u' c  if (m_pTextBuilder->Validate())2 g' w* `" J. Q
  {  G! m- l! J/ n0 ?
   m_pTextBuilder->Commit();
1 C1 ]: V/ F0 H; N% F   UF_SO_set_visibility_option(m_pTextBuilder->Tag(), UF_SO_visible);
* D  O; Y6 \# l. F( M3 H# J  V   m_pTextBuilder->Destroy();
7 ^8 ~2 E7 r" h  Z% v3 o   m_pTextBuilder = NULL;, R1 [0 J$ k" d' U- C
  }( j$ X7 ]1 ^4 I; Z" x
}
* _3 q# w# M8 [( }. ` * q& i% z1 v( M' O: M# v
}我想实现一个字体预览效果 ,望有空的前辈指导指点!!!!
3 A2 l9 M  |: @4 Q& O; X/ D' C. s# w
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

全部回复5

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82172
QQ
发表于 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
回复 支持 反对

使用道具 举报

2

主题

5

回帖

48

积分

新手上路

积分
48
QQ
 楼主| 发表于 2015-8-25 17:56:35 | 显示全部楼层
这个是不可行的,commit会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了.设置 撤销操作即可
# v# l2 H2 ^+ [. QtheSession->SetUndoMark();        6 {2 O6 w, {9 g
theSession->UndoToMark();
$ `: W+ e% ^0 etheSession->DeleteUndoMark();! m( j, e5 a1 y7 ?, n" ^
这样是没问题的,速度又很快.
$ X$ T. `% A# |  ?但是问题又来了:4 h2 o4 t; F1 t0 Q
在拉伸的时候出现 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
1 l3 d/ w3 x% d( [7 i2 F2 ]7 D+ [...嘿嘿 我知道如何解决了 ,最后双向拉伸就好了 这是布尔运算造成的...
( M9 P9 n- i* v3 U/ ]$ }
m_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
# X, G0 d# [$ v: P) u这个是不可行的,commit会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了. ...

2 H9 V. c# G0 [  D% h: M: }要预览的代码你放在哪里,我放在update中,但是生成的模型无法再撤回了,求指点一下
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了