|
浮游
发表于 2015-8-25 11:30:57
|阅读模式
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
我是新人 想用TextBuilder辅助实现刻字功能,附上我自己克隆journal 的字体处理代码,还在修改中:
4 A* q U5 e$ v9 F0 V1 ~; K3 E* K- c
2 s2 y7 A9 c2 a- T/ f( N. Tvoid Letter::textProcess(const char * fonTContent, char* fontType, double& wScale,bool bools)
0 ~8 M4 I; q, u3 r% T{
) |2 R9 U6 v! S# g if (m_pTextBuilder == NULL)
$ w- R. N7 n/ q% b/ g. @ m_pTextBuilder = m_pTextBuilder = workPart->Features()->CreateTextBuilder(m_pNullNXOpen_Features_Texts);1 t# i9 `) {- M- G; [3 U
int i = 0;
& p1 D( d- T0 ?, f" E7 n
, ~1 r- ^# n8 }# ` m_pTextBuilder->SetFontStyle(NXOpen::Features::TextBuilder::FontStyleOptions::FontStyleOptionsRegular);5 f& D, W0 k; w3 g. A
m_pTextBuilder->SetOrientationMethod(NXOpen::Features::TextBuilder::OrientationMethodOptions::OrientationMethodOptionsNatural);) W3 o; M% |: @2 G4 }" R
NXOpen::Features::TextBuilder::ScriptOptions characterSet;
+ L$ I! r+ \0 i7 } if (fontType[1] >= 'A'&&fontType[1] <= 'z')
4 c+ @+ I, ?. A characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsWestern;, |+ z+ [- s* N, J
else U; x- r. A' ]& _0 y$ w _0 |( X
characterSet = NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312;: l/ T# J& Q' l* T# B) h# n. Y
i = 0;
) D5 K, L, m( Y8 h while (1)
" K' E' @+ S7 f- _ {
& W+ r! W7 R. H4 L- t* Q, H if (fontContent == 0) break;
" L7 Q9 X$ B4 ?$ [ if (fontContent & 0x80)0 s! U! q6 `# y- }) e0 F
if (fontContent[i + 1] & 0x80)2 r. h( A }% @! o) b( x9 r: a
if (characterSet != NXOpen::Features::TextBuilder::ScriptOptions::ScriptOptionsGb2312)4 ~% R! h. A5 e# ?, d+ g t- C
{: m' v0 w0 C5 `
uc1601("含有汉字,选择的字符集可能不支持汉字而导致系统提示出错!!!", 1);
2 j/ B2 B- h9 }: u- p- w, A& \4 n) j break; J9 U; _1 X0 R8 P. r$ A2 j
}
2 @1 F" `/ N. y0 ~; m' ? i++;
$ m9 l5 \8 s6 @ ?0 S# M! C }
7 L1 h7 ?2 |" V+ W m_pTextBuilder->SetTextString(fontContent);8 N, X: u; [1 w! r) @9 q1 \) h( u
m_pTextBuilder->SelectFont(fontType, characterSet);3 `9 k3 o( ]; S' ]) k
m_pTextBuilder->SetCanUseKerningSpaces(true);7 B% N+ R+ K s7 g
m_pTextBuilder->SetCanReverseIntersectionCurve(true);/ V5 b/ ]5 e2 y8 ?2 O
- L o$ U& D" o3 L& R s NXOpen: irection * orientationVector = workPart->Directions()->CreateDirection(Point3d(m_pnPoint[0], m_pnPoint[1], m_pnPoint[2]),7 G: R' s5 a4 B2 {1 O
Vector3d((m_pnPoint[0] - m_pnPoint[6]), (m_pnPoint[1] - m_pnPoint[7]), (m_pnPoint[2] - m_pnPoint[8])),' d. J3 C$ O+ p* p5 T- I
SmartObject::UpdateOption::UpdateOptionWithinModeling);
' h) O" f/ M5 P" | m_pTextBuilder->SetOrientationVector(orientationVector);
" q- L, J- M: b8 d
3 e$ M+ R( x' |' j9 P* @ m_pTextBuilder->SetType(NXOpen::Features::TextBuilder::TypesOnFace);0 N* v5 x- x, c6 C9 G8 z5 u2 Z
m_pTextBuilder-> lanarFrame()->SetAnchorLocation(NXOpen::GeometricUtilities::RectangularFrameBuilder::AnchorLocationTypeBottomCenter);
5 b7 x1 Y7 Q: l, I" x0 [8 i
" k9 v' [" D8 ^5 r i = strlen(fontContent);# j0 \' n) k1 O: P
char buf[256] = { 0 };
5 Y$ ^2 A$ }3 b- m6 {1 O# r7 U sprintf(buf, "%f", i * 10 * (wScale / 50.0));6 d2 ?, ]2 `' e& B, Y/ V
m_pTextBuilder-> lanarFrame()->Length()->SetRightHandSide(buf);
7 l! j# {7 t1 C! o3 U6 P B sprintf(buf, "%f", 10 * (wScale / 50.0));. B. K, j/ C H% e W/ l+ j
m_pTextBuilder-> lanarFrame()->Height()->SetRightHandSide(buf);9 m/ N/ M; m7 J" C3 v! Z
m_pTextBuilder-> lanarFrame()->Shear()->SetRightHandSide("0");- s4 ~6 f* A1 u5 Z0 S
+ r% U$ a7 x0 d1 b/ V m_pTextBuilder->FrameOnPath()->AnchorPosition()->SetParameterUsed(false);1 B, f5 O! T K0 w
m_pTextBuilder->FrameOnPath()->Offset()->SetRightHandSide("0");
& o" o2 P+ P$ U* D. G, v* T m_pTextBuilder->FrameOnPath()->Length()->SetRightHandSide("5.25771270972214");3 R9 Q; X8 R3 U7 b' O. r
m_pTextBuilder->FrameOnPath()->Height()->SetRightHandSide("3.1");
9 M& b/ `' _: V2 a% m! ? _ m_pTextBuilder->FrameOnPath()->AnchorPosition()->Expression()->SetRightHandSide("50");$ [) e0 z" k& j& ~' d4 z
8 }' m/ ] F* V+ i0 C
std::vector<NXOpen::Face *> boundaryFaces2(0);
2 U' }/ y8 g2 D/ k7 |( R% ]( A) r" b NXOpen::FaceTangentRule *faceTangentRule2 = workPart->ScRuleFactory()->CreateRuleFaceTangent(m_pface, boundaryFaces2, 0.05);
* J& ]& j' M& N& }! p4 M% T8 R std::vector<NXOpen::SelectionIntentRule *> rules2(1);: @' x ]2 S. u2 h' u
rules2[0] = faceTangentRule2;- i/ o w+ V/ U5 `1 F; u
m_pTextBuilder-> lacementFaces()->ReplaceRules(rules2, false);
# E/ g9 z/ `& ]: T" D4 j5 V5 x- r) }" p @
m_pTextBuilder->OnFacePlacementProfile()->SetAllowedEntityTypes(NXOpen::Section::AllowTypesOnlyCurves);( m5 a/ Z9 t: m: w+ K t
std::vector<NXOpen::Features::Feature *> CurveOnSurfaceFeatures(1);2 G' Z. E* b) z5 }4 r9 t5 O% w
CurveOnSurfaceFeatures[0] = dynamic_cast<NXOpen::Features::CurveOnSurface *>(m_pCurveOnSurfaceObject);
4 Z8 O9 A3 K. v; a& s1 R NXOpen::Spline *spline1 = dynamic_cast<NXOpen::Spline *>(CurveOnSurfaceFeatures[0]->FindObject("CURVE 1"));
+ q. v" r7 O, p' ^9 X NXOpen::Curve *nullNXOpen_Curve(NULL);
6 p! Q |3 X% ?( L; W! I4 q! m std::vector<NXOpen::SelectionIntentRule *> rules(1);/ h* J6 P* {! J% k
rules[0] = workPart->ScRuleFactory()->CreateRuleCurveFeatureTangent(CurveOnSurfaceFeatures, spline1, nullNXOpen_Curve, false, 0.001, 0.05);
: F- D g" [: g7 O$ p/ b4 W% { m_pTextBuilder->OnFacePlacementProfile()->AllowSelfIntersection(true); Z( D6 C1 c$ _& f( J" L6 C
NXOpen::NXObject *nullNXOpen_NXObject(NULL);5 q( M. v9 J! F, M, O
NXOpen: oint3d helpPoint1(m_pnPoint[3], -m_pnPoint[4], m_pnPoint[5]);
6 M5 T. o3 @0 z6 P! i( C \; t R m_pTextBuilder->OnFacePlacementProfile()->AddToSection(rules, spline1, nullNXOpen_NXObject, nullNXOpen_NXObject, helpPoint1,' B& u" V. n* g M% h7 M
NXOpen::Section::ModeCreate, false); j' M8 k x3 y' c! Z5 Z8 l
( l% y) t/ h0 O5 I" r/ _8 A if (bools)# G X( \. N* p% U* K
{
4 H& c) d) V) h) P
# L5 R% m) U% [4 q4 o9 E/ \8 s if (m_pTextBuilder->Validate()); ?# M% N9 L6 z. f/ f7 ^: t
{
- b9 W6 ?. _5 }3 P4 {+ c m_pTextObject = m_pTextBuilder->Commit();
, K+ ^: i0 E5 N& C. S m_pTextBuilder->Destroy();* U( D# M5 q- p# R8 O- X
m_pTextBuilder = NULL;
! d( |! t7 `9 Q+ E changeFontType->SetSensitivity(UF_STYLER_NO_SUB_INDEX, false);' k" b w) s4 X6 A7 ~ ~" r0 ^
changeStringContent->SetSensitivity(false);
0 x$ J( V; v% F. M! Q changeRealScale->SetSensitivity(false);* f ?+ G1 G$ `9 b M7 J
}' o, q1 ?! x, J0 f
y. n9 H; K0 K1 U& J1 h3 x8 m }1 n4 p- A/ u- h" C
else
9 ~/ U* U9 t9 Z) ] {
[2 S( Q4 M I: y | // : ]& Z6 Z& `2 M0 {0 r$ N2 ?# `8 _
if (m_pTextBuilder->Validate())
" j+ E7 j# J6 @ {
# }3 ^$ [) r& v# L) w/ ^ m_pTextBuilder->Commit();
( }- P6 e& ]4 C) u! | UF_SO_set_visibility_option(m_pTextBuilder->Tag(), UF_SO_visible);
# q1 c( {9 b; M$ ]0 y$ K0 O5 ^$ M m_pTextBuilder->Destroy();6 ]+ X6 [; U" E% R+ ?+ D8 C& O5 _' _
m_pTextBuilder = NULL;9 q8 b9 |% Z( S3 h% P
}
3 s0 t- D2 X5 i4 Z2 E } 6 E9 F( a/ f. R' g# o( Y8 S7 i
1 u2 L, x) g( |- o. O- p}我想实现一个字体预览效果 ,望有空的前辈指导指点!!!!
2 x0 @8 w5 e: p, q |
|