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

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

  [复制链接]

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

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

浮游 楼主

2015-8-25 11:30:57

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

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

x
我是新人 想用TextBuilder辅助实现刻字功能,附上我自己克隆journal 的字体处理代码,还在修改中:1 _! Q4 E& }" E8 m! {2 }
' {# [6 }% V& Y: D) d6 g. ^7 w7 D0 T- ?
void Letter::textProcess(const char * fonTContent, char* fontType, double& wScale,bool bools), W! z" ]4 _, i! \6 z4 Q
{
; I) S1 J" G8 G7 h7 C0 K if (m_pTextBuilder == NULL): R; d! k. U* }- E1 u
  m_pTextBuilder = m_pTextBuilder = workPart->Features()->CreateTextBuilder(m_pNullNXOpen_Features_Texts);
  ?: h7 o" D- V) _* X4 d int i = 0;
* |. b  `3 j0 }' q1 ~7 }' w# C) \3 u. D' r! w$ A. M. C) x
m_pTextBuilder->SetFontStyle(NXOpen::Features::TextBuilder::FontStyleOptions::FontStyleOptionsRegular);  K7 I! G4 v: A7 Z% T
m_pTextBuilder->SetOrientationMethod(NXOpen::Features::TextBuilder::OrientationMethodOptions::OrientationMethodOptionsNatural);2 c+ D  K; h+ z2 E0 @7 N/ T
NXOpen::Features::TextBuilder::ScriptOptions characterSet;
9 \3 H" r1 ?9 Y% f if (fontType[1] >= 'A'&&fontType[1] <= 'z')
: |1 k  s3 W+ x* x( l5 ~. s  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsWestern;8 _& m( A" `9 l) D; ^
else5 L& v! f8 w% k7 v" ~" m! q3 |
  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312;2 s5 [) e& k  Y& o
