找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 601|回复: 2

[求助]:如何通过一个点获得包含该点的最小闭区间?

[复制链接]
发表于 2004-6-24 10:36:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如何通过一个点获得包含该点的最小闭区域,就像AutoCAD中的bhatch命令的内侧点方式一样的功能,只要给一个坐标值,就可以将周围的PolyLine选中
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-11-14 15:52:20 | 显示全部楼层
我也要知道
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-15 12:53:39 | 显示全部楼层
采用这个那个算法的算半天,倒不如直接采用CAD的内部命令生成,即BPOLY,我觉得采用这个命令是最好的,送你一个函数:
void EditGridControl::PickVertexPoints(ads_point pt,AcGePoint3dArray &pts)
{//选近内部点的所有顶点的封闭多边形
        //BeginEditorCommand();   //编辑命令开始
        ads_name ssname,newname;
        int nResult=acedSSGet("L", NULL, NULL, NULL, ssname); //取最后一个实体
        if (nResult == RTCAN || nResult == RTERROR)
        {
                acutPrintf("当前图形没有任何图形实体!");
                //CompleteEditorCommand(); //        编辑命令完成
                acedSSFree(ssname);
                return;  //为空、错误则返回
        }
        Acad::ErrorStatus es;
        ads_name entName;
        AcDbObjectId objId,newId;
        acedSSName( ssname, 0, entName );
        es = acdbGetObjectId(objId, entName);
//        ads_point pt;  
//        acedGetPoint(NULL, "\n指定内部点: ", pt) ;
//        CompleteEditorCommand(); //        编辑命令完成

        if (acedCommand(RTSTR, "BPOLY" , RT3DPOINT, pt, RTSTR,"",0) != RTNORM) return;//        MessageBox("不成功");
        nResult=acedSSGet("L", NULL, NULL, NULL, newname); //取最后一个实体
        if (nResult == RTCAN || nResult == RTERROR) return;  //为空、错误则返回
       
        acedSSName( newname, 0, entName );
        acedSSFree(ssname);        //释放选择集,否则只能选128次
        acedSSFree(newname); //释放选择集,否则只能选128次

        es = acdbGetObjectId(newId, entName);
        if(objId == newId)
        {
                //MessageBox("可能是未构成封闭图形,造成失败!请检查后重试");
                return;
        }
        AcDbEntity  *pEnt = NULL;
        es = acdbOpenAcDbEntity(pEnt, newId, AcDb::kForWrite);
        if(pEnt->isKindOf(AcDbPolyline::desc()) == Adesk::kTrue){  //实体为多义线
//                acutPrintf("    是一条多义线");
                AcDbPolyline *Pline;
                Pline=AcDbPolyline::cast(pEnt);
//                pEnt->close();
                for(unsigned int c=0;c<Pline->numVerts();c++)
                {
                        AcGePoint3d pt1;
                        Pline->getPointAt(c,pt1);
                        pts.append(pt1);
                }
//                if (Pline->isClosed()) { //闭合则加开始顶点
//                        AcGePoint3d tmpPt = pts[0];
//                        pts.append(tmpPt);
                pEnt->erase(true);
        }
        pEnt->close();
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-16 04:21 , Processed in 0.385951 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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