UG/NX二次开发Siemens官方NXOPEN实例解析—2.6 CreateNote(注释)

列文章目录

UG/NX二次开发Siemens官方NXOPEN实例解析—2.1 AssemblyViewer(树列表)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.2 Selection(选择过滤器)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.3 Selection_UIStyler(边倒角)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.4 File2Points(读取文本)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.5 QuickExtrude(拉伸)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.6 CreateNote(注释)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.7 DiameterSymbol(标注符号) 
UG/NX二次开发Siemens官方NXOPEN实例解析—2.8 DrawingCycle(图纸打印)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.9 InteropCallCFromDotNet(VB调用VC++ DLL实践)
UG/NX二次开发Siemens官方NXOPEN实例解析—2.10 InteropNXOpenWithUFWrap(NXOPEN与Ufun混合使用)

前言

        随着工业智能化的不断发展,UG二次开发的需求越来越多,也吸引了大批的二开从业人员,本人作为一名资深IT从业者(10年+)也毅然加入二次开发大军。

        然而,和流行IT行业(互联网、金融、医疗等)相比,工业智能化的门槛显得更高一点,专业的工业软件,相对封闭的开发理念和更小的开发圈子,让刚进入二开的从业者有点举步维艰。边学边整理,希望通过这系列文章的整理能给二开的生态增添一叶绿。


一、知识点提取

本实例主要实现了创建注释、拷贝注释,主要设计的知识点如下:

1、通过ug_default.sbf文件,加载注释列表

2、创建新的注释

3、选择已有注释,拷贝注释

二、案例需求分析

1、效果图

2、需求分解

1、通过ug_default.sbf文件,加载注释列表

2、创建新的注释

3、选择已有注释,拷贝注释

三、程序分析

1、源码所在目录

UGOPEN\SampleNXOpenApplications\C++\CreateNote

2、主要功能分析 

1、通过ug_default.sbf文件,加载注释列表

//Load all the symbols from current sbf file to the enum list
void CreateNote::LoadSbfFile()
{
	NXOpen::BlockStyler::PropertyList *sbfFileBrowseProps = sbfFileBrowse->GetProperties();
	NXOpen::NXString sbfFileBrowse1 = sbfFileBrowseProps->GetString("Path");	

	if(!strcmp(sbfFileBrowse1.GetText(),""))
	{
		char *rootDir=NULL;
		UF_translate_variable("UGII_ROOT_DIR",&rootDir);
		NXString symbolDir = rootDir ;
		sbfFileBrowseProps->SetString("Path", symbolDir + "\\ug_default.sbf");	
	}

	sbfFileBrowse1 = sbfFileBrowseProps->GetString("Path");	
	delete sbfFileBrowseProps;
	theSession->Parts()->Work()->Annotations()->SetCurrentSbfFile(sbfFileBrowse1.GetText());
	std::vector<NXString> symbolNames= theSession->Parts()->Work()->Annotations()->ReadAllSymbolNamesFromSbfFile();
	NXOpen::BlockStyler::PropertyList *symListProps = symList->GetProperties();	
	symListProps->SetEnumMembers("Value",symbolNames);
	delete symListProps;
}

这个方法里面包括了以下知识点:

1、获取环境变量的方法 UF_translate_variable("UGII_ROOT_DIR",&rootDir)

2、解析sbf文件方法theSession->Parts()->Work()->Annotations()->ReadAllSymbolNamesFromSbfFile()

2、创建新的注释 

if(!strcmp(noteType2.GetText(),"Create from user defined symbol"))
{
	NXOpen::BlockStyler::PropertyList *symListProps = symList->GetProperties();
	NXString text = symListProps->GetEnumAsString("Value");
	delete symListProps;
	double scaleVal = scale->GetProperties()->GetDouble("Value");
	double aspectRatioVal = aspectRatio->GetProperties()->GetDouble("Value");
	double symWidth[256],symHeight[256];
	NXOpen::SymbolFont *noteSymbol = theSession->Parts()->Work()->Annotations()->LoadSymbolFontFromSbfFile(text,symWidth,symHeight);
	userSymbolPreferences1 = theSession->Parts()->Work()->Annotations()->NewUserSymbolPreferences(Annotations::UserSymbolPreferences::SizeTypeScaleAspectRatio,scaleVal,aspectRatioVal);

	//Selected text of the symbol is converted to symbol
	text = "<%"  + text + ">";
	string noteText = text.GetText();
	std::remove(noteText.begin(),noteText.end(),' ');
	size_t pos1 = noteText.find_first_of(">");
	noteText = noteText.substr(0,++pos1);
	NXString text1 = noteText;
	stringArray1.push_back(text1.GetText());	
	NXOpen::BlockStyler::PropertyList *selLocationProps = selLocation->GetProperties();
	NXOpen::Point3d cursor = selLocationProps->GetPoint("CursorLocation");
	delete selLocationProps;

	//Creates note in the given location
	theSession->Parts()->Work()->Annotations()->CreateNote(stringArray1,cursor,AxisOrientationHorizontal,letteringPreferences1,userSymbolPreferences1);		
}

