ARX亮显问题

Posted xzh1993

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARX亮显问题相关的知识,希望对你有一定的参考价值。

转载一段acedSSSetFirst的用法仅供参考:
打个比方,我创建了一个命令,这个命令的功能是提示用户选择,然后只过滤文本对象作为选择集,随后在屏幕上使得这个选择集的所有成员都亮显,并且能够显示出各成员上的夹点。通常我们在cad中什么命令也不输入的时候,随便框选一下图中的对象得到的选择集就是被亮显和夹取的,在ARX中如何实现?

ads_name sset,sset_temp;

//那个sset_temp你有没有初始化,如果没有肯定错。运行你的语句之前先加上下面的语句
// Set ss to a null selection set.,
acedSSAdd(NULL,NULL,sset_temp ); //初始化一个选择

long len;
acedSSLength(sset,&len);
for (int i=0;i<len;i++)
{

ads_name ent;
acedSSName(sset,i,ent);
AcDbObjectId objId;
acdbGetObjectId(objId,ent);

...

acedSSAdd(ent,sset_temp,sset_temp);

...

}

acedSSFree(sset);
acedSSSetFirst(sset_temp,NULL);

注意启动命令要设置为CRX_CMD_REDRAW | ACRX_CMD_USEPICKSET
sssetfirst可以控制加点或者选择的显示,但要注意注册命令的参数。

 

测试代码 包括高亮

static void PGCmds_Test()
{
ads_name ssName, ssTemp;
acedSSAdd(NULL, NULL, ssTemp);

acedSSGet(NULL, NULL, NULL, NULL, ssName);
long len;
acedSSLength(ssName, &len);

for (int i = 0; i < len; i++)
{
ads_name ent;
acedSSName(ssName, i, ent);

AcDbObjectId objid;
acdbGetObjectId(objid, ent);
AcDbEntity *pent=NULL;
acdbOpenAcDbEntity(pent, objid, AcDb::kForRead);
if (pent->isKindOf(AcDbText::desc()))
{
acedSSAdd(ent, ssTemp, ssTemp);
}
pent->close();
}
acedSSFree(ssName);
acedSSSetFirst(ssTemp, NULL);

//亮显功能测试
AcDbEntity *pent = NULL;
AcGePoint3d pt;
CSelectUtil::PromptSelectEntity(_T("xuanz"), AcDbLine::desc(), pent, pt);
pent->highlight();
pent->close();
}

以上是关于ARX亮显问题的主要内容,如果未能解决你的问题,请参考以下文章

VA助手亮显背景

VA助手亮显背景

VA助手亮显背景

解决双击dwg文件ARX自定义实体提示代理的问题

基于arx模型的MPC预测控制器simulink仿真

2Arx二次开发创建第一个应用程序