乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 119|回复: 6

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

[复制链接]

3

主题

10

帖子

1

银币

初来乍到

Rank: 1

铜币
22
发表于 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无法获得,窗选时还得输入第一点。
回复

使用道具 举报

124

主题

837

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1333
发表于 2004-10-28 12:37:00 | 显示全部楼层
acedEntSel(const char * str,ads_name entres,ads_point ptres);
控制函数返回值, 如果为RTNORM ,执行你的操作, 否则, 静默退出.
回复

使用道具 举报

3

主题

10

帖子

1

银币

初来乍到

Rank: 1

铜币
22
发表于 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时点下的那一点,如何办。
回复

使用道具 举报

124

主题

837

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1333
发表于 2004-10-28 17:37:00 | 显示全部楼层
你这样的想法现实吗? 至少解决的方法不合理, 本来"W"的选择方式就是让你手动选择窗口对角点.
回复

使用道具 举报

3

主题

10

帖子

1

银币

初来乍到

Rank: 1

铜币
22
发表于 2004-10-29 10:35:00 | 显示全部楼层
if 仅用AcEdSSGet(“W”,NULL,NULL,NULL,SS)时单选时也要点两点,不是我所要的效果,如果方法不合理,你觉得有什么好的办法,能解问题就行。拜托了!!!
回复

使用道具 举报

4

主题

9

帖子

1

银币

初来乍到

Rank: 1

铜币
25
发表于 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();
}
这是对话框中一个选择按钮中的代码
回复

使用道具 举报

3

主题

10

帖子

1

银币

初来乍到

Rank: 1

铜币
22
发表于 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;
}
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-4-30 02:48 , Processed in 0.688304 second(s), 84 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表