i = 0;* F& F7 y. O6 V" n
while (1)
( M6 I9 @+ Q8 ?& U {
: ]4 T! L3 q0 Y/ H/ ~  if (fontContent == 0) break;
5 m  s( R6 m7 z* U  if (fontContent & 0x80)
9 j7 a" W# t* E" U- f6 V   if (fontContent[i + 1] & 0x80)
+ J$ R! F3 m( U6 I. r5 L9 W4 f    if (characterSet != NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312)
9 e  J9 L  }4 {- @" A    {1 {9 a$ Q. T3 g$ Q
     uc1601("含有汉字,选择的字符集可能不支持汉字而导致系统提示出错!!!", 1);) b5 i2 Q1 h( h
     break;1 L  \* ~6 Z' m1 @0 \
    }+ [* C4 K) n$ G* |% Y, m
  i++;
9 d9 g" p8 N& R6 Q }5 Z0 \: E$ u* a4 U% [4 J/ ^8 i
m_pTextBuilder->SetTextString(fontContent);
% Q  L0 X2 k; p1 O0 z9 c m_pTextBuilder->SelectFont(fontType, characterSet);
$ [8 n+ M! _* o! X, ~ m_pTextBuilder->SetCanUseKerningSpaces(true);( M/ ?! d+ l- e, F5 \4 l
m_pTextBuilder->SetCanReverseIntersectionCurve(true);
1 _! \/ g, k/ D$ v; @6 d9 t, ^
7 q6 z! v1 e# {2 o6 [! V6 i NXOpen:irection * orientationVector = workPart->Directions()->CreateDirection(Point3d(m_pnPoint[0], m_pnPoint[1], m_pnPoint[2]),
5 |8 f# \) [) a% X/ C: v0 [) x  Vector3d((m_pnPoint[0] - m_pnPoint[6]), (m_pnPoint[1] - m_pnPoint[7]), (m_pnPoint[2] - m_pnPoint[8])),
. t: \: [- k+ C( P) y* m* a  SmartObject::UpdateOption::UpdateOptionWithinModeling);" a( ]2 U2 k& P+ j2 @: T+ ]
m_pTextBuilder->SetOrientationVector(orientationVector);
" j& D- ^4 y6 L9 Y) V$ X
8 O/ J  v. v! ]2 }  u+ d; q! r m_pTextBuilder->SetType(NXOpen::Features::TextBuilder::TypesOnFace);2 K( \- x: }; Z8 l; l
m_pTextBuilder->lanarFrame()->SetAnchorLocation(NXOpen::GeometricUtilities::RectangularFrameBuilder::AnchorLocationTypeBottomCenter);
, j; Z+ @5 R1 g1 _- w4 C1 B; k" k" {: u) P1 S& S+ a2 m+ b9 B( C# |
i = strlen(fontContent);
; G9 }. z3 H/ ]* j( } char buf[256] = { 0 };
$ ~$ j4 [9 q4 ]3 a2 l$ d6 I% E- z3 k; P sprintf(buf, "%f", i * 10 * (wScale / 50.0));. E: V* E. e9 v! i
m_pTextBuilder->lanarFrame()->Length()->SetRightHandSide(buf);* i4 |: t; d; E7 `  L  s0 A- ?
sprintf(buf, "%f", 10 * (wScale / 50.0));6 y' ~! T0 A( k
m_pTextBuilder->lanarFrame()->Height()->SetRightHandSide(buf);# s" S/ u! G: l  B' V
m_pTextBuilder->lanarFrame()->Shear()->SetRightHandSide("0");% O9 {* E6 ^5 L+ M; u
) {0 P3 R, D2 i$ ~6 I7 w
m_pTextBuilder->FrameOnPath()->AnchorPosition()->SetParameterUsed(false);& z; B7 K4 L9 f# ]7 X6 h
m_pTextBuilder->FrameOnPath()->Offset()->SetRightHandSide("0");
7 h) W# K3 n. A9 b m_pTextBuilder->FrameOnPath()->Length()->SetRightHandSide("5.25771270972214");  X1 u# F: |4 @: X. ~. i
m_pTextBuilder->FrameOnPath()->Height()->SetRightHandSide("3.1");
, v7 b6 [" k, r/ ?1 c- A m_pTextBuilder->FrameOnPath()->AnchorPosition()->Expression()->SetRightHandSide("50");
: F8 {3 G' a0 m
* p$ e: S2 ?" Y3 F  b" t8 Z2 Z! d std::vector<NXOpen::Face *> boundaryFaces2(0);
# w' E2 o7 y  X2 U# S7 n, ]3 a NXOpen::FaceTangentRule *faceTangentRule2 = workPart->ScRuleFactory()->CreateRuleFaceTangent(m_pface, boundaryFaces2, 0.05);
7 S' A5 A: D! t- ?7 ] std::vector<NXOpen::SelectionIntentRule *> rules2(1);. r% j) |0 i- H0 q. s
rules2[0] = faceTangentRule2;( k  z- v; U/ z- Q% Y
m_pTextBuilder->lacementFaces()->ReplaceRules(rules2, false);) q- R6 `* a( w. u. Y
" V/ C+ q- K0 Z8 Q% E; S9 ]
m_pTextBuilder->OnFacePlacementProfile()->SetAllowedEntityTypes(NXOpen::Section::AllowTypesOnlyCurves);/ t2 J7 l3 E  y% x# z* X
std::vector<NXOpen::Features::Feature *> CurveOnSurfaceFeatures(1);
1 S$ e0 G6 c% F' Y- f! @( C# e8 N- D CurveOnSurfaceFeatures[0] = dynamic_cast<NXOpen::Features::CurveOnSurface *>(m_pCurveOnSurfaceObject);
% M- H1 X1 R% o1 J0 }9 u" P: [ NXOpen::Spline *spline1 = dynamic_cast<NXOpen::Spline *>(CurveOnSurfaceFeatures[0]->FindObject("CURVE 1"));
; L1 ~, E* A& B# V2 y5 s% n NXOpen::Curve *nullNXOpen_Curve(NULL);
( k: d8 A( P( D" d- @4 q std::vector<NXOpen::SelectionIntentRule *> rules(1);8 {/ B* O' `% ]: p5 o1 S/ q
rules[0] = workPart->ScRuleFactory()->CreateRuleCurveFeatureTangent(CurveOnSurfaceFeatures, spline1, nullNXOpen_Curve, false, 0.001, 0.05);
6 n0 I  \" y/ b1 Q m_pTextBuilder->OnFacePlacementProfile()->AllowSelfIntersection(true);
. i& k; S( G; I' f9 W+ n" S& m% S NXOpen::NXObject *nullNXOpen_NXObject(NULL);
2 R" p+ ~( ]# j6 ~' T  c5 B NXOpen:oint3d helpPoint1(m_pnPoint[3], -m_pnPoint[4], m_pnPoint[5]);
9 P) W' {( e# x, n1 `0 t: ^ m_pTextBuilder->OnFacePlacementProfile()->AddToSection(rules, spline1, nullNXOpen_NXObject, nullNXOpen_NXObject, helpPoint1,
% y5 ^7 H. J8 N5 G. P+ c/ @0 i  NXOpen::Section::ModeCreate, false);
0 t0 @( Z6 |  J9 y2 A9 v: m' _, O* s1 @2 h% W
if (bools)6 B6 N" }' J2 c( f9 V% T
{
7 @8 T7 i! K. V  , }0 }- v# C4 O( Y2 @# m) v0 S1 s
  if (m_pTextBuilder->Validate())" M  p. q# u% k; X* o7 s8 F. {1 n
  {
1 u7 r2 {) q* m8 w( p   m_pTextObject = m_pTextBuilder->Commit();
" _- p/ B6 F3 C, Z# u8 [/ q) X   m_pTextBuilder->Destroy();! M  Z) T% n$ i& l! U  p
   m_pTextBuilder = NULL;* v0 {) }! F8 L2 V3 o6 j5 ?: e& ^* N
   changeFontType->SetSensitivity(UF_STYLER_NO_SUB_INDEX, false);& B# o" t5 _! |) k' h5 ]
   changeStringContent->SetSensitivity(false);
, A* H# q! F8 p6 u5 x   changeRealScale->SetSensitivity(false);2 }5 r" B( P2 F7 Z% s( I/ T
  }
" t3 }5 c$ Y0 S4 I3 J! q" R: o  $ m- m9 r5 m( e( h) d* t5 o
}/ V5 c# n0 G. S# L4 r
else# n+ u' O& \/ U4 E: L: o
{  - v) N9 X6 i& k. n) O2 O
//
( j" d7 k$ t3 Y. V/ e  t. E7 t  if (m_pTextBuilder->Validate())( R& M" x3 P% i9 Y1 z; x8 F
  {
. p2 t' V0 `' B' ?  `; {7 M   m_pTextBuilder->Commit();1 I7 z& D0 H) i
   UF_SO_set_visibility_option(m_pTextBuilder->Tag(), UF_SO_visible);
& c' R. a, }5 X# y$ R9 K5 c   m_pTextBuilder->Destroy();
* ~- j3 K" d% n6 q4 W8 g2 ^   m_pTextBuilder = NULL;5 s' y7 Z  F+ E. w6 g4 ?$ P
  }. J, m$ t( L3 k1 G' C
} 5 V; w3 v3 y" i8 [& j  Q

4 R, d! Y* W5 h( a* e& v( j}我想实现一个字体预览效果 ,望有空的前辈指导指点!!!!
3 A+ v& |  m0 @0 s2 e4 S
上海点团信息科技有限公司,承接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会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了.设置 撤销操作即可
+ W+ v# Z9 ?8 D$ P8 h. ctheSession->SetUndoMark();       
0 k4 D! o* @5 N! YtheSession->UndoToMark();* J% ?( |+ |2 `2 N
theSession->DeleteUndoMark();
% U+ Y2 K8 O2 r: D1 H% n这样是没问题的,速度又很快.4 w: b1 ^: R. n) t2 G
但是问题又来了:
7 h, w: e% P3 c: t, {$ j& d; A0 d在拉伸的时候出现 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:075 h- g/ g  n, N2 c$ U
...嘿嘿 我知道如何解决了 ,最后双向拉伸就好了 这是布尔运算造成的...
* I1 ^* A1 L. r5 Z+ [
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+ ]7 E4 r6 j+ F$ i# Q( C0 i$ J# }
这个是不可行的,commit会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了. ...

6 Q/ [8 _; m4 v9 n0 q; Z要预览的代码你放在哪里,我放在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二次开发专题模块培训报名开始啦

    我知道了