UG二次开发中,怎么选取特定的面
比如,第一步创建了一个长方体,第二步在其中一个面打沉头孔,那么怎么获取自己想要的面呢 01、选择对象捕捉
PointOverlay 是否显示捕捉点
SmartUpdateOption 智能更新选项
Within Modeling 在建模
After Modeling 建模后
After Parent Body 实体父后
Mixed 混合
SnapPointTypesEnabled 设置捕捉点类型的可见性
SnapPointTypesOnDefault设置捕捉点类型相关的内容被启用
常规
BlockID控件id
Enable 是否可选/禁用控件
Group 组
Show 是否可见
其它
附着
Bottom底
Left 左
Right 右
Top 顶
特定于块
AutomaticProgression 选择后焦点是否自动跳到下一个控件
BalloonTooltipImage 动态提示图片(鼠标移动到控件是显示图片)
BalloonTooltipLayout 动态提示布局
BalloonTooltipText 动态提示文本内容
Bitmap 指定图片
BlendVirtualCurveOverlay 是否显示虚拟交线
CreateInterpartLink 是否显示部件间连接图标在选择条上
Cue 提示
InterpartSelection 部件间选择设置
Simple 简单
Non-associative Interpart Copy Only 只复制部件间非关联
Associative and Non-associative Interpart Copy 复制部件间关联和非关联
Associative Interpart Copy 复制部件间关联
LabelString 标签标题
MaximumScops 设置选择范围
Entire Assembly 所有组件/装配
Within Work Part Only 只是工作部件
Within Work Part and Components 工作部件和组件/装配)
SelectMode 设置单选/多选
Single 单选
Multiple 多选
StepStatus 设置确定和应用按钮什么时候高亮 (Required 必需的时候)(Optional 可选的时候)(Satisfied 满意/满足的时候)
Tooltip 动态提示文本标题(Bitmap指定图片时,鼠标移动到图片时提示文字)
————————————————————————————————————————————
————————————————————————————————————————————
咧子:获得selection0控件选择的对象
UF_initialize();
std::vector<TaggedObject*>objects=this->selection0->GetProperties()->GetTaggedObjectVector("SelectedObjects");
for ( int i=0;i<objects.size();i++) // size 列表长度,这里指的是 对象个数
{
UF_OBJ_set_color(objects->Tag(),1);
}
UF_terminate();
————————————————————————————————————————————
咧子:对象加入到selection0选择控件的对象列表
tag_t obj=NULL_TAG;
double point={0,0,10};
double XYZ={60,50,80};
char C="";
char K="";
char G="";
sprintf(C, "%f",XYZ);
sprintf(K, "%f",XYZ);
sprintf(G, "%f",XYZ);
char * edge_len={C,K,G};
UF_MODL_create_block1(UF_NULLSIGN,point,edge_len,&obj); //创建方
UF_MODL_ask_feat_body (obj,&obj); //从特征中取出实体
Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(obj))); //tag转换给nxopen
std::vector<TaggedObject*>objects;
objects.push_back(body1); //对象加入到selection0选择控件的对象列表
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
————————————————————————————————————————————
//清除对象
std::vector<TaggedObject*>objects;
objects.empty();
selection0->GetProperties()->SetTaggedObjectVector("SelectedObjects",objects);
————————————————————————————————————————————
咧子:只选择面
initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
//对象选择过滤 只能选表面
selection0->GetProperties()->SetString("LabelString","选择表面");
std::vector< NXOpen::Selection::MaskTriple > maskTriple;
Selection::MaskTriple mask1(UF_face_type,0,0);
maskTriple.push_back(mask1);
selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
咧子:只选择面 【UG本身过滤器跟着变】
initialize_cb() 初始化里加代码 或 dialogShown_cb()显示对话框里加代码 可进行对象选择过滤
selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
std::vector< NXOpen::Selection::MaskTriple > maskTriple;
Selection::MaskTriple mask1(UF_face_type,0,0);
maskTriple.push_back(mask1);
NXOpen::BlockStyler::PropertyList *selComponentProps = selection0->GetProperties();
selComponentProps->SetSelectionFilter("SelectionFilter",Selection::SelectionActionClearAndEnableSpecific,maskTriple);
delete selComponentProps;
selComponentProps = NULL;
列子
————————————————————————————————————————————
————————————————————————————————————————————
咧子:只选择 实体边缘 直线和圆弧
initialize_cb() 初始化里加代码 可进行对象选择过滤
selection0->GetProperties()->SetEnum("SelectMode",1);//多选模式
selection0->GetProperties()->SetString("LabelString","选择边缘");//只选择 实体边缘 直线和圆弧
std::vector< NXOpen::Selection::MaskTriple > maskTriple;
Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
maskTriple.push_back(mask1);
maskTriple.push_back(mask2);
selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
//过滤无效的边缘
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
{
tag_t obj=NULL_TAG;
UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
if (obj==NULL_TAG) return(UF_UI_SEL_REJECT); //不加入到对象预览列表
return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
}
————————————————————————————————————————————
————————————————————————————————————————————
咧子:通过枚举控件选项来 时实分别过滤 边缘、表面、实体
int enumValue = this->enum01->GetProperties()->GetEnum("Value");
if (enumValue==0)
{
selection0->GetProperties()->SetString("LabelString","选择边缘");
std::vector< NXOpen::Selection::MaskTriple > maskTriple;
Selection::MaskTriple mask1(UF_solid_type,UF_solid_edge_subtype,2);
Selection::MaskTriple mask2(UF_solid_type,UF_solid_edge_subtype,3);
maskTriple.push_back(mask1);
maskTriple.push_back(mask2);
selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
}
if (enumValue==1)
{
selection0->GetProperties()->SetString("LabelString","选择表面");
std::vector< NXOpen::Selection::MaskTriple > maskTriple;
Selection::MaskTriple mask1(UF_face_type,0,0);
maskTriple.push_back(mask1);
selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
}
if (enumValue==2)
{
selection0->GetProperties()->SetString("LabelString","选择实体");
std::vector< NXOpen::Selection::MaskTriple > maskTriple;
Selection::MaskTriple mask1(UF_solid_type,0,0);
maskTriple.push_back(mask1);
selection0->GetProperties()->SetSelectionFilter("SelectionFilter", Selection::SelectionAction::SelectionActionEnableSpecific ,maskTriple);
}
//------------------------------------------------------------------------------
//Callback Name: filter_cb 过滤不符合对象
//------------------------------------------------------------------------------
int ML_NX001::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectObject)
{
int enumValue = this->enum01->GetProperties()->GetEnum("Value");
if (enumValue ==0)
{
tag_t obj=NULL_TAG;
int err=UF_MODL_ask_edge_body(selectObject->Tag(),&obj);
if (err!=0 && obj==NULL_TAG)
return(UF_UI_SEL_REJECT); //不加入到对象预览列表
}
else if (enumValue ==1)
{
int type=-1;
int err=UF_MODL_ask_face_type(selectObject->Tag(),&type);
if (err!=0 || type==-1)
return(UF_UI_SEL_REJECT); //不加入到对象预览列表
}
else if (enumValue ==2)
{
int type=-1;
int err=UF_MODL_ask_body_type(selectObject->Tag(),&type);
if (err!=0 || type==-1)
return(UF_UI_SEL_REJECT); //不加入到对象预览列表
}
return(UF_UI_SEL_ACCEPT); //加入到对象预览列表
}
页:
[1]