功能:对不平行的两条直线进行连接,(若是有角度,则以交点连接,若是在同一直线上,但不相连,则把其中的一条连接起来)

注意:本程序目前只能做直线的连接功能,由于防止选择实体时有误,因此对实体所在的图层做了处理,即两条曲线必须是同一图层才能连接

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; }

对不平行的两条直线进行连接相关推荐

  1. opencv求解两条直线的交点

    假设现在有一个点集,需要拟合出最能够表达点集轮廓的几条直线,并求直线之间的交点. 从点集中拟合直线可以采用的方法:随机抽样一致性(RANSAC),霍夫变换(though transform) 思路1 ...

  2. matlab 平行,MATLAB判断两条直线平行

    两条直线平行的判据比较简单,只要斜率相等就可以了.但也有特殊情况,比如平行于y轴的直线斜率没有定义. 综合考虑以上情形,就不难将程序写出来,具体如下: 函数 isparallellines.mfunc ...

  3. 学习OpenCV3:判断两条直线平行,并计算平行距离

    一.问题   已知两条直线 l 1 ( x 1 , y 1 , x 2 , y 2 ) l_1(x_1,y_1,x_2,y_2) l1​(x1​,y1​,x2​,y2​)和 l 2 ( x 3 , y ...

  4. java根据两条直线的四个坐标点证明这两条线平行(计算直线斜率)或者三个点在一条直线上

    第一步:原理: 1.若两条直线斜率存在,则:斜率相等,则这两直线平行; 2.若两条直线斜率都不存在,则这两条直线也平行.所以说,如果两条直线平行,则它们的斜率相等[是错误的] 反过来:若两直线斜率相等 ...

  5. POJ1269:Intersecting Lines(判断两条直线的关系)

    题目:POJ1269 题意:给你两条直线的坐标,判断两条直线是否共线.平行.相交,若相交,求出交点. 思路:直线相交判断.如果相交求交点. 首先先判断是否共线,之后判断是否平行,如果都不是就直接求交点 ...

  6. Java黑皮书课后题第8章:*8.31(几何:交点)编写一个方法,返回两条直线的交点。四个点存放在4*2的二维数组points中。编写一个程序,提示用户输入4个点,并显示交点

    *8.31(几何:交点)编写一个方法,返回两条直线的交点.四个点存放在4*2的二维数组points中.编写一个程序,提示用户输入4个点,并显示交点 题目 题目描述 破题 代码 本题运行实例 题目 题目 ...

  7. 两条直线求交点c语言,C§ 3.3.1两条直线的交点坐标(5页)-原创力文档

    § 3.1两条直线的交点坐标 学习目标 1.掌握判断两直线相交的方法:会求两直线交点坐标: 2.体会判断两直线相交中的数形结合思想. 学习过程 一.课前准备: (预习教材P112~ P114,找出疑 ...

  8. Revit 2011 二次开发之“取得两条直线的交点”

    Revit提供特殊的类和集合来完成这些操作,积累一下.     /// <summary>     /// Utility method for getting the intersect ...

  9. 求空间两条直线之间的距离

    1. 前言 最近老板让写一段空间点匹配的代码, 其中涉及到求空间两直线之间的距离,写起来满费劲的, 这里做一个记录. 2. 处理思路 空间两直线之间的位置关系主要可以分为: 重合, 平行, 相交, 异 ...

最新文章

  1. facebox目标检测改进
  2. 2021-03-28 收敛性常用一阶微分方程
  3. 还在“葛优躺”?伤腰还容易脊椎变形!
  4. mac os mysql 命令_Mac环境下MySQL的安装和基本命令的使用
  5. Web开发中的用户角色权限设计总结
  6. Java—Map集合详解(HashMap/Hashtable/LinkedHashMap/Properties/TreeMap/WeakHashMap/IdentityHashMap/EnumMap)
  7. 正则表达式30分钟入门教程--deerchao
  8. 小程序模拟请求本地json数据文章合集
  9. 喵哈哈村与哗啦啦村的大战(四)(树形DP)
  10. JavaScript之流程控制
  11. 人人网普通登录源码爬取
  12. Linux源码安装pgadmin4,赵彦昌博客 - linux ubuntu 安装pgadmin4
  13. win10开机慢黑屏时间长
  14. Linux下的常用软件集锦
  15. 使用树莓派与微信公众平台对接(python)
  16. 基于Java的电子作业提交系统_基于jsp的网上作业提交系统-JavaEE实现网上作业提交系统 - java项目源码...
  17. 修复Linux下NVidia显卡画面撕裂的问题
  18. cut命令的详细用法
  19. bootstrapTable 根据条件隐藏某列
  20. 如何让孩子保持兴趣,怎么培养孩子读书的兴趣

热门文章

  1. shell脚本通过正则表达式提取 IP 地址
  2. Autoware速腾16线激光雷达定位若干问题
  3. 【教程】Spire.PDF教程:C# 添加或删除 PDF 页面,调整页面顺序
  4. oracle 操作系统升级,学习笔记:Oracle升级 linux操作系统10.2.0.1 升级至 10.2.0.3详细过程...
  5. aix还原Oracle数据库,【案例】Oracle数据恢复思路 Oracle FOR AIX
  6. 人工智能与医疗如何结合
  7. 基于物联网技术的智慧病房管理系统(三)——定时开关灯与信息获取
  8. DS18B20 (by 51单片机)
  9. 中级计算机证书有多少积分,中级会计资格证能积分多少
  10. mysql修改root密码 工具下载_学习mysql root密码修改的方法及工具使用