PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

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

浮游 楼主

2015-8-25 11:30:57

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

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

x
我是新人 想用TextBuilder辅助实现刻字功能,附上我自己克隆journal 的字体处理代码,还在修改中:' b8 a% U+ }- X- T* p5 N, k6 V
- }6 |' U  x( }! [" T8 a
void Letter::textProcess(const char * fonTContent, char* fontType, double& wScale,bool bools)
* x6 q. R( D4 B  V; S0 C/ |{
3 J* J" `. p% p) f if (m_pTextBuilder == NULL)
& d% R: I+ p8 c# l5 Q/ b  m_pTextBuilder = m_pTextBuilder = workPart->Features()->CreateTextBuilder(m_pNullNXOpen_Features_Texts);
, ~" O: T/ y% Y9 \2 y int i = 0;
/ o+ o( R8 n. w9 Y
; G5 B2 D9 }' c6 }$ ?1 {  e% i% A m_pTextBuilder->SetFontStyle(NXOpen::Features::TextBuilder::FontStyleOptions::FontStyleOptionsRegular);2 V$ K& [9 H3 J$ m0 W8 T2 i- r
m_pTextBuilder->SetOrientationMethod(NXOpen::Features::TextBuilder::OrientationMethodOptions::OrientationMethodOptionsNatural);
- o% }5 Z7 X+ a) M8 `$ a: o. s NXOpen::Features::TextBuilder::ScriptOptions characterSet;- c6 |7 ]: [# u" C+ R' |9 W2 V
if (fontType[1] >= 'A'&&fontType[1] <= 'z')5 V, _: j$ Q+ P1 W
  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsWestern;5 I. H9 |8 D) {5 q/ p
else
1 _: j' m3 N3 w: z  characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312;
3 x+ _& p- S* K i = 0;* Y( ?+ A' ?+ j; _7 S
while (1)
; s4 A6 o9 c6 H% _ {9 m  q4 \7 }4 `8 r9 q6 N: J8 a; `, s% M
  if (fontContent == 0) break;3 O& W- r% _* h) n  s
  if (fontContent & 0x80)
  t; k0 X% \# X& p1 a   if (fontContent[i + 1] & 0x80)8 z. x% Z7 u! r! R% r4 Y% {
    if (characterSet != NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312)5 T2 r! q' W# c9 d+ A0 V) {
    {
6 a  _5 L9 V: a0 B& ~     uc1601("含有汉字,选择的字符集可能不支持汉字而导致系统提示出错!!!", 1);
# c- |* h4 F; ^; [     break;
: U) G9 Q9 |7 }9 C0 d, n    }
5 u3 r0 e6 C) v: h+ ?+ m  i++;
6 D. \9 S0 u/ p }
  j$ I, x! ~# d% t: Y7 k m_pTextBuilder->SetTextString(fontContent);
6 Q  Z9 H6 Y' H4 [. U m_pTextBuilder->SelectFont(fontType, characterSet);
+ M2 }3 W! L  ^$ l) m m_pTextBuilder->SetCanUseKerningSpaces(true);1 P: l$ U# z$ x: f9 q2 s6 l9 {, s
m_pTextBuilder->SetCanReverseIntersectionCurve(true);1 y! h! P$ H; o7 M; `  i

