找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 31|回复: 0

AutoLisp生成统一平面的计算交点

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-9-27 18:46:20 | 显示全部楼层 |阅读模式
[生成统一平面的计算交点,再返回到线上,但存在个bug,vlax-curve-getClosestPointTo 是垂直方向最近点,存在狠斜时坐标返回错位,使用vlax-curve-getClosestPointToProjection,部分情况下投影点也错了,还有其他方法吗

  1. (defun getIntersectwith        (obj          cutobj   /            typ             cpobj
  2.                          pte          pts           ptc            intPoints
  3.                          entobj          entcpobj objlen   ptcls    FunMap
  4.                          ptdt
  5.                         )
  6.   (defun FunMap        (x)
  7.     (vlax-curve-getClosestPointTo
  8.       obj
  9.       (ZC_GETCLOSESTPOINTTO obj x)
  10.       t
  11.     )
  12.   )
  13.   (setq intPoints (vlax-invoke obj 'intersectwith cutobj acextendnone))
  14.   ;;获取交点
  15.   (if (or (not intPoints) (= (type intPoints) vlax-vbEmpty))
  16.     (progn
  17.       (setq cpobj (CopynewObj obj))
  18.       (setq typ (vla-get-ObjectName obj))
  19.       (cond
  20.         ((MEMBER typ '("AcDbPolyline" "AcDb2dPolyline"))
  21.          (VLA-PUT-ELEVATION cpobj 0)
  22.         )
  23.         ((= typ "AcDbLine")
  24.          (set3dPtToZero cpobj "StartPoint")
  25.          (set3dPtToZero cpobj "endPoint")
  26.         )
  27.         ((MEMBER typ '("AcDbArc" "AcadEllipse"))
  28.          (set3dPtToZero cpobj "StartPoint")
  29.          (set3dPtToZero cpobj "endPoint")
  30.          (set3dPtToZero cpobj "Center")
  31.         )
  32.         ((= typ "AcDbCircle")
  33.          (set3dPtToZero cpobj "Center")
  34.         )
  35.         ((MEMBER typ '("AcDb3dPolyline" "AcDbMLine"))
  36.          (set3dPtstoZero cpobj "Coordinates")
  37.         )
  38.         ((= typ "AcDbSpline")
  39.          (set3dPtstoZero cpobj "FitPoints")
  40.         )
  41.         ((MEMBER typ '("AcDbRay " "AcDbXline "))
  42.          (set3dPtToZero cpobj "BasePoint")
  43.          (set3dPtToZero cpobj "SecondPoint")
  44.         )
  45.       )
  46.       (setq intPoints
  47.              (vlax-invoke cpobj 'intersectwith cutobj acextendnone)
  48.       )
  49.       (if (setq intPoints (LST3D->PTLIST intPoints))
  50.         (setq intPoints (mapcar 'FunMap intPoints))
  51.       )
  52.       (vla-delete cpobj)
  53.       (vl-remove 'nil intPoints)
  54.     )
  55.     (LST3D->PTLIST intPoints)
  56.   )
  57. )
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-27 10:14 , Processed in 0.132460 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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