- 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 控件
- 前端基础工程化知识
函数说明
接下来将解释MyCFilter类下的命令及其过滤的含义。
命令: userSelect function
作用:与用户交互,选择实体。
接口:SelSetStatus userSelect(const resbuf * filter = NULL);
参数:
名称 | 说明 |
---|---|
filter | 过滤表 |
参考例程:
void MyFilterByMrxDbgSelSet::SelSetByIN() { MrxDbgSelSet ss; auto eResult = ss.userSelect(); McDbObjectIdArray vId; ss.asArray(vId); PrintVecEntName(vId); }
命令: allSelect function
作用:选择全部实体。
接口:SelSetStatus allSelect(const resbuf * filter = NULL);
参数:
名称 | 说明 |
---|---|
filter | 过滤表 |
参考例程:
void MyFilterByMrxDbgSelSet::SelSetByX() { MrxDbgSelSet ss; auto eResult = ss.allSelect(); McDbObjectIdArray vId; ss.asArray(vId); PrintVecEntName(vId); }
命令: userSelect function
作用:与用户交互,选择实体。
接口:SelSetStatus userSelect(LPCTSTR selectPrompt, LPCTSTR removePrompt, const resbuf * filter = NULL);
参数:
名称 | 说明 |
---|---|
selectPrompt | 选择对象时的提示 |
removePrompt | 从选择集中删除对象时的提示(没用) |
filter | 过滤表 |
参考例程:
void MyFilterByMrxDbgSelSet::SelSetByIN1() { MrxDbgSelSet ss; auto eResult = ss.userSelect(L"提示1", L"删除1"); McDbObjectIdArray vId; ss.asArray(vId); PrintVecEntName(vId); }
命令: impliedSelect function
作用:返回当前图上已经选择的实体。
接口:SelSetStatus impliedSelect(const resbuf * filter = NULL);
参数:
名称 | 说明 |
---|---|
filter | 过滤表 |
参考例程:
void MyFilterByMrxDbgSelSet::SelSetByI() { MrxDbgSelSet ss; auto eResult = ss.impliedSelect(); McDbObjectIdArray vId; ss.asArray(vId); PrintVecEntName(vId); }
命令: crossingSelect function
作用:由p1,p2交叉框选实体,实体在pt和p2组成的矩形框内或与矩形框边线相交都放入选择集。
接口:SelSetStatus crossingSelect(
const McGePoint3d & pt1,
const McGePoint3d & pt2,
const resbuf * filter = NULL
);
参数:
名称 | 说明 |
---|---|
pt1 | 矩形窗口的第一个角点,UCS坐标 |
pt2 | 矩形窗口的第二个角点,UCS坐标 |
filter | 过滤表 |
参考例程:
void MyFilterByMrxDbgSelSet::SelSetByW() { MrxDbgSelSet ss; auto eResult = ss.crossingSelect( McGePoint3d(0, 0, 0), McGePoint3d(100, 100, 0)); McDbObjectIdArray vId; ss.asArray(vId); PrintVecEntName(vId); }
命令: crossingPolygonSelect function
作用:指向一个点链表,点集合组成一个多边形区域,在这个区域内的和多边形的边相交的实体都放入到选择集中。
接口:SelSetStatus crossingPolygonSelect(const McGePoint3dArray & ptArray, const resbuf * filter = NULL);
参数:
名称 | 说明 |
---|---|
ptArray | 构成多边形的点表,UCS坐标 |
filter | 过滤表 |
参考例程:
void MyFilterByMrxDbgSelSet::SelSetByCP() { MrxDbgSelSet ss; McGePoint3dArray vecPos; vecPos.append(McGePoint3d(-195, 270, 0)); vecPos.append(McGePoint3d(490, 395, 0)); vecPos.append(McGePoint3d(436, -124, 0)); vecPos.append(McGePoint3d(-76, -60, 0)); vecPos.append(McGePoint3d(-238, 54, 0)); vecPos.append(McGePoint3d(-195, 270, 0)); auto eResult = ss.crossingPolygonSelect(vecPos); McDbObjectIdArray vId; ss.asArray(vId); PrintVecEntName(vId); }
命令: lastSelect function
作用:选择最后一次选择的实体。
接口:SelSetStatus lastSelect(const resbuf * filter = NULL);
参数:
名称 | 说明 |
---|---|
filter | 过滤表 |
参考例程:
void MyFilterByMrxDbgSelSet::SelSetByLast() { MrxDbgSelSet ss; auto eResult = ss.lastSelect(); McDbObjectIdArray vId; ss.asArray(vId); PrintVecEntName(vId); }
命令: pointSelect function
作用:根据光标所在位置,选择靶框内的实体。
接口:SelSetStatus pointSelect(const McGePoint3d & pt1, const resbuf * filter = NULL);
参数:
名称 | 说明 |
---|---|
pt1 | 要构造选择集的目标点,UCS坐标 |
filter | 过滤表 |
参考例程:
void MyFilterByMrxDbgSelSet::SelSetByPt() { MrxDbgSelSet ss; auto eResult = ss.pointSelect(McGePoint3d(-48, 135, 0)); McDbObjectIdArray vId; ss.asArray(vId); PrintVecEntName(vId); }
命令: SelSetBySetHight function
作用:设置mcedSSGet函数执行用户选择时,被选择的对象的高亮显示回调函数。
接口:void setHighlightCallback(
bool (*pSSGetHighlightFunPtr)(
IN McDbEntity * pEnt,
IN bool isHighlight,
IN void * pUserData),
void * pUserData = NULL
);
参数:
名称 | 说明 |
---|---|
pSSGetHighlightFunPtr | 回调函数的指针 |
pEnt | 选择的实体 |
isHighlight | 是否高亮 |
pUserData | 用户自定义数据,将从回调函数中传入 |
参考例程:
bool SS9Test(IN McDbEntity * pEnt, IN bool isHighlight, IN void * pUserData) { int * sEnt = static_cast<int*>(pUserData); McDbExtents cRect; pEnt->getGeomExtents(cRect); McDbLine * pLine1 = new McDbLine(cRect.minPoint(), cRect.maxPoint()); McDbLine * pLine2 = new McDbLine( McGePoint3d(cRect.minPoint().x, cRect.maxPoint().y, 0), McGePoint3d(cRect.maxPoint().x, cRect.minPoint().y, 0)); MrxDbgUtils::addToCurrentSpaceAndClose(pLine1); MrxDbgUtils::addToCurrentSpaceAndClose(pLine2); vId.push_back(pLine1->objectId()); vId.push_back(pLine2->objectId()); return false; } void MyFilterByMrxDbgSelSet::SelSetBySetHight() { MrxDbgSelSet ss; int iLen(10); ss.setHighlightCallback(SS9Test, &iLen); ss.userSelect(); McDbObjectIdArray arrayId; ss.asArray(arrayId); std::for_each(vId.begin(), vId.end(), [](McDbObjectId id) { McDbObjectPointer<McDbEntity> spEnt(id, McDb::kForWrite); if (spEnt.openStatus() != Mcad::eOk) return; spEnt->erase(); }); PrintVecEntName(arrayId); }
命令: SelSetBySetHight function
作用:创建一个链表数据,该函数是变参数的,可以一下传入多个链表数据,返回的链表数据在不使用时调用mcutRelRb释放内存。
接口:ARXDLL struct resbuf * mcutBuildList (int rtype, ...);
参数:
名称 | 说明 |
---|---|
rtype | 参数类型 |
... | 变参数 |
参考例程:
void MyFilterByMrxDbgSelSet::MrxDbgfilter() { auto FuncSelect = [](resbuf * pFilter) { MrxDbgSelSet ss; ss.allSelect(pFilter); Mx::mcutRelRb(pFilter); McDbObjectIdArray vId; ss.asArray(vId); PrintVecEntName(vId); }; auto FuncEnt = [&FuncSelect](int rType, CString pStr) { FuncSelect(Mx::mcutBuildList(rType, pStr, 0)); }; auto FuncEnt1 = [&FuncSelect]( int rType0, CString pStr0, int rType1, CString pStr1, bool isOr ) { if (isOr) { FuncSelect(Mx::mcutBuildList( -4, _T("<OR"), rType0, pStr0, rType1, pStr1, -4, _T("OR>"), 0)); } else { FuncSelect(Mx::mcutBuildList( -4, _T("<AND"), rType0, pStr0, rType1, pStr1, -4, _T("AND>"), 0)); } }; //基本类型 FuncEnt(RTDXF0, _T("TEXT")); FuncEnt(RTDXF0, _T("MTEXT")); FuncEnt(RTDXF0, _T("CIRCLE")); FuncEnt(RTDXF0, _T("ARC")); FuncEnt(RTDXF0, _T("LINE")); FuncEnt(RTDXF0, _T("LWPOLYLINE")); FuncEnt(RTDXF0, _T("INSERT")); FuncEnt(RTDXF0, _T("ELLIPSE")); FuncEnt(RTDXF0, _T("SPLINE")); FuncEnt(RTDXF0, _T("TEXT,CIRCLE,SPLINE")); //图层 FuncEnt(8, _T("TEST1")); FuncEnt(8, _T("TEST3")); //图块 FuncEnt(2, _T("123")); // //“或”连接 FuncEnt1(RTDXF0, _T("TEXT"), 8, _T("TestColor1"), true); FuncEnt1(RTDXF0, _T("CIRCLE"), 8, _T("TestColor1"), true); FuncEnt1(RTDXF0, _T("CIRCLE"), RTDXF0, _T("TEXT"), true); // //“与”连接 FuncEnt1(RTDXF0, _T("TEXT"), 8, _T("TestColor1"), false); FuncEnt1(RTDXF0, _T("CIRCLE"), 8, _T("TestColor1"), false); }
注意:在上述的滤过演示中,我们根据“基本类型”、“图层”、“图块”及“按位OR”和“按位AND”,在过滤时,我们需要在参数中填入类型,而在后跟类型名,如只选择文字时,我们需要在第一个参数填入“RTDXF0”,而在下一个参数填入类型,这里的类型如都是输入“RTDXF0”类型下的基本类型,则可以使用逗号隔开进行填入, 而在连接符号中,我们需要使用成对的符号进行填写,如选择“基本类型”中的“TEXT”且在“TestColor1”层时,我们需要写成:
Mx::mcutBuildList( -4, _T("<AND"), RTDXF0, _T("TEXT"), 8, _T("TestColor1"), -4, _T("AND>"), 0));
在“按位与”的条件中,我们要将同时存在的类型放在"<AND"与"AND>"之中,筛选条件必须以“0”结束,且参数链表需要通过:
ARXDLL int mcutRelRb (struct resbuf *rb)
进行释放。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论