怡宁塑胶模具设计

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

NX8.5 VS2010

 

//关键代码

void CreatLifter::AssemblyTemplateFile() //装配模板文件
{
try
{

UF_initialize();

//if(selectObjs.size()==0)
//{
// return;
//}

GetUI();

if ( isComponent1ASSEM==true )
{
Session::UndoMarkId markId1;
markId1 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Delete");

bool notifyOnDelete1;
notifyOnDelete1 = theSession->Preferences()->Modeling()->NotifyOnDelete();

theSession->UpdateManager()->ClearErrorList();

Session::UndoMarkId markId2;
markId2 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Delete");

std::vector<NXObject *> objects1(1);
//Assemblies::Component *component1(dynamic_cast<Assemblies::Component *>(workPart->ComponentAssembly()->RootComponent()->FindObject("COMPONENT YN_Lifter_1 1")));
objects1[0] = ImportComponent1;
int nErrs1;
nErrs1 = theSession->UpdateManager()->AddToDeleteList(objects1);

bool notifyOnDelete2;
notifyOnDelete2 = theSession->Preferences()->Modeling()->NotifyOnDelete();

int nErrs2;
nErrs2 = theSession->UpdateManager()->DoUpdate(markId2);

theSession->DeleteUndoMark(markId1, NULL);
}

Point3d theNewPoint = manip0->Origin();
xDirection=manip0->XAxis();
yDirection=manip0->YAxis();
double yuandian[3] = { theNewPoint.X , theNewPoint.Y, theNewPoint.Z }; //
double ufun_X[3] = { xDirection.X, xDirection.Y , xDirection.Z };
double ufun_Y[3] = { yDirection.X, yDirection.Y , yDirection.Z };
double ufun_Z[3];
UF_VEC3_cross( ufun_X, ufun_Y, ufun_Z ); //通过叉乘求Z轴
Vector3d manip0Z ( ufun_Z[0], ufun_Z[1], ufun_Z[2] ); //Z轴double型转Vector3d
zDirection = manip0Z;

LifterMatrix1.Xx = xDirection.X;
LifterMatrix1.Xy = xDirection.Y;
LifterMatrix1.Xz = xDirection.Z;
LifterMatrix1.Yx = yDirection.X;
LifterMatrix1.Yy = yDirection.Y;
LifterMatrix1.Yz = yDirection.Z;
LifterMatrix1.Zx = zDirection.X;
LifterMatrix1.Zy = zDirection.Y;
LifterMatrix1.Zz = zDirection.Z;

PartLoadStatus *partLoadStatus1;
ImportComponent1 = workPart->ComponentAssembly()->AddComponent(NXlifter1_Path.c_str(), "MODEL", "YN_Lifter_1", manip0->Origin(), LifterMatrix1, -1, &partLoadStatus1, true);

delete partLoadStatus1;
std::vector<NXObject *> objects1(0);
int nErrs1;
nErrs1 = theSession->UpdateManager()->AddToDeleteList(objects1);

isComponent1ASSEM=true;

if (isUpdateExpression==false)
{
updateExpression(); //更新表达式
//theSession->ListingWindow()->WriteLine("测试");
}

isUpdateExpression=true;

UF_terminate();

}
catch(exception& ex)
{
//---- Enter your exception handling code here -----
CreatLifter::theUI->NXMessageBox()->Show("装配模板文件", NXOpen::NXMessageBox::DialogTypeError, "程序错误,请检查代码");
}
}


void CreatLifter::updateExpression() //更新表达式
{
try
{
if ( isComponent1ASSEM == false )
{
return;
}

GetUI(); //获取UI

//切换工作部件
PartLoadStatus *partLoadStatus1;
theSession->Parts()->SetWorkComponent(ImportComponent1, &partLoadStatus1);
workPart = theSession->Parts()->Work();

delete partLoadStatus1;
std::vector<NXObject *> objects1(0);
int nErrs1;
nErrs1 = theSession->UpdateManager()->AddToDeleteList(objects1);

Session::UndoMarkId markId1;
markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Expression");

Expression *expressionDisX1(dynamic_cast<Expression *>(workPart->Expressions()->FindObject("H1")));
Unit *unitDisX1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
workPart->Expressions()->EditWithUnits(expressionDisX1, unitDisX1, doubleToNXString( LifterH1 ));

Expression *expressionDisY1(dynamic_cast<Expression *>(workPart->Expressions()->FindObject("W1")));
Unit *unitDisY1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
workPart->Expressions()->EditWithUnits(expressionDisY1, unitDisY1, doubleToNXString( LifterW1 ));

Expression *expressionL1(dynamic_cast<Expression *>(workPart->Expressions()->FindObject("H3")));
Unit *unitL1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
workPart->Expressions()->EditWithUnits(expressionL1, unitL1, doubleToNXString( LifterH3 ));

Expression *expressionW1(dynamic_cast<Expression *>(workPart->Expressions()->FindObject("W")));
Unit *unitW1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
workPart->Expressions()->EditWithUnits(expressionW1, unitW1, doubleToNXString( LifterW ));

Expression *expressionH1(dynamic_cast<Expression *>(workPart->Expressions()->FindObject("T")));
Unit *unitH1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("MilliMeter")));
workPart->Expressions()->EditWithUnits(expressionH1, unitH1, doubleToNXString( LifterT ));

Expression *expressionA1(dynamic_cast<Expression *>(workPart->Expressions()->FindObject("A")));
Unit *unitA1(dynamic_cast<Unit *>(workPart->UnitCollection()->FindObject("Degrees")));
workPart->Expressions()->EditWithUnits(expressionA1, unitA1, doubleToNXString( LifterA ));


