|
浮游
发表于 2015-8-25 11:30:57
|阅读模式
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
我是新人 想用TextBuilder辅助实现刻字功能,附上我自己克隆journal 的字体处理代码,还在修改中:
% t* u) _: J* y$ c/ S" T6 ]+ f: e0 n/ U
void Letter::textProcess(const char * fonTContent, char* fontType, double& wScale,bool bools)
) m0 |! O0 r" O( p# T{
. w* r9 {" N5 k+ @$ O if (m_pTextBuilder == NULL)* |4 U8 J: g% P; n( D2 H
m_pTextBuilder = m_pTextBuilder = workPart->Features()->CreateTextBuilder(m_pNullNXOpen_Features_Texts);' q- `# g0 E! a- H* J5 C! v
int i = 0;
/ U; X0 ? R ]& R; O v0 E2 o" }% k, f5 T" [
m_pTextBuilder->SetFontStyle(NXOpen::Features::TextBuilder::FontStyleOptions::FontStyleOptionsRegular);4 {% Y, r+ Q+ X& e2 y3 O
m_pTextBuilder->SetOrientationMethod(NXOpen::Features::TextBuilder::OrientationMethodOptions::OrientationMethodOptionsNatural);8 S6 h) Z% _8 v7 r- [8 M
NXOpen::Features::TextBuilder::ScriptOptions characterSet;
$ H8 G* q- ?$ G% e- S& L! e if (fontType[1] >= 'A'&&fontType[1] <= 'z')
2 e( j1 I/ \6 s4 [4 p' c characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsWestern;
$ |3 C0 h7 u! y) o1 J6 x else
0 M' }7 r6 n5 y" M characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312;
4 ` d- m& ^4 Y3 y3 s7 A3 q i = 0;
9 X* Z6 q k& |( V X# [! v4 q while (1)0 H1 T# U f0 X* [9 l
{# W* L1 n, L R9 q6 i% |( I
if (fontContent == 0) break;* @/ S5 R4 v- `
if (fontContent & 0x80)* d7 ?8 h y5 B0 _2 @' \0 w
if (fontContent[i + 1] & 0x80)+ B8 n- K2 |: Q0 t
if (characterSet != NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312)
, g$ @9 Z' w' A" s; A ?6 N {9 z& ]; R5 r1 m% z7 [# e7 ~8 h0 _
uc1601("含有汉字,选择的字符集可能不支持汉字而导致系统提示出错!!!", 1);8 G' k; G& d1 m$ h. u8 h% P& W3 z) f# W
break;
V/ u4 P5 Q, |( h( d( S2 Z2 W0 t }7 C3 N7 g# {! ?* I
i++;# i' ]/ X1 a1 b* _
}
. A$ C9 _* u7 L, a$ ? m_pTextBuilder->SetTextString(fontContent);( L( ?8 \. e% G# t/ t) \% G9 M$ U
m_pTextBuilder->SelectFont(fontType, characterSet);
$ n' u, D/ n0 I$ P7 A* G! x m_pTextBuilder->SetCanUseKerningSpaces(true);
! P' @& F8 d5 u) J1 O m_pTextBuilder->SetCanReverseIntersectionCurve(true);
+ i* e8 M7 C( {% i6 l: f8 |' B. c4 Z
NXOpen: irection * orientationVector = workPart->Directions()->CreateDirection(Point3d(m_pnPoint[0], m_pnPoint[1], m_pnPoint[2]),2 r W. A3 U( R/ u% ~$ a( E1 ]
Vector3d((m_pnPoint[0] - m_pnPoint[6]), (m_pnPoint[1] - m_pnPoint[7]), (m_pnPoint[2] - m_pnPoint[8])),
0 B- o- J3 E7 `0 \, i6 E. W, A SmartObject::UpdateOption::UpdateOptionWithinModeling);
0 Z6 e4 b+ p# Q& y' e- r& ` m_pTextBuilder->SetOrientationVector(orientationVector);
) f# y9 z9 t0 I# P9 E1 r
; ~* C5 D9 ^! R* C, O+ E g; ? m_pTextBuilder->SetType(NXOpen::Features::TextBuilder::TypesOnFace);- q H' }% F! d
m_pTextBuilder-> lanarFrame()->SetAnchorLocation(NXOpen::GeometricUtilities::RectangularFrameBuilder::AnchorLocationTypeBottomCenter);7 Y! w8 F- Q% x) r
/ K# |) s& `8 d3 a i = strlen(fontContent);. T0 f# S" A. t4 l
char buf[256] = { 0 };4 D* u5 h' `5 }
sprintf(buf, "%f", i * 10 * (wScale / 50.0));
1 {/ f3 {1 e9 i+ h% @; L$ z$ S m_pTextBuilder-> lanarFrame()->Length()->SetRightHandSide(buf);
4 [$ G2 e# n: s6 q$ S* F sprintf(buf, "%f", 10 * (wScale / 50.0));
; B3 P' a/ Z0 K# {9 [ m_pTextBuilder-> lanarFrame()->Height()->SetRightHandSide(buf);
. o2 i" s# b4 q6 x9 C m_pTextBuilder-> lanarFrame()->Shear()->SetRightHandSide("0");
2 m5 B0 ?, L# M( Y l+ A) z% |5 i9 H& \7 _ }8 R% T" B
m_pTextBuilder->FrameOnPath()->AnchorPosition()->SetParameterUsed(false);. F" \0 Z4 K3 v5 h
m_pTextBuilder->FrameOnPath()->Offset()->SetRightHandSide("0");
4 |- R" }: G) N- F m_pTextBuilder->FrameOnPath()->Length()->SetRightHandSide("5.25771270972214");) ~& v! v! A% s J- z' ^% G
m_pTextBuilder->FrameOnPath()->Height()->SetRightHandSide("3.1");
3 T3 \; t! X% q& C3 y( ]5 ] m_pTextBuilder->FrameOnPath()->AnchorPosition()->Expression()->SetRightHandSide("50");
, f2 O' O! V2 q( Z, W& @% p
, N7 O0 Y5 @7 Z& E! i std::vector<NXOpen::Face *> boundaryFaces2(0);
% e# g2 U8 E1 X$ r NXOpen::FaceTangentRule *faceTangentRule2 = workPart->ScRuleFactory()->CreateRuleFaceTangent(m_pface, boundaryFaces2, 0.05);
2 u* n2 {' K! e" }* \2 B$ f8 _( ^ std::vector<NXOpen::SelectionIntentRule *> rules2(1);
`6 C; r( R1 t" E+ Y rules2[0] = faceTangentRule2;' a' [7 G! [' R7 U' _3 B% [
m_pTextBuilder-> lacementFaces()->ReplaceRules(rules2, false);
( A! }7 x# v5 L5 d( E3 c7 P, h! n; A3 K3 Q# `- E- p9 `2 s
m_pTextBuilder->OnFacePlacementProfile()->SetAllowedEntityTypes(NXOpen::Section::AllowTypesOnlyCurves);
n1 o# ~; z, q& m7 X std::vector<NXOpen::Features::Feature *> CurveOnSurfaceFeatures(1);; ^' F3 e* P% o) j- N
CurveOnSurfaceFeatures[0] = dynamic_cast<NXOpen::Features::CurveOnSurface *>(m_pCurveOnSurfaceObject);
# s* O1 L+ M7 |3 r NXOpen::Spline *spline1 = dynamic_cast<NXOpen::Spline *>(CurveOnSurfaceFeatures[0]->FindObject("CURVE 1"));3 Z4 w$ C5 {7 x' j c
NXOpen::Curve *nullNXOpen_Curve(NULL);& t0 I' P( b( g) L
std::vector<NXOpen::SelectionIntentRule *> rules(1);1 o6 f1 j+ C* W& T, O) R2 j
rules[0] = workPart->ScRuleFactory()->CreateRuleCurveFeatureTangent(CurveOnSurfaceFeatures, spline1, nullNXOpen_Curve, false, 0.001, 0.05);
( M8 J# ]% J+ [% A3 _ m_pTextBuilder->OnFacePlacementProfile()->AllowSelfIntersection(true);% l9 U8 J) ?+ `# ?6 R* U
NXOpen::NXObject *nullNXOpen_NXObject(NULL);
) N, J& `- S" p- d" }7 ^% ~, n NXOpen: oint3d helpPoint1(m_pnPoint[3], -m_pnPoint[4], m_pnPoint[5]);8 g+ e6 _$ i5 c& d- Q- u
m_pTextBuilder->OnFacePlacementProfile()->AddToSection(rules, spline1, nullNXOpen_NXObject, nullNXOpen_NXObject, helpPoint1,8 D; C- N! Q& E0 ~+ k/ X$ A; R
NXOpen::Section::ModeCreate, false);
r5 F' V9 y1 ~/ _1 j+ b8 u3 n0 y! ^0 g( a. ^. N
if (bools)2 E; L# v, D) \4 ]% O z
{% }$ K# G5 @! I% F0 h7 E
B0 V+ B6 o4 k% G3 Q' G
if (m_pTextBuilder->Validate())
. R, T( q! n. _+ j {
2 ?4 L. W" X& Z m_pTextObject = m_pTextBuilder->Commit();/ ~+ \) A6 I& r" p( @5 s; I
m_pTextBuilder->Destroy();
$ I& K0 v& n* v* k, g1 g m_pTextBuilder = NULL;& {& g' e4 f2 S( }, g) s8 N
changeFontType->SetSensitivity(UF_STYLER_NO_SUB_INDEX, false);
4 q0 U3 w- B/ U* f1 R changeStringContent->SetSensitivity(false);
8 Y4 k* F% A. d ^ changeRealScale->SetSensitivity(false);
+ E. c+ z+ t2 C* q3 T& W# ~6 X }. p9 W ^8 z7 P k3 J- ?
; d8 l" [, U3 P7 k% t9 d
}3 o7 p9 [3 @1 e' @( b6 X; o
else
3 e9 u1 n* q, q! ] { ' l/ O/ C G3 ~6 H" W# F
// 4 j0 v& L X! j4 ~# m _2 j0 ^
if (m_pTextBuilder->Validate())
V9 u9 U! F3 P' i9 P- i1 n {
- c. u! J* `3 X9 Y G& H m_pTextBuilder->Commit();
3 o7 p5 P7 r3 I) m* l UF_SO_set_visibility_option(m_pTextBuilder->Tag(), UF_SO_visible);; O4 q$ S, P1 J" k
m_pTextBuilder->Destroy();
: \% n( @5 U; g7 e2 f m_pTextBuilder = NULL;
: }" C9 J' d- _/ \$ v1 T* Q }
, M: F3 F: m+ { } " W2 V6 |; H! x' d# V+ g
" K9 I$ W( I: V7 v( K
}我想实现一个字体预览效果 ,望有空的前辈指导指点!!!!
' R; D2 f$ U* t: a4 Q |
|