lshlwy 发表于 2010-10-24 19:15:00

求线上2点之间的长度

<p>我想做一个lisp程序,用户获取到一条线后,求出线上离起点长度为 1&nbsp; 的地方的点A,再求出线上到点A长度为 2 的点B !</p>
<p>请高手帮帮我!或者告知下求线上2点之间线长度的函数,谢谢了!</p>

qcw911 发表于 2010-10-24 19:19:00

<p>distance pt1 pt2</p>

x_s_s_1 发表于 2010-10-24 20:17:00

<p></p>
<p>水平有限基本达到要求,但是书写可能不规范</p>

461045462 发表于 2010-10-25 07:04:00

<p>谢谢楼上</p>
<p>收藏了,下来学习学习</p>
<p>谢谢</p>

lshlwy 发表于 2010-10-25 18:41:00

谢谢3楼,我要的是在曲线上工作的,你的只能在直线上,曲线上能实现吗?

自贡黄明儒 发表于 2010-10-25 19:26:00

<p>楼主的想法很好,如果能实现,很有意义.</p>
<p>看来只能打命令(me)的主意,这只是我的一点想法.</p>

x_s_s_1 发表于 2010-10-26 01:04:00

<p>如楼上所说,用measure命令,measure命令产生的点是放在上一个选折集里的,可以用(ssget "p")调用,但以我的水平,没办法判断点的位置是离起点最近的(这个和你的几何图形,及点移动的轨迹有关),只好自欺欺人了,估计对您用处不大,我只能做到这个地步了,还盼高人出手吧</p>

x_s_s_1 发表于 2010-10-26 01:07:00

如楼上所说,用measure命令,measure命令产生的点是放在上一个选折集里的,可以用(ssget "p")调用,但以我的水平,没办法判断点的位置是离起点最近的(这个和你的几何图形,及点移动的轨迹有关),只好自欺欺人了,估计对您用处不大,我只能做到这个地步了,还盼高人出手吧

alin 发表于 2010-10-27 14:40:00

You have to revise the code a bit to suit your purpose.



;;; PTDI.lsp
;;; Mark points on curve based on input distance to start point
;;; Note: please set point style to be visible.
;;; By Alvin LIN 27/10/2010
;;; email: alin2220@gmail.com
;;;
(DEFUN C:PTDI (/   sel      enpickpt    closetpt
      endparam   startparam len closetptdist
      LOOP   distfoundptrefpt    delta
      dist0   *error*    osmode
       )
(SETQ SEL (ENTSEL "\nSelect a curve: "))
(setq en   (car sel)
pickpt (cadr sel)
)
(defun *error* (msg)
    (setvar "osmode" osmode)
    (princ msg)
    (princ)
)
(setq osmode (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq closestpt (vlax-curve-getclosestpointto en pickpt))
(setq endparam   (vlax-curve-getendparam en)
startparam (vlax-curve-getstartparam en)
)
(if (not (setq len (CurveLength en)))
       (alert (strcat "No length property available for "
      (vla-get-objectname (vlax-ename->vla-object))
      "."
   )
   )
)
(setq closetptdist (vlax-curve-getdistatpoint en closestpt))
(setq LOOP t
dist0 0
)
(if (null delta)
    (setq delta 500)
)
(while LOOP
    (princ "\nInput distance from start point <")
    (princ (rtos (+ dist0 delta) 2 4))
    (setq dist (getreal "> : "))
    (if (= DIST 0)
      (setq LOOP nil)
      (progn
(if (= dist nil)
   (setq dist (+ dist0 delta))
)
(if (and (> dist 0) (<= dist len))
   (progn
   (if (< closetptdist (* len 0.5))
       (progn
(setq foundpt (vlax-curve-getpointatdist en dist))
(command "point" (trans foundpt 0 1))
       )
       (progn
(setq
    foundpt (vlax-curve-getpointatdist en (- len dist))
)
(command "point" (trans foundpt 0 1))
       )
   ) ;if
   (setq delta (- dist dist0))
   (setq dist0 (+ dist0 delta))
   ) ;progn
   (princ (strcat "\nDistance input must be > 0 and <= "
    (rtos len 2 4)
    "."
   )
   )
)
      ) ;progn
    )
) ;while
(setvar "OSMODE" osmode)
(princ)
)
(defun CurveLength (obj / rtn endparam)
(if (not (vl-catch-all-error-p
      (setq endparam
      (vl-catch-all-apply 'vlax-curve-getendparam (list obj))
      )
    )
      )
    (if (setq rtn (vlax-curve-getdistatparam obj endparam))
      rtn
      nil
    )
    nil
)
)

zark 发表于 2010-10-27 15:27:00

<p>ALIN 强</p>
页: [1] 2
查看完整版本: 求线上2点之间的长度