找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6896|回复: 23

[已解决] 求用一条多段线打断与它投影到平面上相交的一组等高线

[复制链接]
发表于 2014-4-21 21:25:55 | 显示全部楼层 |阅读模式
悬赏200D豆已解决
本帖最后由 newer 于 2021-2-4 05:22 编辑

我想用一条多段线打断与它投影到平面上相交的等高线,哪位高手能帮我写一个吗?
这些等高线Z值可以为0或其它高程值。
我的设想时,计算到了它们两个的空间虚拟交点,得到XY坐标,再让打断命令去捕捉这个点来打断。
注意结果中,等高线的Z值不能归零。


最佳答案

查看完整内容

你不会改个过滤条件都不会吧!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-4-21 21:25:56 | 显示全部楼层

你不会改个过滤条件都不会吧!
  1. (defun c:tt (/ e ss pts)
  2.   (if
  3.     (and (setq
  4.            e (car (xdrx_entsel "\mPick Pline: " '((0 . "*LINE"))))
  5.          )
  6.          (setq pts (xdrx_getsamplept e))
  7.          (setq ss (ssget "_F" pts '((0 . "*line,arc,circle,ellipse"))))
  8.     )
  9.      (progn
  10.        (mapcar '(lambda        (x / e pts)
  11.                   (setq        e    (car x)
  12.                         pams (vl-sort
  13.                                (mapcar
  14.                                  '(lambda (b)
  15.                                     (vlax-curve-getparamatpoint
  16.                                       e
  17.                                       (vlax-curve-getclosestpointto e b)
  18.                                     )
  19.                                   )
  20.                                  (cadr x)
  21.                                )
  22.                                '<
  23.                              )
  24.                   )
  25.                   (apply 'xdrx_curve_getsplitcurves (cons e pams))
  26.                 )
  27.                (mapcar '(lambda        (a)
  28.                           (list        (cadr a)
  29.                                 (mapcar 'cadr (cdddr a))
  30.                           )
  31.                         )
  32.                        (ssnamex ss)
  33.                )
  34.        )
  35.      )
  36.   )
  37.   (princ)
  38. )

点评

我改了,运行是循环死胡同  详情 回复 发表于 2014-4-23 18:05
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2014-4-22 08:54:46 | 显示全部楼层
你在这问过和这个类似问题,忘了?

用 Pline 的点 F 模式去选择等高线,ssnamex 就有交点了

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-4-22 08:59:52 | 显示全部楼层
不记得,我找找看
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-4-22 11:45:45 | 显示全部楼层
(DEFUN C:TT()
(vl-load-com)
(setq m_ent1 (car (entsel "\n请选择剖切线: ")))
  (setq m_ent2 (car (entsel "\n请选择一条等高线: ")))
(setq data(entget    m_ent2 ))
(setq layer(assoc 8 data))
  (setq 层名(CDR layer))

  (SETQ SS (SSGET "X" ( list (cons 8  层名)  (cons 0  "LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE"))))
(SSSETFIRST SS)
(setq ii 0)
(repeat (sslength ss);循环选择集长度
   (setq 单个图元   (ssname ss ii))
(setq ZL-GETINTERS  (m_IntersectWith m_ent1 单个图元))
(setq 高程 (CADDR (vlax-curve-getStartPoint 单个图元))
;;;      ps2(vlax-curve-getEndPoint m_ent2)
      )
   (foreach n ZL-GETINTERS
;;;     (print n)
(setq xzb (car n))
(setq yzb (cadr n))

  (entmake (list (cons 0  "TEXT") (cons 1 (vl-princ-to-string 高程)) (cons 10 (list  XZB YZB 高程))
               (cons 40 2.5)
               (cons 8 "0000用于图元属性快速输出利用(简称“属性”图层)")
               ))
                   ; 在下面画圆,这样就可以直接用“”读出里程及偏移,而孔号就是该点高程
                   (entmake (list '(0 . "CIRCLE") (cons 10 (list  XZB YZB 高程)) (cons 40 1.25)(cons 8 "0000用于图元属性快速输出利用(简称“属性”图层)")))
                    (command "break" 单个图元 "f" (list  XZB YZB 高程) (list  XZB YZB 高程))
                    ; (command "LINE"  (LIST XZB YZB) '(0 0))

                  

    )

   
  (setq ii (1+ ii))
)

  
  
;;;  (sssetfirst nil ss)
  )


(defun m_IntersectWith(m_ent1 单个图元 / m_obj1 m_obj2 m_objcopy1 m_objcopy2 m_jdtab m_jdtab1 i)
; 来源:3楼 [求助]任意两条线的交点坐标-AutoLISP/Visual LISP 编程技术-CAD论坛-明经CAD社区 - Powered by Discuz!
; http://bbs.mjtd.com/forum.php?mod=viewthread&tid=79868
;;适用对象: Line、Polyline、LWPolyline、Circle、Arc、Ellipse、3dPolyline、Spline
  ;;支持求空间虚交点,但Z坐标始终为0.0,要求Z坐标,请用(vlax-curve-getClosestPointToProjection)函数
  (setq m_obj1 (vlax-ename->vla-object m_ent1))
  (setq m_obj2 (vlax-ename->vla-object 单个图元))
  
  (setq m_objcopy1 (vla-copy m_obj1));;复制第一条曲线实体
  (setq m_objcopy2 (vla-copy m_obj2));;复制第二条曲线实体
  
  (setq m_objcopy1 (m_ShadowToXY m_objcopy1));;得到投影实体
  (setq m_objcopy2 (m_ShadowToXY m_objcopy2));;得到投影实体
  
  (setq m_jdtab1 (vla-intersectwith m_objcopy1 m_objcopy2 acExtendnone));;得到交点集
  
  (if (> (vlax-safearray-get-u-bound (vlax-variant-value m_jdtab1) 1) 1);;判断有无交点
      (progn
(setq m_jdtab1 (vlax-safearray->list (vlax-variant-value m_jdtab1)));;safearray数组转换为list表
(setq i 0)
(repeat (/ (length m_jdtab1) 3)
   (setq m_jd (list (nth i m_jdtab1) (nth (+ 1 i) m_jdtab1) (nth (+ 2 i) m_jdtab1)));;取得一个交点
   (setq m_jdtab (cons m_jd m_jdtab));;构造交点表((第一个交点) (第二个交点)。。。)
   (setq i (+ 3 i))
)
      )
      (princ"\n两曲线无交点!")
  )
  
  (vla-delete m_objcopy1);;删除复制的第一条曲线实体
  (vla-delete m_objcopy2);;删除复制的第二条曲线实体
  
  (setq m_jdtab m_jdtab);;返回交点表,无交点返回nil
)
(defun m_ShadowToXY(m_obj / m_objname m_pts m_pts1 i)
  ;;对曲线实体m_obj创建一个投影至xy平面的曲线实体,即对曲线实体上每个控制点的z坐标值置为0.0
  ;;输入曲线实体(vla对象)
  ;;返回投影实体(vla对象)
  (setq m_objname (vla-get-objectname m_obj));;取得实体的类型名称
;;;  (m_princ "\nObjectName:" m_objname)
  (cond
    ((= "AcDbSpline" m_objname);;样条曲线(Spline)
     (setq i 0)
     (setq m_pts (vlax-variant-value (vla-get-fitpoints m_obj)));;取得样条曲线的拟合点
     (setq m_pts1 (vlax-variant-value (vla-get-controlpoints m_obj)));;取得样条曲线的控制点
     (repeat (vla-get-numberoffitpoints m_obj);;循环
       (vlax-safearray-put-element m_pts (+ i 2) 0.0);;改变每个拟合点的z值为0.0
       (setq i (+ i 3))
     )
     (vla-put-fitpoints m_obj m_pts);;更改曲线拟合点属性
     (setq i 0)
     
     (repeat (vla-get-numberofcontrolpoints m_obj);;循环
       (vlax-safearray-put-element m_pts1 (+ i 2) 0.0);;改变每个控制点的z值为0.0
       (setq i (+ i 3))
     )
     (vla-put-controlpoints m_obj m_pts1);;更改曲线控制点属性
    )
   
    ((= "AcDb3dPolyline" m_objname);;三维多段线(3dpolyline)
     (setq i 0)
     (setq m_pts (vlax-variant-value (vla-get-coordinates m_obj)));;取得3维多段线的控制点
     (repeat (/ (length (vlax-safearray->list m_pts)) 3)
       (vlax-safearray-put-element m_pts (+ i 2) 0.0)
       (setq i (+ i 3))
     )
     (vla-put-coordinates m_obj m_pts)
    )
   
    ((= "AcDbLine" m_objname);;直线(line)
     (setq i 0)
     (setq m_pts (vlax-variant-value (vla-get-startpoint m_obj)));;取得直线的起点座标
     (setq m_pts1 (vlax-variant-value (vla-get-endpoint m_obj)));;取得直线的端点座标
     (vlax-safearray-put-element m_pts 2 0.0);;改变起点座标z值为0.0
     (vlax-safearray-put-element m_pts1 2 0.0)
     (vla-put-startpoint m_obj m_pts)
     (vla-put-endpoint m_obj m_pts1)
    )
    ((or (= "AcDbCircle" m_objname);;园(circle)
  (= "AcDbArc" m_objname);;圆弧(arc)
  (= "AcDbEllipse" m_objname);;椭圆及椭圆弧(ellipse)
     )
     (setq m_pts (vlax-variant-value (vla-get-center m_obj)));;取得中心点座标
     (vlax-safearray-put-element m_pts 2 0.0);;改变中心点座标z值为0.0
     (vla-put-center m_obj m_pts)
    )
   
    ((or (= "AcDbPolyline" m_objname);;多段线(polyline、lwpolyline)
  (= "AcDb2dPolyline" m_objname);;拟合的2维多段线(polyline、lwpolyline)
     )
     (vla-put-elevation m_obj 0.0);;改变标高值为0.0
    )
  )
  (setq m_obj m_obj)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-4-22 11:46:36 | 显示全部楼层
下面写法怎么打断命令运行错误啊,其它都是正确的。
(DEFUN C:TT()
(vl-load-com)
(setq m_ent1 (car (entsel "\n请选择剖切线: ")))
  (setq m_ent2 (car (entsel "\n请选择一条等高线: ")))
(setq data(entget    m_ent2 ))
(setq layer(assoc 8 data))
  (setq 层名(CDR layer))

  (SETQ SS (SSGET "X" ( list (cons 8  层名)  (cons 0  "LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE"))))
(SSSETFIRST SS)
(setq ii 0)
(repeat (sslength ss);循环选择集长度
   (setq 单个图元   (ssname ss ii))
(setq ZL-GETINTERS  (m_IntersectWith m_ent1 单个图元))
(setq 高程 (CADDR (vlax-curve-getStartPoint 单个图元))
;;;      ps2(vlax-curve-getEndPoint m_ent2)
      )
   (foreach n ZL-GETINTERS
;;;     (print n)
(setq xzb (car n))
(setq yzb (cadr n))

  (entmake (list (cons 0  "TEXT") (cons 1 (vl-princ-to-string 高程)) (cons 10 (list  XZB YZB 高程))
               (cons 40 2.5)
               (cons 8 "0000用于图元属性快速输出利用(简称“属性”图层)")
               ))
                   ; 在下面画圆,这样就可以直接用“”读出里程及偏移,而孔号就是该点高程
                   (entmake (list '(0 . "CIRCLE") (cons 10 (list  XZB YZB 高程)) (cons 40 1.25)(cons 8 "0000用于图元属性快速输出利用(简称“属性”图层)")))
                    (command "break" 单个图元 "f" (list  XZB YZB 高程) (list  XZB YZB 高程))
                    ; (command "LINE"  (LIST XZB YZB) '(0 0))

                  

    )

   
  (setq ii (1+ ii))
)

  
  
;;;  (sssetfirst nil ss)
  )


(defun m_IntersectWith(m_ent1 单个图元 / m_obj1 m_obj2 m_objcopy1 m_objcopy2 m_jdtab m_jdtab1 i)
; 来源:3楼 [求助]任意两条线的交点坐标-AutoLISP/Visual LISP 编程技术-CAD论坛-明经CAD社区 - Powered by Discuz!
; http://bbs.mjtd.com/forum.php?mod=viewthread&tid=79868
;;适用对象: Line、Polyline、LWPolyline、Circle、Arc、Ellipse、3dPolyline、Spline
  ;;支持求空间虚交点,但Z坐标始终为0.0,要求Z坐标,请用(vlax-curve-getClosestPointToProjection)函数
  (setq m_obj1 (vlax-ename->vla-object m_ent1))
  (setq m_obj2 (vlax-ename->vla-object 单个图元))
  
  (setq m_objcopy1 (vla-copy m_obj1));;复制第一条曲线实体
  (setq m_objcopy2 (vla-copy m_obj2));;复制第二条曲线实体
  
  (setq m_objcopy1 (m_ShadowToXY m_objcopy1));;得到投影实体
  (setq m_objcopy2 (m_ShadowToXY m_objcopy2));;得到投影实体
  
  (setq m_jdtab1 (vla-intersectwith m_objcopy1 m_objcopy2 acExtendnone));;得到交点集
  
  (if (> (vlax-safearray-get-u-bound (vlax-variant-value m_jdtab1) 1) 1);;判断有无交点
      (progn
(setq m_jdtab1 (vlax-safearray->list (vlax-variant-value m_jdtab1)));;safearray数组转换为list表
(setq i 0)
(repeat (/ (length m_jdtab1) 3)
   (setq m_jd (list (nth i m_jdtab1) (nth (+ 1 i) m_jdtab1) (nth (+ 2 i) m_jdtab1)));;取得一个交点
   (setq m_jdtab (cons m_jd m_jdtab));;构造交点表((第一个交点) (第二个交点)。。。)
   (setq i (+ 3 i))
)
      )
      (princ"\n两曲线无交点!")
  )
  
  (vla-delete m_objcopy1);;删除复制的第一条曲线实体
  (vla-delete m_objcopy2);;删除复制的第二条曲线实体
  
  (setq m_jdtab m_jdtab);;返回交点表,无交点返回nil
)
(defun m_ShadowToXY(m_obj / m_objname m_pts m_pts1 i)
  ;;对曲线实体m_obj创建一个投影至xy平面的曲线实体,即对曲线实体上每个控制点的z坐标值置为0.0
  ;;输入曲线实体(vla对象)
  ;;返回投影实体(vla对象)
  (setq m_objname (vla-get-objectname m_obj));;取得实体的类型名称
;;;  (m_princ "\nObjectName:" m_objname)
  (cond
    ((= "AcDbSpline" m_objname);;样条曲线(Spline)
     (setq i 0)
     (setq m_pts (vlax-variant-value (vla-get-fitpoints m_obj)));;取得样条曲线的拟合点
     (setq m_pts1 (vlax-variant-value (vla-get-controlpoints m_obj)));;取得样条曲线的控制点
     (repeat (vla-get-numberoffitpoints m_obj);;循环
       (vlax-safearray-put-element m_pts (+ i 2) 0.0);;改变每个拟合点的z值为0.0
       (setq i (+ i 3))
     )
     (vla-put-fitpoints m_obj m_pts);;更改曲线拟合点属性
     (setq i 0)
     
     (repeat (vla-get-numberofcontrolpoints m_obj);;循环
       (vlax-safearray-put-element m_pts1 (+ i 2) 0.0);;改变每个控制点的z值为0.0
       (setq i (+ i 3))
     )
     (vla-put-controlpoints m_obj m_pts1);;更改曲线控制点属性
    )
   
    ((= "AcDb3dPolyline" m_objname);;三维多段线(3dpolyline)
     (setq i 0)
     (setq m_pts (vlax-variant-value (vla-get-coordinates m_obj)));;取得3维多段线的控制点
     (repeat (/ (length (vlax-safearray->list m_pts)) 3)
       (vlax-safearray-put-element m_pts (+ i 2) 0.0)
       (setq i (+ i 3))
     )
     (vla-put-coordinates m_obj m_pts)
    )
   
    ((= "AcDbLine" m_objname);;直线(line)
     (setq i 0)
     (setq m_pts (vlax-variant-value (vla-get-startpoint m_obj)));;取得直线的起点座标
     (setq m_pts1 (vlax-variant-value (vla-get-endpoint m_obj)));;取得直线的端点座标
     (vlax-safearray-put-element m_pts 2 0.0);;改变起点座标z值为0.0
     (vlax-safearray-put-element m_pts1 2 0.0)
     (vla-put-startpoint m_obj m_pts)
     (vla-put-endpoint m_obj m_pts1)
    )
    ((or (= "AcDbCircle" m_objname);;园(circle)
  (= "AcDbArc" m_objname);;圆弧(arc)
  (= "AcDbEllipse" m_objname);;椭圆及椭圆弧(ellipse)
     )
     (setq m_pts (vlax-variant-value (vla-get-center m_obj)));;取得中心点座标
     (vlax-safearray-put-element m_pts 2 0.0);;改变中心点座标z值为0.0
     (vla-put-center m_obj m_pts)
    )
   
    ((or (= "AcDbPolyline" m_objname);;多段线(polyline、lwpolyline)
  (= "AcDb2dPolyline" m_objname);;拟合的2维多段线(polyline、lwpolyline)
     )
     (vla-put-elevation m_obj 0.0);;改变标高值为0.0
    )
  )
  (setq m_obj m_obj)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-4-22 23:43:10 来自手机 | 显示全部楼层
选线,xdrx_getsamplept , ssget f 选择等高线,ssnamex 选择集,对每条线如果多余一个点,按param排序,逐个使用xdrx_curve_getsplitcurves

点评

朋友,能否帮我搞定一下,在原代码上修改。我自己不行啊。 如果是Z等于0的可以,Z不等于0不行  详情 回复 发表于 2014-4-23 07:52
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-4-23 07:52:47 | 显示全部楼层
st788796 发表于 2014-4-22 23:43
选线,xdrx_getsamplept , ssget f 选择等高线,ssnamex 选择集,对每条线如果多余一个点,按param排序,逐 ...

朋友,能否帮我搞定一下,在原代码上修改。我自己不行啊。
如果是Z等于0的可以,Z不等于0不行
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-4-23 08:21:10 来自手机 | 显示全部楼层
清风明月10 发表于 2014-4-23 07:52
朋友,能否帮我搞定一下,在原代码上修改。我自己不行啊。
如果是Z等于0的可以,Z不等于0不行

给你说了算法,你的代码太罗嗦

点评

它们的交点我是算准了,就是没有办法用交点坐标打断它,可能是因为它的Z值为0的原因。我只需要你解决这个问题  详情 回复 发表于 2014-4-23 11:58
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-4-23 11:58:22 | 显示全部楼层
st788796 发表于 2014-4-23 08:21
给你说了算法,你的代码太罗嗦

它们的交点我是算准了,就是没有办法用交点坐标打断它,可能是因为它的Z值不为0的原因。我只需要你解决这个问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-4-23 12:25:31 来自手机 | 显示全部楼层
清风明月10 发表于 2014-4-23 11:58
它们的交点我是算准了,就是没有办法用交点坐标打断它,可能是因为它的Z值不为0的原因。我只需要你解决这 ...

打断用xdrx_curve_getsplitcurves
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-4-23 16:41:12 | 显示全部楼层
清风明月10 发表于 2014-4-23 11:58
它们的交点我是算准了,就是没有办法用交点坐标打断它,可能是因为它的Z值不为0的原因。我只需要你解决这 ...

给你说了算法,几句话就可以完成
  1. (defun c:tt (/ e ss pts)
  2.   (if
  3.     (and (setq
  4.            e (car (xdrx_entsel "\mPick Pline: " '((0 . "LWPOLYLINE"))))
  5.          )
  6.          (setq pts (xdrx_getsamplept e))
  7.          (setq ss (ssget "_F" pts))
  8.     )
  9.      (progn
  10.        (mapcar '(lambda        (x / e pts)
  11.                   (setq        e    (car x)
  12.                         pams (vl-sort
  13.                                (mapcar
  14.                                  '(lambda (b)
  15.                                     (vlax-curve-getparamatpoint
  16.                                       e
  17.                                       (vlax-curve-getclosestpointto e b)
  18.                                     )
  19.                                   )
  20.                                  (cadr x)
  21.                                )
  22.                                '<
  23.                              )
  24.                   )
  25.                   (apply 'xdrx_curve_getsplitcurves (cons e pams))
  26.                 )
  27.                (mapcar '(lambda        (a)
  28.                           (list        (cadr a)
  29.                                 (mapcar 'cadr (cdddr a))
  30.                           )
  31.                         )
  32.                        (ssnamex ss)
  33.                )
  34.        )
  35.      )
  36.   )
  37.   (princ)
  38. )

点评

帮我改成打断线可以为直线及各种类型多段线吧,最好是“*LINE”. 谢谢您!  详情 回复 发表于 2014-4-23 17:09
我试了,连线都选不中啊,你试试看看。我也试着改成适用于所有类型线的代码  详情 回复 发表于 2014-4-23 16:57
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-4-23 16:57:58 | 显示全部楼层
st788796 发表于 2014-4-23 16:41
给你说了算法,几句话就可以完成

我试了,连线都选不中啊,你试试看看。我也试着改成适用于所有类型线的代码

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-4-23 17:09:54 | 显示全部楼层
st788796 发表于 2014-4-23 16:41
给你说了算法,几句话就可以完成

帮我改成打断线可以为直线及各种类型多段线吧,最好是“*LINE”.
{:soso_e100:}谢谢您!

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-4-23 17:17:59 | 显示全部楼层
清风明月10 发表于 2014-4-23 17:09
帮我改成打断线可以为直线及各种类型多段线吧,最好是“*LINE”.
谢谢您!

你试过了吗?
拾取线为 Pline, 断开的实体没有加过滤,是一个Bug,自己加上过滤条件

点评

我不停地在试,路不通。我水平低,帮我搞定一下,好吗?  详情 回复 发表于 2014-4-23 17:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-19 06:35 , Processed in 0.564234 second(s), 68 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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