这个方法里面包括了以下知识点:

1、创建注释方法:theSession->Parts()->Work()->Annotations()->CreateNote()

2、获取点选坐标方法:NXOpen::Point3d cursor = selLocationProps->GetPoint("CursorLocation")

3、选择已有注释,拷贝注释

if(!strcmp(noteType2.GetText(),"Copy existing symbol"))
{
	std::vector<NXOpen::TaggedObject *>selectedObject;

	NXOpen::BlockStyler::PropertyList *selectNoteProps = selectNote->GetProperties();		
	selectedObject = selectNoteProps->GetTaggedObjectVector("SelectedObjects");
	delete selectNoteProps;

	NXOpen::BlockStyler::PropertyList *selLocationProps = selLocation->GetProperties();
	NXOpen::Point3d cursor = selLocationProps->GetPoint("CursorLocation");
	delete selLocationProps;

	//Here the user selected note/symbol is copied
	if (selectedObject.size()>0)
	{
		Annotations::Note *note1(dynamic_cast<Annotations::Note *>(selectedObject[0]));
		if(note1!=NULL)
		{				
			letteringPreferences1 = note1->GetLetteringPreferences();
			userSymbolPreferences1 = note1->GetUserSymbolPreferences(); 
			stringArray1 = note1->GetText();
			theSession->Parts()->Work()->Annotations()->CreateNote(stringArray1,cursor,AxisOrientationHorizontal,letteringPreferences1,userSymbolPreferences1);
		}
	}
}

1、获取选择注释对象方法:selectedObject = selectNoteProps->GetTaggedObjectVector("SelectedObjects");

2、获取点选坐标方法:NXOpen::Point3d cursor = selLocationProps->GetPoint("CursorLocation")

3、创建注释方法:theSession->Parts()->Work()->Annotations()->CreateNote()

4、 补充一个知识点,选择对象控件根据注释过滤的方法

selectNote = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("selectNote"));
//Setting selection mask to select only drafting notes or symbols
NXOpen::Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
std::vector<NXOpen::Selection::MaskTriple>selectionMask_array(2);
selectionMask_array[0].Type = UF_drafting_entity_type;
selectionMask_array[0].Subtype = UF_draft_note_subtype;
selectionMask_array[1].Type = UF_drafting_entity_type;
selectionMask_array[1].Subtype = UF_draft_label_subtype;
selLocation->GetProperties()->SetEnumAsString("StepStatus","Required");		
selectNote->GetProperties()->SetEnumAsString("StepStatus","Required");
selectNote->GetProperties()->SetSelectionFilter("SelectionFilter",action,selectionMask_array);

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的C语言程序,实现了上述功能选择的主界面: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 新建记事本 void createNote() { // 实现新建记事本的功能 printf("新建记事本\n"); } // 查看已保存的记事本文件 void viewNote() { // 实现查看已保存记事本文件的功能 printf("查看已保存的记事本文件\n"); } // 删除记事本文件 void deleteNote() { // 实现删除记事本文件的功能 printf("删除记事本文件\n"); } // 编辑记事本内容 void editNote() { // 实现编辑记事本内容的功能 printf("编辑记事本内容\n"); } int main() { char choice; do { // 显示主界面 printf("请选择功能:\n"); printf("a.新建记事本\n"); printf("b.查看已保存的记事本文件\n"); printf("c.删除记事本文件\n"); printf("d.编辑记事本内容\n"); printf("e.退出\n"); // 读取用户输入的选择 choice = getchar(); getchar(); // 读取多余的回车符 // 根据用户选择执行相应的功能 switch (choice) { case 'a': createNote(); break; case 'b': viewNote(); break; case 'c': deleteNote(); break; case 'd': editNote(); break; case 'e': printf("退出程序\n"); break; default: printf("无效的选择,请重新输入\n"); } } while (choice != 'e'); return 0; } ``` 当用户运行程序时,会显示主界面,让用户选择相应的功能。根据用户的选择,程序会调用对应的函数实现相应的功能。在本例中,我们仅仅显示了每个功能的名称,实际上你需要在每个函数中实现相应的功能,比如创建新的记事本文件、列出已保存的文件、删除文件等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MarcoPro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值