开发环境,VS2015 & AutoCAD Mechanical 2018

1、建立一个对话框工程,上面放一个列表控件和两个按钮。

2、从AutoCAD的类型库中导入相关头文件。

在解决方案管理器中的工程标题上右键菜单,选添加,选类,在新建类的界面上选MFC,再选TypeLib中的MFC类

点击添加按钮,弹出类型库向导对话框,来源选文件:

从 C:\Program Files\Common Files\Autodesk Shared\acax22enu.tlb 类型库中导入如下9个头文件:

CAcadApplication.h    
    CAcadDocument.h    
    CAcadModelSpace.h    
    CAcadDocuments.h    
    CAcadEntity.h    
    CAcadBlock.h    
    CAcadBlockReference.h    
    CAcadAttribute.h    
    CAcadAttributeReference.h

注意:AutoCAD的版本不同,类型库文件路径和文件名也可能不同。

3、建立COM调用

先要打开AutoCAD进程

BOOL OpenAutoCAD()
{BOOL bResult = FALSE;CString strId = _T("AutoCAD.Application");    // 默认版本CLSID clsid;HRESULT hRlt = ::CLSIDFromProgID(strId, &clsid);if (FAILED(hRlt)){AfxMessageBox(_T("当前机器上没有安装 AutoCAD 软件, 或没有指定的版本号。"));}ASSERT(NULL == m_pAcadApplication);if(NULL == m_pAcadApplication)m_pAcadApplication = new CAcadApplication();// 检查是否已经有ACAD进程打开了IUnknown* pUnknown = NULL;hRlt = ::GetActiveObject(clsid, NULL, &pUnknown);if (SUCCEEDED(hRlt) ) {hRlt = pUnknown->QueryInterface(IID_IDispatch, (LPVOID*)m_pAcadApplication);bResult = SUCCEEDED(hRlt);if (!bResult){pUnknown->Release();pUnknown = NULL;}}if (!bResult) {bResult = m_pAcadApplication->CreateDispatch(strId);}if (bResult)m_pAcadApplication->put_Visible(TRUE);elseAfxMessageBox(_T("起动 AutoCAD 软件失败。"));return bResult;
}

读写数据:

