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

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

  [复制链接]

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

2

主题

5

回帖

48

积分

新手上路

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

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

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

x
我是新人 想用TextBuilder辅助实现刻字功能,附上我自己克隆journal 的字体处理代码,还在修改中:/ n; N% w: \) I1 y

4 o/ T: e7 z8 X( Y8 a/ V# J- [void Letter::textProcess(const char * fonTContent, char* fontType, double& wScale,bool bools)1 u- q3 Q3 E3 i# W
{/ x2 b! W, E+ r, ~, S) B
if (m_pTextBuilder == NULL)
4 ]+ F! r0 P1 E3 Y  m_pTextBuilder = m_pTextBuilder = workPart->Features()->CreateTextBuilder(m_pNullNXOpen_Features_Texts);
4 n" ~7 f# `- V! {( w int i = 0;" }+ D4 e' W' Q- [3 e% e. P
- C$ }' w7 n( {3 C" h0 A8 G
m_pTextBuilder->SetFontStyle(NXOpen::Features::TextBuilder::FontStyleOptions::FontStyleOptionsRegular);
4 P. y0 q* _8 e m_pTextBuilder->SetOrientationMethod(NXOpen::Features::TextBuilder::OrientationMethodOptions::OrientationMethodOptionsNatural);1 g  O7 A8 K  e4 }. W9 w3 ]
NXOpen::Features::TextBuilder::ScriptOptions characterSet;! P* T4 ?8 |9 G' l3 P( Y
if (fontType[1] >= 'A'&&fontType[1] <= 'z')
; d0 v4 j5 Q- Z5 P' \2 l% J6 Z  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsWestern;
% b* P# T2 I: E1 w8 R5 J; E else3 G8 Z  r# d$ b( f' O( ^
  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312;1 m/ n: M2 @! o, ~% ~( \3 J+ L
i = 0;. l; f, x, x/ E% ^
while (1)
4 p5 ?! n1 x# S9 O/ u {
0 o0 `* U% J% j  if (fontContent == 0) break;* d. M' G. _( U0 U
  if (fontContent & 0x80)! J  `+ v/ N2 I3 H' H
   if (fontContent[i + 1] & 0x80)
/ ?% p( K; D1 b, _    if (characterSet != NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312)9 q/ j: \3 l& R: e' y  X6 P/ d! D0 @5 l0 V
    {! Z/ X) B5 U$ w
     uc1601("含有汉字,选择的字符集可能不支持汉字而导致系统提示出错!!!", 1);
$ Q2 [4 B4 r. r1 x3 V     break;
* S4 c2 d( R. z    }1 v8 Q' |! u9 U( ~
  i++;
7 ~$ i4 z+ J8 m. f+ }8 x8 L5 q6 Q }: J) e. ]1 E- [. g5 u
m_pTextBuilder->SetTextString(fontContent);
9 U4 ?1 w" d1 S; X" m/ f$ p m_pTextBuilder->SelectFont(fontType, characterSet);' n6 @8 U) O; f
m_pTextBuilder->SetCanUseKerningSpaces(true);
2 ?6 |: C. D5 Y; ^9 M4 T m_pTextBuilder->SetCanReverseIntersectionCurve(true);
4 M$ F% ]1 I' A- [) f/ O- h
# H9 S% F0 D4 G  r NXOpen:irection * orientationVector = workPart->Directions()->CreateDirection(Point3d(m_pnPoint[0], m_pnPoint[1], m_pnPoint[2]),) P( b9 R/ y" K- P2 o
  Vector3d((m_pnPoint[0] - m_pnPoint[6]), (m_pnPoint[1] - m_pnPoint[7]), (m_pnPoint[2] - m_pnPoint[8])),) J9 r* J0 E' z+ y- f  j
  SmartObject::UpdateOption::UpdateOptionWithinModeling);0 B. t& V8 w+ [% {
m_pTextBuilder->SetOrientationVector(orientationVector);* M: c% G" y8 J
% F1 [/ g& @9 l0 [
m_pTextBuilder->SetType(NXOpen::Features::TextBuilder::TypesOnFace);
  t1 e- r# a/ y- \$ b( }6 \- C m_pTextBuilder->lanarFrame()->SetAnchorLocation(NXOpen::GeometricUtilities::RectangularFrameBuilder::AnchorLocationTypeBottomCenter);
: b2 w5 V/ G1 q* o3 J( ?
- _0 L: p0 @  g: i8 g) u i = strlen(fontContent);
5 t7 p/ @& s+ a+ k char buf[256] = { 0 };/ L7 _. [* t+ x1 e; V
sprintf(buf, "%f", i * 10 * (wScale / 50.0));. \5 c0 _: Y  D7 j& h
m_pTextBuilder->lanarFrame()->Length()->SetRightHandSide(buf);) u9 B  i' {( S" e. |
sprintf(buf, "%f", 10 * (wScale / 50.0));  G. C6 g0 d, b+ |
m_pTextBuilder->lanarFrame()->Height()->SetRightHandSide(buf);
: q7 T+ j" ]9 I& Y, v6 b m_pTextBuilder->lanarFrame()->Shear()->SetRightHandSide("0");! E7 n: L1 k- y$ k/ K

7 v! l* i* k1 j1 l' z m_pTextBuilder->FrameOnPath()->AnchorPosition()->SetParameterUsed(false);
1 Y9 [8 X' S$ l, R7 I5 N  h% m m_pTextBuilder->FrameOnPath()->Offset()->SetRightHandSide("0");% ?4 [  V5 @9 f/ |' k
m_pTextBuilder->FrameOnPath()->Length()->SetRightHandSide("5.25771270972214");
& R5 n" S2 L: v/ i* F; I m_pTextBuilder->FrameOnPath()->Height()->SetRightHandSide("3.1");' y) y6 H% W0 `, R5 s) `
m_pTextBuilder->FrameOnPath()->AnchorPosition()->Expression()->SetRightHandSide("50");
3 G) L- w) P0 i2 q- V) C
3 ]* H, h3 l2 k0 K std::vector<NXOpen::Face *> boundaryFaces2(0);& Q  B6 M: R! _5 B( v
NXOpen::FaceTangentRule *faceTangentRule2 = workPart->ScRuleFactory()->CreateRuleFaceTangent(m_pface, boundaryFaces2, 0.05);
8 `: ]& ]+ }. P& D3 W' R* { std::vector<NXOpen::SelectionIntentRule *> rules2(1);
2 |9 H2 _, \4 c/ _ rules2[0] = faceTangentRule2;
% l# y/ P  L7 h0 T m_pTextBuilder->lacementFaces()->ReplaceRules(rules2, false);4 D; n' m. l& k6 v  k) ^& n
' X% B' A8 P8 a% ]
m_pTextBuilder->OnFacePlacementProfile()->SetAllowedEntityTypes(NXOpen::Section::AllowTypesOnlyCurves);0 T  a$ P. J$ S2 e
std::vector<NXOpen::Features::Feature *> CurveOnSurfaceFeatures(1);3 f9 U( W9 {6 B% x+ Z. _
CurveOnSurfaceFeatures[0] = dynamic_cast<NXOpen::Features::CurveOnSurface *>(m_pCurveOnSurfaceObject);7 `4 K3 ^0 O5 s: n8 j/ U7 K+ B
NXOpen::Spline *spline1 = dynamic_cast<NXOpen::Spline *>(CurveOnSurfaceFeatures[0]->FindObject("CURVE 1"));
7 @* A& r; ?8 X: M/ ^6 |& c$ ` NXOpen::Curve *nullNXOpen_Curve(NULL);
) c% ?6 @  y/ X: D std::vector<NXOpen::SelectionIntentRule *> rules(1);
2 f' Y* D/ Z2 }: M rules[0] = workPart->ScRuleFactory()->CreateRuleCurveFeatureTangent(CurveOnSurfaceFeatures, spline1, nullNXOpen_Curve, false, 0.001, 0.05);0 Q" f9 M1 G- Z6 i9 B- ?3 g
m_pTextBuilder->OnFacePlacementProfile()->AllowSelfIntersection(true);
3 k  J( [. G2 z2 |5 u NXOpen::NXObject *nullNXOpen_NXObject(NULL);# o) K% ~& W" ]7 u
NXOpen:oint3d helpPoint1(m_pnPoint[3], -m_pnPoint[4], m_pnPoint[5]);) ]# ?2 C- g% U* G" ~8 i+ U1 r
m_pTextBuilder->OnFacePlacementProfile()->AddToSection(rules, spline1, nullNXOpen_NXObject, nullNXOpen_NXObject, helpPoint1,- |: c9 \, g% z- o4 X
  NXOpen::Section::ModeCreate, false);# e9 W$ [6 y3 n7 O8 f
- d7 P" P; s! ?, Z8 j5 h
if (bools)! h. }( H+ y+ W
{
4 `& x+ M2 L1 F/ z) P4 u1 J  
* O* }9 n, V% z, p6 f$ Z) n  if (m_pTextBuilder->Validate())* F4 m. ~" G/ M9 w4 u
  {
/ j* A- n: y% v1 g   m_pTextObject = m_pTextBuilder->Commit();/ p/ i. m; \7 I9 n0 f6 e7 P! [
   m_pTextBuilder->Destroy();2 Z, k) y2 k) ^- y* d
   m_pTextBuilder = NULL;3 R  O' h1 m6 V" [! A" F
   changeFontType->SetSensitivity(UF_STYLER_NO_SUB_INDEX, false);8 o/ N5 u- x$ t# _5 w
   changeStringContent->SetSensitivity(false);
  _% ?/ t8 ~7 q4 P/ N- G0 T   changeRealScale->SetSensitivity(false);- J2 v2 [- l1 Z" l4 A
  }
