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

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

  [复制链接]

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

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

浮游 楼主

2015-8-25 11:30:57

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

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

x
我是新人 想用TextBuilder辅助实现刻字功能,附上我自己克隆journal 的字体处理代码,还在修改中:1 ]/ `2 }% H4 D  p: e: G
, D# f( |5 Y7 `1 z4 o
void Letter::textProcess(const char * fonTContent, char* fontType, double& wScale,bool bools)
- y- h' C; W6 L8 [% k3 y# }( x/ G{* ^3 I- u& V7 h  K& ^8 C7 V
if (m_pTextBuilder == NULL)
, f/ B6 ^3 J- N" Q  m_pTextBuilder = m_pTextBuilder = workPart->Features()->CreateTextBuilder(m_pNullNXOpen_Features_Texts);8 r1 y: {# H% Z$ K1 ^1 P8 W' L
int i = 0;5 u5 ~8 H" q0 g& i

) P% q- ^/ L) ^; U$ D m_pTextBuilder->SetFontStyle(NXOpen::Features::TextBuilder::FontStyleOptions::FontStyleOptionsRegular);* ?! z9 `" L4 f. [! N
m_pTextBuilder->SetOrientationMethod(NXOpen::Features::TextBuilder::OrientationMethodOptions::OrientationMethodOptionsNatural);9 I6 c% B& v2 H1 |/ i3 l
NXOpen::Features::TextBuilder::ScriptOptions characterSet;
! ~( h5 Q- f  M/ B# e if (fontType[1] >= 'A'&&fontType[1] <= 'z')
' ]7 v0 g" t7 |5 m8 }% y  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsWestern;
% j, n8 e# A) } else
2 k$ p4 E. \1 X8 f: G  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312;
& C$ d9 u) i) V3 P4 H" n8 o i = 0;7 D+ m0 G9 g! `5 R8 g) ]* k" R
while (1)0 Z5 |# o7 ^- S
{+ J- Y9 Y0 P" g$ \4 q
  if (fontContent == 0) break;( s9 H2 j' a9 }3 `" F  y* o
  if (fontContent & 0x80)0 K1 j7 |, g2 f; ^% ?8 A7 i
   if (fontContent[i + 1] & 0x80)% p7 z' y2 i. f$ b
    if (characterSet != NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312)
1 j" A. c( R- V2 X( X    {
8 g4 N& O# j2 |# {' R     uc1601("含有汉字,选择的字符集可能不支持汉字而导致系统提示出错!!!", 1);: H1 B6 \+ @' R
     break;
3 F  u, m% W: v: K    }
0 o2 q" p9 \; H0 N# {& h- l3 `  i++;
* i2 N9 `' k( h" S. o& ~ }- k2 `/ q& ]0 E+ U, z) {: G4 I
m_pTextBuilder->SetTextString(fontContent);
2 w- F; C4 V+ y5 N) o- [. m" r: f2 W m_pTextBuilder->SelectFont(fontType, characterSet);6 ^$ m/ I, r0 t! G" _
m_pTextBuilder->SetCanUseKerningSpaces(true);
; U7 E3 h. L5 U m_pTextBuilder->SetCanReverseIntersectionCurve(true);0 y8 ]+ B# }4 N% [7 t- v
8 W4 J9 \# B) _# F3 A# \
NXOpen:irection * orientationVector = workPart->Directions()->CreateDirection(Point3d(m_pnPoint[0], m_pnPoint[1], m_pnPoint[2]),
0 \- j. |) F4 J! V6 N5 }  V  Vector3d((m_pnPoint[0] - m_pnPoint[6]), (m_pnPoint[1] - m_pnPoint[7]), (m_pnPoint[2] - m_pnPoint[8])),
# @' `( ~$ S6 Q  SmartObject::UpdateOption::UpdateOptionWithinModeling);% e5 G2 A7 d# R9 C9 F
m_pTextBuilder->SetOrientationVector(orientationVector);% @; O3 S3 A4 D7 Z

