找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1397|回复: 8

关于如何判断点在面域内的又一问题

[复制链接]
发表于 2002-1-31 17:36:09 | 显示全部楼层 |阅读模式

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

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

×
为什么以下程序用AcGeSurface::isOn好象只能判断点是否在面域所在平面上,但如何能判断在面域所在平面上的点是否在面域内呢?

  1. int isinregion(struct resbuf *rb)
  2. {
  3.   ads_name objName;
  4.   AcDbObjectId objId;
  5.   AcDbRegion *region;
  6. // AcGeEntity2d region2d;
  7.   AcGePlane regionPlane;
  8.   AcGePoint3d point;
  9.   //AcGePoint2d point;
  10.   Adesk::Boolean On;
  11.   AcGeTol tol;
  12.   struct resbuf *rb1;
  13.   if (rb == NULL)
  14.   {
  15.           return RTERROR;
  16.   }
  17.   if (rb->restype == RTSTR) {
  18.           if(acdbHandEnt(rb->resval.rstring, objName) != RTNORM)
  19.       {
  20.                   acdbFail("No entity with that handle exists\n");
  21.           return RTERROR;         
  22.       }
  23.     } else {
  24.         acdbFail(/*MSG3*/"Argument1 should be an Handle String.");
  25.         return RTERROR;
  26.     }
  27.   rb1 = rb->rbnext;
  28.   if (rb1 == NULL)
  29.             return RTERROR;
  30.   if (rb1->restype == RT3DPOINT) {
  31.             point.set(rb1->resval.rpoint[X], rb1->resval.rpoint[Y], rb1->resval.rpoint[Z]);
  32.         } else {
  33.         acdbFail(/*MSG3*/"Argument2 should be an 3DPOINT.");
  34.         return RTERROR;
  35.     }
  36.   acdbGetObjectId(objId, objName);
  37.   acdbOpenObject(region, objId , AcDb::kForRead);
  38.   //if(region->getPlane(regionPlane) == Acad::eOk)
  39.   //  acedRetT();
  40.   //else
  41.   //  acedRetNil();
  42.   region->getPlane(regionPlane);
  43.   region->close();
  44.   tol.setEqualPoint(0.0001);
  45.   On = regionPlane.isOn(point);
  46.   if (On == Adesk::kTrue)
  47.           acedRetT();
  48.   else
  49.           acedRetNil();
  50.   return RTNORM;
  51. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-1-31 17:45:19 | 显示全部楼层

Re: 关于如何判断点在面域内的又一问题

最初由 leemanzhuo 发布
[B]为什么以下程序用AcGeSurface::isOn好象只能判断点是否在面域所在平面上,但如何能判断在面域所在平面上的点是否在面域内呢?
int isinregion(struct resbuf *rb)
{
  ads_name objName;
  AcDbObjectId objId;
... [/B]


没明白你的意思,你是说要判断一个面域是否在另个面域内吗?

另外,以后贴代码的时候,把“禁止使用表情符”勾上,就不会代码乱了。
另外用“代码缩进的方法”,让代码可读。如何作,论坛外面有介绍。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-1-31 22:58:20 | 显示全部楼层
我意思是我根据你的指导写了上面的函数,但只能判断点是否在面域所在的平面上,但不能判断点是否在面域内,其实我的目的是希望能判断一个点是否在一个不规则的封闭区域内。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-2-1 11:35:52 | 显示全部楼层
真的不能通过面域的方法判断点是否在一个封闭区域内吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-11 13:46:17 | 显示全部楼层
以此点作一个极小的圆,由极小圆建立一个面域,求两面域的交积,看其交积是否为空,为空则一定在外,如果等于极小圆的面域,则在内,不等不空则不确定,此方法解决实际问题取决于极小圆的半径值大小,可以取得很小,只要不为0.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-2-14 11:01:15 | 显示全部楼层
最初由 leemanzhuo 发布
[B]真的不能通过面域的方法判断点是否在一个封闭区域内吗? [/B]


规则的REGION,可以由XDRX_API得到顶点,然后就是判断点是否在封闭多边形内的问题了.

218。xdrx_region_vertex  《仅仅用于2000以上版本》

功能:获得REGION的顶点表

调用格式:(xdrx_region_vertex <REGION实体名>)

返回值:表

对于曲线组成的的REGION,可以用ACBR API得到LOOP的信息,然后也可以用点是否在封闭多边形内来解决.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-15 09:31:50 | 显示全部楼层

同样的问题

我问过同样的问题,没人解答
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-15 09:36:58 | 显示全部楼层
我认为feelingxv先生的办法可行!对于解决工程数据求解问题,要求的精度是可以确认的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-15 20:09:20 | 显示全部楼层

用point构造点,再求出多变形顶点。。

用point构造点,再求出封闭多边形顶点。用顶点构造选择集,再用
ssmemb辨别点是否在选择集内,若在并且点与多边形是在一个标高
则该点在封闭多边形平面上。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 12:17 , Processed in 0.284143 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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