8 H- c# f, `  p$ E: b NXOpen:irection * orientationVector = workPart->Directions()->CreateDirection(Point3d(m_pnPoint[0], m_pnPoint[1], m_pnPoint[2]),
8 w# c& E( P& `  Vector3d((m_pnPoint[0] - m_pnPoint[6]), (m_pnPoint[1] - m_pnPoint[7]), (m_pnPoint[2] - m_pnPoint[8])),
" E: u5 w+ A# b* t+ q  SmartObject::UpdateOption::UpdateOptionWithinModeling);
9 r3 d0 W" _! F m_pTextBuilder->SetOrientationVector(orientationVector);6 a% J4 X( ~- V5 M$ Q
4 T& y% l% I- B4 P; z) i. P6 u
m_pTextBuilder->SetType(NXOpen::Features::TextBuilder::TypesOnFace);
. `/ O; O8 e1 E+ m3 t. L3 G m_pTextBuilder->lanarFrame()->SetAnchorLocation(NXOpen::GeometricUtilities::RectangularFrameBuilder::AnchorLocationTypeBottomCenter);, {5 B4 O& _0 q, S" @: \; g
; |8 p+ e' d# [6 N
i = strlen(fontContent);
3 M$ n8 J! a3 U2 Z' _* L# ? char buf[256] = { 0 };
. X( R6 O2 q3 C$ s% j sprintf(buf, "%f", i * 10 * (wScale / 50.0));$ ~8 Q2 f3 _; T2 T- Y
m_pTextBuilder->lanarFrame()->Length()->SetRightHandSide(buf);
4 e* V$ S+ o& S$ O: v sprintf(buf, "%f", 10 * (wScale / 50.0));
* s  H/ T- b6 r9 \% q m_pTextBuilder->lanarFrame()->Height()->SetRightHandSide(buf);- J& n0 _5 z6 D! Y; P
m_pTextBuilder->lanarFrame()->Shear()->SetRightHandSide("0");2 m2 _* g* B: f# d& k

5 e/ Z: d, @! R4 t5 ~, R% c, U m_pTextBuilder->FrameOnPath()->AnchorPosition()->SetParameterUsed(false);
" y2 L$ ?$ e: j m_pTextBuilder->FrameOnPath()->Offset()->SetRightHandSide("0");2 x: |# |3 ^$ _" ]" _- R
m_pTextBuilder->FrameOnPath()->Length()->SetRightHandSide("5.25771270972214");
2 `) Q/ p/ F4 ~/ H' Z' V m_pTextBuilder->FrameOnPath()->Height()->SetRightHandSide("3.1");
' S$ e0 \! u; d8 Z  D m_pTextBuilder->FrameOnPath()->AnchorPosition()->Expression()->SetRightHandSide("50");" S( _4 }; g  F

