返回介绍

函数说明

发布于 2023-08-09 23:10:33 字数 11955 浏览 0 评论 0 收藏 0

接下来将解释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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文