|
|
浮游
发表于 2015-8-25 11:30:57
|阅读模式
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
我是新人 想用TextBuilder辅助实现刻字功能,附上我自己克隆journal 的字体处理代码,还在修改中:1 ]/ `2 }% H4 D p: e: G
, D# f( |5 Y7 `1 z4 o
void Letter::textProcess(const char * fonTContent, char* fontType, double& wScale,bool bools)
- y- h' C; W6 L8 [% k3 y# }( x/ G{* ^3 I- u& V7 h K& ^8 C7 V
if (m_pTextBuilder == NULL)
, f/ B6 ^3 J- N" Q m_pTextBuilder = m_pTextBuilder = workPart->Features()->CreateTextBuilder(m_pNullNXOpen_Features_Texts);8 r1 y: {# H% Z$ K1 ^1 P8 W' L
int i = 0;5 u5 ~8 H" q0 g& i
) P% q- ^/ L) ^; U$ D m_pTextBuilder->SetFontStyle(NXOpen::Features::TextBuilder::FontStyleOptions::FontStyleOptionsRegular);* ?! z9 `" L4 f. [! N
m_pTextBuilder->SetOrientationMethod(NXOpen::Features::TextBuilder::OrientationMethodOptions::OrientationMethodOptionsNatural);9 I6 c% B& v2 H1 |/ i3 l
NXOpen::Features::TextBuilder::ScriptOptions characterSet;
! ~( h5 Q- f M/ B# e if (fontType[1] >= 'A'&&fontType[1] <= 'z')
' ]7 v0 g" t7 |5 m8 }% y characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsWestern;
% j, n8 e# A) } else
2 k$ p4 E. \1 X8 f: G characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312;
& C$ d9 u) i) V3 P4 H" n8 o i = 0;7 D+ m0 G9 g! `5 R8 g) ]* k" R
while (1)0 Z5 |# o7 ^- S
{+ J- Y9 Y0 P" g$ \4 q
if (fontContent == 0) break;( s9 H2 j' a9 }3 `" F y* o
if (fontContent & 0x80)0 K1 j7 |, g2 f; ^% ?8 A7 i
if (fontContent[i + 1] & 0x80)% p7 z' y2 i. f$ b
if (characterSet != NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312)
1 j" A. c( R- V2 X( X {
8 g4 N& O# j2 |# {' R uc1601("含有汉字,选择的字符集可能不支持汉字而导致系统提示出错!!!", 1);: H1 B6 \+ @' R
break;
3 F u, m% W: v: K }
0 o2 q" p9 \; H0 N# {& h- l3 ` i++;
* i2 N9 `' k( h" S. o& ~ }- k2 `/ q& ]0 E+ U, z) {: G4 I
m_pTextBuilder->SetTextString(fontContent);
2 w- F; C4 V+ y5 N) o- [. m" r: f2 W m_pTextBuilder->SelectFont(fontType, characterSet);6 ^$ m/ I, r0 t! G" _
m_pTextBuilder->SetCanUseKerningSpaces(true);
; U7 E3 h. L5 U m_pTextBuilder->SetCanReverseIntersectionCurve(true);0 y8 ]+ B# }4 N% [7 t- v
8 W4 J9 \# B) _# F3 A# \
NXOpen: irection * orientationVector = workPart->Directions()->CreateDirection(Point3d(m_pnPoint[0], m_pnPoint[1], m_pnPoint[2]),
0 \- j. |) F4 J! V6 N5 } V Vector3d((m_pnPoint[0] - m_pnPoint[6]), (m_pnPoint[1] - m_pnPoint[7]), (m_pnPoint[2] - m_pnPoint[8])),
# @' `( ~$ S6 Q SmartObject::UpdateOption::UpdateOptionWithinModeling);% e5 G2 A7 d# R9 C9 F
m_pTextBuilder->SetOrientationVector(orientationVector);% @; O3 S3 A4 D7 Z
* N: S( u8 \$ i8 z/ r m_pTextBuilder->SetType(NXOpen::Features::TextBuilder::TypesOnFace);
' r/ [" x; L5 b* K( I m_pTextBuilder-> lanarFrame()->SetAnchorLocation(NXOpen::GeometricUtilities::RectangularFrameBuilder::AnchorLocationTypeBottomCenter);
( {$ j9 h) f3 v7 `# o7 v5 Q
! h* v4 l/ g9 U6 w, r' e i = strlen(fontContent);) E4 W; u8 \" k# [
char buf[256] = { 0 };
7 F2 f; L! Z3 o3 {+ o sprintf(buf, "%f", i * 10 * (wScale / 50.0));
# r7 s+ w' ?4 Z2 m" n3 Q m_pTextBuilder-> lanarFrame()->Length()->SetRightHandSide(buf); B3 ]9 f* Y& i
sprintf(buf, "%f", 10 * (wScale / 50.0));
' v, y4 E0 v1 o) s6 N% o m_pTextBuilder-> lanarFrame()->Height()->SetRightHandSide(buf);
# a" R9 m- @6 K m_pTextBuilder-> lanarFrame()->Shear()->SetRightHandSide("0");
6 I5 s" ]* P# B- ~# _0 j" K5 w3 j1 ^7 {$ G1 w, Z
m_pTextBuilder->FrameOnPath()->AnchorPosition()->SetParameterUsed(false);
+ p' }) _' }; [ m_pTextBuilder->FrameOnPath()->Offset()->SetRightHandSide("0");* g7 x- @$ H% E3 r
m_pTextBuilder->FrameOnPath()->Length()->SetRightHandSide("5.25771270972214");. t# s' D+ V4 d* ~: ?$ M
m_pTextBuilder->FrameOnPath()->Height()->SetRightHandSide("3.1");
$ d0 [; O- a7 Q1 ~ \ m_pTextBuilder->FrameOnPath()->AnchorPosition()->Expression()->SetRightHandSide("50");& J8 k! S L; ^9 _$ P
2 p% ?- s8 n% W9 o* f+ G std::vector<NXOpen::Face *> boundaryFaces2(0);
/ Z$ X8 ~" s3 {- ?9 t [ NXOpen::FaceTangentRule *faceTangentRule2 = workPart->ScRuleFactory()->CreateRuleFaceTangent(m_pface, boundaryFaces2, 0.05);
) o, @4 d7 t1 a [! e std::vector<NXOpen::SelectionIntentRule *> rules2(1);
6 X* T, G1 j" v6 D% A3 Q( e rules2[0] = faceTangentRule2;4 s6 D0 _6 M, S3 g( E
m_pTextBuilder-> lacementFaces()->ReplaceRules(rules2, false);& t. y; W4 b+ ~( b: O
4 j0 j( M: `9 @! d$ P
m_pTextBuilder->OnFacePlacementProfile()->SetAllowedEntityTypes(NXOpen::Section::AllowTypesOnlyCurves);
: Y# {. _) j6 b! Y7 X7 _% Q' l std::vector<NXOpen::Features::Feature *> CurveOnSurfaceFeatures(1);
. o+ v* \, c+ s2 V CurveOnSurfaceFeatures[0] = dynamic_cast<NXOpen::Features::CurveOnSurface *>(m_pCurveOnSurfaceObject);: a" @3 M3 @) Z7 v! M
NXOpen::Spline *spline1 = dynamic_cast<NXOpen::Spline *>(CurveOnSurfaceFeatures[0]->FindObject("CURVE 1"));% p3 s, X% V5 g# }& G+ O
NXOpen::Curve *nullNXOpen_Curve(NULL);
+ Y% `' B8 X ~ f2 z std::vector<NXOpen::SelectionIntentRule *> rules(1);% U9 z8 z' P4 B, u5 G6 D6 t/ k
rules[0] = workPart->ScRuleFactory()->CreateRuleCurveFeatureTangent(CurveOnSurfaceFeatures, spline1, nullNXOpen_Curve, false, 0.001, 0.05);2 B- J i* u$ v" o' S
m_pTextBuilder->OnFacePlacementProfile()->AllowSelfIntersection(true);6 z" x" R5 J. k9 s7 H7 M
NXOpen::NXObject *nullNXOpen_NXObject(NULL);
# P, I7 G# ]' S+ t5 Y* x NXOpen: oint3d helpPoint1(m_pnPoint[3], -m_pnPoint[4], m_pnPoint[5]);' u! O; I3 H! ]: i
m_pTextBuilder->OnFacePlacementProfile()->AddToSection(rules, spline1, nullNXOpen_NXObject, nullNXOpen_NXObject, helpPoint1,0 L3 {7 y) X) O
NXOpen::Section::ModeCreate, false);% x, l8 Q+ }* h2 H. J: m. ~3 c; k, ^
4 m: L! y/ u2 R) l if (bools)
5 f( j9 C$ [1 i# Q4 ?% a, V( R X {
2 r( F/ D- V! F1 \$ r
, q8 b, u8 v# I! t if (m_pTextBuilder->Validate())6 z. J) P& W+ B7 h9 `
{- |# p. o# R9 e* M: A: [% i* B3 B
m_pTextObject = m_pTextBuilder->Commit();
: u2 C: f! q" y# n* V* o; j% F h m_pTextBuilder->Destroy();
" w& t# } J( S# S, p: ~0 t m_pTextBuilder = NULL;+ m) k9 F3 ^- D) h! e2 C8 X
changeFontType->SetSensitivity(UF_STYLER_NO_SUB_INDEX, false);! v, Q# X/ j/ K3 B
changeStringContent->SetSensitivity(false);
0 P& Z, e8 y2 s changeRealScale->SetSensitivity(false);% r! n: ]" k3 O$ d# y8 T
}
1 |8 t3 U1 |" f0 S4 y4 Y
7 N4 B" ?2 b' U" K, t7 ` }
& X' y X8 j8 Y R else. s$ \: P: P. m4 J) ^
{ 5 a- m7 \( S" C
// + r" z6 \3 p2 a$ A; [7 D
if (m_pTextBuilder->Validate())# E5 n7 m3 [" |8 D: N
{ B: s9 Z1 U) w& B4 X, ?
m_pTextBuilder->Commit();
9 O/ t: p6 W& Q: ? z- Y& Q UF_SO_set_visibility_option(m_pTextBuilder->Tag(), UF_SO_visible);& }7 J" b' N9 r8 J
m_pTextBuilder->Destroy();* G# \" }. z/ J7 b* Y& R. F
m_pTextBuilder = NULL;
; N2 X" W. q6 | t% s# ~2 w }
+ s3 M' m2 d F- I }
0 }! i' x' m( B" T( }! r S. P, t8 i8 ?; o+ H
}我想实现一个字体预览效果 ,望有空的前辈指导指点!!!!
1 \( C( k4 c& S: h& n% p6 o |
|