设为首页收藏本站

中国膜结构网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ARX 交叉绑定问题

[复制链接]
  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

    发表于 2020-12-27 13:33 | 显示全部楼层 |阅读模式
    1. Acad::ErrorStatus AuPolyline::subIntersectWith(const AcDbEntity* pEnt,
    2.                                             AcDb::Intersect intType,
    3.                                             AcGePoint3dArray& points,
    4.                                             Adesk::GsMarker thisGsMarker,
    5.                                             Adesk::GsMarker otherGsMarker) const
    6. {
    7.   if (thisGsMarker < 1000) {
    8.     return AcDbPolyline::subIntersectWith(pEnt, intType, points, thisGsMarker, otherGsMarker);
    9.   } else {
    10.     Acad::ErrorStatus es = Acad::eOk;
    11.     objArray::const_iterator it;
    12.     int gs = 1000;
    13.     for(it = m_Array.begin();it!=m_Array.end() && gs < thisGsMarker; it++, gs +=100);
    14.     if (it != m_Array.end() && gs == thisGsMarker)
    15.     {
    16.       AcRxObject* intPtr=0;
    17.       intPtr=(*it).second;
    18.       if (intPtr) {
    19.         AcDbEntity *pSubEnt = AcDbEntity::cast(intPtr);
    20.         if (pSubEnt) {
    21.           es = pSubEnt->intersectWith(pEnt, intType, points,  0 /* thisGsMarker */, otherGsMarker);
    22.           return es;
    23.         }
    24.       }
    25.     }
    26.   }
    27.   return Acad::eOk;
    28. }

    29. Acad::ErrorStatus AuPolyline::subIntersectWith(const AcDbEntity* pEnt,
    30.                                             AcDb::Intersect intType,
    31.                                             const AcGePlane& projPlane,
    32.                                             AcGePoint3dArray& points,
    33.                                             Adesk::GsMarker thisGsMarker,
    34.                                             Adesk::GsMarker otherGsMarker) const
    35. {
    36.   if (thisGsMarker < 1000) {
    37.     return AcDbPolyline::subIntersectWith(pEnt, intType, projPlane, points, thisGsMarker, otherGsMarker);
    38.   } else {
    39.     Acad::ErrorStatus es = Acad::eOk;
    40.     objArray::const_iterator it;
    41.     int gs = 1000;
    42.     for(it=m_Array.begin();it!=m_Array.end() && gs < thisGsMarker;it++, gs +=100);
    43.     if (it != m_Array.end() && gs == thisGsMarker)
    44.     {
    45.       AcRxObject* intPtr=0;
    46.       intPtr=(*it).second;
    47.       if (intPtr) {
    48.         AcDbEntity *pSubEnt = AcDbEntity::cast(intPtr);
    49.         if (pSubEnt) {
    50.           es = pSubEnt->intersectWith(pEnt, intType, projPlane, points,  0 /* thisGsMarker */, otherGsMarker);
    51.           return es;
    52.         }
    53.       }
    54.     }
    55.   }
    56.   return Acad::eOk;
    57. }
    复制代码
    回复


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

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

     楼主| 发表于 2020-12-27 13:33 | 显示全部楼层
    1. //-----------------------------------------------------------------------------
    2. //----- AcDbEntity protocols
    3. Adesk::Boolean AuPolyline::subWorldDraw(AcGiWorldDraw *mode) {
    4.   assertReadEnabled();
    5.   //***************
    6.   // Call base class first
    7.   AcDbPolyline::subWorldDraw(mode);
    8.   acutPrintf(_T("Работает worldDrow\n"));
    9.   double szRef = 5.0;
    10.   // ================================================================
    11.   // DIRECTION AND VERTEX NUMBERING
    12.   int signal = 1;
    13.   double ht2 = szRef / 4.0;
    14.   for (int i = 0; i < numVerts(); i++)
    15.   {
    16.     AcGePoint3d pti;
    17.     this->getPointAt(i, pti);
    18.     // Draw vertex text
    19.     CString strNum;
    20.     strNum.Format(_T("%d"), i);
    21.     AcGePoint3d ptTxt = pti + (AcGeVector3d::kXAxis*ht2) +
    22.       (AcGeVector3d::kYAxis*ht2);
    23.     mode->subEntityTraits().setColor(256); // ByLayer  
    24.     mode->geometry().text(ptTxt, AcGeVector3d::kZAxis,
    25.       AcGeVector3d::kXAxis, ht2, 1.0, 0.0, strNum);

    26.     // Arrow direction
    27.     AcGePoint3d ptj;
    28.     this->getPointAt(i < (numVerts() - 1) ? (i + 1) : 0, ptj);
    29.     AcGeVector3d dir = (ptj - pti).normalize();
    30.     // Side perpendicular vectors
    31.     AcGeVector3d perp = dir;
    32.     perp.rotateBy(3.141592 / 2.0, AcGeVector3d::kZAxis);
    33.     AcGePoint3d pt1 = ptj - (dir*ht2) + (perp*(ht2 / 4.0));
    34.     AcGePoint3d pt2 = ptj - (dir*ht2) - (perp*(ht2 / 4.0));
    35.     AcGePoint3d pts[3];
    36.     pts[0] = ptj;
    37.     pts[1] = pt1;
    38.     pts[2] = pt2;
    39.     // Draw arrow polygon
    40.     mode->subEntityTraits().setFillType(kAcGiFillAlways);
    41.     mode->subEntityTraits().setColor(1); // red
    42.     mode->geometry().polygon(3, pts);
    43.     mode->subEntityTraits().setFillType(kAcGiFillNever);
    44.   }

    45.   //============================================
    46.   // PROXY
    47.   if (mode->regenType() == kAcGiSaveWorldDrawForProxy)
    48.   {
    49.     // Draw dummy text
    50.     CString strTxt = _T("AU Polyline");
    51.     AcGePoint3d ptTxt = GetPolylineCenter();
    52.     mode->geometry().text(ptTxt, AcGeVector3d::kZAxis,
    53.       AcGeVector3d::kXAxis, szRef, 1.0, 0.0, strTxt);
    54.   }

    55.   objArray::iterator it;
    56.   int gs = numVerts();
    57.   for (it = m_Array.begin(); it != m_Array.end(); it++)
    58.   {
    59.     AcDbPolyline *pPline = AcDbPolyline::cast(it->second);
    60.     if (pPline) {
    61.       AcDbVoidPtrArray aSubEnt;
    62.       pPline->explode(aSubEnt);
    63.       for (int i = 0; i < aSubEnt.length(); i++)
    64.       {
    65.         mode->subEntityTraits().setSelectionMarker(++gs);
    66.         static_cast<AcDbEntity*>(aSubEnt[i])->worldDraw(mode);
    67.         delete aSubEnt[i];
    68.       }
    69.     }
    70.     else {
    71.       mode->subEntityTraits().setSelectionMarker(++gs);
    72.       it->second->worldDraw(mode);
    73.     }
    74.   }

    75.   //------ Returning Adesk::kFalse here will force viewportDraw() call
    76.   return (Adesk::kTrue);
    77. }
    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

     楼主| 发表于 2020-12-27 13:33 | 显示全部楼层
    1. Acad::ErrorStatus AuPolyline::subIntersectWith(const AcDbEntity* pEnt,
    2.                                                                                            AcDb::Intersect intType,
    3.                                                                                            AcGePoint3dArray& points,
    4.                                                                                            Adesk::GsMarker thisGsMarker,
    5.                                                                                            Adesk::GsMarker otherGsMarker) const
    6. {
    7.         if (thisGsMarker <= numVerts())
    8.         {
    9.                 return AcDbPolyline::subIntersectWith(pEnt, intType, points, thisGsMarker, otherGsMarker);
    10.         }
    11.         else
    12.         {
    13.                 Acad::ErrorStatus es = Acad::eOk;
    14.                 objArray::const_iterator it;
    15.                 int gs = numVerts()+1;
    16.                 for(it = m_Array.begin();it!=m_Array.end() && gs <= thisGsMarker; it++)
    17.                 {
    18.                         AcRxObject* intPtr=0;
    19.                         intPtr=(*it).second;
    20.                         if (intPtr)
    21.                         {
    22.                                 AcDbEntity *pSubEnt = AcDbEntity::cast(intPtr);
    23.                                 if (pSubEnt)
    24.                                 {
    25.                                         if(AcDbPolyline *pPline = AcDbPolyline::cast(intPtr))
    26.                                         {
    27.                                                 AcDbVoidPtrArray aSubEnt;
    28.                                                 pPline->explode(aSubEnt);
    29.                                                 int length=aSubEnt.length();
    30.                                                 if((gs+length-1)<thisGsMarker) //если маркер не попадает в интервал полилинии
    31.                                                 {
    32.                                                         gs+=length;
    33.                                                         for(int j=0;j<length;j++) delete aSubEnt[j];
    34.                                                         continue;
    35.                                                 }
    36.                                                 else ////если маркер попадает в интервал полилинии
    37.                                                 {
    38.                                                         for (int i = 0; i < length; i++,gs++)
    39.                                                         {
    40.                                                                 if(gs==thisGsMarker)
    41.                                                                 {
    42.                                                                         es = static_cast<AcDbEntity*>(aSubEnt[i])->intersectWith(pEnt, intType, points,
    43.                                                                                 0 /* thisGsMarker */, otherGsMarker);
    44.                                                                         for(int j=i;j<length;j++) delete aSubEnt[j];
    45.                                                                         return es;
    46.                                                                 }
    47.                                                                 else
    48.                                                                 {
    49.                                                                         delete aSubEnt[i];
    50.                                                                 }
    51.                                                         }
    52.                                                 }
    53.                                         } else
    54.                                         {
    55.                                                 if(gs==thisGsMarker)
    56.                                                 {
    57.                                                         es = pSubEnt->intersectWith(pEnt, intType, points,
    58.                                                                 0 /* thisGsMarker */, otherGsMarker);
    59.                                                 }
    60.                                                 gs++;
    61.                                         }
    62.                                 }

    63.                 }
    64.         }
    65.         }

    66.         return Acad::eOk;
    67. }
    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

     楼主| 发表于 2020-12-27 13:33 | 显示全部楼层
    1. Acad::ErrorStatus AuPolyline::subGetOsnapPoints (
    2.         AcDb::OsnapMode osnapMode,
    3.         Adesk::GsMarker gsSelectionMark,
    4.         const AcGePoint3d &pickPoint,
    5.         const AcGePoint3d &lastPoint,
    6.         const AcGeMatrix3d &viewXform,
    7.         AcGePoint3dArray &snapPoints,
    8.         AcDbIntArray &geomIds) const
    9. {
    10.         assertReadEnabled () ;
    11.         switch (osnapMode)
    12.         {
    13.                 case AcDb::kOsModeCen:
    14.                         snapPoints.append(GetPolylineCenter());
    15.                         break;
    16.         }

    17.         Acad::ErrorStatus er;
    18.         objArray::const_iterator it;
    19.         
    20.         //int gs=numVerts();
    21.         for(it=m_Array.begin();it!=m_Array.end();it++)
    22.         {
    23.                         er=(*it).second->getOsnapPoints(osnapMode,gsSelectionMark,pickPoint,
    24.                                 lastPoint,viewXform,snapPoints,geomIds);
    25.                         //if (er!=Acad::eOk) //на штриховке появляется инвалид-индекс?
    26.                         //      return er;
    27.         }
    28.         return (AcDbPolyline::subGetOsnapPoints (osnapMode, gsSelectionMark, pickPoint, lastPoint, viewXform, snapPoints, geomIds)) ;
    29. }
    复制代码
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

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