NXOpen图层操作
图层的基本操作
文字层 使用【横排文字】和【直排文字】工具创建文本对 象后均将自动生成一个当前文本对象的文本图层
文本图层的创建示例
形状图层
使用【钢笔】、【自由钢笔】、【矩形】、【圆角矩形】、 【椭圆】、【多边形】、【直线】或【自定形状】工具并在 其属性栏中激活【形状图层】按钮
形状图层的创建示例
接下来我们认识以下图层面板的相关知识。
话框询问用户是否删除所有的不可见图层
【拼合图层】命令的应用示例
图层组和图层的管理
组的概念 创建组的方法 组的管理
什么是图层组?
为了便于管理和查找图层,我们把相似或关 系紧密的图层归在一起,成为一组,即成 为图层组。
一个画布里可以建立一个或多个组,也可 以不用建立任何组,组里还可以嵌套子组, 对组的操作,往往会影响组里的层的操作。
形状图层
文本图层 调整图层 填充图层 普通图层
背景图层
马成功的ps教案,本教案为 北京新海淀计算机学校马成功 老师的原创教案,请勿在未经允许的情况下随意的传播、 拷贝、更不能用于商业用途,否则本人有权利通过法律途径解决纠纷 2008-12-8
背景图层
➢ 创建方法:
➢ 执行菜单命令【文件】→【新建】 ➢ 按组合键【Ctrl+N】 ➢ 执行菜单命令【图层】→【新建】→【背景图层】
➢ 特点:无法对背景图层进行【混合模式】、【锁定】、
【不透明度】和【填充】等属性的设置 ,无法使用【移 动】工具移动背景图层所在的背景颜色或其他对象,同 时也无法调整背景图层与其他图层的叠放次序
面板的属性 设置都为灰
色的,
背景图层的特点
小技巧点拨:如何将背景层转化为普通层
通过以下两种方法实现:
初步认识【图层】面板
NX UG 图层设置技巧
简要操作步骤:STEP 1、打开提供的练习文件,单击【格式】-【图层设置】进入“图层设置对话框”。
STEP 2、设置工作图层。
在“工作图层”栏中输入图层名称(数字1~256),这里输入2,然后按【Enter】键,即可在“图层”栏中显示图层2,并同时将其设置为工作图层。
STEP 3、单击“关闭”按钮,择用户创建的任何图层都会包含在工作图层内。
STEP 4、切换工作图层。
可在“图层”栏中双击图层名切换工作图层,同时也可以在“实用工具”中切换工作图层,STEP 5、如果避免对某层进行控制,可以取消该图层前面的勾选,将其隐藏,如我们吧基准坐标系隐藏。
如图所示:技巧分析:隐藏图层即可隐藏该图层内的特征,单击隐藏按钮,隐藏的特征将不会被显示。
此时只能重新勾选图层,或在“部件导航器”中选择特征后右击鼠标执行“显示”命令才会显示。
在窗口中单击特征,该特征会加亮显示。
STEP 6、勾选图层中的“仅可见”项,表示该图层内的的特征仅显示在窗口中。
选择零件中的坐标系将无法被选取。
STEP 7、如果要显示所有图层,可在“显示”下拉列表中选择“所有图层”项显示256个图层,双击任何一个图层都将其设置为工作图层。
STEP 8、图层类别设置。
勾选“图层”栏中的“类别显示”复选框,将显示所有类别,如图所示:STEP 9、用户创建的图层类别系统都将被集中到Solids项中,单击Solids项可展开其子项图层。
STEP 10、选择图层不放,如选择图层2,将其拖动到相关类别中,例如Curves,如图所示。
完成后,该图层将被移动至Curves类别中。
2、将选定的特征移动至其他图层。
STEP 1、单击【格式】-【移动至图层】命令,弹出“类选择”对话框。
选择零件底板和曲线后单击鼠标中键,弹出“移动图层”对话框,如图所示:SEEP 2、在“目标图层或类别”栏中输入新图层名称,如输入28,完成后单击“确定”按钮,该特征则被移动到新图层中。
附加技巧:将图层移动到其他图层的另一种方法:选择特征后单击按钮,弹出“编辑对象显示”对话框对话框,在“图层”栏中输入新层名,如图所示:STEP 3、【Ctrl +L】组合键,在“图层设置”对话框中取消图层28前面的勾选将图层设置成不可见状态,此时工作窗口中的零件如图所示。
UG二次开发之Open和NXOpen
UG二次开发之Open和NXOpenUG的二次开发有两套系统,一套叫Open,一套叫NXOpen。
Open主要是造型方面的功能,NXOpen比较全面。
Open原来支持的是C/C++,.net的NXOpen.UF命名空间支持。
NXOpen 支持C++和.net等。
Open系统,支持C的原来叫UFun,或者API,用的人最多。
后来出现了Open C++。
但是Open C++支持编辑等属性行为,不能创建。
所以,一般是通过API创建特征,比如实体,通过C++的类查询和修改。
NXOpen系统,是完全面向对象的,所以可以创建和修改特征。
当然,NXOpen几乎支持UG所有的功能。
所以,目前开来,如果使用C/C++方式,可以使用Open C和C++结合的方式,利用C来创建特征,使用C++来管理。
如果使用.net可以直接使用NXOpen。
对于不熟悉NXOpen的人可以按照Open C的知识上手NXOpen.UF。
下面将通过各个例子说明上述系统的使用,因为.net平台是通用的,我只举了C#的例子,VB等也是一样的的。
而java我不懂,见谅了。
一、Open C1、遍历的例子#include <uf_object_types.h>#include <uf_part.h>#include <uf_obj.h>#include <uf_modl.h>#include <string>#include <sstream>using std::string;using std::stringstream;//下面是程序片段UgSession session( true );try{/* TODO: Add your application code here */uf_list_p_t lpObj;UF_MODL_create_list(&lpObj);tag_t prt = UF_PART_ask_display_part();tag_t Next_tag=NULL_TAG;do{UF_OBJ_cycle_objs_in_part(prt,UF_solid_type,&Next_tag);if(Next_tag==NULL_TAG) break;int t,subtype;UF_OBJ_ask_type_and_subtype(Next_tag,&t,&subtype);if(subtype==UF_solid_body_subtype)UF_MODL_put_list_item(lpObj,Next_tag);} while(1);logical is_open;UF_UI_is_listing_window_open(&is_open);if(!is_open) UF_UI_open_listing_window();int sum;UF_MODL_ask_list_count(lpObj,&sum);for (int i=0;i<sum;i++){tag_t t;UF_MODL_ask_list_item(lpObj,i,&t);stringstream s;s<<(int)t;string str;str = s.str();UF_UI_write_listing_window(str.c_str());UF_UI_write_listing_window("\n");}// UF_UI_exit_listing_window();UF_MODL_delete_list(&lpObj);}/* Handle errors */catch ( const UgException &exception ){processException( exception );}2,创建block的例子#include <uf.h>#include <uf_ui.h>#include <uf_exit.h>#include <uf_modl.h>//下面是程序片段/* Initialize the API environment */if( UF_CALL(UF_initialize()) ){/* Failed to initialize */return;}/* TODO: Add your application code here */double corner[3] ={0,0,0};char* edge[3] = {"10","5","20"};tag_t tag;UF_MODL_create_block(UF_NULLSIGN,NULL_TAG,corner,edge,&tag);/* Terminate the API environment */UF_CALL(UF_terminate());二、Open C++1、遍历的例子#include <ug_typed.hxx>#include <ug_part.hxx>#include <ug_body.hxx>#include <ug_string.hxx>using std::string;//下面是程序片段UgSession session( true );try{/* TODO: Add your application code here */UgPart *pWorkPart = UgSession::getWorkPart();UgTypedObject *pObj;ostrstream buffer;for ( pObj = pWorkPart->iterateFirst ( );pObj;pObj = pWorkPart->iterateNext ( pObj ) ){std::string name = pObj->getName ( );UgBody *pBody = dynamic_cast<UgBody*>(pObj);if (pBody){buffer<<(int)pBody->getTag()<<"\n";}}UgInfoWindow::open();UgInfoWindow::write(string(buffer.str()));delete buffer.str();}/* Handle errors */catch ( const UgException &exception ){processException( exception );}2、通过模板搜索的例子#include <ug_body.hxx>#include <ug_iterator.hxx>#include <ug_string.hxx>//下面是程序片段UgSession session( true );try{/* TODO: Add your application code here */ostrstream buffer;// Construct an iterator for NX face objectsUgIterator < UgBody > pObj;//workpart 可以通过其他方式指定//UgIterator < UgFace *> curFace;//// Loop through all faces//while ( !curFace.isFinished ( ) )//{// // Get the name of the current face// std::string faceName = (*(*curFace))->getName ( );// curFace.findNext ( );//}// Loop through all faceswhile ( !pObj.isFinished ( ) ){// Get the name of the current facestd::string faceName = (*pObj)->getName ( );buffer<<(int)(*pObj)->getTag()<<endl;pObj.findNext ( );}UgInfoWindow::open();UgInfoWindow::write( std::string( buffer.str() ));delete buffer.str();}/* Handle errors */catch ( const UgException &exception ){processException( exception );}三、NXOpen C++1、创建block的例子#include <NXOpen/Session.hxx>#include <NXOpen/Part.hxx>#include <NXOpen/Features_BlockFeatureBuilder.hxx>#include <NXOpen/Features_Block.hxx>#include <NXOpen/PartCollection.hxx>#include <NXOpen/Features_FeatureCollection.hxx>#include <NXOpen/UI.hxx>#include <NXOpen/NXMessageBox.hxx>using namespace NXOpen;//下面是程序片段NXOpen::Session *theSession = NXOpen::Session::GetSession();try{/* TODO: Add your application code here */Part* thePart = theSession->Parts()->Work();NXOpen::Features::Feature* block = NULL;NXOpen::Features::BlockFeatureBuilder* theBuilder = thePart->Features()->CreateBlockFeatureBuilder(block);NXOpen::Point3d basePoint(100, 100, 100);theBuilder->SetOriginAndLengths(basePoint, "100", "200", "300");// NXOpen.Body theBody = null;//theBuilder.SetBooleanOperationAndTarget(NXOpen.Features.Feature.BooleanType.Create, theBody);theBuilder->Commit();//theBuilder->CommitFeature();NXOpen::UI::GetUI()->NXMessageBox()->Show("",NXMessageBox::DialogType::DialogTypeInformation, "OK!");// UI->GetUI()->NXMessageBox.Show("", rmation, "OK!");}/* Handle errors */catch ( const UgException &exception ){processException( exception );}2、遍历特征的例子#include <NXOpen/Session.hxx>#include <NXOpen/Part.hxx>#include <NXOpen/Features_BlockFeatureBuilder.hxx>#include <NXOpen/Features_Block.hxx>#include <NXOpen/PartCollection.hxx>#include <NXOpen/Features_FeatureCollection.hxx>#include <NXOpen/UI.hxx>#include <NXOpen/NXMessageBox.hxx>#include <NXOpen/ListingWindow.hxx>using namespace NXOpen;//下面是程序片段NXOpen::Session *theSession = NXOpen::Session::GetSession();try{/* TODO: Add your application code here */Part* thePart = theSession->Parts()->Work();theSession->ListingWindow()->Open();NXOpen::Features::FeatureCollection::iterator i;for (i=thePart->Features()->begin();i!=thePart->Features()->end();i++){theSession->ListingWindow()->WriteLine((*i)->Name()+"--"+(*i)->GetJournalIdentifier());}NXOpen::UI::GetUI()->NXMessageBox()->Show("",NXMessageBox::DialogType::DialogTypeInformation, "OK!");// UI->GetUI()->NXMessageBox.Show("", rmation, "OK!");}/* Handle errors */catch ( const UgException &exception ){processException( exception );}四、NXOpen C#1、创建blcok的例子using NXOpen;using NXOpen.Utilities;using NXOpen.UF;using NXOpenUI;//下面是程序片段Session theSession = Session.GetSession();try{Part thePart = theSession.Parts.Work;NXOpen.Features.Feature block = null;NXOpen.Features.BlockFeatureBuilder theBuilder = thePart.Features.CreateBlockFeatureBuilder(block);NXOpen.Point3d basePoint = new Point3d(100f, 100f, 100f);theBuilder.SetOriginAndLengths(basePoint, "100", "200", "300");mit();//mitFeature();UI.GetUI().NXMessageBox.Show("", rmation, "OK!");}catch(NXException ex){UI.GetUI().NXMessageBox.Show("error!", NXMessageBox.DialogType.Error, ex.Message);}2、遍历特征的例子using NXOpen;using NXOpen.Utilities;using NXOpen.UF;using NXOpenUI;//下面是程序片段Session theSession = Session.GetSession();theSession.ListingWindow.Open();try{Part thePart = theSession.Parts.Work;foreach (NXOpen.Features.Feature c in thePart.Features){//NXOpen.Features.Block t = c as NXOpen.Features.Block;//if(t!=null)//{// theSession.ListingWindow.WriteLine(t.ToString());//}theSession.ListingWindow.WriteLine(+"--"+c.ToString());}UI.GetUI().NXMessageBox.Show("", rmation, "OK!");}catch (NXException ex){UI.GetUI().NXMessageBox.Show("error!", NXMessageBox.DialogType.Error, ex.Message);}五、NXOpen.UF1、仿照Open C中的例1子实现using NXOpen;using NXOpen.Utilities;using NXOpen.UF;using NXOpenUI;NXOpen.UF.UFSession theUFSession = NXOpen.UF.UFSession.GetUFSession();try{double[] corner ={ 0, 0, 0 };string[] edge = { "10", "5", "20" };Tag tag;theUFSession.Modl.CreateBlock1(FeatureSigns.Nullsign, corner, edge, out tag);}catch (NXException ex){UI.GetUI().NXMessageBox.Show("error!", NXMessageBox.DialogType.Error, ex.Message);}2、仿照Open C中的例子2实现using NXOpen;using NXOpen.Utilities;using NXOpen.UF;using NXOpenUI;NXOpen.UF.UFSession theUFSession = NXOpen.UF.UFSession.GetUFSession();try{Tag[] list=null;Tag thePart = theUFSession.Part.AskDisplayPart();theUFSession.Modl.CreateList(out list);Tag Next_tag=Tag.Null;do{theUFSession.Obj.CycleObjsInPart(thePart,70/* UF_solid_type*/,ref Next_tag);if (Next_tag == Tag.Null) break;int t, subType;theUFSession.Obj.AskTypeAndSubtype(Next_tag,out t, out subType);if (subType == 0/*UF_solid_body_subtype*/)theUFSession.Modl.PutListItem(list, Next_tag);} while (true);bool isOpen;theUFSession.Ui.IsListingWindowOpen(out isOpen);if (!isOpen) theUFSession.Ui.OpenListingWindow();int sum;theUFSession.Modl.AskListCount(list,out sum);for (int i = 0; i < sum;i++ ){Tag t;theUFSession.Modl.AskListItem(list, i, out t);theUFSession.Ui.WriteListingWindow(t.ToString());}/*Treat all the arguments with the"Output to be freed " annotation as an output parameter.* The system takes care of freeing memory.*/}catch (NXException ex){UI.GetUI().NXMessageBox.Show("error!", NXMessageBox.DialogType.Error, ex.Message);。
图层的基本7个操作方法
图层的基本7个操作方法
1. 创建图层:在相应的图像编辑软件中,选择“新建图层”或使用快捷键(如Ctrl+Shift+N)来创建新的图层。
2. 删除图层:选择要删除的图层,然后点击删除图层按钮(一般为一个垃圾桶图标)或使用快捷键(如Ctrl+Shift+D)来删除图层。
3. 隐藏/显示图层:在图层面板中,点击图层眼睛图标来隐藏或显示图层。
4. 更改图层顺序:在图层面板中,点击并拖动图层以改变其在图层堆栈中的位置,上移或下移图层以改变图层的顺序。
5. 合并图层:选择要合并的图层,然后右键点击图层面板中的其中一层,选择“合并图层”选项或使用快捷键(如Ctrl+E)将图层合并为一个。
6. 锁定图层:在图层面板中,点击图层锁图标来锁定或解锁图层,锁定后无法对图层进行编辑。
7. 透明度/不透明度:在图层面板中,调整图层的不透明度滑块来改变图层的透明度,实现图层的半透明效果。
NXOpenc++创建块布尔运算并设图层
Features::BodyFeature* bodyFeat2 = dynamic_cast<Features::BodyFeature *>(feature3);
std::vector<NXOpen::Body *> bodies2 = bodyFeat2->GetBodies();//feature to body(vector)
std::vector<NXOpen::Body *> bodies1 = bodyFeat1->GetBodies();//feature to body(vector)
NXOpen::Body *body1=dynamic_cast<NXOpen::Body *>(bodies1[0]); //从vector中转出body
feature2=cylinderBuilder1->CommitFeature();
cylinderBuilder1->Destroy();
Features::BodyFeature* bodyFeat1 = dynamic_cast<Features::BodyFeature *>(feature2);
delete displayModification1;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//设置图层
booleanBuilder1->SetOperation(NXOpen::Features::Feature::BooleanTypeSubtract);
NX二次开发遍历工作部件所有体的显示属性(图层,颜色,隐藏状态,线宽,字体,高亮状态)
NX⼆次开发遍历⼯作部件所有体的显⽰属性(图层,颜⾊,隐藏状态,线宽,字体,⾼亮状态)VS2019 NX1946#include <NXOpen/Part.hxx>#include <NXOpen/PartCollection.hxx>#include <NXOpen/ListingWindow.hxx>#include <uf_layer.h>#include<uf_obj.h>UF_initialize();Part* workPart;//定义⼯作部件workPart = theSession->Parts()->Work();//获取⼯作部件char msg[256];std::vector<int> BodyTagVector;//对象TAG容器BodyTagVector.clear();//遍历⼯作部件所有体的显⽰属性BodyCollection* bodys = workPart->Bodies();for (BodyCollection::iterator ite = bodys->begin(); ite != bodys->end(); ite++){Body* bodys = (*ite);BodyTagVector.push_back(bodys->Tag());//获得对象信息UF_OBJ_disp_props_s dispprops;UF_OBJ_ask_display_properties(bodys->Tag(), &dispprops); //获取对象的显⽰属性(图层, 颜⾊, 隐藏状态, 线宽, 字体, ⾼亮状态)sprintf(msg, "体的TAG: %d", bodys->Tag());theSession->ListingWindow()->WriteLine(msg);sprintf(msg, "体的图层:%d", yer);theSession->ListingWindow()->WriteLine(msg);sprintf(msg, "体的颜⾊:%d", dispprops.color);theSession->ListingWindow()->WriteLine(msg);sprintf(msg, "体的隐藏状态:%d", dispprops.blank_status);theSession->ListingWindow()->WriteLine(msg);}UF_terminate();。
图层的正确操作方法
图层的正确操作方法以下是图层的正确操作方法:1. 创建图层:在绘图工具的工作区中,通常有一个“新建图层”或“创建图层”的选项,点击它以创建一个新的空白图层。
2. 命名图层:为了方便管理和识别,应给每个图层命名。
双击图层名称,然后输入一个简洁但有意义的名称。
3. 移动图层:在图层面板中,拖动图层的顺序可以改变它们在画布上的叠放顺序。
点击并拖动图层的小缩略图或其名称,即可移动图层。
4. 可见性控制:点击图层面板中的眼睛图标可以切换图层的可见性。
隐藏图层后,将不会在画布上显示该图层内容。
5. 锁定图层:在图层面板中,有一些图层可以被锁定,防止意外移动或编辑。
点击图层右侧的锁图标可以锁定或解锁图层。
6. 合并图层:有时需要将多个图层合并为一个。
选择要合并的图层,然后右键单击它们,并选择“合并图层”。
7. 调整透明度:通过更改图层的透明度,可以控制图层的不透明度。
在图层面板中找到一个名为“不透明度”的滑块,并将其滑动到所需的不透明度。
8. 添加效果:许多绘图软件支持在图层上应用各种效果,例如阴影、发光等。
在图层面板中,通常有一个称为“效果”的选项,点击它以添加效果。
9. 裁剪图层:有时需要调整图层的大小或形状,即裁剪图层。
选择一个图层,然后在菜单中选择“编辑”>“裁剪”。
10. 复制和粘贴图层:可以复制一个图层的内容并粘贴到另一个图层中。
选择一个图层,然后在菜单中选择“编辑”>“复制”。
再选择要粘贴到的目标图层,在菜单中选择“编辑”>“粘贴”。
请注意,不同的绘图软件在操作图层时可能有细微差异,上述方法适用于一般情况。
在具体使用过程中,请参考相关绘图软件的帮助文档或教程。
图层的设置和操作方法
图层的设置和操作方法
图层是数字图像编辑中非常重要的概念,通过图层,我们可以方便地对图像进行各种操作,例如添加特效、更改颜色和调整亮度等。
下面是图层的设置和操作方法:
1. 新建图层:在图层面板中点击“新建图层”按钮,或者使用快捷键
“Ctrl+Shift+N”来新建一个图层。
2. 删除图层:选中需要删除的图层,然后在图层面板中点击“删除图层”按钮或者使用快捷键“Ctrl+Shift+D”。
3. 改变图层顺序:在图层面板中可以拖动图层来改变它们的顺序,上面的图层会覆盖下面的图层。
4. 合并图层:选中需要合并的图层,然后在图层面板中点击“合并图层”按钮或者使用快捷键“Ctrl+E”。
5. 锁定图层:在图层面板中可以将图层锁定,不允许进行操作。
6. 图层样式:通过图层样式窗口可以添加图层样式,如阴影、发光、描边、渐变等。
7. 图层蒙版:可以在图层面板中添加图层蒙版,用于隐藏或显示特定区域的图像。
8. 图层透明度:通过图层面板可以改变图层的透明度,从而达到透视效果。
9. 图层剪裁:选中需要剪裁的图层,在图层面板中选择“剪裁图层”,然后使用画笔工具或者橡皮擦来剪裁图像。
10. 投影与变换:通过图层面板中的“自由变换”和“透视”功能来进行投影和变换操作,从而产生更加真实的效果。
总之,掌握图层的设置和操作方法可以让你更加高效地进行图像编辑工作。
第五章 NXOPEN详细对象
第五章NXOPEN详细对象5.1特征对象特征对象(Feature)是NX中最重要的一类对象,它是对NX中特征的抽象。
特征的定义为通过一定几何操作后形成的一组面。
例如一个倒角特征(Edge Blend)是通过倒角操作后形成的一组倒角面,如下图所示。
图1更为广义的特征对象也指通过一定操作过程后形成的一组几何对象-面,线和点等。
例如一个点特征为通过特定方式选取几何体上的一个空间位置后形成的点。
特征对象是从NXObject对象继承而来。
5.1.1特征对象属性如图2是一个典型的特征对象的创建过程。
特征对象根据一些输入参数,经过特定的几何操作和运算后,生成特征的几何结果。
输入参数和特征的几何结果都是特征的重要属性。
图2特征对象包括如下的基本属性:Name:特征对象的名称Timestamp:特征对象的时间戳Owning Faces:特征对象包括的面Body:特征对象隶属的体Input Parameters:特征对象的输入参数Parent :特征对象的父特征…5.1.2特征对象与History Tree在基于历史的CAD系统例如NX中,特征对象是按照被创建的先后顺序置于History Tree (历史树)上的,如图3。
Timestamp属性表明了特征对象在History Tree上的创建顺序。
History Tree的构建过程就是CAD中模型的建模过程,在History Tree上前溯或者后进时可以再现模型的每一步建模过程。
Current Feature(当前特征)是History Tree上最后一个已被构建出来的特征对象。
图3History Tree上有的特征对象间会有父子关系存在:如果创建一个特征对象A时的输入参数为特征对象B,那特征对象B为特征对象A的父特征,例如图1中Edge Blend的父特征为Extrude特征。
父特征的Timestamp永远小于子特征的Timestamp。
History Tree上的父子关系也是传递的。
图层常用操作方法
图层常用操作方法图层是数字图像处理软件中常用的功能之一,它可以帮助我们对图像进行精细的编辑和处理。
图层操作是数字图像处理中非常重要的一环,熟练掌握图层操作方法可以帮助我们更加高效地进行图像编辑。
下面我将介绍一些常用的图层操作方法。
1. 创建图层在数字图像处理软件中,创建图层是第一步。
一般来说,我们可以通过点击软件界面上的“新建图层”按钮来创建一个空白的图层。
也可以使用快捷键来创建图层,比如在Adobe Photoshop中,可以按下Ctrl+Shift+N快速创建一个新图层。
另外,在一些软件中还可以通过复制已有图层来创建新图层。
2. 合并图层在对图像进行编辑时,有时候我们需要将多个图层合并成一个图层,以方便后续的处理。
合并图层可以减少图层的数量,使得图像更加清晰。
在大多数图像处理软件中,可以通过选中要合并的图层,然后右键点击鼠标,在弹出的菜单中选择“合并图层”来进行操作。
3. 调整图层顺序在图像处理过程中,有时候我们需要调整图层的顺序,以便更好地完成图像的编辑。
在软件中,一般可以通过拖拽图层来调整图层的顺序。
另外,还可以通过选择“图层”菜单下的“排列”功能来进行图层顺序的调整。
4. 图层的可见性控制在处理复杂的图像时,有时候我们需要临时隐藏某些图层,以便更好地进行编辑。
在软件中,可以通过在图层列表中单击图层前面的眼睛图标来控制图层的可见性。
隐藏的图层不会显示在最终的图像中,但是可以随时重新显示出来。
5. 图层的不透明度调整图层的不透明度是指图层在合成图像时的透明程度。
在软件中,可以通过调整图层的不透明度来改变图层的显示效果。
一般来说,可以通过图层列表中的“不透明度”滑块来进行不透明度的调整。
6. 图层的蒙版图层蒙版是一种非常常用的图层操作方法,它可以帮助我们对图层进行局部的遮挡。
在软件中,可以在图层列表中选择图层,然后点击菜单中的“新建蒙版”来创建一个蒙版。
通过使用画笔工具或选择工具,可以对蒙版进行局部的编辑,来达到我们想要的效果。
图层操作的技巧
图层操作的技巧以下是一些图层操作的技巧:1. 锁定图层:在图层面板中,单击图层名称前的锁图标,可以锁定图层以防止对其进行误操作。
2. 命名图层:为了更好地组织和识别图层,请为每个图层命名。
右键单击图层名称并选择"重命名",或者双击图层名称进行编辑。
3. 隐藏和显示图层:通过在图层面板中单击图层眼睛图标来隐藏或显示图层。
这对于在多个图层之间快速导航和编辑非活动图层非常有用。
4. 合并图层:将多个图层合并为一个图层,可以减少文件大小并简化编辑。
选择要合并的图层,然后右键单击并选择"合并图层"。
5. 图层蒙板:使用图层蒙板可以对图层进行非破坏性编辑。
通过创建一个蒙板并使用黑色或白色画笔,可以删除或还原图层的一部分。
6. 透明度和不透明度:通过调整图层的不透明度,可以改变图层的可见度。
在图层面板中,滑动图层透明度滑块来调整图层的不透明度。
7. 图层样式:通过图层样式,可以为图层添加阴影、边框、渐变等效果。
在图层面板中,单击图层样式图标以访问图层样式选项。
8. 克隆图层:通过克隆图层,可以复制一个图层并将其重新定位到画布上的另一个位置。
选择要克隆的图层,然后右键单击并选择"克隆图层"。
9. 图层组:使用图层组来将相关的图层组织到一个文件夹中。
在图层面板中,选择要添加到组中的图层,然后右键单击并选择"新建组"。
10. 图层顺序:通过拖动图层在面板中的位置,可以更改图层的堆叠顺序。
将图层拖动到其他图层的上方或下方,可以使其出现在其他图层之前或之后。
NXOpen简单干涉体改色改透明度和放置图层
NXOpen简单⼲涉体改⾊改透明度和放置图层//⽤户头⽂件#include <NXOpen/BasePart.hxx>#include <NXOpen/Body.hxx>#include <NXOpen/BodyCollection.hxx>#include <NXOpen/Builder.hxx>#include <NXOpen/GeometricAnalysis_AnalysisManager.hxx>#include <NXOpen/GeometricAnalysis_SimpleInterference.hxx>#include <NXOpen/NXObject.hxx>#include <NXOpen/NXObjectManager.hxx>#include <NXOpen/Part.hxx>#include <NXOpen/PartCollection.hxx>#include <NXOpen/TaggedObject.hxx>#include <NXOpen/TaggedObjectCollection.hxx>#include <NXOpen/ListingWindow.hxx>#include <NXOpen/NXException.hxx>#include <NXOpen/DisplayManager.hxx>#include <NXOpen/DisplayModification.hxx>#include <NXOpen/DisplayableObject.hxx>#include <uf_ui.h>#include <uf.h>//设置过虑(注释处改动即可使⽤)Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;std::vector<Selection::MaskTriple> maskArray(1);maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype/*此处控制选择的类型,右键点转到定义查开类型*/, UF_UI_SEL_FEATURE_SOLID_BODY /*此处控制选择的类型,在头⽂件uf_ui_types.可以查到*/ ); // Bodiesselection01/*此处blockID需按实际改*/->GetProperties()->SetSelectionFilter("SelectionFilter",action,maskArray);selection02/*此处blockID需按实际改*/->GetProperties()->SetSelectionFilter("SelectionFilter",action,maskArray);//⽤户代码Part *workPart = theSession->Parts()->Work();Part *displayPart = theSession->Parts()->Display();//获取UI选择的第⼀个体PropertyList* selection01Props = selection01->GetProperties();std::vector<NXOpen::TaggedObject *> firstBody = selection01Props->GetTaggedObjectVector("SelectedObjects");delete selection01Props;selection01Props = NULL;//获取UI选择的第⼆个体PropertyList* selection02Props = selection02->GetProperties();std::vector<NXOpen::TaggedObject *> secondBody = selection02Props->GetTaggedObjectVector("SelectedObjects");delete selection02Props;selection02Props = NULL;//简单⼲涉GeometricAnalysis::SimpleInterference *simpleInterference1;simpleInterference1 = workPart->AnalysisManager()->CreateSimpleInterferenceObject();simpleInterference1->SetInterferenceType(GeometricAnalysis::SimpleInterference::InterferenceMethodInterferenceSolid);Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(firstBody[0]->Tag())));simpleInterference1->FirstBody()->SetValue(body1);Body *body2(dynamic_cast<Body *>(NXObjectManager::Get(secondBody[0]->Tag())));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();//获取颜⾊值控件PropertyList *blockColorProps = colorPicker0->GetProperties();std::vector<int> color = blockColorProps->GetIntegerVector("Value");delete blockColorProps;blockColorProps = NULL;//获取图层实数型的值PropertyList *integer0LayerProps = integer0Layer->GetProperties();int integer0LayerValue = integer0LayerProps->GetInteger("Value");delete integer0LayerProps;integer0LayerProps = NULL;//得到的⼲涉体改⾊和放置图层DisplayModification *displayModification1;displayModification1 = theSession->DisplayManager()->NewDisplayModification();displayModification1->SetApplyToAllFaces(false);displayModification1->SetApplyToOwningParts(false);displayModification1->SetNewTranslucency(70); //设置透明度displayModification1->SetNewLayer(integer0LayerValue);//设置图层displayModification1->SetNewColor(color[0]);//得到的⾊值是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;。
nxopen 面上的圆心坐标
nxopen 面上的圆心坐标
nxopen 是一款用于工程设计和制造的软件开发工具包。
它为用户提供了一系列的函数和类,用于快速生成、编辑和分析 CAD 模型。
在 nxopen 中,我们可以通过使用坐标系统和几何实体的属性来获取圆心坐标。
要获取面上圆的圆心坐标,我们可以按照以下步骤进行操作:
1. 确定要获取圆心坐标的面。
在 nxopen 中,我们可以使用选择工具或者获取面的 ID 来选择面。
2. 通过面得到对应的圆。
对于被选中的面,可以使用 nxopen 中的函数或者方法来获取与之相关的圆实体。
3. 通过圆获取圆心坐标。
一旦获取到圆实体,使用相应的函数或方法从圆对象中提取圆心的坐标。
注意事项:
- 在选择面时,确保选中的面确实为一个圆面。
- 在获取面对应的圆时,确保面确实与一个圆相关联。
- 确保使用正确的函数或方法来提取圆心坐标。
使用 nxopen 来获取面上圆心坐标,可以方便地进行工程设计和制造过程中的相关分析和操作。
NXOpen中的类别和图层
NXOpen中的类别和图层NXOpen中的类别和图层NXOpen中使用CategoryCollection管理各个类别,每个类别的实例是Category,该类别的实例下方又会有多个图层,多个图层使用LayerManager 管理,NX中并无图层的实例,因为NX中最多有256个图层,每个图层用1-256的数值表示,LayerManager通过对给定值的图层进行操作。
下面是用C#编写的一个图层浏览窗口。
先是dll入口函数:using System;namespace NXLayerViewer{public class DLLEntry{public static void Main(){LayerViewerForm lvf = new LayerViewerForm();lvf.ShowDialog();}}}然后加入了一个窗口类LayerViewerForm,显示信息,手工完成代码如下:using System;using System.Drawing;using System.Windows.Forms;using NXOpen;using yer;namespace NXLayerViewer{public partial class LayerViewerForm : Form{private static Session theSession;private static Part workPart;private static CategoryCollection lc;private static LayerManager lm;public LayerViewerForm(){InitializeComponent();theSession = Session.GetSession();workPart = theSession.Parts.Work;lc = yerCategories;lm = yers;}private void LayerViewerForm_Load(object sender, EventArgs e){label1.Text = label2.Text = label3.Text = "";FillCategoryTreeView(checkBox1.Checked);}private void FillCategoryTreeView(bool DoNotListLayersWithoutObjects) {categoryTreeView.Nodes.Clear();try{foreach (Category c in lc){TreeNode tn = new TreeNode();tn.Text = ;tn.Tag = NodeType.Category;int[] layers = c.GetMemberLayers();foreach (int i in layers){//layers with objects,should be addedTreeNode layer_node = new TreeNode(i.ToString());layer_node.Tag = yer;if (lm.WorkLayer == i)layer_node.ForeColor = Color.Red;if (lm.GetAllObjectsOnLayer(i).Length != 0)tn.Nodes.Add(layer_node);else//layers without objects,depends on the input optionif(!DoNotListLayersWithoutObjects)tn.Nodes.Add(layer_node);}categoryTreeView.Nodes.Add(tn);}}catch (System.Exception ex){MessageBox.Show(ex.Message);}}private void checkBox1_CheckedChanged(object sender, EventArgs e){FillCategoryTreeView(checkBox1.Checked);}private void CollapseToolStripMenuItem_Click(object sender, EventArgs e){categoryTreeView.CollapseAll();}private void ExpandToolStripMenuItem_Click(object sender, EventArgs e) {categoryTreeView.ExpandAll();}private void RefreshToolStripMenuItem_Click(object sender, EventArgs e){categoryTreeView.Refresh();}private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) {TreeNode tn = categoryTreeView.SelectedNode;if (((NodeType)tn.T ag) == NodeType.Category){Category c=lc.FindObject(tn.T ext);label1.Text = "Type:Category" + "(" +c.GetMemberLayers().Length.ToString() + ")";label2.Text = "Name:" + ;label3.Text = "Description:" + c.Description;}else//a layertry{int t=int.Parse(tn.T ext);label1.Text = "Type:Layer";label2.Text = "State:" + lm.GetState(t).ToString();label3.Text = "Objects:" +lm.GetAllObjectsOnLayer(t).Length.T oString(); }catch (System.Exception ex){MessageBox.Show(ex.Message);}}private enum NodeType : byte{Category=1,Layer=2}}}运行效果如下:注意红色的是工作图层。
NXOpen图层操作
NXOpen图层操作头文件uf_layer.h中包含了操作图层的一系列函数,这些函数能够完成如下工作:∙查询工作图层;∙查询分类名称,分类成员图层,以及其描述;∙查询图层状态;∙遍历图层;∙编辑分类描述;∙编辑分类下的图层;∙设置图层状态;∙创建、查询、或者编辑图层分类。
1. 查询和设置图层状态图层的状态NX中最多有256个图层,头文件中的定义如下:#define UF_LAYER_MIN_LAYER (1)#define UF_LAYER_MAX_LAYER (256)图层有四种状态:工作,活动,不活动和参考图层,对应的定义如下:#define UF_LAYER_WORK_LAYER 1#define UF_LAYER_ACTIVE_LAYER 2#define UF_LAYER_REFERENCE_LAYER 3#define UF_LAYER_INACTIVE_LAYER 4与图层状态相关的是一个结构体UF_LAYER_status_info_s,也被定义为UF_LAYER_status_info_t类型,定义如下:struct UF_LAYER_status_info_s{int layer_number;int layer_status;};其中layer_number是图层值,介于UF_LAYER_MIN_LAYER和UF_LAYER_MAX_LAYER之间,亦即1-256(可包括),layer_status就是图层状态,就是前面提到的四种之一。
相关的函数有UF_LAYER_ask_work_layer、UF_LAYER_ask_status和UF_LAYER_set_status,第一个函数查询工作图层,后面两个则分别是查询和设置给定的图层状态。
下面的测试代码用于查询工作图层,并将下一个图层作为工作图层:void AskAndSetWorkLayer(){int t;char msg[80];UF_LAYER_ask_work_layer(&t);sprintf_s(msg,"Work Layer is: %d",t);uc1601(msg,1);t++;if(t>UF_LAYER_MAX_LAYER)t=UF_LAYER_MIN_LAYER;UF_LAYER_set_status(t,UF_LAYER_WORK_LAYER);UF_LAYER_ask_work_layer(&t);sprintf_s(msg,"Work Layer is: %d",t);uc1601(msg,1);}另外一个比较有意思的函数是UF_LAYER_set_all_but_work,也是用于设置状态的,但是是除去工作图层之后的其他图层。
第五章 NXOPEN详细对象
第五章NXOPEN详细对象5.1特征对象特征对象(Feature)是NX中最重要的一类对象,它是对NX中特征的抽象。
特征的定义为通过一定几何操作后形成的一组面。
例如一个倒角特征(Edge Blend)是通过倒角操作后形成的一组倒角面,如下图所示。
图1更为广义的特征对象也指通过一定操作过程后形成的一组几何对象-面,线和点等。
例如一个点特征为通过特定方式选取几何体上的一个空间位置后形成的点。
特征对象是从NXObject对象继承而来。
5.1.1特征对象属性如图2是一个典型的特征对象的创建过程。
特征对象根据一些输入参数,经过特定的几何操作和运算后,生成特征的几何结果。
输入参数和特征的几何结果都是特征的重要属性。
图2特征对象包括如下的基本属性:Name:特征对象的名称Timestamp:特征对象的时间戳Owning Faces:特征对象包括的面Body:特征对象隶属的体Input Parameters:特征对象的输入参数Parent :特征对象的父特征…5.1.2特征对象与History Tree在基于历史的CAD系统例如NX中,特征对象是按照被创建的先后顺序置于History Tree (历史树)上的,如图3。
Timestamp属性表明了特征对象在History Tree上的创建顺序。
History Tree的构建过程就是CAD中模型的建模过程,在History Tree上前溯或者后进时可以再现模型的每一步建模过程。
Current Feature(当前特征)是History Tree上最后一个已被构建出来的特征对象。
图3History Tree上有的特征对象间会有父子关系存在:如果创建一个特征对象A时的输入参数为特征对象B,那特征对象B为特征对象A的父特征,例如图1中Edge Blend的父特征为Extrude特征。
父特征的Timestamp永远小于子特征的Timestamp。
History Tree上的父子关系也是传递的。
数字化设计基础-NX制图模块操作常见问题及技巧梳理
选择打印机为 “Microsoft XPS Document Writer”
设置宽度为 “Custom Normal”
输出:图像分辨率为“中”
NX显示
打印显示
4
1、直接点击视图中的草图绘制, 绘制的曲线是在图纸上,不会跟随 视图移动。
2、视图中绘制曲线方法: a)选中视图,右键选择活动草图 视图,绘制曲线 b)选中视图,右键选择展开
视图曲线 图 纸 曲 线
3
三、图纸可见线粗细设置
注意:可见线粗细设置粗细后在NX 中显示并不是真实输出情况,可以 选择XPS打印格式查看。
NX常见问题及技巧梳理 制图模块
一、图纸大小和视图比例的查看
启动NX,切换到制图模块
1、部件导航器图纸页工作的活动 的图纸页双击
2、部件导航器图纸页工作的活动 的图纸页右键编辑图纸页
3、在工作区域双击图纸边框线或者点 击右键编辑图纸页
2
二、图纸与视图绘制草图的区别
注意:工作区域添加草图,区分为 在图纸上绘制和视图内部绘制
UG二次开发之NX_Open编程指南
简介编程指南概述NX编程指南目的是介绍”NX Open Application Programming Interface(API)工具包”。
NX编程指南为每一位新NX Open程序猿介绍使用”NX Open工具包”开发NX自动化解决方案时经常遇到的所有问题。
编程指南不提供”NX Open APIs”的完整定义。
完整的API定义可以在” NX Open Reference help”中找到,对每一个支持NX Open的特定语言,都提供一份参考帮助文档(例如NX Open for Java Reference Guide)。
NX提供了一套全面的自动化工具集,包括知识融合和UI Styler。
这些和其他自动化工具的用户文档可以在NX帮助图书馆的自动化章节找到。
本指南只提供了NX Open如何与其他工具工作的概述。
NX自动化视觉继承自设计理念的开放特性,NX提供了一套全面的工具包,可以让您在产品的生命周期中捕获和保存领域知识(domain knowledge)。
开放自动化视觉中心围绕着以下能力:提供灵活的解决方案来捕获工作流程知识的能力,自动化能力和定义用户与NX环境交互的能力,开放式自动化视觉中心。
Siemens PLM Software公司致力于提供能够在异构网络环境下优秀工作的解决方案,并努力支持广泛的语言,平台和出现的新技术。
从简单的自定义实用程序,到先进的编程工具包,”NX Open”产品套件提供了广泛而灵活的环境来自动化和定制NX。
Siemens PLM Software公司将努力提供以下”NX Open”特点:•在所有语言下(包括知识融合),一个统一的对象模型•结合流行的现代编程语言•支持所有的语言和平台的日志记录和回放•完整的日志记录和自动化覆盖率•与高端开发环境集成•利用Teamcenter管理日志和方案“NX Open”提供了以下好处:•定制NX以满足您的特定行业和流程的需求•通过自动执行复杂的重复性任务减少产品上市时间•通过捕捉和重用的公司和行业最佳实践减少返工•保持NX的外观和感觉,以减少使用者训练时间Siemens PLM Software公司将努力确保NX版本之间的高度兼容性,以维持你的自动化投资。
ug图层设置教程
图层设置图层号图层内容1~20 实体(Solid Bodies)21~40 草图(Sketchs)41~60 曲线(Curves)61~80 参考对象(Reference Geometries)81~100 片体(Sheet Bodies)101~120 工程图对象(Drafting Objects)1建立新类目的步骤(1)选择菜单“格式”→“图层类别”命令,系统弹出“图层类别”对话框。
(2)在“图层类别”对话框中的“类别”文本框输入新类别的名称。
(3)单击“创建/编辑”按钮,系统弹出“图层类别“对话框(4)在“图层”列表中选择需要的图层,单击“添加”按钮,再单击“确定”按钮即完成新的类目建立。
2编辑类目“图层设置”对话框的选项如下(1)“工作”文本框:在其中输入某图层类别的名称,系统会选择属于该类别的所有图层,并自动改变其状态(2)“范围或类别”文本框:在其中输入图层的名称,系统会选择属于该类别的所有图层,并自动改变其状态。
(3)“编辑类别”按钮:单击该按钮,弹出“图层类别”对话框,可以利用对话框对图层进行各种相关操作。
(4)“信息”按钮:单击该按钮,弹出“信息”对话框。
其中显示该部件文件中所有的图层及图层的相关信息,如图层编号、状态和图层类别等。
(5)“过滤器”文本框:在其中输入要供设置的图层名称,则系统在过滤器下方的的图名列表框内列出符合条件的图层名称。
(6)“可选”按钮:利用该按钮可以指定图层的属性设为可选状态,可选状态的图层允许用户选择其上的所有对象。
(7)“作为工作图层”按钮:单击该按钮,将指定图层设为工作图层。
(8)“不可见”按钮:单击该按钮,隐藏指定的图层,其上的所有对象不可见。
(9)“只可见”按钮:单击该按钮,显示指定的图层显示,其上的所有对象可见。
(10)“显示对象数量”复选框:选中该复选框,系统会在图层列中各图层号的右边显示它所包含的对象数量。
(11)“显示类别名”复选框:选中该复选框,系统会在图层列表框中显示图层所属的图层类名称。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NXOpen图层操作
头文件uf_layer.h中包含了操作图层的一系列函数,这些函数能够完成如下工作:
∙查询工作图层;
∙查询分类名称,分类成员图层,以及其描述;
∙查询图层状态;
∙遍历图层;
∙编辑分类描述;
∙编辑分类下的图层;
∙设置图层状态;
∙创建、查询、或者编辑图层分类。
1. 查询和设置图层状态
图层的状态
NX中最多有256个图层,头文件中的定义如下:
#define UF_LAYER_MIN_LAYER (1)
#define UF_LAYER_MAX_LAYER (256)
图层有四种状态:工作,活动,不活动和参考图层,对应的定义如下:
#define UF_LAYER_WORK_LAYER 1
#define UF_LAYER_ACTIVE_LAYER 2
#define UF_LAYER_REFERENCE_LAYER 3
#define UF_LAYER_INACTIVE_LAYER 4
与图层状态相关的是一个结构体UF_LAYER_status_info_s,也被定义为
UF_LAYER_status_info_t类型,定义如下:
struct UF_LAYER_status_info_s
{
int layer_number;
int layer_status;
};
其中layer_number是图层值,介于UF_LAYER_MIN_LAYER和
UF_LAYER_MAX_LAYER之间,亦即1-256(可包括),layer_status就是图层状态,就是前面提到的四种之一。
相关的函数有UF_LAYER_ask_work_layer、UF_LAYER_ask_status和
UF_LAYER_set_status,第一个函数查询工作图层,后面两个则分别是查询和设置给定的图层状态。
下面的测试代码用于查询工作图层,并将下一个图层作为工作图层:
void AskAndSetWorkLayer()
{
int t;
char msg[80];
UF_LAYER_ask_work_layer(&t);
sprintf_s(msg,"Work Layer is: %d",t);
uc1601(msg,1);
t++;
if(t>UF_LAYER_MAX_LAYER)
t=UF_LAYER_MIN_LAYER;
UF_LAYER_set_status(t,UF_LAYER_WORK_LAYER);
UF_LAYER_ask_work_layer(&t);
sprintf_s(msg,"Work Layer is: %d",t);
uc1601(msg,1);
}
另外一个比较有意思的函数是UF_LAYER_set_all_but_work,也是用于设置状态的,但是是除去工作图层之后的其他图层。
与设置状态相关的还有
UF_LAYER_set_many_layers_status函数,这个比较复杂。
2. 遍历图层
使用函数UF_LAYER_cycle_by_layer遍历一个图层,这里遍历的意思指查询位于本图层下的所有对象,函数原型如下:
int UF_LAYER_cycle_by_layer(int layer_number, tag_t * object_tag) 第一个参数提供待查询的图层号,值为0-256,这时肯定有人会问,图层号不是只有1-256之间吗?是的,这里多的0并不是指的图层,而是查询所有图层。
而第二个参数则是所查询到的对象的标识,在使用的时候,必须传递给一个为NULL_TAG的标识,这样能让程序知道如何工作,在第一次调用该函数的时候,返回第一个查找到的对象的标识,然后下一次调用的时候则是查找下一个对象标识,等所有的对象都查询完毕,则该变量被设置为NULL_TAG,表明查询完毕。
注意:在查询循环中,切记不要试图删除对象,这会导致查询下一个对象时出错。
下面的测试代码阐明如何查询图层22中的所有对象。
void AskObjectsOnLayer22()
{
int t=-1;
char msg[80];
tag_t tag_obj=NULL_TAG;
do
{
UF_LAYER_cycle_by_layer(22,&tag_obj);
t++;
} while (tag_obj!=NULL_TAG);
sprintf_s(msg,"Total Object(s) on Layer 22: %d",t);
uc1601(msg,1);
}
由于采用的是do…while循环,因此在使用时应将统计数目设置为-1。
3. 与分类相关的函数
在NX中,一个或者多个图层可以形成一组,也就是分类的概念,这在NX的界面中,可以使用如下方式看到,Ctrl+L,然后在图层设置中选中“类别显示”,即可看到NX中预定义的分类:
NX中预定义好了许多图层分类,这将有助于模型文件的管理,例如,根据NX推荐的做法,草图应归于21-60层,基准应位于61-80层(NX创建的基准坐标系就是位于61层)等,本人所在的公司就是按这个要求来执行的。
接下来我们看看与图层分类相关的一些结构和函数。
结构体
UF_LAYER_category_info_s,也被用作UF_LAYER_category_info_t,其定义如下:
struct UF_LAYER_category_info_s
{
char name[MAX_ENTITY_NAME_SIZE+1];
logical layer_mask[UF_LAYER_MAX_LAYER];
char descr[UF_LAYER_CAT_DESC_LEN+1];
};
其中第一个参数是分类的名称,其长度不应超过实体名称长度(128),第二个参数决定1-256号图层是否属于该图层,如果对应位为TRUE,例如
layer_mask[0]=TRUE,则1号图层属于该分类,如果
layer_mask[134]=FALSE,则表明该135号图层不属于该分类。
第三个参数是分类描述,简单介绍该分类的用途,或者其他信息,长度不超过80。
对分类的操作,无外乎创建、查询和编辑等。
先说说创建图层分类。
函数UF_LAYER_create_category用于创建一个分类,函数原型如下:
int UF_LAYER_create_category(UF_LAYER_category_info_p_t category_info, tag_t * category)
第一个参数就是前面提到过的结构体,该结构体包含了一个图层分类应该具有的三要素:名称,所包含的图层,以及描述,第二个参数则返回函数所创建的图层分类标识。
下面的测试代码创建了一个图层,图层中包括了11,21,31,41号图层。
void CreateCategory()
{
char Cname[MAX_ENTITY_NAME_SIZE+1]="LEMNISCATE";
logical Clayer_mask[UF_LAYER_MAX_LAYER];
char Cdescr[UF_LAYER_CAT_DESC_LEN+1]="Created By Lemniscate";
UF_LAYER_category_info_t cate;
strcpy_s(,Cname);
strcpy_s(cate.descr,Cdescr);
for(int i=0;i<UF_LAYER_MAX_LAYER;i++) yer_mask[i]=FALSE;
yer_mask[10]=TRUE;
yer_mask[20]=TRUE;
yer_mask[30]=TRUE;
yer_mask[40]=TRUE;
tag_t Tcat=NULL_TAG;
UF_LAYER_create_category(&cate,&Tcat); }
运行效果如下:
与图层分类中三要素相对应地,图层分类相关的编辑函数有三个,即对名称、图层和描述的编辑,函数分别为UF_LAYER_edit_category_name、
UF_LAYER_edit_category_layer和UF_LAYER_edit_category_descr,这里就不展开细说。
图层分类的查询函数有两个,UF_LAYER_ask_category_tag和
UF_LAYER_ask_category_info,前者根据图层分类名称查询其图层分类标识,后者则是根据图层分类标识,去填充与之相关的UF_LAYER_category_info_t 类型。
最后需要提到的是,以前与图层分类操作的三个函数是uc5007(被
UF_LAYER_create_category取代),uc5008(被
UF_LAYER_ask_category_info取代),以及uc5009(被
UF_LAYER_edit_category_layer取代),不应该使用uc5007-5009这三个函数,而是采用新的函数。