|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
我是新人 想用TextBuilder辅助实现刻字功能,附上我自己克隆journal 的字体处理代码,还在修改中:
, u4 Y0 L% Q. L) W9 m6 W& e0 T$ ]
# K9 M6 O+ i- y! A9 N7 \void Letter::textProcess(const char * fonTContent, char* fontType, double& wScale,bool bools)) z% a) u/ q3 H, l6 d
{
/ T5 M$ m3 n# w0 r8 I/ k if (m_pTextBuilder == NULL)
4 G# N8 Q8 K* b; t: m m_pTextBuilder = m_pTextBuilder = workPart->Features()->CreateTextBuilder(m_pNullNXOpen_Features_Texts);% X& j. |8 `/ d. H/ T, w0 U
int i = 0;
+ @* j7 M. C+ V/ s/ m4 f/ L! k" V9 t( ~! O" K/ u( G
m_pTextBuilder->SetFontStyle(NXOpen::Features::TextBuilder::FontStyleOptions::FontStyleOptionsRegular);
7 A: O6 f+ p0 _: t2 z m_pTextBuilder->SetOrientationMethod(NXOpen::Features::TextBuilder::OrientationMethodOptions::OrientationMethodOptionsNatural);
, A. B/ o2 [1 d- c5 Q NXOpen::Features::TextBuilder::ScriptOptions characterSet;
6 B5 A. V6 x x; y1 Z' y. x if (fontType[1] >= 'A'&&fontType[1] <= 'z')
4 I7 {- D3 A! p4 z: `! h+ ~. j* D characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsWestern;: S( ]% n+ ] w! b3 L' S
else
: k6 Y( n3 B+ ~1 \1 K$ v/ F0 } characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312;7 c# ?/ h- k; l3 b
i = 0;
) c, u: W0 W0 C, L2 e while (1)1 r9 }. w! Y% J5 g# w
{
8 Z$ Y0 e- K5 X- h if (fontContent == 0) break;4 ~ _/ U1 u. t
if (fontContent & 0x80)
" O p& k; h- M# U% y if (fontContent[i + 1] & 0x80)
" o6 a' s( J$ ]6 r( W7 d1 w0 r if (characterSet != NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312)) x( k% }* Y' h9 e: S' R( I
{
8 I/ K7 x; j5 H( l uc1601("含有汉字,选择的字符集可能不支持汉字而导致系统提示出错!!!", 1);& K6 p5 q P p0 D4 Z" h+ \
break;
8 V! U+ N; B C* l! b0 {5 b$ J }5 C9 t$ Z k8 @0 m4 v3 l) {
i++;% i9 J2 c# H: P$ R/ T, j' P
}
; e* R' L- U) I6 y9 P m_pTextBuilder->SetTextString(fontContent);- F; I# a3 x c# Q) [
m_pTextBuilder->SelectFont(fontType, characterSet);$ `4 x F1 v l: T q$ O
m_pTextBuilder->SetCanUseKerningSpaces(true);
% X% z `0 p9 f7 b2 y7 j; a m_pTextBuilder->SetCanReverseIntersectionCurve(true);
, m+ ?7 J( { f7 w
& l' S6 c6 K- K; @1 t NXOpen: irection * orientationVector = workPart->Directions()->CreateDirection(Point3d(m_pnPoint[0], m_pnPoint[1], m_pnPoint[2]),+ Y, d6 u$ c! ?
Vector3d((m_pnPoint[0] - m_pnPoint[6]), (m_pnPoint[1] - m_pnPoint[7]), (m_pnPoint[2] - m_pnPoint[8])),( Y: L2 N7 y8 Z j7 A( c9 K
SmartObject::UpdateOption::UpdateOptionWithinModeling);
3 L! f3 F5 A3 g% ~. N m_pTextBuilder->SetOrientationVector(orientationVector);; |( |8 A$ T$ l# b* {1 e
. Y) u! E( `8 p# l
m_pTextBuilder->SetType(NXOpen::Features::TextBuilder::TypesOnFace);
5 d/ M% X* l% B) ]5 [ m_pTextBuilder-> lanarFrame()->SetAnchorLocation(NXOpen::GeometricUtilities::RectangularFrameBuilder::AnchorLocationTypeBottomCenter);
, l0 ~6 R+ { }# S7 M& ?0 P
% W; W" c+ O; v# K% R9 T; d i = strlen(fontContent);
0 n$ k \) a& z. M& T char buf[256] = { 0 };6 `# y8 w3 p. y, E
sprintf(buf, "%f", i * 10 * (wScale / 50.0));
% C/ E( d" ?3 K ` m_pTextBuilder-> lanarFrame()->Length()->SetRightHandSide(buf);
5 Y/ K' V( H$ w6 u) Q sprintf(buf, "%f", 10 * (wScale / 50.0));
+ ~1 }/ d' C+ t& v9 S* s/ @ m_pTextBuilder-> lanarFrame()->Height()->SetRightHandSide(buf);8 e& W- h9 ~: W# [+ m! U
m_pTextBuilder-> lanarFrame()->Shear()->SetRightHandSide("0");
5 f* Q3 P8 I' a+ Z- f- { ?5 o9 v
9 _: r6 b" n, v3 ~- T0 |* C) g) } m_pTextBuilder->FrameOnPath()->AnchorPosition()->SetParameterUsed(false);% R8 ]/ X$ L- P
m_pTextBuilder->FrameOnPath()->Offset()->SetRightHandSide("0");
: i+ D w6 g% ^. \1 r0 p: N; ~ m_pTextBuilder->FrameOnPath()->Length()->SetRightHandSide("5.25771270972214");6 d. E! u. i* p, ~
m_pTextBuilder->FrameOnPath()->Height()->SetRightHandSide("3.1");% a' _2 z+ Q G
m_pTextBuilder->FrameOnPath()->AnchorPosition()->Expression()->SetRightHandSide("50");
) N( d: T8 ?" p/ `" m0 a
" q6 N; u8 F: e! H std::vector<NXOpen::Face *> boundaryFaces2(0);
; e0 {3 m+ G8 i6 x) u4 k NXOpen::FaceTangentRule *faceTangentRule2 = workPart->ScRuleFactory()->CreateRuleFaceTangent(m_pface, boundaryFaces2, 0.05);- ~; B+ J$ B: t9 M) a* L
std::vector<NXOpen::SelectionIntentRule *> rules2(1);9 R O3 S+ {- c1 Y1 H6 `' c
rules2[0] = faceTangentRule2;4 O) m2 r# E# c' d7 Q
m_pTextBuilder-> lacementFaces()->ReplaceRules(rules2, false);
* r6 x4 H$ x W3 b% v
/ \* @) m9 K# U0 L, }6 P0 x# C, w m_pTextBuilder->OnFacePlacementProfile()->SetAllowedEntityTypes(NXOpen::Section::AllowTypesOnlyCurves);
# L% M1 K7 @9 Q+ f std::vector<NXOpen::Features::Feature *> CurveOnSurfaceFeatures(1);6 t: N+ C( S, F: x: w k
CurveOnSurfaceFeatures[0] = dynamic_cast<NXOpen::Features::CurveOnSurface *>(m_pCurveOnSurfaceObject);
8 e. s% V! ^& ~$ q( S NXOpen::Spline *spline1 = dynamic_cast<NXOpen::Spline *>(CurveOnSurfaceFeatures[0]->FindObject("CURVE 1"));
- h) o7 Y5 N6 m: v2 a8 h- ? NXOpen::Curve *nullNXOpen_Curve(NULL);
9 q1 a+ Z# c8 q9 T; O std::vector<NXOpen::SelectionIntentRule *> rules(1);
! Z' {' r6 X. B, s% V6 f) @2 o rules[0] = workPart->ScRuleFactory()->CreateRuleCurveFeatureTangent(CurveOnSurfaceFeatures, spline1, nullNXOpen_Curve, false, 0.001, 0.05);6 T; O+ h* U5 M, n
m_pTextBuilder->OnFacePlacementProfile()->AllowSelfIntersection(true);
/ X+ e2 u- q$ c) o: H2 f4 L NXOpen::NXObject *nullNXOpen_NXObject(NULL);
& E6 V4 c7 D$ N k% O' c NXOpen: oint3d helpPoint1(m_pnPoint[3], -m_pnPoint[4], m_pnPoint[5]);
0 F- h0 ]& N2 C6 K% D m_pTextBuilder->OnFacePlacementProfile()->AddToSection(rules, spline1, nullNXOpen_NXObject, nullNXOpen_NXObject, helpPoint1,
' U9 l, V5 A. L4 n; I+ N NXOpen::Section::ModeCreate, false);+ b2 }5 B0 F7 A) I/ [
$ F- Z6 |- ~9 K q3 m+ e0 w" r
if (bools)
" X/ E2 p6 p, k* G {
' g6 i: p3 B, _$ ^. j9 P
: q& T" R: D# z, \8 H if (m_pTextBuilder->Validate())5 v4 B) H0 ?/ C* f# z; I. [
{
1 ]9 {4 |. k+ _; ^ v3 Q, J m_pTextObject = m_pTextBuilder->Commit();
/ D( S) U n) ?6 P, } m_pTextBuilder->Destroy();0 K: M& u4 A: }# q8 ]. }3 T2 `" i$ Y- x
m_pTextBuilder = NULL;6 t' K9 ?* D( U; j ~
changeFontType->SetSensitivity(UF_STYLER_NO_SUB_INDEX, false);
5 ]: `, m8 Y$ _0 @) w7 U$ J% P changeStringContent->SetSensitivity(false);9 [2 M6 l' } c3 p9 V+ F: u6 Y9 }
changeRealScale->SetSensitivity(false);5 T4 [" L- M+ J$ L( m/ G* U1 v- W
}2 ^, ^( o& x; w5 M0 W u
8 s7 y- P: R4 Z% c. Q) R }
P" }* V5 y) p0 o7 A! V else
7 J, F' i% T6 C. T4 ? { ) J' y6 M4 s, h4 _4 |3 \* v
//
# } n# h3 Z* u' c if (m_pTextBuilder->Validate())2 g' w* `" J. Q
{ G! m- l! J/ n0 ?
m_pTextBuilder->Commit();
1 C1 ]: V/ F0 H; N% F UF_SO_set_visibility_option(m_pTextBuilder->Tag(), UF_SO_visible);
* D O; Y6 \# l. F( M3 H# J V m_pTextBuilder->Destroy();
7 ^8 ~2 E7 r" h Z% v3 o m_pTextBuilder = NULL;, R1 [0 J$ k" d' U- C
}( j$ X7 ]1 ^4 I; Z" x
}
* _3 q# w# M8 [( }. ` * q& i% z1 v( M' O: M# v
}我想实现一个字体预览效果 ,望有空的前辈指导指点!!!!
3 A2 l9 M |: @4 Q& O; X/ D' C. s# w |
|