void OnBnClickedOk()
{CString strFile;HMODULE hModule = ::GetModuleHandle(NULL);::GetModuleFileName(hModule, strFile.GetBuffer(MAX_PATH), MAX_PATH);strFile.ReleaseBuffer();int iPos = strFile.ReverseFind('\\');if (iPos > 1)strFile.Truncate(iPos);strFile += _T("\\读写标题栏示例.dwg");if (OpenAutoCAD()){// 添加一个新的页面CAcadDocuments clDocs  = m_pAcadApplication->get_Documents();clDocs.Open(strFile, _variant_t(FALSE), COleVariant(_T("")));CAcadDocument m_pAcadDocument  = m_pAcadApplication->get_ActiveDocument();CAcadModelSpace m_pAcadModelSpace = m_pAcadDocument.get_ModelSpace();for (int i=0; i<m_pAcadModelSpace.get_Count(); i++){CAcadEntity clEntity = m_pAcadModelSpace.Item(_variant_t(i));CString str = clEntity.get_ObjectName();OutputDebugString(str);if (str == _T("AcDbBlockReference")){CAcadBlockReference clBlock = clEntity;str = clBlock.get_Name();OutputDebugString(str);if (str.Find(_T("WSACAD_TILE")) == 0){COleSafeArray arAttributes = clBlock.GetAttributes();long lBound1 = -1;long uBound1 = -1;arAttributes.GetLBound(1, &lBound1);arAttributes.GetUBound(1, &uBound1);IDispatch** ppAttrObj = (IDispatch**)((*arAttributes.parray).pvData);for (int i= lBound1; i<= uBound1; i++){CAcadAttributeReference clAttribute = (LPDISPATCH)(ppAttrObj[i]);LV_ITEM lvi;lvi.mask = LVIF_TEXT;lvi.iItem = i;lvi.iSubItem = 0;lvi.pszText = _T("");lvi.iImage = 0;lvi.stateMask = LVIS_STATEIMAGEMASK;lvi.state = INDEXTOSTATEIMAGEMASK(1);m_lstBom.InsertItem(&lvi);// 显示原值m_lstBom.SetItemText(i, 0, clAttribute.get_TagString());m_lstBom.SetItemText(i, 1, clAttribute.get_TextString());// 设置新值str.Format(_T("%2d"), i);clAttribute.put_TextString(str);}}}}m_pAcadApplication->Update();}delete m_pAcadApplication;m_pAcadApplication = NULL;
}

4、运行结果

上述代码可以正常读写机械版的标题栏了。

详细代码在 https://download.csdn.net/download/yzhuang/12593234 处下载

用VC读写机械版AutoCAD标题栏数据相关推荐

  1. AutoCAD Mechanical v2022.1.2 CAD机械版简体中文精简直装版

    AutoCAD软件是由美国欧特克有限公司(Autodesk)出品的一款自动计算机辅助设计软件,可以用于绘制二维制图和基本三维设计,通过它无需懂得编程,即可自动制图,因此它在全球广泛使用,可以用于土木建 ...

  2. python写spark_Spark2.1.0+入门:文件数据读写(Python版)

    除了可以对本地文件系统进行读写以外,Spark还支持很多其他常见的文件格式(如文本文件.JSON.SequenceFile等)和文件系统(如HDFS.Amazon S3等)和数据库(如MySQL.HB ...

  3. autocad完全应用指南_2020版AutoCAD软件+操作教程+插件合集,限时3天领

    如今CAD在建筑行业内非常火爆啊,它有自己独特的图库.模型素材等,需要的时候直接搜索所需要的内容,非常方便,深受广大建筑朋友们的喜欢,是学习CAD朋友们的超大福利!! 这份CAD软件+操作教程+上百的 ...

  4. 多行文字cad提取数据_CAD机械教程之批量数据提取图文详解

    要调用此功能,我们可以依次点击[浩辰机械]-[辅助工具]-[批量数据提取],软件会弹出对话框(如图1) 图1 在对话框中,我们可以变更关联字段配置.数据汇总类型.其中,在关联字段配置中,由于浩辰CAD ...

  5. 中望cad机械版2021中文版 知名的机械设计应用

    中望cad机械版2021是由广州中望龙腾软件股份有限公司全新打造的一款功能强大的CAD机械设计软件,是众多国内外机械设计师们首选的一款软件之一,它拥有人们最为熟悉的操作界面和绘图命令,用户无需改变以往 ...

  6. Linux各发行版流行度统计数据与排名

    2011-11-28 09:55:46 第1页 Linux各发行版流行度统计数据与排名 DistroWatch是一个专门收集Linux发行版信息的网站,统计各个 Linux 发行版的流行度,通过统计各 ...

  7. 从Windows 2012标准版升级到数据中心版

    对于Windows 7.Windows 8操作系统,可以在图形界面中通过输入序列号,从低版本直接升级到高的版本,例如从Windows 7家庭版升级到专业版或旗舰版.而对于Windows Server ...

  8. vc升级失败恢复快照后数据不一致问题

    第一次故障现象: 下午192.168.146.1 vc5.5升级6.0失败后回滚.Vcenter.DB和SSO均做的是带内存的快照.当时检查恢复完能连上vc和web client.当天晚上发现vc连接 ...

  9. CAXA电子图板2013机械版下载及安装教程详解

    资源共享:https://download.csdn.net/download/wise18146705004/10755317,欢迎大家下载,保证全套有用.本人亲测 参考链接为:https://ji ...

最新文章

  1. 业界丨几张图带你看懂人工智能产业
  2. java版spring cloud+spring boot+redis社交电子商务平台(四)SpringBoot 整合JPA
  3. ansible的安装和使用
  4. linux的消息机制,linux消息机制的过程是什么啊,请赐教
  5. sge resnet
  6. UILabel的行间距,字间距处理
  7. php 上次登陆时间,php使用cookie显示用户上次访问网站日期的方法
  8. 多个 本地仓库_【运维工具】搭建npm私有镜像仓库,天下苦于npm build久矣
  9. HDU 4622 求解区间字符串中的不同子串的个数
  10. 自动化测试--8种定位方式以及等待详解
  11. ansible的命令操作模块6
  12. 清除浮动的七种方式方法(实例代码讲解)
  13. git指定版本openwrt源码_关于Github Action自动编译Lean_Openwrt的配置修改问题
  14. Linux系统搭建私有CA证书服务器
  15. Mac 卸载Symantec软件
  16. v-for中为何要使用key
  17. spark机器学习电影推荐
  18. php制作单位换算,在线单位换算器
  19. 制作马卡龙渐变海报教程
  20. c#语言猜数字游戏,C#实现简易猜数字游戏

热门文章

  1. Python括号里加:冒号是什么意思?参数表里加:冒号?
  2. SparkSQL join
  3. Python编程练习(三):21 - 30
  4. el-upload实现上传文件预览
  5. 微信小程序 组件无法使用全局样式
  6. Message: unknown error: Chrome failed to start: crashed问题解决方法
  7. PaddleDetection目标检测之水果检测(上)(yolov3_mobilenet_v1)
  8. 需求管理工具_wetool封杀后,微信群管理工具还能指望哪个?
  9. ps 中取消网格线的吸附功能,其实是对齐功能
  10. 高清HDMI转3G SDI方案介绍