! L) G( N5 y! B std::vector<NXOpen::Face *> boundaryFaces2(0);" R+ v. J2 S/ {" J: l, X  C5 k
NXOpen::FaceTangentRule *faceTangentRule2 = workPart->ScRuleFactory()->CreateRuleFaceTangent(m_pface, boundaryFaces2, 0.05);
( G. x# U+ [; U1 M; v6 |5 Q1 _ std::vector<NXOpen::SelectionIntentRule *> rules2(1);
4 J, b  W  }* h/ x2 B2 N  k6 W rules2[0] = faceTangentRule2;# c9 f% Y8 C, H5 p: S# ]# `: b
m_pTextBuilder->lacementFaces()->ReplaceRules(rules2, false);
+ q. R6 g+ x" e8 o( e6 v3 \0 s1 i
- _& g8 {% |& h: Y2 A$ y  q m_pTextBuilder->OnFacePlacementProfile()->SetAllowedEntityTypes(NXOpen::Section::AllowTypesOnlyCurves);" ?! w4 j& F& B1 t/ V$ m
std::vector<NXOpen::Features::Feature *> CurveOnSurfaceFeatures(1);
7 g- ^- S, [% ?+ t$ f( j CurveOnSurfaceFeatures[0] = dynamic_cast<NXOpen::Features::CurveOnSurface *>(m_pCurveOnSurfaceObject);$ M8 \& ]2 L7 A( A2 w7 I
NXOpen::Spline *spline1 = dynamic_cast<NXOpen::Spline *>(CurveOnSurfaceFeatures[0]->FindObject("CURVE 1"));
/ }, f7 J/ a8 v, ~+ z4 _& z NXOpen::Curve *nullNXOpen_Curve(NULL);
" J1 o; m' R9 J. V. ]. } std::vector<NXOpen::SelectionIntentRule *> rules(1);
) M7 A5 N  K5 D, v8 J6 Q& b rules[0] = workPart->ScRuleFactory()->CreateRuleCurveFeatureTangent(CurveOnSurfaceFeatures, spline1, nullNXOpen_Curve, false, 0.001, 0.05);& ?/ P$ K) U9 H* o; W! `
m_pTextBuilder->OnFacePlacementProfile()->AllowSelfIntersection(true);
" W* v- I7 p. z$ G0 S  L5 T NXOpen::NXObject *nullNXOpen_NXObject(NULL);
, C% x6 ?' J2 C  {7 w( G, r NXOpen:oint3d helpPoint1(m_pnPoint[3], -m_pnPoint[4], m_pnPoint[5]);
+ G- m4 D1 J# N0 h' P( [- M. u m_pTextBuilder->OnFacePlacementProfile()->AddToSection(rules, spline1, nullNXOpen_NXObject, nullNXOpen_NXObject, helpPoint1,5 x5 \9 V# q/ m9 C0 U: c# {- P
  NXOpen::Section::ModeCreate, false);; X; B1 t: ]9 V% {% K; g

" r" d- m$ S) E, o$ ? if (bools)( g( @0 I8 ~0 Q3 H" [% D* O
{. X1 I% S4 e6 n, N$ Z
  1 v8 ~0 U" o# |* F& R7 j
  if (m_pTextBuilder->Validate())
5 Y. i* k0 ^- G+ ~- ]$ `: A  R  {
% R8 h5 m2 l( Q# u  r) \9 y' H   m_pTextObject = m_pTextBuilder->Commit();4 d6 b" [( `7 X) J+ z
   m_pTextBuilder->Destroy();
! X8 ]1 A3 _( u/ Q, T! I5 m% U- @   m_pTextBuilder = NULL;
- x- Z, t- ?! Q5 L: |   changeFontType->SetSensitivity(UF_STYLER_NO_SUB_INDEX, false);
" w$ G) Z. \4 n. l) S   changeStringContent->SetSensitivity(false);* ~; d  Z: f& l  Q0 D6 @
   changeRealScale->SetSensitivity(false);. J& i7 Q/ ~3 C" y, ~
  }
/ x: q% u& Y* U/ ~1 v  
& n' y7 D& ]3 x }
8 g8 G; G& b* Y5 w. w* v else
) k* j6 o  `: G& a+ R: Y: L# c {  5 J8 o% h( d2 C' K9 h
// . q4 a% `7 B1 a5 y+ r* l
  if (m_pTextBuilder->Validate())4 ?) z8 |' D' G3 D+ w
  {
; }; h. \( B0 |( y$ n" c   m_pTextBuilder->Commit();- [/ N# s* s/ @# b
   UF_SO_set_visibility_option(m_pTextBuilder->Tag(), UF_SO_visible);
- \8 i( _: m- O. A- K7 @   m_pTextBuilder->Destroy();
7 j" S2 S2 U' H; p* ^1 M   m_pTextBuilder = NULL;
( v! O$ [9 w& d( l, ]; V$ n- H  }
7 z. t& a9 s/ M- N6 w } + M4 Z9 J( B) Y: d* T
. G+ w8 D% N: q
}我想实现一个字体预览效果 ,望有空的前辈指导指点!!!!& ^1 f# f; u0 Z
上海点团信息科技有限公司,承接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会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了.设置 撤销操作即可1 b. J! X; r0 }. \) Y) y
theSession->SetUndoMark();        4 S* t  V8 b% g) o, {
theSession->UndoToMark();
0 j# @! h2 W3 ~: YtheSession->DeleteUndoMark();
& u0 `& F- K. C/ D7 m1 _& c4 T这样是没问题的,速度又很快.
8 h% c, \6 R: o但是问题又来了:
" h# w4 w9 N2 Q. `3 L在拉伸的时候出现 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/ c# j& t  E+ ^" q6 o
...嘿嘿 我知道如何解决了 ,最后双向拉伸就好了 这是布尔运算造成的...
; b0 q- `! ~! X. z( \, {3 q
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
: x  o- F; i' B; e1 p3 s2 A# G这个是不可行的,commit会生成一个实体的,这个不是我们想要的结果.其实我发完帖子不就之后就知道如何解决了. ...
0 V1 U9 H" r, a: ?0 b
要预览的代码你放在哪里,我放在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二次开发专题模块培训报名开始啦

    我知道了