; |0 B: t) D: q/ N( I, e  
, c* S/ J' c' m8 r$ X1 g }" P, T6 d# J( b6 w
else7 _9 h9 `2 W) d! e; v8 J3 U* L
{  8 p6 ^/ r0 `  r; B6 D3 e4 W
// . w0 l$ T& g& n  w- u+ _& e$ [
  if (m_pTextBuilder->Validate())# ?3 |3 L1 o, r. D, i3 j
  {3 c8 N: u3 R$ z( c+ N) _0 w( q8 U
   m_pTextBuilder->Commit();8 b0 x8 Y/ f0 t% @4 H7 ^( ^
   UF_SO_set_visibility_option(m_pTextBuilder->Tag(), UF_SO_visible);
8 P( v! ]9 A7 W6 t! H: V( [0 S   m_pTextBuilder->Destroy();
* U2 m; e% u" |6 F4 D" _5 X4 o: Z   m_pTextBuilder = NULL;
+ P# A4 Y" C  V# t) j  }
7 ^5 ]6 I2 `+ y' R! `1 M } 5 t4 g; H! f5 y. i5 K! r; z" x5 n$ x# _

' k% v! G; f$ K+ z3 m9 n7 j# v}我想实现一个字体预览效果 ,望有空的前辈指导指点!!!!
' z7 m8 {1 }& r/ ?, @" V6 a: B
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

全部回复5

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82170
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会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了.设置 撤销操作即可
2 T# o6 ?5 F4 WtheSession->SetUndoMark();        * l* R# p: l5 W: \. s8 T
theSession->UndoToMark();
# F& J4 ?9 i$ Y% CtheSession->DeleteUndoMark();
; J6 Y3 N# j5 i; X, ~8 x) O3 U这样是没问题的,速度又很快.
! N' k0 y+ i1 g9 L) k- J& }4 H但是问题又来了:
, @2 Y% Z  h1 F- \- w  N& G* h: ?; ]在拉伸的时候出现 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:079 O. o. r9 h0 J7 k5 y
...嘿嘿 我知道如何解决了 ,最后双向拉伸就好了 这是布尔运算造成的...

: i) {2 s: r1 t: u& o" q' ?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
; r; _8 {/ u: p: h这个是不可行的,commit会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了. ...

3 p3 P! a( }1 p  ]7 }! J要预览的代码你放在哪里,我放在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二次开发专题模块培训报名开始啦

    我知道了