文章目录
- 1、前言
- 2、总体思路
- 3、代码实现
- 3.1 在视图区选择对象
- 3.2 将选择对象转换为直线对象
- 3.3创建获取直线矢量的函数
- 4、测试效果
1、前言
选择一条直线,获取直线的矢量方向,采用的是获取直线的数据,并根据直线的首末端点计算矢量方向,在计算时,要把这个矢量进行初始化。本文介绍一下如何用UFun函数来获取直线的矢量。欢迎加入QQ群讨论:QQ群749492565
2、总体思路
在获得直线矢量的时候,其总体思路如下:
- 在视图区选择对象
- 将选中的对象转换为直线对象
- 利用UFun函数获取直线数据
- 计算直线矢量
- 将直线矢量转换为单位矢量
3、代码实现
3.1 在视图区选择对象
其代码在UG NX二次开发模板中已经存在,如下:
//------------------------------------------------------------------------------
// Selection any objects
//------------------------------------------------------------------------------
std::vector< NXOpen::TaggedObject* > UFModel::select_any_objects()
{
NXString message("Select any objects:");
NXString title("Select objects");
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
bool include_features = 0;
bool keep_highlighted = 0;
std::vector< NXOpen::TaggedObject* > objectArray;
// Select any object array
Selection::Response res = selmgr->SelectTaggedObjects(
message, title, scope, include_features,
keep_highlighted, objectArray);
return objectArray;
}
其调用如下:
std::vector< NXOpen::TaggedObject* > any_objs = select_any_objects();
3.2 将选择对象转换为直线对象
NXObject* nXObject = dynamic_cast<NXOpen::NXObject*>(any_objs[0]);
Line* line(dynamic_cast<NXOpen::Line*>(workPart->Lines()->FindObject(nXObject->JournalIdentifier())));
3.3创建获取直线矢量的函数
利用UF_CURVE_ask_line_data获取直线数据,根据首位点获得矢量,将矢量单位化,然后传出矢量。,其代码如下:
void UFModel::GetLineVector(Line *line, Vector3d* vector3D)
{
UF_CURVE_line_t lineData;
UF_CURVE_ask_line_data(line->Tag(), &lineData);
double vec1[3];
vec1[0] = lineData.end_point[0] - lineData.start_point[0];
vec1[1] = lineData.end_point[1] - lineData.start_point[1];
vec1[2] = lineData.end_point[2] - lineData.start_point[2];
double tor = 0.001;
double ma;
double vec[3];
UF_VEC3_unitize(vec1,tor,&ma,vec);
vector3D->X = vec[0];
vector3D->Y = vec[1];
vector3D->Z = vec[2];
}
调用函数:
Vector3d vector3D;
GetLineVector(line, &vector3D);
lw->Open();
char st[255];
sprintf_s(st, "直线X矢量方向为:%lf\n", vector3D.X);
lw->WriteLine(st);
sprintf_s(st, "直线Y矢量方向为:%lf\n", vector3D.Y);
lw->WriteLine(st);
sprintf_s(st, "直线Z矢量方向为:%lf\n", vector3D.Z);
lw->WriteLine(st);
4、测试效果
调用dll
选择曲线:
输出直线矢量:
操作效果图如下: