点击查看详细介绍

使用NXopen结合UF实现文本刻字功能的实现原理与核心代码

nxopen 9年前 14981 38

购买与咨询 NX 二次开发视频教程,请联系微信号:13890821008  QQ号:85585969  


通过对 NX菜单--插入--曲线--文本功能进行二次开发,实现对零件、电极等实体定制刻字功能

刻字功能实现原理:

1:先用鼠标选取平面,获得选择点的坐标和面的tag_t标识
选择点可以通过C++的UI控件 Point3d pickPoint = selection0->PickPoint() 获得选择点的坐标值。
选择的面tag_t通过 Face *iface->Tag() 获得。

2,自定义一个函数,来获得选择平面的法向方向和X、Y的向量值,可以定义一个vector<double>来返回,后面刻字定义放置平面的时候需要用到,函数原型在下面会列出。

3,通过NXopen C++录制手动菜单--插入--曲线--文本功能进行创建文本,可以得到以下核心的代码部分,只需要对其中 Point3d origin放置原点的位置,和Vector3d xDirection与Vector3d yDirection两个方向的向量值进行传递即可快速创建文本,核心代码如下:

Part *workPart(theSession->Parts()->Work());
Part *displayPart(theSession->Parts()->Display());

Features::Text *nullFeatures_Text(NULL);
Features::TextBuilder *textBuilder1;
textBuilder1 = workPart->Features()->CreateTextBuilder(nullFeatures_Text);
textBuilder1->FrameOnPath()->AnchorPosition()->Expression()->SetRightHandSide("50");
textBuilder1->SetScript(Features::TextBuilder::ScriptOptionsWestern);
textBuilder1->PlanarFrame()->SetAnchorLocation(GeometricUtilities::RectangularFrameBuilder::AnchorLocationTypeBottomCenter);
textBuilder1->PlanarFrame()->Length()->SetRightHandSide("5");

//设置字体的高度
textBuilder1->PlanarFrame()->Height()->SetRightHandSide("2");

//设置长宽比例
textBuilder1->PlanarFrame()->SetWScale(100.0);
textBuilder1->PlanarFrame()->Shear()->SetRightHandSide("0");
textBuilder1->FrameOnPath()->AnchorPosition()->Expression()->SetRightHandSide("50");
textBuilder1->FrameOnPath()->Offset()->SetRightHandSide("0");
textBuilder1->FrameOnPath()->Length()->SetRightHandSide("1");
textBuilder1->FrameOnPath()->Height()->SetRightHandSide("2");

//设置字体
textBuilder1->SelectFont("Arial", Features::TextBuilder::ScriptOptionsWestern);

//设置要刻的文本
textBuilder1->SetTextString("NX90");

//获取鼠标选择的坐标点Point3d pickPoint = selection0->PickPoint()
Point3d origin2(pickPoint.X, pickPoint.Y,pickPoint.Z);

//通过自定义函数GetxyDirection来获得返回的X、y的向量值
vector<double> Directi= GetxyDirection(objs);
Vector3d xDirection1(Directi[0], Directi[1], Directi[2]);
Vector3d yDirection1(Directi[3], Directi[4], Directi[5]);

Xform *xform1;
xform1 = workPart->Xforms()->CreateXform(origin2, xDirection1, yDirection1, SmartObject::UpdateOptionWithinModeling, 1.0);

CartesianCoordinateSystem *cartesianCoordinateSystem1;
cartesianCoordinateSystem1 = workPart->CoordinateSystems()->CreateCoordinateSystem(xform1, SmartObject::UpdateOptionWithinModeling);
textBuilder1->PlanarFrame()->SetCoordinateSystem(cartesianCoordinateSystem1);
textBuilder1->PlanarFrame()->UpdateOnCoordinateSystem()
NXObject *nXObject1;
nXObject1 = textBuilder1->Commit();
textBuilder1->Destroy();

4,结合UI界面的定制,可以让用户自由选择字体样式、修改字体大小、字体方向、刻字深度等功能!

5,通过对创建好的文本进行拉伸和布尔求差,即可实现刻字功能。


以下是自定义的函数来获得选择面的X和Y的向量值,通过vector<double>来返回一个数组。

vector<double> GetxyDirection(tag_t object_tag)
{

●●●请先 登陆注册 后查看●●●

}

如需学习UG二次开发,可以联系站长手把手教,使用UFun+NXopen C++的方式全面系统性的学习,学到完全理解开发原理并能完全熟悉相关函数,并能独立开发各种工具为止,具体可联系站长QQ:85585969

4

最新回复 (38)
  • c1_wangyf 9年前
    1

    好东西一定要顶,加油!

  • Mister_xv 8年前
    2

    厉害,代码思路很好

  • smthan 8年前
    3

    谢谢高手的分享哈 厉害呀

  • king_chinese VIP会员 8年前
    4

    好东西一定要顶,加油!

  • lomgzw007 8年前
    5

    好东西一定要顶,加油!

  • jiangwei 8年前
    6

    好好学习,谢谢分享。。。。。

  • Murry 7年前
    7

    顶顶顶顶顶

  • server1102 7年前
    8

    好东西一定要顶,加油!

  • hiboboloo 7年前
    9

    新的地方被对方不答复

  • slcy20 7年前
    10

    谢谢楼主分享 努力学习中

  • 西北望长安 7年前
    11

    111111111111111111111

  • houyisheri 7年前
    12

    楼主威武!!!!!!!!!!!!!!!!!!!!!1

  • WLUG1 7年前
    13

    谢谢高手的分享哈 厉害呀

  • 穿着隐身的 6年前
    14

    都是法国的发的法国法国法

  • yangpon 6年前
    15

    谢谢谢谢,前来报道学习

请登录后发表新帖