设为首页收藏本站

中国膜结构网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

膜结构车棚
膜结构车棚膜结构资质国产膜材 膜结构网中国膜结构协会
查看: 195|回复: 2

点在多边形内

[复制链接]
  • TA的每日心情
    开心
    2021-6-22 09:39
  • 签到天数: 1542 天

    [LV.Master]伴坛终老

    发表于 2020-12-28 11:16 | 显示全部楼层 |阅读模式
    1.         static void LESQGBPoly17_GETPOLY(void)
    2.         {
    3.                 ads_name sspol;
    4.                 resbuf *rbFilter = acutBuildList(RTDXF0, _T("LWPOLYLINE"), RTNONE);
    5.                 if (acedSSGet(NULL, NULL, NULL, rbFilter, sspol) != RTNORM)
    6.                 {
    7.                         acutRelRb(rbFilter); return;
    8.                 }
    9.                 acutRelRb(rbFilter);
    10.                 long len = 0;
    11.                 if ((acedSSLength(sspol, &len) != RTNORM) || (len == 0))
    12.                 {
    13.                         acedSSFree(sspol); return;
    14.                 }
    15.                 AcGePoint3d worldPt;
    16.                 if (acedGetPoint(NULL,_T("\nPick internal point: "),asDblArray(worldPt)) != RTNORM) return;
    17.                 for (int i=0; i<len; i++)
    18.                 {
    19.                         AcDbMPolygon mpol;
    20.                         AcDbObjectId objId;
    21.                         ads_name ename;
    22.                         acedSSName(sspol, i, ename);
    23.                         if (acdbGetObjectId(objId, ename) != Acad::eOk) return;
    24.                         AcDbObjectPointer <AcDbPolyline> pPoly(objId, AcDb::kForWrite);//for write test to erase, or color change
    25.                         if (pPoly.openStatus() == Acad::eOk)
    26.                         {
    27.                                 acdbUcs2Wcs(asDblArray(worldPt),asDblArray(worldPt),false);
    28.                                 AcGeVector3d vDir = AcGeVector3d::kZAxis;
    29.                                 resbuf rb; acedGetVar(_T("viewdir"),&rb);
    30.                                 vDir = asVec3d(rb.resval.rpoint);
    31.                                 AcDb::Planarity plan_type;
    32.                                 AcGePlane plane;
    33.                                 pPoly->getPlane(plane,plan_type);
    34.                                 worldPt = worldPt.project(plane,vDir);
    35.                                 AcGeIntArray loopsArray; //loopsArray.setLogicalLength(0);
    36.                                 if (mpol.appendLoopFromBoundary(pPoly) == Acad::eOk)
    37.                                 {
    38.                                         if ( mpol.isPointInsideMPolygon(worldPt, loopsArray) > 0)
    39.                                         {
    40.                                                 acutPrintf(_T("\nPoint inside..."));
    41.                                                 pPoly.object()->setColorIndex(6);
    42.                                         }
    43.                                 }
    44.                         }
    45.                 }
    46.                 acedSSFree(sspol);
    47.         }
    复制代码
    回复


    http://www.mjgw.org/ 专业从事膜结构设计、制作加工、施工安装的膜结构工程服务,能够为客户提供专业的膜结构整体解决方案。做中国最好的膜结构综合服务平台。欢迎大家联系电话:198-7840-1958,QQ:463017170.
    相关关键词:膜结构车棚,膜结构车棚覆盖,膜结构车棚公司,膜结构车棚多少钱,膜结构车棚厂家,膜结构车棚价格,社区膜结构车棚,膜结构车棚膜布厂家 ,膜结构车棚哪家好,膜结构车棚多少钱一米,膜结构车棚报价,膜结构车棚哪里有,膜结构车棚定制,膜结构车棚安装,膜结构车棚设计,膜结构车棚电话,膜结构车棚加工,膜结构车棚膜布价格,膜结构车棚批发,膜结构车棚制造商,膜结构车棚生产厂家,膜结构车棚设计,膜结构车棚施工,膜结构车棚多少钱一平米,膜结构车棚订制,张拉膜车棚,张拉膜车棚覆盖,张拉膜车棚公司,张拉膜车棚多少钱,张拉膜车棚厂家,张拉膜车棚价格,社区张拉膜车棚,张拉膜车棚膜布厂家 ,张拉膜车棚哪家好,张拉膜车棚多少钱一米,张拉膜车棚报价,张拉膜车棚哪里有,张拉膜车棚定制,张拉膜车棚安装,张拉膜车棚设计,张拉膜车棚电话,张拉膜车棚加工,张拉膜车棚膜布价格,张拉膜车棚批发,张拉膜车棚制造商,张拉膜车棚生产厂家,张拉膜车棚设计,张拉膜车棚施工,张拉膜车棚多少钱一平米,张拉膜车棚订制,常用膜材品牌:德国杜肯、法国法拉利、德国海德斯、德国米乐、日本平岗、韩国秀博、比利时希运、美国赫虏伯、中国科宝、上海慧遥。

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-22 09:39
  • 签到天数: 1542 天

    [LV.Master]伴坛终老

     楼主| 发表于 2020-12-28 11:17 | 显示全部楼层
    1. static void BrepPointCheckPoint(void)
    2. {
    3.   Acad::ErrorStatus es;
    4.   AcBr::ErrorStatus ebr;
    5.   ads_name en;
    6.   ads_point pt;
    7.   if (acedEntSel(_T("\nSelect contour: "), en, pt) != RTNORM)
    8.     return;
    9.   AcDbObjectId eId; acdbGetObjectId(eId,en);
    10.   AcDbObjectPointer<AcDbCurve> pline(eId,AcDb::kForRead) ;
    11.   if ((es = pline.openStatus()) != Acad::eOk) {
    12.     acutPrintf(_T("\npline.openStatus()=%s"),acadErrorStatusText(es));
    13.     return;
    14.   }
    15.   if (acedGetPoint(pt,_T("\nPick point: "), pt) != RTNORM)
    16.     return;

    17.   AcDbVoidPtrArray ar, regions;
    18.   ar.append(pline.object());
    19.   if ((es = AcDbRegion::createFromCurves(ar,regions)) != Acad::eOk)  {
    20.     acutPrintf(_T("\nAcDbRegion::createFromCurves(ar,regions)=%s"),acadErrorStatusText(es));
    21.     return;
    22.   }
    23.   AcDbRegion reg; reg.copyFrom((AcDbRegion *)regions[0]);
    24.   for (int i=0; i<regions.length();i++) delete regions[i];
    25.   AcBrBrep brEnt;  ebr = brEnt.set(reg);
    26.   if (ebr != AcBr::eOk) {
    27.     acutPrintf(_T("\nbrEnt.set(sol)=%s"),acadErrorStatusText((Acad::ErrorStatus)(Adesk::UInt32)ebr));
    28.     return;
    29.   }
    30.   AcGe::PointContainment pDesc;
    31.   AcBrEntity *pCont = NULL;
    32.   AcBrBrepFaceTraverser brepFaceTrav; brepFaceTrav.setBrep(brEnt);
    33.   AcBr::ErrorStatus err = AcBr::eInvalidInput;
    34.   while (!brepFaceTrav.done()) {
    35.    AcBrFace brFace; brepFaceTrav.getFace(brFace);
    36.    err = brFace.getPointContainment(asPnt3d(pt),pDesc,pCont);
    37.    if (err == Acad::eOk && pDesc == AcGe::kInside) {
    38.      acedAlert(_T("In")); return;
    39.    } else if (err == Acad::eOk && pDesc == AcGe::kOnBoundary) {
    40.      acedAlert(_T("On")); return;
    41.    }
    42.    brepFaceTrav.next();
    43.   }
    44.   if (err == Acad::eOk) {
    45.     acedAlert(_T("Out"));
    46.   } else {
    47.     acedAlert(_T("Unknown error"));
    48.   }
    49.   return;
    50. }
    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-22 09:39
  • 签到天数: 1542 天

    [LV.Master]伴坛终老

     楼主| 发表于 2020-12-28 11:17 | 显示全部楼层

    1. static const double PI = 3.141592653589793;
    2. static double dVal = 0.2;

    3. static double delta(double a1, double a2)
    4. {
    5.         double ang;
    6.         if (a1 > a2 + PI)
    7.                 ang = (a2 + PI + PI) - a1;
    8.         else if (a2 > a1 + PI)
    9.                 ang = a2 - a1 - PI - PI;
    10.         else
    11.                 ang = a2 - a1;
    12.         return ang;
    13. }

    14. static void isPointInside(AcGePoint3d inPt, ads_name ename)
    15. {
    16.         AcDbObjectId objId;
    17.         acdbGetObjectId(objId, ename);
    18.         AcDbObjectPointer<AcDbCurve> pPoly(objId, AcDb::kForRead);
    19.         if (pPoly.openStatus() == Acad::eOk)
    20.         {
    21.                 if (!pPoly->isClosed())
    22.                 {
    23.                         acutPrintf(_T("\n*** Curve is not closed. ")); return;
    24.                 }
    25.                 AcGePoint3d P; acdbUcs2Wcs(asDblArray(inPt), asDblArray(P), false);
    26.                 AcGePoint3d ClosestPoint; pPoly->getClosestPointTo(P, ClosestPoint);
    27.                 if (P.isEqualTo(ClosestPoint))
    28.                 {
    29.                         acutPrintf(_T("\n*** Point is on curve. ")); return;
    30.                 }
    31.                 double ClosestParam, EndParam;
    32.                 pPoly->getParamAtPoint(ClosestPoint, ClosestParam);
    33.                 acdbWcs2Ucs(asDblArray(ClosestPoint), asDblArray(ClosestPoint), false);
    34.                 pPoly->getEndParam(EndParam);
    35.                 double Param1 = 0.0, Param2 = dVal, Deflection = 0.0;
    36.                 AcGePoint3d StartPT; pPoly->getStartPoint(StartPT);
    37.                 acdbWcs2Ucs(asDblArray(StartPT), asDblArray(StartPT), false);
    38.                 double a1 = acutAngle(asDblArray(inPt), asDblArray(StartPT));
    39.                 while (Param2 <= EndParam)
    40.                 {
    41.                         Param2 = min(Param2, EndParam);
    42.                         if (Param1 < ClosestParam && ClosestParam < Param2)
    43.                         {
    44.                                 double a2 = acutAngle(asDblArray(inPt), asDblArray(ClosestPoint));
    45.                                 Deflection = Deflection + delta(a1, a2);
    46.                                 a1 = a2;
    47.                         }
    48.                         AcGePoint3d P;
    49.                         while (pPoly->getPointAtParam(Param2, P) != Acad::eOk)
    50.                                 Param2 = Param2 + dVal;
    51.                         acdbWcs2Ucs(asDblArray(P), asDblArray(P), false);
    52.                         double a2 = acutAngle(asDblArray(inPt), asDblArray(P));
    53.                         Deflection = Deflection + delta(a1, a2);
    54.                         a1 = a2;
    55.                         Param1 = Param2;
    56.                         Param2 = Param2 + dVal;
    57.                 }
    58.                 if (abs(Deflection) > 4)
    59.                         acutPrintf(_T("\n*** Point is inside. "));
    60.                 else
    61.                         acutPrintf(_T("\n*** Point is outside. "));
    62.         }
    63. }

    64. static void LESQptInside17_TESTER(void)
    65. {
    66.         ads_name ename; ads_point ptres; AcGePoint3d pt;
    67.         if (acedEntSel(_T("\nSelect curve:"), ename, ptres) != RTNORM) return;
    68.         if (acedGetPoint(NULL, _T("\nTest point: "), asDblArray(pt)) != RTNORM) return;
    69.         isPointInside(pt, ename);
    70. }
    复制代码
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    推荐膜材品牌上一条 /6 下一条

    进口膜材 国产膜材 pvdf膜材ptfe膜材ETFE膜材
    最好的膜结构公司 一级膜结构资质 膜结构一级资质
    膜结构设计-膜结构十大品牌-etfe设计-充气膜结构
    诺科膜结构
    遨都膜结构设计
    中国膜结构网
    中国空间膜结构

    QQ|申请友链|手机版|中国膜结构论坛