明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3809|回复: 6

[ARX]问一个ARX选择集操作的一个问题

[复制链接]
发表于 2004-10-28 11:16:00 | 显示全部楼层 |阅读模式
ads_name ss;
AcEdSSGet(NULL,NULL,NULL,NULL,SS);
函数执行时,总要求按确认
如果我想在执行时点到物体时做单选,没点到物体时窗选,不按确认即执行后续指令,应该怎么做,鼠标形状最好还是方框。
本想用acedEntSel(const char * str,ads_name entres,ads_point ptres);可出错以后ptres无法获得,窗选时还得输入第一点。
发表于 2004-10-28 12:37:00 | 显示全部楼层

回复

acedEntSel(const char * str,ads_name entres,ads_point ptres); 控制函数返回值, 如果为RTNORM ,执行你的操作, 否则, 静默退出.
 楼主| 发表于 2004-10-28 14:55:00 | 显示全部楼层
本来我也是这样做的,可是if(acedEntSel(const char * str,ads_name entres,ads_point ptres)!=RTNORM) 时调用AcEdSSGet(“W”,Pt1,Pt2,NULL,SS)
做窗选时要有两点,我想只输入第二点,第一点就用acedEntSel时点下的那一点,如何办。
发表于 2004-10-28 17:37:00 | 显示全部楼层

回复

你这样的想法现实吗? 至少解决的方法不合理, 本来"W"的选择方式就是让你手动选择窗口对角点.
 楼主| 发表于 2004-10-29 10:35:00 | 显示全部楼层
if 仅用AcEdSSGet(“W”,NULL,NULL,NULL,SS)时单选时也要点两点,不是我所要的效果,如果方法不合理,你觉得有什么好的办法,能解问题就行。拜托了!!!
发表于 2004-11-15 17:40:00 | 显示全部楼层

不知我写的这段代码能不能帮上你!

void NonModelDlg::OnButton1()
{
BeginEditorCommand();
ads_name adsent1;
ads_point pt1;
int ret;

int type1;
AcDbEntity *ent1;
ret=acedEntSel(NULL,adsent1,pt1);
//用户中断选择
if(ret==RTCAN)
{
acedPrompt("\n用户中断选择!");
gpDlg->endDlg();
return;
}

//选择失败
else if(ret==RTERROR)
{
acedPrompt("选择失败!");
gpDlg->endDlg();
return;
} acdbGetObjectId(ent1Id,adsent1);
acdbOpenObject(ent1,ent1Id,AcDb::kForRead);
type1=GetObjectType(adsent1);//GetObjectType()为判断adsent1为直线还是圆
switch(type1)
{
case 1:
m_Type=_T("直线");
break;
case 2:
m_Type=_T("圆");
break;
default:
m_Type=_T("请选择圆或直线!");
break;
}
UpdateData(0);
CompleteEditorCommand();
ent1->close();
}
这是对话框中一个选择按钮中的代码
 楼主| 发表于 2004-11-16 13:23:00 | 显示全部楼层
好像不能达到我要的效果。   我已经找到了好的办法解决这个问题 ads_name SS; void MYSEL(const char * str)
{
ads_name SS2;
ads_point Pt;
struct resbuf* B1;
struct resbuf B3;
struct resbuf B4;
struct resbuf B2;
int track=15;
int type=2;
long I;
int KK;
ads_point Pt2;
if(acedSSGet("I",NULL,NULL,NULL,SS)!=RTNORM)
{
KK=acedEntSel(str,SS2,Pt);
if (KK!=RTNORM)
{
if (acedGrRead(track,&type,&B2)!=RTNORM)return;
if (type==13)
{
if (acedGrRead(track,&type,&B2)!=RTNORM)return;
} if (type==12)return;
B1=&B2;
for (I=0;&B1!=NULL;B1=B1->rbnext)
{
if(B1->restype==RT3DPOINT)
{
Pt[X]=B1->resval.rpoint[X];
Pt[Y]=B1->resval.rpoint[Y];
Pt[Z]=B1->resval.rpoint[Z];
break;
}
}
acedGetVar("OSMODE",&B3);
B4.restype = RTLONG;
B4.resval.rstring = 0;
B4.rbnext = NULL;
acedSetVar("OSMODE",&B4);
acedInitGet(32,NULL);
if(acedGetCorner(Pt,"\n指定对角点:",Pt2)!=RTNORM)
{
acedSetVar("OSMODE",&B3);
goto LINE1;
}
if(acedSSGet("C",Pt,Pt2,NULL,SS)!=RTNORM)
{
acedSetVar("OSMODE",&B3);
goto LINE1;
}
acedSetVar("OSMODE",&B3);
}
else
{
if(acedSSAdd(SS2,NULL,SS)!=RTNORM)goto LINE1;
}
}
LINE1:
acedSSFree(SS2);
return;
}

评分

参与人数 1金钱 +10 贡献 +1 激情 +1 收起 理由
easypower + 10 + 1 + 1 【精华】好程序

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 10:34 , Processed in 0.186719 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表