NX二次开发-无部件创建Block UI方法

BlockUI 在无部件下正常是无法创建成功的,但某些时候确实需要在无部件模式使用UI,方法如下:

在 theUI->CreateDialog 之前打开一个prt,theUI->CreateDialog之后关闭!

    //无部件模式打开BlockUI

    tag_t NoPartTag= NULL;
    if (UF_ASSEM_ask_work_part() == NULL)
    {

            UF_PART_load_status_t error_status;
            UF_PART_open_quiet(part_name, &NoPartTag, &error_status);
            UF_PART_free_load_status(&error_status);

            //使用 quietly 模式设置为工作部件
            tag_t previous_work_part;
            UF_ASSEM_set_work_part_quietly(NoPartTag,&previous_work_part);
    }

    theDialog = xxxxx::theUI->CreateDialog("xxxxx.dlx");  //创建BlockUI

    if (NoPartTag) UF_PART_close(NoPartTag, 0, 1);

效果如下:

无部件下创建Block UI

弄一个空的prt,这样UI显示速度基本没有影响,但是这样也会在历史记录里面出现打开过这个prt的历史信息,体验不是很好!可以再做一些优化,在UF_PART_open_quiet之前复制一个history.pax,在UF_PART_open_quiet之后再替换回去!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
制作者 1,乐清*梅雷 部分内容参考百度QQ:1821117007 一共大概花了15个小时翻译以及制作。 2,彭辅军,网名:小白鼠,QQ:3243729373 二次开发QQ群:331643674 在梅雷基础上增加了内容,一共大概花了20个小时翻译以及制作。 本帮助文档可复制,可传播,但需要保留制作者信息,谢谢! 其中大部分内容测试比对过,部分没有进行测试比对效果。请以实际效果为准。本文只做参考。 注:由于BlockUI更新比较频繁,各版本之间会存在差异,有些版本的控件的属性名并没有那么多,或者此帮助文件并没有列进去,那么可以通过下面方法查看当前版本某控件的所有的属性名和类型: void get_block_ui_type_name(NXOpen::BlockStyler::UIBlock* BLOCK_UI_name) { Session*theSession=NXOpen::Session::GetSession(); ListingWindow*lw=theSession->ListingWindow(); lw->Open(); NXOpen::BlockStyler::PropertyList::ListMode mode1 = BLOCK_UI_name->GetProperties()->Mode(); if (mode1==BlockStyler::PropertyList::ListModeIndexed) { lw->WriteLine("ListMode:ListModeIndexed"); } else { lw->WriteLine("ListMode:ListModeNamed"); } int length = BLOCK_UI_name->GetProperties()->Length(); char info[100]; sprintf(info,"数量:%d",length); lw->WriteLine(info); std::vectorarray_nxstr = BLOCK_UI_name->GetProperties()->GetPropertyNames(); for (int i=0;iWriteLine(); BlockStyler::PropertyList::PropertyType type = BLOCK_UI_name->GetProperties()->GetPropertyType(array_nxstr[i]); if(type==0) lw->WriteLine("类型是:String 名称:"+array_nxstr[i]); else if(type==1) lw->WriteLine("类型是:Double 名称:"+array_nxstr[i]); else if(type==2) lw->WriteLine("类型是:Logical 名称:"+array_nxstr[i]); else if(type==3) lw->WriteLine("类型是:Integer 名称:"+array_nxstr[i]); else if(type==4) lw->WriteLine("类型是:Enum 名称:"+array_nxstr[i]); else if(type==5) lw->WriteLine("类型是:Strings 名称:"+array_nxstr[i]); else if(type==6) lw->WriteLine("类型是:UIBlock 名称:"+array_nxstr[i]); else if(type==7) lw->WriteLine("类型是:Point 名称:"+array_nxstr[i]); else if(type==8) lw->WriteLine("类型是:Vector 名称:"+array_nxstr[i]); else if(type==9) lw->WriteLine("类型是:Bits 名称:"+array_nxstr[i]); else if(type==10) lw->WriteLine("类型是:Tagged Object 名称:"+array_nxstr[i]); else if(type==11) lw->WriteLine("类型是:Array 名称:"+array_nxstr[i]); else if(type==12) lw->WriteLine("类型是:Integer 2d-Matrix 名称:"+array_nxstr[i]); else if(type==13) lw->WriteLine("类型是:Double 2d-Matrix 名称:"+array_nxstr[i]); else if(type==14) lw->WriteLine("类型是:Tagged Object 2d-Matrix 名称:"+array_nxstr[i]); else if(type==15) lw->WriteLine("类型是:Integer Vector 名称:"+array_nxstr[i]); else if(type==16) lw->WriteLine("类型是:Double Vector 名称:"+array_nxstr[i]); else if(type==17) lw->WriteLine("类型是:Tagged Object Vector 名称:"+array_nxstr[i]); else if(type==18) lw->WriteLine("类型是:File 名称:"+array_nxstr[i]); else if(type==19) lw->WriteLine("类型是:Selection Filter 名称:"+array_nxstr[i]); else if(type==20) lw->WriteLine("类型是:Undefined 名称:"+array_nxstr[i]); } } //下面是几个示例:控件的值的获取 。。。。。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值