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

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

  [复制链接]

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

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

浮游 楼主

2015-8-25 11:30:57

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

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

x
我是新人 想用TextBuilder辅助实现刻字功能,附上我自己克隆journal 的字体处理代码,还在修改中:
% t* u) _: J* y$ c/ S" T6 ]+ f: e0 n/ U
void Letter::textProcess(const char * fonTContent, char* fontType, double& wScale,bool bools)
) m0 |! O0 r" O( p# T{
. w* r9 {" N5 k+ @$ O if (m_pTextBuilder == NULL)* |4 U8 J: g% P; n( D2 H
  m_pTextBuilder = m_pTextBuilder = workPart->Features()->CreateTextBuilder(m_pNullNXOpen_Features_Texts);' q- `# g0 E! a- H* J5 C! v
int i = 0;
/ U; X0 ?  R  ]& R; O  v0 E2 o" }% k, f5 T" [
m_pTextBuilder->SetFontStyle(NXOpen::Features::TextBuilder::FontStyleOptions::FontStyleOptionsRegular);4 {% Y, r+ Q+ X& e2 y3 O
m_pTextBuilder->SetOrientationMethod(NXOpen::Features::TextBuilder::OrientationMethodOptions::OrientationMethodOptionsNatural);8 S6 h) Z% _8 v7 r- [8 M
NXOpen::Features::TextBuilder::ScriptOptions characterSet;
$ H8 G* q- ?$ G% e- S& L! e if (fontType[1] >= 'A'&&fontType[1] <= 'z')
2 e( j1 I/ \6 s4 [4 p' c  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsWestern;
$ |3 C0 h7 u! y) o1 J6 x else
0 M' }7 r6 n5 y" M  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312;
4 `  d- m& ^4 Y3 y3 s7 A3 q i = 0;
9 X* Z6 q  k& |( V  X# [! v4 q while (1)0 H1 T# U  f0 X* [9 l
{# W* L1 n, L  R9 q6 i% |( I
  if (fontContent == 0) break;* @/ S5 R4 v- `
  if (fontContent & 0x80)* d7 ?8 h  y5 B0 _2 @' \0 w
   if (fontContent[i + 1] & 0x80)+ B8 n- K2 |: Q0 t
    if (characterSet != NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312)
, g$ @9 Z' w' A" s; A  ?6 N    {9 z& ]; R5 r1 m% z7 [# e7 ~8 h0 _
     uc1601("含有汉字,选择的字符集可能不支持汉字而导致系统提示出错!!!", 1);8 G' k; G& d1 m$ h. u8 h% P& W3 z) f# W
     break;
  V/ u4 P5 Q, |( h( d( S2 Z2 W0 t    }7 C3 N7 g# {! ?* I
  i++;# i' ]/ X1 a1 b* _
}
. A$ C9 _* u7 L, a$ ? m_pTextBuilder->SetTextString(fontContent);( L( ?8 \. e% G# t/ t) \% G9 M$ U
m_pTextBuilder->SelectFont(fontType, characterSet);
$ n' u, D/ n0 I$ P7 A* G! x m_pTextBuilder->SetCanUseKerningSpaces(true);
! P' @& F8 d5 u) J1 O m_pTextBuilder->SetCanReverseIntersectionCurve(true);
+ i* e8 M7 C( {% i6 l: f8 |' B. c4 Z
NXOpen:irection * orientationVector = workPart->Directions()->CreateDirection(Point3d(m_pnPoint[0], m_pnPoint[1], m_pnPoint[2]),2 r  W. A3 U( R/ u% ~$ a( E1 ]
  Vector3d((m_pnPoint[0] - m_pnPoint[6]), (m_pnPoint[1] - m_pnPoint[7]), (m_pnPoint[2] - m_pnPoint[8])),
0 B- o- J3 E7 `0 \, i6 E. W, A  SmartObject::UpdateOption::UpdateOptionWithinModeling);
0 Z6 e4 b+ p# Q& y' e- r& ` m_pTextBuilder->SetOrientationVector(orientationVector);
) f# y9 z9 t0 I# P9 E1 r
; ~* C5 D9 ^! R* C, O+ E  g; ? m_pTextBuilder->SetType(NXOpen::Features::TextBuilder::TypesOnFace);- q  H' }% F! d
m_pTextBuilder->lanarFrame()->SetAnchorLocation(NXOpen::GeometricUtilities::RectangularFrameBuilder::AnchorLocationTypeBottomCenter);7 Y! w8 F- Q% x) r

/ K# |) s& `8 d3 a i = strlen(fontContent);. T0 f# S" A. t4 l
char buf[256] = { 0 };4 D* u5 h' `5 }
sprintf(buf, "%f", i * 10 * (wScale / 50.0));
1 {/ f3 {1 e9 i+ h% @; L$ z$ S m_pTextBuilder->lanarFrame()->Length()->SetRightHandSide(buf);
4 [$ G2 e# n: s6 q$ S* F sprintf(buf, "%f", 10 * (wScale / 50.0));
; B3 P' a/ Z0 K# {9 [ m_pTextBuilder->lanarFrame()->Height()->SetRightHandSide(buf);
. o2 i" s# b4 q6 x9 C m_pTextBuilder->lanarFrame()->Shear()->SetRightHandSide("0");
2 m5 B0 ?, L# M( Y  l+ A) z% |5 i9 H& \7 _  }8 R% T" B
m_pTextBuilder->FrameOnPath()->AnchorPosition()->SetParameterUsed(false);. F" \0 Z4 K3 v5 h
m_pTextBuilder->FrameOnPath()->Offset()->SetRightHandSide("0");
4 |- R" }: G) N- F m_pTextBuilder->FrameOnPath()->Length()->SetRightHandSide("5.25771270972214");) ~& v! v! A% s  J- z' ^% G
m_pTextBuilder->FrameOnPath()->Height()->SetRightHandSide("3.1");
3 T3 \; t! X% q& C3 y( ]5 ] m_pTextBuilder->FrameOnPath()->AnchorPosition()->Expression()->SetRightHandSide("50");
, f2 O' O! V2 q( Z, W& @% p
, N7 O0 Y5 @7 Z& E! i std::vector<NXOpen::Face *> boundaryFaces2(0);
% e# g2 U8 E1 X$ r NXOpen::FaceTangentRule *faceTangentRule2 = workPart->ScRuleFactory()->CreateRuleFaceTangent(m_pface, boundaryFaces2, 0.05);
2 u* n2 {' K! e" }* \2 B$ f8 _( ^ std::vector<NXOpen::SelectionIntentRule *> rules2(1);
  `6 C; r( R1 t" E+ Y rules2[0] = faceTangentRule2;' a' [7 G! [' R7 U' _3 B% [
m_pTextBuilder->lacementFaces()->ReplaceRules(rules2, false);
( A! }7 x# v5 L5 d( E3 c7 P, h! n; A3 K3 Q# `- E- p9 `2 s
m_pTextBuilder->OnFacePlacementProfile()->SetAllowedEntityTypes(NXOpen::Section::AllowTypesOnlyCurves);
  n1 o# ~; z, q& m7 X std::vector<NXOpen::Features::Feature *> CurveOnSurfaceFeatures(1);; ^' F3 e* P% o) j- N
CurveOnSurfaceFeatures[0] = dynamic_cast<NXOpen::Features::CurveOnSurface *>(m_pCurveOnSurfaceObject);
# s* O1 L+ M7 |3 r NXOpen::Spline *spline1 = dynamic_cast<NXOpen::Spline *>(CurveOnSurfaceFeatures[0]->FindObject("CURVE 1"));3 Z4 w$ C5 {7 x' j  c
NXOpen::Curve *nullNXOpen_Curve(NULL);& t0 I' P( b( g) L
std::vector<NXOpen::SelectionIntentRule *> rules(1);1 o6 f1 j+ C* W& T, O) R2 j
rules[0] = workPart->ScRuleFactory()->CreateRuleCurveFeatureTangent(CurveOnSurfaceFeatures, spline1, nullNXOpen_Curve, false, 0.001, 0.05);
( M8 J# ]% J+ [% A3 _ m_pTextBuilder->OnFacePlacementProfile()->AllowSelfIntersection(true);% l9 U8 J) ?+ `# ?6 R* U
NXOpen::NXObject *nullNXOpen_NXObject(NULL);
) N, J& `- S" p- d" }7 ^% ~, n NXOpen:oint3d helpPoint1(m_pnPoint[3], -m_pnPoint[4], m_pnPoint[5]);8 g+ e6 _$ i5 c& d- Q- u
m_pTextBuilder->OnFacePlacementProfile()->AddToSection(rules, spline1, nullNXOpen_NXObject, nullNXOpen_NXObject, helpPoint1,8 D; C- N! Q& E0 ~+ k/ X$ A; R
  NXOpen::Section::ModeCreate, false);
  r5 F' V9 y1 ~/ _1 j+ b8 u3 n0 y! ^0 g( a. ^. N
if (bools)2 E; L# v, D) \4 ]% O  z
{% }$ K# G5 @! I% F0 h7 E
    B0 V+ B6 o4 k% G3 Q' G
  if (m_pTextBuilder->Validate())
. R, T( q! n. _+ j  {
2 ?4 L. W" X& Z   m_pTextObject = m_pTextBuilder->Commit();/ ~+ \) A6 I& r" p( @5 s; I
   m_pTextBuilder->Destroy();
$ I& K0 v& n* v* k, g1 g   m_pTextBuilder = NULL;& {& g' e4 f2 S( }, g) s8 N
   changeFontType->SetSensitivity(UF_STYLER_NO_SUB_INDEX, false);
4 q0 U3 w- B/ U* f1 R   changeStringContent->SetSensitivity(false);
8 Y4 k* F% A. d  ^   changeRealScale->SetSensitivity(false);
+ E. c+ z+ t2 C* q3 T& W# ~6 X  }. p9 W  ^8 z7 P  k3 J- ?
  ; d8 l" [, U3 P7 k% t9 d
}3 o7 p9 [3 @1 e' @( b6 X; o
else
3 e9 u1 n* q, q! ] {  ' l/ O/ C  G3 ~6 H" W# F
// 4 j0 v& L  X! j4 ~# m  _2 j0 ^
  if (m_pTextBuilder->Validate())
  V9 u9 U! F3 P' i9 P- i1 n  {
- c. u! J* `3 X9 Y  G& H   m_pTextBuilder->Commit();
3 o7 p5 P7 r3 I) m* l   UF_SO_set_visibility_option(m_pTextBuilder->Tag(), UF_SO_visible);; O4 q$ S, P1 J" k
   m_pTextBuilder->Destroy();
: \% n( @5 U; g7 e2 f   m_pTextBuilder = NULL;
: }" C9 J' d- _/ \$ v1 T* Q  }
, M: F3 F: m+ { } " W2 V6 |; H! x' d# V+ g
" K9 I$ W( I: V7 v( K
}我想实现一个字体预览效果 ,望有空的前辈指导指点!!!!
' R; D2 f$ U* t: a4 Q
上海点团信息科技有限公司,承接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 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

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

浮游 板凳

2015-8-25 17:56:35

这个是不可行的,commit会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了.设置 撤销操作即可) M) i) H7 A4 @+ O! l* ~( P
theSession->SetUndoMark();       
: v. @/ V2 {* G6 ^! c, AtheSession->UndoToMark();
' \0 ]0 y7 h/ m  F7 j' ^theSession->DeleteUndoMark();+ w0 P* F( N/ F6 O# R' u
这样是没问题的,速度又很快.
# s% S" A- P$ ?3 k4 _9 @, ^但是问题又来了:  H' ?' k4 b) V& L% A7 A/ R
在拉伸的时候出现 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' b( r9 G" H5 F
...嘿嘿 我知道如何解决了 ,最后双向拉伸就好了 这是布尔运算造成的...
' B* u' i- g8 F  C7 {! t: m5 G
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
8 K) ^0 \4 M# ~! M- F4 P2 M" x这个是不可行的,commit会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了. ...
& S% k" Q8 b2 S$ \' J
要预览的代码你放在哪里,我放在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二次开发专题模块培训报名开始啦

    我知道了