int nErrs2;
nErrs2 = theSession->UpdateManager()->DoUpdate(markId1);

//恢复的部件
Assemblies::Component *componentBasePart(dynamic_cast<NXOpen::Assemblies::Component *>(NXObjectManager::Get(basePartvectorTag[0])));//组件
PartLoadStatus *partLoadStatus2;
theSession->Parts()->SetWorkComponent(componentBasePart, &partLoadStatus2);
workPart = theSession->Parts()->Work();
delete partLoadStatus2;

 

}
catch(exception& ex)
{
//---- Enter your exception handling code here -----
CreatLifter::theUI->NXMessageBox()->Show("更新表达式", NXOpen::NXMessageBox::DialogTypeError, "程序错误,请检查代码");
}
}

void CreatLifter::deletebodyparms() //移除参数和删除基准面
{
try
{
//---- Enter your callback code here -----
CylFeaturesFindEnd(); //遍历特征,找到最后一个特征

LifterBodyfeature1=(dynamic_cast<Features::Feature *>(NXObjectManager::Get(FeatureVecotor[(int)FeatureVecotor.size()-1])));
//sprintf (msg,"%d",lastfeature1->Tag());
//theSession->ListingWindow()->WriteLine(msg);

RemoveParametersbody1 = (dynamic_cast<Body *>(workPart->Bodies()->FindObject(LifterBodyfeature1->JournalIdentifier())));

//移除参数
Features::RemoveParametersBuilder *removeParametersBuilder1;
removeParametersBuilder1 = workPart->Features()->CreateRemoveParametersBuilder();
bool added1;
added1 = removeParametersBuilder1->Objects()->Add(RemoveParametersbody1);

NXObject *nXObject1;
nXObject1 = removeParametersBuilder1->Commit();
removeParametersBuilder1->Destroy();//释放

Features::Feature *lastfeature2;
lastfeature2=(dynamic_cast<Features::Feature *>(NXObjectManager::Get(FeatureVecotor[(int)FeatureVecotor.size()-4])));
//sprintf (msg,"%d",lastfeature2->Tag());
//theSession->ListingWindow()->WriteLine(msg);

//删除基准面
std::vector<NXObject *> objects1(1);
objects1[0] = lastfeature2;
int nErrs1;
nErrs1 = theSession->UpdateManager()->AddToDeleteList(objects1);


}
catch(exception& ex)
{
//---- Enter your exception handling code here -----
CreatLifter::theUI->NXMessageBox()->Show("移除参数和删除基准面", NXOpen::NXMessageBox::DialogTypeError, ex.what());
}
}

void CreatLifter::simpleInterferenceLifter() //干涉得出斜顶
{
try
{
CylFeaturesFindEnd(); //遍历特征,找到最后一个特征

LifterBodyfeature1=(dynamic_cast<Features::Feature *>(NXObjectManager::Get(FeatureVecotor[(int)FeatureVecotor.size()-1])));

//简单干涉
GeometricAnalysis::SimpleInterference *simpleInterference1;
simpleInterference1 = workPart->AnalysisManager()->CreateSimpleInterferenceObject();

simpleInterference1->SetInterferenceType(GeometricAnalysis::SimpleInterference::InterferenceMethodInterferenceSolid);

Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(objbodysTAG[0])));
//sprintf (msg,"第一体%d",body1->Tag());
//theSession->ListingWindow()->WriteLine(msg);
simpleInterference1->FirstBody()->SetValue(body1);

Body *body2(dynamic_cast<Body *>(workPart->Bodies()->FindObject(LifterBodyfeature1->JournalIdentifier())));//特征转换body
//sprintf (msg,"第二体%d",body2->Tag());
//theSession->ListingWindow()->WriteLine(msg);
simpleInterference1->SecondBody()->SetValue(body2);

GeometricAnalysis::SimpleInterference::Result result1;
result1 = simpleInterference1->PerformCheck();

NXObject *nXObject1;
nXObject1 = simpleInterference1->Commit();

vector<NXOpen::NXObject *> interferenceObj;
interferenceObj = simpleInterference1->GetInterferenceResults();

simpleInterference1->Destroy();

//得到的干涉体改色和放置图层
DisplayModification *displayModification1;
displayModification1 = theSession->DisplayManager()->NewDisplayModification();

displayModification1->SetApplyToAllFaces(false);

displayModification1->SetApplyToOwningParts(false);

displayModification1->SetNewTranslucency(0); //设置透明度
//displayModification1->SetNewLayer(integer0LayerValue);//设置图层

displayModification1->SetNewColor(122);//得到的色值是int类型,存在vector数组里,使用时取数组里的第一个值[0]

displayModification1->SetNewWidth(DisplayableObject::ObjectWidthOne);

std::vector<DisplayableObject *> objects1(1);
Body *body3(dynamic_cast<Body *>(NXObjectManager::Get(interferenceObj[0]->Tag())));
objects1[0] = body3;
displayModification1->Apply(objects1);

delete displayModification1;


deleteLifter(); //删除斜顶假体

}
catch(exception& ex)
{
//---- Enter your exception handling code here -----
CreatLifter::theUI->NXMessageBox()->Show("干涉得出斜顶", NXOpen::NXMessageBox::DialogTypeError, ex.what());
}
}

 

posted on 2021-04-11 14:16  怡宁塑胶模具设计  阅读(336)  评论(0编辑  收藏  举报