NXOPEN C++问题求助
以下是使用多个平面创建拆分体, 创建后我想获取拆分后的所有实体,以下加粗代码①或者②处, 不加这些代码, 拆分体正常生成,加上①或者②, 都会报错,报错如图,哪位大神帮忙看看错在哪里?
UF_initialize();
UF_DISP_set_display(UF_DISP_SUPPRESS_DISPLAY);
tag_t linetag = 44539;
double start_point = { 0.0 };
double end_point = { 0.0 };
Ask_Point_By_Percent(linetag, 0.0, start_point);
Ask_Point_By_Percent(linetag, 1.0, end_point);
double p1 = { 0.0 };
double p2 = { 0.0 };
int direction = 0.;
if (start_point < end_point)
{
direction = 1;
p1 = start_point;
p1 = start_point;
p1 = start_point;
p2 = end_point;
p2 = end_point;
p2 = end_point;
}
else
{
direction = -1;
p1 = end_point;
p1 = end_point;
p1 = end_point;
p2 = start_point;
p2 = start_point;
p2 = start_point;
}
double dis = 100;
double curve_len = 0.0;
int num = 0;
Ask_Curve_Length(linetag, &curve_len);
num = (int)ceil(curve_len / dis);
dis = curve_len / num;
vector<;Point3d>points;
Point3d temp;
double output_point = { 0.0 };
for (size_t i = 0; i < num; i++)
{
if (i != num - 1)
{
Ask_Point_By_Arc_Length(p1, &direction, linetag, dis*(i + 1), output_point);
temp.X = output_point;
temp.Y = output_point;
temp.Z = output_point;
points.push_back(temp);
}
else
{
temp.X = p2;
temp.Y = p2;
temp.Z = p2;
points.push_back(temp);
}
}
//创建平面
double plane_normal = { 0.0,0.0,1.0 };
vector<tag_t>planes;
tag_t planetag = NULL_TAG;
double temppoint = { 0.0 };
for (size_t i = 0; i < points.size(); i++)
{
temppoint = points.X;
temppoint = points.Y;
temppoint = points.Z;
UF_MODL_create_fixed_dplane(temppoint, plane_normal, &planetag);
planes.push_back(planetag);
}
//拆分体
//复制体
tag_t body = 44359;
tag_t bodyTag = NULL_TAG;
uf6511(&body, &bodyTag);
vector<tag_t>bodies;
vector<double>v_bodies;
typedef struct vol
{
tag_t bodytag;
double v;
double p;
}vol;
Part *mypart = theSession->;Parts()->Work();
NXOpen::Features::SplitBody *nullNXOpen_Features_SplitBody(NULL);
NXOpen::Features::SplitBodyBuilder *splitBodyBuilder1;
splitBodyBuilder1 = mypart->Features()->CreateSplitBodyBuilderUsingCollector(nullNXOpen_Features_SplitBody);
std::vector<NXOpen::Body *> bodies1(1);
NXOpen::Body *body1 = dynamic_cast<NXOpen::Body *>(NXObjectManager::Get(bodyTag));
bodies1 = body1;
NXOpen::BodyDumbRule *bodyDumbRule1;
bodyDumbRule1 = mypart->ScRuleFactory()->CreateRuleBodyDumb(bodies1, true);
NXOpen::ScCollector *scCollector1;
scCollector1 = mypart->ScCollectors()->CreateCollector();
std::vector<NXOpen::SelectionIntentRule *> rules1(1);
rules1 = bodyDumbRule1;
scCollector1->ReplaceRules(rules1, false);
splitBodyBuilder1->SetTargetBodyCollector(scCollector1);
//
std::vector<NXOpen::DatumPlane *> faces1;
DatumPlane *datumPlane1;
for (size_t i = 0; i < planes.size() -2; i++)
{
datumPlane1 = dynamic_cast<NXOpen::DatumPlane *>(NXObjectManager::Get(planes));
faces1.push_back(datumPlane1);
}
NXOpen::FaceDumbRule *faceDumbRule1;
faceDumbRule1 = mypart->ScRuleFactory()->CreateRuleFaceDatum(faces1);
std::vector<NXOpen::SelectionIntentRule *> rules2(1);
rules2 = faceDumbRule1;
splitBodyBuilder1->BooleanTool()->FacePlaneTool()->ToolFaces()->FaceCollector()->ReplaceRules(rules2, false);
Features::Feature *nXObject1;
nXObject1 = splitBodyBuilder1->CommitFeature();
splitBodyBuilder1->Destroy();
//①
BodyCollection * objss = mypart->Bodies();
vector<Body *> bbodys;
for (BodyCollection::iterator it = objss->begin(); it != objss->end();it++)
{
bbodys.push_back(*it);
}
//②
vector <Body *> Ibody = nXObject1->GetBodies();
UF_DISP_set_display(UF_DISP_UNSUPPRESS_DISPLAY);
UF_DISP_regenerate_display();
UF_terminate();
我使用vector的时候里面存放的东西都是一个一个放的,不知道你这样一起放是否可以。另外你上面的代码bbodys就是容器,以经收集了实体了。 白色治愈之风 发表于 2026-5-6 08:18
我使用vector的时候里面存放的东西都是一个一个放的,不知道你这样一起放是否可以。另外你上面的代码bbodys ...
①处与②处是两种方式获取实体方式,我先使用的②处,报错了,所以尝试使用①处, 结果也是报错,
如果删除了①和②, 拆分体是可以创建成功的,拆分样式详见下图,
我是用很多平面拆分一个实体, 拆分后想将拆分后的所有实体收集起来, 结果报错卡住了 2217231767 发表于 2026-5-6 10:52
①处与②处是两种方式获取实体方式,我先使用的②处,报错了,所以尝试使用①处, 结果也是报错,
如果删除 ...
拆分之后是直接去参变成体还是拆分之后仍然是特征 UF_OBJ_cycle_objs_in_part,也可以试试这个函数 分割体使用UF_MODL_split_body更简洁些,也有对用的切割体输出:lol 白色治愈之风 发表于 2026-5-6 12:08
拆分之后是直接去参变成体还是拆分之后仍然是特征
拆分之后没有去参,还是特征 白色治愈之风 发表于 2026-5-6 12:15
UF_OBJ_cycle_objs_in_part,也可以试试这个函数
好的, 我原想是根据拆分体直接获取拆分特征所产生的实体,
用你提供的ufun方式, 就得先获取拆分之前的所有体, 拆分后再获取所有体, 两者比较才能获取拆分特征所产生的实体:lol 不小明我们不约 发表于 2026-5-6 13:08
分割体使用UF_MODL_split_body更简洁些,也有对用的切割体输出
ufun这个函数试过, 每次只能用一个面拆分, 我是用好几百个面拆分, 就得循环拆分, 效率慢,所以改用NXOpen c++方式, 拆分倒是快了,但获取体卡住了:lol
页:
[1]