objectArx ---基础操作

一、自动加载Base.arx

  • 功能:测试时不用频繁的打开关闭cad 去 加载 卸载 Base.arx

  • 模板:以第(三)篇文件结构为基础

  • Commands.h

    #include "StdAfx.h"
    
    void AddCommands();
    void lapp();
    void uapp();
    
  • Commands.cpp

    #include "StdAfx.h"
    #include "Commands.h"
    #include "Editor.h"
    #include "acedCmdNF.h"
    
    void AddCommands()
    {	// 加载arx
    	Editor::AddCommand(L"lapp", ACRX_CMD_MODAL, lapp);
    	// 卸载arx
    	Editor::AddCommand(L"uapp", ACRX_CMD_MODAL, uapp);
    }
    
    
    void lapp() {
    	// 加载arx,acedCommandS模拟人工输入,注意添加头文件,注意加载文件位置
    	if(acedCommandS(RTSTR, _T("arx"), 
    					RTSTR, _T("l"), 
    					RTSTR, _T("D:\\CPP\\Base\\x64\\Debug\\Base.arx"), 
    					RTNONE)
    					==RTNORM) 
    			acutPrintf(_T("\n加载成功"));
    }
    
    void uapp() {
    	if (acedCommandS(RTSTR, _T("arx"), 
    					RTSTR, _T("u"), 
    					RTSTR, _T("D:\\CPP\\Base\\x64\\Debug\\Base.arx"), 
    					RTNONE) 
    					== RTNORM) 
    		acutPrintf(_T("\n卸载成功"));
    }
    

    注意:

    • 组名:修改Editor.cpp和acrxEntryPoint.cpp中的命令组名(去看代码),不可与Base.arx相同
    • 保存位置:生成后改名为luapp.arx,文件单独保存

二、文件选择

2.1 CAD风格

  • 打开文件对话框

    // 创建文件的结果缓冲区节点
    resbuf *fileName = NULL;
    
    // 函数:对话框标题、默认路径、默认后缀名、默认名字、标识符(0打开)、文件的结果缓冲区节点
    if (acedGetFileNavDialog(_T("文件选择"), 
    						 NULL, 
    						 _T("arx;dwg"), 
    						 _T("test"), 
    						 0, 
    						 &fileName) == RTNORM)
    {
    	if (acedArxLoad(fileName->resval.rstring) != RTNORM)
    	{
    		acutPrintf(_T("\n无法加载应用程序%s"), fileName->resval.rstring);
    	}
    	else
    		acutPrintf(_T("\n加载%s应用程序成功!"), fileName->resval.rstring);
    }
    
    acutRelRb(fileName);
    
  • 效果
    在这里插入图片描述

  • 查找文件绝对路径

    ACHAR *fileName = _T("123.dwg");
    // 接收返回值:
    ACHAR fullPath[128];
    // 返回结果类型码:RTNORM 或 RTERROR
    acedFindFile(fileName, fullPath, 128);
    

    查找范围:当前文件所在文件夹、acad.exe所在文件夹、CAD环境变量内的路径

    在这里插入图片描述

2.2 windows原生风格

2.2.1 单选

  • 代码
    void singleSel()
    {
    	// 构造函数:true为打开,false为存储,也可CFileDialog dlg(true);
    	CFileDialog dlg(true, NULL, NULL, NULL, _T("全部文件|*.*|dwg文件| *.dwg||"));
    
    	// 设置初始目录
    	CString path("C:\\Users\\Administrator\\Desktop");
    	dlg.m_ofn.lpstrInitialDir = path;
    	dlg.m_ofn.lpstrTitle =_T("此处为对话框标题");
    
    	if (dlg.DoModal() == IDOK)
    	{	// 返回 C:\Users\Administrator\Desktop\123.dwg
    		acutPrintf(L"\n%s", dlg.GetPathName());
    		// 返回 123.dwg
    		acutPrintf(L"\n%s", dlg.GetFileName());
    		// 返回 123
    		acutPrintf(L"\n%s", dlg.GetFileTitle());
    		// 返回 dwg
    		acutPrintf(L"\n%s", dlg.GetFileExt());
    	}
    }
    
  • 效果
    在这里插入图片描述

2.2.2 多选

  • 代码示例
    void MultiSel()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	// 构造函数:第四个参数为允许多选,不包括文件夹
    	CFileDialog dlg(true, NULL, NULL, OFN_ALLOWMULTISELECT);
    	// 调整缓冲区大小:存储选择到的文件路径
    	dlg.m_ofn.lpstrFile = new TCHAR[1024];
    	// 最多存储文件个数
    	dlg.m_ofn.nMaxFile = 1024;
    
    	// 循环获取文件名
    	CString pathName;
    	if (dlg.DoModal() == IDOK)
    	{
    		POSITION mpos = dlg.GetStartPosition();
    		while (mpos != NULL)
    		{
    			pathName = dlg.GetNextPathName(mpos);
    			acutPrintf(_T("\n文件名为:%s"), pathName);
    		}
    		
    	}
    	// new与delete对应
    	delete[] dlg.m_ofn.lpstrFile;
    }
    
  • 效果(不含筛选器)
    在这里插入图片描述

