找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 901|回复: 1

[求助] [求助]:各位,能帮我看看这个判断点是否在一面域上的程序吗?为什么不能成功?

[复制链接]
发表于 2002-2-23 17:20:07 | 显示全部楼层 |阅读模式

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

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

×
程序思路:在lisp中用该函数,参数一为一面域句柄,参数二为一三维点,程序目的是以三维点作一半径为1的圆,获得该圆的面域,再求圆的面域和参数一面域的交集,若交集为圆的面域,则判断出点在面域内,返回T,否则返回nil,但为什么无论传入的点是否在面域内都返回nil呢?
int isinregion(struct resbuf *rb)
{
  ads_name objName;
  AcDbObjectId objId;
  AcDbCircle *circle;
  AcGeVector3d normal(0.0, 0.0, 1.0);
  AcDbRegion *region;
  AcDbRegion *circleregion;
  AcDbRegion *newregion;
  AcDbVoidPtrArray crarray;
  AcDbVoidPtrArray rearray;
   AcGePoint3d point;
  struct resbuf *rb1;
  if (rb == NULL)
  {
          return RTERROR;
  }
  if (rb->restype == RTSTR) {
          if(acdbHandEnt(rb->resval.rstring, objName) != RTNORM)
      {
                  acdbFail("No entity with that handle exists\n");
          return RTERROR;         
      }
    } else {
        acdbFail(/*MSG3*/"Argument1 should be an Handle String.");
        return RTERROR;
    }
  rb1 = rb->rbnext;
  if (rb1 == NULL)
            return RTERROR;
  if (rb1->restype == RT3DPOINT) {
            point.set(rb1->resval.rpoint[X], rb1->resval.rpoint[Y], rb1->resval.rpoint[Z]);
        } else {
        acdbFail(/*MSG3*/"Argument2 should be an 3DPOINT.");
        return RTERROR;
    }
  if(acdbGetObjectId(objId, objName) == Acad::eInvalidAdsName)
  {
     acedRetNil();
     return RTNORM;
  }
  if(acdbOpenObject(region, objId , AcDb::kForWrite) !=  Acad::eOk)
  {
         acedRetNil();
     return RTNORM;
  }
  circle = new AcDbCircle(point, normal, 1);
  crarray.append(circle);
  if(AcDbRegion::createFromCurves(crarray,
          rearray) == Acad::eInvalidInput)
  {
    acedAlert("InvalidInput.");
    acedRetNil();
    return RTNORM;
  }
  circleregion = AcDbRegion::cast((AcRxObject*)rearray[0]);
  if(region->booleanOper(AcDb::kBoolIntersect, circleregion) == Acad::eOk)
  {
    acedRetT();
  }
  else
  {
    //acedAlert("NULL.");
    acedRetNil();
  }
  for (int i = 0; i < rearray.length(); i++) {
        delete (AcRxObject*)rearray;
    }
  region->close();
  return RTNORM;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-2-23 17:36:35 | 显示全部楼层

Re: [求助]:各位,能帮我看看这个判断点是否在一面域上的程序吗?为什么不能成功?

最初由 leemanzhuo 发布
[B]程序思路:在lisp中用该函数,参数一为一面域句柄,参数二为一三维点,程序目的是以三维点作一半径为1的圆,获得该圆的面域,再求圆的面域和参数一面域的交集,若交集为圆的面域,则判断出点在面域内,返回T,否则返?.. [/B]


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 03:48 , Processed in 0.368404 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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