|
|
以下是使用多个平面创建拆分体, 创建后我想获取拆分后的所有实体,
以下加粗代码①或者②处, 不加这些代码, 拆分体正常生成,加上①或者②, 都会报错,报错如图,哪位大神帮忙看看错在哪里?
UF_initialize();
UF_DISP_set_display(UF_DISP_SUPPRESS_DISPLAY);
tag_t linetag = 44539;
double start_point[3] = { 0.0 };
double end_point[3] = { 0.0 };
Ask_Point_By_Percent(linetag, 0.0, start_point);
Ask_Point_By_Percent(linetag, 1.0, end_point);
double p1[3] = { 0.0 };
double p2[3] = { 0.0 };
int direction = 0.;
if (start_point[2] < end_point[2])
{
direction = 1;
p1[0] = start_point[0];
p1[1] = start_point[1];
p1[2] = start_point[2];
p2[0] = end_point[0];
p2[1] = end_point[1];
p2[2] = end_point[2];
}
else
{
direction = -1;
p1[0] = end_point[0];
p1[1] = end_point[1];
p1[2] = end_point[2];
p2[0] = start_point[0];
p2[1] = start_point[1];
p2[2] = start_point[2];
}
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< oint3d>points;
Point3d temp;
double output_point[3] = { 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[0];
temp.Y = output_point[1];
temp.Z = output_point[2];
points.push_back(temp);
}
else
{
temp.X = p2[0];
temp.Y = p2[1];
temp.Z = p2[2];
points.push_back(temp);
}
}
//创建平面
double plane_normal[3] = { 0.0,0.0,1.0 };
vector<tag_t>planes;
tag_t planetag = NULL_TAG;
double temppoint[3] = { 0.0 };
for (size_t i = 0; i < points.size(); i++)
{
temppoint[0] = points.X;
temppoint[1] = points.Y;
temppoint[2] = 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[3];
}vol;
Part *mypart = theSession-> arts()->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[0] = body1;
NXOpen::BodyDumbRule *bodyDumbRule1;
bodyDumbRule1 = mypart->ScRuleFactory()->CreateRuleBodyDumb(bodies1, true);
NXOpen::ScCollector *scCollector1;
scCollector1 = mypart->ScCollectors()->CreateCollector();
std::vector<NXOpen::SelectionIntentRule *> rules1(1);
rules1[0] = bodyDumbRule1;
scCollector1->ReplaceRules(rules1, false);
splitBodyBuilder1->SetTargetBodyCollector(scCollector1);
//
std::vector<NXOpen: atumPlane *> faces1;
DatumPlane *datumPlane1;
for (size_t i = 0; i < planes.size() -2; i++)
{
datumPlane1 = dynamic_cast<NXOpen: atumPlane *>(NXObjectManager::Get(planes));
faces1.push_back(datumPlane1);
}
NXOpen::FaceDumbRule *faceDumbRule1;
faceDumbRule1 = mypart->ScRuleFactory()->CreateRuleFaceDatum(faces1);
std::vector<NXOpen::SelectionIntentRule *> rules2(1);
rules2[0] = 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();
|
-
|