设为首页收藏本站

中国膜结构网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

对不平行的两条直线进行连接

[复制链接]
  • TA的每日心情
    开心
    2021-6-19 14:40
  • 签到天数: 1539 天

    [LV.Master]伴坛终老

    发表于 2021-2-1 07:57 | 显示全部楼层 |阅读模式
    int seekIntersect()
    {
            int iErrSta = 0;
            Acad::ErrorStatus es = Acad::eOk;

            ads_name en;
            ads_point ptRes;
            iErrSta = acedEntSel( "/n请选择一条曲线:", en, ptRes );
            switch( iErrSta )
            {
            case RTERROR:
                    acedAlert(_T("选择实体不成功!"));
                    return 1;
            case RTCAN:
                    return 0;
            }

            AcDbObjectId enId1;
            acdbGetObjectId( enId1, en );
            AcDbEntity *pObject1;
            CString strLayerName1 = _T("");
            es = acdbOpenObject(pObject1, enId1, AcDb::kForWrite);
            if (Acad::eOk != es)        return 2;
            if ( AcDbLine::desc() == pObject1->isA() )
            {
                    strLayerName1 = pObject1 ->layer();
                    pObject1 ->highlight();
                    pObject1 ->close();
            }
            else
            {
                    CString strClassName = pObject1 ->isA() ->name();
                    pObject1 ->close();
                    acedAlert(_T("选择的实体不是曲线,不能进行处理!"));
                    return 3;
            }
           
            iErrSta = acedEntSel("/n请选择另外一条曲线:", en, ptRes);
            switch(iErrSta)
            {
            case RTERROR:
                    highlightAEntity(enId1, false);
                    acedAlert(_T("选择实体不成功!"));
                    return 4;
            case RTCAN:
                    highlightAEntity(enId1, false);
                    return 0;
            }

            AcDbObjectId enId2;
            acdbGetObjectId(enId2, en);
            AcDbEntity *pObject2;
            CString strLayerName2 = _T("");
            es = acdbOpenObject(pObject2, enId2, AcDb::kForWrite);
            if (AcDbLine::desc() == pObject2 ->isA())
            {
                    strLayerName2 = pObject2 ->layer();
                    pObject2 ->highlight();
                    pObject2 ->close();
            }
            else
            {
                    pObject2 ->close();
                    highlightAEntity(enId1, false);
                    acedAlert(_T("选择的实体不是曲线,不能进行处理!"));
                    return 5;
            }
           
            highlightAEntity(enId1, false);
            highlightAEntity(enId2, false);

            if (strLayerName1 != strLayerName2)
            {
                    acedAlert(_T("两条曲线不在同一层上,不能进行处理!"));
                    return 6;
            }

            AcGePoint3d startPt1, startPt2, endPt1, endPt2;
            AcDbLine* pLine1, *pLine2;
            es = acdbOpenObject(pObject1, enId1, AcDb::kForWrite);
            if (Acad::eOk != es)        return 6;
            if (AcDbLine::desc() == pObject1->isA())
            {
                    pLine1 = AcDbLine::cast(pObject1);
                    startPt1 = pLine1 ->startPoint();
                    endPt1 = pLine1 ->endPoint();
                    if (fabs(startPt1.z) > MINIMUM || fabs(endPt1.z) > MINIMUM);
                    {
                            startPt1.z = 0;
                            endPt1.z = 0;
                            pLine1 ->setStartPoint(startPt1);
                            pLine1 ->setEndPoint(endPt1);
                    }
            }
            else
            {
                    pObject1 ->close();
            }

            es = acdbOpenObject(pObject2, enId2, AcDb::kForWrite);
            if (Acad::eOk != es)
            {
                    pLine1 ->close();
                    return 7;
            }
            if (AcDbLine::desc() == pObject2 ->isA())
            {
                    pLine2 = AcDbLine::cast(pObject2);
                    startPt2 = pLine2 ->startPoint();
                    endPt2 = pLine2 ->endPoint();
                    if (fabs(startPt2.z) > MINIMUM || fabs(endPt2.z) > MINIMUM);
                    {
                            startPt2.z = 0;
                            endPt2.z = 0;
                            pLine2 ->setStartPoint(startPt2);
                            pLine2 ->setEndPoint(endPt2);
                    }
            }
            else
            {
                    pObject2 ->close();
            }

            AcGePoint3dArray ptArray;
            pObject1 ->intersectWith( pObject2, AcDb::kExtendBoth, ptArray );
            if ( 0 == ptArray.length())
            {
                    bool bIsOnCurve = false;
                    pointIsOnCurve(bIsOnCurve, (AcDbCurve*)pObject2, startPt1, Adesk::kTrue);
                    if (bIsOnCurve)
                    {
                            AcGePoint3d tempPt;
                            tempPt = getClosestPt(startPt1, startPt2, endPt2);
                            if (isSame(startPt2, tempPt))
                            {
                                    tempPt = getClosestPt(startPt2, startPt1, endPt1);
                            }
                            else
                            {
                                    tempPt = getClosestPt(endPt2, startPt1, endPt1);

                            }       
                            if (isSame(startPt1, tempPt))
                            {
                                    pLine1 ->setStartPoint(startPt2);
                            }
                            else
                            {
                                    pLine1 ->setEndPoint(startPt2);
                            }
                    }

                    pObject2 ->close();
                    pObject1 ->close();
            }
            else if ( 1 == ptArray.length())
            {
                    AcGePoint3d intersectPt = ptArray[0];
                    AcGePoint3d tempPt = AcGePoint3d::kOrigin;
                    tempPt = getClosestPt(intersectPt, startPt1, endPt1);
                    if (isSame(startPt1, tempPt))
                    {
                            pLine1 ->setStartPoint(intersectPt);
                    }
                    else
                    {
                            pLine1 ->setEndPoint(intersectPt);
                    }
                    pLine1 ->close();
                    tempPt = AcGePoint3d::kOrigin;
                    tempPt = getClosestPt(intersectPt, startPt2, endPt2);
                    if (isSame(startPt2, tempPt))
                    {
                            pLine2 ->setStartPoint(intersectPt);
                    }
                    else
                    {
                            pLine2 ->setEndPoint(intersectPt);
                    }
                    pLine2 ->close();
            }
            return 0;
    }
    回复


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

    使用道具 举报

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

    本版积分规则

    关闭

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

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

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