2.2.3 只选文件夹

  • 代码示例
    void folderSel()
    {	//存放选择的目录路径 
    	ACHAR szPath[MAX_PATH];     
    	CString str;
    
    	ZeroMemory(szPath, sizeof(szPath));
    	// bi为结构体
    	BROWSEINFO bi;
    	bi.hwndOwner = m_hWnd;
    	bi.pidlRoot = NULL;
    	bi.pszDisplayName = szPath;
    	bi.lpszTitle = _T("请选择目录:");
    	bi.ulFlags = 0;
    	bi.lpfn = NULL;
    	bi.lParam = 0;
    	bi.iImage = 0;
    	//弹出选择目录对话框
    	LPITEMIDLIST lp = SHBrowseForFolder(&bi);
    	// 选择成功
    	if (lp && SHGetPathFromIDList(lp, szPath))
    		AfxMessageBox(szPath);
    	// 选择失败
    	else
    		AfxMessageBox(_T("\n无效的目录,请重新选择"));
    }
    
  • 效果
    在这里插入图片描述

传送门 返回 列表

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: ObjectARX是一种用于AutoCAD软件定制化开发的API。张帆的《ObjectARX开发实例教程》是一本适合初学者入门的书籍,通过实例的方式对ObjectARX进行系统性讲解。 本书共分为18章,从AutoCAD开发环境的搭建开始讲起,引领读者逐步深入了解ObjectARX。每一章都包含了相关实例,全面讲解了AutoCAD编程基础ObjectARX、COM技术等相关知识点,让读者能够深入了解各种开发技术,如绘图、编辑、图形操作等。 本书中的实例都是实用性强、综合性好的项目,作者在实例中讲述了ObjectARX的各种技术应用,通过详细讲解及代码演示,使读者能够掌握这些方法,进而灵活应用到实际项目中。此外,文中还介绍了D-BASE文件格式、UNIX操作系统等相关知识,以帮助读者更好地理解AutoCAD的架构原理。 总之,张帆的《ObjectARX开发实例教程》是一本详实而全面的AutoCAD相关书籍,适合有编程基础并对AutoCAD感兴趣的读者学习参考。其中的案例演示丰富,对初学者来说十分友好,同时也能帮助已有一定开发经验的开发人员深造提高。 ### 回答2: ObjectARX是AutoCAD的开放式编程接口,使得开发者可以在AutoCAD上创建个性化的工具和应用程序。这使得AutoCAD成为一个灵活性更高的应用程序。 张帆的《ObjectARX开发实例教程》是一本以实践为主的教程,带领读者从零开始学习如何使用ObjectARX进行自定义开发。教程分为四部分,以一个图像处理器为示例介绍了ObjectARX的编写、调试、应用等技术。 第一部分介绍了ObjectARX的介绍、编程工具的准备和环境的搭建。第二部分从绘图交互的角度介绍了如何利用ObjectARX实现AutoCAD图形处理。第三部分以实例介绍了如何利用ObjectARX编写实用功能的插件程序,并介绍了用户界面设计方面的知识。第四部分介绍了如何编写和发布新的应用程序。 在实例教程中,张帆深入深出地剖析了ObjectARX开发的重要概念和技巧,介绍了它们在实际编程过程中的应用。该书比较深入且严谨,可以帮助读者了解ObjectARX中的各种实用细节,同时它也适合有一定编程基础的开发者学习。 总之,《ObjectARX开发实例教程》是入门到高阶的一本好书,对初学者和已有一定开发经验的开发者都非常适用。它既介绍了ObjectARX的基础,又让读者从编写插件和应用程序的角度发掘ObjectARX的灵活性和强大性。这使得读者可以在实践中学习编程技术,提升创造的灵活性和效率。 ### 回答3: “ObjectARX开发实例教程”是一本详细介绍了如何使用Autodesk的ObjectARX编程接口来进行CAD软件二次开发的实战教程。本书作者张帆是一位经验丰富的Autodesk软件开发专家,既有实践经验,也有丰富的教学经验,因此他在本书中将所涉及的内容讲解得非常清晰易懂。 本书从基础概念入手,先介绍了Autodesk的CAD软件和ObjectARX编程接口的基本知识,并且提供了许多实例来帮助读者更好地理解这些知识。在后续章节中,作者则依次介绍了ObjectARX的各个重要模块,如数据库、图形界面、用户界面、3D绘图等,针对每个模块提供了大量的实例代码,并详细讲解了其实现原理和使用技巧。 作为一本实战教程,本书还提供了很多实际应用场景下的编程技巧,例如如何处理大型CAD工程,如何实现CAD联网等等,这些内容将对实际开发非常有帮助。 总之,“ObjectARX开发实例教程”是一本很实用的CAD软件开发教程,对于想要学习ObjectARX编程接口的开发人员来说,读本书将是一种强有力的支持和帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值