|
|
浮游
发表于 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 |
|