[ARX]问一个ARX选择集操作的一个问题
ads_name ss; <BR>AcEdSSGet(NULL,NULL,NULL,NULL,SS); <BR>函数执行时,总要求按确认 <BR>如果我想在执行时点到物体时做单选,没点到物体时窗选,不按确认即执行后续指令,应该怎么做,鼠标形状最好还是方框。 <BR>本想用acedEntSel(const char * str,ads_name entres,ads_point ptres);可出错以后ptres无法获得,窗选时还得输入第一点。回复
acedEntSel(const char * str,ads_name entres,ads_point ptres);控制函数返回值, 如果为RTNORM ,执行你的操作, 否则, 静默退出. 本来我也是这样做的,可是if(acedEntSel(const char * str,ads_name entres,ads_point ptres)!=RTNORM) 时调用AcEdSSGet(“W”,Pt1,Pt2,NULL,SS)<BR>做窗选时要有两点,我想只输入第二点,第一点就用acedEntSel时点下的那一点,如何办。
回复
你这样的想法现实吗? 至少解决的方法不合理, 本来"W"的选择方式就是让你手动选择窗口对角点. if 仅用AcEdSSGet(“W”,NULL,NULL,NULL,SS)时单选时也要点两点,不是我所要的效果,如果方法不合理,你觉得有什么好的办法,能解问题就行。拜托了!!!不知我写的这段代码能不能帮上你!
void NonModelDlg::OnButton1() <BR>{<BR> BeginEditorCommand();<BR> ads_name adsent1;<BR> ads_point pt1;<BR> int ret;<BR><BR> int type1;<BR> AcDbEntity *ent1;<BR>ret=acedEntSel(NULL,adsent1,pt1);<BR>//用户中断选择<BR> if(ret==RTCAN)<BR> {<BR> acedPrompt("\n用户中断选择!");<BR> gpDlg->endDlg();<BR> return;<BR> }<BR> <BR>//选择失败<BR> else if(ret==RTERROR)<BR> {<BR> acedPrompt("选择失败!");<BR> gpDlg->endDlg();<BR> return;<BR> }
acdbGetObjectId(ent1Id,adsent1);<BR> acdbOpenObject(ent1,ent1Id,AcDb::kForRead);<BR> type1=GetObjectType(adsent1);//GetObjectType()为判断adsent1为直线还是圆<BR> switch(type1)<BR> {<BR> case 1:<BR> m_Type=_T("直线");<BR> break;<BR> case 2:<BR> m_Type=_T("圆");<BR> break;<BR> default:<BR> m_Type=_T("请选择圆或直线!");<BR> break;<BR> }<BR> UpdateData(0);<BR> CompleteEditorCommand();<BR> ent1->close();<BR>}<BR>
这是对话框中一个选择按钮中的代码 好像不能达到我要的效果。
我已经找到了好的办法解决这个问题
ads_name SS;
void MYSEL(const char * str)<BR>{<BR> ads_name SS2;<BR> ads_point Pt;<BR> struct resbuf* B1;<BR> struct resbuf B3;<BR> struct resbuf B4;<BR> struct resbuf B2;<BR> int track=15;<BR> int type=2;<BR> long I;<BR> int KK;<BR> ads_point Pt2;<BR> if(acedSSGet("I",NULL,NULL,NULL,SS)!=RTNORM)<BR> {<BR> KK=acedEntSel(str,SS2,Pt);<BR> if (KK!=RTNORM)<BR> {<BR> if (acedGrRead(track,&type,&B2)!=RTNORM)return;<BR> if (type==13)<BR> {<BR> if (acedGrRead(track,&type,&B2)!=RTNORM)return;<BR> }
if (type==12)return;<BR> B1=&B2;<BR> for (I=0;&B1!=NULL;B1=B1->rbnext)<BR> {<BR> if(B1->restype==RT3DPOINT)<BR> { <BR> Pt=B1->resval.rpoint;<BR> Pt=B1->resval.rpoint;<BR> Pt=B1->resval.rpoint;<BR> break;<BR> }<BR> }<BR> acedGetVar("OSMODE",&B3);<BR> B4.restype = RTLONG;<BR> B4.resval.rstring = 0; <BR> B4.rbnext = NULL; <BR> acedSetVar("OSMODE",&B4);<BR> acedInitGet(32,NULL);<BR> if(acedGetCorner(Pt,"\n指定对角点:",Pt2)!=RTNORM)<BR> {<BR> acedSetVar("OSMODE",&B3);<BR> goto LINE1;<BR> }<BR> if(acedSSGet("C",Pt,Pt2,NULL,SS)!=RTNORM)<BR> {<BR> acedSetVar("OSMODE",&B3);<BR> goto LINE1;<BR> }<BR> acedSetVar("OSMODE",&B3);<BR> }<BR> else<BR> {<BR> if(acedSSAdd(SS2,NULL,SS)!=RTNORM)goto LINE1;<BR> }<BR> }<BR>LINE1:<BR> acedSSFree(SS2); <BR> return;<BR>}
页:
[1]