- MxDraw 云图
- 快速入门
- 前端 mxdraw 和 mxcad 库预览编辑图纸
- 后台使用 Node.js 调用梦想 API
- CAD 与 GIS 集成说明
- 梦想云图 Node.JS 服务
- iOS 开发
- 安卓开发
- 网页 CAD 开发
- 网页快速入门 aspaps.netphpjava
- 图形数据库
- 参数化绘图
- 交互绘图
- 选择集
- 扩展数据
- 自定义实体
- 自定义命令
- 光栅图处理
- 图面搜索
- 控件事件
- 打印控制
- 界面控制
- COM 开发
- 视频教程
- VB 快速入门
- Delphi 快速入门
- CSharp 快速入门
- java 快速入门
- QT 快速入门
- 易语言快速入门
- Powerbuilder 快速入门
- wpf 控件入门
- 图形数据库
- 参数化绘图
- 交互绘图
- 选择集
- 扩展数据
- 自定义命令
- 自定义实体
- 打印控制
- 控件事件
- 图面搜索
- 光栅图处理
- 界面控制
- C++ 开发
- C++ bulider 快速入门
- C++ 快速入门(VS2010)
- C++ 快速入门(com 接口)
- 图纸数据库
- 参数化绘图
- 交互绘图
- 选择集
- 扩展程序
- 扩展数据
- 自定义函数
- 自定义实体
- 光栅图处理
- 图面搜索
- 控件事件
- 界面控制
- 常见问题
- 试用技术服务申请
- 会员下载最新程序
- 备用下载
- 控件安装运行说明
- 控件最新更新
- 控件功能简介
- 控件图形数据库
- 控件界面控制
- 控件命令执行原理
- 控件系统变量说明
- 控件常见问题说明
- 修改对象属性
- 网页加载 CAD 图纸的两个方案
- MxDraw3D 控件
- 前端基础工程化知识
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
从符号表中获得信息
至此,我们就读取到当前模型空间的所有符号表及字典,而对于如何取到具体的信息,我们在此实例的树形结构图的单击事件下进行读取,代码如下:
void CMxDatabaseDlg::OnTvnSelchangedDatabaseinfoTree(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); *pResult = 0; CString strText; // 树节点的标签文本字符串 // 获取当前选中节点的句柄 HTREEITEM hItem = m_DatabaseInfo.GetSelectedItem(); strText = m_DatabaseInfo.GetItemText(hItem); GetObjectAndPring(strText); } void CMxDatabaseDlg::GetObjectAndPring(const CString sHandle) { //在此处我们得到所需的一些信息 McDbObjectPointer<McDbObject> spObject; { McDbObjectId mId; McDbHandle mHandle(GetHandleStr(sHandle)); acdbHostApplicationServices()->workingDatabase()->getAcDbObjectId(mId, false, mHandle); spObject.open(mId, McDb::kForRead); } if (Mcad::eOk == spObject.openStatus()) { CString sTemp; CString sType = spObject->isA()->name(); sTemp.Format(_T("\n类型:%s\t组码名:%s\nID:%d"), spObject->isA()->name(), spObject->isA()->DXF0(), spObject->objectId().asOldId()); Mx::mcutPrompt(sTemp); sTemp.Format(_T("\t句柄:%s"), GetHandleStr(sHandle)); Mx::mcutPrompt(sTemp); // MrxDbgUtils::putEntityInView(spObject->objectId(), 10); //符号表 if (McDbSymbolTableRecord::cast(spObject)) { auto pDisSymUtilInfo = [&](McDbSymbolTableRecord* pMcDbSymbolTable) { CString sName; pMcDbSymbolTable->getNameEx(sName); sTemp.Format(_T("\n符号记录表名:%s"), sName); Mx::mcutPrompt(sTemp); }; const CString sMcDbLayerTableRecord(L"McDbLayerTableRecord"); const CString sMcDbBlockTableRecord(L"McDbBlockTableRecord"); const CString sMcDbTextStyleTableRecord(L"McDbTextStyleTableRecord"); const CString sMcDbLinetypeTableRecord(L"McDbLinetypeTableRecord"); const CString sMcDbDimStyleTableRecord(L"McDbDimStyleTableRecord"); if (sMcDbLayerTableRecord == sType) { auto pEnt = McDbLayerTableRecord::cast(spObject); pDisSymUtilInfo(pEnt); sTemp.Format(_T("\n锁定状态:%s\t关闭状态:%s\n冻结状态:%s"), pEnt->isLocked() ? L"锁定" : L"未锁定", pEnt->isOff() ? L"关闭" : L"未关闭", pEnt->isFrozen() ? L"冻结" : L"未冻结"); Mx::mcutPrompt(sTemp); auto mColor = pEnt->color(); sTemp.Format(_T("\t颜色索引%d"), mColor.colorIndex()); Mx::mcutPrompt(sTemp); } else if (sMcDbTextStyleTableRecord == sType) { auto pEnt = McDbTextStyleTableRecord::cast(spObject); pDisSymUtilInfo(pEnt); LPCTSTR lpFileName; pEnt->fileName(lpFileName); sTemp.Format(_T("\n竖向绘制:%s\t文字高度:%f\t缩放比例:%f\t倾斜弧度%f\t字体文件名:%s"), pEnt->isVertical() ? L"是" : L"否", pEnt->textSize(), pEnt->xScale(), pEnt->obliquingAngle(), lpFileName); Mx::mcutPrompt(sTemp); //...在此处介绍其他的信息 } else if (sMcDbLinetypeTableRecord == sType) { auto pEnt = McDbLinetypeTableRecord::cast(spObject); pDisSymUtilInfo(pEnt); CString sCommentsEx; pEnt->commentsEx(sCommentsEx); sTemp.Format(_T("\n线型说明:%s"), sCommentsEx); Mx::mcutPrompt(sTemp); //...在此处介绍其他的信息 } else if (sMcDbDimStyleTableRecord == sType) { auto pEnt = McDbDimStyleTableRecord::cast(spObject); pDisSymUtilInfo(pEnt); //...在此处介绍其他的信息 } else if (sMcDbBlockTableRecord == sType) { auto pEnt = McDbBlockTableRecord::cast(spObject); pDisSymUtilInfo(pEnt); //...在此处介绍其他的信息 } Mx::mcutPrompt(L"\n"); } else if (auto spEnt = McDbEntity::cast(spObject)) { auto pDisText = [&](McGePoint3d vPt, double dRotation, double dHeight, double dWidth, CString sText, CString sStyle) { const CString sTextInfoFormat(L"\n文字位置:X = %.3lf Y = %.3lf\n旋转弧度%f\t行高%f\t宽度比例%f\n文字内容:%s\n文字样式%s\n"); sTemp.Format(sTextInfoFormat, vPt.x, vPt.y, dRotation, dHeight, dWidth, sText, sStyle); Mx::mcutPrompt(sTemp); }; //基本实体 sTemp.Format(_T("\n层名:%s\t颜色索引:%d"), spEnt->layer(), spEnt->colorIndex()); Mx::mcutPrompt(sTemp); const CString sMcDbLine(L"McDbLine"); const CString sMcDbPolyline(L"McDbPolyline"); const CString sMcDbArc(L"McDbArc"); const CString sMcDbCircle(L"McDbCircle"); const CString sMcDbSpline(L"McDbSpline"); const CString sMcDbEllipse(L"McDbEllipse"); const CString sMcDbPoint(L"McDbPoint"); const CString sMcDbBlockReference(L"McDbBlockReference"); const CString sMcDbAttributeDefinition(L"McDbAttributeDefinition"); const CString sMcDbText(L"McDbText"); const CString sMcDbMText(L"McDbMText"); const CString sMcDbHatch(L"McDbHatch"); const CString sMcDbDimension(L"McDbDimension"); if (sMcDbLine == sType) { auto pEnt = McDbLine::cast(spEnt); auto vPt1 = pEnt->startPoint(); sTemp.Format(_T("\n起始点:X = %.3lf Y = %.3lf"), vPt1.x, vPt1.y); Mx::mcutPrompt(sTemp); auto vPt2 = pEnt->endPoint(); sTemp.Format(_T("\n结束点:X = %.3lf Y = %.3lf"), vPt2.x, vPt2.y); Mx::mcutPrompt(sTemp); sTemp.Format(_T("\n增量:X = %.3lf 增量Y = %.3lf"), vPt2.x - vPt1.x, vPt2.y - vPt1.y); Mx::mcutPrompt(sTemp); } else if (sMcDbPoint == sType) { auto pEnt = McDbPoint::cast(spEnt); auto vPt = pEnt->position(); sTemp.Format(_T("\n点:X = %.3lf Y = %.3lf"), vPt.x, vPt.y); Mx::mcutPrompt(sTemp); } else if (sMcDbPolyline == sType) { auto pEnt = McDbPolyline::cast(spEnt); sTemp.Format(_T("\n是否闭合%s"), pEnt->isClosed() ? L"闭合" : L"不闭合"); Mx::mcutPrompt(sTemp); McGePoint2d vPt; for (UINT i(0); i < pEnt->numVerts(); i++) { pEnt->getPointAt(i, vPt); sTemp.Format(_T("\n点:X = %.3lf Y = %.3lf"), vPt.x, vPt.y); Mx::mcutPrompt(sTemp); } } else if (sMcDbText == sType) { auto pEnt = McDbText::cast(spEnt); pDisText(pEnt->position(), pEnt->rotation(), pEnt->height(), pEnt->widthFactor(), pEnt->textStringConst(), pEnt->textStyleEx()); } else if (sMcDbMText == sType) { auto pEnt = McDbMText::cast(spEnt); pDisText(pEnt->location(), pEnt->rotation(), pEnt->textHeight(), pEnt->width(), pEnt->contents(), pEnt->textStyleEx()); } else if (sMcDbCircle == sType) { auto pEnt = McDbCircle::cast(spEnt); auto vCenter = pEnt->center(); sTemp.Format(_T("\n圆心:X = %.3lf Y = %.3lf"), vCenter.x, vCenter.y); Mx::mcutPrompt(sTemp); auto dRadius = pEnt->radius(); sTemp.Format(_T("\n半径:%f"), dRadius); Mx::mcutPrompt(sTemp); } else if (sMcDbArc == sType) { auto pEnt = McDbArc::cast(spEnt); auto vCenter = pEnt->center(); sTemp.Format(_T("\n圆心:X = %.3lf Y = %.3lf"), vCenter.x, vCenter.y); Mx::mcutPrompt(sTemp); auto dRadius = pEnt->radius(); sTemp.Format(_T("\n半径:%f"), dRadius); Mx::mcutPrompt(sTemp); auto dstartAngle = pEnt->startAngle(); sTemp.Format(_T("\n起始角度:%f"), dstartAngle); Mx::mcutPrompt(sTemp); auto dendAngle = pEnt->endAngle(); sTemp.Format(_T("\n结束角度:%f"), dendAngle); Mx::mcutPrompt(sTemp); } else if (sMcDbEllipse == sType) { auto pEnt = McDbEllipse::cast(spEnt); // auto vCenter = pEnt->center(); sTemp.Format(_T("\n圆心:X = %.3lf Y = %.3lf"), vCenter.x, vCenter.y); Mx::mcutPrompt(sTemp); auto vMajorAxis = pEnt->majorAxis(); sTemp.Format(_T("\n主轴向量:%f"), vMajorAxis.x, vMajorAxis.y); Mx::mcutPrompt(sTemp); auto vMinorAxis = pEnt->minorAxis(); sTemp.Format(_T("\n副轴向量:%f"), vMinorAxis.x, vMinorAxis.y); Mx::mcutPrompt(sTemp); sTemp.Format(_T("\n副轴与主轴长度比值:%f"), pEnt->radiusRatio()); Mx::mcutPrompt(sTemp); sTemp.Format(_T("\n开始角度:%f\t结束角度%f"), pEnt->startAngle(), pEnt->endAngle()); Mx::mcutPrompt(sTemp); } else if (sMcDbBlockReference == sType) { auto pEnt = McDbBlockReference::cast(spEnt); auto sName = pEnt->appName(); sTemp.Format(_T("\n块名:%s"), sName); Mx::mcutPrompt(sTemp); auto vPosition = pEnt->position(); sTemp.Format(_T("\n插入位置:X = %.3lf Y = %.3lf"), vPosition.x, vPosition.y); Mx::mcutPrompt(sTemp); auto dScale = pEnt->scaleFactors(); sTemp.Format(_T("\n缩放比例:%f"), dScale); Mx::mcutPrompt(sTemp); auto drotationAngle = pEnt->rotation(); sTemp.Format(_T("\n旋转角度:%f"), drotationAngle); Mx::mcutPrompt(sTemp); } else if (sMcDbDimension == sType) { //标注类型 } Mx::mcutPrompt(L"\n"); } else { Mx::mcutPrompt(L"未说明的类型\n"); Mx::mcutPrompt(L"\n"); } } }
对于获取实体信息,重点在于获取它的句柄或ID,我们可用通过选择及或构造选择集的方式去过滤,也可以使用与用户交互的方式去选择需要的实体,而获取ID之后,我们使用以下的方式去打开,即可获取它的全部相关信息,如得到它的类型、DXF组码名:
McDbObjectPointer<McDbObject> spObject; { //... spObject.open(mId, McDb::kForRead); } if (Mcad::eOk == spObject.openStatus()) { CString sTemp; CString sType = spObject->isA()->name(); }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论