* N: S( u8 \$ i8 z/ r m_pTextBuilder->SetType(NXOpen::Features::TextBuilder::TypesOnFace);
' r/ [" x; L5 b* K( I m_pTextBuilder->lanarFrame()->SetAnchorLocation(NXOpen::GeometricUtilities::RectangularFrameBuilder::AnchorLocationTypeBottomCenter);
( {$ j9 h) f3 v7 `# o7 v5 Q
! h* v4 l/ g9 U6 w, r' e i = strlen(fontContent);) E4 W; u8 \" k# [
char buf[256] = { 0 };
7 F2 f; L! Z3 o3 {+ o sprintf(buf, "%f", i * 10 * (wScale / 50.0));
# r7 s+ w' ?4 Z2 m" n3 Q m_pTextBuilder->lanarFrame()->Length()->SetRightHandSide(buf);  B3 ]9 f* Y& i
sprintf(buf, "%f", 10 * (wScale / 50.0));
' v, y4 E0 v1 o) s6 N% o m_pTextBuilder->lanarFrame()->Height()->SetRightHandSide(buf);
# a" R9 m- @6 K m_pTextBuilder->lanarFrame()->Shear()->SetRightHandSide("0");
6 I5 s" ]* P# B- ~# _0 j" K5 w3 j1 ^7 {$ G1 w, Z
m_pTextBuilder->FrameOnPath()->AnchorPosition()->SetParameterUsed(false);
+ p' }) _' }; [ m_pTextBuilder->FrameOnPath()->Offset()->SetRightHandSide("0");* g7 x- @$ H% E3 r
m_pTextBuilder->FrameOnPath()->Length()->SetRightHandSide("5.25771270972214");. t# s' D+ V4 d* ~: ?$ M
m_pTextBuilder->FrameOnPath()->Height()->SetRightHandSide("3.1");
$ d0 [; O- a7 Q1 ~  \ m_pTextBuilder->FrameOnPath()->AnchorPosition()->Expression()->SetRightHandSide("50");& J8 k! S  L; ^9 _$ P

2 p% ?- s8 n% W9 o* f+ G std::vector<NXOpen::Face *> boundaryFaces2(0);
/ Z$ X8 ~" s3 {- ?9 t  [ NXOpen::FaceTangentRule *faceTangentRule2 = workPart->ScRuleFactory()->CreateRuleFaceTangent(m_pface, boundaryFaces2, 0.05);
) o, @4 d7 t1 a  [! e std::vector<NXOpen::SelectionIntentRule *> rules2(1);
6 X* T, G1 j" v6 D% A3 Q( e rules2[0] = faceTangentRule2;4 s6 D0 _6 M, S3 g( E
m_pTextBuilder->lacementFaces()->ReplaceRules(rules2, false);& t. y; W4 b+ ~( b: O
4 j0 j( M: `9 @! d$ P
m_pTextBuilder->OnFacePlacementProfile()->SetAllowedEntityTypes(NXOpen::Section::AllowTypesOnlyCurves);
: Y# {. _) j6 b! Y7 X7 _% Q' l std::vector<NXOpen::Features::Feature *> CurveOnSurfaceFeatures(1);
. o+ v* \, c+ s2 V CurveOnSurfaceFeatures[0] = dynamic_cast<NXOpen::Features::CurveOnSurface *>(m_pCurveOnSurfaceObject);: a" @3 M3 @) Z7 v! M
NXOpen::Spline *spline1 = dynamic_cast<NXOpen::Spline *>(CurveOnSurfaceFeatures[0]->FindObject("CURVE 1"));% p3 s, X% V5 g# }& G+ O
NXOpen::Curve *nullNXOpen_Curve(NULL);
+ Y% `' B8 X  ~  f2 z std::vector<NXOpen::SelectionIntentRule *> rules(1);% U9 z8 z' P4 B, u5 G6 D6 t/ k
rules[0] = workPart->ScRuleFactory()->CreateRuleCurveFeatureTangent(CurveOnSurfaceFeatures, spline1, nullNXOpen_Curve, false, 0.001, 0.05);2 B- J  i* u$ v" o' S
m_pTextBuilder->OnFacePlacementProfile()->AllowSelfIntersection(true);6 z" x" R5 J. k9 s7 H7 M
NXOpen::NXObject *nullNXOpen_NXObject(NULL);
# P, I7 G# ]' S+ t5 Y* x NXOpen:oint3d helpPoint1(m_pnPoint[3], -m_pnPoint[4], m_pnPoint[5]);' u! O; I3 H! ]: i
m_pTextBuilder->OnFacePlacementProfile()->AddToSection(rules, spline1, nullNXOpen_NXObject, nullNXOpen_NXObject, helpPoint1,0 L3 {7 y) X) O
  NXOpen::Section::ModeCreate, false);% x, l8 Q+ }* h2 H. J: m. ~3 c; k, ^

4 m: L! y/ u2 R) l if (bools)
5 f( j9 C$ [1 i# Q4 ?% a, V( R  X {
2 r( F/ D- V! F1 \$ r  
, q8 b, u8 v# I! t  if (m_pTextBuilder->Validate())6 z. J) P& W+ B7 h9 `
  {- |# p. o# R9 e* M: A: [% i* B3 B
   m_pTextObject = m_pTextBuilder->Commit();
: u2 C: f! q" y# n* V* o; j% F  h   m_pTextBuilder->Destroy();
" w& t# }  J( S# S, p: ~0 t   m_pTextBuilder = NULL;+ m) k9 F3 ^- D) h! e2 C8 X
   changeFontType->SetSensitivity(UF_STYLER_NO_SUB_INDEX, false);! v, Q# X/ j/ K3 B
   changeStringContent->SetSensitivity(false);
0 P& Z, e8 y2 s   changeRealScale->SetSensitivity(false);% r! n: ]" k3 O$ d# y8 T
  }
1 |8 t3 U1 |" f0 S4 y4 Y  
7 N4 B" ?2 b' U" K, t7 ` }
& X' y  X8 j8 Y  R else. s$ \: P: P. m4 J) ^
{  5 a- m7 \( S" C
// + r" z6 \3 p2 a$ A; [7 D
  if (m_pTextBuilder->Validate())# E5 n7 m3 [" |8 D: N
  {  B: s9 Z1 U) w& B4 X, ?
   m_pTextBuilder->Commit();
9 O/ t: p6 W& Q: ?  z- Y& Q   UF_SO_set_visibility_option(m_pTextBuilder->Tag(), UF_SO_visible);& }7 J" b' N9 r8 J
   m_pTextBuilder->Destroy();* G# \" }. z/ J7 b* Y& R. F
   m_pTextBuilder = NULL;
; N2 X" W. q6 |  t% s# ~2 w  }
+ s3 M' m2 d  F- I }
0 }! i' x' m( B" T( }! r   S. P, t8 i8 ?; o+ H
}我想实现一个字体预览效果 ,望有空的前辈指导指点!!!!
1 \( C( k4 c& S: h& n% p6 o
上海点团信息科技有限公司,承接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会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了.设置 撤销操作即可' {4 e  s9 h6 _# _% u& g. S
theSession->SetUndoMark();       
- V6 e  }7 E+ J; ?/ P: StheSession->UndoToMark();# V& \. s& V" V
theSession->DeleteUndoMark();9 w) f4 \- D, s" \
这样是没问题的,速度又很快.
, o- j: M1 s/ c5 s6 \但是问题又来了:
. A6 Y+ j! ?# X$ s2 w在拉伸的时候出现 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
/ X$ z3 @/ h! C( r4 p...嘿嘿 我知道如何解决了 ,最后双向拉伸就好了 这是布尔运算造成的...
; y) O, G, j2 N8 g* Z8 M4 O
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+ V6 L% W" X7 X7 D. o
这个是不可行的,commit会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了. ...
0 S! @) o' Q2 h8 ?' A
要预览的代码你放在哪里,我放在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二次开发专题模块培训报名开始啦

    我知道了